@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.js
CHANGED
|
@@ -81,6 +81,7 @@ __export(index_exports, {
|
|
|
81
81
|
UniversalProfileSettings: () => UniversalProfileSettings,
|
|
82
82
|
UniversalRegistrationFlow: () => UniversalRegistrationFlow,
|
|
83
83
|
UniversalSidebar: () => UniversalSidebar,
|
|
84
|
+
UniversalTrashView: () => UniversalTrashView,
|
|
84
85
|
ZairusAuth: () => ZairusAuth
|
|
85
86
|
});
|
|
86
87
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -995,7 +996,7 @@ var AITranscriptionFeature = ({
|
|
|
995
996
|
${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}
|
|
996
997
|
`
|
|
997
998
|
}
|
|
998
|
-
) : /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute inset-0 bg-white z-0" })), /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.createElement("p", { className: "text-[18px] sm:text-[22px] md:text-[25px] leading-[1.8] text-neutral-800" }, detailTextPrefix, " ", /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.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__ */ import_react14.default.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__ */ import_react14.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#cd8bff", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react14.default.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))));
|
|
999
|
+
) : /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute inset-0 bg-white z-0" })), /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.createElement("p", { className: "text-[18px] sm:text-[22px] md:text-[25px] leading-[1.8] text-neutral-800" }, detailTextPrefix, " ", /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.createElement("span", { className: "absolute top-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute top-[-3.5px] right-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "absolute bottom-[-3.5px] left-[-3.5px] w-2 h-2 bg-white border border-[#cd8bff] rounded-[1px] z-10" }), /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.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__ */ import_react14.default.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__ */ import_react14.default.createElement("path", { d: "M1 1V17.8L5.8 13.1H12.8L1 1Z", fill: "#cd8bff", stroke: "white", strokeWidth: "1.8", strokeLinejoin: "round" })), /* @__PURE__ */ import_react14.default.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))));
|
|
999
1000
|
};
|
|
1000
1001
|
|
|
1001
1002
|
// src/components/PlatformFeatures.tsx
|
|
@@ -1182,7 +1183,7 @@ var ManagedPricingBlock = ({
|
|
|
1182
1183
|
},
|
|
1183
1184
|
tab.label
|
|
1184
1185
|
);
|
|
1185
|
-
}))), /* @__PURE__ */ import_react21.default.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__ */ import_react21.default.createElement(
|
|
1186
|
+
}))), /* @__PURE__ */ import_react21.default.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__ */ import_react21.default.createElement(
|
|
1186
1187
|
"div",
|
|
1187
1188
|
{
|
|
1188
1189
|
key: `${activeTabIndex}-${planIdx}`,
|
|
@@ -1740,7 +1741,6 @@ var UniversalSidebar = ({
|
|
|
1740
1741
|
currentAppType = "unknown",
|
|
1741
1742
|
title = "App",
|
|
1742
1743
|
subtitle,
|
|
1743
|
-
homeUrl = "/app",
|
|
1744
1744
|
showBackButton = false,
|
|
1745
1745
|
backUrl = "/app",
|
|
1746
1746
|
showWorkspaceSwitcher = false,
|
|
@@ -1749,6 +1749,7 @@ var UniversalSidebar = ({
|
|
|
1749
1749
|
onSwitchWorkspace,
|
|
1750
1750
|
showLogoutAction = false,
|
|
1751
1751
|
onLogout,
|
|
1752
|
+
storageConfig,
|
|
1752
1753
|
showInterceptDialog = false,
|
|
1753
1754
|
onCancelIntercept,
|
|
1754
1755
|
onConfirmIntercept,
|
|
@@ -1837,7 +1838,7 @@ var UniversalSidebar = ({
|
|
|
1837
1838
|
import_react37.HugeiconsIcon,
|
|
1838
1839
|
{
|
|
1839
1840
|
icon: import_core_free_icons8.CircleArrowDown01Icon,
|
|
1840
|
-
size:
|
|
1841
|
+
size: 20,
|
|
1841
1842
|
className: "text-neutral-400 shrink-0 group-hover:text-black transition-colors mr-3 ml-auto"
|
|
1842
1843
|
}
|
|
1843
1844
|
))
|
|
@@ -1848,7 +1849,7 @@ var UniversalSidebar = ({
|
|
|
1848
1849
|
className: "text-neutral-400 hover:text-black transition-colors outline-none",
|
|
1849
1850
|
"aria-label": "Close Menu"
|
|
1850
1851
|
},
|
|
1851
|
-
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.CancelCircleIcon, size:
|
|
1852
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.CancelCircleIcon, size: 20 })
|
|
1852
1853
|
))),
|
|
1853
1854
|
/* @__PURE__ */ import_react36.default.createElement("nav", { className: "flex-1 py-2 flex flex-col gap-1.5 px-3 overflow-y-auto custom-scrollbar" }, navItems.map((item, index) => {
|
|
1854
1855
|
const isExactOrSubMatch = item.path === "/mod" || item.path === "/app" ? currentPath === item.path : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
|
|
@@ -1873,7 +1874,32 @@ var UniversalSidebar = ({
|
|
|
1873
1874
|
(!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-xs tracking-wide truncate" }, item.name)
|
|
1874
1875
|
);
|
|
1875
1876
|
})),
|
|
1876
|
-
/* @__PURE__ */ import_react36.default.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 " },
|
|
1877
|
+
/* @__PURE__ */ import_react36.default.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2 " }, storageConfig && /* @__PURE__ */ import_react36.default.createElement("div", { className: `px-2 pb-3 pt-1 ${isCollapsed && !isMobileOpen ? "flex justify-center" : ""}` }, !isCollapsed || isMobileOpen ? /* @__PURE__ */ import_react36.default.createElement("div", { className: "flex flex-col gap-1.5 w-full" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[10px] uppercase tracking-widest text-neutral-400" }, "Storage"), /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[10px] text-neutral-500" }, storageConfig.percentage, "%")), /* @__PURE__ */ import_react36.default.createElement("div", { className: "w-full h-1 bg-neutral-100 rounded-full overflow-hidden" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1878
|
+
"div",
|
|
1879
|
+
{
|
|
1880
|
+
className: "h-full rounded-full transition-all duration-500 ease-out",
|
|
1881
|
+
style: {
|
|
1882
|
+
width: `${Math.min(storageConfig.percentage, 100)}%`,
|
|
1883
|
+
background: "linear-gradient(to right, #f64b4d, #ffa360)"
|
|
1884
|
+
}
|
|
1885
|
+
}
|
|
1886
|
+
)), /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[9px] text-neutral-400 tracking-wide" }, storageConfig.used, " of ", storageConfig.total, " used")) : /* @__PURE__ */ import_react36.default.createElement(
|
|
1887
|
+
"div",
|
|
1888
|
+
{
|
|
1889
|
+
className: "w-1.5 h-8 bg-neutral-100 rounded-full overflow-hidden flex items-end",
|
|
1890
|
+
title: `${storageConfig.used} / ${storageConfig.total} used`
|
|
1891
|
+
},
|
|
1892
|
+
/* @__PURE__ */ import_react36.default.createElement(
|
|
1893
|
+
"div",
|
|
1894
|
+
{
|
|
1895
|
+
className: "w-full rounded-full transition-all duration-500 ease-out",
|
|
1896
|
+
style: {
|
|
1897
|
+
height: `${Math.min(storageConfig.percentage, 100)}%`,
|
|
1898
|
+
background: "linear-gradient(to top, #f64b4d, #ffa360)"
|
|
1899
|
+
}
|
|
1900
|
+
}
|
|
1901
|
+
)
|
|
1902
|
+
)), (showWorkspaceSwitcher || showLogoutAction) && /* @__PURE__ */ import_react36.default.createElement("div", { className: `flex gap-2 px-1 pb-2 ${isCollapsed && !isMobileOpen ? "flex-col items-center" : "items-center"}` }, showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ import_react36.default.createElement(
|
|
1877
1903
|
"button",
|
|
1878
1904
|
{
|
|
1879
1905
|
onClick: () => setShowSwitcherDialog(true),
|
|
@@ -2084,7 +2110,7 @@ var UniversalOrganizationPage = ({
|
|
|
2084
2110
|
};
|
|
2085
2111
|
const hasChanges = orgName !== initialOrgName || slug !== initialSlug;
|
|
2086
2112
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || orgName.length < 3 || slug.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
2087
|
-
return /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ import_react38.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react38.default.createElement("div", null, /* @__PURE__ */ import_react38.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, "Organization"), /* @__PURE__ */ import_react38.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your tenant workspace details and identity.")), isReadOnly && /* @__PURE__ */ import_react38.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react38.default.createElement(import_react39.HugeiconsIcon, { icon: import_core_free_icons9.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react38.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react38.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react38.default.createElement(
|
|
2113
|
+
return /* @__PURE__ */ import_react38.default.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__ */ import_react38.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react38.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react38.default.createElement("div", null, /* @__PURE__ */ import_react38.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, "Organization"), /* @__PURE__ */ import_react38.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your tenant workspace details and identity.")), isReadOnly && /* @__PURE__ */ import_react38.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react38.default.createElement(import_react39.HugeiconsIcon, { icon: import_core_free_icons9.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react38.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react38.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react38.default.createElement(
|
|
2088
2114
|
TextInput,
|
|
2089
2115
|
{
|
|
2090
2116
|
label: "Organization Name",
|
|
@@ -2206,7 +2232,7 @@ var UniversalIdentityPage = ({
|
|
|
2206
2232
|
};
|
|
2207
2233
|
const hasChanges = primaryValue !== initialPrimaryValue || secondaryValue !== initialSecondaryValue;
|
|
2208
2234
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || primaryValue.trim().length < 3;
|
|
2209
|
-
return /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ import_react40.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react40.default.createElement("div", null, /* @__PURE__ */ import_react40.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react40.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), isReadOnly && /* @__PURE__ */ import_react40.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react40.default.createElement(import_react41.HugeiconsIcon, { icon: import_core_free_icons10.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react40.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react40.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react40.default.createElement(
|
|
2235
|
+
return /* @__PURE__ */ import_react40.default.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__ */ import_react40.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react40.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react40.default.createElement("div", null, /* @__PURE__ */ import_react40.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react40.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), isReadOnly && /* @__PURE__ */ import_react40.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react40.default.createElement(import_react41.HugeiconsIcon, { icon: import_core_free_icons10.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react40.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react40.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react40.default.createElement(
|
|
2210
2236
|
TextInput,
|
|
2211
2237
|
{
|
|
2212
2238
|
label: primaryInputLabel,
|
|
@@ -2408,7 +2434,7 @@ var UniversalMembersPage = ({
|
|
|
2408
2434
|
setSelectedMember(null);
|
|
2409
2435
|
setIsRoleModalOpen(false);
|
|
2410
2436
|
};
|
|
2411
|
-
return /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white " }, /* @__PURE__ */ import_react42.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" && /* @__PURE__ */ import_react42.default.createElement(import_react42.default.Fragment, null, /* @__PURE__ */ import_react42.default.createElement("div", null, /* @__PURE__ */ import_react42.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), canManage && /* @__PURE__ */ import_react42.default.createElement(
|
|
2437
|
+
return /* @__PURE__ */ import_react42.default.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__ */ import_react42.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react42.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" && /* @__PURE__ */ import_react42.default.createElement(import_react42.default.Fragment, null, /* @__PURE__ */ import_react42.default.createElement("div", null, /* @__PURE__ */ import_react42.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react42.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription)), canManage && /* @__PURE__ */ import_react42.default.createElement(
|
|
2412
2438
|
ThreeDActionButton,
|
|
2413
2439
|
{
|
|
2414
2440
|
onClick: () => setCurrentView("invite"),
|
|
@@ -2581,7 +2607,7 @@ var UniversalProfileSettings = ({
|
|
|
2581
2607
|
};
|
|
2582
2608
|
const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
|
|
2583
2609
|
const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
|
|
2584
|
-
return /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 " }, /* @__PURE__ */ import_react44.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react44.default.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ import_react44.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ import_react44.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react44.default.createElement(import_react45.HugeiconsIcon, { icon: import_core_free_icons12.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react44.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react44.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react44.default.createElement(
|
|
2610
|
+
return /* @__PURE__ */ import_react44.default.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__ */ import_react44.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react44.default.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ import_react44.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ import_react44.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full " }, /* @__PURE__ */ import_react44.default.createElement(import_react45.HugeiconsIcon, { icon: import_core_free_icons12.CircleLock02Icon, size: 18, className: "text-current" }))), /* @__PURE__ */ import_react44.default.createElement("div", { className: "w-full max-w-2xl" }, /* @__PURE__ */ import_react44.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react44.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react44.default.createElement(
|
|
2585
2611
|
TextInput,
|
|
2586
2612
|
{
|
|
2587
2613
|
label: "First Name",
|
|
@@ -2711,7 +2737,7 @@ var UniversalBillingPage = ({
|
|
|
2711
2737
|
setIsUpdating(false);
|
|
2712
2738
|
}
|
|
2713
2739
|
};
|
|
2714
|
-
return /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex max-w-3xl rounded-2xl bg-white p-6 flex-col gap-8 animate-in fade-in duration-300 " }, /* @__PURE__ */ import_react46.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0 w-full" }, /* @__PURE__ */ import_react46.default.createElement("h1", { className: "text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-neutral-500 truncate mb-6" }, headerDescription), showSearchAndFilter && onSearchChange && onTimeframeChange && /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 mb-4" }, /* @__PURE__ */ import_react46.default.createElement(
|
|
2740
|
+
return /* @__PURE__ */ import_react46.default.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__ */ import_react46.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react46.default.createElement("div", { className: "min-w-0 w-full" }, /* @__PURE__ */ import_react46.default.createElement("h1", { className: "text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ import_react46.default.createElement("p", { className: "text-xs text-neutral-500 truncate mb-6" }, headerDescription), showSearchAndFilter && onSearchChange && onTimeframeChange && /* @__PURE__ */ import_react46.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 mb-4" }, /* @__PURE__ */ import_react46.default.createElement(
|
|
2715
2741
|
TextInput,
|
|
2716
2742
|
{
|
|
2717
2743
|
placeholder: "Search by ID or Name...",
|
|
@@ -2994,7 +3020,7 @@ var UniversalAgentConsole = ({
|
|
|
2994
3020
|
if (entries.length === 0) return null;
|
|
2995
3021
|
return entries.map(([k, v]) => /* @__PURE__ */ import_react52.default.createElement("div", { key: k, className: "flex flex-col items-start min-w-0 wrap-break-word w-full mb-3 last:mb-0" }, /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 " }, formatKeyName(k)), renderValue(k, v)));
|
|
2996
3022
|
};
|
|
2997
|
-
return /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ import_react52.default.createElement(ManagedToaster, null), currentView === "list" && /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col items-start gap-1" }, /* @__PURE__ */ import_react52.default.createElement("h1", { className: " text-xl text-black tracking-tight" }, headerTitle), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-sm text-neutral-500" }, headerDescription)), stats.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full rounded-2xl max-w-3xl overflow-hidden bg-white" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-xl text-black tracking-tight truncate" }, stat.value)))))), tabs.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-6" }, tabs.map((tab) => /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "w-full bg-white rounded-2xl max-w-3xl overflow-hidden flex flex-col min-h-100" }, isLoadingList ? /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.Loading03Icon, size: 32, className: "animate-spin text-black" })) : listData.length === 0 ? /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex-1 flex justify-center items-center text-neutral-500 text-sm py-20" }, "No matching applications found.")) : /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("div", { className: "divide-y divide-neutral-100 flex-1" }, listData.map((item) => /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-sm text-black truncate pr-4" }, item.title), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-xs text-neutral-500 truncate mt-1" }, item.subtitle)), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col items-end gap-1 shrink-0 pl-4" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("span", { className: "text-[11px] text-neutral-400 mt-1" }, item.date))))), totalPages > 1 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center justify-between p-5 bg-neutral-50/50" }, /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.ArrowRight01Icon, size: 14 }))))))), currentView === "details" && selectedApp && /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "flex items-center justify-between gap-4 pb-6" }, /* @__PURE__ */ import_react52.default.createElement("button", { onClick: () => {
|
|
3023
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ import_react52.default.createElement(ManagedToaster, null), currentView === "list" && /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col items-start gap-1" }, /* @__PURE__ */ import_react52.default.createElement("h1", { className: " text-xl text-black tracking-tight" }, headerTitle), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-sm text-neutral-500" }, headerDescription)), stats.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "w-full rounded-2xl min-h-75 max-w-3xl overflow-hidden bg-white" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-xl text-black tracking-tight truncate" }, stat.value)))))), tabs.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-6" }, tabs.map((tab) => /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.Loading03Icon, size: 32, className: "animate-spin text-black" })) : listData.length === 0 ? /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex-1 flex justify-center items-center text-neutral-500 text-sm py-20" }, "No matching applications found.")) : /* @__PURE__ */ import_react52.default.createElement(import_react52.default.Fragment, null, /* @__PURE__ */ import_react52.default.createElement("div", { className: "divide-y divide-neutral-100 flex-1" }, listData.map((item) => /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-sm text-black truncate pr-4" }, item.title), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-xs text-neutral-500 truncate mt-1" }, item.subtitle)), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col items-end gap-1 shrink-0 pl-4" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("span", { className: "text-[11px] text-neutral-400 mt-1" }, item.date))))), totalPages > 1 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center justify-between p-5 bg-neutral-50/50" }, /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.ArrowRight01Icon, size: 14 }))))))), currentView === "details" && selectedApp && /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "flex items-center justify-between gap-4 pb-6" }, /* @__PURE__ */ import_react52.default.createElement("button", { onClick: () => {
|
|
2998
3024
|
onBackToList();
|
|
2999
3025
|
setPendingFiles([]);
|
|
3000
3026
|
}, className: "flex items-center gap-2 text-[11px] text-neutral-400 hover:text-black tracking-widest transition-colors outline-none " }, /* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.ArrowLeft01Icon, size: 14 }), " Back to List"), /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-2 mb-8" }, /* @__PURE__ */ import_react52.default.createElement("h2", { className: " text-xl text-black tracking-tight" }, selectedApp.name || selectedApp.title), /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-5" }, renderDynamicObject(selectedApp.metadata)) : selectedApp.agentId === currentAgentId ? /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-5" }, /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-sm text-neutral-500" }, "No application data extracted.")) : null, selectedApp.agentId && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-4 pt-8 mt-4 border-t border-neutral-100" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col gap-1 mb-4" }, /* @__PURE__ */ import_react52.default.createElement("h3", { className: " text-sm text-black" }, "Official Archives"), /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.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__ */ import_react52.default.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.File02Icon, size: 18, className: "shrink-0" }), /* @__PURE__ */ import_react52.default.createElement("span", { className: "truncate pr-2" }, arch.name)), /* @__PURE__ */ import_react52.default.createElement("button", { onClick: () => setArchiveToDelete(arch), className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0" }, /* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.Delete02Icon, size: 16 })))), pendingFiles.map((file, idx) => /* @__PURE__ */ import_react52.default.createElement("div", { key: idx, className: "flex items-center justify-between text-neutral-600 text-sm w-full" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.AttachmentIcon, size: 18, className: "shrink-0" }), /* @__PURE__ */ import_react52.default.createElement("span", { className: "truncate pr-2" }, file.name)), /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.Cancel01Icon, size: 16 })))), /* @__PURE__ */ import_react52.default.createElement("input", { type: "file", multiple: true, ref: archiveRef, onChange: handleFileSelect, className: "hidden", accept: "application/pdf,image/*" }), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement(import_react53.HugeiconsIcon, { icon: import_core_free_icons16.Upload01Icon, size: 18, className: "text-neutral-400" }), " Select Files to Upload"), pendingFiles.length > 0 && /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full sm:w-auto shrink-0" }, /* @__PURE__ */ import_react52.default.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__ */ import_react52.default.createElement(ThreeDActionButton, { onClick: executeUpload, disabled: isUploading, isLoading: isUploading, className: "w-full sm:w-auto" }, "Upload ", pendingFiles.length, " File(s)")))), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 mt-8 pt-6" }, !selectedApp.agentId ? /* @__PURE__ */ import_react52.default.createElement(ThreeDActionButton, { onClick: async () => {
|
|
@@ -3087,7 +3113,7 @@ var UniversalOverviewPage = ({
|
|
|
3087
3113
|
alerts = [],
|
|
3088
3114
|
banner
|
|
3089
3115
|
}) => {
|
|
3090
|
-
return /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ import_react56.default.createElement("div", null, /* @__PURE__ */ import_react56.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), quickStats.length > 0 && /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full rounded-2xl overflow-hidden max-w-3xl bg-white" }, /* @__PURE__ */ import_react56.default.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__ */ import_react56.default.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ import_react56.default.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__ */ import_react56.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-lg md:text-xl text-black tracking-tight truncate" }, stat.value)))))), banner && banner.isVisible && /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full max-w-3xl" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
3116
|
+
return /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in duration-300 pb-10" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ import_react56.default.createElement("div", null, /* @__PURE__ */ import_react56.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), quickStats.length > 0 && /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full rounded-2xl overflow-hidden min-h-75 max-w-3xl bg-white" }, /* @__PURE__ */ import_react56.default.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__ */ import_react56.default.createElement("div", { key: idx, className: "p-6 flex items-center gap-4 hover:bg-neutral-50/50 transition-colors min-w-0" }, /* @__PURE__ */ import_react56.default.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__ */ import_react56.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-400 mb-1 truncate " }, stat.label), /* @__PURE__ */ import_react56.default.createElement("p", { className: "text-lg md:text-xl text-black tracking-tight truncate" }, stat.value)))))), banner && banner.isVisible && /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full min-h-75 max-w-3xl" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
3091
3117
|
Banner,
|
|
3092
3118
|
{
|
|
3093
3119
|
title: banner.title,
|
|
@@ -3098,7 +3124,7 @@ var UniversalOverviewPage = ({
|
|
|
3098
3124
|
onDismiss: banner.onDismiss,
|
|
3099
3125
|
action: banner.action
|
|
3100
3126
|
}
|
|
3101
|
-
)), /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full rounded-2xl max-w-3xl overflow-hidden bg-white min-w-0" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "p-6 sm:p-8 flex flex-col h-full min-w-0 gap-6" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4 border-b border-neutral-100 pb-4" }, /* @__PURE__ */ import_react56.default.createElement("h3", { className: " text-[11px] text-black tracking-[0.2em] " }, detailsTitle), primaryAction && (primaryAction.href ? /* @__PURE__ */ import_react56.default.createElement(
|
|
3127
|
+
)), /* @__PURE__ */ import_react56.default.createElement("div", { className: "w-full rounded-2xl min-h-75 max-w-3xl overflow-hidden bg-white min-w-0" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "p-6 sm:p-8 flex flex-col h-full min-w-0 gap-6" }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "flex flex-wrap items-center justify-between gap-4 border-b border-neutral-100 pb-4" }, /* @__PURE__ */ import_react56.default.createElement("h3", { className: " text-[11px] text-black tracking-[0.2em] " }, detailsTitle), primaryAction && (primaryAction.href ? /* @__PURE__ */ import_react56.default.createElement(
|
|
3102
3128
|
ThreeDButton,
|
|
3103
3129
|
{
|
|
3104
3130
|
href: primaryAction.href,
|
|
@@ -3208,7 +3234,7 @@ var UniversalLookupPage = ({
|
|
|
3208
3234
|
}) => {
|
|
3209
3235
|
const [isTypeModalOpen, setIsTypeModalOpen] = (0, import_react59.useState)(false);
|
|
3210
3236
|
const currentOptionLabel = searchOptions.find((opt) => opt.value === selectedSearchType)?.label || "Select Type";
|
|
3211
|
-
return /* @__PURE__ */ import_react59.default.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__ */ import_react59.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react59.default.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, headerDescription))), /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full max-w-2xl pb-8" }, /* @__PURE__ */ import_react59.default.createElement("form", { className: "flex flex-col gap-6", onSubmit: onSearch, autoComplete: "off" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3237
|
+
return /* @__PURE__ */ import_react59.default.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__ */ import_react59.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react59.default.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, headerTitle), /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, headerDescription))), /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full max-w-2xl pb-8" }, /* @__PURE__ */ import_react59.default.createElement("form", { className: "flex flex-col gap-6", onSubmit: onSearch, autoComplete: "off" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3212
3238
|
"button",
|
|
3213
3239
|
{
|
|
3214
3240
|
type: "button",
|
|
@@ -3274,7 +3300,7 @@ var UniversalDirectoryPage = ({
|
|
|
3274
3300
|
detailsContent,
|
|
3275
3301
|
modals
|
|
3276
3302
|
}) => {
|
|
3277
|
-
return /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ import_react61.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react61.default.createElement(import_react61.default.Fragment, null, /* @__PURE__ */ import_react61.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react61.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react61.default.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ import_react61.default.createElement(
|
|
3303
|
+
return /* @__PURE__ */ import_react61.default.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__ */ import_react61.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react61.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react61.default.createElement(import_react61.default.Fragment, null, /* @__PURE__ */ import_react61.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react61.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react61.default.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ import_react61.default.createElement(
|
|
3278
3304
|
TextInput,
|
|
3279
3305
|
{
|
|
3280
3306
|
placeholder: searchPlaceholder,
|
|
@@ -3452,9 +3478,9 @@ var UniversalDriveView = ({
|
|
|
3452
3478
|
const isUILocked = isLoading || isSubmitting;
|
|
3453
3479
|
const lockClass = isUILocked ? "pointer-events-none opacity-60" : "";
|
|
3454
3480
|
if (connect === false) {
|
|
3455
|
-
return /* @__PURE__ */ import_react65.default.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
|
|
3481
|
+
return /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.ComputerPhoneSyncIcon, size: 64, className: "text-neutral-200 mb-6" }), /* @__PURE__ */ import_react65.default.createElement("h2", { className: "text-xl text-black tracking-tight mb-2" }, "No Computers Syncing"), /* @__PURE__ */ import_react65.default.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."));
|
|
3456
3482
|
}
|
|
3457
|
-
return /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-col gap-6 max-w-5xl w-full mx-auto p-6 bg-white rounded-2xl animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react65.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react65.default.createElement("div", { className: `flex flex-col sm:flex-row sm:items-
|
|
3483
|
+
return /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-col gap-6 max-w-5xl w-full mx-auto p-6 bg-white rounded-2xl animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react65.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react65.default.createElement("div", { className: `flex flex-col sm:flex-row sm:items-start justify-between gap-4 pb-4 transition-opacity ${lockClass}` }, /* @__PURE__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h1", { className: "text-xl text-black tracking-tight mb-1" }, "Drive"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-xs text-neutral-500" }, "Secure cloud storage optimized for your workspace.")), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-wrap items-center gap-2 shrink-0" }, /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.RefreshIcon, size: 18 })), selectedIds.length > 0 && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, selectedIds.length === 1 && /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3458
3484
|
const item = items.find((i) => i.id === selectedIds[0]);
|
|
3459
3485
|
if (item) setInfoModalItem(item);
|
|
3460
3486
|
}, 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__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.InformationCircleIcon, size: 18 })), /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
@@ -3470,12 +3496,12 @@ var UniversalDriveView = ({
|
|
|
3470
3496
|
}, className: "text-neutral-500 hover:text-red-600 p-1 flex items-center gap-1.5 text-xs outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Delete02Icon, size: 14 }), " Move to Trash"))), /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement(import_react65.default.Fragment, { key: idx }, idx > 0 && /* @__PURE__ */ import_react65.default.createElement("span", null, "/"), /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => {
|
|
3471
3497
|
setSelectedIds([]);
|
|
3472
3498
|
onNavigateFolder(crumb.id);
|
|
3473
|
-
}, className: `hover:text-black transition-colors outline-none ${idx === folderBreadcrumbs.length - 1 ? "text-black " : ""}` }, crumb.name)))), /* @__PURE__ */ import_react65.default.createElement("div", { className: `w-full overflow-x-auto select-none flex-1 relative min-h-75 ${lockClass}` }, /* @__PURE__ */ import_react65.default.createElement("table", { className: "w-full text-left border-collapse min-w-full relative z-10" }, /* @__PURE__ */ import_react65.default.createElement("thead", null, /* @__PURE__ */ import_react65.default.createElement("tr", { className: "
|
|
3499
|
+
}, className: `hover:text-black transition-colors outline-none ${idx === folderBreadcrumbs.length - 1 ? "text-black " : ""}` }, crumb.name)))), /* @__PURE__ */ import_react65.default.createElement("div", { className: `w-full overflow-x-auto select-none flex-1 relative min-h-75 ${lockClass}` }, /* @__PURE__ */ import_react65.default.createElement("table", { className: "w-full text-left border-collapse min-w-full relative z-10" }, /* @__PURE__ */ import_react65.default.createElement("thead", null, /* @__PURE__ */ import_react65.default.createElement("tr", { className: "p-2 bg-neutral-100" }, /* @__PURE__ */ import_react65.default.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Name"), /* @__PURE__ */ import_react65.default.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Modified"), /* @__PURE__ */ import_react65.default.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3 text-right" }, "Size"))), /* @__PURE__ */ import_react65.default.createElement("tbody", { className: "divide-y divide-neutral-50" }, items.length === 0 && !isLoading && /* @__PURE__ */ import_react65.default.createElement("tr", null, /* @__PURE__ */ import_react65.default.createElement("td", { colSpan: 4, className: "py-24 text-center" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-col items-center justify-center" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.FolderIcon, size: 40, className: "text-neutral-200 mb-3" }), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-xs text-neutral-400" }, "This directory is empty.")))), items.map((item) => {
|
|
3474
3500
|
const isChecked = selectedIds.includes(item.id);
|
|
3475
3501
|
return /* @__PURE__ */ import_react65.default.createElement("tr", { key: item.id, onClick: (e) => handleRowClick(item.id, e), onDoubleClick: () => handleItemDoubleClick(item), onContextMenu: (e) => {
|
|
3476
3502
|
e.preventDefault();
|
|
3477
3503
|
setSelectedIds([item.id]);
|
|
3478
|
-
}, className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}` }, /* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react65.default.createElement("input", { type: "checkbox", checked: isChecked, onChange: () => handleRowClick(item.id, { ctrlKey: true }), className: "rounded border-neutral-300 w-
|
|
3504
|
+
}, className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}` }, /* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react65.default.createElement("input", { type: "checkbox", checked: isChecked, onChange: () => handleRowClick(item.id, { ctrlKey: true }), className: "rounded border-neutral-300 w-3 h-3 text-black focus:ring-black accent-black cursor-pointer" })), /* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3 flex items-center gap-3 min-w-0" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-9 h-9 shrink-0 flex items-center justify-center relative" }, /* @__PURE__ */ import_react65.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType })), /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-xs text-black truncate pr-4" }, item.name)), /* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3 text-xs text-neutral-500 whitespace-nowrap" }, formatDate3(item.updatedAt)), /* @__PURE__ */ import_react65.default.createElement("td", { className: "p-3 text-xs text-neutral-500 text-right whitespace-nowrap" }, formatBytes(item.size)));
|
|
3479
3505
|
}))), isLoading && /* @__PURE__ */ import_react65.default.createElement("div", { className: "absolute inset-0 top-12 z-20 bg-white flex items-start justify-center pt-20" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, className: "animate-spin text-neutral-400", size: 24 }))), /* @__PURE__ */ import_react65.default.createElement("div", { className: `flex items-center justify-between pt-4 ${lockClass}` }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] " }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => onPageChange(currentPage - 1), disabled: currentPage <= 1, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black disabled:opacity-30 transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => onPageChange(currentPage + 1), disabled: currentPage >= totalPages, className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black disabled:opacity-30 transition-all outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.ArrowRight01Icon, size: 14 })))), activeJobs.length > 0 && /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement("div", { className: "p-4 bg-neutral-50 flex items-center justify-between" }, /* @__PURE__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h4", { className: "text-xs text-black " }, "Uploading Elements"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[10px] text-neutral-500 mt-0.5" }, "Processing ", activeJobs.length, " streams")), onClearUploadQueue && activeJobs.length === 0 && /* @__PURE__ */ import_react65.default.createElement("button", { onClick: onClearUploadQueue, className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Cancel01Icon, size: 14 }))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full h-1 bg-neutral-100 relative" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "h-full transition-all duration-500 ease-out", style: { width: `${globalProgress}%`, background: "linear-gradient(to right, #f64b4d, #ffa360)" } })), /* @__PURE__ */ import_react65.default.createElement("div", { className: "max-h-40 overflow-y-auto p-2" }, uploadQueue.map((job) => /* @__PURE__ */ import_react65.default.createElement("div", { key: job.id, className: "flex items-center justify-between p-2 text-[11px] gap-4" }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-black truncate flex-1 pr-2" }, job.name), /* @__PURE__ */ import_react65.default.createElement("div", { className: "shrink-0 whitespace-nowrap flex items-center gap-2" }, job.status === "COMPLETED" ? /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Tick01Icon, size: 12, className: "text-green-600" }) : job.status === "FAILED" ? /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-red-600 text-[10px]" }, "Failed") : /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-neutral-500 text-[10px]" }, job.progress, "%")))))), (isNewFolderModalOpen || renameModal.isOpen) && /* @__PURE__ */ import_react65.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "absolute inset-0 bg-black/30 ", onClick: () => !isSubmitting && (setIsNewFolderModalOpen(false), setRenameModal({ isOpen: false, id: "", name: "" })) }), /* @__PURE__ */ import_react65.default.createElement("form", { onSubmit: async (e) => {
|
|
3480
3506
|
e.preventDefault();
|
|
3481
3507
|
if (!folderInputVal.trim() || isSubmitting) return;
|
|
@@ -3489,13 +3515,108 @@ var UniversalDriveView = ({
|
|
|
3489
3515
|
}, 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__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, isNewFolderModalOpen ? "Create Directory" : "Rename Element"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[11px] text-neutral-400" }, "Please provide a valid alphanumeric name.")), /* @__PURE__ */ import_react65.default.createElement(TextInput, { placeholder: "Name (e.g., Q3 Invoices)", value: folderInputVal, onChange: setFolderInputVal }), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center justify-end gap-3 mt-2" }, /* @__PURE__ */ import_react65.default.createElement("button", { type: "button", onClick: () => {
|
|
3490
3516
|
setIsNewFolderModalOpen(false);
|
|
3491
3517
|
setRenameModal({ isOpen: false, id: "", name: "" });
|
|
3492
|
-
}, 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__ */ import_react65.default.createElement(ThreeDActionButton, { type: "submit", isLoading: isSubmitting, disabled: !folderInputVal.trim() }, isNewFolderModalOpen ? "Create" : "Rename")))), infoModalItem && /* @__PURE__ */ import_react65.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "absolute inset-0 bg-black/30 ", onClick: () => setInfoModalItem(null) }), /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, "Item Information"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[11px] text-neutral-400" }, "Details for the selected
|
|
3518
|
+
}, 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__ */ import_react65.default.createElement(ThreeDActionButton, { type: "submit", isLoading: isSubmitting, disabled: !folderInputVal.trim() }, isNewFolderModalOpen ? "Create" : "Rename")))), infoModalItem && /* @__PURE__ */ import_react65.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "absolute inset-0 bg-black/30 ", onClick: () => setInfoModalItem(null) }), /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, "Item Information"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[11px] text-neutral-400" }, "Details for the selected item.")), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-neutral-400 text-xs" }, "Name:"), /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-black text-xs font-medium truncate max-w-37.5" }, infoModalItem.name)), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-neutral-400 text-xs" }, "Type:"), /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-black text-xs font-medium" }, infoModalItem.type)), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-neutral-400 text-xs" }, "Size:"), /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-black text-xs font-medium" }, formatBytes(infoModalItem.size))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex justify-between items-center gap-4" }, /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-neutral-400 text-xs" }, "Modified:"), /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-black text-xs font-medium" }, formatDate3(infoModalItem.updatedAt)))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center justify-end mt-2" }, /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "absolute inset-0 bg-black/40", onClick: () => !isSubmitting && setExplorer((p) => ({ ...p, isOpen: false })) }), /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement("div", null, /* @__PURE__ */ import_react65.default.createElement("h3", { className: "text-lg text-black tracking-tight mb-1 capitalize" }, explorer.action, " Items"), /* @__PURE__ */ import_react65.default.createElement("p", { className: "text-[11px] text-neutral-400" }, "Select destination directory.")), /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement(import_react65.default.Fragment, { key: idx }, idx > 0 && /* @__PURE__ */ import_react65.default.createElement("span", null, "/"), /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement("div", { className: "flex-1 overflow-y-auto rounded-xl" }, explorer.loading ? /* @__PURE__ */ import_react65.default.createElement("div", { className: "h-full flex items-center justify-center p-10" }, /* @__PURE__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, className: "animate-spin text-neutral-400", size: 20 })) : explorer.folders.length === 0 ? /* @__PURE__ */ import_react65.default.createElement("div", { className: "h-full flex items-center justify-center p-10 text-xs text-neutral-400" }, "No Directories.") : /* @__PURE__ */ import_react65.default.createElement("div", { className: "divide-y divide-neutral-50" }, explorer.folders.map((f) => /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement(import_react66.HugeiconsIcon, { icon: import_core_free_icons22.FolderIcon, size: 16, className: "text-black" }), /* @__PURE__ */ import_react65.default.createElement("span", { className: "text-sm text-black truncate" }, f.name))))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "flex items-center justify-end gap-3 mt-2" }, /* @__PURE__ */ import_react65.default.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__ */ import_react65.default.createElement(ThreeDActionButton, { onClick: executeExplorerAction, isLoading: isSubmitting }, "Paste Here")))));
|
|
3493
3519
|
};
|
|
3494
3520
|
|
|
3495
|
-
// src/components/
|
|
3521
|
+
// src/components/UniversalTrashView.tsx
|
|
3496
3522
|
var import_react67 = __toESM(require("react"));
|
|
3497
3523
|
var import_react68 = require("@hugeicons/react");
|
|
3498
3524
|
var import_core_free_icons23 = require("@hugeicons/core-free-icons");
|
|
3525
|
+
var UniversalTrashView = ({
|
|
3526
|
+
items,
|
|
3527
|
+
isLoading,
|
|
3528
|
+
searchQuery,
|
|
3529
|
+
currentPage,
|
|
3530
|
+
totalPages,
|
|
3531
|
+
onSearchChange,
|
|
3532
|
+
onRestoreItems,
|
|
3533
|
+
onDeletePermanently,
|
|
3534
|
+
onEmptyTrash,
|
|
3535
|
+
onPageChange,
|
|
3536
|
+
onRefresh
|
|
3537
|
+
}) => {
|
|
3538
|
+
const [selectedIds, setSelectedIds] = (0, import_react67.useState)([]);
|
|
3539
|
+
const [localSearch, setLocalSearch] = (0, import_react67.useState)(searchQuery);
|
|
3540
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react67.useState)(false);
|
|
3541
|
+
const [showEmptyTrashDialog, setShowEmptyTrashDialog] = (0, import_react67.useState)(false);
|
|
3542
|
+
(0, import_react67.useEffect)(() => {
|
|
3543
|
+
if (localSearch !== searchQuery) {
|
|
3544
|
+
const delay = setTimeout(() => {
|
|
3545
|
+
onSearchChange(localSearch);
|
|
3546
|
+
}, 1500);
|
|
3547
|
+
return () => clearTimeout(delay);
|
|
3548
|
+
}
|
|
3549
|
+
}, [localSearch, onSearchChange, searchQuery]);
|
|
3550
|
+
const formatBytes = (bytes) => {
|
|
3551
|
+
const num = Number(bytes);
|
|
3552
|
+
if (num === 0) return "0 Bytes";
|
|
3553
|
+
const k = 1024;
|
|
3554
|
+
const sizes = ["Bytes", "KB", "MB", "GB"];
|
|
3555
|
+
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3556
|
+
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3557
|
+
};
|
|
3558
|
+
const formatDate3 = (dateString) => {
|
|
3559
|
+
return new Date(dateString).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" });
|
|
3560
|
+
};
|
|
3561
|
+
const handleRowClick = (id, e) => {
|
|
3562
|
+
if (e.ctrlKey || e.metaKey) {
|
|
3563
|
+
setSelectedIds((prev) => prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]);
|
|
3564
|
+
} else {
|
|
3565
|
+
setSelectedIds([id]);
|
|
3566
|
+
}
|
|
3567
|
+
};
|
|
3568
|
+
const isUILocked = isLoading || isSubmitting;
|
|
3569
|
+
const lockClass = isUILocked ? "pointer-events-none opacity-60" : "";
|
|
3570
|
+
const executeAction = async (actionFn) => {
|
|
3571
|
+
setIsSubmitting(true);
|
|
3572
|
+
await actionFn();
|
|
3573
|
+
setSelectedIds([]);
|
|
3574
|
+
setIsSubmitting(false);
|
|
3575
|
+
setShowEmptyTrashDialog(false);
|
|
3576
|
+
};
|
|
3577
|
+
return /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-6 max-w-5xl w-full mx-auto p-6 bg-white rounded-2xl animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react67.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react67.default.createElement("div", { className: `flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 transition-opacity ${lockClass}` }, /* @__PURE__ */ import_react67.default.createElement("div", null, /* @__PURE__ */ import_react67.default.createElement("h1", { className: "text-xl text-black tracking-tight mb-1" }, "Trash"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500" }, "Items in trash are deleted forever after 30 days.")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-2 shrink-0" }, /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.RefreshIcon, size: 18 })), /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-px h-6 bg-neutral-200 mx-1" }), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("div", { className: `flex flex-col sm:flex-row sm:items-center justify-between gap-4 ${lockClass}` }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full sm:max-w-xs relative" }, /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("div", { className: "flex items-center gap-3 bg-neutral-50 px-4 py-2 rounded-full animate-in fade-in duration-200" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-500 " }, selectedIds.length, " Selected"), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.RestoreBinIcon, size: 14 }), " Restore"), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Delete02Icon, size: 14 }), " Delete Forever"))), /* @__PURE__ */ import_react67.default.createElement("div", { className: lockClass }, /* @__PURE__ */ import_react67.default.createElement(
|
|
3578
|
+
Banner,
|
|
3579
|
+
{
|
|
3580
|
+
title: "Automated Deletion Cycle",
|
|
3581
|
+
message: "Every item moved to this directory will be automatically deleted from our servers after 30 days. This action cannot be reversed.",
|
|
3582
|
+
type: "warning",
|
|
3583
|
+
isDismissible: true
|
|
3584
|
+
}
|
|
3585
|
+
)), /* @__PURE__ */ import_react67.default.createElement("div", { className: `w-full overflow-x-auto select-none flex-1 relative min-h-75 ${lockClass}` }, /* @__PURE__ */ import_react67.default.createElement("table", { className: "w-full text-left border-collapse min-w-full relative z-10" }, /* @__PURE__ */ import_react67.default.createElement("thead", null, /* @__PURE__ */ import_react67.default.createElement("tr", { className: "p-2 bg-neutral-100" }, /* @__PURE__ */ import_react67.default.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Name"), /* @__PURE__ */ import_react67.default.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3" }, "Modified"), /* @__PURE__ */ import_react67.default.createElement("th", { className: "text-[11px] font-light tracking-[0.2em] text-neutral-400 p-3 text-right" }, "Size"))), /* @__PURE__ */ import_react67.default.createElement("tbody", { className: "divide-y divide-neutral-50" }, items.length === 0 && !isLoading && /* @__PURE__ */ import_react67.default.createElement("tr", null, /* @__PURE__ */ import_react67.default.createElement("td", { colSpan: 4, className: "py-24 text-center" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col items-center justify-center" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Delete02Icon, size: 40, className: "text-neutral-200 mb-3" }), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-400" }, "Trash is completely empty.")))), items.map((item) => {
|
|
3586
|
+
const isChecked = selectedIds.includes(item.id);
|
|
3587
|
+
return /* @__PURE__ */ import_react67.default.createElement("tr", { key: item.id, onClick: (e) => handleRowClick(item.id, e), onContextMenu: (e) => {
|
|
3588
|
+
e.preventDefault();
|
|
3589
|
+
setSelectedIds([item.id]);
|
|
3590
|
+
}, className: `hover:bg-neutral-50/70 transition-colors cursor-pointer group ${isChecked ? "bg-neutral-50" : ""}` }, /* @__PURE__ */ import_react67.default.createElement("td", { className: "p-3", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("td", { className: "p-3 flex items-center gap-3 min-w-0" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-9 h-9 shrink-0 flex items-center justify-center relative opacity-50" }, /* @__PURE__ */ import_react67.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType })), /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-xs text-black truncate pr-4 line-through decoration-neutral-300 opacity-60" }, item.name)), /* @__PURE__ */ import_react67.default.createElement("td", { className: "p-3 text-xs text-neutral-500 whitespace-nowrap" }, formatDate3(item.updatedAt)), /* @__PURE__ */ import_react67.default.createElement("td", { className: "p-3 text-xs text-neutral-500 text-right whitespace-nowrap" }, formatBytes(item.size)));
|
|
3591
|
+
}))), isLoading && /* @__PURE__ */ import_react67.default.createElement("div", { className: "absolute inset-0 top-12 z-20 bg-white flex items-start justify-center pt-20" }, /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, className: "animate-spin text-neutral-400", size: 24 }))), /* @__PURE__ */ import_react67.default.createElement("div", { className: `flex items-center justify-between pt-4 ${lockClass}` }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 14 })), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.ArrowRight01Icon, size: 14 })))), showEmptyTrashDialog && /* @__PURE__ */ import_react67.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react67.default.createElement(
|
|
3592
|
+
"div",
|
|
3593
|
+
{
|
|
3594
|
+
className: "absolute inset-0 bg-black/30",
|
|
3595
|
+
onClick: () => !isSubmitting && setShowEmptyTrashDialog(false)
|
|
3596
|
+
}
|
|
3597
|
+
), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-1" }, "Empty Trash?"), /* @__PURE__ */ import_react67.default.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__ */ import_react67.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react67.default.createElement(
|
|
3598
|
+
"button",
|
|
3599
|
+
{
|
|
3600
|
+
onClick: () => setShowEmptyTrashDialog(false),
|
|
3601
|
+
disabled: isSubmitting,
|
|
3602
|
+
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
3603
|
+
},
|
|
3604
|
+
"Cancel"
|
|
3605
|
+
), /* @__PURE__ */ import_react67.default.createElement(
|
|
3606
|
+
"button",
|
|
3607
|
+
{
|
|
3608
|
+
onClick: () => executeAction(onEmptyTrash),
|
|
3609
|
+
disabled: isSubmitting,
|
|
3610
|
+
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"
|
|
3611
|
+
},
|
|
3612
|
+
isSubmitting ? /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons23.Loading03Icon, size: 14, className: "animate-spin" }) : "Delete Forever"
|
|
3613
|
+
)))));
|
|
3614
|
+
};
|
|
3615
|
+
|
|
3616
|
+
// src/components/DriveItemOpener.tsx
|
|
3617
|
+
var import_react69 = __toESM(require("react"));
|
|
3618
|
+
var import_react70 = require("@hugeicons/react");
|
|
3619
|
+
var import_core_free_icons24 = require("@hugeicons/core-free-icons");
|
|
3499
3620
|
var DriveItemOpener = ({ item, onClose }) => {
|
|
3500
3621
|
if (!item) return null;
|
|
3501
3622
|
const formatBytes = (bytes) => {
|
|
@@ -3506,38 +3627,38 @@ var DriveItemOpener = ({ item, onClose }) => {
|
|
|
3506
3627
|
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
3507
3628
|
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
3508
3629
|
};
|
|
3509
|
-
return /* @__PURE__ */
|
|
3630
|
+
return /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ import_react69.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("h3", { className: "text-sm font-medium text-white tracking-wide" }, item.name), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-xs text-white/50 mt-0.5" }, item.type, " \u2022 ", formatBytes(item.size), " \u2022 ", new Date(item.updatedAt).toLocaleDateString()))), /* @__PURE__ */ import_react69.default.createElement(
|
|
3510
3631
|
"button",
|
|
3511
3632
|
{
|
|
3512
3633
|
onClick: onClose,
|
|
3513
3634
|
className: "p-3 bg-white/10 hover:bg-white/20 text-white rounded-full transition-colors outline-none"
|
|
3514
3635
|
},
|
|
3515
|
-
/* @__PURE__ */
|
|
3516
|
-
)), /* @__PURE__ */
|
|
3636
|
+
/* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons24.Cancel01Icon, size: 20 })
|
|
3637
|
+
)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex-1 flex items-center justify-center p-8 overflow-y-auto relative" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-white/40 text-sm tracking-widest " }, "File Preview Engine"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-white/20 text-xs mt-2" }, "Content rendering logic will be attached here."))));
|
|
3517
3638
|
};
|
|
3518
3639
|
|
|
3519
3640
|
// src/components/DriveShareModal.tsx
|
|
3520
|
-
var
|
|
3641
|
+
var import_react71 = __toESM(require("react"));
|
|
3521
3642
|
var DriveShareModal = ({ items, onClose }) => {
|
|
3522
3643
|
if (!items || items.length === 0) return null;
|
|
3523
|
-
return /* @__PURE__ */
|
|
3644
|
+
return /* @__PURE__ */ import_react71.default.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__ */ import_react71.default.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__ */ import_react71.default.createElement("div", null, /* @__PURE__ */ import_react71.default.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, "Share Access"), /* @__PURE__ */ import_react71.default.createElement("p", { className: "text-xs text-neutral-500" }, "Managing permissions for ", items.length, " selected item(s).")), /* @__PURE__ */ import_react71.default.createElement("div", { className: "flex justify-end gap-3 mt-2" }, /* @__PURE__ */ import_react71.default.createElement(
|
|
3524
3645
|
"button",
|
|
3525
3646
|
{
|
|
3526
3647
|
onClick: onClose,
|
|
3527
3648
|
className: "px-6 py-2.5 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full transition-colors outline-none"
|
|
3528
3649
|
},
|
|
3529
3650
|
"Close"
|
|
3530
|
-
), /* @__PURE__ */
|
|
3651
|
+
), /* @__PURE__ */ import_react71.default.createElement(ThreeDActionButton, { onClick: onClose }, "Save Links"))));
|
|
3531
3652
|
};
|
|
3532
3653
|
|
|
3533
3654
|
// src/components/AiApproveDecline.tsx
|
|
3534
|
-
var
|
|
3535
|
-
var
|
|
3536
|
-
var
|
|
3655
|
+
var import_react72 = __toESM(require("react"));
|
|
3656
|
+
var import_react73 = require("@hugeicons/react");
|
|
3657
|
+
var import_core_free_icons25 = require("@hugeicons/core-free-icons");
|
|
3537
3658
|
var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline, onEdit }) => {
|
|
3538
|
-
const [isEditing, setIsEditing] = (0,
|
|
3539
|
-
const [editVal, setEditVal] = (0,
|
|
3540
|
-
return /* @__PURE__ */
|
|
3659
|
+
const [isEditing, setIsEditing] = (0, import_react72.useState)(false);
|
|
3660
|
+
const [editVal, setEditVal] = (0, import_react72.useState)(typeof suggestionValue === "string" ? suggestionValue : "");
|
|
3661
|
+
return /* @__PURE__ */ import_react72.default.createElement("div", { className: "border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react72.default.createElement("div", null, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-1 " }, "AI Suggestion: ", suggestionTitle), !isEditing ? /* @__PURE__ */ import_react72.default.createElement("div", { className: "text-sm text-black" }, suggestionValue) : /* @__PURE__ */ import_react72.default.createElement(
|
|
3541
3662
|
"input",
|
|
3542
3663
|
{
|
|
3543
3664
|
type: "text",
|
|
@@ -3546,45 +3667,45 @@ var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline
|
|
|
3546
3667
|
className: "w-full text-sm p-2 border-b border-purple-200 bg-transparent outline-none focus:border-purple-400 transition-colors",
|
|
3547
3668
|
autoFocus: true
|
|
3548
3669
|
}
|
|
3549
|
-
)), /* @__PURE__ */
|
|
3670
|
+
)), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center gap-1 mt-2" }, !isEditing ? /* @__PURE__ */ import_react72.default.createElement(import_react72.default.Fragment, null, /* @__PURE__ */ import_react72.default.createElement("button", { onClick: onApprove, title: "Approve", className: "p-1.5 text-black hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react72.default.createElement("button", { onClick: onDecline, title: "Decline", className: "p-1.5 text-neutral-400 hover:text-neutral-400 hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.CancelCircleIcon, size: 28 })), onEdit && /* @__PURE__ */ import_react72.default.createElement("button", { onClick: () => setIsEditing(true), title: "Edit", className: "ml-auto p-1.5 text-neutral-400 hover:text-black hover:bg-neutral-100 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.PencilEdit01Icon, size: 18 }))) : /* @__PURE__ */ import_react72.default.createElement(import_react72.default.Fragment, null, /* @__PURE__ */ import_react72.default.createElement("button", { onClick: () => {
|
|
3550
3671
|
onEdit?.(editVal);
|
|
3551
3672
|
setIsEditing(false);
|
|
3552
|
-
}, 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__ */
|
|
3673
|
+
}, title: "Save Edit", className: "p-1.5 text-emerald-500 hover:text-emerald-600 hover:bg-emerald-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react72.default.createElement("button", { onClick: () => setIsEditing(false), title: "Cancel Edit", className: "p-1.5 text-neutral-400 hover:text-black hover:bg-neutral-100 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.CancelCircleIcon, size: 28 })))));
|
|
3553
3674
|
};
|
|
3554
3675
|
|
|
3555
3676
|
// src/components/AiStageCheck.tsx
|
|
3556
|
-
var
|
|
3557
|
-
var
|
|
3558
|
-
var
|
|
3677
|
+
var import_react74 = __toESM(require("react"));
|
|
3678
|
+
var import_react75 = require("@hugeicons/react");
|
|
3679
|
+
var import_core_free_icons26 = require("@hugeicons/core-free-icons");
|
|
3559
3680
|
var AiStageCheck = ({ tasks }) => {
|
|
3560
|
-
return /* @__PURE__ */
|
|
3681
|
+
return /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex flex-col gap-3 p-5 rounded-2xl border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white relative overflow-hidden" }, /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 mb-1 " }, "AI Processing"), tasks.map((task) => /* @__PURE__ */ import_react74.default.createElement("div", { key: task.id, className: "flex items-center gap-3" }, task.status === "pending" && /* @__PURE__ */ import_react74.default.createElement("div", { className: "w-4 h-4 rounded-full border border-purple-200" }), task.status === "loading" && /* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: import_core_free_icons26.Loading03Icon, size: 16, className: "animate-spin text-purple-500" }), task.status === "success" && /* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: import_core_free_icons26.CheckmarkCircle02Icon, size: 16, className: "text-emerald-500" }), task.status === "error" && /* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: import_core_free_icons26.CancelCircleIcon, size: 16, className: "text-red-500" }), /* @__PURE__ */ import_react74.default.createElement("span", { className: `text-xs transition-colors ${task.status === "success" ? "text-black" : task.status === "loading" ? "text-purple-700" : "text-neutral-500"}` }, task.label))));
|
|
3561
3682
|
};
|
|
3562
3683
|
|
|
3563
3684
|
// src/components/Stagger.tsx
|
|
3564
|
-
var
|
|
3565
|
-
var
|
|
3566
|
-
var
|
|
3685
|
+
var import_react76 = __toESM(require("react"));
|
|
3686
|
+
var import_react77 = require("@hugeicons/react");
|
|
3687
|
+
var import_core_free_icons27 = require("@hugeicons/core-free-icons");
|
|
3567
3688
|
var Stagger = ({ steps, currentStep }) => {
|
|
3568
3689
|
const getIconForStep = (stepName) => {
|
|
3569
3690
|
const lowerName = stepName.toLowerCase();
|
|
3570
|
-
if (lowerName.includes("document")) return
|
|
3571
|
-
if (lowerName.includes("review")) return
|
|
3572
|
-
if (lowerName.includes("submit")) return
|
|
3573
|
-
return
|
|
3691
|
+
if (lowerName.includes("document")) return import_core_free_icons27.Upload01Icon;
|
|
3692
|
+
if (lowerName.includes("review")) return import_core_free_icons27.FileSyncIcon;
|
|
3693
|
+
if (lowerName.includes("submit")) return import_core_free_icons27.CloudUploadIcon;
|
|
3694
|
+
return import_core_free_icons27.Briefcase02Icon;
|
|
3574
3695
|
};
|
|
3575
|
-
return /* @__PURE__ */
|
|
3696
|
+
return /* @__PURE__ */ import_react76.default.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-full h-px bg-neutral-100 -z-10" }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 h-px bg-emerald-500 -z-10 transition-all duration-500", style: { width: `${currentStep / (steps.length - 1) * 100}%` } }), steps.map((step, idx) => {
|
|
3576
3697
|
const isActive = idx === currentStep;
|
|
3577
3698
|
const isPassed = idx < currentStep;
|
|
3578
3699
|
const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-100 text-neutral-500" : "bg-neutral-100 text-neutral-500";
|
|
3579
|
-
return /* @__PURE__ */
|
|
3700
|
+
return /* @__PURE__ */ import_react76.default.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: getIconForStep(step), size: 11 }));
|
|
3580
3701
|
}));
|
|
3581
3702
|
};
|
|
3582
3703
|
|
|
3583
3704
|
// src/components/UniversalRegistrationFlow.tsx
|
|
3584
|
-
var
|
|
3705
|
+
var import_react78 = __toESM(require("react"));
|
|
3585
3706
|
var import_react_hot_toast7 = __toESM(require("react-hot-toast"));
|
|
3586
|
-
var
|
|
3587
|
-
var
|
|
3707
|
+
var import_react79 = require("@hugeicons/react");
|
|
3708
|
+
var import_core_free_icons28 = require("@hugeicons/core-free-icons");
|
|
3588
3709
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
3589
3710
|
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"];
|
|
3590
3711
|
var MEMBER_ROLES = ["Director Only", "Shareholder Only", "Both Director & Shareholder"];
|
|
@@ -3597,12 +3718,12 @@ var UniversalRegistrationFlow = ({
|
|
|
3597
3718
|
onRedirectToBilling,
|
|
3598
3719
|
onRedirectToApplication
|
|
3599
3720
|
}) => {
|
|
3600
|
-
const [isBooting, setIsBooting] = (0,
|
|
3601
|
-
const [macroStep, setMacroStep] = (0,
|
|
3602
|
-
const [appStatus, setAppStatus] = (0,
|
|
3603
|
-
const [isAbortModalOpen, setIsAbortModalOpen] = (0,
|
|
3604
|
-
const [isAborting, setIsAborting] = (0,
|
|
3605
|
-
const [formState, setFormState] = (0,
|
|
3721
|
+
const [isBooting, setIsBooting] = (0, import_react78.useState)(true);
|
|
3722
|
+
const [macroStep, setMacroStep] = (0, import_react78.useState)(0);
|
|
3723
|
+
const [appStatus, setAppStatus] = (0, import_react78.useState)("");
|
|
3724
|
+
const [isAbortModalOpen, setIsAbortModalOpen] = (0, import_react78.useState)(false);
|
|
3725
|
+
const [isAborting, setIsAborting] = (0, import_react78.useState)(false);
|
|
3726
|
+
const [formState, setFormState] = (0, import_react78.useState)({
|
|
3606
3727
|
natureApproved: false,
|
|
3607
3728
|
nameApproved: false,
|
|
3608
3729
|
addressApproved: false,
|
|
@@ -3613,13 +3734,13 @@ var UniversalRegistrationFlow = ({
|
|
|
3613
3734
|
passportApproved: false,
|
|
3614
3735
|
signatureApproved: false
|
|
3615
3736
|
});
|
|
3616
|
-
const idRef = (0,
|
|
3617
|
-
const passportRef = (0,
|
|
3618
|
-
const signatureRef = (0,
|
|
3619
|
-
const other1Ref = (0,
|
|
3620
|
-
const other2Ref = (0,
|
|
3621
|
-
const other3Ref = (0,
|
|
3622
|
-
const [formData, setFormData] = (0,
|
|
3737
|
+
const idRef = (0, import_react78.useRef)(null);
|
|
3738
|
+
const passportRef = (0, import_react78.useRef)(null);
|
|
3739
|
+
const signatureRef = (0, import_react78.useRef)(null);
|
|
3740
|
+
const other1Ref = (0, import_react78.useRef)(null);
|
|
3741
|
+
const other2Ref = (0, import_react78.useRef)(null);
|
|
3742
|
+
const other3Ref = (0, import_react78.useRef)(null);
|
|
3743
|
+
const [formData, setFormData] = (0, import_react78.useState)({
|
|
3623
3744
|
businessDesc: "",
|
|
3624
3745
|
natureOfBusiness: null,
|
|
3625
3746
|
proposedName: "",
|
|
@@ -3646,22 +3767,22 @@ var UniversalRegistrationFlow = ({
|
|
|
3646
3767
|
otherDoc3Url: "",
|
|
3647
3768
|
otherDoc3Meta: null
|
|
3648
3769
|
});
|
|
3649
|
-
const [activeModal, setActiveModal] = (0,
|
|
3650
|
-
const [iAgree, setIAgree] = (0,
|
|
3651
|
-
const [isAnalyzingNature, setIsAnalyzingNature] = (0,
|
|
3652
|
-
const [suggestedNature, setSuggestedNature] = (0,
|
|
3653
|
-
const [isCheckingQualifier, setIsCheckingQualifier] = (0,
|
|
3654
|
-
const [qualifierCheckResult, setQualifierCheckResult] = (0,
|
|
3655
|
-
const [isCheckingName, setIsCheckingName] = (0,
|
|
3656
|
-
const [nameCheckResult, setNameCheckResult] = (0,
|
|
3657
|
-
const [globalExtractingId, setGlobalExtractingId] = (0,
|
|
3658
|
-
const [globalUploadingPassport, setGlobalUploadingPassport] = (0,
|
|
3659
|
-
const [globalUploadingSignature, setGlobalUploadingSignature] = (0,
|
|
3660
|
-
const [isUploadingOther1, setIsUploadingOther1] = (0,
|
|
3661
|
-
const [isUploadingOther2, setIsUploadingOther2] = (0,
|
|
3662
|
-
const [isUploadingOther3, setIsUploadingOther3] = (0,
|
|
3663
|
-
const [aiTasks, setAiTasks] = (0,
|
|
3664
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
3770
|
+
const [activeModal, setActiveModal] = (0, import_react78.useState)({ isOpen: false, type: null, memberIndex: null });
|
|
3771
|
+
const [iAgree, setIAgree] = (0, import_react78.useState)(false);
|
|
3772
|
+
const [isAnalyzingNature, setIsAnalyzingNature] = (0, import_react78.useState)(false);
|
|
3773
|
+
const [suggestedNature, setSuggestedNature] = (0, import_react78.useState)(null);
|
|
3774
|
+
const [isCheckingQualifier, setIsCheckingQualifier] = (0, import_react78.useState)(false);
|
|
3775
|
+
const [qualifierCheckResult, setQualifierCheckResult] = (0, import_react78.useState)(null);
|
|
3776
|
+
const [isCheckingName, setIsCheckingName] = (0, import_react78.useState)(false);
|
|
3777
|
+
const [nameCheckResult, setNameCheckResult] = (0, import_react78.useState)(null);
|
|
3778
|
+
const [globalExtractingId, setGlobalExtractingId] = (0, import_react78.useState)(false);
|
|
3779
|
+
const [globalUploadingPassport, setGlobalUploadingPassport] = (0, import_react78.useState)(false);
|
|
3780
|
+
const [globalUploadingSignature, setGlobalUploadingSignature] = (0, import_react78.useState)(false);
|
|
3781
|
+
const [isUploadingOther1, setIsUploadingOther1] = (0, import_react78.useState)(false);
|
|
3782
|
+
const [isUploadingOther2, setIsUploadingOther2] = (0, import_react78.useState)(false);
|
|
3783
|
+
const [isUploadingOther3, setIsUploadingOther3] = (0, import_react78.useState)(false);
|
|
3784
|
+
const [aiTasks, setAiTasks] = (0, import_react78.useState)([]);
|
|
3785
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react78.useState)(false);
|
|
3665
3786
|
const isReadOnly = ["PENDING", "AWAITING_PAYMENT", "COMPLETED"].includes(appStatus);
|
|
3666
3787
|
const isAnyUploading = globalExtractingId || globalUploadingPassport || globalUploadingSignature || isUploadingOther1 || isUploadingOther2 || isUploadingOther3;
|
|
3667
3788
|
const baseApi = async (action, payload = {}) => {
|
|
@@ -3676,7 +3797,7 @@ var UniversalRegistrationFlow = ({
|
|
|
3676
3797
|
return { success: false, error: "Network communication failed." };
|
|
3677
3798
|
}
|
|
3678
3799
|
};
|
|
3679
|
-
(0,
|
|
3800
|
+
(0, import_react78.useEffect)(() => {
|
|
3680
3801
|
baseApi("progress_load").then((data) => {
|
|
3681
3802
|
if (data.success && data.data) {
|
|
3682
3803
|
const meta = data.data;
|
|
@@ -4152,23 +4273,23 @@ var UniversalRegistrationFlow = ({
|
|
|
4152
4273
|
const isStep0Valid = type === "company" ? formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.membersDetailsApproved : formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.ownerApproved;
|
|
4153
4274
|
const isStep1Valid = type === "company" ? formState.membersDocsApproved : formState.idApproved && formState.passportApproved && formState.signatureApproved;
|
|
4154
4275
|
const titleText = type === "company" ? "Company Incorporation (LLC)" : "Business Name Registration";
|
|
4155
|
-
if (isBooting) return /* @__PURE__ */
|
|
4276
|
+
if (isBooting) return /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 32, className: "animate-spin text-black" }));
|
|
4156
4277
|
if (!["DRAFT", "QUEUED", "REJECTED"].includes(appStatus) && appStatus !== "") {
|
|
4157
|
-
return /* @__PURE__ */
|
|
4278
|
+
return /* @__PURE__ */ import_react78.default.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__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.CheckmarkBadge01Icon, size: 35 })), /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-xl text-black" }, "Registration Completed"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application has been successfully verified and registered.")) : appStatus === "PENDING" ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.HourglassIcon, size: 35, className: "animate-spin" })), /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-xl text-black" }, "Application is Pending"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently pending review.")) : appStatus === "AWAITING_PAYMENT" ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "w-20 h-20 bg-amber-50 text-amber-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.HourglassIcon, size: 35, className: "animate-pulse" })), /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-xl text-black" }, "Awaiting Payment"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is complete and awaiting government fee settlement. Please go to the Billing tab to authorize payment."), /* @__PURE__ */ import_react78.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: onRedirectToBilling, className: "px-8 py-3 bg-black text-white text-[11px] tracking-widest rounded-full hover:bg-neutral-800 outline-none" }, "Go to Billing & Invoices"), /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setIsAbortModalOpen(true), className: "px-8 py-3 border border-neutral-100 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 outline-none" }, "Abort & Edit Application"))) : /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "w-20 h-20 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center mb-2" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.HourglassIcon, size: 35 })), /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-xl text-black" }, "Application Submitted"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently ", appStatus.replace(/_/g, " ").toLowerCase(), "."), ["AWAITING_PAYMENT", "READY_FOR_SUBMISSION", "AWAITING_CONFIRMATION"].includes(appStatus) && /* @__PURE__ */ import_react78.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setIsAbortModalOpen(true), className: "px-8 py-3 border border-neutral-100 text-neutral-600 text-[11px] tracking-widest rounded-full hover:bg-neutral-50 outline-none" }, "Abort Application"))), isAbortModalOpen && /* @__PURE__ */ import_react78.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isAborting && setIsAbortModalOpen(false) }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "relative w-100 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 text-left" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "p-6 flex flex-col gap-4 text-center" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-[17px] text-black tracking-tight" }, "Abort Application?"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-relaxed" }, "Are you sure you want to abort? If you have already made a payment, returning to draft may cause issues. Your invoice will be deleted.")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "w-full flex " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setIsAbortModalOpen(false), disabled: isAborting, className: "flex-1 py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, "Cancel"), /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleAbort, disabled: isAborting, className: "flex-1 py-4 text-[13px] text-red-500 hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50" }, isAborting ? "Aborting..." : "Yes, Abort")))));
|
|
4158
4279
|
}
|
|
4159
|
-
return /* @__PURE__ */
|
|
4280
|
+
return /* @__PURE__ */ import_react78.default.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__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-xl text-black tracking-tight mb-1" }, titleText), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-neutral-500" }, "Answer the questions below to build your official application.")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "px-2" }, /* @__PURE__ */ import_react78.default.createElement(Stagger, { steps: MACRO_STEPS, currentStep: macroStep }))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-8" }, macroStep === 0 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm " }, "What does your ", type === "company" ? "company" : "business", " do?")), !formState.natureApproved ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-3 " }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: type === "company" ? "Company Description" : "Business Description", placeholder: "e.g. We provide professional services to clients.", value: formData.businessDesc, onChange: (v) => setFormData({ ...formData, businessDesc: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleAnalyzeNature, disabled: formData.businessDesc.length < 5 || isAnalyzingNature || isReadOnly, isLoading: isAnalyzingNature, className: "w-fit" }, "Analyze Nature")), isAnalyzingNature && /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react78.default.createElement(AiStageCheck, { tasks: [{ id: "1", label: "Matching with Official Categories...", status: "loading" }] })), suggestedNature && /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react78.default.createElement(AiApproveDecline, { suggestionTitle: "Classification Found", suggestionValue: /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("p", { className: " text-black" }, suggestedNature.specificLabel), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, "Category: ", suggestedNature.categoryLabel)), onApprove: () => {
|
|
4160
4281
|
const newForm = { ...formData, natureOfBusiness: suggestedNature };
|
|
4161
4282
|
setFormData(newForm);
|
|
4162
4283
|
approveSection("natureApproved", newForm);
|
|
4163
|
-
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */
|
|
4284
|
+
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "pr-4" }, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-black" }, formData.natureOfBusiness?.specificLabel), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, formData.businessDesc)), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => editSection("natureApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.PencilEdit01Icon, size: 16 })))), formState.natureApproved && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm " }, "What name would you like to register?")), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide two options. We will verify availability against the official registry."), !formState.nameApproved ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Proposed Name 1 (Preferred)", value: formData.proposedName, onChange: (v) => setFormData({ ...formData, proposedName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Proposed Name 2 (Alternative)", value: formData.proposedName2, onChange: (v) => setFormData({ ...formData, proposedName2: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: () => handleCheckNames(formData.proposedName), disabled: !formData.proposedName || !formData.proposedName2 || isCheckingName || isCheckingQualifier || isReadOnly, isLoading: isCheckingQualifier || isCheckingName, className: "w-fit" }, "Check Availability")), (isCheckingQualifier || isCheckingName) && /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react78.default.createElement(AiStageCheck, { tasks: [{ id: "1", label: "AI Qualifier Pre-check...", status: isCheckingQualifier ? "loading" : "success" }, { id: "2", label: "Checking Official Registry Database...", status: isCheckingName ? "loading" : "pending" }, { id: "3", label: "Fallback Checking Public Database...", status: isCheckingName ? "loading" : "pending" }, { id: "4", label: "Validation Status...", status: isCheckingName ? "loading" : "pending" }] })), qualifierCheckResult && /* @__PURE__ */ import_react78.default.createElement("div", { className: "mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-1" }, "AI Suggestion: Structural Qualifier Missing"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-black mb-3" }, "Nigerian registrations require a structural qualifier to be approved."), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-2" }, (qualifierCheckResult.suggestions || []).map((alt, i) => /* @__PURE__ */ import_react78.default.createElement("button", { key: i, onClick: () => setFormData({ ...formData, proposedName: alt }), className: "text-left px-4 py-2 border border-neutral-100 rounded-full hover:border-black text-sm transition-colors outline-none" }, alt)))), /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setQualifierCheckResult(null), className: "w-fit text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors mt-2 outline-none" }, "Edit Name Manually"))), nameCheckResult && /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2 animate-in fade-in" }, nameCheckResult.status === "APPROVED" || nameCheckResult.status === "APPROVED_WARNING" || nameCheckResult.status === "SKIPPED" ? /* @__PURE__ */ import_react78.default.createElement(AiApproveDecline, { suggestionTitle: nameCheckResult.status === "APPROVED" ? "Name Available!" : "Fallback Approval", suggestionValue: /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("p", { className: `mb-1 ${nameCheckResult.status === "APPROVED" ? "text-emerald-600 " : "text-orange-500 "}` }, nameCheckResult.status === "APPROVED" ? "Excellent chance of approval." : "Validation Bypassed / Fallback."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-600" }, nameCheckResult.message), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-600 mt-2 " }, "Proposed Option: ", nameCheckResult.approvedOption)), onApprove: () => {
|
|
4164
4285
|
const newForm = { ...formData, approvedName: nameCheckResult.approvedOption };
|
|
4165
4286
|
setFormData(newForm);
|
|
4166
4287
|
approveSection("nameApproved", newForm);
|
|
4167
|
-
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */
|
|
4168
|
-
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */
|
|
4169
|
-
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */
|
|
4170
|
-
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */
|
|
4171
|
-
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: addCompanyMember, className: "px-6 py-2 bg-white border border-neutral-100 text-black text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none" }, "+ Add Member"), /* @__PURE__ */ import_react76.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react76.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react76.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide basic contact info. We will extract your DOB and ID number automatically in the next step."), !formState.ownerApproved ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react76.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react76.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react76.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react76.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react76.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react76.default.createElement(import_react76.default.Fragment, null, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react76.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload valid means of identification, passport photographs, and signatures for every director and shareholder.")), !formState.membersDocsApproved ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react76.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react76.default.createElement("input", { id: `id-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "id"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react76.default.createElement("input", { id: `pass-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "passport"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react76.default.createElement("input", { id: `sig-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "signature"), disabled: isReadOnly || isAnyUploading }), !member.idExtractedData && !globalExtractingId ? /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`id-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react76.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react76.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react76.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload ID"))) : null, !member.passportFileUrl && !globalUploadingPassport ? /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`pass-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`sig-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react76.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react76.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react76.default.createElement(import_react76.default.Fragment, null, /* @__PURE__ */ import_react76.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: idRef, onChange: (e) => handleBusinessUpload(e, "id"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react76.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: passportRef, onChange: (e) => handleBusinessUpload(e, "passport"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react76.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: signatureRef, onChange: (e) => handleBusinessUpload(e, "signature"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react76.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500 -mt-2" }, "Upload your NIN, Driver's License, Voter's Card, or Int'l Passport (JPG/PNG/WEBP)."), !formState.idApproved ? /* @__PURE__ */ import_react76.default.createElement(import_react76.default.Fragment, null, /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && idRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `w-full h-32 border border-neutral-100 rounded-full flex flex-col items-center justify-center gap-2 transition-colors outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "hover:bg-neutral-50 text-black"}` }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react76.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react76.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react76.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "Full Name on ID", value: formData.idExtractedData.fullName, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, fullName: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react76.default.createElement(TextInput, { label: "Date of Birth (YYYY-MM-DD)", value: formData.idExtractedData.dob, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, dob: v } })), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react76.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => deleteBusinessDocument("id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload")))) : /* @__PURE__ */ import_react76.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && passportRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => deleteBusinessDocument("passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && signatureRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => deleteBusinessDocument("signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-4 pt-6 border-t border-neutral-100 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react76.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other1Ref, onChange: (e) => handleOptionalUpload(e, "other1"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react76.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other2Ref, onChange: (e) => handleOptionalUpload(e, "other2"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react76.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other3Ref, onChange: (e) => handleOptionalUpload(e, "other3"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react76.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "If your ", type === "company" ? "company" : "business", " involves regulated professional services, please upload relevant licenses, certificates, or permits here (up to 3 documents).")), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
4288
|
+
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */ import_react78.default.createElement("div", { className: "border border-red-100 bg-linear-to-bl from-red-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[11px] tracking-widest text-red-600 block mb-1" }, "Registry Conflict Detected"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-black mb-3" }, nameCheckResult.message), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-2" }, (nameCheckResult.alternatives || []).map((alt, i) => /* @__PURE__ */ import_react78.default.createElement("button", { key: i, onClick: () => setFormData({ ...formData, proposedName: alt }), className: "text-left px-4 py-2 border border-neutral-100 rounded-full hover:border-black text-sm transition-colors outline-none" }, alt)))), /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setNameCheckResult(null), className: "w-fit text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors mt-2 outline-none" }, "Try New Name")))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-black" }, formData.approvedName), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Verified against registry")), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => editSection("nameApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.PencilEdit01Icon, size: 16 })))), formState.nameApproved && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm " }, "Where is your head office located?")), !formState.addressApproved ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Street Address", value: formData.address, onChange: (v) => setFormData({ ...formData, address: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "City", value: formData.city, onChange: (v) => setFormData({ ...formData, city: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "State", value: formData.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: null, isGlobalState: true }), placeholder: "Select State", onChange: () => {
|
|
4289
|
+
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: () => approveSection("addressApproved"), disabled: !formData.address || !formData.city || !formData.state || isReadOnly, className: "w-fit mt-2" }, "Confirm Address")) : /* @__PURE__ */ import_react78.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-neutral-500" }, formData.address, ", ", formData.city, ", ", formData.state), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => editSection("addressApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "company" && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between gap-2 text-black" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm " }, "Directors & Shareholders")), !formState.membersDetailsApproved && /* @__PURE__ */ import_react78.default.createElement("div", { className: `text-xs px-3 py-1 rounded-full ${getCompanyTotalShares() === 100 ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-500"}` }, "Total Shares: ", getCompanyTotalShares(), "%")), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide details for all individuals. Ensure total share percentage equals 100%."), !formState.membersDetailsApproved ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6 " }, formData.members.map((member, i) => /* @__PURE__ */ import_react78.default.createElement("div", { key: member.id, className: "flex flex-col gap-4 border border-neutral-100 p-5 rounded-2xl bg-neutral-50/30" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex justify-between items-center mb-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400" }, "Member ", i + 1), formData.members.length > 1 && !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => removeCompanyMember(i), className: "text-red-500 text-xs hover:text-red-600" }, "Remove")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Role", value: member.role, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "role", memberIndex: i }), onChange: () => {
|
|
4290
|
+
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */ import_react78.default.createElement(NumberInput, { label: "Share Percentage (%)", value: member.sharePercentage, onChange: (v) => updateCompanyMemberInfo(i, "sharePercentage", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Full Name", value: member.fullName, onChange: (v) => updateCompanyMemberInfo(i, "fullName", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react78.default.createElement(NumberInput, { label: "Phone Number", value: member.phone, onChange: (v) => updateCompanyMemberInfo(i, "phone", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Email Address", value: member.email, onChange: (v) => updateCompanyMemberInfo(i, "email", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Nationality", value: member.nationality, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "nationality", memberIndex: i }), onChange: () => {
|
|
4291
|
+
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Residential Address", value: member.address, onChange: (v) => updateCompanyMemberInfo(i, "address", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "City", value: member.city, onChange: (v) => updateCompanyMemberInfo(i, "city", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "State", value: member.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: i }), onChange: () => {
|
|
4292
|
+
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: addCompanyMember, className: "px-6 py-2 bg-white border border-neutral-100 text-black text-[11px] tracking-widest rounded-full hover:bg-neutral-50 transition-colors outline-none" }, "+ Add Member"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-400 -mt-2" }, "Provide basic contact info. We will extract your DOB and ID number automatically in the next step."), !formState.ownerApproved ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react78.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react78.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "Upload valid means of identification, passport photographs, and signatures for every director and shareholder.")), !formState.membersDocsApproved ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react78.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react78.default.createElement("input", { id: `id-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "id"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react78.default.createElement("input", { id: `pass-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "passport"), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react78.default.createElement("input", { id: `sig-upload-${i}`, type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", className: "hidden", onChange: (e) => handleCompanyMemberUpload(e, i, "signature"), disabled: isReadOnly || isAnyUploading }), !member.idExtractedData && !globalExtractingId ? /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`id-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react78.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Full Name on ID", value: member.idExtractedData.fullName, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, fullName: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Date of Birth", value: member.idExtractedData.dob, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, dob: v }), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload ID"))) : null, !member.passportFileUrl && !globalUploadingPassport ? /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`pass-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && document.getElementById(`sig-upload-${i}`)?.click(), className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}`, disabled: isReadOnly || isAnyUploading }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteCompanyMemberDocument(i, "signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: idRef, onChange: (e) => handleBusinessUpload(e, "id"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react78.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: passportRef, onChange: (e) => handleBusinessUpload(e, "passport"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react78.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: signatureRef, onChange: (e) => handleBusinessUpload(e, "signature"), disabled: isReadOnly || isAnyUploading, className: "hidden" }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-500 -mt-2" }, "Upload your NIN, Driver's License, Voter's Card, or Int'l Passport (JPG/PNG/WEBP)."), !formState.idApproved ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && idRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `w-full h-32 border border-neutral-100 rounded-full flex flex-col items-center justify-center gap-2 transition-colors outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "hover:bg-neutral-50 text-black"}` }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react78.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react78.default.createElement("div", { className: " mt-2 animate-in fade-in border border-purple-100 bg-linear-to-bl from-purple-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[11px] tracking-widest text-purple-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-500 mb-4" }, "Please verify the extracted information and correct any OCR mistakes before approving."), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Full Name on ID", value: formData.idExtractedData.fullName, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, fullName: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "ID Number", value: formData.idExtractedData.idNumber, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, idNumber: v } })), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react78.default.createElement(TextInput, { label: "Date of Birth (YYYY-MM-DD)", value: formData.idExtractedData.dob, onChange: (v) => setFormData((f) => ({ ...f, idExtractedData: { ...f.idExtractedData, dob: v } })), disabled: isReadOnly || isAnyUploading })))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteBusinessDocument("id"), disabled: isAnyUploading, className: "px-6 py-2 bg-white border border-neutral-100 text-neutral-500 text-[11px] rounded-full tracking-widest hover:bg-neutral-50 transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, "Delete & Re-upload")))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && passportRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteBusinessDocument("passport"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => !isReadOnly && !isAnyUploading && signatureRef.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteBusinessDocument("signature"), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 pt-6 border-t border-neutral-100 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other1Ref, onChange: (e) => handleOptionalUpload(e, "other1"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react78.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other2Ref, onChange: (e) => handleOptionalUpload(e, "other2"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react78.default.createElement("input", { type: "file", accept: "image/jpeg, image/png, image/webp, application/pdf", ref: other3Ref, onChange: (e) => handleOptionalUpload(e, "other3"), disabled: isAnyUploading || isReadOnly, className: "hidden" }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "text-xs text-neutral-500 leading-relaxed" }, "If your ", type === "company" ? "company" : "business", " involves regulated professional services, please upload relevant licenses, certificates, or permits here (up to 3 documents).")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
4172
4293
|
const docType = `other${num}`;
|
|
4173
4294
|
const ref = num === 1 ? other1Ref : num === 2 ? other2Ref : other3Ref;
|
|
4174
4295
|
const isUploading = num === 1 ? isUploadingOther1 : num === 2 ? isUploadingOther2 : isUploadingOther3;
|
|
@@ -4176,29 +4297,29 @@ var UniversalRegistrationFlow = ({
|
|
|
4176
4297
|
if (!fileUrl && !isUploading) {
|
|
4177
4298
|
const prevUrl = num > 1 ? formData[`otherDoc${num - 1}Url`] : true;
|
|
4178
4299
|
if (!prevUrl) return null;
|
|
4179
|
-
return /* @__PURE__ */
|
|
4300
|
+
return /* @__PURE__ */ import_react78.default.createElement("button", { key: num, onClick: () => !isReadOnly && !isAnyUploading && ref.current?.click(), disabled: isReadOnly || isAnyUploading, className: `flex items-center gap-3 p-4 border border-neutral-100 rounded-full transition-colors text-sm w-full outline-none ${isAnyUploading ? "opacity-50 cursor-not-allowed bg-neutral-50 text-neutral-400" : "text-black hover:bg-neutral-50"}` }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Optional Document ", num);
|
|
4180
4301
|
}
|
|
4181
4302
|
if (isUploading) {
|
|
4182
|
-
return /* @__PURE__ */
|
|
4303
|
+
return /* @__PURE__ */ import_react78.default.createElement("div", { key: num, className: "flex items-center gap-3 p-4 border border-neutral-100 rounded-full bg-neutral-50 text-neutral-500 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
4183
4304
|
}
|
|
4184
|
-
return /* @__PURE__ */
|
|
4185
|
-
}))), /* @__PURE__ */
|
|
4305
|
+
return /* @__PURE__ */ import_react78.default.createElement("div", { key: num, className: "flex items-center justify-between p-4 bg-emerald-50 rounded-full text-emerald-800 text-sm w-full" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.CheckmarkBadge01Icon, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => deleteOptionalDocument(docType), disabled: isAnyUploading, className: "text-emerald-700 hover:text-red-500 transition-colors p-1 outline-none shrink-0 disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.Delete02Icon, size: 16 })));
|
|
4306
|
+
}))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleBack, disabled: isAnyUploading, className: "flex items-center gap-2 px-6 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none disabled:opacity-50 disabled:cursor-not-allowed" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react78.default.createElement("div", null, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ import_react78.default.createElement(import_react78.default.Fragment, null, /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ import_react78.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: handleBack, className: "flex items-center gap-2 px-6 py-2 rounded-full text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 transition-colors outline-none" }, /* @__PURE__ */ import_react78.default.createElement(import_react79.HugeiconsIcon, { icon: import_core_free_icons28.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ import_react78.default.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ import_react78.default.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ import_react78.default.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "By proceeding with this application, you acknowledge and agree that all data, documents, and identification materials provided herein will be securely transmitted to the relevant official registries and authorized agents for the purpose of ", type === "company" ? "company" : "business", " incorporation and compliance verification."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "You confirm that all information provided is accurate and authentic. Any falsification of identity or corporate data may result in immediate rejection, and you may be held liable under applicable laws and regulations."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "mb-3 leading-relaxed" }, "This service operates strictly as a digital intermediary connecting you with official registries. The final approval of the ", type === "company" ? "company" : "business", " name and registration rests solely with the regulatory authorities. We are not liable for rejections arising from pre existing conflicts, non compliance, or regulatory policy changes not flagged during the AI pre check stages."), /* @__PURE__ */ import_react78.default.createElement("p", { className: "leading-relaxed" }, "Proceeding to generate the invoice confirms your acceptance of these terms and initiates the formal filing process.")), /* @__PURE__ */ import_react78.default.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ import_react78.default.createElement("input", { type: "checkbox", checked: iAgree, onChange: (e) => setIAgree(e.target.checked), disabled: isReadOnly, className: "mt-0.5 w-4 h-4 accent-black rounded cursor-pointer" }), /* @__PURE__ */ import_react78.default.createElement("span", { className: "text-[13px] text-red-500 group-hover:text-red-600 transition-colors" }, "I have read, understood, and agree to the terms of data transfer and processing.")), /* @__PURE__ */ import_react78.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: onCancelOrClose, disabled: isSubmitting, className: "px-8 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none w-full sm:w-auto" }, "Cancel"), /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setMacroStep(0), disabled: isSubmitting || isReadOnly, className: "px-8 py-2 text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full transition-colors outline-none w-full sm:w-auto" }, "Edit Application"), /* @__PURE__ */ import_react78.default.createElement(ThreeDActionButton, { onClick: handleFinalSubmit, disabled: isSubmitting || !iAgree || isReadOnly, isLoading: isSubmitting, className: "min-w-40 w-full sm:w-auto" }, "Submit")))), activeModal.isOpen && /* @__PURE__ */ import_react78.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ import_react78.default.createElement("div", { className: "relative w-80 bg-white shadow-2xl rounded-3xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200 max-h-[80vh]" }, /* @__PURE__ */ import_react78.default.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ import_react78.default.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ import_react78.default.createElement("div", { className: "p-4 flex flex-col gap-2 overflow-y-auto custom-scrollbar" }, (activeModal.type === "state" ? NIGERIAN_STATES : activeModal.type === "role" ? MEMBER_ROLES : NATIONALITIES).map((opt) => {
|
|
4186
4307
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
4187
|
-
return /* @__PURE__ */
|
|
4308
|
+
return /* @__PURE__ */ import_react78.default.createElement("button", { key: opt, onClick: () => {
|
|
4188
4309
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
4189
4310
|
else updateCompanyMemberInfo(activeModal.memberIndex, activeModal.type, opt);
|
|
4190
4311
|
setActiveModal({ isOpen: false, type: null, memberIndex: null });
|
|
4191
4312
|
}, 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);
|
|
4192
|
-
})), /* @__PURE__ */
|
|
4313
|
+
})), /* @__PURE__ */ import_react78.default.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ import_react78.default.createElement("button", { onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }), className: "w-full py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none" }, "Close")))));
|
|
4193
4314
|
};
|
|
4194
4315
|
|
|
4195
4316
|
// src/components/UniversalDeveloperSettings.tsx
|
|
4196
|
-
var
|
|
4317
|
+
var import_react80 = __toESM(require("react"));
|
|
4197
4318
|
var import_react_hot_toast8 = require("react-hot-toast");
|
|
4198
|
-
var
|
|
4199
|
-
var
|
|
4200
|
-
var ButtonSpinner5 = () => /* @__PURE__ */
|
|
4201
|
-
var PageSpinner6 = () => /* @__PURE__ */
|
|
4319
|
+
var import_react81 = require("@hugeicons/react");
|
|
4320
|
+
var import_core_free_icons29 = require("@hugeicons/core-free-icons");
|
|
4321
|
+
var ButtonSpinner5 = () => /* @__PURE__ */ import_react80.default.createElement(import_react81.HugeiconsIcon, { icon: import_core_free_icons29.Loading03Icon, size: 16, className: "animate-spin text-current" });
|
|
4322
|
+
var PageSpinner6 = () => /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ import_react80.default.createElement(import_react81.HugeiconsIcon, { icon: import_core_free_icons29.Loading03Icon, size: 32, className: "animate-spin text-black" }));
|
|
4202
4323
|
var UniversalDeveloperSettings = ({
|
|
4203
4324
|
initialPublicKey,
|
|
4204
4325
|
initialWebhookUrl,
|
|
@@ -4207,12 +4328,12 @@ var UniversalDeveloperSettings = ({
|
|
|
4207
4328
|
onGenerateKeys,
|
|
4208
4329
|
onSaveWebhook
|
|
4209
4330
|
}) => {
|
|
4210
|
-
const [publicKey, setPublicKey] = (0,
|
|
4211
|
-
const [webhookUrl, setWebhookUrl] = (0,
|
|
4212
|
-
const [isGenerating, setIsGenerating] = (0,
|
|
4213
|
-
const [isSavingWebhook, setIsSavingWebhook] = (0,
|
|
4214
|
-
const [isRollModalOpen, setIsRollModalOpen] = (0,
|
|
4215
|
-
(0,
|
|
4331
|
+
const [publicKey, setPublicKey] = (0, import_react80.useState)(initialPublicKey);
|
|
4332
|
+
const [webhookUrl, setWebhookUrl] = (0, import_react80.useState)(initialWebhookUrl);
|
|
4333
|
+
const [isGenerating, setIsGenerating] = (0, import_react80.useState)(false);
|
|
4334
|
+
const [isSavingWebhook, setIsSavingWebhook] = (0, import_react80.useState)(false);
|
|
4335
|
+
const [isRollModalOpen, setIsRollModalOpen] = (0, import_react80.useState)(false);
|
|
4336
|
+
(0, import_react80.useEffect)(() => {
|
|
4216
4337
|
setPublicKey(initialPublicKey || "");
|
|
4217
4338
|
setWebhookUrl(initialWebhookUrl || "");
|
|
4218
4339
|
}, [initialPublicKey, initialWebhookUrl]);
|
|
@@ -4272,7 +4393,7 @@ SECRET_KEY="${secKey}"
|
|
|
4272
4393
|
};
|
|
4273
4394
|
const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
|
|
4274
4395
|
const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
|
|
4275
|
-
return /* @__PURE__ */
|
|
4396
|
+
return /* @__PURE__ */ import_react80.default.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__ */ import_react80.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react80.default.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ import_react80.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full flex items-center justify-center shrink-0" }, /* @__PURE__ */ import_react80.default.createElement(import_react81.HugeiconsIcon, { icon: import_core_free_icons29.CircleLock02Icon, size: 18, className: "text-current" }))), isLoading ? /* @__PURE__ */ import_react80.default.createElement(PageSpinner6, null) : /* @__PURE__ */ import_react80.default.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react80.default.createElement(
|
|
4276
4397
|
TextInput,
|
|
4277
4398
|
{
|
|
4278
4399
|
label: "Public Key",
|
|
@@ -4281,7 +4402,7 @@ SECRET_KEY="${secKey}"
|
|
|
4281
4402
|
},
|
|
4282
4403
|
disabled: true
|
|
4283
4404
|
}
|
|
4284
|
-
), /* @__PURE__ */
|
|
4405
|
+
), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[11px] text-neutral-400 mt-1 leading-snug" }, "Your public key is used to identify your application. Your secret key will only be shown once upon generation.")), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react80.default.createElement(
|
|
4285
4406
|
ThreeDActionButton,
|
|
4286
4407
|
{
|
|
4287
4408
|
onClick: () => {
|
|
@@ -4293,7 +4414,7 @@ SECRET_KEY="${secKey}"
|
|
|
4293
4414
|
className: "w-fit"
|
|
4294
4415
|
},
|
|
4295
4416
|
publicKey ? "Roll API Keys" : "Generate Keys"
|
|
4296
|
-
))), /* @__PURE__ */
|
|
4417
|
+
))), /* @__PURE__ */ import_react80.default.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react80.default.createElement(
|
|
4297
4418
|
TextInput,
|
|
4298
4419
|
{
|
|
4299
4420
|
label: "Webhook URL",
|
|
@@ -4303,7 +4424,7 @@ SECRET_KEY="${secKey}"
|
|
|
4303
4424
|
placeholder: "https://your-domain.com/webhook",
|
|
4304
4425
|
type: "url"
|
|
4305
4426
|
}
|
|
4306
|
-
), /* @__PURE__ */
|
|
4427
|
+
), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[11px] text-neutral-400 mt-1 leading-snug" }, "We will send secure POST requests to this endpoint when significant events occur. Must use HTTPS.")), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react80.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate " }, "Webhook Status"), /* @__PURE__ */ import_react80.default.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ import_react80.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasWebhookChanges && !isSavingWebhook && !isReadOnly && /* @__PURE__ */ import_react80.default.createElement(
|
|
4307
4428
|
"button",
|
|
4308
4429
|
{
|
|
4309
4430
|
type: "button",
|
|
@@ -4311,7 +4432,7 @@ SECRET_KEY="${secKey}"
|
|
|
4311
4432
|
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"
|
|
4312
4433
|
},
|
|
4313
4434
|
"Cancel"
|
|
4314
|
-
), /* @__PURE__ */
|
|
4435
|
+
), /* @__PURE__ */ import_react80.default.createElement(
|
|
4315
4436
|
ThreeDActionButton,
|
|
4316
4437
|
{
|
|
4317
4438
|
type: "submit",
|
|
@@ -4320,7 +4441,7 @@ SECRET_KEY="${secKey}"
|
|
|
4320
4441
|
className: "min-w-32 w-full sm:w-auto"
|
|
4321
4442
|
},
|
|
4322
4443
|
"Save Webhook"
|
|
4323
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */
|
|
4444
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ import_react80.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ import_react80.default.createElement("div", { className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react80.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react80.default.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ import_react80.default.createElement("p", { className: "text-[11px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.")), /* @__PURE__ */ import_react80.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react80.default.createElement(
|
|
4324
4445
|
"button",
|
|
4325
4446
|
{
|
|
4326
4447
|
onClick: () => setIsRollModalOpen(false),
|
|
@@ -4328,19 +4449,19 @@ SECRET_KEY="${secKey}"
|
|
|
4328
4449
|
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
4329
4450
|
},
|
|
4330
4451
|
"Cancel"
|
|
4331
|
-
), /* @__PURE__ */
|
|
4452
|
+
), /* @__PURE__ */ import_react80.default.createElement(
|
|
4332
4453
|
"button",
|
|
4333
4454
|
{
|
|
4334
4455
|
onClick: handleGenerateKeys,
|
|
4335
4456
|
disabled: isGenerating,
|
|
4336
4457
|
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"
|
|
4337
4458
|
},
|
|
4338
|
-
isGenerating ? /* @__PURE__ */
|
|
4459
|
+
isGenerating ? /* @__PURE__ */ import_react80.default.createElement(ButtonSpinner5, null) : "Roll Keys"
|
|
4339
4460
|
)))));
|
|
4340
4461
|
};
|
|
4341
4462
|
|
|
4342
4463
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4343
|
-
var
|
|
4464
|
+
var import_react82 = __toESM(require("react"));
|
|
4344
4465
|
var import_image11 = __toESM(require("next/image"));
|
|
4345
4466
|
var MedicalFeatureStatsBlock = ({
|
|
4346
4467
|
bottomHeadline,
|
|
@@ -4349,9 +4470,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4349
4470
|
trustText,
|
|
4350
4471
|
stats
|
|
4351
4472
|
}) => {
|
|
4352
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
4353
|
-
const titleRef = (0,
|
|
4354
|
-
(0,
|
|
4473
|
+
const [isAnimating, setIsAnimating] = (0, import_react82.useState)(false);
|
|
4474
|
+
const titleRef = (0, import_react82.useRef)(null);
|
|
4475
|
+
(0, import_react82.useEffect)(() => {
|
|
4355
4476
|
const observer = new IntersectionObserver(
|
|
4356
4477
|
([entry]) => {
|
|
4357
4478
|
if (entry.isIntersecting) {
|
|
@@ -4369,7 +4490,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4369
4490
|
}
|
|
4370
4491
|
return () => observer.disconnect();
|
|
4371
4492
|
}, []);
|
|
4372
|
-
return /* @__PURE__ */
|
|
4493
|
+
return /* @__PURE__ */ import_react82.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react82.default.createElement(
|
|
4373
4494
|
"h2",
|
|
4374
4495
|
{
|
|
4375
4496
|
ref: titleRef,
|
|
@@ -4377,7 +4498,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4377
4498
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
4378
4499
|
},
|
|
4379
4500
|
bottomHeadline
|
|
4380
|
-
), /* @__PURE__ */
|
|
4501
|
+
), /* @__PURE__ */ import_react82.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react82.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react82.default.createElement(
|
|
4381
4502
|
import_image11.default,
|
|
4382
4503
|
{
|
|
4383
4504
|
src,
|
|
@@ -4386,17 +4507,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4386
4507
|
sizes: "48px",
|
|
4387
4508
|
className: "object-cover"
|
|
4388
4509
|
}
|
|
4389
|
-
)))), /* @__PURE__ */
|
|
4510
|
+
)))), /* @__PURE__ */ import_react82.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react82.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react82.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex pl-3 items-center border border-neutral-100 rounded-full p-0.5 mb-6" }, /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react82.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
4390
4511
|
};
|
|
4391
4512
|
|
|
4392
4513
|
// src/components/ConsultantShowcase.tsx
|
|
4393
|
-
var
|
|
4514
|
+
var import_react83 = __toESM(require("react"));
|
|
4394
4515
|
var import_image12 = __toESM(require("next/image"));
|
|
4395
|
-
var
|
|
4396
|
-
var
|
|
4516
|
+
var import_react84 = require("@hugeicons/react");
|
|
4517
|
+
var import_core_free_icons30 = require("@hugeicons/core-free-icons");
|
|
4397
4518
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
4398
|
-
const [isLoading, setIsLoading] = (0,
|
|
4399
|
-
return /* @__PURE__ */
|
|
4519
|
+
const [isLoading, setIsLoading] = (0, import_react83.useState)(true);
|
|
4520
|
+
return /* @__PURE__ */ import_react83.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react83.default.createElement(
|
|
4400
4521
|
import_image12.default,
|
|
4401
4522
|
{
|
|
4402
4523
|
src,
|
|
@@ -4415,9 +4536,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
4415
4536
|
var ConsultantShowcase = ({
|
|
4416
4537
|
profiles
|
|
4417
4538
|
}) => {
|
|
4418
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
4419
|
-
const [touchStart, setTouchStart] = (0,
|
|
4420
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
4539
|
+
const [currentIndex, setCurrentIndex] = (0, import_react83.useState)(0);
|
|
4540
|
+
const [touchStart, setTouchStart] = (0, import_react83.useState)(null);
|
|
4541
|
+
const [touchEnd, setTouchEnd] = (0, import_react83.useState)(null);
|
|
4421
4542
|
const nextSlide = () => {
|
|
4422
4543
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
4423
4544
|
};
|
|
@@ -4442,7 +4563,7 @@ var ConsultantShowcase = ({
|
|
|
4442
4563
|
}
|
|
4443
4564
|
};
|
|
4444
4565
|
if (!profiles || profiles.length === 0) return null;
|
|
4445
|
-
return /* @__PURE__ */
|
|
4566
|
+
return /* @__PURE__ */ import_react83.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react83.default.createElement(
|
|
4446
4567
|
"div",
|
|
4447
4568
|
{
|
|
4448
4569
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -4452,13 +4573,13 @@ var ConsultantShowcase = ({
|
|
|
4452
4573
|
},
|
|
4453
4574
|
profiles.map((profile, idx) => {
|
|
4454
4575
|
const isActive = idx === currentIndex;
|
|
4455
|
-
return /* @__PURE__ */
|
|
4576
|
+
return /* @__PURE__ */ import_react83.default.createElement(
|
|
4456
4577
|
"div",
|
|
4457
4578
|
{
|
|
4458
4579
|
key: profile.id,
|
|
4459
4580
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
4460
4581
|
},
|
|
4461
|
-
/* @__PURE__ */
|
|
4582
|
+
/* @__PURE__ */ import_react83.default.createElement(
|
|
4462
4583
|
ImageWithLoader,
|
|
4463
4584
|
{
|
|
4464
4585
|
src: profile.imageSrc,
|
|
@@ -4466,14 +4587,14 @@ var ConsultantShowcase = ({
|
|
|
4466
4587
|
priority: idx === 0
|
|
4467
4588
|
}
|
|
4468
4589
|
),
|
|
4469
|
-
/* @__PURE__ */
|
|
4470
|
-
/* @__PURE__ */
|
|
4471
|
-
/* @__PURE__ */
|
|
4590
|
+
/* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
4591
|
+
/* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
|
|
4592
|
+
/* @__PURE__ */ import_react83.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react83.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
|
|
4472
4593
|
);
|
|
4473
4594
|
}),
|
|
4474
|
-
/* @__PURE__ */
|
|
4475
|
-
/* @__PURE__ */
|
|
4476
|
-
/* @__PURE__ */
|
|
4595
|
+
/* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
|
|
4596
|
+
/* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
|
|
4597
|
+
/* @__PURE__ */ import_react83.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react83.default.createElement(
|
|
4477
4598
|
"button",
|
|
4478
4599
|
{
|
|
4479
4600
|
key: idx,
|
|
@@ -4486,13 +4607,13 @@ var ConsultantShowcase = ({
|
|
|
4486
4607
|
};
|
|
4487
4608
|
|
|
4488
4609
|
// src/components/ContentGridBlock.tsx
|
|
4489
|
-
var
|
|
4610
|
+
var import_react85 = __toESM(require("react"));
|
|
4490
4611
|
var import_image13 = __toESM(require("next/image"));
|
|
4491
|
-
var
|
|
4492
|
-
var
|
|
4612
|
+
var import_react86 = require("@hugeicons/react");
|
|
4613
|
+
var import_core_free_icons31 = require("@hugeicons/core-free-icons");
|
|
4493
4614
|
var ImageWithLoader2 = ({ src, alt, className, sizes }) => {
|
|
4494
|
-
const [isLoading, setIsLoading] = (0,
|
|
4495
|
-
return /* @__PURE__ */
|
|
4615
|
+
const [isLoading, setIsLoading] = (0, import_react85.useState)(true);
|
|
4616
|
+
return /* @__PURE__ */ import_react85.default.createElement("div", { className: `relative overflow-hidden bg-neutral-100 ${className}` }, isLoading && /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-100/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react85.default.createElement(import_react86.HugeiconsIcon, { icon: import_core_free_icons31.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react85.default.createElement(
|
|
4496
4617
|
import_image13.default,
|
|
4497
4618
|
{
|
|
4498
4619
|
src,
|
|
@@ -4514,14 +4635,14 @@ var ContentGridBlock = ({
|
|
|
4514
4635
|
middleBottomCard,
|
|
4515
4636
|
rightCards
|
|
4516
4637
|
}) => {
|
|
4517
|
-
return /* @__PURE__ */
|
|
4638
|
+
return /* @__PURE__ */ import_react85.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react85.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react85.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "bg-orange-50 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[17px] text-black leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react85.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-400 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react85.default.createElement("div", null, /* @__PURE__ */ import_react85.default.createElement("h4", { className: "text-[15px] text-black" }, leftCard.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[13px] text-neutral-400" }, leftCard.subtitle)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react85.default.createElement(import_image13.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react85.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react85.default.createElement(import_image13.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react85.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "bg-red-50 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react85.default.createElement("div", null, /* @__PURE__ */ import_react85.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react85.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react85.default.createElement(import_image13.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react85.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react85.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react85.default.createElement("div", { key: idx, className: "relative w-full h-80 rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react85.default.createElement(
|
|
4518
4639
|
ImageWithLoader2,
|
|
4519
4640
|
{
|
|
4520
4641
|
src: card.bgImageSrc,
|
|
4521
4642
|
alt: card.title,
|
|
4522
4643
|
className: "absolute inset-0 w-full h-full"
|
|
4523
4644
|
}
|
|
4524
|
-
), /* @__PURE__ */
|
|
4645
|
+
), /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-20 pointer-events-none" }), /* @__PURE__ */ import_react85.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react85.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react85.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react85.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react85.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
4525
4646
|
};
|
|
4526
4647
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4527
4648
|
0 && (module.exports = {
|
|
@@ -4575,5 +4696,6 @@ var ContentGridBlock = ({
|
|
|
4575
4696
|
UniversalProfileSettings,
|
|
4576
4697
|
UniversalRegistrationFlow,
|
|
4577
4698
|
UniversalSidebar,
|
|
4699
|
+
UniversalTrashView,
|
|
4578
4700
|
ZairusAuth
|
|
4579
4701
|
});
|