@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.mjs
CHANGED
|
@@ -3074,12 +3074,12 @@ var UniversalOverviewPage = ({
|
|
|
3074
3074
|
},
|
|
3075
3075
|
primaryAction.label,
|
|
3076
3076
|
primaryAction.icon
|
|
3077
|
-
))), /* @__PURE__ */ React35.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-8" }, details.map((detail, idx) => /* @__PURE__ */ React35.createElement("div", { key: idx, className: "min-w-0" }, /* @__PURE__ */ React35.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1.5 uppercase" }, detail.label), /* @__PURE__ */ React35.createElement("p", { className: "text-[13px] text-black truncate" }, detail.value)))), alerts.map((
|
|
3078
|
-
const bgClass =
|
|
3079
|
-
const textClass =
|
|
3080
|
-
const valClass =
|
|
3081
|
-
const lblClass =
|
|
3082
|
-
return /* @__PURE__ */ React35.createElement("div", { key: idx, className: `mt-4 p-5 rounded-xl flex flex-col gap-4 ${bgClass}` }, /* @__PURE__ */ React35.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React35.createElement("span", { className: `text-[11px] tracking-widest uppercase ${textClass}` },
|
|
3077
|
+
))), /* @__PURE__ */ React35.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-8" }, details.map((detail, idx) => /* @__PURE__ */ React35.createElement("div", { key: idx, className: "min-w-0" }, /* @__PURE__ */ React35.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1.5 uppercase" }, detail.label), /* @__PURE__ */ React35.createElement("p", { className: "text-[13px] text-black truncate" }, detail.value)))), alerts.map((alert2, idx) => {
|
|
3078
|
+
const bgClass = alert2.type === "warning" ? "bg-amber-50/50" : alert2.type === "info" ? "bg-blue-50/50" : "bg-red-50/50";
|
|
3079
|
+
const textClass = alert2.type === "warning" ? "text-amber-600" : alert2.type === "info" ? "text-blue-600" : "text-red-600";
|
|
3080
|
+
const valClass = alert2.type === "warning" ? "text-amber-700" : alert2.type === "info" ? "text-blue-700" : "text-red-700";
|
|
3081
|
+
const lblClass = alert2.type === "warning" ? "text-amber-400" : alert2.type === "info" ? "text-blue-400" : "text-red-400";
|
|
3082
|
+
return /* @__PURE__ */ React35.createElement("div", { key: idx, className: `mt-4 p-5 rounded-xl flex flex-col gap-4 ${bgClass}` }, /* @__PURE__ */ React35.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React35.createElement("span", { className: `text-[11px] tracking-widest uppercase ${textClass}` }, alert2.title)), alert2.items.map((item, itemIdx) => /* @__PURE__ */ React35.createElement("div", { key: itemIdx }, /* @__PURE__ */ React35.createElement("span", { className: `text-[11px] tracking-[0.2em] block mb-1 uppercase ${lblClass}` }, item.label), /* @__PURE__ */ React35.createElement("p", { className: `text-[13px] leading-relaxed ${valClass}` }, item.text))));
|
|
3083
3083
|
}))));
|
|
3084
3084
|
};
|
|
3085
3085
|
|
|
@@ -3267,14 +3267,270 @@ var UniversalDirectoryPage = ({
|
|
|
3267
3267
|
))))), currentView === "details" && detailsContent, modals);
|
|
3268
3268
|
};
|
|
3269
3269
|
|
|
3270
|
-
// src/components/
|
|
3271
|
-
import
|
|
3270
|
+
// src/components/UniversalDriveView.tsx
|
|
3271
|
+
import React40, { useState as useState24, useEffect as useEffect16, useRef as useRef11 } from "react";
|
|
3272
|
+
import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
|
|
3273
|
+
import {
|
|
3274
|
+
Delete02Icon as Delete02Icon2,
|
|
3275
|
+
CloudUploadIcon,
|
|
3276
|
+
FolderAddIcon,
|
|
3277
|
+
Cancel01Icon as Cancel01Icon3,
|
|
3278
|
+
FolderIcon as FolderIcon2,
|
|
3279
|
+
Loading03Icon as Loading03Icon12,
|
|
3280
|
+
ArrowLeft01Icon as ArrowLeft01Icon8,
|
|
3281
|
+
ArrowRight01Icon as ArrowRight01Icon7,
|
|
3282
|
+
Copy01Icon,
|
|
3283
|
+
Scissor01Icon,
|
|
3284
|
+
FilePasteIcon,
|
|
3285
|
+
Share01Icon,
|
|
3286
|
+
RestoreBinIcon
|
|
3287
|
+
} from "@hugeicons/core-free-icons";
|
|
3288
|
+
|
|
3289
|
+
// src/components/FileIconMapper.tsx
|
|
3290
|
+
import React39 from "react";
|
|
3272
3291
|
import { HugeiconsIcon as HugeiconsIcon25 } from "@hugeicons/react";
|
|
3292
|
+
import {
|
|
3293
|
+
FolderIcon,
|
|
3294
|
+
TableIcon,
|
|
3295
|
+
ImageIcon,
|
|
3296
|
+
FileEmpty02Icon,
|
|
3297
|
+
FileVideoIcon,
|
|
3298
|
+
Doc01Icon,
|
|
3299
|
+
Pdf01Icon,
|
|
3300
|
+
Txt01Icon,
|
|
3301
|
+
FileZipIcon,
|
|
3302
|
+
DocumentCodeIcon,
|
|
3303
|
+
FileAudioIcon
|
|
3304
|
+
} from "@hugeicons/core-free-icons";
|
|
3305
|
+
var FileIconMapper = ({ type, mimeType }) => {
|
|
3306
|
+
const mime = mimeType?.toLowerCase() || "";
|
|
3307
|
+
if (type === "FOLDER") {
|
|
3308
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: FolderIcon, size: 18, className: "text-black" });
|
|
3309
|
+
}
|
|
3310
|
+
if (type === "SHEET" || mime.includes("excel") || mime.includes("spreadsheet") || mime.includes("csv")) {
|
|
3311
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: TableIcon, size: 18, className: "text-black" });
|
|
3312
|
+
}
|
|
3313
|
+
if (type === "IMAGE" || mime.startsWith("image/")) {
|
|
3314
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: ImageIcon, size: 18, className: "text-black" });
|
|
3315
|
+
}
|
|
3316
|
+
if (type === "VIDEO" || mime.startsWith("video/")) {
|
|
3317
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: FileVideoIcon, size: 18, className: "text-black" });
|
|
3318
|
+
}
|
|
3319
|
+
if (type === "AUDIO" || mime.startsWith("audio/")) {
|
|
3320
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: FileAudioIcon, size: 18, className: "text-black" });
|
|
3321
|
+
}
|
|
3322
|
+
if (type === "CODE" || mime.includes("json") || mime.includes("javascript") || mime.includes("html")) {
|
|
3323
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: DocumentCodeIcon, size: 18, className: "text-black" });
|
|
3324
|
+
}
|
|
3325
|
+
if (type === "ARCHIVE" || mime.includes("zip") || mime.includes("tar") || mime.includes("rar")) {
|
|
3326
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: FileZipIcon, size: 18, className: "text-black" });
|
|
3327
|
+
}
|
|
3328
|
+
if (type === "DOC" || mime.includes("word")) {
|
|
3329
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: Doc01Icon, size: 18, className: "text-black" });
|
|
3330
|
+
}
|
|
3331
|
+
if (type === "PDF" || mime.includes("pdf")) {
|
|
3332
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: Pdf01Icon, size: 18, className: "text-black" });
|
|
3333
|
+
}
|
|
3334
|
+
if (type === "TXT" || mime.includes("text/plain")) {
|
|
3335
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: Txt01Icon, size: 18, className: "text-black" });
|
|
3336
|
+
}
|
|
3337
|
+
return /* @__PURE__ */ React39.createElement(HugeiconsIcon25, { icon: FileEmpty02Icon, size: 18, className: "text-black" });
|
|
3338
|
+
};
|
|
3339
|
+
|
|
3340
|
+
// src/components/UniversalDriveView.tsx
|
|
3341
|
+
var UniversalDriveView = ({
|
|
3342
|
+
currentFolderId,
|
|
3343
|
+
folderBreadcrumbs,
|
|
3344
|
+
items,
|
|
3345
|
+
uploadQueue,
|
|
3346
|
+
isLoading,
|
|
3347
|
+
isTrashView,
|
|
3348
|
+
searchQuery,
|
|
3349
|
+
currentPage,
|
|
3350
|
+
totalPages,
|
|
3351
|
+
onSearchChange,
|
|
3352
|
+
onNavigateFolder,
|
|
3353
|
+
onCreateFolder,
|
|
3354
|
+
onUploadFiles,
|
|
3355
|
+
onMoveToTrash,
|
|
3356
|
+
onRestoreItems,
|
|
3357
|
+
onEmptyTrash,
|
|
3358
|
+
onClearUploadQueue,
|
|
3359
|
+
onPageChange,
|
|
3360
|
+
onToggleTrashView,
|
|
3361
|
+
onCopyItems,
|
|
3362
|
+
onCutItems,
|
|
3363
|
+
onPasteItems,
|
|
3364
|
+
clipboardCount
|
|
3365
|
+
}) => {
|
|
3366
|
+
const [selectedIds, setSelectedIds] = useState24([]);
|
|
3367
|
+
const [isNewFolderModalOpen, setIsNewFolderModalOpen] = useState24(false);
|
|
3368
|
+
const [newFolderName, setNewFolderName] = useState24("");
|
|
3369
|
+
const [isCreatingFolder, setIsCreatingFolder] = useState24(false);
|
|
3370
|
+
const [localSearch, setLocalSearch] = useState24(searchQuery);
|
|
3371
|
+
const [isSearching, setIsSearching] = useState24(false);
|
|
3372
|
+
const [loadingFolderId, setLoadingFolderId] = useState24(null);
|
|
3373
|
+
const [contextMenu, setContextMenu] = useState24(null);
|
|
3374
|
+
const tableRef = useRef11(null);
|
|
3375
|
+
useEffect16(() => {
|
|
3376
|
+
if (localSearch !== searchQuery) setIsSearching(true);
|
|
3377
|
+
const delay = setTimeout(() => {
|
|
3378
|
+
onSearchChange(localSearch);
|
|
3379
|
+
setIsSearching(false);
|
|
3380
|
+
}, 3e3);
|
|
3381
|
+
return () => clearTimeout(delay);
|
|
3382
|
+
}, [localSearch, onSearchChange, searchQuery]);
|
|
3383
|
+
useEffect16(() => {
|
|
3384
|
+
if (!isLoading) setLoadingFolderId(null);
|
|
3385
|
+
}, [isLoading]);
|
|
3386
|
+
useEffect16(() => {
|
|
3387
|
+
const handleClickOutside = () => setContextMenu(null);
|
|
3388
|
+
document.addEventListener("click", handleClickOutside);
|
|
3389
|
+
return () => document.removeEventListener("click", handleClickOutside);
|
|
3390
|
+
}, []);
|
|
3391
|
+
const formatBytes = (bytes) => {
|
|
3392
|
+
const num = Number(bytes);
|
|
3393
|
+
if (num === 0) return "0 Bytes";
|
|
3394
|
+
const k = 1024;
|
|
3395
|
+
const sizes = ["Bytes", "KB", "MB", "GB"];
|
|
3396
|
+
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3397
|
+
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3398
|
+
};
|
|
3399
|
+
const formatDate3 = (dateString) => {
|
|
3400
|
+
return new Date(dateString).toLocaleDateString("en-US", {
|
|
3401
|
+
month: "short",
|
|
3402
|
+
day: "numeric",
|
|
3403
|
+
year: "numeric"
|
|
3404
|
+
});
|
|
3405
|
+
};
|
|
3406
|
+
const handleRowClick = (id, e) => {
|
|
3407
|
+
if (e.ctrlKey || e.metaKey) {
|
|
3408
|
+
setSelectedIds((prev) => prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]);
|
|
3409
|
+
} else {
|
|
3410
|
+
setSelectedIds([id]);
|
|
3411
|
+
}
|
|
3412
|
+
};
|
|
3413
|
+
const handleSelectAll = () => {
|
|
3414
|
+
if (selectedIds.length === items.length && items.length > 0) setSelectedIds([]);
|
|
3415
|
+
else setSelectedIds(items.map((i) => i.id));
|
|
3416
|
+
};
|
|
3417
|
+
const handleItemDoubleClick = (item) => {
|
|
3418
|
+
if (item.type === "FOLDER") {
|
|
3419
|
+
setLoadingFolderId(item.id);
|
|
3420
|
+
setSelectedIds([]);
|
|
3421
|
+
onNavigateFolder(item.id);
|
|
3422
|
+
}
|
|
3423
|
+
};
|
|
3424
|
+
const handleContextMenu = (e, itemId) => {
|
|
3425
|
+
e.preventDefault();
|
|
3426
|
+
if (!selectedIds.includes(itemId)) setSelectedIds([itemId]);
|
|
3427
|
+
setContextMenu({ x: e.clientX, y: e.clientY, itemId });
|
|
3428
|
+
};
|
|
3429
|
+
const handleCreateFolderSubmit = async (e) => {
|
|
3430
|
+
e.preventDefault();
|
|
3431
|
+
if (!newFolderName.trim() || isCreatingFolder) return;
|
|
3432
|
+
setIsCreatingFolder(true);
|
|
3433
|
+
await onCreateFolder(newFolderName.trim());
|
|
3434
|
+
setNewFolderName("");
|
|
3435
|
+
setIsCreatingFolder(false);
|
|
3436
|
+
setIsNewFolderModalOpen(false);
|
|
3437
|
+
};
|
|
3438
|
+
const activeJobs = uploadQueue.filter((j) => j.status === "UPLOADING" || j.status === "PENDING");
|
|
3439
|
+
const globalProgress = uploadQueue.length > 0 ? Math.round(uploadQueue.reduce((acc, job) => acc + job.progress, 0) / (uploadQueue.length * 100) * 100) : 0;
|
|
3440
|
+
return /* @__PURE__ */ React40.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__ */ React40.createElement(ManagedToaster, null), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 border-b border-neutral-100" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h1", { className: "text-xl text-black tracking-tight mb-1" }, " My Drive"), /* @__PURE__ */ React40.createElement("p", { className: "text-xs text-neutral-500" }, "Secure cloud storage optimized for your workspace.")), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center gap-2 shrink-0" }, /* @__PURE__ */ React40.createElement(
|
|
3441
|
+
"button",
|
|
3442
|
+
{
|
|
3443
|
+
onClick: onToggleTrashView,
|
|
3444
|
+
title: "Trash",
|
|
3445
|
+
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"}`
|
|
3446
|
+
},
|
|
3447
|
+
/* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Delete02Icon2, size: 18 })
|
|
3448
|
+
), !isTrashView && /* @__PURE__ */ React40.createElement(React40.Fragment, null, selectedIds.length > 0 && /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3449
|
+
onCopyItems(selectedIds);
|
|
3450
|
+
setSelectedIds([]);
|
|
3451
|
+
}, 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__ */ React40.createElement(HugeiconsIcon26, { icon: Copy01Icon, size: 18 })), /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3452
|
+
onCutItems(selectedIds);
|
|
3453
|
+
setSelectedIds([]);
|
|
3454
|
+
}, 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__ */ React40.createElement(HugeiconsIcon26, { icon: Scissor01Icon, size: 18 }))), clipboardCount > 0 && /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon26, { icon: FilePasteIcon, size: 18 })), /* @__PURE__ */ React40.createElement("div", { className: "w-px h-6 bg-neutral-200 mx-1" }), /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon26, { icon: FolderAddIcon, size: 18 })), /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon26, { icon: CloudUploadIcon, size: 18 }), /* @__PURE__ */ React40.createElement("input", { type: "file", multiple: true, className: "hidden", onChange: (e) => e.target.files && onUploadFiles(e.target.files) }))))), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4" }, /* @__PURE__ */ React40.createElement("div", { className: "w-full sm:max-w-xs relative" }, /* @__PURE__ */ React40.createElement(
|
|
3455
|
+
"input",
|
|
3456
|
+
{
|
|
3457
|
+
type: "text",
|
|
3458
|
+
placeholder: "Search Drive...",
|
|
3459
|
+
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",
|
|
3460
|
+
value: localSearch,
|
|
3461
|
+
onChange: (e) => setLocalSearch(e.target.value)
|
|
3462
|
+
}
|
|
3463
|
+
), isSearching && /* @__PURE__ */ React40.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Loading03Icon12, size: 14, className: "animate-spin text-neutral-400" }))), selectedIds.length > 0 && /* @__PURE__ */ React40.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__ */ React40.createElement("span", { className: "text-[11px] tracking-widest text-neutral-500 uppercase" }, selectedIds.length, " Selected"), isTrashView ? /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3464
|
+
onRestoreItems(selectedIds);
|
|
3465
|
+
setSelectedIds([]);
|
|
3466
|
+
}, className: "text-emerald-600 hover:text-emerald-700 p-1 flex items-center gap-1.5 text-xs outline-none" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: RestoreBinIcon, size: 14 }), " Restore") : /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3467
|
+
onMoveToTrash(selectedIds);
|
|
3468
|
+
setSelectedIds([]);
|
|
3469
|
+
}, className: "text-neutral-500 hover:text-red-600 p-1 flex items-center gap-1.5 text-xs outline-none" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Delete02Icon2, size: 14 }), " Move to Trash")), isTrashView && selectedIds.length === 0 && /* @__PURE__ */ React40.createElement("button", { onClick: onEmptyTrash, className: "text-red-600 hover:text-red-700 p-2 text-xs flex items-center gap-2 outline-none" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Delete02Icon2, size: 14 }), " Empty Trash")), /* @__PURE__ */ React40.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__ */ React40.createElement(React40.Fragment, { key: idx }, idx > 0 && /* @__PURE__ */ React40.createElement("span", null, "/"), /* @__PURE__ */ React40.createElement(
|
|
3470
|
+
"button",
|
|
3471
|
+
{
|
|
3472
|
+
onClick: () => {
|
|
3473
|
+
setSelectedIds([]);
|
|
3474
|
+
onNavigateFolder(crumb.id);
|
|
3475
|
+
},
|
|
3476
|
+
className: `hover:text-black transition-colors outline-none ${idx === folderBreadcrumbs.length - 1 ? "text-black" : ""}`
|
|
3477
|
+
},
|
|
3478
|
+
crumb.name
|
|
3479
|
+
)))), !isLoading && items.length === 0 && /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon26, { icon: isTrashView ? Delete02Icon2 : FolderIcon2, size: 40, className: "text-neutral-300 mb-3" }), /* @__PURE__ */ React40.createElement("p", { className: "text-xs text-neutral-500" }, isTrashView ? "Trash is empty." : "This directory is empty.")), /* @__PURE__ */ React40.createElement("div", { className: "w-full overflow-x-auto select-none flex-1", ref: tableRef }, /* @__PURE__ */ React40.createElement("table", { className: "w-full text-left border-collapse min-w-full" }, /* @__PURE__ */ React40.createElement("thead", null, /* @__PURE__ */ React40.createElement("tr", { className: "border-b border-neutral-100" }, /* @__PURE__ */ React40.createElement("th", { className: "w-10 p-3" }, /* @__PURE__ */ React40.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__ */ React40.createElement("th", { className: "text-[11px] uppercase tracking-[0.2em] text-neutral-400 p-3" }, "Name"), /* @__PURE__ */ React40.createElement("th", { className: "text-[11px] uppercase tracking-[0.2em] text-neutral-400 p-3" }, "Modified"), /* @__PURE__ */ React40.createElement("th", { className: "text-[11px] uppercase tracking-[0.2em] text-neutral-400 p-3 text-right" }, "Size"))), /* @__PURE__ */ React40.createElement("tbody", { className: "divide-y divide-neutral-50 relative" }, isLoading && items.length === 0 && /* @__PURE__ */ React40.createElement("tr", null, /* @__PURE__ */ React40.createElement("td", { colSpan: 4, className: "py-12 text-center" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Loading03Icon12, className: "animate-spin mx-auto text-neutral-400", size: 24 }))), items.map((item) => {
|
|
3480
|
+
const isChecked = selectedIds.includes(item.id);
|
|
3481
|
+
return /* @__PURE__ */ React40.createElement(
|
|
3482
|
+
"tr",
|
|
3483
|
+
{
|
|
3484
|
+
key: item.id,
|
|
3485
|
+
onClick: (e) => handleRowClick(item.id, e),
|
|
3486
|
+
onDoubleClick: () => handleItemDoubleClick(item),
|
|
3487
|
+
onContextMenu: (e) => handleContextMenu(e, item.id),
|
|
3488
|
+
className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}`
|
|
3489
|
+
},
|
|
3490
|
+
/* @__PURE__ */ React40.createElement("td", { className: "p-3", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React40.createElement("input", { type: "checkbox", checked: isChecked, onChange: () => handleRowClick(item.id, { ctrlKey: true }), className: "rounded border-neutral-200 cursor-pointer" })),
|
|
3491
|
+
/* @__PURE__ */ React40.createElement("td", { className: "p-3 flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React40.createElement("div", { className: "w-8 h-8 shrink-0 bg-neutral-100 rounded-lg flex items-center justify-center relative" }, loadingFolderId === item.id ? /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Loading03Icon12, size: 14, className: "animate-spin text-black" }) : /* @__PURE__ */ React40.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType })), /* @__PURE__ */ React40.createElement("span", { className: "text-xs text-black truncate pr-4" }, item.name)),
|
|
3492
|
+
/* @__PURE__ */ React40.createElement("td", { className: "p-3 text-xs text-neutral-500 whitespace-nowrap" }, formatDate3(item.updatedAt)),
|
|
3493
|
+
/* @__PURE__ */ React40.createElement("td", { className: "p-3 text-xs text-neutral-500 text-right whitespace-nowrap" }, formatBytes(item.size))
|
|
3494
|
+
);
|
|
3495
|
+
})))), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center justify-between pt-4 border-t border-neutral-100" }, /* @__PURE__ */ React40.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] uppercase" }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon26, { icon: ArrowLeft01Icon8, size: 14 })), /* @__PURE__ */ React40.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__ */ React40.createElement(HugeiconsIcon26, { icon: ArrowRight01Icon7, size: 14 })))), contextMenu && /* @__PURE__ */ React40.createElement(
|
|
3496
|
+
"div",
|
|
3497
|
+
{
|
|
3498
|
+
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",
|
|
3499
|
+
style: { top: contextMenu.y, left: contextMenu.x }
|
|
3500
|
+
},
|
|
3501
|
+
/* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3502
|
+
onCopyItems(selectedIds);
|
|
3503
|
+
setContextMenu(null);
|
|
3504
|
+
}, className: "px-4 py-2 hover:bg-neutral-50 flex items-center gap-3 text-left" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Copy01Icon, size: 14 }), " Copy"),
|
|
3505
|
+
/* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3506
|
+
onCutItems(selectedIds);
|
|
3507
|
+
setContextMenu(null);
|
|
3508
|
+
}, className: "px-4 py-2 hover:bg-neutral-50 flex items-center gap-3 text-left" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Scissor01Icon, size: 14 }), " Cut"),
|
|
3509
|
+
/* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3510
|
+
alert("Share functionality coming soon.");
|
|
3511
|
+
setContextMenu(null);
|
|
3512
|
+
}, className: "px-4 py-2 hover:bg-neutral-50 flex items-center gap-3 text-left" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Share01Icon, size: 14 }), " Share"),
|
|
3513
|
+
/* @__PURE__ */ React40.createElement("div", { className: "w-full h-px bg-neutral-100 my-1" }),
|
|
3514
|
+
isTrashView ? /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3515
|
+
onRestoreItems(selectedIds);
|
|
3516
|
+
setSelectedIds([]);
|
|
3517
|
+
setContextMenu(null);
|
|
3518
|
+
}, className: "px-4 py-2 hover:bg-emerald-50 text-emerald-600 flex items-center gap-3 text-left" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: RestoreBinIcon, size: 14 }), " Restore") : /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3519
|
+
onMoveToTrash(selectedIds);
|
|
3520
|
+
setSelectedIds([]);
|
|
3521
|
+
setContextMenu(null);
|
|
3522
|
+
}, className: "px-4 py-2 hover:bg-red-50 text-red-600 flex items-center gap-3 text-left" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Delete02Icon2, size: 14 }), " Delete")
|
|
3523
|
+
), activeJobs.length > 0 && /* @__PURE__ */ React40.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__ */ React40.createElement("div", { className: "p-4 border-b border-neutral-100 bg-neutral-50 flex items-center justify-between" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h4", { className: "text-xs text-black font-medium" }, "Processing Elements"), /* @__PURE__ */ React40.createElement("p", { className: "text-[10px] text-neutral-500 mt-0.5" }, "Processing ", activeJobs.length, " active streams")), onClearUploadQueue && activeJobs.length === 0 && /* @__PURE__ */ React40.createElement("button", { onClick: onClearUploadQueue, className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Cancel01Icon3, size: 14 }))), /* @__PURE__ */ React40.createElement("div", { className: "w-full h-1 bg-neutral-100 relative" }, /* @__PURE__ */ React40.createElement("div", { className: "h-full transition-all duration-500 ease-out", style: { width: `${globalProgress}%`, background: "linear-gradient(to right, #f64b4d, #ffa360)" } }))), isNewFolderModalOpen && /* @__PURE__ */ React40.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React40.createElement("div", { className: "absolute inset-0 bg-black/20", onClick: () => !isCreatingFolder && setIsNewFolderModalOpen(false) }), /* @__PURE__ */ React40.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__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h3", { className: "text-sm text-black tracking-tight mb-1" }, "Create Folder"), /* @__PURE__ */ React40.createElement("p", { className: "text-[11px] text-neutral-400" }, "Name your new directory structure.")), /* @__PURE__ */ React40.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__ */ React40.createElement("div", { className: "flex items-center justify-end gap-2 mt-2" }, /* @__PURE__ */ React40.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__ */ React40.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__ */ React40.createElement(HugeiconsIcon26, { icon: Loading03Icon12, size: 14, className: "animate-spin" }) : "Create")))));
|
|
3524
|
+
};
|
|
3525
|
+
|
|
3526
|
+
// src/components/AiApproveDecline.tsx
|
|
3527
|
+
import React41, { useState as useState25 } from "react";
|
|
3528
|
+
import { HugeiconsIcon as HugeiconsIcon27 } from "@hugeicons/react";
|
|
3273
3529
|
import { CheckmarkCircle01Icon as CheckmarkCircle01Icon2, CancelCircleIcon as CancelCircleIcon2, PencilEdit01Icon } from "@hugeicons/core-free-icons";
|
|
3274
3530
|
var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline, onEdit }) => {
|
|
3275
|
-
const [isEditing, setIsEditing] =
|
|
3276
|
-
const [editVal, setEditVal] =
|
|
3277
|
-
return /* @__PURE__ */
|
|
3531
|
+
const [isEditing, setIsEditing] = useState25(false);
|
|
3532
|
+
const [editVal, setEditVal] = useState25(typeof suggestionValue === "string" ? suggestionValue : "");
|
|
3533
|
+
return /* @__PURE__ */ React41.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__ */ React41.createElement("div", null, /* @__PURE__ */ React41.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-1 uppercase" }, "AI Suggestion: ", suggestionTitle), !isEditing ? /* @__PURE__ */ React41.createElement("div", { className: "text-sm text-black" }, suggestionValue) : /* @__PURE__ */ React41.createElement(
|
|
3278
3534
|
"input",
|
|
3279
3535
|
{
|
|
3280
3536
|
type: "text",
|
|
@@ -3283,45 +3539,45 @@ var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline
|
|
|
3283
3539
|
className: "w-full text-sm p-2 border-b border-purple-200 bg-transparent outline-none focus:border-purple-400 transition-colors",
|
|
3284
3540
|
autoFocus: true
|
|
3285
3541
|
}
|
|
3286
|
-
)), /* @__PURE__ */
|
|
3542
|
+
)), /* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-1 mt-2" }, !isEditing ? /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.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__ */ React41.createElement(HugeiconsIcon27, { icon: CheckmarkCircle01Icon2, size: 28 })), /* @__PURE__ */ React41.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__ */ React41.createElement(HugeiconsIcon27, { icon: CancelCircleIcon2, size: 28 })), onEdit && /* @__PURE__ */ React41.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__ */ React41.createElement(HugeiconsIcon27, { icon: PencilEdit01Icon, size: 18 }))) : /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement("button", { onClick: () => {
|
|
3287
3543
|
onEdit?.(editVal);
|
|
3288
3544
|
setIsEditing(false);
|
|
3289
|
-
}, 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__ */
|
|
3545
|
+
}, 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__ */ React41.createElement(HugeiconsIcon27, { icon: CheckmarkCircle01Icon2, size: 28 })), /* @__PURE__ */ React41.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__ */ React41.createElement(HugeiconsIcon27, { icon: CancelCircleIcon2, size: 28 })))));
|
|
3290
3546
|
};
|
|
3291
3547
|
|
|
3292
3548
|
// src/components/AiStageCheck.tsx
|
|
3293
|
-
import
|
|
3294
|
-
import { HugeiconsIcon as
|
|
3295
|
-
import { Loading03Icon as
|
|
3549
|
+
import React42 from "react";
|
|
3550
|
+
import { HugeiconsIcon as HugeiconsIcon28 } from "@hugeicons/react";
|
|
3551
|
+
import { Loading03Icon as Loading03Icon13, CheckmarkCircle02Icon, CancelCircleIcon as CancelCircleIcon3 } from "@hugeicons/core-free-icons";
|
|
3296
3552
|
var AiStageCheck = ({ tasks }) => {
|
|
3297
|
-
return /* @__PURE__ */
|
|
3553
|
+
return /* @__PURE__ */ React42.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__ */ React42.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 mb-1 uppercase" }, "AI Processing"), tasks.map((task) => /* @__PURE__ */ React42.createElement("div", { key: task.id, className: "flex items-center gap-3" }, task.status === "pending" && /* @__PURE__ */ React42.createElement("div", { className: "w-4 h-4 rounded-full border border-purple-200" }), task.status === "loading" && /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: Loading03Icon13, size: 16, className: "animate-spin text-purple-500" }), task.status === "success" && /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: CheckmarkCircle02Icon, size: 16, className: "text-emerald-500" }), task.status === "error" && /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: CancelCircleIcon3, size: 16, className: "text-red-500" }), /* @__PURE__ */ React42.createElement("span", { className: `text-xs transition-colors ${task.status === "success" ? "text-black" : task.status === "loading" ? "text-purple-700" : "text-neutral-500"}` }, task.label))));
|
|
3298
3554
|
};
|
|
3299
3555
|
|
|
3300
3556
|
// src/components/Stagger.tsx
|
|
3301
|
-
import
|
|
3302
|
-
import { HugeiconsIcon as
|
|
3303
|
-
import { Briefcase02Icon, Upload01Icon as Upload01Icon2, FileSyncIcon, CloudUploadIcon } from "@hugeicons/core-free-icons";
|
|
3557
|
+
import React43 from "react";
|
|
3558
|
+
import { HugeiconsIcon as HugeiconsIcon29 } from "@hugeicons/react";
|
|
3559
|
+
import { Briefcase02Icon, Upload01Icon as Upload01Icon2, FileSyncIcon, CloudUploadIcon as CloudUploadIcon2 } from "@hugeicons/core-free-icons";
|
|
3304
3560
|
var Stagger = ({ steps, currentStep }) => {
|
|
3305
3561
|
const getIconForStep = (stepName) => {
|
|
3306
3562
|
const lowerName = stepName.toLowerCase();
|
|
3307
3563
|
if (lowerName.includes("document")) return Upload01Icon2;
|
|
3308
3564
|
if (lowerName.includes("review")) return FileSyncIcon;
|
|
3309
|
-
if (lowerName.includes("submit")) return
|
|
3565
|
+
if (lowerName.includes("submit")) return CloudUploadIcon2;
|
|
3310
3566
|
return Briefcase02Icon;
|
|
3311
3567
|
};
|
|
3312
|
-
return /* @__PURE__ */
|
|
3568
|
+
return /* @__PURE__ */ React43.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ React43.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-full h-px bg-neutral-100 -z-10" }), /* @__PURE__ */ React43.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) => {
|
|
3313
3569
|
const isActive = idx === currentStep;
|
|
3314
3570
|
const isPassed = idx < currentStep;
|
|
3315
3571
|
const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-100 text-neutral-500" : "bg-neutral-100 text-neutral-500";
|
|
3316
|
-
return /* @__PURE__ */
|
|
3572
|
+
return /* @__PURE__ */ React43.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ React43.createElement(HugeiconsIcon29, { icon: getIconForStep(step), size: 11 }));
|
|
3317
3573
|
}));
|
|
3318
3574
|
};
|
|
3319
3575
|
|
|
3320
3576
|
// src/components/UniversalRegistrationFlow.tsx
|
|
3321
|
-
import
|
|
3577
|
+
import React44, { useState as useState26, useEffect as useEffect17, useRef as useRef12 } from "react";
|
|
3322
3578
|
import toast6 from "react-hot-toast";
|
|
3323
|
-
import { HugeiconsIcon as
|
|
3324
|
-
import { CheckmarkBadge01Icon as CheckmarkBadge01Icon2, Upload01Icon as Upload01Icon3, Loading03Icon as
|
|
3579
|
+
import { HugeiconsIcon as HugeiconsIcon30 } from "@hugeicons/react";
|
|
3580
|
+
import { CheckmarkBadge01Icon as CheckmarkBadge01Icon2, Upload01Icon as Upload01Icon3, Loading03Icon as Loading03Icon14, PencilEdit01Icon as PencilEdit01Icon2, Delete02Icon as Delete02Icon3, SignatureIcon, IdentificationIcon, ArrowLeft01Icon as ArrowLeft01Icon9, HourglassIcon } from "@hugeicons/core-free-icons";
|
|
3325
3581
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
3326
3582
|
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"];
|
|
3327
3583
|
var MEMBER_ROLES = ["Director Only", "Shareholder Only", "Both Director & Shareholder"];
|
|
@@ -3334,12 +3590,12 @@ var UniversalRegistrationFlow = ({
|
|
|
3334
3590
|
onRedirectToBilling,
|
|
3335
3591
|
onRedirectToApplication
|
|
3336
3592
|
}) => {
|
|
3337
|
-
const [isBooting, setIsBooting] =
|
|
3338
|
-
const [macroStep, setMacroStep] =
|
|
3339
|
-
const [appStatus, setAppStatus] =
|
|
3340
|
-
const [isAbortModalOpen, setIsAbortModalOpen] =
|
|
3341
|
-
const [isAborting, setIsAborting] =
|
|
3342
|
-
const [formState, setFormState] =
|
|
3593
|
+
const [isBooting, setIsBooting] = useState26(true);
|
|
3594
|
+
const [macroStep, setMacroStep] = useState26(0);
|
|
3595
|
+
const [appStatus, setAppStatus] = useState26("");
|
|
3596
|
+
const [isAbortModalOpen, setIsAbortModalOpen] = useState26(false);
|
|
3597
|
+
const [isAborting, setIsAborting] = useState26(false);
|
|
3598
|
+
const [formState, setFormState] = useState26({
|
|
3343
3599
|
natureApproved: false,
|
|
3344
3600
|
nameApproved: false,
|
|
3345
3601
|
addressApproved: false,
|
|
@@ -3350,13 +3606,13 @@ var UniversalRegistrationFlow = ({
|
|
|
3350
3606
|
passportApproved: false,
|
|
3351
3607
|
signatureApproved: false
|
|
3352
3608
|
});
|
|
3353
|
-
const idRef =
|
|
3354
|
-
const passportRef =
|
|
3355
|
-
const signatureRef =
|
|
3356
|
-
const other1Ref =
|
|
3357
|
-
const other2Ref =
|
|
3358
|
-
const other3Ref =
|
|
3359
|
-
const [formData, setFormData] =
|
|
3609
|
+
const idRef = useRef12(null);
|
|
3610
|
+
const passportRef = useRef12(null);
|
|
3611
|
+
const signatureRef = useRef12(null);
|
|
3612
|
+
const other1Ref = useRef12(null);
|
|
3613
|
+
const other2Ref = useRef12(null);
|
|
3614
|
+
const other3Ref = useRef12(null);
|
|
3615
|
+
const [formData, setFormData] = useState26({
|
|
3360
3616
|
businessDesc: "",
|
|
3361
3617
|
natureOfBusiness: null,
|
|
3362
3618
|
proposedName: "",
|
|
@@ -3383,22 +3639,22 @@ var UniversalRegistrationFlow = ({
|
|
|
3383
3639
|
otherDoc3Url: "",
|
|
3384
3640
|
otherDoc3Meta: null
|
|
3385
3641
|
});
|
|
3386
|
-
const [activeModal, setActiveModal] =
|
|
3387
|
-
const [iAgree, setIAgree] =
|
|
3388
|
-
const [isAnalyzingNature, setIsAnalyzingNature] =
|
|
3389
|
-
const [suggestedNature, setSuggestedNature] =
|
|
3390
|
-
const [isCheckingQualifier, setIsCheckingQualifier] =
|
|
3391
|
-
const [qualifierCheckResult, setQualifierCheckResult] =
|
|
3392
|
-
const [isCheckingName, setIsCheckingName] =
|
|
3393
|
-
const [nameCheckResult, setNameCheckResult] =
|
|
3394
|
-
const [globalExtractingId, setGlobalExtractingId] =
|
|
3395
|
-
const [globalUploadingPassport, setGlobalUploadingPassport] =
|
|
3396
|
-
const [globalUploadingSignature, setGlobalUploadingSignature] =
|
|
3397
|
-
const [isUploadingOther1, setIsUploadingOther1] =
|
|
3398
|
-
const [isUploadingOther2, setIsUploadingOther2] =
|
|
3399
|
-
const [isUploadingOther3, setIsUploadingOther3] =
|
|
3400
|
-
const [aiTasks, setAiTasks] =
|
|
3401
|
-
const [isSubmitting, setIsSubmitting] =
|
|
3642
|
+
const [activeModal, setActiveModal] = useState26({ isOpen: false, type: null, memberIndex: null });
|
|
3643
|
+
const [iAgree, setIAgree] = useState26(false);
|
|
3644
|
+
const [isAnalyzingNature, setIsAnalyzingNature] = useState26(false);
|
|
3645
|
+
const [suggestedNature, setSuggestedNature] = useState26(null);
|
|
3646
|
+
const [isCheckingQualifier, setIsCheckingQualifier] = useState26(false);
|
|
3647
|
+
const [qualifierCheckResult, setQualifierCheckResult] = useState26(null);
|
|
3648
|
+
const [isCheckingName, setIsCheckingName] = useState26(false);
|
|
3649
|
+
const [nameCheckResult, setNameCheckResult] = useState26(null);
|
|
3650
|
+
const [globalExtractingId, setGlobalExtractingId] = useState26(false);
|
|
3651
|
+
const [globalUploadingPassport, setGlobalUploadingPassport] = useState26(false);
|
|
3652
|
+
const [globalUploadingSignature, setGlobalUploadingSignature] = useState26(false);
|
|
3653
|
+
const [isUploadingOther1, setIsUploadingOther1] = useState26(false);
|
|
3654
|
+
const [isUploadingOther2, setIsUploadingOther2] = useState26(false);
|
|
3655
|
+
const [isUploadingOther3, setIsUploadingOther3] = useState26(false);
|
|
3656
|
+
const [aiTasks, setAiTasks] = useState26([]);
|
|
3657
|
+
const [isSubmitting, setIsSubmitting] = useState26(false);
|
|
3402
3658
|
const isReadOnly = ["PENDING", "AWAITING_PAYMENT", "COMPLETED"].includes(appStatus);
|
|
3403
3659
|
const isAnyUploading = globalExtractingId || globalUploadingPassport || globalUploadingSignature || isUploadingOther1 || isUploadingOther2 || isUploadingOther3;
|
|
3404
3660
|
const baseApi = async (action, payload = {}) => {
|
|
@@ -3413,7 +3669,7 @@ var UniversalRegistrationFlow = ({
|
|
|
3413
3669
|
return { success: false, error: "Network communication failed." };
|
|
3414
3670
|
}
|
|
3415
3671
|
};
|
|
3416
|
-
|
|
3672
|
+
useEffect17(() => {
|
|
3417
3673
|
baseApi("progress_load").then((data) => {
|
|
3418
3674
|
if (data.success && data.data) {
|
|
3419
3675
|
const meta = data.data;
|
|
@@ -3889,23 +4145,23 @@ var UniversalRegistrationFlow = ({
|
|
|
3889
4145
|
const isStep0Valid = type === "company" ? formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.membersDetailsApproved : formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.ownerApproved;
|
|
3890
4146
|
const isStep1Valid = type === "company" ? formState.membersDocsApproved : formState.idApproved && formState.passportApproved && formState.signatureApproved;
|
|
3891
4147
|
const titleText = type === "company" ? "Company Incorporation (LLC)" : "Business Name Registration";
|
|
3892
|
-
if (isBooting) return /* @__PURE__ */
|
|
4148
|
+
if (isBooting) return /* @__PURE__ */ React44.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon14, size: 32, className: "animate-spin text-black" }));
|
|
3893
4149
|
if (!["DRAFT", "QUEUED", "REJECTED"].includes(appStatus) && appStatus !== "") {
|
|
3894
|
-
return /* @__PURE__ */
|
|
4150
|
+
return /* @__PURE__ */ React44.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__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: CheckmarkBadge01Icon2, size: 35 })), /* @__PURE__ */ React44.createElement("h2", { className: "text-xl text-black" }, "Registration Completed"), /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application has been successfully verified and registered.")) : appStatus === "PENDING" ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: HourglassIcon, size: 35, className: "animate-spin" })), /* @__PURE__ */ React44.createElement("h2", { className: "text-xl text-black" }, "Application is Pending"), /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently pending review.")) : appStatus === "AWAITING_PAYMENT" ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "w-20 h-20 bg-amber-50 text-amber-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: HourglassIcon, size: 35, className: "animate-pulse" })), /* @__PURE__ */ React44.createElement("h2", { className: "text-xl text-black" }, "Awaiting Payment"), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: HourglassIcon, size: 35 })), /* @__PURE__ */ React44.createElement("h2", { className: "text-xl text-black" }, "Application Submitted"), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isAborting && setIsAbortModalOpen(false) }), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "p-6 flex flex-col gap-4 text-center" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[17px] text-black tracking-tight" }, "Abort Application?"), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "w-full flex " }, /* @__PURE__ */ React44.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__ */ React44.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")))));
|
|
3895
4151
|
}
|
|
3896
|
-
return /* @__PURE__ */
|
|
4152
|
+
return /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("h2", { className: "text-xl text-black tracking-tight mb-1" }, titleText), /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-neutral-500" }, "Answer the questions below to build your official application.")), /* @__PURE__ */ React44.createElement("div", { className: "px-2" }, /* @__PURE__ */ React44.createElement(Stagger, { steps: MACRO_STEPS, currentStep: macroStep }))), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-8" }, macroStep === 0 && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm " }, "What does your ", type === "company" ? "company" : "business", " do?")), !formState.natureApproved ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3 " }, /* @__PURE__ */ React44.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__ */ React44.createElement(ThreeDActionButton, { onClick: handleAnalyzeNature, disabled: formData.businessDesc.length < 5 || isAnalyzingNature || isReadOnly, isLoading: isAnalyzingNature, className: "w-fit" }, "Analyze Nature")), isAnalyzingNature && /* @__PURE__ */ React44.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React44.createElement(AiStageCheck, { tasks: [{ id: "1", label: "Matching with Official Categories...", status: "loading" }] })), suggestedNature && /* @__PURE__ */ React44.createElement("div", { className: " mt-2 animate-in fade-in" }, /* @__PURE__ */ React44.createElement(AiApproveDecline, { suggestionTitle: "Classification Found", suggestionValue: /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("p", { className: " text-black" }, suggestedNature.specificLabel), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, "Category: ", suggestedNature.categoryLabel)), onApprove: () => {
|
|
3897
4153
|
const newForm = { ...formData, natureOfBusiness: suggestedNature };
|
|
3898
4154
|
setFormData(newForm);
|
|
3899
4155
|
approveSection("natureApproved", newForm);
|
|
3900
|
-
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */
|
|
4156
|
+
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */ React44.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React44.createElement("div", { className: "pr-4" }, /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-black" }, formData.natureOfBusiness?.specificLabel), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, formData.businessDesc)), !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => editSection("natureApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: PencilEdit01Icon2, size: 16 })))), formState.natureApproved && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm " }, "What name would you like to register?")), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide two options. We will verify availability against the official registry."), !formState.nameApproved ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React44.createElement(TextInput, { label: "Proposed Name 1 (Preferred)", value: formData.proposedName, onChange: (v) => setFormData({ ...formData, proposedName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement(TextInput, { label: "Proposed Name 2 (Alternative)", value: formData.proposedName2, onChange: (v) => setFormData({ ...formData, proposedName2: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "mt-2 animate-in fade-in" }, /* @__PURE__ */ React44.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__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-1" }, "AI Suggestion: Structural Qualifier Missing"), /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-black mb-3" }, "Nigerian registrations require a structural qualifier to be approved."), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-2" }, (qualifierCheckResult.suggestions || []).map((alt, i) => /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.createElement("div", { className: " mt-2 animate-in fade-in" }, nameCheckResult.status === "APPROVED" || nameCheckResult.status === "APPROVED_WARNING" || nameCheckResult.status === "SKIPPED" ? /* @__PURE__ */ React44.createElement(AiApproveDecline, { suggestionTitle: nameCheckResult.status === "APPROVED" ? "Name Available!" : "Fallback Approval", suggestionValue: /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.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__ */ React44.createElement("p", { className: "text-xs text-neutral-600" }, nameCheckResult.message), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-600 mt-2 " }, "Proposed Option: ", nameCheckResult.approvedOption)), onApprove: () => {
|
|
3901
4157
|
const newForm = { ...formData, approvedName: nameCheckResult.approvedOption };
|
|
3902
4158
|
setFormData(newForm);
|
|
3903
4159
|
approveSection("nameApproved", newForm);
|
|
3904
|
-
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */
|
|
3905
|
-
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */
|
|
3906
|
-
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */
|
|
3907
|
-
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */
|
|
3908
|
-
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ React42.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__ */ React42.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ React42.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ React42.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: PencilEdit01Icon2, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ React42.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__ */ React42.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ React42.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React42.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React42.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React42.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React42.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ React42.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ React42.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: ArrowLeft01Icon8, size: 14 }), " Close"), /* @__PURE__ */ React42.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ React42.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__ */ React42.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ React42.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ React42.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ React42.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ React42.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__ */ React42.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__ */ React42.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__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ React42.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React42.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ React42.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__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React42.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React42.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React42.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React42.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ React42.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__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Loading03Icon13, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Delete02Icon2, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Loading03Icon13, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Delete02Icon2, size: 16 }))) : null)), /* @__PURE__ */ React42.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React42.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ React42.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ React42.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: PencilEdit01Icon2, size: 16 })))) : /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.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__ */ React42.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__ */ React42.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__ */ React42.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ React42.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__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Upload01Icon3, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ React42.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ React42.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React42.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ React42.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__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React42.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__ */ React42.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React42.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React42.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__ */ React42.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ React42.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ React42.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__ */ React42.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ React42.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Loading03Icon13, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Delete02Icon2, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Loading03Icon13, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React42.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__ */ React42.createElement(HugeiconsIcon28, { icon: Delete02Icon2, size: 16 })))))), /* @__PURE__ */ React42.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__ */ React42.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__ */ React42.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__ */ React42.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__ */ React42.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ React42.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__ */ React42.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
4160
|
+
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */ React44.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__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-widest text-red-600 block mb-1" }, "Registry Conflict Detected"), /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-black mb-3" }, nameCheckResult.message), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-2" }, (nameCheckResult.alternatives || []).map((alt, i) => /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-black" }, formData.approvedName), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Verified against registry")), !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => editSection("nameApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: PencilEdit01Icon2, size: 16 })))), formState.nameApproved && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm " }, "Where is your head office located?")), !formState.addressApproved ? /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ React44.createElement(TextInput, { label: "Street Address", value: formData.address, onChange: (v) => setFormData({ ...formData, address: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React44.createElement(TextInput, { label: "City", value: formData.city, onChange: (v) => setFormData({ ...formData, city: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement(TextInput, { label: "State", value: formData.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: null, isGlobalState: true }), placeholder: "Select State", onChange: () => {
|
|
4161
|
+
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React44.createElement(ThreeDActionButton, { onClick: () => approveSection("addressApproved"), disabled: !formData.address || !formData.city || !formData.state || isReadOnly, className: "w-fit mt-2" }, "Confirm Address")) : /* @__PURE__ */ React44.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-neutral-500" }, formData.address, ", ", formData.city, ", ", formData.state), !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => editSection("addressApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: PencilEdit01Icon2, size: 16 })))), formState.addressApproved && type === "company" && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between gap-2 text-black" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm " }, "Directors & Shareholders")), !formState.membersDetailsApproved && /* @__PURE__ */ React44.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__ */ React44.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide details for all individuals. Ensure total share percentage equals 100%."), !formState.membersDetailsApproved ? /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-6 " }, formData.members.map((member, i) => /* @__PURE__ */ React44.createElement("div", { key: member.id, className: "flex flex-col gap-4 border border-neutral-100 p-5 rounded-2xl bg-neutral-50/30" }, /* @__PURE__ */ React44.createElement("div", { className: "flex justify-between items-center mb-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400" }, "Member ", i + 1), formData.members.length > 1 && !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => removeCompanyMember(i), className: "text-red-500 text-xs hover:text-red-600" }, "Remove")), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React44.createElement(TextInput, { label: "Role", value: member.role, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "role", memberIndex: i }), onChange: () => {
|
|
4162
|
+
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */ React44.createElement(NumberInput, { label: "Share Percentage (%)", value: member.sharePercentage, onChange: (v) => updateCompanyMemberInfo(i, "sharePercentage", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React44.createElement(TextInput, { label: "Full Name", value: member.fullName, onChange: (v) => updateCompanyMemberInfo(i, "fullName", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React44.createElement(NumberInput, { label: "Phone Number", value: member.phone, onChange: (v) => updateCompanyMemberInfo(i, "phone", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement(TextInput, { label: "Email Address", value: member.email, onChange: (v) => updateCompanyMemberInfo(i, "email", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React44.createElement(TextInput, { label: "Nationality", value: member.nationality, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "nationality", memberIndex: i }), onChange: () => {
|
|
4163
|
+
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement(TextInput, { label: "Residential Address", value: member.address, onChange: (v) => updateCompanyMemberInfo(i, "address", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React44.createElement(TextInput, { label: "City", value: member.city, onChange: (v) => updateCompanyMemberInfo(i, "city", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement(TextInput, { label: "State", value: member.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: i }), onChange: () => {
|
|
4164
|
+
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ React44.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: PencilEdit01Icon2, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ React44.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React44.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React44.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React44.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ React44.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: ArrowLeft01Icon9, size: 14 }), " Close"), /* @__PURE__ */ React44.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ React44.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.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__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ React44.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React44.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ React44.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__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React44.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React44.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React44.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ React44.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Delete02Icon3, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Delete02Icon3, size: 16 }))) : null)), /* @__PURE__ */ React44.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React44.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ React44.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: PencilEdit01Icon2, size: 16 })))) : /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.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__ */ React44.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ React44.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__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Upload01Icon3, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ React44.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ React44.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React44.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ React44.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__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React44.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ React44.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ React44.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ React44.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Delete02Icon3, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React44.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Delete02Icon3, size: 16 })))))), /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.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__ */ React44.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__ */ React44.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
3909
4165
|
const docType = `other${num}`;
|
|
3910
4166
|
const ref = num === 1 ? other1Ref : num === 2 ? other2Ref : other3Ref;
|
|
3911
4167
|
const isUploading = num === 1 ? isUploadingOther1 : num === 2 ? isUploadingOther2 : isUploadingOther3;
|
|
@@ -3913,29 +4169,29 @@ var UniversalRegistrationFlow = ({
|
|
|
3913
4169
|
if (!fileUrl && !isUploading) {
|
|
3914
4170
|
const prevUrl = num > 1 ? formData[`otherDoc${num - 1}Url`] : true;
|
|
3915
4171
|
if (!prevUrl) return null;
|
|
3916
|
-
return /* @__PURE__ */
|
|
4172
|
+
return /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Optional Document ", num);
|
|
3917
4173
|
}
|
|
3918
4174
|
if (isUploading) {
|
|
3919
|
-
return /* @__PURE__ */
|
|
4175
|
+
return /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
3920
4176
|
}
|
|
3921
|
-
return /* @__PURE__ */
|
|
3922
|
-
}))), /* @__PURE__ */
|
|
4177
|
+
return /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon30, { icon: CheckmarkBadge01Icon2, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: Delete02Icon3, size: 16 })));
|
|
4178
|
+
}))), /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: ArrowLeft01Icon9, size: 14 }), " Back"), /* @__PURE__ */ React44.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ React44.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ React44.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ React44.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ React44.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ React44.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ React44.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React44.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ React44.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ React44.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon30, { icon: ArrowLeft01Icon9, size: 14 }), " Back"), /* @__PURE__ */ React44.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ React44.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ React44.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ React44.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.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__ */ React44.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ React44.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ React44.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__ */ React44.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__ */ React44.createElement(ThreeDActionButton, { onClick: handleFinalSubmit, disabled: isSubmitting || !iAgree || isReadOnly, isLoading: isSubmitting, className: "min-w-40 w-full sm:w-auto" }, "Submit")))), activeModal.isOpen && /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ React44.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) => {
|
|
3923
4179
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
3924
|
-
return /* @__PURE__ */
|
|
4180
|
+
return /* @__PURE__ */ React44.createElement("button", { key: opt, onClick: () => {
|
|
3925
4181
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
3926
4182
|
else updateCompanyMemberInfo(activeModal.memberIndex, activeModal.type, opt);
|
|
3927
4183
|
setActiveModal({ isOpen: false, type: null, memberIndex: null });
|
|
3928
4184
|
}, 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);
|
|
3929
|
-
})), /* @__PURE__ */
|
|
4185
|
+
})), /* @__PURE__ */ React44.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ React44.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")))));
|
|
3930
4186
|
};
|
|
3931
4187
|
|
|
3932
4188
|
// src/components/UniversalDeveloperSettings.tsx
|
|
3933
|
-
import
|
|
4189
|
+
import React45, { useState as useState27, useEffect as useEffect18 } from "react";
|
|
3934
4190
|
import { toast as toast7 } from "react-hot-toast";
|
|
3935
|
-
import { HugeiconsIcon as
|
|
3936
|
-
import { Loading03Icon as
|
|
3937
|
-
var ButtonSpinner5 = () => /* @__PURE__ */
|
|
3938
|
-
var PageSpinner6 = () => /* @__PURE__ */
|
|
4191
|
+
import { HugeiconsIcon as HugeiconsIcon31 } from "@hugeicons/react";
|
|
4192
|
+
import { Loading03Icon as Loading03Icon15, CircleLock02Icon as CircleLock02Icon5 } from "@hugeicons/core-free-icons";
|
|
4193
|
+
var ButtonSpinner5 = () => /* @__PURE__ */ React45.createElement(HugeiconsIcon31, { icon: Loading03Icon15, size: 16, className: "animate-spin text-current" });
|
|
4194
|
+
var PageSpinner6 = () => /* @__PURE__ */ React45.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ React45.createElement(HugeiconsIcon31, { icon: Loading03Icon15, size: 32, className: "animate-spin text-black" }));
|
|
3939
4195
|
var UniversalDeveloperSettings = ({
|
|
3940
4196
|
initialPublicKey,
|
|
3941
4197
|
initialWebhookUrl,
|
|
@@ -3944,12 +4200,12 @@ var UniversalDeveloperSettings = ({
|
|
|
3944
4200
|
onGenerateKeys,
|
|
3945
4201
|
onSaveWebhook
|
|
3946
4202
|
}) => {
|
|
3947
|
-
const [publicKey, setPublicKey] =
|
|
3948
|
-
const [webhookUrl, setWebhookUrl] =
|
|
3949
|
-
const [isGenerating, setIsGenerating] =
|
|
3950
|
-
const [isSavingWebhook, setIsSavingWebhook] =
|
|
3951
|
-
const [isRollModalOpen, setIsRollModalOpen] =
|
|
3952
|
-
|
|
4203
|
+
const [publicKey, setPublicKey] = useState27(initialPublicKey);
|
|
4204
|
+
const [webhookUrl, setWebhookUrl] = useState27(initialWebhookUrl);
|
|
4205
|
+
const [isGenerating, setIsGenerating] = useState27(false);
|
|
4206
|
+
const [isSavingWebhook, setIsSavingWebhook] = useState27(false);
|
|
4207
|
+
const [isRollModalOpen, setIsRollModalOpen] = useState27(false);
|
|
4208
|
+
useEffect18(() => {
|
|
3953
4209
|
setPublicKey(initialPublicKey || "");
|
|
3954
4210
|
setWebhookUrl(initialWebhookUrl || "");
|
|
3955
4211
|
}, [initialPublicKey, initialWebhookUrl]);
|
|
@@ -4009,7 +4265,7 @@ SECRET_KEY="${secKey}"
|
|
|
4009
4265
|
};
|
|
4010
4266
|
const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
|
|
4011
4267
|
const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
|
|
4012
|
-
return /* @__PURE__ */
|
|
4268
|
+
return /* @__PURE__ */ React45.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__ */ React45.createElement(ManagedToaster, null), /* @__PURE__ */ React45.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React45.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React45.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ React45.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ React45.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__ */ React45.createElement(HugeiconsIcon31, { icon: CircleLock02Icon5, size: 18, className: "text-current" }))), isLoading ? /* @__PURE__ */ React45.createElement(PageSpinner6, null) : /* @__PURE__ */ React45.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ React45.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React45.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React45.createElement(
|
|
4013
4269
|
TextInput,
|
|
4014
4270
|
{
|
|
4015
4271
|
label: "Public Key",
|
|
@@ -4018,7 +4274,7 @@ SECRET_KEY="${secKey}"
|
|
|
4018
4274
|
},
|
|
4019
4275
|
disabled: true
|
|
4020
4276
|
}
|
|
4021
|
-
), /* @__PURE__ */
|
|
4277
|
+
), /* @__PURE__ */ React45.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__ */ React45.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React45.createElement(
|
|
4022
4278
|
ThreeDActionButton,
|
|
4023
4279
|
{
|
|
4024
4280
|
onClick: () => {
|
|
@@ -4030,7 +4286,7 @@ SECRET_KEY="${secKey}"
|
|
|
4030
4286
|
className: "w-fit"
|
|
4031
4287
|
},
|
|
4032
4288
|
publicKey ? "Roll API Keys" : "Generate Keys"
|
|
4033
|
-
))), /* @__PURE__ */
|
|
4289
|
+
))), /* @__PURE__ */ React45.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ React45.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React45.createElement(
|
|
4034
4290
|
TextInput,
|
|
4035
4291
|
{
|
|
4036
4292
|
label: "Webhook URL",
|
|
@@ -4040,7 +4296,7 @@ SECRET_KEY="${secKey}"
|
|
|
4040
4296
|
placeholder: "https://your-domain.com/webhook",
|
|
4041
4297
|
type: "url"
|
|
4042
4298
|
}
|
|
4043
|
-
), /* @__PURE__ */
|
|
4299
|
+
), /* @__PURE__ */ React45.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__ */ React45.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ React45.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ React45.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React45.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Webhook Status"), /* @__PURE__ */ React45.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ React45.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__ */ React45.createElement(
|
|
4044
4300
|
"button",
|
|
4045
4301
|
{
|
|
4046
4302
|
type: "button",
|
|
@@ -4048,7 +4304,7 @@ SECRET_KEY="${secKey}"
|
|
|
4048
4304
|
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"
|
|
4049
4305
|
},
|
|
4050
4306
|
"Cancel"
|
|
4051
|
-
), /* @__PURE__ */
|
|
4307
|
+
), /* @__PURE__ */ React45.createElement(
|
|
4052
4308
|
ThreeDActionButton,
|
|
4053
4309
|
{
|
|
4054
4310
|
type: "submit",
|
|
@@ -4057,7 +4313,7 @@ SECRET_KEY="${secKey}"
|
|
|
4057
4313
|
className: "min-w-32 w-full sm:w-auto"
|
|
4058
4314
|
},
|
|
4059
4315
|
"Save Webhook"
|
|
4060
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */
|
|
4316
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ React45.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React45.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ React45.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__ */ React45.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React45.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ React45.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__ */ React45.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React45.createElement(
|
|
4061
4317
|
"button",
|
|
4062
4318
|
{
|
|
4063
4319
|
onClick: () => setIsRollModalOpen(false),
|
|
@@ -4065,19 +4321,19 @@ SECRET_KEY="${secKey}"
|
|
|
4065
4321
|
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
4066
4322
|
},
|
|
4067
4323
|
"Cancel"
|
|
4068
|
-
), /* @__PURE__ */
|
|
4324
|
+
), /* @__PURE__ */ React45.createElement(
|
|
4069
4325
|
"button",
|
|
4070
4326
|
{
|
|
4071
4327
|
onClick: handleGenerateKeys,
|
|
4072
4328
|
disabled: isGenerating,
|
|
4073
4329
|
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"
|
|
4074
4330
|
},
|
|
4075
|
-
isGenerating ? /* @__PURE__ */
|
|
4331
|
+
isGenerating ? /* @__PURE__ */ React45.createElement(ButtonSpinner5, null) : "Roll Keys"
|
|
4076
4332
|
)))));
|
|
4077
4333
|
};
|
|
4078
4334
|
|
|
4079
4335
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4080
|
-
import
|
|
4336
|
+
import React46, { useState as useState28, useEffect as useEffect19, useRef as useRef13 } from "react";
|
|
4081
4337
|
import Image11 from "next/image";
|
|
4082
4338
|
var MedicalFeatureStatsBlock = ({
|
|
4083
4339
|
bottomHeadline,
|
|
@@ -4086,9 +4342,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4086
4342
|
trustText,
|
|
4087
4343
|
stats
|
|
4088
4344
|
}) => {
|
|
4089
|
-
const [isAnimating, setIsAnimating] =
|
|
4090
|
-
const titleRef =
|
|
4091
|
-
|
|
4345
|
+
const [isAnimating, setIsAnimating] = useState28(false);
|
|
4346
|
+
const titleRef = useRef13(null);
|
|
4347
|
+
useEffect19(() => {
|
|
4092
4348
|
const observer = new IntersectionObserver(
|
|
4093
4349
|
([entry]) => {
|
|
4094
4350
|
if (entry.isIntersecting) {
|
|
@@ -4106,7 +4362,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4106
4362
|
}
|
|
4107
4363
|
return () => observer.disconnect();
|
|
4108
4364
|
}, []);
|
|
4109
|
-
return /* @__PURE__ */
|
|
4365
|
+
return /* @__PURE__ */ React46.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React46.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React46.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React46.createElement(
|
|
4110
4366
|
"h2",
|
|
4111
4367
|
{
|
|
4112
4368
|
ref: titleRef,
|
|
@@ -4114,7 +4370,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4114
4370
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4115
4371
|
},
|
|
4116
4372
|
bottomHeadline
|
|
4117
|
-
), /* @__PURE__ */
|
|
4373
|
+
), /* @__PURE__ */ React46.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React46.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React46.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__ */ React46.createElement(
|
|
4118
4374
|
Image11,
|
|
4119
4375
|
{
|
|
4120
4376
|
src,
|
|
@@ -4123,17 +4379,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4123
4379
|
sizes: "48px",
|
|
4124
4380
|
className: "object-cover"
|
|
4125
4381
|
}
|
|
4126
|
-
)))), /* @__PURE__ */
|
|
4382
|
+
)))), /* @__PURE__ */ React46.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React46.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React46.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React46.createElement("div", { className: "flex pl-3 items-center border border-neutral-100 rounded-full p-0.5 mb-6" }, /* @__PURE__ */ React46.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React46.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
4127
4383
|
};
|
|
4128
4384
|
|
|
4129
4385
|
// src/components/ConsultantShowcase.tsx
|
|
4130
|
-
import
|
|
4386
|
+
import React47, { useState as useState29 } from "react";
|
|
4131
4387
|
import Image12 from "next/image";
|
|
4132
|
-
import { HugeiconsIcon as
|
|
4133
|
-
import { Loading03Icon as
|
|
4388
|
+
import { HugeiconsIcon as HugeiconsIcon32 } from "@hugeicons/react";
|
|
4389
|
+
import { Loading03Icon as Loading03Icon16 } from "@hugeicons/core-free-icons";
|
|
4134
4390
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4135
|
-
const [isLoading, setIsLoading] =
|
|
4136
|
-
return /* @__PURE__ */
|
|
4391
|
+
const [isLoading, setIsLoading] = useState29(true);
|
|
4392
|
+
return /* @__PURE__ */ React47.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon16, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React47.createElement(
|
|
4137
4393
|
Image12,
|
|
4138
4394
|
{
|
|
4139
4395
|
src,
|
|
@@ -4152,9 +4408,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4152
4408
|
var ConsultantShowcase = ({
|
|
4153
4409
|
profiles
|
|
4154
4410
|
}) => {
|
|
4155
|
-
const [currentIndex, setCurrentIndex] =
|
|
4156
|
-
const [touchStart, setTouchStart] =
|
|
4157
|
-
const [touchEnd, setTouchEnd] =
|
|
4411
|
+
const [currentIndex, setCurrentIndex] = useState29(0);
|
|
4412
|
+
const [touchStart, setTouchStart] = useState29(null);
|
|
4413
|
+
const [touchEnd, setTouchEnd] = useState29(null);
|
|
4158
4414
|
const nextSlide = () => {
|
|
4159
4415
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4160
4416
|
};
|
|
@@ -4179,7 +4435,7 @@ var ConsultantShowcase = ({
|
|
|
4179
4435
|
}
|
|
4180
4436
|
};
|
|
4181
4437
|
if (!profiles || profiles.length === 0) return null;
|
|
4182
|
-
return /* @__PURE__ */
|
|
4438
|
+
return /* @__PURE__ */ React47.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React47.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React47.createElement(
|
|
4183
4439
|
"div",
|
|
4184
4440
|
{
|
|
4185
4441
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4189,13 +4445,13 @@ var ConsultantShowcase = ({
|
|
|
4189
4445
|
},
|
|
4190
4446
|
profiles.map((profile, idx) => {
|
|
4191
4447
|
const isActive = idx === currentIndex;
|
|
4192
|
-
return /* @__PURE__ */
|
|
4448
|
+
return /* @__PURE__ */ React47.createElement(
|
|
4193
4449
|
"div",
|
|
4194
4450
|
{
|
|
4195
4451
|
key: profile.id,
|
|
4196
4452
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4197
4453
|
},
|
|
4198
|
-
/* @__PURE__ */
|
|
4454
|
+
/* @__PURE__ */ React47.createElement(
|
|
4199
4455
|
ImageWithLoader,
|
|
4200
4456
|
{
|
|
4201
4457
|
src: profile.imageSrc,
|
|
@@ -4203,14 +4459,14 @@ var ConsultantShowcase = ({
|
|
|
4203
4459
|
priority: idx === 0
|
|
4204
4460
|
}
|
|
4205
4461
|
),
|
|
4206
|
-
/* @__PURE__ */
|
|
4207
|
-
/* @__PURE__ */
|
|
4208
|
-
/* @__PURE__ */
|
|
4462
|
+
/* @__PURE__ */ React47.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
4463
|
+
/* @__PURE__ */ React47.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" }),
|
|
4464
|
+
/* @__PURE__ */ React47.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__ */ React47.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React47.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React47.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
|
|
4209
4465
|
);
|
|
4210
4466
|
}),
|
|
4211
|
-
/* @__PURE__ */
|
|
4212
|
-
/* @__PURE__ */
|
|
4213
|
-
/* @__PURE__ */
|
|
4467
|
+
/* @__PURE__ */ React47.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" }),
|
|
4468
|
+
/* @__PURE__ */ React47.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" }),
|
|
4469
|
+
/* @__PURE__ */ React47.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__ */ React47.createElement(
|
|
4214
4470
|
"button",
|
|
4215
4471
|
{
|
|
4216
4472
|
key: idx,
|
|
@@ -4223,13 +4479,13 @@ var ConsultantShowcase = ({
|
|
|
4223
4479
|
};
|
|
4224
4480
|
|
|
4225
4481
|
// src/components/ContentGridBlock.tsx
|
|
4226
|
-
import
|
|
4482
|
+
import React48, { useState as useState30 } from "react";
|
|
4227
4483
|
import Image13 from "next/image";
|
|
4228
|
-
import { HugeiconsIcon as
|
|
4229
|
-
import { Loading03Icon as
|
|
4484
|
+
import { HugeiconsIcon as HugeiconsIcon33 } from "@hugeicons/react";
|
|
4485
|
+
import { Loading03Icon as Loading03Icon17 } from "@hugeicons/core-free-icons";
|
|
4230
4486
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4231
|
-
const [isLoading, setIsLoading] =
|
|
4232
|
-
return /* @__PURE__ */
|
|
4487
|
+
const [isLoading, setIsLoading] = useState30(true);
|
|
4488
|
+
return /* @__PURE__ */ React48.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React48.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__ */ React48.createElement(HugeiconsIcon33, { icon: Loading03Icon17, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React48.createElement(
|
|
4233
4489
|
Image13,
|
|
4234
4490
|
{
|
|
4235
4491
|
src,
|
|
@@ -4251,14 +4507,14 @@ var ContentGridBlock = ({
|
|
|
4251
4507
|
middleBottomCard,
|
|
4252
4508
|
rightCards
|
|
4253
4509
|
}) => {
|
|
4254
|
-
return /* @__PURE__ */
|
|
4510
|
+
return /* @__PURE__ */ React48.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React48.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React48.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React48.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React48.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React48.createElement("div", { className: "border border-neutral-100 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React48.createElement("p", { className: "text-[17px] text-black leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React48.createElement("span", { className: "mb-auto text-[11px] text-neutral-400 uppercase tracking-widest" }, leftCard.tag), /* @__PURE__ */ React48.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React48.createElement("div", null, /* @__PURE__ */ React48.createElement("h4", { className: "text-[15px] text-black" }, leftCard.title), /* @__PURE__ */ React48.createElement("p", { className: "text-[13px] text-neutral-400" }, leftCard.subtitle)), /* @__PURE__ */ React48.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React48.createElement(Image13, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React48.createElement("div", { className: "border border-neutral-100 rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React48.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React48.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React48.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React48.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React48.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React48.createElement(Image13, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React48.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React48.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React48.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__ */ React48.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React48.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React48.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React48.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React48.createElement("div", { className: "border border-neutral-100 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React48.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React48.createElement("div", null, /* @__PURE__ */ React48.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React48.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React48.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React48.createElement(Image13, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React48.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React48.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React48.createElement("span", { className: "text-[11px] text-neutral-400 uppercase tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React48.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React48.createElement(
|
|
4255
4511
|
ImageWithLoader2,
|
|
4256
4512
|
{
|
|
4257
4513
|
src: card.bgImageSrc,
|
|
4258
4514
|
alt: card.title,
|
|
4259
4515
|
className: "absolute inset-0 w-full h-full"
|
|
4260
4516
|
}
|
|
4261
|
-
), /* @__PURE__ */
|
|
4517
|
+
), /* @__PURE__ */ React48.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ React48.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React48.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React48.createElement("span", { className: "mb-4 text-[11px] text-white/50 uppercase tracking-widest" }, card.tag), /* @__PURE__ */ React48.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React48.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ React48.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
4262
4518
|
};
|
|
4263
4519
|
export {
|
|
4264
4520
|
AITranscriptionFeature,
|
|
@@ -4270,6 +4526,7 @@ export {
|
|
|
4270
4526
|
ContentGridBlock,
|
|
4271
4527
|
Faq,
|
|
4272
4528
|
FeatureScroll,
|
|
4529
|
+
FileIconMapper,
|
|
4273
4530
|
Footer,
|
|
4274
4531
|
GifFeatureCard,
|
|
4275
4532
|
Header,
|
|
@@ -4298,6 +4555,7 @@ export {
|
|
|
4298
4555
|
UniversalDashboardPage,
|
|
4299
4556
|
UniversalDeveloperSettings,
|
|
4300
4557
|
UniversalDirectoryPage,
|
|
4558
|
+
UniversalDriveView,
|
|
4301
4559
|
UniversalErrorView,
|
|
4302
4560
|
UniversalIdentityPage,
|
|
4303
4561
|
UniversalLookupPage,
|