@retinalabsllc/zairusjs 1.0.8 → 1.1.0
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.
- package/dist/index.d.mts +54 -1
- package/dist/index.d.ts +54 -1
- package/dist/index.js +357 -123
- package/dist/index.mjs +379 -121
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -40,6 +40,7 @@ __export(index_exports, {
|
|
|
40
40
|
ContentGridBlock: () => ContentGridBlock,
|
|
41
41
|
Faq: () => Faq,
|
|
42
42
|
FeatureScroll: () => FeatureScroll,
|
|
43
|
+
FileIconMapper: () => FileIconMapper,
|
|
43
44
|
Footer: () => Footer,
|
|
44
45
|
GifFeatureCard: () => GifFeatureCard,
|
|
45
46
|
Header: () => Header,
|
|
@@ -68,6 +69,7 @@ __export(index_exports, {
|
|
|
68
69
|
UniversalDashboardPage: () => UniversalDashboardPage,
|
|
69
70
|
UniversalDeveloperSettings: () => UniversalDeveloperSettings,
|
|
70
71
|
UniversalDirectoryPage: () => UniversalDirectoryPage,
|
|
72
|
+
UniversalDriveView: () => UniversalDriveView,
|
|
71
73
|
UniversalErrorView: () => UniversalErrorView,
|
|
72
74
|
UniversalIdentityPage: () => UniversalIdentityPage,
|
|
73
75
|
UniversalLookupPage: () => UniversalLookupPage,
|
|
@@ -3112,12 +3114,12 @@ var UniversalOverviewPage = ({
|
|
|
3112
3114
|
},
|
|
3113
3115
|
primaryAction.label,
|
|
3114
3116
|
primaryAction.icon
|
|
3115
|
-
))), /* @__PURE__ */ import_react56.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-8" }, details.map((detail, idx) => /* @__PURE__ */ import_react56.default.createElement("div", { key: idx, className: "min-w-0" }, /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1.5 uppercase" }, detail.label), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[13px] text-black truncate" }, detail.value)))), alerts.map((
|
|
3116
|
-
const bgClass =
|
|
3117
|
-
const textClass =
|
|
3118
|
-
const valClass =
|
|
3119
|
-
const lblClass =
|
|
3120
|
-
return /* @__PURE__ */ import_react56.default.createElement("div", { key: idx, className: `mt-4 p-5 rounded-xl flex flex-col gap-4 ${bgClass}` }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react56.default.createElement("span", { className: `text-[11px] tracking-widest uppercase ${textClass}` },
|
|
3117
|
+
))), /* @__PURE__ */ import_react56.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-8" }, details.map((detail, idx) => /* @__PURE__ */ import_react56.default.createElement("div", { key: idx, className: "min-w-0" }, /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1.5 uppercase" }, detail.label), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[13px] text-black truncate" }, detail.value)))), alerts.map((alert2, idx) => {
|
|
3118
|
+
const bgClass = alert2.type === "warning" ? "bg-amber-50/50" : alert2.type === "info" ? "bg-blue-50/50" : "bg-red-50/50";
|
|
3119
|
+
const textClass = alert2.type === "warning" ? "text-amber-600" : alert2.type === "info" ? "text-blue-600" : "text-red-600";
|
|
3120
|
+
const valClass = alert2.type === "warning" ? "text-amber-700" : alert2.type === "info" ? "text-blue-700" : "text-red-700";
|
|
3121
|
+
const lblClass = alert2.type === "warning" ? "text-amber-400" : alert2.type === "info" ? "text-blue-400" : "text-red-400";
|
|
3122
|
+
return /* @__PURE__ */ import_react56.default.createElement("div", { key: idx, className: `mt-4 p-5 rounded-xl flex flex-col gap-4 ${bgClass}` }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react56.default.createElement("span", { className: `text-[11px] tracking-widest uppercase ${textClass}` }, alert2.title)), alert2.items.map((item, itemIdx) => /* @__PURE__ */ import_react56.default.createElement("div", { key: itemIdx }, /* @__PURE__ */ import_react56.default.createElement("span", { className: `text-[11px] tracking-[0.2em] block mb-1 uppercase ${lblClass}` }, item.label), /* @__PURE__ */ import_react56.default.createElement("p", { className: `text-[13px] leading-relaxed ${valClass}` }, item.text))));
|
|
3121
3123
|
}))));
|
|
3122
3124
|
};
|
|
3123
3125
|
|
|
@@ -3305,14 +3307,244 @@ var UniversalDirectoryPage = ({
|
|
|
3305
3307
|
))))), currentView === "details" && detailsContent, modals);
|
|
3306
3308
|
};
|
|
3307
3309
|
|
|
3308
|
-
// src/components/
|
|
3310
|
+
// src/components/UniversalDriveView.tsx
|
|
3311
|
+
var import_react65 = __toESM(require("react"));
|
|
3312
|
+
var import_react66 = require("@hugeicons/react");
|
|
3313
|
+
var import_core_free_icons22 = require("@hugeicons/core-free-icons");
|
|
3314
|
+
|
|
3315
|
+
// src/components/FileIconMapper.tsx
|
|
3309
3316
|
var import_react63 = __toESM(require("react"));
|
|
3310
3317
|
var import_react64 = require("@hugeicons/react");
|
|
3311
3318
|
var import_core_free_icons21 = require("@hugeicons/core-free-icons");
|
|
3319
|
+
var FileIconMapper = ({ type, mimeType }) => {
|
|
3320
|
+
const mime = mimeType?.toLowerCase() || "";
|
|
3321
|
+
if (type === "FOLDER") {
|
|
3322
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.FolderIcon, size: 18, className: "text-black" });
|
|
3323
|
+
}
|
|
3324
|
+
if (type === "SHEET" || mime.includes("excel") || mime.includes("spreadsheet") || mime.includes("csv")) {
|
|
3325
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.TableIcon, size: 18, className: "text-black" });
|
|
3326
|
+
}
|
|
3327
|
+
if (type === "IMAGE" || mime.startsWith("image/")) {
|
|
3328
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.ImageIcon, size: 18, className: "text-black" });
|
|
3329
|
+
}
|
|
3330
|
+
if (type === "VIDEO" || mime.startsWith("video/")) {
|
|
3331
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.FileVideoIcon, size: 18, className: "text-black" });
|
|
3332
|
+
}
|
|
3333
|
+
if (type === "AUDIO" || mime.startsWith("audio/")) {
|
|
3334
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.FileAudioIcon, size: 18, className: "text-black" });
|
|
3335
|
+
}
|
|
3336
|
+
if (type === "CODE" || mime.includes("json") || mime.includes("javascript") || mime.includes("html")) {
|
|
3337
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.DocumentCodeIcon, size: 18, className: "text-black" });
|
|
3338
|
+
}
|
|
3339
|
+
if (type === "ARCHIVE" || mime.includes("zip") || mime.includes("tar") || mime.includes("rar")) {
|
|
3340
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.FileZipIcon, size: 18, className: "text-black" });
|
|
3341
|
+
}
|
|
3342
|
+
if (type === "DOC" || mime.includes("word")) {
|
|
3343
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.Doc01Icon, size: 18, className: "text-black" });
|
|
3344
|
+
}
|
|
3345
|
+
if (type === "PDF" || mime.includes("pdf")) {
|
|
3346
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.Pdf01Icon, size: 18, className: "text-black" });
|
|
3347
|
+
}
|
|
3348
|
+
if (type === "TXT" || mime.includes("text/plain")) {
|
|
3349
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.Txt01Icon, size: 18, className: "text-black" });
|
|
3350
|
+
}
|
|
3351
|
+
return /* @__PURE__ */ import_react63.default.createElement(import_react64.HugeiconsIcon, { icon: import_core_free_icons21.FileEmpty02Icon, size: 18, className: "text-black" });
|
|
3352
|
+
};
|
|
3353
|
+
|
|
3354
|
+
// src/components/UniversalDriveView.tsx
|
|
3355
|
+
var UniversalDriveView = ({
|
|
3356
|
+
currentFolderId,
|
|
3357
|
+
folderBreadcrumbs,
|
|
3358
|
+
items,
|
|
3359
|
+
uploadQueue,
|
|
3360
|
+
isLoading,
|
|
3361
|
+
isTrashView,
|
|
3362
|
+
searchQuery,
|
|
3363
|
+
currentPage,
|
|
3364
|
+
totalPages,
|
|
3365
|
+
onSearchChange,
|
|
3366
|
+
onNavigateFolder,
|
|
3367
|
+
onCreateFolder,
|
|
3368
|
+
onUploadFiles,
|
|
3369
|
+
onMoveToTrash,
|
|
3370
|
+
onRestoreItems,
|
|
3371
|
+
onEmptyTrash,
|
|
3372
|
+
onClearUploadQueue,
|
|
3373
|
+
onPageChange,
|
|
3374
|
+
onToggleTrashView,
|
|
3375
|
+
onCopyItems,
|
|
3376
|
+
onCutItems,
|
|
3377
|
+
onPasteItems,
|
|
3378
|
+
clipboardCount
|
|
3379
|
+
}) => {
|
|
3380
|
+
const [selectedIds, setSelectedIds] = (0, import_react65.useState)([]);
|
|
3381
|
+
const [isNewFolderModalOpen, setIsNewFolderModalOpen] = (0, import_react65.useState)(false);
|
|
3382
|
+
const [newFolderName, setNewFolderName] = (0, import_react65.useState)("");
|
|
3383
|
+
const [isCreatingFolder, setIsCreatingFolder] = (0, import_react65.useState)(false);
|
|
3384
|
+
const [localSearch, setLocalSearch] = (0, import_react65.useState)(searchQuery);
|
|
3385
|
+
const [isSearching, setIsSearching] = (0, import_react65.useState)(false);
|
|
3386
|
+
const [loadingFolderId, setLoadingFolderId] = (0, import_react65.useState)(null);
|
|
3387
|
+
const [contextMenu, setContextMenu] = (0, import_react65.useState)(null);
|
|
3388
|
+
const tableRef = (0, import_react65.useRef)(null);
|
|
3389
|
+
(0, import_react65.useEffect)(() => {
|
|
3390
|
+
if (localSearch !== searchQuery) setIsSearching(true);
|
|
3391
|
+
const delay = setTimeout(() => {
|
|
3392
|
+
onSearchChange(localSearch);
|
|
3393
|
+
setIsSearching(false);
|
|
3394
|
+
}, 3e3);
|
|
3395
|
+
return () => clearTimeout(delay);
|
|
3396
|
+
}, [localSearch, onSearchChange, searchQuery]);
|
|
3397
|
+
(0, import_react65.useEffect)(() => {
|
|
3398
|
+
if (!isLoading) setLoadingFolderId(null);
|
|
3399
|
+
}, [isLoading]);
|
|
3400
|
+
(0, import_react65.useEffect)(() => {
|
|
3401
|
+
const handleClickOutside = () => setContextMenu(null);
|
|
3402
|
+
document.addEventListener("click", handleClickOutside);
|
|
3403
|
+
return () => document.removeEventListener("click", handleClickOutside);
|
|
3404
|
+
}, []);
|
|
3405
|
+
const formatBytes = (bytes) => {
|
|
3406
|
+
const num = Number(bytes);
|
|
3407
|
+
if (num === 0) return "0 Bytes";
|
|
3408
|
+
const k = 1024;
|
|
3409
|
+
const sizes = ["Bytes", "KB", "MB", "GB"];
|
|
3410
|
+
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3411
|
+
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3412
|
+
};
|
|
3413
|
+
const formatDate3 = (dateString) => {
|
|
3414
|
+
return new Date(dateString).toLocaleDateString("en-US", {
|
|
3415
|
+
month: "short",
|
|
3416
|
+
day: "numeric",
|
|
3417
|
+
year: "numeric"
|
|
3418
|
+
});
|
|
3419
|
+
};
|
|
3420
|
+
const handleRowClick = (id, e) => {
|
|
3421
|
+
if (e.ctrlKey || e.metaKey) {
|
|
3422
|
+
setSelectedIds((prev) => prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]);
|
|
3423
|
+
} else {
|
|
3424
|
+
setSelectedIds([id]);
|
|
3425
|
+
}
|
|
3426
|
+
};
|
|
3427
|
+
const handleSelectAll = () => {
|
|
3428
|
+
if (selectedIds.length === items.length && items.length > 0) setSelectedIds([]);
|
|
3429
|
+
else setSelectedIds(items.map((i) => i.id));
|
|
3430
|
+
};
|
|
3431
|
+
const handleItemDoubleClick = (item) => {
|
|
3432
|
+
if (item.type === "FOLDER") {
|
|
3433
|
+
setLoadingFolderId(item.id);
|
|
3434
|
+
setSelectedIds([]);
|
|
3435
|
+
onNavigateFolder(item.id);
|
|
3436
|
+
}
|
|
3437
|
+
};
|
|
3438
|
+
const handleContextMenu = (e, itemId) => {
|
|
3439
|
+
e.preventDefault();
|
|
3440
|
+
if (!selectedIds.includes(itemId)) setSelectedIds([itemId]);
|
|
3441
|
+
setContextMenu({ x: e.clientX, y: e.clientY, itemId });
|
|
3442
|
+
};
|
|
3443
|
+
const handleCreateFolderSubmit = async (e) => {
|
|
3444
|
+
e.preventDefault();
|
|
3445
|
+
if (!newFolderName.trim() || isCreatingFolder) return;
|
|
3446
|
+
setIsCreatingFolder(true);
|
|
3447
|
+
await onCreateFolder(newFolderName.trim());
|
|
3448
|
+
setNewFolderName("");
|
|
3449
|
+
setIsCreatingFolder(false);
|
|
3450
|
+
setIsNewFolderModalOpen(false);
|
|
3451
|
+
};
|
|
3452
|
+
const activeJobs = uploadQueue.filter((j) => j.status === "UPLOADING" || j.status === "PENDING");
|
|
3453
|
+
const globalProgress = uploadQueue.length > 0 ? Math.round(uploadQueue.reduce((acc, job) => acc + job.progress, 0) / (uploadQueue.length * 100) * 100) : 0;
|
|
3454
|
+
return /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-col gap-6 max-w-5xl w-full mx-auto p-6 bg-white rounded-2xl animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react65.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 border-b border-neutral-100" }, /* @__PURE__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h1", { className: "text-xl text-black tracking-tight mb-1" }, " My Drive"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-xs text-neutral-500" }, "Secure cloud storage optimized for your workspace.")), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center gap-2 shrink-0" }, /* @__PURE__ */ import_react65.default.createElement(
|
|
3455
|
+
"button",
|
|
3456
|
+
{
|
|
3457
|
+
onClick: onToggleTrashView,
|
|
3458
|
+
title: "Trash",
|
|
3459
|
+
className: `p-2.5 rounded-full transition-all outline-none flex items-center justify-center ${isTrashView ? "bg-red-50 text-red-600" : "bg-neutral-50 text-neutral-500 hover:text-black hover:bg-neutral-100"}`
|
|
3460
|
+
},
|
|
3461
|
+
/* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Delete02Icon, size: 18 })
|
|
3462
|
+
), !isTrashView && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, selectedIds.length > 0 && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3463
|
+
onCopyItems(selectedIds);
|
|
3464
|
+
setSelectedIds([]);
|
|
3465
|
+
}, title: "Copy", className: "p-2.5 bg-neutral-50 text-neutral-500 hover:text-black hover:bg-neutral-100 rounded-full transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Copy01Icon, size: 18 })), /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3466
|
+
onCutItems(selectedIds);
|
|
3467
|
+
setSelectedIds([]);
|
|
3468
|
+
}, title: "Cut", className: "p-2.5 bg-neutral-50 text-neutral-500 hover:text-black hover:bg-neutral-100 rounded-full transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Scissor01Icon, size: 18 }))), clipboardCount > 0 && /* @__PURE__ */ import_react65.default.createElement("button", { onClick: onPasteItems, title: `Paste ${clipboardCount} items`, className: "p-2.5 bg-black text-white hover:bg-neutral-800 rounded-full transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.FilePasteIcon, size: 18 })), /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-px h-6 bg-neutral-200 mx-1" }), /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => setIsNewFolderModalOpen(true), title: "New Folder", className: "p-2.5 bg-neutral-50 text-neutral-500 hover:text-black hover:bg-neutral-100 rounded-full transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.FolderAddIcon, size: 18 })), /* @__PURE__ */ import_react65.default.createElement("label", { title: "Upload Files", className: "p-2.5 bg-neutral-50 text-neutral-500 hover:text-black hover:bg-neutral-100 rounded-full cursor-pointer transition-all" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.CloudUploadIcon, size: 18 }), /* @__PURE__ */ import_react65.default.createElement("input", { type: "file", multiple: true, className: "hidden", onChange: (e) => e.target.files && onUploadFiles(e.target.files) }))))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full sm:max-w-xs relative" }, /* @__PURE__ */ import_react65.default.createElement(
|
|
3469
|
+
"input",
|
|
3470
|
+
{
|
|
3471
|
+
type: "text",
|
|
3472
|
+
placeholder: "Search Drive...",
|
|
3473
|
+
className: "w-full pl-4 pr-10 py-2.5 text-xs bg-neutral-50 border border-neutral-100 rounded-full outline-none focus:border-black transition-colors",
|
|
3474
|
+
value: localSearch,
|
|
3475
|
+
onChange: (e) => setLocalSearch(e.target.value)
|
|
3476
|
+
}
|
|
3477
|
+
), isSearching && /* @__PURE__ */ import_react65.default.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 14, className: "animate-spin text-neutral-400" }))), selectedIds.length > 0 && /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center gap-3 bg-neutral-50 border border-neutral-100 px-4 py-2 rounded-full animate-in fade-in duration-200" }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-500 uppercase" }, selectedIds.length, " Selected"), isTrashView ? /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3478
|
+
onRestoreItems(selectedIds);
|
|
3479
|
+
setSelectedIds([]);
|
|
3480
|
+
}, className: "text-emerald-600 hover:text-emerald-700 p-1 flex items-center gap-1.5 text-xs outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.RestoreBinIcon, size: 14 }), " Restore") : /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3481
|
+
onMoveToTrash(selectedIds);
|
|
3482
|
+
setSelectedIds([]);
|
|
3483
|
+
}, className: "text-neutral-500 hover:text-red-600 p-1 flex items-center gap-1.5 text-xs outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Delete02Icon, size: 14 }), " Move to Trash")), isTrashView && selectedIds.length === 0 && /* @__PURE__ */ import_react65.default.createElement("button", { onClick: onEmptyTrash, className: "text-red-600 hover:text-red-700 p-2 text-xs flex items-center gap-2 outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Delete02Icon, size: 14 }), " Empty Trash")), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center gap-1.5 overflow-x-auto text-xs py-1 border-b border-neutral-50 text-neutral-400 whitespace-nowrap" }, folderBreadcrumbs.map((crumb, idx) => /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, { key: idx }, idx > 0 && /* @__PURE__ */ import_react65.default.createElement("span", null, "/"), /* @__PURE__ */ import_react65.default.createElement(
|
|
3484
|
+
"button",
|
|
3485
|
+
{
|
|
3486
|
+
onClick: () => {
|
|
3487
|
+
setSelectedIds([]);
|
|
3488
|
+
onNavigateFolder(crumb.id);
|
|
3489
|
+
},
|
|
3490
|
+
className: `hover:text-black transition-colors outline-none ${idx === folderBreadcrumbs.length - 1 ? "text-black" : ""}`
|
|
3491
|
+
},
|
|
3492
|
+
crumb.name
|
|
3493
|
+
)))), !isLoading && items.length === 0 && /* @__PURE__ */ import_react65.default.createElement("div", { className: "py-24 text-center flex flex-col items-center justify-center border border-dashed border-neutral-100 rounded-xl bg-neutral-50/50" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: isTrashView ? import_core_free_icons22.Delete02Icon : import_core_free_icons22.FolderIcon, size: 40, className: "text-neutral-300 mb-3" }), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-xs text-neutral-500" }, isTrashView ? "Trash is empty." : "This directory is empty.")), /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full overflow-x-auto select-none flex-1", ref: tableRef }, /* @__PURE__ */ import_react65.default.createElement("table", { className: "w-full text-left border-collapse min-w-full" }, /* @__PURE__ */ import_react65.default.createElement("thead", null, /* @__PURE__ */ import_react65.default.createElement("tr", { className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react65.default.createElement("th", { className: "w-10 p-3" }, /* @__PURE__ */ import_react65.default.createElement("input", { type: "checkbox", checked: selectedIds.length === items.length && items.length > 0, onChange: handleSelectAll, className: "rounded border-neutral-200 focus:ring-0 cursor-pointer" })), /* @__PURE__ */ import_react65.default.createElement("th", { className: "text-[11px] uppercase tracking-[0.2em] text-neutral-400 p-3" }, "Name"), /* @__PURE__ */ import_react65.default.createElement("th", { className: "text-[11px] uppercase tracking-[0.2em] text-neutral-400 p-3" }, "Modified"), /* @__PURE__ */ import_react65.default.createElement("th", { className: "text-[11px] uppercase tracking-[0.2em] text-neutral-400 p-3 text-right" }, "Size"))), /* @__PURE__ */ import_react65.default.createElement("tbody", { className: "divide-y divide-neutral-50 relative" }, isLoading && items.length === 0 && /* @__PURE__ */ import_react65.default.createElement("tr", null, /* @__PURE__ */ import_react65.default.createElement("td", { colSpan: 4, className: "py-12 text-center" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, className: "animate-spin mx-auto text-neutral-400", size: 24 }))), items.map((item) => {
|
|
3494
|
+
const isChecked = selectedIds.includes(item.id);
|
|
3495
|
+
return /* @__PURE__ */ import_react65.default.createElement(
|
|
3496
|
+
"tr",
|
|
3497
|
+
{
|
|
3498
|
+
key: item.id,
|
|
3499
|
+
onClick: (e) => handleRowClick(item.id, e),
|
|
3500
|
+
onDoubleClick: () => handleItemDoubleClick(item),
|
|
3501
|
+
onContextMenu: (e) => handleContextMenu(e, item.id),
|
|
3502
|
+
className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}`
|
|
3503
|
+
},
|
|
3504
|
+
/* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react65.default.createElement("input", { type: "checkbox", checked: isChecked, onChange: () => handleRowClick(item.id, { ctrlKey: true }), className: "rounded border-neutral-200 cursor-pointer" })),
|
|
3505
|
+
/* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3 flex items-center gap-3 min-w-0" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-8 h-8 shrink-0 bg-neutral-100 rounded-lg flex items-center justify-center relative" }, loadingFolderId === item.id ? /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 14, className: "animate-spin text-black" }) : /* @__PURE__ */ import_react65.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType })), /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-xs text-black truncate pr-4" }, item.name)),
|
|
3506
|
+
/* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3 text-xs text-neutral-500 whitespace-nowrap" }, formatDate3(item.updatedAt)),
|
|
3507
|
+
/* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3 text-xs text-neutral-500 text-right whitespace-nowrap" }, formatBytes(item.size))
|
|
3508
|
+
);
|
|
3509
|
+
})))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center justify-between pt-4 border-t border-neutral-100" }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] uppercase" }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage <= 1 || isLoading, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black disabled:opacity-30 transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages || isLoading, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black disabled:opacity-30 transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.ArrowRight01Icon, size: 14 })))), contextMenu && /* @__PURE__ */ import_react65.default.createElement(
|
|
3510
|
+
"div",
|
|
3511
|
+
{
|
|
3512
|
+
className: "fixed bg-white border border-neutral-100 shadow-xl rounded-xl w-40 py-2 z-50 flex flex-col text-xs text-black animate-in fade-in zoom-in-95 duration-100",
|
|
3513
|
+
style: { top: contextMenu.y, left: contextMenu.x }
|
|
3514
|
+
},
|
|
3515
|
+
/* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3516
|
+
onCopyItems(selectedIds);
|
|
3517
|
+
setContextMenu(null);
|
|
3518
|
+
}, className: "px-4 py-2 hover:bg-neutral-50 flex items-center gap-3 text-left" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Copy01Icon, size: 14 }), " Copy"),
|
|
3519
|
+
/* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3520
|
+
onCutItems(selectedIds);
|
|
3521
|
+
setContextMenu(null);
|
|
3522
|
+
}, className: "px-4 py-2 hover:bg-neutral-50 flex items-center gap-3 text-left" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Scissor01Icon, size: 14 }), " Cut"),
|
|
3523
|
+
/* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3524
|
+
alert("Share functionality coming soon.");
|
|
3525
|
+
setContextMenu(null);
|
|
3526
|
+
}, className: "px-4 py-2 hover:bg-neutral-50 flex items-center gap-3 text-left" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Share01Icon, size: 14 }), " Share"),
|
|
3527
|
+
/* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full h-px bg-neutral-100 my-1" }),
|
|
3528
|
+
isTrashView ? /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3529
|
+
onRestoreItems(selectedIds);
|
|
3530
|
+
setSelectedIds([]);
|
|
3531
|
+
setContextMenu(null);
|
|
3532
|
+
}, className: "px-4 py-2 hover:bg-emerald-50 text-emerald-600 flex items-center gap-3 text-left" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.RestoreBinIcon, size: 14 }), " Restore") : /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3533
|
+
onMoveToTrash(selectedIds);
|
|
3534
|
+
setSelectedIds([]);
|
|
3535
|
+
setContextMenu(null);
|
|
3536
|
+
}, className: "px-4 py-2 hover:bg-red-50 text-red-600 flex items-center gap-3 text-left" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Delete02Icon, size: 14 }), " Delete")
|
|
3537
|
+
), activeJobs.length > 0 && /* @__PURE__ */ import_react65.default.createElement("div", { className: "fixed bottom-6 right-6 w-80 bg-white border border-neutral-200 shadow-2xl rounded-xl z-100 overflow-hidden flex flex-col animate-in slide-in-from-bottom-4 duration-300" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "p-4 border-b border-neutral-100 bg-neutral-50 flex items-center justify-between" }, /* @__PURE__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h4", { className: "text-xs text-black font-medium" }, "Processing Elements"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[10px] text-neutral-500 mt-0.5" }, "Processing ", activeJobs.length, " active streams")), onClearUploadQueue && activeJobs.length === 0 && /* @__PURE__ */ import_react65.default.createElement("button", { onClick: onClearUploadQueue, className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Cancel01Icon, size: 14 }))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full h-1 bg-neutral-100 relative" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "h-full transition-all duration-500 ease-out", style: { width: `${globalProgress}%`, background: "linear-gradient(to right, #f64b4d, #ffa360)" } }))), isNewFolderModalOpen && /* @__PURE__ */ import_react65.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "absolute inset-0 bg-black/20", onClick: () => !isCreatingFolder && setIsNewFolderModalOpen(false) }), /* @__PURE__ */ import_react65.default.createElement("form", { onSubmit: handleCreateFolderSubmit, className: "relative w-80 bg-white shadow-2xl rounded-2xl p-6 flex flex-col gap-4 animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h3", { className: "text-sm text-black tracking-tight mb-1" }, "Create Folder"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[11px] text-neutral-400" }, "Name your new directory structure.")), /* @__PURE__ */ import_react65.default.createElement("input", { type: "text", placeholder: "Folder name", value: newFolderName, onChange: (e) => setNewFolderName(e.target.value), disabled: isCreatingFolder, className: "w-full px-4 py-2 border border-neutral-200 rounded-lg text-sm outline-none focus:border-black disabled:opacity-50", autoFocus: true }), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center justify-end gap-2 mt-2" }, /* @__PURE__ */ import_react65.default.createElement("button", { type: "button", onClick: () => setIsNewFolderModalOpen(false), disabled: isCreatingFolder, className: "px-4 py-2 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full outline-none disabled:opacity-50" }, "Cancel"), /* @__PURE__ */ import_react65.default.createElement("button", { type: "submit", disabled: !newFolderName.trim() || isCreatingFolder, className: "px-4 py-2 text-xs bg-black text-white rounded-full flex items-center gap-2 hover:bg-neutral-900 disabled:opacity-50 outline-none" }, isCreatingFolder ? /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 14, className: "animate-spin" }) : "Create")))));
|
|
3538
|
+
};
|
|
3539
|
+
|
|
3540
|
+
// src/components/AiApproveDecline.tsx
|
|
3541
|
+
var import_react67 = __toESM(require("react"));
|
|
3542
|
+
var import_react68 = require("@hugeicons/react");
|
|
3543
|
+
var import_core_free_icons23 = require("@hugeicons/core-free-icons");
|
|
3312
3544
|
var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline, onEdit }) => {
|
|
3313
|
-
const [isEditing, setIsEditing] = (0,
|
|
3314
|
-
const [editVal, setEditVal] = (0,
|
|
3315
|
-
return /* @__PURE__ */
|
|
3545
|
+
const [isEditing, setIsEditing] = (0, import_react67.useState)(false);
|
|
3546
|
+
const [editVal, setEditVal] = (0, import_react67.useState)(typeof suggestionValue === "string" ? suggestionValue : "");
|
|
3547
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", { className: "border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-1 uppercase" }, "AI Suggestion: ", suggestionTitle), !isEditing ? /* @__PURE__ */ import_react67.default.createElement("div", { className: "text-sm text-black" }, suggestionValue) : /* @__PURE__ */ import_react67.default.createElement(
|
|
3316
3548
|
"input",
|
|
3317
3549
|
{
|
|
3318
3550
|
type: "text",
|
|
@@ -3321,45 +3553,45 @@ var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline
|
|
|
3321
3553
|
className: "w-full text-sm p-2 border-b border-purple-200 bg-transparent outline-none focus:border-purple-400 transition-colors",
|
|
3322
3554
|
autoFocus: true
|
|
3323
3555
|
}
|
|
3324
|
-
)), /* @__PURE__ */
|
|
3556
|
+
)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-1 mt-2" }, !isEditing ? /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: onApprove, title: "Approve", className: "p-1.5 text-black hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react67.default.createElement("button", { onClick: onDecline, title: "Decline", className: "p-1.5 text-neutral-400 hover:text-neutral-400 hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.CancelCircleIcon, size: 28 })), onEdit && /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setIsEditing(true), title: "Edit", className: "ml-auto p-1.5 text-neutral-400 hover:text-black hover:bg-neutral-100 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.PencilEdit01Icon, size: 18 }))) : /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => {
|
|
3325
3557
|
onEdit?.(editVal);
|
|
3326
3558
|
setIsEditing(false);
|
|
3327
|
-
}, title: "Save Edit", className: "p-1.5 text-emerald-500 hover:text-emerald-600 hover:bg-emerald-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */
|
|
3559
|
+
}, title: "Save Edit", className: "p-1.5 text-emerald-500 hover:text-emerald-600 hover:bg-emerald-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react67.default.createElement("button", { onClick: () => setIsEditing(false), title: "Cancel Edit", className: "p-1.5 text-neutral-400 hover:text-black hover:bg-neutral-100 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.CancelCircleIcon, size: 28 })))));
|
|
3328
3560
|
};
|
|
3329
3561
|
|
|
3330
3562
|
// src/components/AiStageCheck.tsx
|
|
3331
|
-
var
|
|
3332
|
-
var
|
|
3333
|
-
var
|
|
3563
|
+
var import_react69 = __toESM(require("react"));
|
|
3564
|
+
var import_react70 = require("@hugeicons/react");
|
|
3565
|
+
var import_core_free_icons24 = require("@hugeicons/core-free-icons");
|
|
3334
3566
|
var AiStageCheck = ({ tasks }) => {
|
|
3335
|
-
return /* @__PURE__ */
|
|
3567
|
+
return /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-3 p-5 rounded-2xl border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white relative overflow-hidden" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 mb-1 uppercase" }, "AI Processing"), tasks.map((task) => /* @__PURE__ */ import_react69.default.createElement("div", { key: task.id, className: "flex items-center gap-3" }, task.status === "pending" && /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-4 h-4 rounded-full border border-purple-200" }), task.status === "loading" && /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 16, className: "animate-spin text-purple-500" }), task.status === "success" && /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.CheckmarkCircle02Icon, size: 16, className: "text-emerald-500" }), task.status === "error" && /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.CancelCircleIcon, size: 16, className: "text-red-500" }), /* @__PURE__ */ import_react69.default.createElement("span", { className: `text-xs transition-colors ${task.status === "success" ? "text-black" : task.status === "loading" ? "text-purple-700" : "text-neutral-500"}` }, task.label))));
|
|
3336
3568
|
};
|
|
3337
3569
|
|
|
3338
3570
|
// src/components/Stagger.tsx
|
|
3339
|
-
var
|
|
3340
|
-
var
|
|
3341
|
-
var
|
|
3571
|
+
var import_react71 = __toESM(require("react"));
|
|
3572
|
+
var import_react72 = require("@hugeicons/react");
|
|
3573
|
+
var import_core_free_icons25 = require("@hugeicons/core-free-icons");
|
|
3342
3574
|
var Stagger = ({ steps, currentStep }) => {
|
|
3343
3575
|
const getIconForStep = (stepName) => {
|
|
3344
3576
|
const lowerName = stepName.toLowerCase();
|
|
3345
|
-
if (lowerName.includes("document")) return
|
|
3346
|
-
if (lowerName.includes("review")) return
|
|
3347
|
-
if (lowerName.includes("submit")) return
|
|
3348
|
-
return
|
|
3577
|
+
if (lowerName.includes("document")) return import_core_free_icons25.Upload01Icon;
|
|
3578
|
+
if (lowerName.includes("review")) return import_core_free_icons25.FileSyncIcon;
|
|
3579
|
+
if (lowerName.includes("submit")) return import_core_free_icons25.CloudUploadIcon;
|
|
3580
|
+
return import_core_free_icons25.Briefcase02Icon;
|
|
3349
3581
|
};
|
|
3350
|
-
return /* @__PURE__ */
|
|
3582
|
+
return /* @__PURE__ */ import_react71.default.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ import_react71.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-full h-px bg-neutral-100 -z-10" }), /* @__PURE__ */ import_react71.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 h-px bg-emerald-500 -z-10 transition-all duration-500", style: { width: `${currentStep / (steps.length - 1) * 100}%` } }), steps.map((step, idx) => {
|
|
3351
3583
|
const isActive = idx === currentStep;
|
|
3352
3584
|
const isPassed = idx < currentStep;
|
|
3353
3585
|
const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-100 text-neutral-500" : "bg-neutral-100 text-neutral-500";
|
|
3354
|
-
return /* @__PURE__ */
|
|
3586
|
+
return /* @__PURE__ */ import_react71.default.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ import_react71.default.createElement(import_react72.HugeiconsIcon, { icon: getIconForStep(step), size: 11 }));
|
|
3355
3587
|
}));
|
|
3356
3588
|
};
|
|
3357
3589
|
|
|
3358
3590
|
// src/components/UniversalRegistrationFlow.tsx
|
|
3359
|
-
var
|
|
3591
|
+
var import_react73 = __toESM(require("react"));
|
|
3360
3592
|
var import_react_hot_toast7 = __toESM(require("react-hot-toast"));
|
|
3361
|
-
var
|
|
3362
|
-
var
|
|
3593
|
+
var import_react74 = require("@hugeicons/react");
|
|
3594
|
+
var import_core_free_icons26 = require("@hugeicons/core-free-icons");
|
|
3363
3595
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
3364
3596
|
var NIGERIAN_STATES = ["Abia", "Adamawa", "Akwa Ibom", "Anambra", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Edo", "Ekiti", "Enugu", "FCT - Abuja", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"];
|
|
3365
3597
|
var MEMBER_ROLES = ["Director Only", "Shareholder Only", "Both Director & Shareholder"];
|
|
@@ -3372,12 +3604,12 @@ var UniversalRegistrationFlow = ({
|
|
|
3372
3604
|
onRedirectToBilling,
|
|
3373
3605
|
onRedirectToApplication
|
|
3374
3606
|
}) => {
|
|
3375
|
-
const [isBooting, setIsBooting] = (0,
|
|
3376
|
-
const [macroStep, setMacroStep] = (0,
|
|
3377
|
-
const [appStatus, setAppStatus] = (0,
|
|
3378
|
-
const [isAbortModalOpen, setIsAbortModalOpen] = (0,
|
|
3379
|
-
const [isAborting, setIsAborting] = (0,
|
|
3380
|
-
const [formState, setFormState] = (0,
|
|
3607
|
+
const [isBooting, setIsBooting] = (0, import_react73.useState)(true);
|
|
3608
|
+
const [macroStep, setMacroStep] = (0, import_react73.useState)(0);
|
|
3609
|
+
const [appStatus, setAppStatus] = (0, import_react73.useState)("");
|
|
3610
|
+
const [isAbortModalOpen, setIsAbortModalOpen] = (0, import_react73.useState)(false);
|
|
3611
|
+
const [isAborting, setIsAborting] = (0, import_react73.useState)(false);
|
|
3612
|
+
const [formState, setFormState] = (0, import_react73.useState)({
|
|
3381
3613
|
natureApproved: false,
|
|
3382
3614
|
nameApproved: false,
|
|
3383
3615
|
addressApproved: false,
|
|
@@ -3388,13 +3620,13 @@ var UniversalRegistrationFlow = ({
|
|
|
3388
3620
|
passportApproved: false,
|
|
3389
3621
|
signatureApproved: false
|
|
3390
3622
|
});
|
|
3391
|
-
const idRef = (0,
|
|
3392
|
-
const passportRef = (0,
|
|
3393
|
-
const signatureRef = (0,
|
|
3394
|
-
const other1Ref = (0,
|
|
3395
|
-
const other2Ref = (0,
|
|
3396
|
-
const other3Ref = (0,
|
|
3397
|
-
const [formData, setFormData] = (0,
|
|
3623
|
+
const idRef = (0, import_react73.useRef)(null);
|
|
3624
|
+
const passportRef = (0, import_react73.useRef)(null);
|
|
3625
|
+
const signatureRef = (0, import_react73.useRef)(null);
|
|
3626
|
+
const other1Ref = (0, import_react73.useRef)(null);
|
|
3627
|
+
const other2Ref = (0, import_react73.useRef)(null);
|
|
3628
|
+
const other3Ref = (0, import_react73.useRef)(null);
|
|
3629
|
+
const [formData, setFormData] = (0, import_react73.useState)({
|
|
3398
3630
|
businessDesc: "",
|
|
3399
3631
|
natureOfBusiness: null,
|
|
3400
3632
|
proposedName: "",
|
|
@@ -3421,22 +3653,22 @@ var UniversalRegistrationFlow = ({
|
|
|
3421
3653
|
otherDoc3Url: "",
|
|
3422
3654
|
otherDoc3Meta: null
|
|
3423
3655
|
});
|
|
3424
|
-
const [activeModal, setActiveModal] = (0,
|
|
3425
|
-
const [iAgree, setIAgree] = (0,
|
|
3426
|
-
const [isAnalyzingNature, setIsAnalyzingNature] = (0,
|
|
3427
|
-
const [suggestedNature, setSuggestedNature] = (0,
|
|
3428
|
-
const [isCheckingQualifier, setIsCheckingQualifier] = (0,
|
|
3429
|
-
const [qualifierCheckResult, setQualifierCheckResult] = (0,
|
|
3430
|
-
const [isCheckingName, setIsCheckingName] = (0,
|
|
3431
|
-
const [nameCheckResult, setNameCheckResult] = (0,
|
|
3432
|
-
const [globalExtractingId, setGlobalExtractingId] = (0,
|
|
3433
|
-
const [globalUploadingPassport, setGlobalUploadingPassport] = (0,
|
|
3434
|
-
const [globalUploadingSignature, setGlobalUploadingSignature] = (0,
|
|
3435
|
-
const [isUploadingOther1, setIsUploadingOther1] = (0,
|
|
3436
|
-
const [isUploadingOther2, setIsUploadingOther2] = (0,
|
|
3437
|
-
const [isUploadingOther3, setIsUploadingOther3] = (0,
|
|
3438
|
-
const [aiTasks, setAiTasks] = (0,
|
|
3439
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
3656
|
+
const [activeModal, setActiveModal] = (0, import_react73.useState)({ isOpen: false, type: null, memberIndex: null });
|
|
3657
|
+
const [iAgree, setIAgree] = (0, import_react73.useState)(false);
|
|
3658
|
+
const [isAnalyzingNature, setIsAnalyzingNature] = (0, import_react73.useState)(false);
|
|
3659
|
+
const [suggestedNature, setSuggestedNature] = (0, import_react73.useState)(null);
|
|
3660
|
+
const [isCheckingQualifier, setIsCheckingQualifier] = (0, import_react73.useState)(false);
|
|
3661
|
+
const [qualifierCheckResult, setQualifierCheckResult] = (0, import_react73.useState)(null);
|
|
3662
|
+
const [isCheckingName, setIsCheckingName] = (0, import_react73.useState)(false);
|
|
3663
|
+
const [nameCheckResult, setNameCheckResult] = (0, import_react73.useState)(null);
|
|
3664
|
+
const [globalExtractingId, setGlobalExtractingId] = (0, import_react73.useState)(false);
|
|
3665
|
+
const [globalUploadingPassport, setGlobalUploadingPassport] = (0, import_react73.useState)(false);
|
|
3666
|
+
const [globalUploadingSignature, setGlobalUploadingSignature] = (0, import_react73.useState)(false);
|
|
3667
|
+
const [isUploadingOther1, setIsUploadingOther1] = (0, import_react73.useState)(false);
|
|
3668
|
+
const [isUploadingOther2, setIsUploadingOther2] = (0, import_react73.useState)(false);
|
|
3669
|
+
const [isUploadingOther3, setIsUploadingOther3] = (0, import_react73.useState)(false);
|
|
3670
|
+
const [aiTasks, setAiTasks] = (0, import_react73.useState)([]);
|
|
3671
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react73.useState)(false);
|
|
3440
3672
|
const isReadOnly = ["PENDING", "AWAITING_PAYMENT", "COMPLETED"].includes(appStatus);
|
|
3441
3673
|
const isAnyUploading = globalExtractingId || globalUploadingPassport || globalUploadingSignature || isUploadingOther1 || isUploadingOther2 || isUploadingOther3;
|
|
3442
3674
|
const baseApi = async (action, payload = {}) => {
|
|
@@ -3451,7 +3683,7 @@ var UniversalRegistrationFlow = ({
|
|
|
3451
3683
|
return { success: false, error: "Network communication failed." };
|
|
3452
3684
|
}
|
|
3453
3685
|
};
|
|
3454
|
-
(0,
|
|
3686
|
+
(0, import_react73.useEffect)(() => {
|
|
3455
3687
|
baseApi("progress_load").then((data) => {
|
|
3456
3688
|
if (data.success && data.data) {
|
|
3457
3689
|
const meta = data.data;
|
|
@@ -3927,23 +4159,23 @@ var UniversalRegistrationFlow = ({
|
|
|
3927
4159
|
const isStep0Valid = type === "company" ? formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.membersDetailsApproved : formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.ownerApproved;
|
|
3928
4160
|
const isStep1Valid = type === "company" ? formState.membersDocsApproved : formState.idApproved && formState.passportApproved && formState.signatureApproved;
|
|
3929
4161
|
const titleText = type === "company" ? "Company Incorporation (LLC)" : "Business Name Registration";
|
|
3930
|
-
if (isBooting) return /* @__PURE__ */
|
|
4162
|
+
if (isBooting) return /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 32, className: "animate-spin text-black" }));
|
|
3931
4163
|
if (!["DRAFT", "QUEUED", "REJECTED"].includes(appStatus) && appStatus !== "") {
|
|
3932
|
-
return /* @__PURE__ */
|
|
4164
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full max-w-3xl mx-auto bg-white rounded-2xl p-6 sm:p-10 flex flex-col items-center justify-center text-center gap-5 animate-in fade-in slide-in-from-bottom-2 duration-500 mb-20 py-24" }, appStatus === "COMPLETED" ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.CheckmarkBadge01Icon, size: 35 })), /* @__PURE__ */ import_react73.default.createElement("h2", { className: "text-xl text-black" }, "Registration Completed"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application has been successfully verified and registered.")) : appStatus === "PENDING" ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.HourglassIcon, size: 35, className: "animate-spin" })), /* @__PURE__ */ import_react73.default.createElement("h2", { className: "text-xl text-black" }, "Application is Pending"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently pending review.")) : appStatus === "AWAITING_PAYMENT" ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-20 h-20 bg-amber-50 text-amber-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.HourglassIcon, size: 35, className: "animate-pulse" })), /* @__PURE__ */ import_react73.default.createElement("h2", { className: "text-xl text-black" }, "Awaiting Payment"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is complete and awaiting government fee settlement. Please go to the Billing tab to authorize payment."), /* @__PURE__ */ import_react73.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: onRedirectToBilling, className: "px-8 py-3 bg-black text-white text-[11px] tracking-widest rounded-full hover:bg-neutral-800 outline-none" }, "Go to Billing & Invoices"), /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => setIsAbortModalOpen(true), className: "px-8 py-3 border border-neutral-100 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 outline-none" }, "Abort & Edit Application"))) : /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.HourglassIcon, size: 35 })), /* @__PURE__ */ import_react73.default.createElement("h2", { className: "text-xl text-black" }, "Application Submitted"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently ", appStatus.replace(/_/g, " ").toLowerCase(), "."), ["AWAITING_PAYMENT", "READY_FOR_SUBMISSION", "AWAITING_CONFIRMATION"].includes(appStatus) && /* @__PURE__ */ import_react73.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => setIsAbortModalOpen(true), className: "px-8 py-3 border border-neutral-100 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 outline-none" }, "Abort Application"))), isAbortModalOpen && /* @__PURE__ */ import_react73.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isAborting && setIsAbortModalOpen(false) }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "relative w-100 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 text-left" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "p-6 flex flex-col gap-4 text-center" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-[17px] text-black tracking-tight" }, "Abort Application?"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-relaxed" }, "Are you sure you want to abort? If you have already made a payment, returning to draft may cause issues. Your invoice will be deleted.")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full flex " }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => setIsAbortModalOpen(false), disabled: isAborting, className: "flex-1 py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, "Cancel"), /* @__PURE__ */ import_react73.default.createElement("button", { onClick: handleAbort, disabled: isAborting, className: "flex-1 py-4 text-[13px] text-red-500 hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, isAborting ? "Aborting..." : "Yes, Abort")))));
|
|
3933
4165
|
}
|
|
3934
|
-
return /* @__PURE__ */
|
|
4166
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full max-w-3xl mx-auto bg-white rounded-2xl p-6 sm:p-10 flex flex-col gap-10 animate-in fade-in slide-in-from-bottom-2 duration-500 mb-20" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("h2", { className: "text-xl text-black tracking-tight mb-1" }, titleText), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-neutral-500" }, "Answer the questions below to build your official application.")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "px-2" }, /* @__PURE__ */ import_react73.default.createElement(Stagger, { steps: MACRO_STEPS, currentStep: macroStep }))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-8" }, macroStep === 0 && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm " }, "What does your ", type === "company" ? "company" : "business", " do?")), !formState.natureApproved ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-3 " }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: type === "company" ? "Company Description" : "Business Description", placeholder: "e.g. We provide professional services to clients.", value: formData.businessDesc, onChange: (v) => setFormData({ ...formData, businessDesc: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: handleAnalyzeNature, disabled: formData.businessDesc.length < 5 || isAnalyzingNature || isReadOnly, isLoading: isAnalyzingNature, className: "w-fit" }, "Analyze Nature")), isAnalyzingNature && /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react73.default.createElement(AiStageCheck, { tasks: [{ id: "1", label: "Matching with Official Categories...", status: "loading" }] })), suggestedNature && /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react73.default.createElement(AiApproveDecline, { suggestionTitle: "Classification Found", suggestionValue: /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("p", { className: " text-black" }, suggestedNature.specificLabel), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, "Category: ", suggestedNature.categoryLabel)), onApprove: () => {
|
|
3935
4167
|
const newForm = { ...formData, natureOfBusiness: suggestedNature };
|
|
3936
4168
|
setFormData(newForm);
|
|
3937
4169
|
approveSection("natureApproved", newForm);
|
|
3938
|
-
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */
|
|
4170
|
+
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */ import_react73.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "pr-4" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-black" }, formData.natureOfBusiness?.specificLabel), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, formData.businessDesc)), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => editSection("natureApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.PencilEdit01Icon, size: 16 })))), formState.natureApproved && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm " }, "What name would you like to register?")), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide two options. We will verify availability against the official registry."), !formState.nameApproved ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Proposed Name 1 (Preferred)", value: formData.proposedName, onChange: (v) => setFormData({ ...formData, proposedName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Proposed Name 2 (Alternative)", value: formData.proposedName2, onChange: (v) => setFormData({ ...formData, proposedName2: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: () => handleCheckNames(formData.proposedName), disabled: !formData.proposedName || !formData.proposedName2 || isCheckingName || isCheckingQualifier || isReadOnly, isLoading: isCheckingQualifier || isCheckingName, className: "w-fit" }, "Check Availability")), (isCheckingQualifier || isCheckingName) && /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react73.default.createElement(AiStageCheck, { tasks: [{ id: "1", label: "AI Qualifier Pre-check...", status: isCheckingQualifier ? "loading" : "success" }, { id: "2", label: "Checking Official Registry Database...", status: isCheckingName ? "loading" : "pending" }, { id: "3", label: "Fallback Checking Public Database...", status: isCheckingName ? "loading" : "pending" }, { id: "4", label: "Validation Status...", status: isCheckingName ? "loading" : "pending" }] })), qualifierCheckResult && /* @__PURE__ */ import_react73.default.createElement("div", { className: "mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-1" }, "AI Suggestion: Structural Qualifier Missing"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-black mb-3" }, "Nigerian registrations require a structural qualifier to be approved."), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-2" }, (qualifierCheckResult.suggestions || []).map((alt, i) => /* @__PURE__ */ import_react73.default.createElement("button", { key: i, onClick: () => setFormData({ ...formData, proposedName: alt }), className: "text-left px-4 py-2 border border-neutral-100 rounded-full hover:border-black text-sm transition-colors outline-none" }, alt)))), /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => setQualifierCheckResult(null), className: "w-fit text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors mt-2 outline-none" }, "Edit Name Manually"))), nameCheckResult && /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2 animate-in fade-in" }, nameCheckResult.status === "APPROVED" || nameCheckResult.status === "APPROVED_WARNING" || nameCheckResult.status === "SKIPPED" ? /* @__PURE__ */ import_react73.default.createElement(AiApproveDecline, { suggestionTitle: nameCheckResult.status === "APPROVED" ? "Name Available!" : "Fallback Approval", suggestionValue: /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("p", { className: `mb-1 ${nameCheckResult.status === "APPROVED" ? "text-emerald-600 " : "text-orange-500 "}` }, nameCheckResult.status === "APPROVED" ? "Excellent chance of approval." : "Validation Bypassed / Fallback."), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-600" }, nameCheckResult.message), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-600 mt-2 " }, "Proposed Option: ", nameCheckResult.approvedOption)), onApprove: () => {
|
|
3939
4171
|
const newForm = { ...formData, approvedName: nameCheckResult.approvedOption };
|
|
3940
4172
|
setFormData(newForm);
|
|
3941
4173
|
approveSection("nameApproved", newForm);
|
|
3942
|
-
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */
|
|
3943
|
-
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */
|
|
3944
|
-
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */
|
|
3945
|
-
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */
|
|
3946
|
-
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: addCompanyMember, className: "px-6 py-2 bg-white border border-neutral-100 text-black text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none" }, "+ Add Member"), /* @__PURE__ */ import_react69.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react69.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide basic contact info. We will extract your DOB and ID number automatically in the next step."), !formState.ownerApproved ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react69.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react69.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react69.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react69.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react69.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload valid means of identification, passport photographs, and signatures for every director and shareholder.")), !formState.membersDocsApproved ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react69.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react69.default.createElement("input", { id: `id-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "id"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react69.default.createElement("input", { id: `pass-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "passport"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react69.default.createElement("input", { id: `sig-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "signature"), disabled: isReadOnly || isAnyUploading }), !member.idExtractedData && !globalExtractingId ? /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`id-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react69.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react69.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react69.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload ID"))) : null, !member.passportFileUrl && !globalUploadingPassport ? /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`pass-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`sig-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react69.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react69.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: idRef, onChange: (e) => handleBusinessUpload(e, "id"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react69.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: passportRef, onChange: (e) => handleBusinessUpload(e, "passport"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react69.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: signatureRef, onChange: (e) => handleBusinessUpload(e, "signature"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 -mt-2" }, "Upload your NIN, Driver's License, Voter's Card, or Int'l Passport (JPG/PNG/WEBP)."), !formState.idApproved ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && idRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `w-full h-32 border border-neutral-100 rounded-full flex flex-col items-center justify-center gap-2 transition-colors outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "hover:bg-neutral-50 text-black"}` }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react69.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react69.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react69.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "Full Name on ID", value: formData.idExtractedData.fullName, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, fullName: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react69.default.createElement(TextInput, { label: "Date of Birth (YYYY-MM-DD)", value: formData.idExtractedData.dob, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, dob: v } })), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react69.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => deleteBusinessDocument("id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload")))) : /* @__PURE__ */ import_react69.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && passportRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => deleteBusinessDocument("passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && signatureRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("button", { onClick: () => deleteBusinessDocument("signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-4 pt-6 border-t border-neutral-100 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react69.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other1Ref, onChange: (e) => handleOptionalUpload(e, "other1"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react69.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other2Ref, onChange: (e) => handleOptionalUpload(e, "other2"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react69.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other3Ref, onChange: (e) => handleOptionalUpload(e, "other3"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "If your ", type === "company" ? "company" : "business", " involves regulated professional services, please upload relevant licenses, certificates, or permits here (up to 3 documents).")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
4174
|
+
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */ import_react73.default.createElement("div", { className: "border border-red-100 bg-linear-to-bl from-red-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] tracking-widest text-red-600 block mb-1" }, "Registry Conflict Detected"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-black mb-3" }, nameCheckResult.message), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-2" }, (nameCheckResult.alternatives || []).map((alt, i) => /* @__PURE__ */ import_react73.default.createElement("button", { key: i, onClick: () => setFormData({ ...formData, proposedName: alt }), className: "text-left px-4 py-2 border border-neutral-100 rounded-full hover:border-black text-sm transition-colors outline-none" }, alt)))), /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => setNameCheckResult(null), className: "w-fit text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors mt-2 outline-none" }, "Try New Name")))) : /* @__PURE__ */ import_react73.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-black" }, formData.approvedName), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Verified against registry")), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => editSection("nameApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.PencilEdit01Icon, size: 16 })))), formState.nameApproved && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm " }, "Where is your head office located?")), !formState.addressApproved ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Street Address", value: formData.address, onChange: (v) => setFormData({ ...formData, address: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "City", value: formData.city, onChange: (v) => setFormData({ ...formData, city: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "State", value: formData.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: null, isGlobalState: true }), placeholder: "Select State", onChange: () => {
|
|
4175
|
+
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: () => approveSection("addressApproved"), disabled: !formData.address || !formData.city || !formData.state || isReadOnly, className: "w-fit mt-2" }, "Confirm Address")) : /* @__PURE__ */ import_react73.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-neutral-500" }, formData.address, ", ", formData.city, ", ", formData.state), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => editSection("addressApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "company" && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between gap-2 text-black" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm " }, "Directors & Shareholders")), !formState.membersDetailsApproved && /* @__PURE__ */ import_react73.default.createElement("div", { className: `text-xs px-3 py-1 rounded-full ${getCompanyTotalShares() === 100 ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-500"}` }, "Total Shares: ", getCompanyTotalShares(), "%")), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide details for all individuals. Ensure total share percentage equals 100%."), !formState.membersDetailsApproved ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-6 " }, formData.members.map((member, i) => /* @__PURE__ */ import_react73.default.createElement("div", { key: member.id, className: "flex flex-col gap-4 border border-neutral-100 p-5 rounded-2xl bg-neutral-50/30" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-between items-center mb-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400" }, "Member ", i + 1), formData.members.length > 1 && !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => removeCompanyMember(i), className: "text-red-500 text-xs hover:text-red-600" }, "Remove")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Role", value: member.role, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "role", memberIndex: i }), onChange: () => {
|
|
4176
|
+
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */ import_react73.default.createElement(NumberInput, { label: "Share Percentage (%)", value: member.sharePercentage, onChange: (v) => updateCompanyMemberInfo(i, "sharePercentage", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Full Name", value: member.fullName, onChange: (v) => updateCompanyMemberInfo(i, "fullName", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react73.default.createElement(NumberInput, { label: "Phone Number", value: member.phone, onChange: (v) => updateCompanyMemberInfo(i, "phone", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Email Address", value: member.email, onChange: (v) => updateCompanyMemberInfo(i, "email", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Nationality", value: member.nationality, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "nationality", memberIndex: i }), onChange: () => {
|
|
4177
|
+
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Residential Address", value: member.address, onChange: (v) => updateCompanyMemberInfo(i, "address", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "City", value: member.city, onChange: (v) => updateCompanyMemberInfo(i, "city", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "State", value: member.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: i }), onChange: () => {
|
|
4178
|
+
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: addCompanyMember, className: "px-6 py-2 bg-white border border-neutral-100 text-black text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none" }, "+ Add Member"), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react73.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide basic contact info. We will extract your DOB and ID number automatically in the next step."), !formState.ownerApproved ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react73.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react73.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload valid means of identification, passport photographs, and signatures for every director and shareholder.")), !formState.membersDocsApproved ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react73.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react73.default.createElement("input", { id: `id-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "id"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react73.default.createElement("input", { id: `pass-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "passport"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react73.default.createElement("input", { id: `sig-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "signature"), disabled: isReadOnly || isAnyUploading }), !member.idExtractedData && !globalExtractingId ? /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`id-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react73.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload ID"))) : null, !member.passportFileUrl && !globalUploadingPassport ? /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`pass-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`sig-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react73.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: idRef, onChange: (e) => handleBusinessUpload(e, "id"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react73.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: passportRef, onChange: (e) => handleBusinessUpload(e, "passport"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react73.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: signatureRef, onChange: (e) => handleBusinessUpload(e, "signature"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 -mt-2" }, "Upload your NIN, Driver's License, Voter's Card, or Int'l Passport (JPG/PNG/WEBP)."), !formState.idApproved ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && idRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `w-full h-32 border border-neutral-100 rounded-full flex flex-col items-center justify-center gap-2 transition-colors outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "hover:bg-neutral-50 text-black"}` }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react73.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react73.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Full Name on ID", value: formData.idExtractedData.fullName, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, fullName: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react73.default.createElement(TextInput, { label: "Date of Birth (YYYY-MM-DD)", value: formData.idExtractedData.dob, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, dob: v } })), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => deleteBusinessDocument("id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload")))) : /* @__PURE__ */ import_react73.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && passportRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => deleteBusinessDocument("passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && signatureRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => deleteBusinessDocument("signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 pt-6 border-t border-neutral-100 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react73.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other1Ref, onChange: (e) => handleOptionalUpload(e, "other1"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react73.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other2Ref, onChange: (e) => handleOptionalUpload(e, "other2"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react73.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other3Ref, onChange: (e) => handleOptionalUpload(e, "other3"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "If your ", type === "company" ? "company" : "business", " involves regulated professional services, please upload relevant licenses, certificates, or permits here (up to 3 documents).")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
3947
4179
|
const docType = `other${num}`;
|
|
3948
4180
|
const ref = num === 1 ? other1Ref : num === 2 ? other2Ref : other3Ref;
|
|
3949
4181
|
const isUploading = num === 1 ? isUploadingOther1 : num === 2 ? isUploadingOther2 : isUploadingOther3;
|
|
@@ -3951,29 +4183,29 @@ var UniversalRegistrationFlow = ({
|
|
|
3951
4183
|
if (!fileUrl && !isUploading) {
|
|
3952
4184
|
const prevUrl = num > 1 ? formData[`otherDoc${num - 1}Url`] : true;
|
|
3953
4185
|
if (!prevUrl) return null;
|
|
3954
|
-
return /* @__PURE__ */
|
|
4186
|
+
return /* @__PURE__ */ import_react73.default.createElement("button", { key: num, onClick: () => !isReadOnly && !isAnyUploading && ref.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Optional Document ", num);
|
|
3955
4187
|
}
|
|
3956
4188
|
if (isUploading) {
|
|
3957
|
-
return /* @__PURE__ */
|
|
4189
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { key: num, className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
3958
4190
|
}
|
|
3959
|
-
return /* @__PURE__ */
|
|
3960
|
-
}))), /* @__PURE__ */
|
|
4191
|
+
return /* @__PURE__ */ import_react73.default.createElement("div", { key: num, className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.CheckmarkBadge01Icon, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => deleteOptionalDocument(docType), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.Delete02Icon, size: 16 })));
|
|
4192
|
+
}))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: handleBack, disabled: isAnyUploading, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react73.default.createElement("div", null, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ import_react73.default.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ import_react73.default.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ import_react73.default.createElement(import_react73.default.Fragment, null, /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ import_react73.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ import_react73.default.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ import_react73.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ import_react73.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ import_react73.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 rounded-full text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none" }, /* @__PURE__ */ import_react73.default.createElement(import_react74.HugeiconsIcon, { icon: import_core_free_icons26.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ import_react73.default.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ import_react73.default.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ import_react73.default.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ import_react73.default.createElement("p", { className: "mb-3 leading-relaxed" }, "By proceeding with this application, you acknowledge and agree that all data, documents, and identification materials provided herein will be securely transmitted to the relevant official registries and authorized agents for the purpose of ", type === "company" ? "company" : "business", " incorporation and compliance verification."), /* @__PURE__ */ import_react73.default.createElement("p", { className: "mb-3 leading-relaxed" }, "You confirm that all information provided is accurate and authentic. Any falsification of identity or corporate data may result in immediate rejection, and you may be held liable under applicable laws and regulations."), /* @__PURE__ */ import_react73.default.createElement("p", { className: "mb-3 leading-relaxed" }, "This service operates strictly as a digital intermediary connecting you with official registries. The final approval of the ", type === "company" ? "company" : "business", " name and registration rests solely with the regulatory authorities. We are not liable for rejections arising from pre existing conflicts, non compliance, or regulatory policy changes not flagged during the AI pre check stages."), /* @__PURE__ */ import_react73.default.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ import_react73.default.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ import_react73.default.createElement("input", { type: "checkbox", checked: iAgree, onChange: (e) => setIAgree(e.target.checked), disabled: isReadOnly, className: "mt-0.5 w-4 h-4 accent-black rounded cursor-pointer" }), /* @__PURE__ */ import_react73.default.createElement("span", { className: "text-[13px] text-red-500 group-hover:text-red-600 transition-colors" }, "I have read, understood, and agree to the terms of data transfer and processing.")), /* @__PURE__ */ import_react73.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: onCancelOrClose, disabled: isSubmitting, className: "px-8 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none w-full sm:w-auto" }, "Cancel"), /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => setMacroStep(0), disabled: isSubmitting || isReadOnly, className: "px-8 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none w-full sm:w-auto" }, "Edit Application"), /* @__PURE__ */ import_react73.default.createElement(ThreeDActionButton, { onClick: handleFinalSubmit, disabled: isSubmitting || !iAgree || isReadOnly, isLoading: isSubmitting, className: "min-w-40 w-full sm:w-auto" }, "Submit")))), activeModal.isOpen && /* @__PURE__ */ import_react73.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ import_react73.default.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 max-h-[80vh]" }, /* @__PURE__ */ import_react73.default.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ import_react73.default.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ import_react73.default.createElement("div", { className: "p-4 flex flex-col gap-2 overflow-y-auto custom-scrollbar" }, (activeModal.type === "state" ? NIGERIAN_STATES : activeModal.type === "role" ? MEMBER_ROLES : NATIONALITIES).map((opt) => {
|
|
3961
4193
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
3962
|
-
return /* @__PURE__ */
|
|
4194
|
+
return /* @__PURE__ */ import_react73.default.createElement("button", { key: opt, onClick: () => {
|
|
3963
4195
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
3964
4196
|
else updateCompanyMemberInfo(activeModal.memberIndex, activeModal.type, opt);
|
|
3965
4197
|
setActiveModal({ isOpen: false, type: null, memberIndex: null });
|
|
3966
4198
|
}, className: `text-left px-4 py-3 rounded-full text-[13px] transition-colors outline-none ${isSelected ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}` }, opt);
|
|
3967
|
-
})), /* @__PURE__ */
|
|
4199
|
+
})), /* @__PURE__ */ import_react73.default.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ import_react73.default.createElement("button", { onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }), className: "w-full py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none" }, "Close")))));
|
|
3968
4200
|
};
|
|
3969
4201
|
|
|
3970
4202
|
// src/components/UniversalDeveloperSettings.tsx
|
|
3971
|
-
var
|
|
4203
|
+
var import_react75 = __toESM(require("react"));
|
|
3972
4204
|
var import_react_hot_toast8 = require("react-hot-toast");
|
|
3973
|
-
var
|
|
3974
|
-
var
|
|
3975
|
-
var ButtonSpinner5 = () => /* @__PURE__ */
|
|
3976
|
-
var PageSpinner6 = () => /* @__PURE__ */
|
|
4205
|
+
var import_react76 = require("@hugeicons/react");
|
|
4206
|
+
var import_core_free_icons27 = require("@hugeicons/core-free-icons");
|
|
4207
|
+
var ButtonSpinner5 = () => /* @__PURE__ */ import_react75.default.createElement(import_react76.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 16, className: "animate-spin text-current" });
|
|
4208
|
+
var PageSpinner6 = () => /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ import_react75.default.createElement(import_react76.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 32, className: "animate-spin text-black" }));
|
|
3977
4209
|
var UniversalDeveloperSettings = ({
|
|
3978
4210
|
initialPublicKey,
|
|
3979
4211
|
initialWebhookUrl,
|
|
@@ -3982,12 +4214,12 @@ var UniversalDeveloperSettings = ({
|
|
|
3982
4214
|
onGenerateKeys,
|
|
3983
4215
|
onSaveWebhook
|
|
3984
4216
|
}) => {
|
|
3985
|
-
const [publicKey, setPublicKey] = (0,
|
|
3986
|
-
const [webhookUrl, setWebhookUrl] = (0,
|
|
3987
|
-
const [isGenerating, setIsGenerating] = (0,
|
|
3988
|
-
const [isSavingWebhook, setIsSavingWebhook] = (0,
|
|
3989
|
-
const [isRollModalOpen, setIsRollModalOpen] = (0,
|
|
3990
|
-
(0,
|
|
4217
|
+
const [publicKey, setPublicKey] = (0, import_react75.useState)(initialPublicKey);
|
|
4218
|
+
const [webhookUrl, setWebhookUrl] = (0, import_react75.useState)(initialWebhookUrl);
|
|
4219
|
+
const [isGenerating, setIsGenerating] = (0, import_react75.useState)(false);
|
|
4220
|
+
const [isSavingWebhook, setIsSavingWebhook] = (0, import_react75.useState)(false);
|
|
4221
|
+
const [isRollModalOpen, setIsRollModalOpen] = (0, import_react75.useState)(false);
|
|
4222
|
+
(0, import_react75.useEffect)(() => {
|
|
3991
4223
|
setPublicKey(initialPublicKey || "");
|
|
3992
4224
|
setWebhookUrl(initialWebhookUrl || "");
|
|
3993
4225
|
}, [initialPublicKey, initialWebhookUrl]);
|
|
@@ -4047,7 +4279,7 @@ SECRET_KEY="${secKey}"
|
|
|
4047
4279
|
};
|
|
4048
4280
|
const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
|
|
4049
4281
|
const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
|
|
4050
|
-
return /* @__PURE__ */
|
|
4282
|
+
return /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 min-h-full" }, /* @__PURE__ */ import_react75.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react75.default.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ import_react75.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ import_react75.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center shrink-0" }, /* @__PURE__ */ import_react75.default.createElement(import_react76.HugeiconsIcon, { icon: import_core_free_icons27.CircleLock02Icon, size: 18, className: "text-current" }))), isLoading ? /* @__PURE__ */ import_react75.default.createElement(PageSpinner6, null) : /* @__PURE__ */ import_react75.default.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react75.default.createElement(
|
|
4051
4283
|
TextInput,
|
|
4052
4284
|
{
|
|
4053
4285
|
label: "Public Key",
|
|
@@ -4056,7 +4288,7 @@ SECRET_KEY="${secKey}"
|
|
|
4056
4288
|
},
|
|
4057
4289
|
disabled: true
|
|
4058
4290
|
}
|
|
4059
|
-
), /* @__PURE__ */
|
|
4291
|
+
), /* @__PURE__ */ import_react75.default.createElement("p", { className: "text-[11px] text-neutral-400 mt-1 leading-snug" }, "Your public key is used to identify your application. Your secret key will only be shown once upon generation.")), /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react75.default.createElement(
|
|
4060
4292
|
ThreeDActionButton,
|
|
4061
4293
|
{
|
|
4062
4294
|
onClick: () => {
|
|
@@ -4068,7 +4300,7 @@ SECRET_KEY="${secKey}"
|
|
|
4068
4300
|
className: "w-fit"
|
|
4069
4301
|
},
|
|
4070
4302
|
publicKey ? "Roll API Keys" : "Generate Keys"
|
|
4071
|
-
))), /* @__PURE__ */
|
|
4303
|
+
))), /* @__PURE__ */ import_react75.default.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react75.default.createElement(
|
|
4072
4304
|
TextInput,
|
|
4073
4305
|
{
|
|
4074
4306
|
label: "Webhook URL",
|
|
@@ -4078,7 +4310,7 @@ SECRET_KEY="${secKey}"
|
|
|
4078
4310
|
placeholder: "https://your-domain.com/webhook",
|
|
4079
4311
|
type: "url"
|
|
4080
4312
|
}
|
|
4081
|
-
), /* @__PURE__ */
|
|
4313
|
+
), /* @__PURE__ */ import_react75.default.createElement("p", { className: "text-[11px] text-neutral-400 mt-1 leading-snug" }, "We will send secure POST requests to this endpoint when significant events occur. Must use HTTPS.")), /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react75.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Webhook Status"), /* @__PURE__ */ import_react75.default.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasWebhookChanges && !isSavingWebhook && !isReadOnly && /* @__PURE__ */ import_react75.default.createElement(
|
|
4082
4314
|
"button",
|
|
4083
4315
|
{
|
|
4084
4316
|
type: "button",
|
|
@@ -4086,7 +4318,7 @@ SECRET_KEY="${secKey}"
|
|
|
4086
4318
|
className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors w-full sm:w-auto py-2 sm:py-0 outline-none"
|
|
4087
4319
|
},
|
|
4088
4320
|
"Cancel"
|
|
4089
|
-
), /* @__PURE__ */
|
|
4321
|
+
), /* @__PURE__ */ import_react75.default.createElement(
|
|
4090
4322
|
ThreeDActionButton,
|
|
4091
4323
|
{
|
|
4092
4324
|
type: "submit",
|
|
@@ -4095,7 +4327,7 @@ SECRET_KEY="${secKey}"
|
|
|
4095
4327
|
className: "min-w-32 w-full sm:w-auto"
|
|
4096
4328
|
},
|
|
4097
4329
|
"Save Webhook"
|
|
4098
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */
|
|
4330
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ import_react75.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ import_react75.default.createElement("div", { className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react75.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react75.default.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ import_react75.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.")), /* @__PURE__ */ import_react75.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react75.default.createElement(
|
|
4099
4331
|
"button",
|
|
4100
4332
|
{
|
|
4101
4333
|
onClick: () => setIsRollModalOpen(false),
|
|
@@ -4103,19 +4335,19 @@ SECRET_KEY="${secKey}"
|
|
|
4103
4335
|
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
4104
4336
|
},
|
|
4105
4337
|
"Cancel"
|
|
4106
|
-
), /* @__PURE__ */
|
|
4338
|
+
), /* @__PURE__ */ import_react75.default.createElement(
|
|
4107
4339
|
"button",
|
|
4108
4340
|
{
|
|
4109
4341
|
onClick: handleGenerateKeys,
|
|
4110
4342
|
disabled: isGenerating,
|
|
4111
4343
|
className: "flex-1 py-3 text-[13px] text-red-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 flex justify-center items-center outline-none"
|
|
4112
4344
|
},
|
|
4113
|
-
isGenerating ? /* @__PURE__ */
|
|
4345
|
+
isGenerating ? /* @__PURE__ */ import_react75.default.createElement(ButtonSpinner5, null) : "Roll Keys"
|
|
4114
4346
|
)))));
|
|
4115
4347
|
};
|
|
4116
4348
|
|
|
4117
4349
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4118
|
-
var
|
|
4350
|
+
var import_react77 = __toESM(require("react"));
|
|
4119
4351
|
var import_image11 = __toESM(require("next/image"));
|
|
4120
4352
|
var MedicalFeatureStatsBlock = ({
|
|
4121
4353
|
bottomHeadline,
|
|
@@ -4124,9 +4356,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4124
4356
|
trustText,
|
|
4125
4357
|
stats
|
|
4126
4358
|
}) => {
|
|
4127
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
4128
|
-
const titleRef = (0,
|
|
4129
|
-
(0,
|
|
4359
|
+
const [isAnimating, setIsAnimating] = (0, import_react77.useState)(false);
|
|
4360
|
+
const titleRef = (0, import_react77.useRef)(null);
|
|
4361
|
+
(0, import_react77.useEffect)(() => {
|
|
4130
4362
|
const observer = new IntersectionObserver(
|
|
4131
4363
|
([entry]) => {
|
|
4132
4364
|
if (entry.isIntersecting) {
|
|
@@ -4144,7 +4376,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4144
4376
|
}
|
|
4145
4377
|
return () => observer.disconnect();
|
|
4146
4378
|
}, []);
|
|
4147
|
-
return /* @__PURE__ */
|
|
4379
|
+
return /* @__PURE__ */ import_react77.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react77.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react77.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react77.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react77.default.createElement(
|
|
4148
4380
|
"h2",
|
|
4149
4381
|
{
|
|
4150
4382
|
ref: titleRef,
|
|
@@ -4152,7 +4384,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4152
4384
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4153
4385
|
},
|
|
4154
4386
|
bottomHeadline
|
|
4155
|
-
), /* @__PURE__ */
|
|
4387
|
+
), /* @__PURE__ */ import_react77.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react77.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react77.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react77.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react77.default.createElement(
|
|
4156
4388
|
import_image11.default,
|
|
4157
4389
|
{
|
|
4158
4390
|
src,
|
|
@@ -4161,17 +4393,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4161
4393
|
sizes: "48px",
|
|
4162
4394
|
className: "object-cover"
|
|
4163
4395
|
}
|
|
4164
|
-
)))), /* @__PURE__ */
|
|
4396
|
+
)))), /* @__PURE__ */ import_react77.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react77.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react77.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react77.default.createElement("div", { className: "flex pl-3 items-center border border-neutral-100 rounded-full p-0.5 mb-6" }, /* @__PURE__ */ import_react77.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react77.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
4165
4397
|
};
|
|
4166
4398
|
|
|
4167
4399
|
// src/components/ConsultantShowcase.tsx
|
|
4168
|
-
var
|
|
4400
|
+
var import_react78 = __toESM(require("react"));
|
|
4169
4401
|
var import_image12 = __toESM(require("next/image"));
|
|
4170
|
-
var
|
|
4171
|
-
var
|
|
4402
|
+
var import_react79 = require("@hugeicons/react");
|
|
4403
|
+
var import_core_free_icons28 = require("@hugeicons/core-free-icons");
|
|
4172
4404
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4173
|
-
const [isLoading, setIsLoading] = (0,
|
|
4174
|
-
return /* @__PURE__ */
|
|
4405
|
+
const [isLoading, setIsLoading] = (0, import_react78.useState)(true);
|
|
4406
|
+
return /* @__PURE__ */ import_react78.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react78.default.createElement(
|
|
4175
4407
|
import_image12.default,
|
|
4176
4408
|
{
|
|
4177
4409
|
src,
|
|
@@ -4190,9 +4422,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4190
4422
|
var ConsultantShowcase = ({
|
|
4191
4423
|
profiles
|
|
4192
4424
|
}) => {
|
|
4193
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
4194
|
-
const [touchStart, setTouchStart] = (0,
|
|
4195
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
4425
|
+
const [currentIndex, setCurrentIndex] = (0, import_react78.useState)(0);
|
|
4426
|
+
const [touchStart, setTouchStart] = (0, import_react78.useState)(null);
|
|
4427
|
+
const [touchEnd, setTouchEnd] = (0, import_react78.useState)(null);
|
|
4196
4428
|
const nextSlide = () => {
|
|
4197
4429
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4198
4430
|
};
|
|
@@ -4217,7 +4449,7 @@ var ConsultantShowcase = ({
|
|
|
4217
4449
|
}
|
|
4218
4450
|
};
|
|
4219
4451
|
if (!profiles || profiles.length === 0) return null;
|
|
4220
|
-
return /* @__PURE__ */
|
|
4452
|
+
return /* @__PURE__ */ import_react78.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react78.default.createElement(
|
|
4221
4453
|
"div",
|
|
4222
4454
|
{
|
|
4223
4455
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4227,13 +4459,13 @@ var ConsultantShowcase = ({
|
|
|
4227
4459
|
},
|
|
4228
4460
|
profiles.map((profile, idx) => {
|
|
4229
4461
|
const isActive = idx === currentIndex;
|
|
4230
|
-
return /* @__PURE__ */
|
|
4462
|
+
return /* @__PURE__ */ import_react78.default.createElement(
|
|
4231
4463
|
"div",
|
|
4232
4464
|
{
|
|
4233
4465
|
key: profile.id,
|
|
4234
4466
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4235
4467
|
},
|
|
4236
|
-
/* @__PURE__ */
|
|
4468
|
+
/* @__PURE__ */ import_react78.default.createElement(
|
|
4237
4469
|
ImageWithLoader,
|
|
4238
4470
|
{
|
|
4239
4471
|
src: profile.imageSrc,
|
|
@@ -4241,14 +4473,14 @@ var ConsultantShowcase = ({
|
|
|
4241
4473
|
priority: idx === 0
|
|
4242
4474
|
}
|
|
4243
4475
|
),
|
|
4244
|
-
/* @__PURE__ */
|
|
4245
|
-
/* @__PURE__ */
|
|
4246
|
-
/* @__PURE__ */
|
|
4476
|
+
/* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
4477
|
+
/* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
4478
|
+
/* @__PURE__ */ import_react78.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
|
|
4247
4479
|
);
|
|
4248
4480
|
}),
|
|
4249
|
-
/* @__PURE__ */
|
|
4250
|
-
/* @__PURE__ */
|
|
4251
|
-
/* @__PURE__ */
|
|
4481
|
+
/* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
|
|
4482
|
+
/* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
|
|
4483
|
+
/* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react78.default.createElement(
|
|
4252
4484
|
"button",
|
|
4253
4485
|
{
|
|
4254
4486
|
key: idx,
|
|
@@ -4261,13 +4493,13 @@ var ConsultantShowcase = ({
|
|
|
4261
4493
|
};
|
|
4262
4494
|
|
|
4263
4495
|
// src/components/ContentGridBlock.tsx
|
|
4264
|
-
var
|
|
4496
|
+
var import_react80 = __toESM(require("react"));
|
|
4265
4497
|
var import_image13 = __toESM(require("next/image"));
|
|
4266
|
-
var
|
|
4267
|
-
var
|
|
4498
|
+
var import_react81 = require("@hugeicons/react");
|
|
4499
|
+
var import_core_free_icons29 = require("@hugeicons/core-free-icons");
|
|
4268
4500
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4269
|
-
const [isLoading, setIsLoading] = (0,
|
|
4270
|
-
return /* @__PURE__ */
|
|
4501
|
+
const [isLoading, setIsLoading] = (0, import_react80.useState)(true);
|
|
4502
|
+
return /* @__PURE__ */ import_react80.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react80.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react80.default.createElement(import_react81.HugeiconsIcon, { icon: import_core_free_icons29.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react80.default.createElement(
|
|
4271
4503
|
import_image13.default,
|
|
4272
4504
|
{
|
|
4273
4505
|
src,
|
|
@@ -4289,14 +4521,14 @@ var ContentGridBlock = ({
|
|
|
4289
4521
|
middleBottomCard,
|
|
4290
4522
|
rightCards
|
|
4291
4523
|
}) => {
|
|
4292
|
-
return /* @__PURE__ */
|
|
4524
|
+
return /* @__PURE__ */ import_react80.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react80.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react80.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react80.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "border border-neutral-100 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[17px] text-black leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react80.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-400 uppercase tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react80.default.createElement("div", null, /* @__PURE__ */ import_react80.default.createElement("h4", { className: "text-[15px] text-black" }, leftCard.title), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[13px] text-neutral-400" }, leftCard.subtitle)), /* @__PURE__ */ import_react80.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react80.default.createElement(import_image13.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "border border-neutral-100 rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react80.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react80.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react80.default.createElement(import_image13.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react80.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react80.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react80.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react80.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react80.default.createElement("div", { className: "border border-neutral-100 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react80.default.createElement("div", null, /* @__PURE__ */ import_react80.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react80.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react80.default.createElement(import_image13.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react80.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react80.default.createElement("span", { className: "text-[11px] text-neutral-400 uppercase tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react80.default.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react80.default.createElement(
|
|
4293
4525
|
ImageWithLoader2,
|
|
4294
4526
|
{
|
|
4295
4527
|
src: card.bgImageSrc,
|
|
4296
4528
|
alt: card.title,
|
|
4297
4529
|
className: "absolute inset-0 w-full h-full"
|
|
4298
4530
|
}
|
|
4299
|
-
), /* @__PURE__ */
|
|
4531
|
+
), /* @__PURE__ */ import_react80.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ import_react80.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react80.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 uppercase tracking-widest" }, card.tag), /* @__PURE__ */ import_react80.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react80.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
4300
4532
|
};
|
|
4301
4533
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4302
4534
|
0 && (module.exports = {
|
|
@@ -4309,6 +4541,7 @@ var ContentGridBlock = ({
|
|
|
4309
4541
|
ContentGridBlock,
|
|
4310
4542
|
Faq,
|
|
4311
4543
|
FeatureScroll,
|
|
4544
|
+
FileIconMapper,
|
|
4312
4545
|
Footer,
|
|
4313
4546
|
GifFeatureCard,
|
|
4314
4547
|
Header,
|
|
@@ -4337,6 +4570,7 @@ var ContentGridBlock = ({
|
|
|
4337
4570
|
UniversalDashboardPage,
|
|
4338
4571
|
UniversalDeveloperSettings,
|
|
4339
4572
|
UniversalDirectoryPage,
|
|
4573
|
+
UniversalDriveView,
|
|
4340
4574
|
UniversalErrorView,
|
|
4341
4575
|
UniversalIdentityPage,
|
|
4342
4576
|
UniversalLookupPage,
|