@djb25/digit-ui-module-ekyc 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,29 +5,20 @@ import { useTranslation } from "react-i18next";
5
5
  const StatusCards = ({ countData }) => {
6
6
  const { t } = useTranslation();
7
7
 
8
- const cardStyle = {
9
- flex: 1,
10
- textAlign: "center",
11
- padding: "24px",
12
- borderRadius: "12px",
13
- boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
14
- border: "1px solid #EAECF0"
15
- };
16
-
17
8
  return (
18
- <div className="status-container" style={{ display: "flex", gap: "24px", marginBottom: "32px" }}>
19
- <Card style={cardStyle}>
20
- <div style={{ fontSize: "32px", fontWeight: "700", color: "#101828" }}>{countData?.total || 0}</div>
21
- <div style={{ color: "#667085", marginTop: "8px", fontSize: "14px", fontWeight: "500" }}>{t("EKYC_TOTAL")}</div>
22
- </Card>
23
- <Card style={cardStyle}>
24
- <div style={{ fontSize: "32px", fontWeight: "700", color: "#B54708" }}>{countData?.pending || 0}</div>
25
- <div style={{ color: "#667085", marginTop: "8px", fontSize: "14px", fontWeight: "500" }}>{t("EKYC_PENDING")}</div>
26
- </Card>
27
- <Card style={cardStyle}>
28
- <div style={{ fontSize: "32px", fontWeight: "700", color: "#027A48" }}>{countData?.completed || 0}</div>
29
- <div style={{ color: "#667085", marginTop: "8px", fontSize: "14px", fontWeight: "500" }}>{t("EKYC_COMPLETED")}</div>
30
- </Card>
9
+ <div className="ekyc-status-container">
10
+ <div className="ekyc-status-card">
11
+ <div className="count">{countData?.total || 0}</div>
12
+ <div className="label">{t("EKYC_TOTAL")}</div>
13
+ </div>
14
+ <div className="ekyc-status-card">
15
+ <div className="count pending">{countData?.pending || 0}</div>
16
+ <div className="label">{t("EKYC_PENDING")}</div>
17
+ </div>
18
+ <div className="ekyc-status-card">
19
+ <div className="count completed">{countData?.completed || 0}</div>
20
+ <div className="label">{t("EKYC_COMPLETED")}</div>
21
+ </div>
31
22
  </div>
32
23
  );
33
24
  };
@@ -0,0 +1,357 @@
1
+ import React, { useState, useRef, Fragment } from "react";
2
+ import { Header, Card, LabelFieldPair, CardLabel, TextInput, SubmitBar, CardHeader, RadioButtons, ActionBar, TickMark, HomeIcon, StatusTable, Row, ConnectingCheckPoints, CheckPoint } from "@djb25/digit-ui-react-components";
3
+ import { useTranslation } from "react-i18next";
4
+ import { useLocation, useHistory } from "react-router-dom";
5
+ import AddressDetails from "./AddressDetails";
6
+
7
+ // ─── Icons ──────────────────────────────────────────────────────────────────
8
+
9
+ const FingerprintIcon = ({ size = 22, color = "#6366f1" }) => (
10
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
11
+ <path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.67-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.96.46 5.57 1.41.24.13.33.43.2.67-.09.13-.24.39-.39.39zM12 21c-.28 0-.5-.22-.5-.5v-4.42c-2.33-.21-4.44-1.35-5.94-3.21-1.5-1.86-2.22-4.18-2.02-6.52.05-.59.55-1.03 1.14-.98s1.03.55.98 1.14c-.15 1.76.39 3.51 1.52 4.91 1.12 1.4 2.7 2.26 4.45 2.42.21.02.37.19.37.4v6.26c0 .28-.22.5-.5.5z" fill={color} />
12
+ <path d="M12 11c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z" fill={color} />
13
+ </svg>
14
+ );
15
+
16
+ const UserIcon = ({ size = 16, color = "#64748b" }) => (
17
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
18
+ <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" stroke={color} strokeWidth="2" strokeLinecap="round" />
19
+ <circle cx="12" cy="7" r="4" stroke={color} strokeWidth="2" />
20
+ </svg>
21
+ );
22
+
23
+ const PhoneIcon = ({ size = 16, color = "#64748b" }) => (
24
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
25
+ <path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 10.6 19.79 19.79 0 0 0 3 1.82C3 .72 3.72 0 4.82 0h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.91 7.91a16 16 0 006.16 6.16l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z" stroke={color} strokeWidth="2" strokeLinecap="round" />
26
+ </svg>
27
+ );
28
+
29
+ const WhatsappIcon = ({ size = 16 }) => (
30
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
31
+ <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347z" fill="#25D366" />
32
+ <path d="M12 2C6.477 2 2 6.477 2 12c0 1.89.525 3.66 1.438 5.168L2 22l4.832-1.438A9.96 9.96 0 0012 22c5.523 0 10-4.477 10-10S17.523 2 12 2z" stroke="#25D366" strokeWidth="2" strokeLinecap="round" />
33
+ </svg>
34
+ );
35
+
36
+ const MailIcon = ({ size = 16, color = "#64748b" }) => (
37
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
38
+ <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" stroke={color} strokeWidth="2" strokeLinecap="round" />
39
+ <path d="M22 6l-10 7L2 6" stroke={color} strokeWidth="2" strokeLinecap="round" />
40
+ </svg>
41
+ );
42
+
43
+ const UsersIcon = ({ size = 16, color = "#64748b" }) => (
44
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
45
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" stroke={color} strokeWidth="2" strokeLinecap="round" />
46
+ <circle cx="9" cy="7" r="4" stroke={color} strokeWidth="2" />
47
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87" stroke={color} strokeWidth="2" strokeLinecap="round" />
48
+ <path d="M16 3.13a4 4 0 0 1 0 7.75" stroke={color} strokeWidth="2" strokeLinecap="round" />
49
+ </svg>
50
+ );
51
+
52
+ const AadhaarVerification = () => {
53
+ const { t } = useTranslation();
54
+ const location = useLocation();
55
+ const history = useHistory();
56
+ const addressSectionRef = useRef(null);
57
+ const { kNumber, selectedOption, connectionDetails } = location.state || {
58
+ kNumber: "EKYC-1234567890",
59
+ selectedOption: { code: "SELF", name: "EKYC_SELF" },
60
+ connectionDetails: { connectionDetailsInfo: { consumerName: "Rajesh Kumar Singh", address: "House No. 45, Sector 12, New Delhi - 110001", phoneNumber: "9876543210", email: "rajesh.singh@example.com" } }
61
+ };
62
+
63
+ const [aadhaarLastFour, setAadhaarLastFour] = useState("");
64
+ const [isAadhaarVerified, setIsAadhaarVerified] = useState(false);
65
+ const [isVerifying, setIsVerifying] = useState(false);
66
+ const [nameCorrect, setNameCorrect] = useState({ code: "NO", name: "CORE_COMMON_NO" });
67
+ const [userName, setUserName] = useState(connectionDetails?.connectionDetailsInfo?.consumerName || "");
68
+ const [mobileChange, setMobileChange] = useState({ code: "NO", name: "CORE_COMMON_NO" });
69
+ const [mobileNumber, setMobileNumber] = useState(connectionDetails?.connectionDetailsInfo?.phoneNumber || "");
70
+ const [whatsappNumber, setWhatsappNumber] = useState(connectionDetails?.connectionDetailsInfo?.phoneNumber || "");
71
+ const [email, setEmail] = useState(connectionDetails?.connectionDetailsInfo?.email || "");
72
+ const [noOfPersons, setNoOfPersons] = useState("");
73
+
74
+ // New states for single-page flow
75
+ const [showAddressSection, setShowAddressSection] = useState(false);
76
+ const [addressData, setAddressData] = useState(null);
77
+
78
+ const yesNoOptions = [
79
+ { code: "YES", name: "CORE_COMMON_YES" },
80
+ { code: "NO", name: "CORE_COMMON_NO" }
81
+ ];
82
+
83
+ const handleVerifyAadhaar = () => {
84
+ if (aadhaarLastFour.length === 4) {
85
+ setIsVerifying(true);
86
+ setTimeout(() => {
87
+ setIsVerifying(false);
88
+ setIsAadhaarVerified(true);
89
+ }, 1200);
90
+ }
91
+ };
92
+
93
+ const handleSaveAndContinueAadhaar = () => {
94
+ setShowAddressSection(true);
95
+ setTimeout(() => {
96
+ addressSectionRef.current?.scrollIntoView({ behavior: "smooth", block: "start" });
97
+ }, 100);
98
+ };
99
+
100
+ const handleCompleteAll = (addressDetails) => {
101
+ setAddressData(addressDetails);
102
+ history.push("/digit-ui/employee/ekyc/property-info", {
103
+ kNumber,
104
+ selectedOption,
105
+ connectionDetails,
106
+ aadhaarDetails: { aadhaarLastFour, isAadhaarVerified, userName, mobileNumber, whatsappNumber, email, noOfPersons },
107
+ addressDetails
108
+ });
109
+ };
110
+
111
+ return (
112
+ <div className="inbox-container">
113
+ <style>{`
114
+ @keyframes spin { to { transform: rotate(360deg); } }
115
+ @keyframes fadeSlideIn { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
116
+ @keyframes pulseGreen { 0%,100% { box-shadow:0 0 0 0 rgba(22,163,74,0.4); } 50% { box-shadow:0 0 0 8px rgba(22,163,74,0); } }
117
+ `}</style>
118
+
119
+ <div className="filters-container">
120
+ {/* Sidebar Title Card */}
121
+ <Card className="sidebar-title-card" style={{ display: "flex", alignItems: "center", padding: "16px", marginBottom: "16px", borderRadius: "4px" }}>
122
+ <div className="icon-container" style={{ color: "#0068faff", marginRight: "12px" }}>
123
+ <HomeIcon style={{ width: "24px", height: "24px" }} />
124
+ </div>
125
+ <div style={{ fontWeight: "700", fontSize: "18px", color: "#0B0C0C" }}>
126
+ {t("EKYC_PROCESS")}
127
+ </div>
128
+ </Card>
129
+
130
+ {/* Progress Steps Sidebar */}
131
+ <div style={{ backgroundColor: "#FFFFFF", padding: "16px", borderRadius: "8px", border: "1px solid #EAECF0", boxShadow: "0 2px 4px rgba(0,0,0,0.02)" }}>
132
+ <ConnectingCheckPoints>
133
+ <CheckPoint label={t("EKYC_STEP_AADHAAR") || "Aadhaar"} isCompleted={showAddressSection} />
134
+ <CheckPoint label={t("EKYC_STEP_ADDRESS") || "Address"} isCompleted={addressData !== null} />
135
+ <CheckPoint label={t("EKYC_STEP_PROPERTY") || "Property"} isCompleted={false} />
136
+ <CheckPoint label={t("EKYC_STEP_REVIEW") || "Review"} />
137
+ </ConnectingCheckPoints>
138
+ </div>
139
+ </div>
140
+
141
+ <div style={{ flex: 1, marginLeft: "16px" }}>
142
+ <Card>
143
+ <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: "24px" }}>
144
+ <Header>{t("EKYC_AADHAAR_VERIFICATION_HEADER") || "Aadhaar Verification"}</Header>
145
+ <div style={{ fontSize: "14px", fontWeight: "700", color: "#505A5F" }}>
146
+ {t("EKYC_K_NUMBER")}: <span style={{ color: "#0B0C0C" }}>{kNumber}</span>
147
+ </div>
148
+ </div>
149
+
150
+ {/* Section 1: Aadhaar Number */}
151
+ <CardHeader style={{ fontSize: "20px", marginBottom: "16px" }}>{t("EKYC_AADHAAR_NUMBER_HEADER") || "Aadhaar Number"}</CardHeader>
152
+
153
+ <LabelFieldPair>
154
+ <CardLabel style={{ fontWeight: "600" }}>{t("EKYC_LAST_4_DIGIT_AADHAAR") || "Last 4-digit Aadhaar Number"}</CardLabel>
155
+ <div className="field" style={{ position: "relative" }}>
156
+ <div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
157
+ <FingerprintIcon size={20} />
158
+ </div>
159
+ <TextInput
160
+ value={aadhaarLastFour}
161
+ onChange={(e) => {
162
+ const val = e.target.value;
163
+ if (val.length <= 4 && /^\d*$/.test(val)) setAadhaarLastFour(val);
164
+ }}
165
+ placeholder={t("EKYC_ENTER_LAST_4_DIGIT") || "Enter last 4 digits"}
166
+ textInputStyle={{ paddingLeft: "40px" }}
167
+ maxLength={4}
168
+ />
169
+ {isAadhaarVerified && (
170
+ <div style={{ position: "absolute", right: "12px", top: "50%", transform: "translateY(-50%)" }}>
171
+ <TickMark fillColor="#00703C" />
172
+ </div>
173
+ )}
174
+ </div>
175
+ </LabelFieldPair>
176
+
177
+ {!isAadhaarVerified && (
178
+ <SubmitBar
179
+ label={isVerifying ? t("EKYC_VERIFYING") || "Verifying..." : t("EKYC_VERIFY_AADHAAR_BTN") || "Verify Aadhaar"}
180
+ onSubmit={handleVerifyAadhaar}
181
+ disabled={aadhaarLastFour.length !== 4 || isVerifying}
182
+ style={{ marginTop: "16px", opacity: aadhaarLastFour.length !== 4 ? 0.6 : 1 }}
183
+ />
184
+ )}
185
+
186
+ {isAadhaarVerified && (
187
+ <div style={{ backgroundColor: "#E7F4EE", padding: "20px", borderRadius: "8px", marginTop: "24px", marginBottom: "24px", border: "1px solid #D1E9DB", animation: "fadeSlideIn 0.4s ease" }}>
188
+ <div style={{ display: "flex", alignItems: "center", gap: "10px", marginBottom: "16px" }}>
189
+ <div style={{ backgroundColor: "#D1E9DB", padding: "4px", borderRadius: "50%", display: "flex", animation: "pulseGreen 2s ease infinite" }}>
190
+ <TickMark fillColor="#00703C" />
191
+ </div>
192
+ <span style={{ fontWeight: "700", color: "#00703C", fontSize: "18px" }}>{t("EKYC_AADHAAR_VERIFIED_SUCCESS") || "Aadhaar Verified Successfully"}</span>
193
+ </div>
194
+ <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: "16px" }}>
195
+ <div style={{ display: "flex", flexDirection: "column" }}>
196
+ <span style={{ color: "#667085", fontSize: "12px", fontWeight: "700", textTransform: "uppercase" }}>{t("EKYC_NAME")}</span>
197
+ <span style={{ fontWeight: "700", fontSize: "16px", color: "#101828" }}>Rajesh Kumar Singh</span>
198
+ </div>
199
+ <div style={{ display: "flex", flexDirection: "column" }}>
200
+ <span style={{ color: "#667085", fontSize: "12px", fontWeight: "700", textTransform: "uppercase" }}>{t("EKYC_AADHAAR")}</span>
201
+ <span style={{ fontWeight: "700", fontSize: "16px", color: "#101828" }}>XXXX XXXX {aadhaarLastFour}</span>
202
+ </div>
203
+ <div style={{ display: "flex", flexDirection: "column", gridColumn: "span 2" }}>
204
+ <span style={{ color: "#667085", fontSize: "12px", fontWeight: "700", textTransform: "uppercase" }}>{t("EKYC_ADDRESS")}</span>
205
+ <span style={{ fontWeight: "500", fontSize: "15px", color: "#344054" }}>House No. 45, Sector 12, New Delhi - 110001</span>
206
+ </div>
207
+ </div>
208
+ </div>
209
+ )}
210
+
211
+ <hr style={{ margin: "32px 0", border: "0", borderTop: "1px solid #EAECF0" }} />
212
+
213
+ {/* Section 2: Contact Details */}
214
+ <CardHeader style={{ fontSize: "20px", marginBottom: "16px" }}>{t("EKYC_CONTACT_DETAILS_HEADER") || "Contact Details"}</CardHeader>
215
+ <LabelFieldPair style={{ animation: "fadeSlideIn 0.3s ease" }}>
216
+ <div style={{ display: "flex", alignItems: "center", gap: "20px" }}>
217
+ <CardLabel style={{ fontWeight: "600", marginBottom: "0" }}>
218
+ {t("EKYC_USER_NAME") || "Corrected Name"}
219
+ </CardLabel>
220
+
221
+ <RadioButtons
222
+ options={yesNoOptions}
223
+ optionsKey="name"
224
+ selectedOption={nameCorrect}
225
+ onSelect={setNameCorrect}
226
+ t={t}
227
+ innerStyles={{ display: "flex", gap: "24px" }}
228
+ style={{ display: "flex", gap: "50px", marginBottom: "0" }}
229
+ />
230
+ </div>
231
+ <div className="field" style={{ position: "relative" }}>
232
+ <div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: nameCorrect.code === "YES" ? 0.6 : 0.3 }}>
233
+ <UserIcon size={18} color={nameCorrect.code === "YES" ? "#64748b" : "#94a3b8"} />
234
+ </div>
235
+ <TextInput
236
+ value={userName}
237
+ onChange={(e) => setUserName(e.target.value)}
238
+ placeholder={t("EKYC_ENTER_NAME_PLACEHOLDER") || "Enter full name"}
239
+ textInputStyle={{ paddingLeft: "40px" }}
240
+ disabled={nameCorrect.code !== "YES"}
241
+ />
242
+ </div>
243
+ </LabelFieldPair>
244
+
245
+ <LabelFieldPair>
246
+ <div style={{ display: "flex", alignItems: "center", gap: "20px", padding: "10px" }}>
247
+ <CardLabel style={{ fontWeight: "600", marginBottom: "0" }}>
248
+ {t("EKYC_USER_MOBILE_NUMBER") || "User Mobile Number"}
249
+ </CardLabel>
250
+
251
+ <RadioButtons
252
+ options={yesNoOptions}
253
+ optionsKey="name"
254
+ selectedOption={mobileChange}
255
+ onSelect={setMobileChange}
256
+ t={t}
257
+ innerStyles={{ display: "flex", gap: "24px" }}
258
+ style={{ display: "flex", gap: "50px", marginBottom: "0" }}
259
+ />
260
+ </div>
261
+ <div className="field" style={{ position: "relative" }}>
262
+ <div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: mobileChange.code === "YES" ? 0.6 : 0.3 }}>
263
+ <PhoneIcon size={18} color={mobileChange.code === "YES" ? "#64748b" : "#94a3b8"} />
264
+ </div>
265
+ <TextInput
266
+ value={mobileNumber}
267
+ onChange={(e) => setMobileNumber(e.target.value)}
268
+ placeholder="+91 XXXXX XXXXX"
269
+ textInputStyle={{ paddingLeft: "40px" }}
270
+ disabled={mobileChange.code !== "YES"}
271
+ />
272
+ </div>
273
+ </LabelFieldPair>
274
+
275
+ <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: "24px", marginTop: "24px" }}>
276
+ <LabelFieldPair>
277
+ <CardLabel style={{ fontWeight: "600" }}>{t("EKYC_WHATSAPP_NUMBER") || "WhatsApp Number"}</CardLabel>
278
+ <div className="field" style={{ position: "relative" }}>
279
+ <div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
280
+ <WhatsappIcon size={18} />
281
+ </div>
282
+ <TextInput
283
+ value={whatsappNumber}
284
+ onChange={(e) => setWhatsappNumber(e.target.value)}
285
+ placeholder="+91 XXXXX XXXXX"
286
+ textInputStyle={{ paddingLeft: "40px" }}
287
+ />
288
+ </div>
289
+ </LabelFieldPair>
290
+ <LabelFieldPair>
291
+ <CardLabel style={{ fontWeight: "600" }}>{t("EKYC_EMAIL_ADDRESS") || "Email Address"} <span style={{ fontWeight: "400", color: "#667085" }}>({t("EKYC_OPTIONAL") || "Optional"})</span></CardLabel>
292
+ <div className="field" style={{ position: "relative" }}>
293
+ <div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
294
+ <MailIcon size={18} />
295
+ </div>
296
+ <TextInput
297
+ value={email}
298
+ onChange={(e) => setEmail(e.target.value)}
299
+ placeholder={t("EKYC_EMAIL_ADDRESS_PLACEHOLDER") || "example@email.com"}
300
+ textInputStyle={{ paddingLeft: "40px" }}
301
+ />
302
+ </div>
303
+ </LabelFieldPair>
304
+ </div>
305
+
306
+ <hr style={{ margin: "32px 0", border: "0", borderTop: "1px solid #EAECF0" }} />
307
+
308
+ {/* Section 3: Family Details */}
309
+ <CardHeader style={{ fontSize: "20px", marginBottom: "16px" }}>{t("EKYC_FAMILY_DETAILS_HEADER") || "Family Details"}</CardHeader>
310
+
311
+ <LabelFieldPair>
312
+ <CardLabel style={{ fontWeight: "600" }}>{t("EKYC_NO_OF_PERSONS") || "Number of Family Members"}</CardLabel>
313
+ <div className="field" style={{ position: "relative" }}>
314
+ <div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
315
+ <UsersIcon size={18} />
316
+ </div>
317
+ <TextInput
318
+ value={noOfPersons}
319
+ onChange={(e) => { if (/^\d*$/.test(e.target.value)) setNoOfPersons(e.target.value); }}
320
+ placeholder={t("EKYC_ENTER_NO_OF_PERSONS") || "Enter total number of persons"}
321
+ textInputStyle={{ paddingLeft: "40px" }}
322
+ />
323
+ </div>
324
+ </LabelFieldPair>
325
+
326
+ {!showAddressSection && (
327
+ <ActionBar>
328
+ <SubmitBar label={t("ES_COMMON_SAVE_CONTINUE") || "Save & Continue"} onSubmit={handleSaveAndContinueAadhaar} />
329
+ </ActionBar>
330
+ )}
331
+
332
+ {showAddressSection && (
333
+ <div ref={addressSectionRef}>
334
+ <AddressDetails
335
+ isSection={true}
336
+ onComplete={handleCompleteAll}
337
+ parentState={{ kNumber, selectedOption, connectionDetails }}
338
+ />
339
+ </div>
340
+ )}
341
+
342
+ <div style={{ textAlign: "center", marginTop: "24px" }}>
343
+ <p style={{ fontSize: "12px", color: "#667085", display: "flex", alignItems: "center", justifyContent: "center", gap: "4px" }}>
344
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
345
+ <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" />
346
+ <path d="M12 11V17M12 7H12.01" strokeLinecap="round" />
347
+ </svg>
348
+ {t("EKYC_SECURE_DATA_NOTICE") || "Your data is encrypted and secure"}
349
+ </p>
350
+ </div>
351
+ </Card>
352
+ </div>
353
+ </div>
354
+ );
355
+ };
356
+
357
+ export default AadhaarVerification;