@retinalabsllc/zairusjs 4.0.2 → 4.0.4
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 +38 -8
- package/dist/index.d.ts +38 -8
- package/dist/index.js +269 -147
- package/dist/index.mjs +264 -136
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -910,7 +910,7 @@ var AITranscriptionFeature = ({
|
|
|
910
910
|
${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
911
911
|
`
|
|
912
912
|
}
|
|
913
|
-
) : /* @__PURE__ */ React10.createElement("div", { className: "absolute inset-0 bg-white z-0" })), /* @__PURE__ */ React10.createElement("div", { className: "max-w-3xl mx-auto text-center animate-in fade-in slide-in-from-bottom-4 duration-700 delay-300 fill-mode-both" }, /* @__PURE__ */ React10.createElement("p", { className: "text-[18px] sm:text-[22px] md:text-[25px] leading-[1.8] text-neutral-800" }, detailTextPrefix, " ", /* @__PURE__ */ React10.createElement("span", { className: "relative inline-block mx-1 px-2.5 py-0.5 bg-[#cd8bff]/10 border border-[#cd8bff] rounded-[3px] text-[#a651e7] transition-all duration-300 max-w-full wrap-break-word" }, /* @__PURE__ */ React10.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ React10.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ React10.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ React10.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ React10.createElement("span", { className: "absolute -bottom-6 -right-4 sm:-right-6 flex items-center z-20 pointer-events-none select-none filter drop-shadow-[0_2px_4px_rgba(0,0,0,0.15)]" }, /* @__PURE__ */ React10.createElement("svg", { width: "16", height: "20", viewBox: "0 0 16 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "transform -rotate-12" }, /* @__PURE__ */ React10.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#cd8bff", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ React10.createElement("span", { className: "ml-1 bg-[#cd8bff] text-[11px] text-white font-mono px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel))), " ", detailTextSuffix))));
|
|
913
|
+
) : /* @__PURE__ */ React10.createElement("div", { className: "absolute inset-0 bg-white z-0" })), /* @__PURE__ */ React10.createElement("div", { className: "min-h-75 max-w-3xl mx-auto text-center animate-in fade-in slide-in-from-bottom-4 duration-700 delay-300 fill-mode-both" }, /* @__PURE__ */ React10.createElement("p", { className: "text-[18px] sm:text-[22px] md:text-[25px] leading-[1.8] text-neutral-800" }, detailTextPrefix, " ", /* @__PURE__ */ React10.createElement("span", { className: "relative inline-block mx-1 px-2.5 py-0.5 bg-[#cd8bff]/10 border border-[#cd8bff] rounded-[3px] text-[#a651e7] transition-all duration-300 max-w-full wrap-break-word" }, /* @__PURE__ */ React10.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ React10.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ React10.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ React10.createElement("span", { className: "absolute bottom-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), highlightText, /* @__PURE__ */ React10.createElement("span", { className: "absolute -bottom-6 -right-4 sm:-right-6 flex items-center z-20 pointer-events-none select-none filter drop-shadow-[0_2px_4px_rgba(0,0,0,0.15)]" }, /* @__PURE__ */ React10.createElement("svg", { width: "16", height: "20", viewBox: "0 0 16 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "transform -rotate-12" }, /* @__PURE__ */ React10.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#cd8bff", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ React10.createElement("span", { className: "ml-1 bg-[#cd8bff] text-[11px] text-white font-mono px-2 py-0.5 rounded-full border border-white tracking-wide" }, cursorLabel))), " ", detailTextSuffix))));
|
|
914
914
|
};
|
|
915
915
|
|
|
916
916
|
// src/components/PlatformFeatures.tsx
|
|
@@ -1097,7 +1097,7 @@ var ManagedPricingBlock = ({
|
|
|
1097
1097
|
},
|
|
1098
1098
|
tab.label
|
|
1099
1099
|
);
|
|
1100
|
-
}))), /* @__PURE__ */ React14.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ React14.createElement(
|
|
1100
|
+
}))), /* @__PURE__ */ React14.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full min-h-75 max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ React14.createElement(
|
|
1101
1101
|
"div",
|
|
1102
1102
|
{
|
|
1103
1103
|
key: `${activeTabIndex}-${planIdx}`,
|
|
@@ -1663,7 +1663,6 @@ var UniversalSidebar = ({
|
|
|
1663
1663
|
currentAppType = "unknown",
|
|
1664
1664
|
title = "App",
|
|
1665
1665
|
subtitle,
|
|
1666
|
-
homeUrl = "/app",
|
|
1667
1666
|
showBackButton = false,
|
|
1668
1667
|
backUrl = "/app",
|
|
1669
1668
|
showWorkspaceSwitcher = false,
|
|
@@ -1672,6 +1671,7 @@ var UniversalSidebar = ({
|
|
|
1672
1671
|
onSwitchWorkspace,
|
|
1673
1672
|
showLogoutAction = false,
|
|
1674
1673
|
onLogout,
|
|
1674
|
+
storageConfig,
|
|
1675
1675
|
showInterceptDialog = false,
|
|
1676
1676
|
onCancelIntercept,
|
|
1677
1677
|
onConfirmIntercept,
|
|
@@ -1760,7 +1760,7 @@ var UniversalSidebar = ({
|
|
|
1760
1760
|
HugeiconsIcon12,
|
|
1761
1761
|
{
|
|
1762
1762
|
icon: CircleArrowDown01Icon,
|
|
1763
|
-
size:
|
|
1763
|
+
size: 20,
|
|
1764
1764
|
className: "text-neutral-400 shrink-0 group-hover:text-black transition-colors mr-3 ml-auto"
|
|
1765
1765
|
}
|
|
1766
1766
|
))
|
|
@@ -1771,7 +1771,7 @@ var UniversalSidebar = ({
|
|
|
1771
1771
|
className: "text-neutral-400 hover:text-black transition-colors outline-none",
|
|
1772
1772
|
"aria-label": "Close Menu"
|
|
1773
1773
|
},
|
|
1774
|
-
/* @__PURE__ */ React25.createElement(HugeiconsIcon12, { icon: CancelCircleIcon, size:
|
|
1774
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon12, { icon: CancelCircleIcon, size: 20 })
|
|
1775
1775
|
))),
|
|
1776
1776
|
/* @__PURE__ */ React25.createElement("nav", { className: "flex-1 py-2 flex flex-col gap-1.5 px-3 overflow-y-auto custom-scrollbar" }, navItems.map((item, index) => {
|
|
1777
1777
|
const isExactOrSubMatch = item.path === "/mod" || item.path === "/app" ? currentPath === item.path : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
@@ -1796,7 +1796,32 @@ var UniversalSidebar = ({
|
|
|
1796
1796
|
(!isCollapsed || isMobileOpen) && /* @__PURE__ */ React25.createElement("span", { className: "text-xs tracking-wide truncate" }, item.name)
|
|
1797
1797
|
);
|
|
1798
1798
|
})),
|
|
1799
|
-
/* @__PURE__ */ React25.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 " },
|
|
1799
|
+
/* @__PURE__ */ React25.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 " }, storageConfig && /* @__PURE__ */ React25.createElement("div", { className: `px-2 pb-3 pt-1 ${isCollapsed && !isMobileOpen ? "flex justify-center" : ""}` }, !isCollapsed || isMobileOpen ? /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col gap-1.5 w-full" }, /* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] uppercase tracking-widest text-neutral-400" }, "Storage"), /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] text-neutral-500" }, storageConfig.percentage, "%")), /* @__PURE__ */ React25.createElement("div", { className: "w-full h-1 bg-neutral-100 rounded-full overflow-hidden" }, /* @__PURE__ */ React25.createElement(
|
|
1800
|
+
"div",
|
|
1801
|
+
{
|
|
1802
|
+
className: "h-full rounded-full transition-all duration-500 ease-out",
|
|
1803
|
+
style: {
|
|
1804
|
+
width: `${Math.min(storageConfig.percentage, 100)}%`,
|
|
1805
|
+
background: "linear-gradient(to right, #f64b4d, #ffa360)"
|
|
1806
|
+
}
|
|
1807
|
+
}
|
|
1808
|
+
)), /* @__PURE__ */ React25.createElement("span", { className: "text-[9px] text-neutral-400 tracking-wide" }, storageConfig.used, " of ", storageConfig.total, " used")) : /* @__PURE__ */ React25.createElement(
|
|
1809
|
+
"div",
|
|
1810
|
+
{
|
|
1811
|
+
className: "w-1.5 h-8 bg-neutral-100 rounded-full overflow-hidden flex items-end",
|
|
1812
|
+
title: `${storageConfig.used} / ${storageConfig.total} used`
|
|
1813
|
+
},
|
|
1814
|
+
/* @__PURE__ */ React25.createElement(
|
|
1815
|
+
"div",
|
|
1816
|
+
{
|
|
1817
|
+
className: "w-full rounded-full transition-all duration-500 ease-out",
|
|
1818
|
+
style: {
|
|
1819
|
+
height: `${Math.min(storageConfig.percentage, 100)}%`,
|
|
1820
|
+
background: "linear-gradient(to top, #f64b4d, #ffa360)"
|
|
1821
|
+
}
|
|
1822
|
+
}
|
|
1823
|
+
)
|
|
1824
|
+
)), (showWorkspaceSwitcher || showLogoutAction) && /* @__PURE__ */ React25.createElement("div", { className: `flex gap-2 px-1 pb-2 ${isCollapsed && !isMobileOpen ? "flex-col items-center" : "items-center"}` }, showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ React25.createElement(
|
|
1800
1825
|
"button",
|
|
1801
1826
|
{
|
|
1802
1827
|
onClick: () => setShowSwitcherDialog(true),
|
|
@@ -2009,7 +2034,7 @@ var UniversalOrganizationPage = ({
|
|
|
2009
2034
|
};
|
|
2010
2035
|
const hasChanges = orgName !== initialOrgName || slug !== initialSlug;
|
|
2011
2036
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || orgName.length < 3 || slug.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
2012
|
-
return /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ React26.createElement(ManagedToaster, null), /* @__PURE__ */ React26.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, "Organization"), /* @__PURE__ */ React26.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your tenant workspace details and identity.")), isReadOnly && /* @__PURE__ */ React26.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ React26.createElement(HugeiconsIcon13, { icon: CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ React26.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ React26.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React26.createElement(
|
|
2037
|
+
return /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col gap-8 animate-in min-h-75 max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ React26.createElement(ManagedToaster, null), /* @__PURE__ */ React26.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, "Organization"), /* @__PURE__ */ React26.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your tenant workspace details and identity.")), isReadOnly && /* @__PURE__ */ React26.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ React26.createElement(HugeiconsIcon13, { icon: CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ React26.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ React26.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React26.createElement(
|
|
2013
2038
|
TextInput,
|
|
2014
2039
|
{
|
|
2015
2040
|
label: "Organization Name",
|
|
@@ -2133,7 +2158,7 @@ var UniversalIdentityPage = ({
|
|
|
2133
2158
|
};
|
|
2134
2159
|
const hasChanges = primaryValue !== initialPrimaryValue || secondaryValue !== initialSecondaryValue;
|
|
2135
2160
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || primaryValue.trim().length < 3;
|
|
2136
|
-
return /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ React27.createElement(ManagedToaster, null), /* @__PURE__ */ React27.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React27.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), isReadOnly && /* @__PURE__ */ React27.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ React27.createElement(HugeiconsIcon14, { icon: CircleLock02Icon2, size: 18, className: "text-current" }))), /* @__PURE__ */ React27.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ React27.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React27.createElement(
|
|
2161
|
+
return /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col gap-8 animate-in min-h-75 max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ React27.createElement(ManagedToaster, null), /* @__PURE__ */ React27.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React27.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), isReadOnly && /* @__PURE__ */ React27.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ React27.createElement(HugeiconsIcon14, { icon: CircleLock02Icon2, size: 18, className: "text-current" }))), /* @__PURE__ */ React27.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ React27.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React27.createElement(
|
|
2137
2162
|
TextInput,
|
|
2138
2163
|
{
|
|
2139
2164
|
label: primaryInputLabel,
|
|
@@ -2342,7 +2367,7 @@ var UniversalMembersPage = ({
|
|
|
2342
2367
|
setSelectedMember(null);
|
|
2343
2368
|
setIsRoleModalOpen(false);
|
|
2344
2369
|
};
|
|
2345
|
-
return /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white " }, /* @__PURE__ */ React28.createElement(ManagedToaster, null), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" && /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React28.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), canManage && /* @__PURE__ */ React28.createElement(
|
|
2370
|
+
return /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col gap-8 animate-in min-h-75 max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white " }, /* @__PURE__ */ React28.createElement(ManagedToaster, null), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" && /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement("div", null, /* @__PURE__ */ React28.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React28.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), canManage && /* @__PURE__ */ React28.createElement(
|
|
2346
2371
|
ThreeDActionButton,
|
|
2347
2372
|
{
|
|
2348
2373
|
onClick: () => setCurrentView("invite"),
|
|
@@ -2517,7 +2542,7 @@ var UniversalProfileSettings = ({
|
|
|
2517
2542
|
};
|
|
2518
2543
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
2519
2544
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
2520
|
-
return /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 " }, /* @__PURE__ */ React29.createElement(ManagedToaster, null), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React29.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React29.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ React29.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ React29.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ React29.createElement(HugeiconsIcon16, { icon: CircleLock02Icon3, size: 18, className: "text-current" }))), /* @__PURE__ */ React29.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ React29.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React29.createElement(
|
|
2545
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col min-h-75 max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 " }, /* @__PURE__ */ React29.createElement(ManagedToaster, null), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React29.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React29.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ React29.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ React29.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ React29.createElement(HugeiconsIcon16, { icon: CircleLock02Icon3, size: 18, className: "text-current" }))), /* @__PURE__ */ React29.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ React29.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React29.createElement(
|
|
2521
2546
|
TextInput,
|
|
2522
2547
|
{
|
|
2523
2548
|
label: "First Name",
|
|
@@ -2653,7 +2678,7 @@ var UniversalBillingPage = ({
|
|
|
2653
2678
|
setIsUpdating(false);
|
|
2654
2679
|
}
|
|
2655
2680
|
};
|
|
2656
|
-
return /* @__PURE__ */ React30.createElement("div", { className: "flex max-w-3xl rounded-2xl bg-white p-6 flex-col gap-8 animate-in fade-in duration-300 " }, /* @__PURE__ */ React30.createElement(ManagedToaster, null), /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, currentView === "list" ? /* @__PURE__ */ React30.createElement("div", { className: "min-w-0 w-full" }, /* @__PURE__ */ React30.createElement("h1", { className: "text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ React30.createElement("p", { className: "text-xs text-neutral-500 truncate mb-6" }, headerDescription), showSearchAndFilter && onSearchChange && onTimeframeChange && /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col sm:flex-row gap-4 mb-4" }, /* @__PURE__ */ React30.createElement(
|
|
2681
|
+
return /* @__PURE__ */ React30.createElement("div", { className: "flex min-h-75 max-w-3xl rounded-2xl bg-white p-6 flex-col gap-8 animate-in fade-in duration-300 " }, /* @__PURE__ */ React30.createElement(ManagedToaster, null), /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, currentView === "list" ? /* @__PURE__ */ React30.createElement("div", { className: "min-w-0 w-full" }, /* @__PURE__ */ React30.createElement("h1", { className: "text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ React30.createElement("p", { className: "text-xs text-neutral-500 truncate mb-6" }, headerDescription), showSearchAndFilter && onSearchChange && onTimeframeChange && /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col sm:flex-row gap-4 mb-4" }, /* @__PURE__ */ React30.createElement(
|
|
2657
2682
|
TextInput,
|
|
2658
2683
|
{
|
|
2659
2684
|
placeholder: "Search by ID or Name...",
|
|
@@ -2947,7 +2972,7 @@ var UniversalAgentConsole = ({
|
|
|
2947
2972
|
if (entries.length === 0) return null;
|
|
2948
2973
|
return entries.map(([k, v]) => /* @__PURE__ */ React33.createElement("div", { key: k, className: "flex flex-col items-start min-w-0 wrap-break-word w-full mb-3 last:mb-0" }, /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 " }, formatKeyName(k)), renderValue(k, v)));
|
|
2949
2974
|
};
|
|
2950
|
-
return /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ React33.createElement(ManagedToaster, null), currentView === "list" && /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col items-start gap-1" }, /* @__PURE__ */ React33.createElement("h1", { className: " text-xl text-black tracking-tight" }, headerTitle), /* @__PURE__ */ React33.createElement("p", { className: "text-sm text-neutral-500" }, headerDescription)), stats.length > 0 && /* @__PURE__ */ React33.createElement("div", { className: "w-full rounded-2xl max-w-3xl overflow-hidden bg-white" }, /* @__PURE__ */ React33.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 divide-y md:divide-y-0 md:divide-x divide-neutral-100" }, stats.map((stat, idx) => /* @__PURE__ */ React33.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ React33.createElement("div", { className: "w-12 h-12 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-black shrink-0" }, stat.icon), /* @__PURE__ */ React33.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ React33.createElement("p", { className: "text-xl text-black tracking-tight truncate" }, stat.value)))))), tabs.length > 0 && /* @__PURE__ */ React33.createElement("div", { className: "flex items-center gap-6" }, tabs.map((tab) => /* @__PURE__ */ React33.createElement("button", { key: tab.id, onClick: () => onTabChange(tab.id), className: `pb-3 text-sm transition-colors outline-none ${activeTab === tab.id ? "text-black border-b border-black" : "text-neutral-400 hover:text-black"}` }, tab.label))), /* @__PURE__ */ React33.createElement("div", { className: "w-full bg-white rounded-2xl max-w-3xl overflow-hidden flex flex-col min-h-100" }, isLoadingList ? /* @__PURE__ */ React33.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: Loading03Icon10, size: 32, className: "animate-spin text-black" })) : listData.length === 0 ? /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", { className: "flex-1 flex justify-center items-center text-neutral-500 text-sm py-20" }, "No matching applications found.")) : /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", { className: "divide-y divide-neutral-100 flex-1" }, listData.map((item) => /* @__PURE__ */ React33.createElement("div", { key: item.id, onClick: () => onRowClick(item.id), className: "flex items-center justify-between p-5 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0" }, /* @__PURE__ */ React33.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React33.createElement("p", { className: "text-sm text-black truncate pr-4" }, item.title), /* @__PURE__ */ React33.createElement("p", { className: "text-xs text-neutral-500 truncate mt-1" }, item.subtitle)), /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col items-end gap-1 shrink-0 pl-4" }, /* @__PURE__ */ React33.createElement("span", { className: `text-[11px] tracking-widest px-3 py-1 rounded-full ${item.status === "COMPLETED" ? "bg-emerald-50 text-emerald-600" : "bg-neutral-50 text-neutral-600"}` }, item.status.replace(/_/g, " ")), /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] text-neutral-400 mt-1" }, item.date))))), totalPages > 1 && /* @__PURE__ */ React33.createElement("div", { className: "flex items-center justify-between p-5 bg-neutral-50/50" }, /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ React33.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React33.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage === 1, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: ArrowLeft01Icon6, size: 14 })), /* @__PURE__ */ React33.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: ArrowRight01Icon5, size: 14 }))))))), currentView === "details" && selectedApp && /* @__PURE__ */ React33.createElement("div", { className: "w-full bg-white rounded-2xl p-6 sm:p-10 animate-in fade-in duration-300 max-w-3xl flex flex-col" }, /* @__PURE__ */ React33.createElement("div", { className: "flex items-center justify-between gap-4 pb-6" }, /* @__PURE__ */ React33.createElement("button", { onClick: () => {
|
|
2975
|
+
return /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ React33.createElement(ManagedToaster, null), currentView === "list" && /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col items-start gap-1" }, /* @__PURE__ */ React33.createElement("h1", { className: " text-xl text-black tracking-tight" }, headerTitle), /* @__PURE__ */ React33.createElement("p", { className: "text-sm text-neutral-500" }, headerDescription)), stats.length > 0 && /* @__PURE__ */ React33.createElement("div", { className: "w-full rounded-2xl min-h-75 max-w-3xl overflow-hidden bg-white" }, /* @__PURE__ */ React33.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 divide-y md:divide-y-0 md:divide-x divide-neutral-100" }, stats.map((stat, idx) => /* @__PURE__ */ React33.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ React33.createElement("div", { className: "w-12 h-12 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-black shrink-0" }, stat.icon), /* @__PURE__ */ React33.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React33.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ React33.createElement("p", { className: "text-xl text-black tracking-tight truncate" }, stat.value)))))), tabs.length > 0 && /* @__PURE__ */ React33.createElement("div", { className: "flex items-center gap-6" }, tabs.map((tab) => /* @__PURE__ */ React33.createElement("button", { key: tab.id, onClick: () => onTabChange(tab.id), className: `pb-3 text-sm transition-colors outline-none ${activeTab === tab.id ? "text-black border-b border-black" : "text-neutral-400 hover:text-black"}` }, tab.label))), /* @__PURE__ */ React33.createElement("div", { className: "w-full bg-white rounded-2xl min-h-75 max-w-3xl overflow-hidden flex flex-col min-h-100" }, isLoadingList ? /* @__PURE__ */ React33.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: Loading03Icon10, size: 32, className: "animate-spin text-black" })) : listData.length === 0 ? /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", { className: "flex-1 flex justify-center items-center text-neutral-500 text-sm py-20" }, "No matching applications found.")) : /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", { className: "divide-y divide-neutral-100 flex-1" }, listData.map((item) => /* @__PURE__ */ React33.createElement("div", { key: item.id, onClick: () => onRowClick(item.id), className: "flex items-center justify-between p-5 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0" }, /* @__PURE__ */ React33.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React33.createElement("p", { className: "text-sm text-black truncate pr-4" }, item.title), /* @__PURE__ */ React33.createElement("p", { className: "text-xs text-neutral-500 truncate mt-1" }, item.subtitle)), /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col items-end gap-1 shrink-0 pl-4" }, /* @__PURE__ */ React33.createElement("span", { className: `text-[11px] tracking-widest px-3 py-1 rounded-full ${item.status === "COMPLETED" ? "bg-emerald-50 text-emerald-600" : "bg-neutral-50 text-neutral-600"}` }, item.status.replace(/_/g, " ")), /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] text-neutral-400 mt-1" }, item.date))))), totalPages > 1 && /* @__PURE__ */ React33.createElement("div", { className: "flex items-center justify-between p-5 bg-neutral-50/50" }, /* @__PURE__ */ React33.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ React33.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React33.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage === 1, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: ArrowLeft01Icon6, size: 14 })), /* @__PURE__ */ React33.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: ArrowRight01Icon5, size: 14 }))))))), currentView === "details" && selectedApp && /* @__PURE__ */ React33.createElement("div", { className: "w-full bg-white rounded-2xl p-6 sm:p-10 animate-in fade-in duration-300 min-h-75 max-w-3xl flex flex-col" }, /* @__PURE__ */ React33.createElement("div", { className: "flex items-center justify-between gap-4 pb-6" }, /* @__PURE__ */ React33.createElement("button", { onClick: () => {
|
|
2951
2976
|
onBackToList();
|
|
2952
2977
|
setPendingFiles([]);
|
|
2953
2978
|
}, className: "flex items-center gap-2 text-[11px] text-neutral-400 hover:text-black tracking-widest transition-colors outline-none " }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: ArrowLeft01Icon6, size: 14 }), " Back to List"), /* @__PURE__ */ React33.createElement("span", { className: `text-[11px] tracking-widest px-4 py-1.5 rounded-full ${selectedApp.status === "COMPLETED" ? "bg-emerald-50 text-emerald-600" : "bg-neutral-50 text-neutral-600"}` }, selectedApp.status.replace(/_/g, " "))), /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col gap-2 mb-8" }, /* @__PURE__ */ React33.createElement("h2", { className: " text-xl text-black tracking-tight" }, selectedApp.name || selectedApp.title), /* @__PURE__ */ React33.createElement("p", { className: "text-sm text-neutral-500" }, selectedApp.type ? selectedApp.type.replace(/_/g, " ").toLowerCase().replace(/\b\w/g, (c) => c.toUpperCase()) : selectedApp.subtitle)), selectedApp.agentId === currentAgentId && selectedApp.metadata && Object.keys(selectedApp.metadata).length > 0 ? /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col gap-5" }, renderDynamicObject(selectedApp.metadata)) : selectedApp.agentId === currentAgentId ? /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col gap-5" }, /* @__PURE__ */ React33.createElement("p", { className: "text-sm text-neutral-500" }, "No application data extracted.")) : null, selectedApp.agentId && /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col gap-4 pt-8 mt-4 border-t border-neutral-100" }, /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col gap-1 mb-4" }, /* @__PURE__ */ React33.createElement("h3", { className: " text-sm text-black" }, "Official Archives"), /* @__PURE__ */ React33.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload final certificates or documents. Once marked completed, the archive unlocks for the user.")), selectedApp.archives?.map((arch) => /* @__PURE__ */ React33.createElement("div", { key: arch.id, className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React33.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: File02Icon, size: 18, className: "shrink-0" }), /* @__PURE__ */ React33.createElement("span", { className: "truncate pr-2" }, arch.name)), /* @__PURE__ */ React33.createElement("button", { onClick: () => setArchiveToDelete(arch), className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: Delete02Icon, size: 16 })))), pendingFiles.map((file, idx) => /* @__PURE__ */ React33.createElement("div", { key: idx, className: "flex items-center justify-between text-neutral-600 text-sm w-full" }, /* @__PURE__ */ React33.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: AttachmentIcon, size: 18, className: "shrink-0" }), /* @__PURE__ */ React33.createElement("span", { className: "truncate pr-2" }, file.name)), /* @__PURE__ */ React33.createElement("button", { onClick: () => setPendingFiles((p) => p.filter((_, i) => i !== idx)), className: "text-neutral-400 hover:text-red-500 transition-colors p-1 outline-none shrink-0" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: Cancel01Icon, size: 16 })))), /* @__PURE__ */ React33.createElement("input", { type: "file", multiple: true, ref: archiveRef, onChange: handleFileSelect, className: "hidden", accept: "application/pdf,image/*" }), /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full" }, /* @__PURE__ */ React33.createElement("button", { onClick: () => archiveRef.current?.click(), disabled: selectedApp.status !== "COMPLETED" || isUploading, className: "flex items-center justify-center gap-3 p-4 border border-neutral-100 rounded-full hover:bg-neutral-50 transition-colors text-black text-sm w-full outline-none disabled:opacity-50" }, /* @__PURE__ */ React33.createElement(HugeiconsIcon20, { icon: Upload01Icon, size: 18, className: "text-neutral-400" }), " Select Files to Upload"), pendingFiles.length > 0 && /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full sm:w-auto shrink-0" }, /* @__PURE__ */ React33.createElement("button", { onClick: () => setPendingFiles([]), disabled: isUploading, className: "px-6 py-2 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-100 outline-none w-full sm:w-auto " }, "Clear All"), /* @__PURE__ */ React33.createElement(ThreeDActionButton, { onClick: executeUpload, disabled: isUploading, isLoading: isUploading, className: "w-full sm:w-auto" }, "Upload ", pendingFiles.length, " File(s)")))), /* @__PURE__ */ React33.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 mt-8 pt-6" }, !selectedApp.agentId ? /* @__PURE__ */ React33.createElement(ThreeDActionButton, { onClick: async () => {
|
|
@@ -3045,7 +3070,7 @@ var UniversalOverviewPage = ({
|
|
|
3045
3070
|
alerts = [],
|
|
3046
3071
|
banner
|
|
3047
3072
|
}) => {
|
|
3048
|
-
return /* @__PURE__ */ React35.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ React35.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ React35.createElement("div", null, /* @__PURE__ */ React35.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React35.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), quickStats.length > 0 && /* @__PURE__ */ React35.createElement("div", { className: "w-full rounded-2xl overflow-hidden max-w-3xl bg-white" }, /* @__PURE__ */ React35.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 divide-y md:divide-y-0 md:divide-x divide-neutral-100" }, quickStats.map((stat, idx) => /* @__PURE__ */ React35.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ React35.createElement("div", { className: "w-12 h-12 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-black shrink-0" }, stat.icon), /* @__PURE__ */ React35.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React35.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ React35.createElement("p", { className: "text-lg md:text-xl text-black tracking-tight truncate" }, stat.value)))))), banner && banner.isVisible && /* @__PURE__ */ React35.createElement("div", { className: "w-full max-w-3xl" }, /* @__PURE__ */ React35.createElement(
|
|
3073
|
+
return /* @__PURE__ */ React35.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ React35.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ React35.createElement("div", null, /* @__PURE__ */ React35.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React35.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), quickStats.length > 0 && /* @__PURE__ */ React35.createElement("div", { className: "w-full rounded-2xl overflow-hidden min-h-75 max-w-3xl bg-white" }, /* @__PURE__ */ React35.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 divide-y md:divide-y-0 md:divide-x divide-neutral-100" }, quickStats.map((stat, idx) => /* @__PURE__ */ React35.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ React35.createElement("div", { className: "w-12 h-12 rounded-full border border-neutral-100 bg-white flex items-center justify-center text-black shrink-0" }, stat.icon), /* @__PURE__ */ React35.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React35.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ React35.createElement("p", { className: "text-lg md:text-xl text-black tracking-tight truncate" }, stat.value)))))), banner && banner.isVisible && /* @__PURE__ */ React35.createElement("div", { className: "w-full min-h-75 max-w-3xl" }, /* @__PURE__ */ React35.createElement(
|
|
3049
3074
|
Banner,
|
|
3050
3075
|
{
|
|
3051
3076
|
title: banner.title,
|
|
@@ -3056,7 +3081,7 @@ var UniversalOverviewPage = ({
|
|
|
3056
3081
|
onDismiss: banner.onDismiss,
|
|
3057
3082
|
action: banner.action
|
|
3058
3083
|
}
|
|
3059
|
-
)), /* @__PURE__ */ React35.createElement("div", { className: "w-full rounded-2xl max-w-3xl overflow-hidden bg-white min-w-0" }, /* @__PURE__ */ React35.createElement("div", { className: "p-6 sm:p-8 flex flex-col h-full min-w-0 gap-6" }, /* @__PURE__ */ React35.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4 border-b border-neutral-100 pb-4" }, /* @__PURE__ */ React35.createElement("h3", { className: " text-[11px] text-black tracking-[0.2em] " }, detailsTitle), primaryAction && (primaryAction.href ? /* @__PURE__ */ React35.createElement(
|
|
3084
|
+
)), /* @__PURE__ */ React35.createElement("div", { className: "w-full rounded-2xl min-h-75 max-w-3xl overflow-hidden bg-white min-w-0" }, /* @__PURE__ */ React35.createElement("div", { className: "p-6 sm:p-8 flex flex-col h-full min-w-0 gap-6" }, /* @__PURE__ */ React35.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4 border-b border-neutral-100 pb-4" }, /* @__PURE__ */ React35.createElement("h3", { className: " text-[11px] text-black tracking-[0.2em] " }, detailsTitle), primaryAction && (primaryAction.href ? /* @__PURE__ */ React35.createElement(
|
|
3060
3085
|
ThreeDButton,
|
|
3061
3086
|
{
|
|
3062
3087
|
href: primaryAction.href,
|
|
@@ -3166,7 +3191,7 @@ var UniversalLookupPage = ({
|
|
|
3166
3191
|
}) => {
|
|
3167
3192
|
const [isTypeModalOpen, setIsTypeModalOpen] = useState23(false);
|
|
3168
3193
|
const currentOptionLabel = searchOptions.find((opt) => opt.value === selectedSearchType)?.label || "Select Type";
|
|
3169
|
-
return /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 pb-20" }, /* @__PURE__ */ React37.createElement(ManagedToaster, null), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React37.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React37.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ React37.createElement("p", { className: "text-xs text-neutral-500 truncate" }, headerDescription))), /* @__PURE__ */ React37.createElement("div", { className: "w-full max-w-2xl pb-8" }, /* @__PURE__ */ React37.createElement("form", { className: "flex flex-col gap-6", onSubmit: onSearch, autoComplete: "off" }, /* @__PURE__ */ React37.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ React37.createElement(
|
|
3194
|
+
return /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col min-h-75 max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 pb-20" }, /* @__PURE__ */ React37.createElement(ManagedToaster, null), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React37.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React37.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ React37.createElement("p", { className: "text-xs text-neutral-500 truncate" }, headerDescription))), /* @__PURE__ */ React37.createElement("div", { className: "w-full max-w-2xl pb-8" }, /* @__PURE__ */ React37.createElement("form", { className: "flex flex-col gap-6", onSubmit: onSearch, autoComplete: "off" }, /* @__PURE__ */ React37.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ React37.createElement(
|
|
3170
3195
|
"button",
|
|
3171
3196
|
{
|
|
3172
3197
|
type: "button",
|
|
@@ -3232,7 +3257,7 @@ var UniversalDirectoryPage = ({
|
|
|
3232
3257
|
detailsContent,
|
|
3233
3258
|
modals
|
|
3234
3259
|
}) => {
|
|
3235
|
-
return /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ React38.createElement(ManagedToaster, null), /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ React38.createElement(React38.Fragment, null, /* @__PURE__ */ React38.createElement("div", { className: "w-full" }, /* @__PURE__ */ React38.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React38.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ React38.createElement(
|
|
3260
|
+
return /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col gap-8 animate-in min-h-75 max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ React38.createElement(ManagedToaster, null), /* @__PURE__ */ React38.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ React38.createElement(React38.Fragment, null, /* @__PURE__ */ React38.createElement("div", { className: "w-full" }, /* @__PURE__ */ React38.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React38.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ React38.createElement(
|
|
3236
3261
|
TextInput,
|
|
3237
3262
|
{
|
|
3238
3263
|
placeholder: searchPlaceholder,
|
|
@@ -3286,7 +3311,7 @@ import {
|
|
|
3286
3311
|
Cancel01Icon as Cancel01Icon3,
|
|
3287
3312
|
RefreshIcon,
|
|
3288
3313
|
InformationCircleIcon as InformationCircleIcon2,
|
|
3289
|
-
|
|
3314
|
+
ComputerPhoneSyncIcon
|
|
3290
3315
|
} from "@hugeicons/core-free-icons";
|
|
3291
3316
|
|
|
3292
3317
|
// src/components/FileIconMapper.tsx
|
|
@@ -3439,9 +3464,9 @@ var UniversalDriveView = ({
|
|
|
3439
3464
|
const isUILocked = isLoading || isSubmitting;
|
|
3440
3465
|
const lockClass = isUILocked ? "pointer-events-none opacity-60" : "";
|
|
3441
3466
|
if (connect === false) {
|
|
3442
|
-
return /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col h-[70vh] items-center justify-center text-center p-6 bg-white rounded-2xl animate-in fade-in duration-300 w-full max-w-5xl mx-auto
|
|
3467
|
+
return /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col h-[70vh] items-center justify-center text-center p-6 bg-white rounded-2xl animate-in fade-in duration-300 w-full max-w-5xl min-h-75 mx-auto " }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: ComputerPhoneSyncIcon, size: 64, className: "text-neutral-200 mb-6" }), /* @__PURE__ */ React40.createElement("h2", { className: "text-xl text-black tracking-tight mb-2" }, "No Computers Syncing"), /* @__PURE__ */ React40.createElement("p", { className: "text-xs text-neutral-500 mb-8 max-w-xs" }, "Get the desktop app to sync files securely and instantly from your computer."));
|
|
3443
3468
|
}
|
|
3444
|
-
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-
|
|
3469
|
+
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-start justify-between gap-4 pb-4 transition-opacity ${lockClass}` }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h1", { className: "text-xl text-black tracking-tight mb-1" }, "Drive"), /* @__PURE__ */ React40.createElement("p", { className: "text-xs text-neutral-500" }, "Secure cloud storage optimized for your workspace.")), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-wrap items-center gap-2 shrink-0" }, /* @__PURE__ */ React40.createElement("button", { onClick: onRefresh, title: "Refresh Directory", 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: RefreshIcon, size: 18 })), selectedIds.length > 0 && /* @__PURE__ */ React40.createElement(React40.Fragment, null, selectedIds.length === 1 && /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3445
3470
|
const item = items.find((i) => i.id === selectedIds[0]);
|
|
3446
3471
|
if (item) setInfoModalItem(item);
|
|
3447
3472
|
}, title: "Information", 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: InformationCircleIcon2, size: 18 })), /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
@@ -3457,12 +3482,12 @@ var UniversalDriveView = ({
|
|
|
3457
3482
|
}, 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"))), /* @__PURE__ */ React40.createElement("div", { className: `flex items-center gap-1.5 overflow-x-auto text-xs py-1 text-neutral-400 whitespace-nowrap ${lockClass}` }, folderBreadcrumbs.map((crumb, idx) => /* @__PURE__ */ React40.createElement(React40.Fragment, { key: idx }, idx > 0 && /* @__PURE__ */ React40.createElement("span", null, "/"), /* @__PURE__ */ React40.createElement("button", { onClick: () => {
|
|
3458
3483
|
setSelectedIds([]);
|
|
3459
3484
|
onNavigateFolder(crumb.id);
|
|
3460
|
-
}, className: `hover:text-black transition-colors outline-none ${idx === folderBreadcrumbs.length - 1 ? "text-black " : ""}` }, crumb.name)))), /* @__PURE__ */ React40.createElement("div", { className: `w-full overflow-x-auto select-none flex-1 relative min-h-75 ${lockClass}` }, /* @__PURE__ */ React40.createElement("table", { className: "w-full text-left border-collapse min-w-full relative z-10" }, /* @__PURE__ */ React40.createElement("thead", null, /* @__PURE__ */ React40.createElement("tr", { className: "
|
|
3485
|
+
}, className: `hover:text-black transition-colors outline-none ${idx === folderBreadcrumbs.length - 1 ? "text-black " : ""}` }, crumb.name)))), /* @__PURE__ */ React40.createElement("div", { className: `w-full overflow-x-auto select-none flex-1 relative min-h-75 ${lockClass}` }, /* @__PURE__ */ React40.createElement("table", { className: "w-full text-left border-collapse min-w-full relative z-10" }, /* @__PURE__ */ React40.createElement("thead", null, /* @__PURE__ */ React40.createElement("tr", { className: "p-2 bg-neutral-100" }, /* @__PURE__ */ React40.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Name"), /* @__PURE__ */ React40.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Modified"), /* @__PURE__ */ React40.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3 text-right" }, "Size"))), /* @__PURE__ */ React40.createElement("tbody", { className: "divide-y divide-neutral-50" }, items.length === 0 && !isLoading && /* @__PURE__ */ React40.createElement("tr", null, /* @__PURE__ */ React40.createElement("td", { colSpan: 4, className: "py-24 text-center" }, /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col items-center justify-center" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: FolderIcon2, size: 40, className: "text-neutral-200 mb-3" }), /* @__PURE__ */ React40.createElement("p", { className: "text-xs text-neutral-400" }, "This directory is empty.")))), items.map((item) => {
|
|
3461
3486
|
const isChecked = selectedIds.includes(item.id);
|
|
3462
3487
|
return /* @__PURE__ */ React40.createElement("tr", { key: item.id, onClick: (e) => handleRowClick(item.id, e), onDoubleClick: () => handleItemDoubleClick(item), onContextMenu: (e) => {
|
|
3463
3488
|
e.preventDefault();
|
|
3464
3489
|
setSelectedIds([item.id]);
|
|
3465
|
-
}, className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}` }, /* @__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-300 w-
|
|
3490
|
+
}, className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}` }, /* @__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-300 w-3 h-3 text-black focus:ring-black accent-black cursor-pointer" })), /* @__PURE__ */ React40.createElement("td", { className: "p-3 flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React40.createElement("div", { className: "w-9 h-9 shrink-0 flex items-center justify-center relative" }, /* @__PURE__ */ React40.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType })), /* @__PURE__ */ React40.createElement("span", { className: "text-xs text-black truncate pr-4" }, item.name)), /* @__PURE__ */ React40.createElement("td", { className: "p-3 text-xs text-neutral-500 whitespace-nowrap" }, formatDate3(item.updatedAt)), /* @__PURE__ */ React40.createElement("td", { className: "p-3 text-xs text-neutral-500 text-right whitespace-nowrap" }, formatBytes(item.size)));
|
|
3466
3491
|
}))), isLoading && /* @__PURE__ */ React40.createElement("div", { className: "absolute inset-0 top-12 z-20 bg-white flex items-start justify-center pt-20" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Loading03Icon12, className: "animate-spin text-neutral-400", size: 24 }))), /* @__PURE__ */ React40.createElement("div", { className: `flex items-center justify-between pt-4 ${lockClass}` }, /* @__PURE__ */ React40.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] " }, "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, 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, 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 })))), activeJobs.length > 0 && /* @__PURE__ */ React40.createElement("div", { className: "fixed bottom-6 right-6 w-80 bg-white 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 bg-neutral-50 flex items-center justify-between" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h4", { className: "text-xs text-black " }, "Uploading Elements"), /* @__PURE__ */ React40.createElement("p", { className: "text-[10px] text-neutral-500 mt-0.5" }, "Processing ", activeJobs.length, " 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)" } })), /* @__PURE__ */ React40.createElement("div", { className: "max-h-40 overflow-y-auto p-2" }, uploadQueue.map((job) => /* @__PURE__ */ React40.createElement("div", { key: job.id, className: "flex items-center justify-between p-2 text-[11px] gap-4" }, /* @__PURE__ */ React40.createElement("span", { className: "text-black truncate flex-1 pr-2" }, job.name), /* @__PURE__ */ React40.createElement("div", { className: "shrink-0 whitespace-nowrap flex items-center gap-2" }, job.status === "COMPLETED" ? /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Tick01Icon, size: 12, className: "text-green-600" }) : job.status === "FAILED" ? /* @__PURE__ */ React40.createElement("span", { className: "text-red-600 text-[10px]" }, "Failed") : /* @__PURE__ */ React40.createElement("span", { className: "text-neutral-500 text-[10px]" }, job.progress, "%")))))), (isNewFolderModalOpen || renameModal.isOpen) && /* @__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/30 ", onClick: () => !isSubmitting && (setIsNewFolderModalOpen(false), setRenameModal({ isOpen: false, id: "", name: "" })) }), /* @__PURE__ */ React40.createElement("form", { onSubmit: async (e) => {
|
|
3467
3492
|
e.preventDefault();
|
|
3468
3493
|
if (!folderInputVal.trim() || isSubmitting) return;
|
|
@@ -3476,12 +3501,114 @@ var UniversalDriveView = ({
|
|
|
3476
3501
|
}, className: "relative w-full max-w-sm bg-white shadow-2xl rounded-2xl p-8 flex flex-col gap-6 animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, isNewFolderModalOpen ? "Create Directory" : "Rename Element"), /* @__PURE__ */ React40.createElement("p", { className: "text-[11px] text-neutral-400" }, "Please provide a valid alphanumeric name.")), /* @__PURE__ */ React40.createElement(TextInput, { placeholder: "Name (e.g., Q3 Invoices)", value: folderInputVal, onChange: setFolderInputVal }), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center justify-end gap-3 mt-2" }, /* @__PURE__ */ React40.createElement("button", { type: "button", onClick: () => {
|
|
3477
3502
|
setIsNewFolderModalOpen(false);
|
|
3478
3503
|
setRenameModal({ isOpen: false, id: "", name: "" });
|
|
3479
|
-
}, disabled: isSubmitting, className: "px-6 py-2.5 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full outline-none disabled:opacity-50 transition-colors" }, "Cancel"), /* @__PURE__ */ React40.createElement(ThreeDActionButton, { type: "submit", isLoading: isSubmitting, disabled: !folderInputVal.trim() }, isNewFolderModalOpen ? "Create" : "Rename")))), infoModalItem && /* @__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/30 ", onClick: () => setInfoModalItem(null) }), /* @__PURE__ */ React40.createElement("div", { className: "relative w-full max-w-sm bg-white shadow-2xl rounded-2xl p-8 flex flex-col gap-6 animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, "Item Information"), /* @__PURE__ */ React40.createElement("p", { className: "text-[11px] text-neutral-400" }, "Details for the selected
|
|
3504
|
+
}, disabled: isSubmitting, className: "px-6 py-2.5 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full outline-none disabled:opacity-50 transition-colors" }, "Cancel"), /* @__PURE__ */ React40.createElement(ThreeDActionButton, { type: "submit", isLoading: isSubmitting, disabled: !folderInputVal.trim() }, isNewFolderModalOpen ? "Create" : "Rename")))), infoModalItem && /* @__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/30 ", onClick: () => setInfoModalItem(null) }), /* @__PURE__ */ React40.createElement("div", { className: "relative w-full max-w-sm bg-white shadow-2xl rounded-2xl p-8 flex flex-col gap-6 animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, "Item Information"), /* @__PURE__ */ React40.createElement("p", { className: "text-[11px] text-neutral-400" }, "Details for the selected item.")), /* @__PURE__ */ React40.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ React40.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ React40.createElement("span", { className: "text-neutral-400 text-xs" }, "Name:"), /* @__PURE__ */ React40.createElement("span", { className: "text-black text-xs font-medium truncate max-w-37.5" }, infoModalItem.name)), /* @__PURE__ */ React40.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ React40.createElement("span", { className: "text-neutral-400 text-xs" }, "Type:"), /* @__PURE__ */ React40.createElement("span", { className: "text-black text-xs font-medium" }, infoModalItem.type)), /* @__PURE__ */ React40.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ React40.createElement("span", { className: "text-neutral-400 text-xs" }, "Size:"), /* @__PURE__ */ React40.createElement("span", { className: "text-black text-xs font-medium" }, formatBytes(infoModalItem.size))), /* @__PURE__ */ React40.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ React40.createElement("span", { className: "text-neutral-400 text-xs" }, "Modified:"), /* @__PURE__ */ React40.createElement("span", { className: "text-black text-xs font-medium" }, formatDate3(infoModalItem.updatedAt)))), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center justify-end mt-2" }, /* @__PURE__ */ React40.createElement("button", { onClick: () => setInfoModalItem(null), className: "px-6 py-2.5 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full outline-none transition-colors" }, "Close")))), explorer.isOpen && /* @__PURE__ */ React40.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4" }, /* @__PURE__ */ React40.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isSubmitting && setExplorer((p) => ({ ...p, isOpen: false })) }), /* @__PURE__ */ React40.createElement("div", { className: "relative w-full max-w-md bg-white shadow-2xl rounded-2xl p-6 flex flex-col gap-4 animate-in zoom-in-95 duration-200 min-h-100" }, /* @__PURE__ */ React40.createElement("div", null, /* @__PURE__ */ React40.createElement("h3", { className: "text-lg text-black tracking-tight mb-1 capitalize" }, explorer.action, " Items"), /* @__PURE__ */ React40.createElement("p", { className: "text-[11px] text-neutral-400" }, "Select destination directory.")), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center gap-1.5 overflow-x-auto text-xs py-2 text-neutral-400 whitespace-nowrap" }, explorer.breadcrumbs.map((crumb, idx) => /* @__PURE__ */ React40.createElement(React40.Fragment, { key: idx }, idx > 0 && /* @__PURE__ */ React40.createElement("span", null, "/"), /* @__PURE__ */ React40.createElement("button", { disabled: explorer.loading, onClick: () => navigateExplorer(crumb.id), className: `hover:text-black outline-none ${idx === explorer.breadcrumbs.length - 1 ? "text-black " : ""}` }, crumb.name)))), /* @__PURE__ */ React40.createElement("div", { className: "flex-1 overflow-y-auto rounded-xl" }, explorer.loading ? /* @__PURE__ */ React40.createElement("div", { className: "h-full flex items-center justify-center p-10" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: Loading03Icon12, className: "animate-spin text-neutral-400", size: 20 })) : explorer.folders.length === 0 ? /* @__PURE__ */ React40.createElement("div", { className: "h-full flex items-center justify-center p-10 text-xs text-neutral-400" }, "No Directories.") : /* @__PURE__ */ React40.createElement("div", { className: "divide-y divide-neutral-50" }, explorer.folders.map((f) => /* @__PURE__ */ React40.createElement("div", { key: f.id, onClick: () => navigateExplorer(f.id), className: "flex items-center gap-3 p-3 hover:bg-neutral-50 cursor-pointer transition-colors" }, /* @__PURE__ */ React40.createElement(HugeiconsIcon26, { icon: FolderIcon2, size: 16, className: "text-black" }), /* @__PURE__ */ React40.createElement("span", { className: "text-sm text-black truncate" }, f.name))))), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center justify-end gap-3 mt-2" }, /* @__PURE__ */ React40.createElement("button", { onClick: () => setExplorer((p) => ({ ...p, isOpen: false })), disabled: isSubmitting, className: "px-6 py-2.5 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full outline-none disabled:opacity-50 transition-colors" }, "Cancel"), /* @__PURE__ */ React40.createElement(ThreeDActionButton, { onClick: executeExplorerAction, isLoading: isSubmitting }, "Paste Here")))));
|
|
3480
3505
|
};
|
|
3481
3506
|
|
|
3482
|
-
// src/components/
|
|
3483
|
-
import React41 from "react";
|
|
3507
|
+
// src/components/UniversalTrashView.tsx
|
|
3508
|
+
import React41, { useState as useState25, useEffect as useEffect17 } from "react";
|
|
3484
3509
|
import { HugeiconsIcon as HugeiconsIcon27 } from "@hugeicons/react";
|
|
3510
|
+
import {
|
|
3511
|
+
Delete02Icon as Delete02Icon3,
|
|
3512
|
+
Loading03Icon as Loading03Icon13,
|
|
3513
|
+
ArrowLeft01Icon as ArrowLeft01Icon9,
|
|
3514
|
+
ArrowRight01Icon as ArrowRight01Icon8,
|
|
3515
|
+
RestoreBinIcon,
|
|
3516
|
+
RefreshIcon as RefreshIcon2
|
|
3517
|
+
} from "@hugeicons/core-free-icons";
|
|
3518
|
+
var UniversalTrashView = ({
|
|
3519
|
+
items,
|
|
3520
|
+
isLoading,
|
|
3521
|
+
searchQuery,
|
|
3522
|
+
currentPage,
|
|
3523
|
+
totalPages,
|
|
3524
|
+
onSearchChange,
|
|
3525
|
+
onRestoreItems,
|
|
3526
|
+
onDeletePermanently,
|
|
3527
|
+
onEmptyTrash,
|
|
3528
|
+
onPageChange,
|
|
3529
|
+
onRefresh
|
|
3530
|
+
}) => {
|
|
3531
|
+
const [selectedIds, setSelectedIds] = useState25([]);
|
|
3532
|
+
const [localSearch, setLocalSearch] = useState25(searchQuery);
|
|
3533
|
+
const [isSubmitting, setIsSubmitting] = useState25(false);
|
|
3534
|
+
const [showEmptyTrashDialog, setShowEmptyTrashDialog] = useState25(false);
|
|
3535
|
+
useEffect17(() => {
|
|
3536
|
+
if (localSearch !== searchQuery) {
|
|
3537
|
+
const delay = setTimeout(() => {
|
|
3538
|
+
onSearchChange(localSearch);
|
|
3539
|
+
}, 1500);
|
|
3540
|
+
return () => clearTimeout(delay);
|
|
3541
|
+
}
|
|
3542
|
+
}, [localSearch, onSearchChange, searchQuery]);
|
|
3543
|
+
const formatBytes = (bytes) => {
|
|
3544
|
+
const num = Number(bytes);
|
|
3545
|
+
if (num === 0) return "0 Bytes";
|
|
3546
|
+
const k = 1024;
|
|
3547
|
+
const sizes = ["Bytes", "KB", "MB", "GB"];
|
|
3548
|
+
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3549
|
+
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3550
|
+
};
|
|
3551
|
+
const formatDate3 = (dateString) => {
|
|
3552
|
+
return new Date(dateString).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" });
|
|
3553
|
+
};
|
|
3554
|
+
const handleRowClick = (id, e) => {
|
|
3555
|
+
if (e.ctrlKey || e.metaKey) {
|
|
3556
|
+
setSelectedIds((prev) => prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]);
|
|
3557
|
+
} else {
|
|
3558
|
+
setSelectedIds([id]);
|
|
3559
|
+
}
|
|
3560
|
+
};
|
|
3561
|
+
const isUILocked = isLoading || isSubmitting;
|
|
3562
|
+
const lockClass = isUILocked ? "pointer-events-none opacity-60" : "";
|
|
3563
|
+
const executeAction = async (actionFn) => {
|
|
3564
|
+
setIsSubmitting(true);
|
|
3565
|
+
await actionFn();
|
|
3566
|
+
setSelectedIds([]);
|
|
3567
|
+
setIsSubmitting(false);
|
|
3568
|
+
setShowEmptyTrashDialog(false);
|
|
3569
|
+
};
|
|
3570
|
+
return /* @__PURE__ */ React41.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__ */ React41.createElement(ManagedToaster, null), /* @__PURE__ */ React41.createElement("div", { className: `flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 transition-opacity ${lockClass}` }, /* @__PURE__ */ React41.createElement("div", null, /* @__PURE__ */ React41.createElement("h1", { className: "text-xl text-black tracking-tight mb-1" }, "Trash"), /* @__PURE__ */ React41.createElement("p", { className: "text-xs text-neutral-500" }, "Items in trash are deleted forever after 30 days.")), /* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-2 shrink-0" }, /* @__PURE__ */ React41.createElement("button", { onClick: onRefresh, title: "Refresh Directory", className: "p-2.5 bg-neutral-50 text-neutral-500 hover:text-black hover:bg-neutral-100 rounded-full transition-all outline-none" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: RefreshIcon2, size: 18 })), /* @__PURE__ */ React41.createElement("div", { className: "w-px h-6 bg-neutral-200 mx-1" }), /* @__PURE__ */ React41.createElement("button", { onClick: () => setShowEmptyTrashDialog(true), disabled: items.length === 0, className: "px-4 py-2 text-xs text-red-600 bg-red-50 hover:bg-red-100 disabled:opacity-30 rounded-full transition-all outline-none" }, "Empty Trash"))), /* @__PURE__ */ React41.createElement("div", { className: `flex flex-col sm:flex-row sm:items-center justify-between gap-4 ${lockClass}` }, /* @__PURE__ */ React41.createElement("div", { className: "w-full sm:max-w-xs relative" }, /* @__PURE__ */ React41.createElement("input", { type: "text", placeholder: "Search Trash...", value: localSearch, onChange: (e) => setLocalSearch(e.target.value), className: "w-full pl-4 pr-10 py-2.5 text-xs rounded-full outline-none focus:border-black transition-colors" })), selectedIds.length > 0 && /* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-3 bg-neutral-50 px-4 py-2 rounded-full animate-in fade-in duration-200" }, /* @__PURE__ */ React41.createElement("span", { className: "text-[11px] tracking-widest text-neutral-500 " }, selectedIds.length, " Selected"), /* @__PURE__ */ React41.createElement("button", { onClick: () => executeAction(() => onRestoreItems(selectedIds)), className: "text-emerald-600 hover:text-emerald-700 p-1 flex items-center gap-1.5 text-xs outline-none" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: RestoreBinIcon, size: 14 }), " Restore"), /* @__PURE__ */ React41.createElement("button", { onClick: () => executeAction(() => onDeletePermanently(selectedIds)), className: "text-red-600 hover:text-red-700 p-1 flex items-center gap-1.5 text-xs outline-none" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: Delete02Icon3, size: 14 }), " Delete Forever"))), /* @__PURE__ */ React41.createElement("div", { className: lockClass }, /* @__PURE__ */ React41.createElement(
|
|
3571
|
+
Banner,
|
|
3572
|
+
{
|
|
3573
|
+
title: "Automated Deletion Cycle",
|
|
3574
|
+
message: "Every item moved to this directory will be automatically deleted from our servers after 30 days. This action cannot be reversed.",
|
|
3575
|
+
type: "warning",
|
|
3576
|
+
isDismissible: true
|
|
3577
|
+
}
|
|
3578
|
+
)), /* @__PURE__ */ React41.createElement("div", { className: `w-full overflow-x-auto select-none flex-1 relative min-h-75 ${lockClass}` }, /* @__PURE__ */ React41.createElement("table", { className: "w-full text-left border-collapse min-w-full relative z-10" }, /* @__PURE__ */ React41.createElement("thead", null, /* @__PURE__ */ React41.createElement("tr", { className: "p-2 bg-neutral-100" }, /* @__PURE__ */ React41.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Name"), /* @__PURE__ */ React41.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Modified"), /* @__PURE__ */ React41.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3 text-right" }, "Size"))), /* @__PURE__ */ React41.createElement("tbody", { className: "divide-y divide-neutral-50" }, items.length === 0 && !isLoading && /* @__PURE__ */ React41.createElement("tr", null, /* @__PURE__ */ React41.createElement("td", { colSpan: 4, className: "py-24 text-center" }, /* @__PURE__ */ React41.createElement("div", { className: "flex flex-col items-center justify-center" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: Delete02Icon3, size: 40, className: "text-neutral-200 mb-3" }), /* @__PURE__ */ React41.createElement("p", { className: "text-xs text-neutral-400" }, "Trash is completely empty.")))), items.map((item) => {
|
|
3579
|
+
const isChecked = selectedIds.includes(item.id);
|
|
3580
|
+
return /* @__PURE__ */ React41.createElement("tr", { key: item.id, onClick: (e) => handleRowClick(item.id, e), onContextMenu: (e) => {
|
|
3581
|
+
e.preventDefault();
|
|
3582
|
+
setSelectedIds([item.id]);
|
|
3583
|
+
}, className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}` }, /* @__PURE__ */ React41.createElement("td", { className: "p-3", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React41.createElement("input", { type: "checkbox", checked: isChecked, onChange: () => handleRowClick(item.id, { ctrlKey: true }), className: "rounded border-neutral-300 w-3 h-3 text-black focus:ring-black accent-black cursor-pointer" })), /* @__PURE__ */ React41.createElement("td", { className: "p-3 flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React41.createElement("div", { className: "w-9 h-9 shrink-0 flex items-center justify-center relative opacity-50" }, /* @__PURE__ */ React41.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType })), /* @__PURE__ */ React41.createElement("span", { className: "text-xs text-black truncate pr-4 line-through decoration-neutral-300 opacity-60" }, item.name)), /* @__PURE__ */ React41.createElement("td", { className: "p-3 text-xs text-neutral-500 whitespace-nowrap" }, formatDate3(item.updatedAt)), /* @__PURE__ */ React41.createElement("td", { className: "p-3 text-xs text-neutral-500 text-right whitespace-nowrap" }, formatBytes(item.size)));
|
|
3584
|
+
}))), isLoading && /* @__PURE__ */ React41.createElement("div", { className: "absolute inset-0 top-12 z-20 bg-white flex items-start justify-center pt-20" }, /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: Loading03Icon13, className: "animate-spin text-neutral-400", size: 24 }))), /* @__PURE__ */ React41.createElement("div", { className: `flex items-center justify-between pt-4 ${lockClass}` }, /* @__PURE__ */ React41.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React41.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage <= 1, 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__ */ React41.createElement(HugeiconsIcon27, { icon: ArrowLeft01Icon9, size: 14 })), /* @__PURE__ */ React41.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages, 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__ */ React41.createElement(HugeiconsIcon27, { icon: ArrowRight01Icon8, size: 14 })))), showEmptyTrashDialog && /* @__PURE__ */ React41.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React41.createElement(
|
|
3585
|
+
"div",
|
|
3586
|
+
{
|
|
3587
|
+
className: "absolute inset-0 bg-black/30",
|
|
3588
|
+
onClick: () => !isSubmitting && setShowEmptyTrashDialog(false)
|
|
3589
|
+
}
|
|
3590
|
+
), /* @__PURE__ */ React41.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React41.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React41.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-1" }, "Empty Trash?"), /* @__PURE__ */ React41.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to completely empty the trash? All files will be permanently deleted and cannot be recovered.")), /* @__PURE__ */ React41.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React41.createElement(
|
|
3591
|
+
"button",
|
|
3592
|
+
{
|
|
3593
|
+
onClick: () => setShowEmptyTrashDialog(false),
|
|
3594
|
+
disabled: isSubmitting,
|
|
3595
|
+
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
3596
|
+
},
|
|
3597
|
+
"Cancel"
|
|
3598
|
+
), /* @__PURE__ */ React41.createElement(
|
|
3599
|
+
"button",
|
|
3600
|
+
{
|
|
3601
|
+
onClick: () => executeAction(onEmptyTrash),
|
|
3602
|
+
disabled: isSubmitting,
|
|
3603
|
+
className: "flex-1 py-3 text-[13px] text-[#F16A50] hover:bg-red-50 transition-colors disabled:opacity-50 flex justify-center items-center outline-none"
|
|
3604
|
+
},
|
|
3605
|
+
isSubmitting ? /* @__PURE__ */ React41.createElement(HugeiconsIcon27, { icon: Loading03Icon13, size: 14, className: "animate-spin" }) : "Delete Forever"
|
|
3606
|
+
)))));
|
|
3607
|
+
};
|
|
3608
|
+
|
|
3609
|
+
// src/components/DriveItemOpener.tsx
|
|
3610
|
+
import React42 from "react";
|
|
3611
|
+
import { HugeiconsIcon as HugeiconsIcon28 } from "@hugeicons/react";
|
|
3485
3612
|
import { Cancel01Icon as Cancel01Icon4 } from "@hugeicons/core-free-icons";
|
|
3486
3613
|
var DriveItemOpener = ({ item, onClose }) => {
|
|
3487
3614
|
if (!item) return null;
|
|
@@ -3493,38 +3620,38 @@ var DriveItemOpener = ({ item, onClose }) => {
|
|
|
3493
3620
|
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3494
3621
|
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3495
3622
|
};
|
|
3496
|
-
return /* @__PURE__ */
|
|
3623
|
+
return /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ React42.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ React42.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("h3", { className: "text-sm font-medium text-white tracking-wide" }, item.name), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ React42.createElement(
|
|
3497
3624
|
"button",
|
|
3498
3625
|
{
|
|
3499
3626
|
onClick: onClose,
|
|
3500
3627
|
className: "p-3 bg-white/10 hover:bg-white/20 text-white rounded-full transition-colors outline-none"
|
|
3501
3628
|
},
|
|
3502
|
-
/* @__PURE__ */
|
|
3503
|
-
)), /* @__PURE__ */
|
|
3629
|
+
/* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: Cancel01Icon4, size: 20 })
|
|
3630
|
+
)), /* @__PURE__ */ React42.createElement("div", { className: "flex-1 flex items-center justify-center p-8 overflow-y-auto relative" }, /* @__PURE__ */ React42.createElement("div", { className: "text-center" }, /* @__PURE__ */ React42.createElement("p", { className: "text-white/40 text-sm tracking-widest " }, "File Preview Engine"), /* @__PURE__ */ React42.createElement("p", { className: "text-white/20 text-xs mt-2" }, "Content rendering logic will be attached here."))));
|
|
3504
3631
|
};
|
|
3505
3632
|
|
|
3506
3633
|
// src/components/DriveShareModal.tsx
|
|
3507
|
-
import
|
|
3634
|
+
import React43 from "react";
|
|
3508
3635
|
var DriveShareModal = ({ items, onClose }) => {
|
|
3509
3636
|
if (!items || items.length === 0) return null;
|
|
3510
|
-
return /* @__PURE__ */
|
|
3637
|
+
return /* @__PURE__ */ React43.createElement("div", { className: "fixed inset-0 z-150 flex items-center justify-center p-4 bg-black/30 animate-in fade-in duration-200" }, /* @__PURE__ */ React43.createElement("div", { className: "bg-white w-full max-w-md rounded-2xl p-6 shadow-2xl flex flex-col gap-6 animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React43.createElement("div", null, /* @__PURE__ */ React43.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, "Share Access"), /* @__PURE__ */ React43.createElement("p", { className: "text-xs text-neutral-500" }, "Managing permissions for ", items.length, " selected item(s).")), /* @__PURE__ */ React43.createElement("div", { className: "flex justify-end gap-3 mt-2" }, /* @__PURE__ */ React43.createElement(
|
|
3511
3638
|
"button",
|
|
3512
3639
|
{
|
|
3513
3640
|
onClick: onClose,
|
|
3514
3641
|
className: "px-6 py-2.5 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full transition-colors outline-none"
|
|
3515
3642
|
},
|
|
3516
3643
|
"Close"
|
|
3517
|
-
), /* @__PURE__ */
|
|
3644
|
+
), /* @__PURE__ */ React43.createElement(ThreeDActionButton, { onClick: onClose }, "Save Links"))));
|
|
3518
3645
|
};
|
|
3519
3646
|
|
|
3520
3647
|
// src/components/AiApproveDecline.tsx
|
|
3521
|
-
import
|
|
3522
|
-
import { HugeiconsIcon as
|
|
3648
|
+
import React44, { useState as useState26 } from "react";
|
|
3649
|
+
import { HugeiconsIcon as HugeiconsIcon29 } from "@hugeicons/react";
|
|
3523
3650
|
import { CheckmarkCircle01Icon as CheckmarkCircle01Icon2, CancelCircleIcon as CancelCircleIcon2, PencilEdit01Icon } from "@hugeicons/core-free-icons";
|
|
3524
3651
|
var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline, onEdit }) => {
|
|
3525
|
-
const [isEditing, setIsEditing] =
|
|
3526
|
-
const [editVal, setEditVal] =
|
|
3527
|
-
return /* @__PURE__ */
|
|
3652
|
+
const [isEditing, setIsEditing] = useState26(false);
|
|
3653
|
+
const [editVal, setEditVal] = useState26(typeof suggestionValue === "string" ? suggestionValue : "");
|
|
3654
|
+
return /* @__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: ", suggestionTitle), !isEditing ? /* @__PURE__ */ React44.createElement("div", { className: "text-sm text-black" }, suggestionValue) : /* @__PURE__ */ React44.createElement(
|
|
3528
3655
|
"input",
|
|
3529
3656
|
{
|
|
3530
3657
|
type: "text",
|
|
@@ -3533,23 +3660,23 @@ var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline
|
|
|
3533
3660
|
className: "w-full text-sm p-2 border-b border-purple-200 bg-transparent outline-none focus:border-purple-400 transition-colors",
|
|
3534
3661
|
autoFocus: true
|
|
3535
3662
|
}
|
|
3536
|
-
)), /* @__PURE__ */
|
|
3663
|
+
)), /* @__PURE__ */ React44.createElement("div", { className: "flex items-center gap-1 mt-2" }, !isEditing ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon29, { icon: CheckmarkCircle01Icon2, size: 28 })), /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon29, { icon: CancelCircleIcon2, size: 28 })), onEdit && /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon29, { icon: PencilEdit01Icon, size: 18 }))) : /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement("button", { onClick: () => {
|
|
3537
3664
|
onEdit?.(editVal);
|
|
3538
3665
|
setIsEditing(false);
|
|
3539
|
-
}, 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__ */
|
|
3666
|
+
}, 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__ */ React44.createElement(HugeiconsIcon29, { icon: CheckmarkCircle01Icon2, size: 28 })), /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon29, { icon: CancelCircleIcon2, size: 28 })))));
|
|
3540
3667
|
};
|
|
3541
3668
|
|
|
3542
3669
|
// src/components/AiStageCheck.tsx
|
|
3543
|
-
import
|
|
3544
|
-
import { HugeiconsIcon as
|
|
3545
|
-
import { Loading03Icon as
|
|
3670
|
+
import React45 from "react";
|
|
3671
|
+
import { HugeiconsIcon as HugeiconsIcon30 } from "@hugeicons/react";
|
|
3672
|
+
import { Loading03Icon as Loading03Icon14, CheckmarkCircle02Icon, CancelCircleIcon as CancelCircleIcon3 } from "@hugeicons/core-free-icons";
|
|
3546
3673
|
var AiStageCheck = ({ tasks }) => {
|
|
3547
|
-
return /* @__PURE__ */
|
|
3674
|
+
return /* @__PURE__ */ React45.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__ */ React45.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 mb-1 " }, "AI Processing"), tasks.map((task) => /* @__PURE__ */ React45.createElement("div", { key: task.id, className: "flex items-center gap-3" }, task.status === "pending" && /* @__PURE__ */ React45.createElement("div", { className: "w-4 h-4 rounded-full border border-purple-200" }), task.status === "loading" && /* @__PURE__ */ React45.createElement(HugeiconsIcon30, { icon: Loading03Icon14, size: 16, className: "animate-spin text-purple-500" }), task.status === "success" && /* @__PURE__ */ React45.createElement(HugeiconsIcon30, { icon: CheckmarkCircle02Icon, size: 16, className: "text-emerald-500" }), task.status === "error" && /* @__PURE__ */ React45.createElement(HugeiconsIcon30, { icon: CancelCircleIcon3, size: 16, className: "text-red-500" }), /* @__PURE__ */ React45.createElement("span", { className: `text-xs transition-colors ${task.status === "success" ? "text-black" : task.status === "loading" ? "text-purple-700" : "text-neutral-500"}` }, task.label))));
|
|
3548
3675
|
};
|
|
3549
3676
|
|
|
3550
3677
|
// src/components/Stagger.tsx
|
|
3551
|
-
import
|
|
3552
|
-
import { HugeiconsIcon as
|
|
3678
|
+
import React46 from "react";
|
|
3679
|
+
import { HugeiconsIcon as HugeiconsIcon31 } from "@hugeicons/react";
|
|
3553
3680
|
import { Briefcase02Icon, Upload01Icon as Upload01Icon2, FileSyncIcon, CloudUploadIcon as CloudUploadIcon2 } from "@hugeicons/core-free-icons";
|
|
3554
3681
|
var Stagger = ({ steps, currentStep }) => {
|
|
3555
3682
|
const getIconForStep = (stepName) => {
|
|
@@ -3559,19 +3686,19 @@ var Stagger = ({ steps, currentStep }) => {
|
|
|
3559
3686
|
if (lowerName.includes("submit")) return CloudUploadIcon2;
|
|
3560
3687
|
return Briefcase02Icon;
|
|
3561
3688
|
};
|
|
3562
|
-
return /* @__PURE__ */
|
|
3689
|
+
return /* @__PURE__ */ React46.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ React46.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-full h-px bg-neutral-100 -z-10" }), /* @__PURE__ */ React46.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) => {
|
|
3563
3690
|
const isActive = idx === currentStep;
|
|
3564
3691
|
const isPassed = idx < currentStep;
|
|
3565
3692
|
const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-100 text-neutral-500" : "bg-neutral-100 text-neutral-500";
|
|
3566
|
-
return /* @__PURE__ */
|
|
3693
|
+
return /* @__PURE__ */ React46.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: getIconForStep(step), size: 11 }));
|
|
3567
3694
|
}));
|
|
3568
3695
|
};
|
|
3569
3696
|
|
|
3570
3697
|
// src/components/UniversalRegistrationFlow.tsx
|
|
3571
|
-
import
|
|
3698
|
+
import React47, { useState as useState27, useEffect as useEffect18, useRef as useRef11 } from "react";
|
|
3572
3699
|
import toast6 from "react-hot-toast";
|
|
3573
|
-
import { HugeiconsIcon as
|
|
3574
|
-
import { CheckmarkBadge01Icon as CheckmarkBadge01Icon2, Upload01Icon as Upload01Icon3, Loading03Icon as
|
|
3700
|
+
import { HugeiconsIcon as HugeiconsIcon32 } from "@hugeicons/react";
|
|
3701
|
+
import { CheckmarkBadge01Icon as CheckmarkBadge01Icon2, Upload01Icon as Upload01Icon3, Loading03Icon as Loading03Icon15, PencilEdit01Icon as PencilEdit01Icon2, Delete02Icon as Delete02Icon4, SignatureIcon, IdentificationIcon, ArrowLeft01Icon as ArrowLeft01Icon10, HourglassIcon } from "@hugeicons/core-free-icons";
|
|
3575
3702
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
3576
3703
|
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"];
|
|
3577
3704
|
var MEMBER_ROLES = ["Director Only", "Shareholder Only", "Both Director & Shareholder"];
|
|
@@ -3584,12 +3711,12 @@ var UniversalRegistrationFlow = ({
|
|
|
3584
3711
|
onRedirectToBilling,
|
|
3585
3712
|
onRedirectToApplication
|
|
3586
3713
|
}) => {
|
|
3587
|
-
const [isBooting, setIsBooting] =
|
|
3588
|
-
const [macroStep, setMacroStep] =
|
|
3589
|
-
const [appStatus, setAppStatus] =
|
|
3590
|
-
const [isAbortModalOpen, setIsAbortModalOpen] =
|
|
3591
|
-
const [isAborting, setIsAborting] =
|
|
3592
|
-
const [formState, setFormState] =
|
|
3714
|
+
const [isBooting, setIsBooting] = useState27(true);
|
|
3715
|
+
const [macroStep, setMacroStep] = useState27(0);
|
|
3716
|
+
const [appStatus, setAppStatus] = useState27("");
|
|
3717
|
+
const [isAbortModalOpen, setIsAbortModalOpen] = useState27(false);
|
|
3718
|
+
const [isAborting, setIsAborting] = useState27(false);
|
|
3719
|
+
const [formState, setFormState] = useState27({
|
|
3593
3720
|
natureApproved: false,
|
|
3594
3721
|
nameApproved: false,
|
|
3595
3722
|
addressApproved: false,
|
|
@@ -3606,7 +3733,7 @@ var UniversalRegistrationFlow = ({
|
|
|
3606
3733
|
const other1Ref = useRef11(null);
|
|
3607
3734
|
const other2Ref = useRef11(null);
|
|
3608
3735
|
const other3Ref = useRef11(null);
|
|
3609
|
-
const [formData, setFormData] =
|
|
3736
|
+
const [formData, setFormData] = useState27({
|
|
3610
3737
|
businessDesc: "",
|
|
3611
3738
|
natureOfBusiness: null,
|
|
3612
3739
|
proposedName: "",
|
|
@@ -3633,22 +3760,22 @@ var UniversalRegistrationFlow = ({
|
|
|
3633
3760
|
otherDoc3Url: "",
|
|
3634
3761
|
otherDoc3Meta: null
|
|
3635
3762
|
});
|
|
3636
|
-
const [activeModal, setActiveModal] =
|
|
3637
|
-
const [iAgree, setIAgree] =
|
|
3638
|
-
const [isAnalyzingNature, setIsAnalyzingNature] =
|
|
3639
|
-
const [suggestedNature, setSuggestedNature] =
|
|
3640
|
-
const [isCheckingQualifier, setIsCheckingQualifier] =
|
|
3641
|
-
const [qualifierCheckResult, setQualifierCheckResult] =
|
|
3642
|
-
const [isCheckingName, setIsCheckingName] =
|
|
3643
|
-
const [nameCheckResult, setNameCheckResult] =
|
|
3644
|
-
const [globalExtractingId, setGlobalExtractingId] =
|
|
3645
|
-
const [globalUploadingPassport, setGlobalUploadingPassport] =
|
|
3646
|
-
const [globalUploadingSignature, setGlobalUploadingSignature] =
|
|
3647
|
-
const [isUploadingOther1, setIsUploadingOther1] =
|
|
3648
|
-
const [isUploadingOther2, setIsUploadingOther2] =
|
|
3649
|
-
const [isUploadingOther3, setIsUploadingOther3] =
|
|
3650
|
-
const [aiTasks, setAiTasks] =
|
|
3651
|
-
const [isSubmitting, setIsSubmitting] =
|
|
3763
|
+
const [activeModal, setActiveModal] = useState27({ isOpen: false, type: null, memberIndex: null });
|
|
3764
|
+
const [iAgree, setIAgree] = useState27(false);
|
|
3765
|
+
const [isAnalyzingNature, setIsAnalyzingNature] = useState27(false);
|
|
3766
|
+
const [suggestedNature, setSuggestedNature] = useState27(null);
|
|
3767
|
+
const [isCheckingQualifier, setIsCheckingQualifier] = useState27(false);
|
|
3768
|
+
const [qualifierCheckResult, setQualifierCheckResult] = useState27(null);
|
|
3769
|
+
const [isCheckingName, setIsCheckingName] = useState27(false);
|
|
3770
|
+
const [nameCheckResult, setNameCheckResult] = useState27(null);
|
|
3771
|
+
const [globalExtractingId, setGlobalExtractingId] = useState27(false);
|
|
3772
|
+
const [globalUploadingPassport, setGlobalUploadingPassport] = useState27(false);
|
|
3773
|
+
const [globalUploadingSignature, setGlobalUploadingSignature] = useState27(false);
|
|
3774
|
+
const [isUploadingOther1, setIsUploadingOther1] = useState27(false);
|
|
3775
|
+
const [isUploadingOther2, setIsUploadingOther2] = useState27(false);
|
|
3776
|
+
const [isUploadingOther3, setIsUploadingOther3] = useState27(false);
|
|
3777
|
+
const [aiTasks, setAiTasks] = useState27([]);
|
|
3778
|
+
const [isSubmitting, setIsSubmitting] = useState27(false);
|
|
3652
3779
|
const isReadOnly = ["PENDING", "AWAITING_PAYMENT", "COMPLETED"].includes(appStatus);
|
|
3653
3780
|
const isAnyUploading = globalExtractingId || globalUploadingPassport || globalUploadingSignature || isUploadingOther1 || isUploadingOther2 || isUploadingOther3;
|
|
3654
3781
|
const baseApi = async (action, payload = {}) => {
|
|
@@ -3663,7 +3790,7 @@ var UniversalRegistrationFlow = ({
|
|
|
3663
3790
|
return { success: false, error: "Network communication failed." };
|
|
3664
3791
|
}
|
|
3665
3792
|
};
|
|
3666
|
-
|
|
3793
|
+
useEffect18(() => {
|
|
3667
3794
|
baseApi("progress_load").then((data) => {
|
|
3668
3795
|
if (data.success && data.data) {
|
|
3669
3796
|
const meta = data.data;
|
|
@@ -4139,23 +4266,23 @@ var UniversalRegistrationFlow = ({
|
|
|
4139
4266
|
const isStep0Valid = type === "company" ? formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.membersDetailsApproved : formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.ownerApproved;
|
|
4140
4267
|
const isStep1Valid = type === "company" ? formState.membersDocsApproved : formState.idApproved && formState.passportApproved && formState.signatureApproved;
|
|
4141
4268
|
const titleText = type === "company" ? "Company Incorporation (LLC)" : "Business Name Registration";
|
|
4142
|
-
if (isBooting) return /* @__PURE__ */
|
|
4269
|
+
if (isBooting) return /* @__PURE__ */ React47.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon15, size: 32, className: "animate-spin text-black" }));
|
|
4143
4270
|
if (!["DRAFT", "QUEUED", "REJECTED"].includes(appStatus) && appStatus !== "") {
|
|
4144
|
-
return /* @__PURE__ */
|
|
4271
|
+
return /* @__PURE__ */ React47.createElement("div", { className: "w-full min-h-75 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__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: CheckmarkBadge01Icon2, size: 35 })), /* @__PURE__ */ React47.createElement("h2", { className: "text-xl text-black" }, "Registration Completed"), /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application has been successfully verified and registered.")) : appStatus === "PENDING" ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: HourglassIcon, size: 35, className: "animate-spin" })), /* @__PURE__ */ React47.createElement("h2", { className: "text-xl text-black" }, "Application is Pending"), /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently pending review.")) : appStatus === "AWAITING_PAYMENT" ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "w-20 h-20 bg-amber-50 text-amber-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: HourglassIcon, size: 35, className: "animate-pulse" })), /* @__PURE__ */ React47.createElement("h2", { className: "text-xl text-black" }, "Awaiting Payment"), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: HourglassIcon, size: 35 })), /* @__PURE__ */ React47.createElement("h2", { className: "text-xl text-black" }, "Application Submitted"), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React47.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isAborting && setIsAbortModalOpen(false) }), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "p-6 flex flex-col gap-4 text-center" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-[17px] text-black tracking-tight" }, "Abort Application?"), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "w-full flex " }, /* @__PURE__ */ React47.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__ */ React47.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")))));
|
|
4145
4272
|
}
|
|
4146
|
-
return /* @__PURE__ */
|
|
4273
|
+
return /* @__PURE__ */ React47.createElement("div", { className: "w-full min-h-75 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__ */ React47.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("h2", { className: "text-xl text-black tracking-tight mb-1" }, titleText), /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-neutral-500" }, "Answer the questions below to build your official application.")), /* @__PURE__ */ React47.createElement("div", { className: "px-2" }, /* @__PURE__ */ React47.createElement(Stagger, { steps: MACRO_STEPS, currentStep: macroStep }))), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-8" }, macroStep === 0 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm " }, "What does your ", type === "company" ? "company" : "business", " do?")), !formState.natureApproved ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-3 " }, /* @__PURE__ */ React47.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__ */ React47.createElement(ThreeDActionButton, { onClick: handleAnalyzeNature, disabled: formData.businessDesc.length < 5 || isAnalyzingNature || isReadOnly, isLoading: isAnalyzingNature, className: "w-fit" }, "Analyze Nature")), isAnalyzingNature && /* @__PURE__ */ React47.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React47.createElement(AiStageCheck, { tasks: [{ id: "1", label: "Matching with Official Categories...", status: "loading" }] })), suggestedNature && /* @__PURE__ */ React47.createElement("div", { className: " mt-2 animate-in fade-in" }, /* @__PURE__ */ React47.createElement(AiApproveDecline, { suggestionTitle: "Classification Found", suggestionValue: /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("p", { className: " text-black" }, suggestedNature.specificLabel), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, "Category: ", suggestedNature.categoryLabel)), onApprove: () => {
|
|
4147
4274
|
const newForm = { ...formData, natureOfBusiness: suggestedNature };
|
|
4148
4275
|
setFormData(newForm);
|
|
4149
4276
|
approveSection("natureApproved", newForm);
|
|
4150
|
-
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */
|
|
4277
|
+
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */ React47.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React47.createElement("div", { className: "pr-4" }, /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-black" }, formData.natureOfBusiness?.specificLabel), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, formData.businessDesc)), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => editSection("natureApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: PencilEdit01Icon2, size: 16 })))), formState.natureApproved && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm " }, "What name would you like to register?")), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide two options. We will verify availability against the official registry."), !formState.nameApproved ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React47.createElement(TextInput, { label: "Proposed Name 1 (Preferred)", value: formData.proposedName, onChange: (v) => setFormData({ ...formData, proposedName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement(TextInput, { label: "Proposed Name 2 (Alternative)", value: formData.proposedName2, onChange: (v) => setFormData({ ...formData, proposedName2: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "mt-2 animate-in fade-in" }, /* @__PURE__ */ React47.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__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-1" }, "AI Suggestion: Structural Qualifier Missing"), /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-black mb-3" }, "Nigerian registrations require a structural qualifier to be approved."), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-2" }, (qualifierCheckResult.suggestions || []).map((alt, i) => /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.createElement("div", { className: " mt-2 animate-in fade-in" }, nameCheckResult.status === "APPROVED" || nameCheckResult.status === "APPROVED_WARNING" || nameCheckResult.status === "SKIPPED" ? /* @__PURE__ */ React47.createElement(AiApproveDecline, { suggestionTitle: nameCheckResult.status === "APPROVED" ? "Name Available!" : "Fallback Approval", suggestionValue: /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.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__ */ React47.createElement("p", { className: "text-xs text-neutral-600" }, nameCheckResult.message), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-neutral-600 mt-2 " }, "Proposed Option: ", nameCheckResult.approvedOption)), onApprove: () => {
|
|
4151
4278
|
const newForm = { ...formData, approvedName: nameCheckResult.approvedOption };
|
|
4152
4279
|
setFormData(newForm);
|
|
4153
4280
|
approveSection("nameApproved", newForm);
|
|
4154
|
-
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */
|
|
4155
|
-
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */
|
|
4156
|
-
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */
|
|
4157
|
-
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */
|
|
4158
|
-
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ React46.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ React46.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__ */ React46.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ React46.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ React46.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ React46.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: PencilEdit01Icon2, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React46.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React46.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ React46.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__ */ React46.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ React46.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React46.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React46.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React46.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React46.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ React46.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ React46.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ React46.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React46.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: ArrowLeft01Icon9, size: 14 }), " Close"), /* @__PURE__ */ React46.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ React46.createElement(React46.Fragment, null, /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React46.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ React46.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__ */ React46.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ React46.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ React46.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ React46.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ React46.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__ */ React46.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__ */ React46.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__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ React46.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React46.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ React46.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__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React46.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React46.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React46.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React46.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ React46.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__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ React46.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Delete02Icon3, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ React46.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Delete02Icon3, size: 16 }))) : null)), /* @__PURE__ */ React46.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React46.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ React46.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ React46.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ React46.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: PencilEdit01Icon2, size: 16 })))) : /* @__PURE__ */ React46.createElement(React46.Fragment, null, /* @__PURE__ */ React46.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__ */ React46.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__ */ React46.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__ */ React46.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ React46.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ React46.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__ */ React46.createElement(React46.Fragment, null, /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Upload01Icon3, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ React46.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ React46.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React46.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ React46.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__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ React46.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React46.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__ */ React46.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React46.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React46.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__ */ React46.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ React46.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ React46.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__ */ React46.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ React46.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ React46.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ React46.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Delete02Icon3, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Loading03Icon14, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ React46.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React46.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__ */ React46.createElement(HugeiconsIcon31, { icon: Delete02Icon3, size: 16 })))))), /* @__PURE__ */ React46.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__ */ React46.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__ */ React46.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__ */ React46.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__ */ React46.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ React46.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ React46.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__ */ React46.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
4281
|
+
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */ React47.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__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("span", { className: "text-[11px] tracking-widest text-red-600 block mb-1" }, "Registry Conflict Detected"), /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-black mb-3" }, nameCheckResult.message), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-2" }, (nameCheckResult.alternatives || []).map((alt, i) => /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-black" }, formData.approvedName), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Verified against registry")), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => editSection("nameApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: PencilEdit01Icon2, size: 16 })))), formState.nameApproved && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm " }, "Where is your head office located?")), !formState.addressApproved ? /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ React47.createElement(TextInput, { label: "Street Address", value: formData.address, onChange: (v) => setFormData({ ...formData, address: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React47.createElement(TextInput, { label: "City", value: formData.city, onChange: (v) => setFormData({ ...formData, city: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement(TextInput, { label: "State", value: formData.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: null, isGlobalState: true }), placeholder: "Select State", onChange: () => {
|
|
4282
|
+
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: () => approveSection("addressApproved"), disabled: !formData.address || !formData.city || !formData.state || isReadOnly, className: "w-fit mt-2" }, "Confirm Address")) : /* @__PURE__ */ React47.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-neutral-500" }, formData.address, ", ", formData.city, ", ", formData.state), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => editSection("addressApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: PencilEdit01Icon2, size: 16 })))), formState.addressApproved && type === "company" && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between gap-2 text-black" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm " }, "Directors & Shareholders")), !formState.membersDetailsApproved && /* @__PURE__ */ React47.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__ */ React47.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide details for all individuals. Ensure total share percentage equals 100%."), !formState.membersDetailsApproved ? /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-6 " }, formData.members.map((member, i) => /* @__PURE__ */ React47.createElement("div", { key: member.id, className: "flex flex-col gap-4 border border-neutral-100 p-5 rounded-2xl bg-neutral-50/30" }, /* @__PURE__ */ React47.createElement("div", { className: "flex justify-between items-center mb-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400" }, "Member ", i + 1), formData.members.length > 1 && !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => removeCompanyMember(i), className: "text-red-500 text-xs hover:text-red-600" }, "Remove")), /* @__PURE__ */ React47.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React47.createElement(TextInput, { label: "Role", value: member.role, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "role", memberIndex: i }), onChange: () => {
|
|
4283
|
+
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */ React47.createElement(NumberInput, { label: "Share Percentage (%)", value: member.sharePercentage, onChange: (v) => updateCompanyMemberInfo(i, "sharePercentage", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React47.createElement(TextInput, { label: "Full Name", value: member.fullName, onChange: (v) => updateCompanyMemberInfo(i, "fullName", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React47.createElement(NumberInput, { label: "Phone Number", value: member.phone, onChange: (v) => updateCompanyMemberInfo(i, "phone", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement(TextInput, { label: "Email Address", value: member.email, onChange: (v) => updateCompanyMemberInfo(i, "email", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React47.createElement(TextInput, { label: "Nationality", value: member.nationality, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "nationality", memberIndex: i }), onChange: () => {
|
|
4284
|
+
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement(TextInput, { label: "Residential Address", value: member.address, onChange: (v) => updateCompanyMemberInfo(i, "address", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React47.createElement(TextInput, { label: "City", value: member.city, onChange: (v) => updateCompanyMemberInfo(i, "city", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement(TextInput, { label: "State", value: member.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: i }), onChange: () => {
|
|
4285
|
+
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ React47.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: PencilEdit01Icon2, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ React47.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ React47.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ React47.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ React47.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: ArrowLeft01Icon10, size: 14 }), " Close"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ React47.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ React47.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.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__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ React47.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React47.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ React47.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__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React47.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React47.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React47.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React47.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon15, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Delete02Icon4, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon15, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Delete02Icon4, size: 16 }))) : null)), /* @__PURE__ */ React47.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ React47.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: PencilEdit01Icon2, size: 16 })))) : /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.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__ */ React47.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ React47.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__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Upload01Icon3, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ React47.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ React47.createElement("div", { className: " mt-2" }, /* @__PURE__ */ React47.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ React47.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__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React47.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ React47.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ React47.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: PencilEdit01Icon2, size: 16 })))), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon15, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Delete02Icon4, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon15, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ React47.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Delete02Icon4, size: 16 })))))), /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.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__ */ React47.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__ */ React47.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
4159
4286
|
const docType = `other${num}`;
|
|
4160
4287
|
const ref = num === 1 ? other1Ref : num === 2 ? other2Ref : other3Ref;
|
|
4161
4288
|
const isUploading = num === 1 ? isUploadingOther1 : num === 2 ? isUploadingOther2 : isUploadingOther3;
|
|
@@ -4163,29 +4290,29 @@ var UniversalRegistrationFlow = ({
|
|
|
4163
4290
|
if (!fileUrl && !isUploading) {
|
|
4164
4291
|
const prevUrl = num > 1 ? formData[`otherDoc${num - 1}Url`] : true;
|
|
4165
4292
|
if (!prevUrl) return null;
|
|
4166
|
-
return /* @__PURE__ */
|
|
4293
|
+
return /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Upload01Icon3, size: 18, className: "text-neutral-400" }), " Upload Optional Document ", num);
|
|
4167
4294
|
}
|
|
4168
4295
|
if (isUploading) {
|
|
4169
|
-
return /* @__PURE__ */
|
|
4296
|
+
return /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Loading03Icon15, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
4170
4297
|
}
|
|
4171
|
-
return /* @__PURE__ */
|
|
4172
|
-
}))), /* @__PURE__ */
|
|
4298
|
+
return /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React47.createElement(HugeiconsIcon32, { icon: CheckmarkBadge01Icon2, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: Delete02Icon4, size: 16 })));
|
|
4299
|
+
}))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: ArrowLeft01Icon10, size: 14 }), " Back"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ React47.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ React47.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ React47.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ React47.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ React47.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ React47.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ React47.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__ */ React47.createElement(HugeiconsIcon32, { icon: ArrowLeft01Icon10, size: 14 }), " Back"), /* @__PURE__ */ React47.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ React47.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ React47.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ React47.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ React47.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.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__ */ React47.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ React47.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ React47.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__ */ React47.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__ */ React47.createElement(ThreeDActionButton, { onClick: handleFinalSubmit, disabled: isSubmitting || !iAgree || isReadOnly, isLoading: isSubmitting, className: "min-w-40 w-full sm:w-auto" }, "Submit")))), activeModal.isOpen && /* @__PURE__ */ React47.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React47.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ React47.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__ */ React47.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ React47.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ React47.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) => {
|
|
4173
4300
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
4174
|
-
return /* @__PURE__ */
|
|
4301
|
+
return /* @__PURE__ */ React47.createElement("button", { key: opt, onClick: () => {
|
|
4175
4302
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
4176
4303
|
else updateCompanyMemberInfo(activeModal.memberIndex, activeModal.type, opt);
|
|
4177
4304
|
setActiveModal({ isOpen: false, type: null, memberIndex: null });
|
|
4178
4305
|
}, 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);
|
|
4179
|
-
})), /* @__PURE__ */
|
|
4306
|
+
})), /* @__PURE__ */ React47.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ React47.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")))));
|
|
4180
4307
|
};
|
|
4181
4308
|
|
|
4182
4309
|
// src/components/UniversalDeveloperSettings.tsx
|
|
4183
|
-
import
|
|
4310
|
+
import React48, { useState as useState28, useEffect as useEffect19 } from "react";
|
|
4184
4311
|
import { toast as toast7 } from "react-hot-toast";
|
|
4185
|
-
import { HugeiconsIcon as
|
|
4186
|
-
import { Loading03Icon as
|
|
4187
|
-
var ButtonSpinner5 = () => /* @__PURE__ */
|
|
4188
|
-
var PageSpinner6 = () => /* @__PURE__ */
|
|
4312
|
+
import { HugeiconsIcon as HugeiconsIcon33 } from "@hugeicons/react";
|
|
4313
|
+
import { Loading03Icon as Loading03Icon16, CircleLock02Icon as CircleLock02Icon5 } from "@hugeicons/core-free-icons";
|
|
4314
|
+
var ButtonSpinner5 = () => /* @__PURE__ */ React48.createElement(HugeiconsIcon33, { icon: Loading03Icon16, size: 16, className: "animate-spin text-current" });
|
|
4315
|
+
var PageSpinner6 = () => /* @__PURE__ */ React48.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ React48.createElement(HugeiconsIcon33, { icon: Loading03Icon16, size: 32, className: "animate-spin text-black" }));
|
|
4189
4316
|
var UniversalDeveloperSettings = ({
|
|
4190
4317
|
initialPublicKey,
|
|
4191
4318
|
initialWebhookUrl,
|
|
@@ -4194,12 +4321,12 @@ var UniversalDeveloperSettings = ({
|
|
|
4194
4321
|
onGenerateKeys,
|
|
4195
4322
|
onSaveWebhook
|
|
4196
4323
|
}) => {
|
|
4197
|
-
const [publicKey, setPublicKey] =
|
|
4198
|
-
const [webhookUrl, setWebhookUrl] =
|
|
4199
|
-
const [isGenerating, setIsGenerating] =
|
|
4200
|
-
const [isSavingWebhook, setIsSavingWebhook] =
|
|
4201
|
-
const [isRollModalOpen, setIsRollModalOpen] =
|
|
4202
|
-
|
|
4324
|
+
const [publicKey, setPublicKey] = useState28(initialPublicKey);
|
|
4325
|
+
const [webhookUrl, setWebhookUrl] = useState28(initialWebhookUrl);
|
|
4326
|
+
const [isGenerating, setIsGenerating] = useState28(false);
|
|
4327
|
+
const [isSavingWebhook, setIsSavingWebhook] = useState28(false);
|
|
4328
|
+
const [isRollModalOpen, setIsRollModalOpen] = useState28(false);
|
|
4329
|
+
useEffect19(() => {
|
|
4203
4330
|
setPublicKey(initialPublicKey || "");
|
|
4204
4331
|
setWebhookUrl(initialWebhookUrl || "");
|
|
4205
4332
|
}, [initialPublicKey, initialWebhookUrl]);
|
|
@@ -4259,7 +4386,7 @@ SECRET_KEY="${secKey}"
|
|
|
4259
4386
|
};
|
|
4260
4387
|
const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
|
|
4261
4388
|
const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
|
|
4262
|
-
return /* @__PURE__ */
|
|
4389
|
+
return /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col min-h-75 max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ React48.createElement(ManagedToaster, null), /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React48.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React48.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ React48.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ React48.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__ */ React48.createElement(HugeiconsIcon33, { icon: CircleLock02Icon5, size: 18, className: "text-current" }))), isLoading ? /* @__PURE__ */ React48.createElement(PageSpinner6, null) : /* @__PURE__ */ React48.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React48.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React48.createElement(
|
|
4263
4390
|
TextInput,
|
|
4264
4391
|
{
|
|
4265
4392
|
label: "Public Key",
|
|
@@ -4268,7 +4395,7 @@ SECRET_KEY="${secKey}"
|
|
|
4268
4395
|
},
|
|
4269
4396
|
disabled: true
|
|
4270
4397
|
}
|
|
4271
|
-
), /* @__PURE__ */
|
|
4398
|
+
), /* @__PURE__ */ React48.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__ */ React48.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React48.createElement(
|
|
4272
4399
|
ThreeDActionButton,
|
|
4273
4400
|
{
|
|
4274
4401
|
onClick: () => {
|
|
@@ -4280,7 +4407,7 @@ SECRET_KEY="${secKey}"
|
|
|
4280
4407
|
className: "w-fit"
|
|
4281
4408
|
},
|
|
4282
4409
|
publicKey ? "Roll API Keys" : "Generate Keys"
|
|
4283
|
-
))), /* @__PURE__ */
|
|
4410
|
+
))), /* @__PURE__ */ React48.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ React48.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React48.createElement(
|
|
4284
4411
|
TextInput,
|
|
4285
4412
|
{
|
|
4286
4413
|
label: "Webhook URL",
|
|
@@ -4290,7 +4417,7 @@ SECRET_KEY="${secKey}"
|
|
|
4290
4417
|
placeholder: "https://your-domain.com/webhook",
|
|
4291
4418
|
type: "url"
|
|
4292
4419
|
}
|
|
4293
|
-
), /* @__PURE__ */
|
|
4420
|
+
), /* @__PURE__ */ React48.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__ */ React48.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ React48.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ React48.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React48.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate " }, "Webhook Status"), /* @__PURE__ */ React48.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ React48.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__ */ React48.createElement(
|
|
4294
4421
|
"button",
|
|
4295
4422
|
{
|
|
4296
4423
|
type: "button",
|
|
@@ -4298,7 +4425,7 @@ SECRET_KEY="${secKey}"
|
|
|
4298
4425
|
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"
|
|
4299
4426
|
},
|
|
4300
4427
|
"Cancel"
|
|
4301
|
-
), /* @__PURE__ */
|
|
4428
|
+
), /* @__PURE__ */ React48.createElement(
|
|
4302
4429
|
ThreeDActionButton,
|
|
4303
4430
|
{
|
|
4304
4431
|
type: "submit",
|
|
@@ -4307,7 +4434,7 @@ SECRET_KEY="${secKey}"
|
|
|
4307
4434
|
className: "min-w-32 w-full sm:w-auto"
|
|
4308
4435
|
},
|
|
4309
4436
|
"Save Webhook"
|
|
4310
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */
|
|
4437
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ React48.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React48.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ React48.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__ */ React48.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React48.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ React48.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__ */ React48.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React48.createElement(
|
|
4311
4438
|
"button",
|
|
4312
4439
|
{
|
|
4313
4440
|
onClick: () => setIsRollModalOpen(false),
|
|
@@ -4315,19 +4442,19 @@ SECRET_KEY="${secKey}"
|
|
|
4315
4442
|
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
4316
4443
|
},
|
|
4317
4444
|
"Cancel"
|
|
4318
|
-
), /* @__PURE__ */
|
|
4445
|
+
), /* @__PURE__ */ React48.createElement(
|
|
4319
4446
|
"button",
|
|
4320
4447
|
{
|
|
4321
4448
|
onClick: handleGenerateKeys,
|
|
4322
4449
|
disabled: isGenerating,
|
|
4323
4450
|
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"
|
|
4324
4451
|
},
|
|
4325
|
-
isGenerating ? /* @__PURE__ */
|
|
4452
|
+
isGenerating ? /* @__PURE__ */ React48.createElement(ButtonSpinner5, null) : "Roll Keys"
|
|
4326
4453
|
)))));
|
|
4327
4454
|
};
|
|
4328
4455
|
|
|
4329
4456
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4330
|
-
import
|
|
4457
|
+
import React49, { useState as useState29, useEffect as useEffect20, useRef as useRef12 } from "react";
|
|
4331
4458
|
import Image11 from "next/image";
|
|
4332
4459
|
var MedicalFeatureStatsBlock = ({
|
|
4333
4460
|
bottomHeadline,
|
|
@@ -4336,9 +4463,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4336
4463
|
trustText,
|
|
4337
4464
|
stats
|
|
4338
4465
|
}) => {
|
|
4339
|
-
const [isAnimating, setIsAnimating] =
|
|
4466
|
+
const [isAnimating, setIsAnimating] = useState29(false);
|
|
4340
4467
|
const titleRef = useRef12(null);
|
|
4341
|
-
|
|
4468
|
+
useEffect20(() => {
|
|
4342
4469
|
const observer = new IntersectionObserver(
|
|
4343
4470
|
([entry]) => {
|
|
4344
4471
|
if (entry.isIntersecting) {
|
|
@@ -4356,7 +4483,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4356
4483
|
}
|
|
4357
4484
|
return () => observer.disconnect();
|
|
4358
4485
|
}, []);
|
|
4359
|
-
return /* @__PURE__ */
|
|
4486
|
+
return /* @__PURE__ */ React49.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ React49.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React49.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ React49.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ React49.createElement(
|
|
4360
4487
|
"h2",
|
|
4361
4488
|
{
|
|
4362
4489
|
ref: titleRef,
|
|
@@ -4364,7 +4491,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4364
4491
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4365
4492
|
},
|
|
4366
4493
|
bottomHeadline
|
|
4367
|
-
), /* @__PURE__ */
|
|
4494
|
+
), /* @__PURE__ */ React49.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ React49.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ React49.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ React49.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__ */ React49.createElement(
|
|
4368
4495
|
Image11,
|
|
4369
4496
|
{
|
|
4370
4497
|
src,
|
|
@@ -4373,17 +4500,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4373
4500
|
sizes: "48px",
|
|
4374
4501
|
className: "object-cover"
|
|
4375
4502
|
}
|
|
4376
|
-
)))), /* @__PURE__ */
|
|
4503
|
+
)))), /* @__PURE__ */ React49.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ React49.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ React49.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ React49.createElement("div", { className: "flex pl-3 items-center border border-neutral-100 rounded-full p-0.5 mb-6" }, /* @__PURE__ */ React49.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ React49.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
4377
4504
|
};
|
|
4378
4505
|
|
|
4379
4506
|
// src/components/ConsultantShowcase.tsx
|
|
4380
|
-
import
|
|
4507
|
+
import React50, { useState as useState30 } from "react";
|
|
4381
4508
|
import Image12 from "next/image";
|
|
4382
|
-
import { HugeiconsIcon as
|
|
4383
|
-
import { Loading03Icon as
|
|
4509
|
+
import { HugeiconsIcon as HugeiconsIcon34 } from "@hugeicons/react";
|
|
4510
|
+
import { Loading03Icon as Loading03Icon17 } from "@hugeicons/core-free-icons";
|
|
4384
4511
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4385
|
-
const [isLoading, setIsLoading] =
|
|
4386
|
-
return /* @__PURE__ */
|
|
4512
|
+
const [isLoading, setIsLoading] = useState30(true);
|
|
4513
|
+
return /* @__PURE__ */ React50.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ React50.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__ */ React50.createElement(HugeiconsIcon34, { icon: Loading03Icon17, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ React50.createElement(
|
|
4387
4514
|
Image12,
|
|
4388
4515
|
{
|
|
4389
4516
|
src,
|
|
@@ -4402,9 +4529,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4402
4529
|
var ConsultantShowcase = ({
|
|
4403
4530
|
profiles
|
|
4404
4531
|
}) => {
|
|
4405
|
-
const [currentIndex, setCurrentIndex] =
|
|
4406
|
-
const [touchStart, setTouchStart] =
|
|
4407
|
-
const [touchEnd, setTouchEnd] =
|
|
4532
|
+
const [currentIndex, setCurrentIndex] = useState30(0);
|
|
4533
|
+
const [touchStart, setTouchStart] = useState30(null);
|
|
4534
|
+
const [touchEnd, setTouchEnd] = useState30(null);
|
|
4408
4535
|
const nextSlide = () => {
|
|
4409
4536
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4410
4537
|
};
|
|
@@ -4429,7 +4556,7 @@ var ConsultantShowcase = ({
|
|
|
4429
4556
|
}
|
|
4430
4557
|
};
|
|
4431
4558
|
if (!profiles || profiles.length === 0) return null;
|
|
4432
|
-
return /* @__PURE__ */
|
|
4559
|
+
return /* @__PURE__ */ React50.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ React50.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ React50.createElement(
|
|
4433
4560
|
"div",
|
|
4434
4561
|
{
|
|
4435
4562
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4439,13 +4566,13 @@ var ConsultantShowcase = ({
|
|
|
4439
4566
|
},
|
|
4440
4567
|
profiles.map((profile, idx) => {
|
|
4441
4568
|
const isActive = idx === currentIndex;
|
|
4442
|
-
return /* @__PURE__ */
|
|
4569
|
+
return /* @__PURE__ */ React50.createElement(
|
|
4443
4570
|
"div",
|
|
4444
4571
|
{
|
|
4445
4572
|
key: profile.id,
|
|
4446
4573
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4447
4574
|
},
|
|
4448
|
-
/* @__PURE__ */
|
|
4575
|
+
/* @__PURE__ */ React50.createElement(
|
|
4449
4576
|
ImageWithLoader,
|
|
4450
4577
|
{
|
|
4451
4578
|
src: profile.imageSrc,
|
|
@@ -4453,14 +4580,14 @@ var ConsultantShowcase = ({
|
|
|
4453
4580
|
priority: idx === 0
|
|
4454
4581
|
}
|
|
4455
4582
|
),
|
|
4456
|
-
/* @__PURE__ */
|
|
4457
|
-
/* @__PURE__ */
|
|
4458
|
-
/* @__PURE__ */
|
|
4583
|
+
/* @__PURE__ */ React50.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
4584
|
+
/* @__PURE__ */ React50.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" }),
|
|
4585
|
+
/* @__PURE__ */ React50.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__ */ React50.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ React50.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React50.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ React50.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
|
|
4459
4586
|
);
|
|
4460
4587
|
}),
|
|
4461
|
-
/* @__PURE__ */
|
|
4462
|
-
/* @__PURE__ */
|
|
4463
|
-
/* @__PURE__ */
|
|
4588
|
+
/* @__PURE__ */ React50.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" }),
|
|
4589
|
+
/* @__PURE__ */ React50.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" }),
|
|
4590
|
+
/* @__PURE__ */ React50.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__ */ React50.createElement(
|
|
4464
4591
|
"button",
|
|
4465
4592
|
{
|
|
4466
4593
|
key: idx,
|
|
@@ -4473,13 +4600,13 @@ var ConsultantShowcase = ({
|
|
|
4473
4600
|
};
|
|
4474
4601
|
|
|
4475
4602
|
// src/components/ContentGridBlock.tsx
|
|
4476
|
-
import
|
|
4603
|
+
import React51, { useState as useState31 } from "react";
|
|
4477
4604
|
import Image13 from "next/image";
|
|
4478
|
-
import { HugeiconsIcon as
|
|
4479
|
-
import { Loading03Icon as
|
|
4605
|
+
import { HugeiconsIcon as HugeiconsIcon35 } from "@hugeicons/react";
|
|
4606
|
+
import { Loading03Icon as Loading03Icon18 } from "@hugeicons/core-free-icons";
|
|
4480
4607
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4481
|
-
const [isLoading, setIsLoading] =
|
|
4482
|
-
return /* @__PURE__ */
|
|
4608
|
+
const [isLoading, setIsLoading] = useState31(true);
|
|
4609
|
+
return /* @__PURE__ */ React51.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ React51.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__ */ React51.createElement(HugeiconsIcon35, { icon: Loading03Icon18, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React51.createElement(
|
|
4483
4610
|
Image13,
|
|
4484
4611
|
{
|
|
4485
4612
|
src,
|
|
@@ -4501,14 +4628,14 @@ var ContentGridBlock = ({
|
|
|
4501
4628
|
middleBottomCard,
|
|
4502
4629
|
rightCards
|
|
4503
4630
|
}) => {
|
|
4504
|
-
return /* @__PURE__ */
|
|
4631
|
+
return /* @__PURE__ */ React51.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React51.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ React51.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ React51.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ React51.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ React51.createElement("div", { className: "bg-orange-50 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[17px] text-black leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ React51.createElement("span", { className: "mb-auto text-[11px] text-neutral-400 tracking-widest" }, leftCard.tag), /* @__PURE__ */ React51.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ React51.createElement("div", null, /* @__PURE__ */ React51.createElement("h4", { className: "text-[15px] text-black" }, leftCard.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[13px] text-neutral-400" }, leftCard.subtitle)), /* @__PURE__ */ React51.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React51.createElement(Image13, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React51.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ React51.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ React51.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ React51.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React51.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ React51.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ React51.createElement(Image13, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ React51.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ React51.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ React51.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__ */ React51.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ React51.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ React51.createElement("div", { className: "bg-red-50 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ React51.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ React51.createElement("div", null, /* @__PURE__ */ React51.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ React51.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ React51.createElement(Image13, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ React51.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ React51.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ React51.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ React51.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ React51.createElement(
|
|
4505
4632
|
ImageWithLoader2,
|
|
4506
4633
|
{
|
|
4507
4634
|
src: card.bgImageSrc,
|
|
4508
4635
|
alt: card.title,
|
|
4509
4636
|
className: "absolute inset-0 w-full h-full"
|
|
4510
4637
|
}
|
|
4511
|
-
), /* @__PURE__ */
|
|
4638
|
+
), /* @__PURE__ */ React51.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ React51.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ React51.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ React51.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ React51.createElement("div", { className: "pt-3" }, /* @__PURE__ */ React51.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ React51.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
4512
4639
|
};
|
|
4513
4640
|
export {
|
|
4514
4641
|
AITranscriptionFeature,
|
|
@@ -4561,5 +4688,6 @@ export {
|
|
|
4561
4688
|
UniversalProfileSettings,
|
|
4562
4689
|
UniversalRegistrationFlow,
|
|
4563
4690
|
UniversalSidebar,
|
|
4691
|
+
UniversalTrashView,
|
|
4564
4692
|
ZairusAuth
|
|
4565
4693
|
};
|