diff --git a/package-lock.json b/package-lock.json
index a8d9428..6e0ba22 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,15 +19,18 @@
"bootstrap": "5.3.3",
"chart.js": "^4.4.3",
"dotenv": "^16.4.5",
- "framer-motion": "^11.1.5",
+ "framer-motion": "^11.5.4",
"js-cookie": "^3.0.5",
+ "leaflet": "^1.9.4",
"react": "^18.2.0",
"react-apexcharts": "^1.4.1",
"react-beautiful-dnd": "^13.1.1",
"react-chartjs-2": "^5.2.0",
"react-dom": "^18.2.0",
+ "react-dropzone": "^14.2.3",
"react-hook-form": "^7.51.3",
"react-icons": "^5.1.0",
+ "react-leaflet": "^4.2.1",
"react-quill": "^0.0.2",
"react-redux": "^9.1.1",
"react-router-dom": "^6.22.3",
@@ -2019,6 +2022,16 @@
"url": "https://opencollective.com/popperjs"
}
},
+ "node_modules/@react-leaflet/core": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz",
+ "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==",
+ "peerDependencies": {
+ "leaflet": "^1.9.0",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ }
+ },
"node_modules/@reduxjs/toolkit": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.3.tgz",
@@ -2836,6 +2849,14 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
+ "node_modules/attr-accept": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz",
+ "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -3731,6 +3752,17 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/file-selector": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz",
+ "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
@@ -3833,9 +3865,9 @@
}
},
"node_modules/framer-motion": {
- "version": "11.1.5",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.1.5.tgz",
- "integrity": "sha512-ogK5fc0GBUT3AjzMXPx7f74m5V1ByRqkKQARBVHpdkYTNDxb/WriANYD+5JBo1wklQQJ1HayDZtmofQLqZFcbw==",
+ "version": "11.5.4",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.5.4.tgz",
+ "integrity": "sha512-E+tb3/G6SO69POkdJT+3EpdMuhmtCh9EWuK4I1DnIC23L7tFPrl8vxP+LSovwaw6uUr73rUbpb4FgK011wbRJQ==",
"dependencies": {
"tslib": "^2.4.0"
},
@@ -4660,6 +4692,11 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/leaflet": {
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -5252,6 +5289,22 @@
"react": "^18.2.0"
}
},
+ "node_modules/react-dropzone": {
+ "version": "14.2.3",
+ "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz",
+ "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==",
+ "dependencies": {
+ "attr-accept": "^2.2.2",
+ "file-selector": "^0.6.0",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">= 10.13"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8 || 18.0.0"
+ }
+ },
"node_modules/react-fast-compare": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
@@ -5307,6 +5360,19 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
+ "node_modules/react-leaflet": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz",
+ "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==",
+ "dependencies": {
+ "@react-leaflet/core": "^2.1.0"
+ },
+ "peerDependencies": {
+ "leaflet": "^1.9.0",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ }
+ },
"node_modules/react-quill": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/react-quill/-/react-quill-0.0.2.tgz",
diff --git a/package.json b/package.json
index 2ee0f0e..cd4b870 100644
--- a/package.json
+++ b/package.json
@@ -21,15 +21,18 @@
"bootstrap": "5.3.3",
"chart.js": "^4.4.3",
"dotenv": "^16.4.5",
- "framer-motion": "^11.1.5",
+ "framer-motion": "^11.5.4",
"js-cookie": "^3.0.5",
+ "leaflet": "^1.9.4",
"react": "^18.2.0",
"react-apexcharts": "^1.4.1",
"react-beautiful-dnd": "^13.1.1",
"react-chartjs-2": "^5.2.0",
"react-dom": "^18.2.0",
+ "react-dropzone": "^14.2.3",
"react-hook-form": "^7.51.3",
"react-icons": "^5.1.0",
+ "react-leaflet": "^4.2.1",
"react-quill": "^0.0.2",
"react-redux": "^9.1.1",
"react-router-dom": "^6.22.3",
diff --git a/src/App.jsx b/src/App.jsx
index 83b85fd..7b9df3d 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -18,6 +18,14 @@ import WelcomeToOptifii from "./Pages/Onboarding/WelcomeToOptifii";
import LoginPhoneNumber from "./Pages/Onboarding/LoginPhoneNumber";
import LoginEmailAddress from "./Pages/Onboarding/LoginEmailAddress";
import LoginEmailOtp from "./Pages/Onboarding/LoginOtp";
+import LoginEkyc from "./Pages/Onboarding/LoginEkyc";
+import MinimumKyc from "./Pages/Onboarding/MinimumKyc";
+import FullKyc from "./Pages/Onboarding/FullKyc";
+import FullKycLocation from "./Pages/Onboarding/FullKycLocation";
+import FullKycQandA from "./Pages/Onboarding/FullKycQandA";
+import FullKycFaceVerification from "./Pages/Onboarding/FullKycFaceVerification";
+import FullKycAadharVerification from "./Pages/Onboarding/FullKycAadharVerification";
+import FullKycPanVerification from "./Pages/Onboarding/FullKycPanVerification";
const App = () => {
// const { isAuthenticate } = useSelector((state) => state?.auth);
@@ -60,6 +68,14 @@ const App = () => {
} />
} />
} />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
{
{/* Center Navigation */}
-
+
Home
About Us
diff --git a/src/Pages/Onboarding/FullKyc.jsx b/src/Pages/Onboarding/FullKyc.jsx
new file mode 100644
index 0000000..40e7288
--- /dev/null
+++ b/src/Pages/Onboarding/FullKyc.jsx
@@ -0,0 +1,132 @@
+import React, { useState } from 'react';
+import FullKycFrame from './FullKycFrame';
+import { Box, Container, Text, HStack, Stack, Stepper, Step, StepIndicator, StepStatus, StepSeparator, useSteps, StepIcon, List, ListItem, ListIcon } from '@chakra-ui/react';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton';
+import { useNavigate } from 'react-router-dom';
+import { ChevronRightIcon } from '@chakra-ui/icons';
+
+const FullKyc = () => {
+
+ const steps = [
+ { description: 'Location' },
+ { description: 'Q and A' },
+ { description: 'Face verification' },
+ { description: 'Aadhar Verification' },
+ { description: 'Pan Verification' },
+ ];
+
+ const navigate = useNavigate();
+
+
+ // Stepper configuration
+ const { activeStep } = useSteps({
+ index: 0,
+ count: steps.length,
+ });
+
+ return (
+
+
+
+
+
+
+ Full KYC
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna.
+
+
+
+
+
+ {steps.map((step, index) => (
+
+
+ } />
+
+
+
+ ))}
+
+
+ {steps.map((step, index) => (
+
+ {step.description}
+
+ ))}
+
+
+
+
+
+
+ Instructions to be followed
+
+
+ Build trust by verifying your identity
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit
+
+
+
+
+
+
+
+ navigate("/full-kyc-location")}
+ w={'300px'}
+ title={'Proceed'}
+ />
+
+
+
+
+
+
+
+
+ );
+};
+
+export default FullKyc;
diff --git a/src/Pages/Onboarding/FullKycAadharVerification.jsx b/src/Pages/Onboarding/FullKycAadharVerification.jsx
new file mode 100644
index 0000000..8753630
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycAadharVerification.jsx
@@ -0,0 +1,79 @@
+import React, { useState, useCallback } from 'react';
+import FullKycAadharVerificationFrame from './FullKycAadharVerificationFrame';
+import { Box, HStack, Image, Text, VStack } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton';
+import { SlCloudUpload } from "react-icons/sl";
+import { useDropzone } from 'react-dropzone';
+
+const FullKycAadharVerification = () => {
+ const [selectedImage, setSelectedImage] = useState(null);
+ const navigate = useNavigate();
+
+ // Dropzone setup
+ const onDrop = useCallback((acceptedFiles) => {
+ const file = acceptedFiles[0];
+ if (file) {
+ setSelectedImage(URL.createObjectURL(file));
+ }
+ }, []);
+
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
+ onDrop,
+ accept: 'image/*',
+ });
+
+ return (
+
+
+
+ Upload Aadhar Card
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.
+
+
+
+
+
+ {selectedImage ? (
+
+ ) : (
+ <>
+
+
+ {isDragActive ? 'Drop the image here...' : 'Upload from gallery'}
+
+ >
+ )}
+
+
+
+
+
+ navigate("/full-kyc-pan-verification")}
+ w={"80%"} />
+
+
+ );
+};
+
+export default FullKycAadharVerification;
diff --git a/src/Pages/Onboarding/FullKycAadharVerificationFrame.jsx b/src/Pages/Onboarding/FullKycAadharVerificationFrame.jsx
new file mode 100644
index 0000000..bdf0d16
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycAadharVerificationFrame.jsx
@@ -0,0 +1,162 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+import { Box, Container, Text, HStack, Stack, Stepper, Step, StepIndicator, StepStatus, StepSeparator, useSteps, StepIcon, List, ListItem, ListIcon, Image } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import Header from './Header';
+import Footer from './Footer';
+import { BiSolidMicrophone } from "react-icons/bi";
+import { MdVideocam } from "react-icons/md";
+import { MdCallEnd } from "react-icons/md";
+import call_first from "../../assets/call_first.svg"
+import call_sec from "../../assets/call_sec.svg"
+
+const FullKycAadharVerificationFrame = ({ children }) => {
+
+ const steps = [
+ { description: 'Location' },
+ { description: 'Q and A' },
+ { description: 'Face verification' },
+ { description: 'Aadhar Verification' },
+ { description: 'Pan Verification' },
+ ];
+
+ // Stepper configuration
+ const { activeStep } = useSteps({
+ index: 3,
+ count: steps.length,
+ });
+
+ return (
+
+
+
+
+
+
+
+ Full KYC
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna.
+
+
+
+
+
+ {steps.map((step, index) => (
+
+
+ } />
+
+
+
+ ))}
+
+
+ {steps.map((step, index) => (
+
+ {step.description}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ End
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default FullKycAadharVerificationFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/FullKycFaceVerification.jsx b/src/Pages/Onboarding/FullKycFaceVerification.jsx
new file mode 100644
index 0000000..109bdaf
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycFaceVerification.jsx
@@ -0,0 +1,43 @@
+import React, { useState } from 'react';
+import FullKycFaceVerificationFrame from './FullKycFaceVerificationFrame';
+import { Box, HStack, Image, Input, Text } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton';
+import face_verification from '../../assets/face_verification.svg'
+
+
+const FullKycFaceVerification = () => {
+
+ const navigate = useNavigate();
+
+ return (
+
+
+
+ Position your face in the oval
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.
+
+
+
+
+
+
+
+
+ navigate("/full-kyc-aadhar-verification")}
+ w={"80%"} />
+
+
+
+ );
+};
+
+export default FullKycFaceVerification;
diff --git a/src/Pages/Onboarding/FullKycFaceVerificationFrame.jsx b/src/Pages/Onboarding/FullKycFaceVerificationFrame.jsx
new file mode 100644
index 0000000..df2218c
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycFaceVerificationFrame.jsx
@@ -0,0 +1,162 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+import { Box, Container, Text, HStack, Stack, Stepper, Step, StepIndicator, StepStatus, StepSeparator, useSteps, StepIcon, List, ListItem, ListIcon, Image } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import Header from './Header';
+import Footer from './Footer';
+import { BiSolidMicrophone } from "react-icons/bi";
+import { MdVideocam } from "react-icons/md";
+import { MdCallEnd } from "react-icons/md";
+import call_first from "../../assets/call_first.svg"
+import call_sec from "../../assets/call_sec.svg"
+
+const FullKycFaceVerificationFrame = ({ children }) => {
+
+ const steps = [
+ { description: 'Location' },
+ { description: 'Q and A' },
+ { description: 'Face verification' },
+ { description: 'Aadhar Verification' },
+ { description: 'Pan Verification' },
+ ];
+
+ // Stepper configuration
+ const { activeStep } = useSteps({
+ index: 2,
+ count: steps.length,
+ });
+
+ return (
+
+
+
+
+
+
+
+ Full KYC
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna.
+
+
+
+
+
+ {steps.map((step, index) => (
+
+
+ } />
+
+
+
+ ))}
+
+
+ {steps.map((step, index) => (
+
+ {step.description}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ End
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default FullKycFaceVerificationFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/FullKycFrame.jsx b/src/Pages/Onboarding/FullKycFrame.jsx
new file mode 100644
index 0000000..68af3be
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycFrame.jsx
@@ -0,0 +1,33 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+
+import {
+ Box,
+} from "@chakra-ui/react";
+import Header from './Header';
+import Footer from './Footer';
+
+const FullKycFrame = ({ children }) => {
+ return (
+
+
+
+
+ {children}
+
+
+
+
+
+ )
+}
+
+export default FullKycFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/FullKycLocation.jsx b/src/Pages/Onboarding/FullKycLocation.jsx
new file mode 100644
index 0000000..386fc51
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycLocation.jsx
@@ -0,0 +1,66 @@
+import React, { useState } from 'react';
+import FullKycLocationFrame from './FullKycLocationFrame';
+import { Box, Container, HStack, Text } from '@chakra-ui/react';
+import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet';
+import L from 'leaflet';
+import 'leaflet/dist/leaflet.css';
+import { useNavigate } from 'react-router-dom';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton';
+
+
+// Custom icon for marker (optional)
+const locationIcon = new L.Icon({
+ iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png',
+ iconSize: [25, 41],
+ iconAnchor: [12, 41],
+ popupAnchor: [1, -34],
+ shadowSize: [41, 41],
+});
+
+const FullKycLocation = () => {
+ const navigate = useNavigate();
+
+ return (
+
+
+
+ Location Verification
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.
+
+
+
+ {/* Map Container */}
+
+
+
+ Your Location
+
+
+
+
+
+ navigate("/full-kyc-q&a")}
+ w={"80%"}
+ />
+
+
+
+ );
+};
+
+export default FullKycLocation;
diff --git a/src/Pages/Onboarding/FullKycLocationFrame.jsx b/src/Pages/Onboarding/FullKycLocationFrame.jsx
new file mode 100644
index 0000000..373828d
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycLocationFrame.jsx
@@ -0,0 +1,162 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+import { Box, Container, Text, HStack, Stack, Stepper, Step, StepIndicator, StepStatus, StepSeparator, useSteps, StepIcon, List, ListItem, ListIcon, Image } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import Header from './Header';
+import Footer from './Footer';
+import { BiSolidMicrophone } from "react-icons/bi";
+import { MdVideocam } from "react-icons/md";
+import { MdCallEnd } from "react-icons/md";
+import call_first from "../../assets/call_first.svg"
+import call_sec from "../../assets/call_sec.svg"
+
+const FullKycLocationFrame = ({ children }) => {
+
+ const steps = [
+ { description: 'Location' },
+ { description: 'Q and A' },
+ { description: 'Face verification' },
+ { description: 'Aadhar Verification' },
+ { description: 'Pan Verification' },
+ ];
+
+ // Stepper configuration
+ const { activeStep } = useSteps({
+ index: 0,
+ count: steps.length,
+ });
+
+ return (
+
+
+
+
+
+
+
+ Full KYC
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna.
+
+
+
+
+
+ {steps.map((step, index) => (
+
+
+ } />
+
+
+
+ ))}
+
+
+ {steps.map((step, index) => (
+
+ {step.description}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ End
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default FullKycLocationFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/FullKycPanVerification.jsx b/src/Pages/Onboarding/FullKycPanVerification.jsx
new file mode 100644
index 0000000..ffbf02b
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycPanVerification.jsx
@@ -0,0 +1,182 @@
+import React, { useState, useCallback } from 'react';
+import FullKycPanVerificationFrame from './FullKycPanVerificationFrame';
+import {
+ Box, HStack, Image, Text, VStack,
+ Modal, ModalOverlay, ModalHeader, ModalCloseButton, ModalBody, ModalContent,
+ useDisclosure,
+ Button,
+} from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton';
+import { SlCloudUpload } from "react-icons/sl";
+import { useDropzone } from 'react-dropzone';
+import { motion } from 'framer-motion';
+
+// Define motion components
+const MotionBox = motion(Box);
+const MotionSvg = motion("svg");
+const MotionCircle = motion.circle;
+const MotionPolyline = motion.polyline;
+
+const FullKycPanVerification = () => {
+ const [selectedImage, setSelectedImage] = useState(null);
+ const navigate = useNavigate();
+ const { isOpen, onOpen, onClose } = useDisclosure()
+ // Dropzone setup
+ const onDrop = useCallback((acceptedFiles) => {
+ const file = acceptedFiles[0];
+ if (file) {
+ setSelectedImage(URL.createObjectURL(file));
+ }
+ }, []);
+
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
+ onDrop,
+ accept: 'image/*',
+ });
+
+ return (
+
+
+
+ Upload PAN Card
+
+
+
+ Please upload a clear image of your PAN card.
+
+
+
+
+
+ {selectedImage ? (
+
+ ) : (
+ <>
+
+
+ {isDragActive ? 'Drop the image here...' : 'Upload from gallery'}
+
+ >
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* svg with Framer Motion animation */}
+
+
+
+
+
+
+
+
+
+ KYC is done successfully!
+
+
+ You’re all set and ready to start
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default FullKycPanVerification;
diff --git a/src/Pages/Onboarding/FullKycPanVerificationFrame.jsx b/src/Pages/Onboarding/FullKycPanVerificationFrame.jsx
new file mode 100644
index 0000000..4ca92be
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycPanVerificationFrame.jsx
@@ -0,0 +1,162 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+import { Box, Text, HStack, Stack, Stepper, Step, StepIndicator, StepStatus, StepSeparator, useSteps, StepIcon, List, ListItem, ListIcon, Image } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import Header from './Header';
+import Footer from './Footer';
+import { BiSolidMicrophone } from "react-icons/bi";
+import { MdVideocam } from "react-icons/md";
+import { MdCallEnd } from "react-icons/md";
+import call_first from "../../assets/call_first.svg"
+import call_sec from "../../assets/call_sec.svg"
+
+const FullKycPanVerificationFrame = ({ children }) => {
+
+ const steps = [
+ { description: 'Location' },
+ { description: 'Q and A' },
+ { description: 'Face verification' },
+ { description: 'Aadhar Verification' },
+ { description: 'Pan Verification' },
+ ];
+
+ // Stepper configuration
+ const { activeStep } = useSteps({
+ index: 4,
+ count: steps.length,
+ });
+
+ return (
+
+
+
+
+
+
+
+ Full KYC
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna.
+
+
+
+
+
+ {steps.map((step, index) => (
+
+
+ } />
+
+
+
+ ))}
+
+
+ {steps.map((step, index) => (
+
+ {step.description}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ End
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default FullKycPanVerificationFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/FullKycQandA.jsx b/src/Pages/Onboarding/FullKycQandA.jsx
new file mode 100644
index 0000000..c337e51
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycQandA.jsx
@@ -0,0 +1,64 @@
+import React, { useState } from 'react';
+import FullKycQandAFrame from './FullKycQandAFrame';
+import { Box, HStack, Input, Text } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton';
+
+
+
+const FullKycQandA = () => {
+
+ const navigate = useNavigate();
+
+ return (
+
+
+
+ Answer following questions.
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.
+
+
+
+
+
+
+
+ navigate("/full-kyc-face-verification")}
+ w={"80%"} />
+
+
+
+ );
+};
+
+export default FullKycQandA;
diff --git a/src/Pages/Onboarding/FullKycQandAFrame.jsx b/src/Pages/Onboarding/FullKycQandAFrame.jsx
new file mode 100644
index 0000000..fd1e1bd
--- /dev/null
+++ b/src/Pages/Onboarding/FullKycQandAFrame.jsx
@@ -0,0 +1,162 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+import { Box, Container, Text, HStack, Stack, Stepper, Step, StepIndicator, StepStatus, StepSeparator, useSteps, StepIcon, List, ListItem, ListIcon, Image } from '@chakra-ui/react';
+import { useNavigate } from 'react-router-dom';
+import Header from './Header';
+import Footer from './Footer';
+import { BiSolidMicrophone } from "react-icons/bi";
+import { MdVideocam } from "react-icons/md";
+import { MdCallEnd } from "react-icons/md";
+import call_first from "../../assets/call_first.svg"
+import call_sec from "../../assets/call_sec.svg"
+
+const FullKycQandAFrame = ({ children }) => {
+
+ const steps = [
+ { description: 'Location' },
+ { description: 'Q and A' },
+ { description: 'Face verification' },
+ { description: 'Aadhar Verification' },
+ { description: 'Pan Verification' },
+ ];
+
+ // Stepper configuration
+ const { activeStep } = useSteps({
+ index: 1,
+ count: steps.length,
+ });
+
+ return (
+
+
+
+
+
+
+
+ Full KYC
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna.
+
+
+
+
+
+ {steps.map((step, index) => (
+
+
+ } />
+
+
+
+ ))}
+
+
+ {steps.map((step, index) => (
+
+ {step.description}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ End
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default FullKycQandAFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/LoginEkyc.jsx b/src/Pages/Onboarding/LoginEkyc.jsx
new file mode 100644
index 0000000..46649a6
--- /dev/null
+++ b/src/Pages/Onboarding/LoginEkyc.jsx
@@ -0,0 +1,127 @@
+import React, { useState } from 'react';
+import LoginEkycFrame from './LoginEkycFrame';
+import { Box, Container, Radio, RadioGroup, Text, HStack, Checkbox, Link } from '@chakra-ui/react';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton';
+import { BsPatchExclamation } from 'react-icons/bs';
+import { useNavigate } from 'react-router-dom';
+
+const LoginEkyc = () => {
+ const [selectedKyc, setSelectedKyc] = useState('1'); // on change of radio box
+ const navigate = useNavigate();
+
+ // Which radio is checked navigate to that page
+
+ const handleProceed = () => {
+ if (selectedKyc === '1') {
+ navigate('/maximum-kyc');
+ } else if (selectedKyc === '2') {
+ navigate('/minimum-kyc');
+ }
+ };
+
+ return (
+
+
+
+
+
+
+ eKYC
+
+
+
+ Automatically verifies your documents needed for KYC and account opening on OptiFii
+
+
+
+
+ Choose your KYC
+
+
+
+
+
+
+
+ Full KYC
+
+
+
+ Maximum wallet limit is
+
+ ₹ 200000
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi.
+
+
+
+
+
+
+
+ Minimum KYC
+
+
+
+ Minimum wallet limit is
+
+ ₹ 10000
+
+
+
+
+
+ Enter the Aadhar or PAN number and then request for the OTP. This will complete the minimum KYC.
+
+
+
+
+
+
+
+
+
+
+
+ *
+
+ I hereby consent to provide my Aadhaar Number, Biometric and/or One Time Pin (OTP) data for Aadhaar based authentication for the purpose of establishing my identity
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default LoginEkyc;
diff --git a/src/Pages/Onboarding/LoginEkycFrame.jsx b/src/Pages/Onboarding/LoginEkycFrame.jsx
new file mode 100644
index 0000000..a2d08e0
--- /dev/null
+++ b/src/Pages/Onboarding/LoginEkycFrame.jsx
@@ -0,0 +1,33 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+
+import {
+ Box,
+} from "@chakra-ui/react";
+import Header from './Header';
+import Footer from './Footer';
+
+const LoginEkycFrame = ({ children }) => {
+ return (
+
+
+
+
+ {children}
+
+
+
+
+
+ )
+}
+
+export default LoginEkycFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/MinimumKyc.jsx b/src/Pages/Onboarding/MinimumKyc.jsx
new file mode 100644
index 0000000..2a28c0f
--- /dev/null
+++ b/src/Pages/Onboarding/MinimumKyc.jsx
@@ -0,0 +1,71 @@
+import React from 'react'
+import { Box, Input, Text, HStack, Container, } from '@chakra-ui/react';
+import PrimaryButton from '../../Components/Buttons/PrimaryButton'
+import MinimumKycFrame from './MinimumKycFrame';
+import { useNavigate } from 'react-router-dom';
+
+const MinimumKyc = () => {
+
+ const navigate = useNavigate();
+
+ return (
+
+
+
+
+
+
+ Minimum KYC
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur.
+
+
+
+ Enter Aadhaar/PAN number
+
+
+
+
+
+
+
+
+ navigate("/login-otp")}
+ w={"300px"} title={"Request For OTP"} />
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default MinimumKyc
\ No newline at end of file
diff --git a/src/Pages/Onboarding/MinimumKycFrame.jsx b/src/Pages/Onboarding/MinimumKycFrame.jsx
new file mode 100644
index 0000000..8850448
--- /dev/null
+++ b/src/Pages/Onboarding/MinimumKycFrame.jsx
@@ -0,0 +1,33 @@
+import React from 'react'
+import { OPACITY_ON_LOAD } from '../../Layout/animations'
+
+import {
+ Box,
+} from "@chakra-ui/react";
+import Header from './Header';
+import Footer from './Footer';
+
+const MinimumKycFrame = ({ children }) => {
+ return (
+
+
+
+
+ {children}
+
+
+
+
+
+ )
+}
+
+export default MinimumKycFrame
\ No newline at end of file
diff --git a/src/Pages/Onboarding/WelcomeToOptifii.jsx b/src/Pages/Onboarding/WelcomeToOptifii.jsx
index 0984803..26f9f43 100644
--- a/src/Pages/Onboarding/WelcomeToOptifii.jsx
+++ b/src/Pages/Onboarding/WelcomeToOptifii.jsx
@@ -240,9 +240,18 @@ const WelcomeToOptifii = () => {
onClick={onOpen}
w={"300px"} title={"Register with us"} />
-
+
Already have an account?
- Login
+
@@ -295,7 +304,7 @@ const WelcomeToOptifii = () => {
py={6}
>Continue with email
diff --git a/src/assets/call_first.svg b/src/assets/call_first.svg
new file mode 100644
index 0000000..b5efafe
--- /dev/null
+++ b/src/assets/call_first.svg
@@ -0,0 +1,10 @@
+
diff --git a/src/assets/call_sec.svg b/src/assets/call_sec.svg
new file mode 100644
index 0000000..aefe770
--- /dev/null
+++ b/src/assets/call_sec.svg
@@ -0,0 +1,10 @@
+
diff --git a/src/assets/face_verification.svg b/src/assets/face_verification.svg
new file mode 100644
index 0000000..7b37c87
--- /dev/null
+++ b/src/assets/face_verification.svg
@@ -0,0 +1,10 @@
+