@retinalabsllc/zairusjs 5.1.2 → 5.1.5
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 +61 -1
- package/dist/index.d.ts +61 -1
- package/dist/index.js +437 -193
- package/dist/index.mjs +432 -186
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -36,6 +36,7 @@ __export(index_exports, {
|
|
|
36
36
|
AiStageCheck: () => AiStageCheck,
|
|
37
37
|
AppBento2: () => AppBento2,
|
|
38
38
|
Banner: () => Banner,
|
|
39
|
+
CardLogo: () => CardLogo,
|
|
39
40
|
ConsultantShowcase: () => ConsultantShowcase,
|
|
40
41
|
ContentGridBlock: () => ContentGridBlock,
|
|
41
42
|
DriveItemOpener: () => DriveItemOpener,
|
|
@@ -77,6 +78,7 @@ __export(index_exports, {
|
|
|
77
78
|
UniversalDirectoryPage: () => UniversalDirectoryPage,
|
|
78
79
|
UniversalDriveView: () => UniversalDriveView,
|
|
79
80
|
UniversalErrorView: () => UniversalErrorView,
|
|
81
|
+
UniversalHomeView: () => UniversalHomeView,
|
|
80
82
|
UniversalIdentityPage: () => UniversalIdentityPage,
|
|
81
83
|
UniversalLookupPage: () => UniversalLookupPage,
|
|
82
84
|
UniversalMembersPage: () => UniversalMembersPage,
|
|
@@ -87,6 +89,7 @@ __export(index_exports, {
|
|
|
87
89
|
UniversalSidebar: () => UniversalSidebar,
|
|
88
90
|
UniversalTransactionPage: () => UniversalTransactionPage,
|
|
89
91
|
UniversalTrashView: () => UniversalTrashView,
|
|
92
|
+
UniversalWalletPage: () => UniversalWalletPage,
|
|
90
93
|
ZairusAuth: () => ZairusAuth,
|
|
91
94
|
ZairusShareCard: () => ZairusShareCard
|
|
92
95
|
});
|
|
@@ -1521,7 +1524,7 @@ var ManagedPricingBlock = ({
|
|
|
1521
1524
|
key: `${activeTabIndex}-${planIdx}`,
|
|
1522
1525
|
className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
|
|
1523
1526
|
},
|
|
1524
|
-
/* @__PURE__ */ import_react24.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react24.default.createElement("
|
|
1527
|
+
/* @__PURE__ */ import_react24.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react24.default.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react24.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react24.default.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react24.default.createElement(
|
|
1525
1528
|
"div",
|
|
1526
1529
|
{
|
|
1527
1530
|
key: logoIdx,
|
|
@@ -2130,9 +2133,9 @@ var UniversalSidebar = ({
|
|
|
2130
2133
|
setShowNotifDialog(true);
|
|
2131
2134
|
setSelectedNotif(null);
|
|
2132
2135
|
},
|
|
2133
|
-
className: "relative w-
|
|
2136
|
+
className: "relative w-8 h-8 shrink-0 bg-white rounded-full flex items-center justify-center text-neutral-600 hover:text-black hover:bg-neutral-50 transition-all duration-300 outline-none"
|
|
2134
2137
|
},
|
|
2135
|
-
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons9.Notification01Icon, size:
|
|
2138
|
+
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons9.Notification01Icon, size: 14 }),
|
|
2136
2139
|
unreadNotificationsCount > 0 && /* @__PURE__ */ import_react39.default.createElement("span", { className: "absolute top-2 right-2.5 w-2 h-2 bg-blue-500 rounded-full border border-white" })
|
|
2137
2140
|
), showBackButton && /* @__PURE__ */ import_react39.default.createElement(
|
|
2138
2141
|
import_link9.default,
|
|
@@ -2143,7 +2146,7 @@ var UniversalSidebar = ({
|
|
|
2143
2146
|
},
|
|
2144
2147
|
/* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons9.ArrowLeft01Icon, size: 18 })
|
|
2145
2148
|
));
|
|
2146
|
-
return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, /* @__PURE__ */ import_react39.default.createElement("div", { className: "md:hidden fixed top-0 left-0 w-full h-16 bg-neutral-100 z-40 flex items-center justify-between px-4" }, /* @__PURE__ */ import_react39.default.createElement(
|
|
2149
|
+
return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, /* @__PURE__ */ import_react39.default.createElement("div", { className: "md:hidden fixed top-0 left-0 w-full h-16 bg-neutral-100/50 backdrop-blur-sm z-40 flex items-center justify-between px-4" }, /* @__PURE__ */ import_react39.default.createElement(
|
|
2147
2150
|
"button",
|
|
2148
2151
|
{
|
|
2149
2152
|
onClick: openMobile,
|
|
@@ -2167,7 +2170,7 @@ var UniversalSidebar = ({
|
|
|
2167
2170
|
${isCollapsed ? "md:w-16 w-64" : "w-64"}
|
|
2168
2171
|
`
|
|
2169
2172
|
},
|
|
2170
|
-
/* @__PURE__ */ import_react39.default.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` }, /* @__PURE__ */ import_react39.default.createElement("div", { className: `flex items-center gap-3 text-left ${!isCollapsed || isMobileOpen ? "w-full" : ""}` }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "w-9 h-9 bg-[#1f26d6] rounded-full flex items-center justify-center shrink-0" }, /* @__PURE__ */ import_react39.default.createElement("h3", { className: "text-[10px] text-white tracking-wider" }, userInitials.substring(0, 2))), (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col justify-center min-w-0 pr-2 flex-1" }, /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-[13px] text-black leading-none truncate tracking-wide mb-1" }, userName), userTag && /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-[9px] text-
|
|
2173
|
+
/* @__PURE__ */ import_react39.default.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` }, /* @__PURE__ */ import_react39.default.createElement("div", { className: `flex items-center gap-3 text-left ${!isCollapsed || isMobileOpen ? "w-full" : ""}` }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "w-9 h-9 bg-[#1f26d6] rounded-full flex items-center justify-center shrink-0" }, /* @__PURE__ */ import_react39.default.createElement("h3", { className: "text-[10px] text-white tracking-wider" }, userInitials.substring(0, 2))), (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col justify-center min-w-0 pr-2 flex-1" }, /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-[13px] text-black leading-none truncate tracking-wide mb-1" }, userName), userTag && /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-[9px] text-neutral-600 truncate tracking-[0.2em] leading-none " }, userTag))), /* @__PURE__ */ import_react39.default.createElement("div", { className: "md:hidden flex shrink-0" }, /* @__PURE__ */ import_react39.default.createElement(
|
|
2171
2174
|
"button",
|
|
2172
2175
|
{
|
|
2173
2176
|
onClick: closeMobile,
|
|
@@ -2441,7 +2444,7 @@ var UniversalOrganizationPage = ({
|
|
|
2441
2444
|
};
|
|
2442
2445
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== initialSlug;
|
|
2443
2446
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
2444
|
-
return /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-5xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ import_react43.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "
|
|
2447
|
+
return /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-5xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ import_react43.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Defi Profile"), /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your financial payment handle identifiers and global public cryptographic signature identity details.")), isReadOnly && /* @__PURE__ */ import_react43.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full shrink-0" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons11.CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ import_react43.default.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react43.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react43.default.createElement(
|
|
2445
2448
|
TextInput,
|
|
2446
2449
|
{
|
|
2447
2450
|
label: "Display Name",
|
|
@@ -3930,6 +3933,9 @@ var formatTime = (dateInput) => {
|
|
|
3930
3933
|
var UniversalTransactionPage = ({
|
|
3931
3934
|
headerTitle,
|
|
3932
3935
|
headerDescription,
|
|
3936
|
+
hideControls = false,
|
|
3937
|
+
hideBalanceAmounts = false,
|
|
3938
|
+
hidePagination = false,
|
|
3933
3939
|
transactions,
|
|
3934
3940
|
isLoading,
|
|
3935
3941
|
currentPage,
|
|
@@ -3940,9 +3946,10 @@ var UniversalTransactionPage = ({
|
|
|
3940
3946
|
activeDirectionFilter,
|
|
3941
3947
|
onDirectionFilterChange,
|
|
3942
3948
|
activeTypeFilter,
|
|
3943
|
-
onTypeFilterChange
|
|
3949
|
+
onTypeFilterChange,
|
|
3950
|
+
onReportTransaction,
|
|
3951
|
+
onGenerateReceipt
|
|
3944
3952
|
}) => {
|
|
3945
|
-
const [currentView, setCurrentView] = (0, import_react72.useState)("list");
|
|
3946
3953
|
const [selectedTransaction, setSelectedTransaction] = (0, import_react72.useState)(null);
|
|
3947
3954
|
const [localSearchQuery, setLocalSearchQuery] = (0, import_react72.useState)(searchQuery);
|
|
3948
3955
|
const [isTyping, setIsTyping] = (0, import_react72.useState)(false);
|
|
@@ -3975,30 +3982,29 @@ var UniversalTransactionPage = ({
|
|
|
3975
3982
|
setLocalSearchQuery("");
|
|
3976
3983
|
}
|
|
3977
3984
|
}, [searchQuery]);
|
|
3978
|
-
const goBack = () => {
|
|
3979
|
-
setCurrentView("list");
|
|
3980
|
-
setSelectedTransaction(null);
|
|
3981
|
-
};
|
|
3982
3985
|
const getDisplayName = (tx) => {
|
|
3983
3986
|
if (tx.metadata?.merchantName) return tx.metadata.merchantName;
|
|
3984
3987
|
if (tx.metadata?.description) return tx.metadata.description;
|
|
3985
3988
|
return tx.type === "CARD_TRANSACTION" ? "Card Transaction" : "Wallet Transaction";
|
|
3986
3989
|
};
|
|
3987
3990
|
const isListLoading = isLoading || isTyping;
|
|
3988
|
-
|
|
3991
|
+
const primaryBaseShadow = `inset 0 1.5px 0 0 rgba(255, 255, 255, 0.3), inset 0 -2px 0 0 rgba(0, 0, 0, 0.5), 0 3px 0 0 #0c0c0c, 0 6px 10px rgba(0, 0, 0, 0.3)`;
|
|
3992
|
+
const primaryHoverShadow = `inset 0 1.5px 0 0 rgba(255, 255, 255, 0.35), inset 0 -2px 0 0 rgba(0, 0, 0, 0.5), 0 4px 0 0 #0c0c0c, 0 8px 12px rgba(0, 0, 0, 0.35)`;
|
|
3993
|
+
const primaryActiveShadow = `inset 0 1px 0 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 0 rgba(0, 0, 0, 0.5), 0 1px 0 0 #0c0c0c, 0 2px 4px rgba(0, 0, 0, 0.2)`;
|
|
3994
|
+
return /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, !hideControls && /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react72.default.createElement(
|
|
3989
3995
|
"input",
|
|
3990
3996
|
{
|
|
3991
3997
|
type: "text",
|
|
3992
3998
|
placeholder: "Search reference or amount...",
|
|
3993
3999
|
value: localSearchQuery,
|
|
3994
4000
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
3995
|
-
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black outline-none transition-colors
|
|
4001
|
+
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black outline-none transition-colors"
|
|
3996
4002
|
}
|
|
3997
4003
|
)), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center gap-3 w-full sm:w-auto overflow-x-auto pb-1 sm:pb-0" }, /* @__PURE__ */ import_react72.default.createElement(
|
|
3998
4004
|
"button",
|
|
3999
4005
|
{
|
|
4000
4006
|
onClick: () => setIsDirectionModalOpen(true),
|
|
4001
|
-
className: "flex items-center gap-2 whitespace-nowrap bg-white px-5 py-2 rounded-full text-[12px] text-neutral-600 hover:text-black hover:bg-neutral-50 transition-colors outline-none
|
|
4007
|
+
className: "flex items-center gap-2 whitespace-nowrap bg-white px-5 py-2 rounded-full text-[12px] text-neutral-600 hover:text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
4002
4008
|
},
|
|
4003
4009
|
/* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.SearchList02Icon, size: 12 }),
|
|
4004
4010
|
activeDirectionFilter === "ALL" ? "Payment Type" : activeDirectionFilter
|
|
@@ -4006,23 +4012,20 @@ var UniversalTransactionPage = ({
|
|
|
4006
4012
|
"button",
|
|
4007
4013
|
{
|
|
4008
4014
|
onClick: () => setIsTypeModalOpen(true),
|
|
4009
|
-
className: "flex items-center gap-2 whitespace-nowrap bg-white px-5 py-2 rounded-full text-[12px] text-neutral-600 hover:text-black hover:bg-neutral-50 transition-colors outline-none
|
|
4015
|
+
className: "flex items-center gap-2 whitespace-nowrap bg-white px-5 py-2 rounded-full text-[12px] text-neutral-600 hover:text-black hover:bg-neutral-50 transition-colors outline-none"
|
|
4010
4016
|
},
|
|
4011
4017
|
/* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.ListSettingIcon, size: 14 }),
|
|
4012
4018
|
activeTypeFilter === "ALL" ? "All Transactions" : activeTypeFilter.replace("_", " ")
|
|
4013
|
-
))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" },
|
|
4019
|
+
))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ import_react72.default.createElement("div", null, /* @__PURE__ */ import_react72.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ import_react72.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "w-full overflow-hidden" }, isListLoading ? /* @__PURE__ */ import_react72.default.createElement(PageSpinner6, null) : /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "divide-y divide-neutral-100" }, transactions.length === 0 ? /* @__PURE__ */ import_react72.default.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No transactions found") : transactions.map((tx) => /* @__PURE__ */ import_react72.default.createElement(
|
|
4014
4020
|
"div",
|
|
4015
4021
|
{
|
|
4016
4022
|
key: tx.id,
|
|
4017
|
-
onClick: () =>
|
|
4018
|
-
setSelectedTransaction(tx);
|
|
4019
|
-
setCurrentView("details");
|
|
4020
|
-
},
|
|
4023
|
+
onClick: () => setSelectedTransaction(tx),
|
|
4021
4024
|
className: "flex items-center justify-between py-4 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0 px-2 -mx-2 rounded-xl"
|
|
4022
4025
|
},
|
|
4023
|
-
/* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center ${tx.direction === "CREDIT" ? "bg-
|
|
4024
|
-
/* @__PURE__ */ import_react72.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] text-neutral-500
|
|
4025
|
-
))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2
|
|
4026
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center ${tx.direction === "CREDIT" ? "bg-neutral-100 text-neutral-6000" : "bg-neutral-100 text-neutral-600"}` }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: tx.direction === "CREDIT" ? import_core_free_icons25.ArrowDownRight01Icon : import_core_free_icons25.ArrowUpRight01Icon, size: 18 })), /* @__PURE__ */ import_react72.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ import_react72.default.createElement("p", { className: "text-[13px] text-black truncate" }, getDisplayName(tx)), /* @__PURE__ */ import_react72.default.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, tx.direction === "CREDIT" ? "+" : "-", tx.amount, " ", tx.currency))),
|
|
4027
|
+
/* @__PURE__ */ import_react72.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] text-neutral-500" }, formatDate3(tx.createdAt)), /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] text-neutral-400 capitalize" }, tx.direction.toLowerCase()))
|
|
4028
|
+
))), !hidePagination && /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2" }, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react72.default.createElement(
|
|
4026
4029
|
"button",
|
|
4027
4030
|
{
|
|
4028
4031
|
onClick: () => onPageChange(currentPage - 1),
|
|
@@ -4038,7 +4041,38 @@ var UniversalTransactionPage = ({
|
|
|
4038
4041
|
className: "p-2 border border-neutral-100 rounded-full bg-white text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
|
|
4039
4042
|
},
|
|
4040
4043
|
/* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.ArrowRight01Icon, size: 14 })
|
|
4041
|
-
))))),
|
|
4044
|
+
)))))), selectedTransaction && /* @__PURE__ */ import_react72.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ import_react72.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react72.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Details"), /* @__PURE__ */ import_react72.default.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: `w-12 h-12 rounded-full flex items-center justify-center mb-4 ${selectedTransaction.direction === "CREDIT" ? "bg-neutral-100 text-neutral-6000" : "bg-neutral-100 text-neutral-600"}` }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: selectedTransaction.direction === "CREDIT" ? import_core_free_icons25.ArrowDownRight01Icon : import_core_free_icons25.ArrowUpRight01Icon, size: 20 })), /* @__PURE__ */ import_react72.default.createElement("h2", { className: `text-2xl text-black mb-2 transition-all duration-300 ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedTransaction.direction === "CREDIT" ? "+" : "-", selectedTransaction.amount, " ", selectedTransaction.currency), /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full bg-neutral-50" }, selectedTransaction.status)), /* @__PURE__ */ import_react72.default.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10" }, /* @__PURE__ */ import_react72.default.createElement("div", null, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Reference ID"), /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[13px] text-black break-all" }, selectedTransaction.reference)), /* @__PURE__ */ import_react72.default.createElement("div", null, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Date & Time"), /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[13px] text-black" }, formatDate3(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ import_react72.default.createElement("div", null, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transaction Type"), /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ import_react72.default.createElement("div", null, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Flow Direction"), /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.direction.toLowerCase()))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react72.default.createElement(
|
|
4045
|
+
"button",
|
|
4046
|
+
{
|
|
4047
|
+
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
4048
|
+
className: "relative w-full flex items-center justify-center py-2 rounded-full bg-neutral-950 text-white transition-all duration-150 select-none outline-none active:translate-y-0.5",
|
|
4049
|
+
style: { boxShadow: primaryBaseShadow },
|
|
4050
|
+
onMouseEnter: (e) => {
|
|
4051
|
+
e.currentTarget.style.boxShadow = primaryHoverShadow;
|
|
4052
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4053
|
+
},
|
|
4054
|
+
onMouseLeave: (e) => {
|
|
4055
|
+
e.currentTarget.style.boxShadow = primaryBaseShadow;
|
|
4056
|
+
e.currentTarget.style.transform = "translateY(0px)";
|
|
4057
|
+
},
|
|
4058
|
+
onMouseDown: (e) => {
|
|
4059
|
+
e.currentTarget.style.boxShadow = primaryActiveShadow;
|
|
4060
|
+
e.currentTarget.style.transform = "translateY(2px)";
|
|
4061
|
+
},
|
|
4062
|
+
onMouseUp: (e) => {
|
|
4063
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4064
|
+
}
|
|
4065
|
+
},
|
|
4066
|
+
/* @__PURE__ */ import_react72.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
4067
|
+
/* @__PURE__ */ import_react72.default.createElement("span", { className: "relative z-10 text-[13px] tracking-wide" }, "Report Transaction")
|
|
4068
|
+
), /* @__PURE__ */ import_react72.default.createElement(
|
|
4069
|
+
"button",
|
|
4070
|
+
{
|
|
4071
|
+
onClick: () => onGenerateReceipt && onGenerateReceipt(selectedTransaction),
|
|
4072
|
+
className: "w-full flex items-center justify-center py-2 rounded-full border border-neutral-200 text-black outline-none text-[13px] tracking-wide"
|
|
4073
|
+
},
|
|
4074
|
+
"Generate Receipt"
|
|
4075
|
+
))))), isDirectionModalOpen && /* @__PURE__ */ import_react72.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsDirectionModalOpen(false) }), /* @__PURE__ */ import_react72.default.createElement("div", { ref: directionDropdownRef, 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_react72.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react72.default.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Payment Type")), /* @__PURE__ */ import_react72.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, ["ALL", "CREDIT", "DEBIT"].map((option) => /* @__PURE__ */ import_react72.default.createElement(
|
|
4042
4076
|
"button",
|
|
4043
4077
|
{
|
|
4044
4078
|
key: option,
|
|
@@ -4046,17 +4080,17 @@ var UniversalTransactionPage = ({
|
|
|
4046
4080
|
onDirectionFilterChange(option);
|
|
4047
4081
|
setIsDirectionModalOpen(false);
|
|
4048
4082
|
},
|
|
4049
|
-
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none
|
|
4083
|
+
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeDirectionFilter === option ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
4050
4084
|
},
|
|
4051
4085
|
/* @__PURE__ */ import_react72.default.createElement("span", { className: "truncate pr-2" }, option.charAt(0).toUpperCase() + option.slice(1).toLowerCase())
|
|
4052
4086
|
))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react72.default.createElement(
|
|
4053
4087
|
"button",
|
|
4054
4088
|
{
|
|
4055
4089
|
onClick: () => setIsDirectionModalOpen(false),
|
|
4056
|
-
className: "w-full py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none
|
|
4090
|
+
className: "w-full py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none"
|
|
4057
4091
|
},
|
|
4058
4092
|
"Cancel"
|
|
4059
|
-
)))), isTypeModalOpen && /* @__PURE__ */ import_react72.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ import_react72.default.createElement("div", { ref: typeDropdownRef, 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_react72.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react72.default.createElement("h3", { className: "text-[14px] text-black tracking-tight
|
|
4093
|
+
)))), isTypeModalOpen && /* @__PURE__ */ import_react72.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react72.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ import_react72.default.createElement("div", { ref: typeDropdownRef, 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_react72.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react72.default.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Transactions Type")), /* @__PURE__ */ import_react72.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, [
|
|
4060
4094
|
{ label: "All Transactions", value: "ALL" },
|
|
4061
4095
|
{ label: "Wallet Transactions", value: "WALLET_TRANSACTION" },
|
|
4062
4096
|
{ label: "Card Transactions", value: "CARD_TRANSACTION" }
|
|
@@ -4068,23 +4102,230 @@ var UniversalTransactionPage = ({
|
|
|
4068
4102
|
onTypeFilterChange(option.value);
|
|
4069
4103
|
setIsTypeModalOpen(false);
|
|
4070
4104
|
},
|
|
4071
|
-
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none
|
|
4105
|
+
className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeTypeFilter === option.value ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}`
|
|
4072
4106
|
},
|
|
4073
4107
|
/* @__PURE__ */ import_react72.default.createElement("span", { className: "truncate pr-2" }, option.label.charAt(0).toUpperCase() + option.label.slice(1).toLowerCase())
|
|
4074
4108
|
))), /* @__PURE__ */ import_react72.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react72.default.createElement(
|
|
4075
4109
|
"button",
|
|
4076
4110
|
{
|
|
4077
4111
|
onClick: () => setIsTypeModalOpen(false),
|
|
4078
|
-
className: "w-full py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none
|
|
4112
|
+
className: "w-full py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors outline-none"
|
|
4079
4113
|
},
|
|
4080
4114
|
"Cancel"
|
|
4081
4115
|
)))));
|
|
4082
4116
|
};
|
|
4083
4117
|
|
|
4084
|
-
// src/components/
|
|
4118
|
+
// src/components/UniversalHomeView.tsx
|
|
4085
4119
|
var import_react74 = __toESM(require("react"));
|
|
4086
4120
|
var import_react75 = require("@hugeicons/react");
|
|
4087
4121
|
var import_core_free_icons26 = require("@hugeicons/core-free-icons");
|
|
4122
|
+
var UniversalHomeView = ({
|
|
4123
|
+
balanceLabel = "Your Balance",
|
|
4124
|
+
balanceAmount,
|
|
4125
|
+
balanceCurrency = "$",
|
|
4126
|
+
primaryAction,
|
|
4127
|
+
secondaryAction,
|
|
4128
|
+
quickActionsTitle = "Quick Actions",
|
|
4129
|
+
quickActions = [],
|
|
4130
|
+
transactionsProps
|
|
4131
|
+
}) => {
|
|
4132
|
+
const [displayAmount, setDisplayAmount] = (0, import_react74.useState)("0.00");
|
|
4133
|
+
const [isBalanceHidden, setIsBalanceHidden] = (0, import_react74.useState)(false);
|
|
4134
|
+
(0, import_react74.useEffect)(() => {
|
|
4135
|
+
const target = parseFloat(balanceAmount.replace(/,/g, ""));
|
|
4136
|
+
if (isNaN(target)) {
|
|
4137
|
+
setDisplayAmount(balanceAmount);
|
|
4138
|
+
return;
|
|
4139
|
+
}
|
|
4140
|
+
let startTimestamp = null;
|
|
4141
|
+
const duration = 1e3;
|
|
4142
|
+
const step = (timestamp) => {
|
|
4143
|
+
if (!startTimestamp) startTimestamp = timestamp;
|
|
4144
|
+
const progress = Math.min((timestamp - startTimestamp) / duration, 1);
|
|
4145
|
+
const easeProgress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress);
|
|
4146
|
+
const currentCount = easeProgress * target;
|
|
4147
|
+
setDisplayAmount(currentCount.toLocaleString("en-US", {
|
|
4148
|
+
minimumFractionDigits: 2,
|
|
4149
|
+
maximumFractionDigits: 2
|
|
4150
|
+
}));
|
|
4151
|
+
if (progress < 1) {
|
|
4152
|
+
requestAnimationFrame(step);
|
|
4153
|
+
} else {
|
|
4154
|
+
setDisplayAmount(target.toLocaleString("en-US", {
|
|
4155
|
+
minimumFractionDigits: 2,
|
|
4156
|
+
maximumFractionDigits: 2
|
|
4157
|
+
}));
|
|
4158
|
+
}
|
|
4159
|
+
};
|
|
4160
|
+
requestAnimationFrame(step);
|
|
4161
|
+
}, [balanceAmount]);
|
|
4162
|
+
const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, "00"];
|
|
4163
|
+
const primaryBaseShadow = `inset 0 1.5px 0 0 rgba(255, 255, 255, 0.3), inset 0 -2px 0 0 rgba(0, 0, 0, 0.5), 0 3px 0 0 #0c0c0c, 0 6px 10px rgba(0, 0, 0, 0.3)`;
|
|
4164
|
+
const primaryHoverShadow = `inset 0 1.5px 0 0 rgba(255, 255, 255, 0.35), inset 0 -2px 0 0 rgba(0, 0, 0, 0.5), 0 4px 0 0 #0c0c0c, 0 8px 12px rgba(0, 0, 0, 0.35)`;
|
|
4165
|
+
const primaryActiveShadow = `inset 0 1px 0 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 0 rgba(0, 0, 0, 0.5), 0 1px 0 0 #0c0c0c, 0 2px 4px rgba(0, 0, 0, 0.2)`;
|
|
4166
|
+
return /* @__PURE__ */ import_react74.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "relative flex items-start justify-between w-full pt-4 pb-8" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex flex-col items-start text-left z-10 w-full" }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex items-center gap-2 mb-1.5" }, /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-[12px] sm:text-[13px] text-neutral-500" }, balanceLabel), /* @__PURE__ */ import_react74.default.createElement(
|
|
4167
|
+
"button",
|
|
4168
|
+
{
|
|
4169
|
+
onClick: () => setIsBalanceHidden(!isBalanceHidden),
|
|
4170
|
+
className: "text-neutral-400 hover:text-black transition-colors outline-none"
|
|
4171
|
+
},
|
|
4172
|
+
/* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: isBalanceHidden ? import_core_free_icons26.ViewIcon : import_core_free_icons26.ViewOffSlashIcon, size: 14 })
|
|
4173
|
+
)), /* @__PURE__ */ import_react74.default.createElement("h1", { className: `text-3xl sm:text-4xl md:text-5xl text-black tracking-tight mb-5 tabular-nums flex items-baseline transition-all duration-300 ${isBalanceHidden ? "blur-sm opacity-40 select-none" : ""}` }, /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-xl sm:text-2xl text-neutral-300 mr-1" }, balanceCurrency), intPart, /* @__PURE__ */ import_react74.default.createElement("span", { className: "text-xl sm:text-2xl text-neutral-300" }, ".", decPart)), /* @__PURE__ */ import_react74.default.createElement("div", { className: "flex items-center gap-3" }, primaryAction && /* @__PURE__ */ import_react74.default.createElement(
|
|
4174
|
+
"button",
|
|
4175
|
+
{
|
|
4176
|
+
onClick: primaryAction.onClick,
|
|
4177
|
+
className: "relative inline-flex items-center justify-center gap-1.5 px-8 py-2 rounded-full bg-neutral-950 text-white transition-all duration-150 select-none outline-none active:translate-y-0.5",
|
|
4178
|
+
style: { boxShadow: primaryBaseShadow },
|
|
4179
|
+
onMouseEnter: (e) => {
|
|
4180
|
+
e.currentTarget.style.boxShadow = primaryHoverShadow;
|
|
4181
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4182
|
+
},
|
|
4183
|
+
onMouseLeave: (e) => {
|
|
4184
|
+
e.currentTarget.style.boxShadow = primaryBaseShadow;
|
|
4185
|
+
e.currentTarget.style.transform = "translateY(0px)";
|
|
4186
|
+
},
|
|
4187
|
+
onMouseDown: (e) => {
|
|
4188
|
+
e.currentTarget.style.boxShadow = primaryActiveShadow;
|
|
4189
|
+
e.currentTarget.style.transform = "translateY(2px)";
|
|
4190
|
+
},
|
|
4191
|
+
onMouseUp: (e) => {
|
|
4192
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4193
|
+
}
|
|
4194
|
+
},
|
|
4195
|
+
/* @__PURE__ */ import_react74.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
4196
|
+
/* @__PURE__ */ import_react74.default.createElement("span", { className: "relative z-10 flex items-center gap-1.5 leading-none text-[13px] tracking-wide" }, primaryAction.label, primaryAction.icon && /* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: primaryAction.icon, size: 16 }))
|
|
4197
|
+
), secondaryAction && /* @__PURE__ */ import_react74.default.createElement(
|
|
4198
|
+
"button",
|
|
4199
|
+
{
|
|
4200
|
+
onClick: secondaryAction.onClick,
|
|
4201
|
+
className: "flex items-center gap-1.5 px-8 py-2 rounded-full bg-white text-black transition-colors outline-none"
|
|
4202
|
+
},
|
|
4203
|
+
/* @__PURE__ */ import_react74.default.createElement("span", { className: "text-[13px] tracking-wide" }, secondaryAction.label),
|
|
4204
|
+
secondaryAction.icon && /* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: secondaryAction.icon, size: 16 })
|
|
4205
|
+
)))), quickActions && quickActions.length > 0 && /* @__PURE__ */ import_react74.default.createElement("div", { className: "w-full mb-8 z-10" }, /* @__PURE__ */ import_react74.default.createElement("h3", { className: "text-xl text-black mb-4 px-1 tracking-tight" }, quickActionsTitle), /* @__PURE__ */ import_react74.default.createElement("div", { className: "grid grid-cols-4 gap-2 sm:gap-3 w-full" }, quickActions.slice(0, 4).map((action) => /* @__PURE__ */ import_react74.default.createElement(
|
|
4206
|
+
"button",
|
|
4207
|
+
{
|
|
4208
|
+
key: action.id,
|
|
4209
|
+
onClick: action.onClick,
|
|
4210
|
+
className: `w-full h-23.75 sm:h-28.75 rounded-2xl bg-white p-2.5 sm:p-3 flex flex-col justify-between items-start cursor-pointer active:scale-[0.98] transition-all outline-none`
|
|
4211
|
+
},
|
|
4212
|
+
/* @__PURE__ */ import_react74.default.createElement("div", { className: `w-7 h-7 sm:w-9 sm:h-9 rounded-full flex items-center justify-center bg-neutral-100 text-black}` }, /* @__PURE__ */ import_react74.default.createElement("div", { className: "scale-75 sm:scale-100 flex items-center justify-center" }, /* @__PURE__ */ import_react74.default.createElement(import_react75.HugeiconsIcon, { icon: action.icon, size: 18 }))),
|
|
4213
|
+
/* @__PURE__ */ import_react74.default.createElement("span", { className: "text-[10px] sm:text-[12px] text-black/80 text-left leading-[1.2] whitespace-pre-line mt-1" }, action.label)
|
|
4214
|
+
)))), /* @__PURE__ */ import_react74.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react74.default.createElement(
|
|
4215
|
+
UniversalTransactionPage,
|
|
4216
|
+
{
|
|
4217
|
+
...transactionsProps,
|
|
4218
|
+
hideControls: true,
|
|
4219
|
+
hideBalanceAmounts: isBalanceHidden
|
|
4220
|
+
}
|
|
4221
|
+
)));
|
|
4222
|
+
};
|
|
4223
|
+
|
|
4224
|
+
// src/components/UniversalWalletPage.tsx
|
|
4225
|
+
var import_react76 = __toESM(require("react"));
|
|
4226
|
+
var import_react77 = require("@hugeicons/react");
|
|
4227
|
+
var import_core_free_icons27 = require("@hugeicons/core-free-icons");
|
|
4228
|
+
var PageSpinner7 = () => /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
4229
|
+
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
4230
|
+
const [isLoaded, setIsLoaded] = (0, import_react76.useState)(false);
|
|
4231
|
+
return /* @__PURE__ */ import_react76.default.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-50 flex items-center justify-center overflow-hidden border border-neutral-100 ${sizeClass}` }, !isLoaded && /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 16, className: "animate-spin text-neutral-300 absolute" }), /* @__PURE__ */ import_react76.default.createElement(
|
|
4232
|
+
"img",
|
|
4233
|
+
{
|
|
4234
|
+
src,
|
|
4235
|
+
alt,
|
|
4236
|
+
onLoad: () => setIsLoaded(true),
|
|
4237
|
+
className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}`
|
|
4238
|
+
}
|
|
4239
|
+
));
|
|
4240
|
+
};
|
|
4241
|
+
var UniversalWalletPage = ({
|
|
4242
|
+
headerTitle,
|
|
4243
|
+
headerDescription,
|
|
4244
|
+
hideControls = false,
|
|
4245
|
+
hideBalanceAmounts = false,
|
|
4246
|
+
wallets,
|
|
4247
|
+
isLoading = false,
|
|
4248
|
+
renderQrCode,
|
|
4249
|
+
onDownloadPayId,
|
|
4250
|
+
onCopyAddress
|
|
4251
|
+
}) => {
|
|
4252
|
+
const [selectedWallet, setSelectedWallet] = (0, import_react76.useState)(null);
|
|
4253
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react76.useState)("");
|
|
4254
|
+
const filteredWallets = wallets.filter((wallet) => {
|
|
4255
|
+
const q = localSearchQuery.toLowerCase();
|
|
4256
|
+
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
4257
|
+
});
|
|
4258
|
+
const primaryBaseShadow = `inset 0 1.5px 0 0 rgba(255, 255, 255, 0.3), inset 0 -2px 0 0 rgba(0, 0, 0, 0.5), 0 3px 0 0 #0c0c0c, 0 6px 10px rgba(0, 0, 0, 0.3)`;
|
|
4259
|
+
const primaryHoverShadow = `inset 0 1.5px 0 0 rgba(255, 255, 255, 0.35), inset 0 -2px 0 0 rgba(0, 0, 0, 0.5), 0 4px 0 0 #0c0c0c, 0 8px 12px rgba(0, 0, 0, 0.35)`;
|
|
4260
|
+
const primaryActiveShadow = `inset 0 1px 0 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 0 rgba(0, 0, 0, 0.5), 0 1px 0 0 #0c0c0c, 0 2px 4px rgba(0, 0, 0, 0.2)`;
|
|
4261
|
+
return /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, !hideControls && /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react76.default.createElement(
|
|
4262
|
+
"input",
|
|
4263
|
+
{
|
|
4264
|
+
type: "text",
|
|
4265
|
+
placeholder: "Search wallets by name or network...",
|
|
4266
|
+
value: localSearchQuery,
|
|
4267
|
+
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
4268
|
+
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black outline-none transition-colors"
|
|
4269
|
+
}
|
|
4270
|
+
))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react76.default.createElement(PageSpinner7, null) : /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "divide-y divide-neutral-100" }, filteredWallets.length === 0 ? /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No wallets found") : filteredWallets.map((wallet) => /* @__PURE__ */ import_react76.default.createElement(
|
|
4271
|
+
"div",
|
|
4272
|
+
{
|
|
4273
|
+
key: wallet.id,
|
|
4274
|
+
onClick: () => setSelectedWallet(wallet),
|
|
4275
|
+
className: "flex items-center justify-between py-4 hover:bg-neutral-50/50 transition-colors cursor-pointer group min-w-0 px-2 -mx-2 rounded-xl"
|
|
4276
|
+
},
|
|
4277
|
+
/* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react76.default.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ import_react76.default.createElement("p", { className: "text-[13px] text-black truncate font-medium" }, wallet.name), /* @__PURE__ */ import_react76.default.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, wallet.balance, " ", wallet.currency))),
|
|
4278
|
+
/* @__PURE__ */ import_react76.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[10px] tracking-wide text-neutral-500 bg-neutral-100/80 px-2.5 py-1 rounded-full uppercase" }, wallet.network))
|
|
4279
|
+
)))))), selectedWallet && /* @__PURE__ */ import_react76.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setSelectedWallet(null) }), /* @__PURE__ */ import_react76.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react76.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Wallet Details"), /* @__PURE__ */ import_react76.default.createElement("button", { onClick: () => setSelectedWallet(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ import_react76.default.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14 mb-4" }), /* @__PURE__ */ import_react76.default.createElement("h2", { className: `text-2xl text-black mb-2 transition-all duration-300 font-medium ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedWallet.balance, " ", selectedWallet.currency), /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full bg-neutral-50 uppercase mt-1" }, selectedWallet.network, " NETWORK")), renderQrCode && /* @__PURE__ */ import_react76.default.createElement("div", { className: "w-full flex justify-center mb-8" }, renderQrCode(selectedWallet)), /* @__PURE__ */ import_react76.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[13px] text-black break-all font-medium" }, selectedWallet.address)), /* @__PURE__ */ import_react76.default.createElement("div", null, /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Name"), /* @__PURE__ */ import_react76.default.createElement("span", { className: "text-[13px] text-black" }, selectedWallet.name))), /* @__PURE__ */ import_react76.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react76.default.createElement(
|
|
4280
|
+
"button",
|
|
4281
|
+
{
|
|
4282
|
+
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
4283
|
+
className: "relative w-full flex items-center justify-center py-3 rounded-full bg-neutral-950 text-white transition-all duration-150 select-none outline-none active:translate-y-0.5",
|
|
4284
|
+
style: { boxShadow: primaryBaseShadow },
|
|
4285
|
+
onMouseEnter: (e) => {
|
|
4286
|
+
e.currentTarget.style.boxShadow = primaryHoverShadow;
|
|
4287
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4288
|
+
},
|
|
4289
|
+
onMouseLeave: (e) => {
|
|
4290
|
+
e.currentTarget.style.boxShadow = primaryBaseShadow;
|
|
4291
|
+
e.currentTarget.style.transform = "translateY(0px)";
|
|
4292
|
+
},
|
|
4293
|
+
onMouseDown: (e) => {
|
|
4294
|
+
e.currentTarget.style.boxShadow = primaryActiveShadow;
|
|
4295
|
+
e.currentTarget.style.transform = "translateY(2px)";
|
|
4296
|
+
},
|
|
4297
|
+
onMouseUp: (e) => {
|
|
4298
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4299
|
+
}
|
|
4300
|
+
},
|
|
4301
|
+
/* @__PURE__ */ import_react76.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
4302
|
+
/* @__PURE__ */ import_react76.default.createElement("span", { className: "relative z-10 text-[13px] tracking-wide font-medium" }, "Download Pay ID")
|
|
4303
|
+
), /* @__PURE__ */ import_react76.default.createElement(
|
|
4304
|
+
"button",
|
|
4305
|
+
{
|
|
4306
|
+
onClick: () => onCopyAddress && onCopyAddress(selectedWallet),
|
|
4307
|
+
className: "w-full flex items-center justify-center py-2 rounded-full border border-neutral-200 text-black outline-none text-[13px] tracking-wide"
|
|
4308
|
+
},
|
|
4309
|
+
"Copy Wallet Address"
|
|
4310
|
+
))))));
|
|
4311
|
+
};
|
|
4312
|
+
|
|
4313
|
+
// src/components/CardLogo.tsx
|
|
4314
|
+
var import_react78 = __toESM(require("react"));
|
|
4315
|
+
var CardLogo = ({ network, className = "" }) => {
|
|
4316
|
+
if (network === "MASTERCARD") {
|
|
4317
|
+
return /* @__PURE__ */ import_react78.default.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 32 32", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react78.default.createElement("title", null, "Mastercard"), /* @__PURE__ */ import_react78.default.createElement("path", { d: "M16 8.73c-0.12 0.094-0.236 0.187-0.349 0.288-1.955 1.705-3.184 4.2-3.184 6.982s1.228 5.277 3.172 6.973l0.011 0.009c0.112 0.1 0.231 0.197 0.349 0.29 0.12-0.092 0.236-0.19 0.349-0.29 1.955-1.705 3.183-4.2 3.183-6.982s-1.228-5.277-3.172-6.973l-0.011-0.009c-0.112-0.1-0.23-0.195-0.349-0.288zM21.721 6.745c-0.005 0-0.011-0-0.018-0-1.903 0-3.67 0.577-5.138 1.566l0.033-0.021c0.075 0.059 0.143 0.121 0.205 0.186l0.001 0.001c2.116 1.836 3.446 4.528 3.446 7.531 0 2.996-1.323 5.682-3.417 7.507l-0.012 0.010c-0.072 0.061-0.15 0.122-0.226 0.182 1.441 0.97 3.216 1.549 5.125 1.549 5.112 0 9.256-4.144 9.256-9.256s-4.143-9.255-9.255-9.256h-0zM15.18 23.526c0.072 0.061 0.15 0.122 0.226 0.182-1.44 0.969-3.214 1.547-5.123 1.547-5.112 0-9.255-4.144-9.255-9.255s4.144-9.255 9.255-9.255c1.907 0 3.68 0.577 5.153 1.566l-0.033-0.021c-0.075 0.059-0.143 0.121-0.205 0.186l-0.001 0.001c-2.116 1.836-3.446 4.528-3.446 7.531 0 2.996 1.323 5.682 3.417 7.507l0.012 0.010z" }));
|
|
4318
|
+
}
|
|
4319
|
+
if (network === "VERVE") {
|
|
4320
|
+
return /* @__PURE__ */ import_react78.default.createElement("div", { className: `font-bold italic flex items-center justify-center tracking-widest ${className}`, style: { fontFamily: "sans-serif" } }, "Verve");
|
|
4321
|
+
}
|
|
4322
|
+
return /* @__PURE__ */ import_react78.default.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 32 32", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react78.default.createElement("title", null, "Visa"), /* @__PURE__ */ import_react78.default.createElement("path", { d: "M15.854 11.329l-2.003 9.367h-2.424l2.006-9.367zM26.051 17.377l1.275-3.518 0.735 3.518zM28.754 20.696h2.242l-1.956-9.367h-2.069c-0.003-0-0.007-0-0.010-0-0.459 0-0.853 0.281-1.019 0.68l-0.003 0.007-3.635 8.68h2.544l0.506-1.4h3.109zM22.429 17.638c0.010-2.473-3.419-2.609-3.395-3.714 0.008-0.336 0.327-0.694 1.027-0.785 0.13-0.013 0.28-0.021 0.432-0.021 0.711 0 1.385 0.162 1.985 0.452l-0.027-0.012 0.425-1.987c-0.673-0.261-1.452-0.413-2.266-0.416h-0.001c-2.396 0-4.081 1.275-4.096 3.098-0.015 1.348 1.203 2.099 2.122 2.549 0.945 0.459 1.262 0.754 1.257 1.163-0.006 0.63-0.752 0.906-1.45 0.917-0.032 0.001-0.071 0.001-0.109 0.001-0.871 0-1.691-0.219-2.407-0.606l0.027 0.013-0.439 2.052c0.786 0.315 1.697 0.497 2.651 0.497 0.015 0 0.030-0 0.045-0h-0.002c2.546 0 4.211-1.257 4.22-3.204zM12.391 11.329l-3.926 9.367h-2.562l-1.932-7.477c-0.037-0.364-0.26-0.668-0.57-0.82l-0.006-0.003c-0.688-0.338-1.488-0.613-2.325-0.786l-0.066-0.011 0.058-0.271h4.124c0 0 0.001 0 0.001 0 0.562 0 1.028 0.411 1.115 0.948l0.001 0.006 1.021 5.421 2.522-6.376z" }));
|
|
4323
|
+
};
|
|
4324
|
+
|
|
4325
|
+
// src/components/DriveItemOpener.tsx
|
|
4326
|
+
var import_react79 = __toESM(require("react"));
|
|
4327
|
+
var import_react80 = require("@hugeicons/react");
|
|
4328
|
+
var import_core_free_icons28 = require("@hugeicons/core-free-icons");
|
|
4088
4329
|
var DriveItemOpener = ({ item, onClose }) => {
|
|
4089
4330
|
if (!item) return null;
|
|
4090
4331
|
const formatBytes = (bytes) => {
|
|
@@ -4095,38 +4336,38 @@ var DriveItemOpener = ({ item, onClose }) => {
|
|
|
4095
4336
|
const i = Math.floor(Math.log(num) / Math.log(k));
|
|
4096
4337
|
return parseFloat((num / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
|
|
4097
4338
|
};
|
|
4098
|
-
return /* @__PURE__ */
|
|
4339
|
+
return /* @__PURE__ */ import_react79.default.createElement("div", { className: "fixed inset-0 z-200 bg-black/95 flex flex-col animate-in fade-in duration-200" }, /* @__PURE__ */ import_react79.default.createElement("div", { className: "flex items-center justify-between p-4 border-b border-white/10 bg-black" }, /* @__PURE__ */ import_react79.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react79.default.createElement("div", { className: "w-10 h-10 bg-white/10 rounded-xl flex items-center justify-center" }, /* @__PURE__ */ import_react79.default.createElement("div", { className: "invert grayscale brightness-200" }, /* @__PURE__ */ import_react79.default.createElement(FileIconMapper, { type: item.type, mimeType: item.mimeType }))), /* @__PURE__ */ import_react79.default.createElement("div", null, /* @__PURE__ */ import_react79.default.createElement("h3", { className: "text-sm text-white tracking-wide" }, item.name), /* @__PURE__ */ import_react79.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_react79.default.createElement(
|
|
4099
4340
|
"button",
|
|
4100
4341
|
{
|
|
4101
4342
|
onClick: onClose,
|
|
4102
4343
|
className: "p-3 bg-white/10 hover:bg-white/20 text-white rounded-full transition-colors outline-none"
|
|
4103
4344
|
},
|
|
4104
|
-
/* @__PURE__ */
|
|
4105
|
-
)), /* @__PURE__ */
|
|
4345
|
+
/* @__PURE__ */ import_react79.default.createElement(import_react80.HugeiconsIcon, { icon: import_core_free_icons28.Cancel01Icon, size: 20 })
|
|
4346
|
+
)), /* @__PURE__ */ import_react79.default.createElement("div", { className: "flex-1 flex items-center justify-center p-8 overflow-y-auto relative" }, /* @__PURE__ */ import_react79.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ import_react79.default.createElement("p", { className: "text-white/40 text-sm tracking-widest " }, "File Preview Engine"), /* @__PURE__ */ import_react79.default.createElement("p", { className: "text-white/20 text-xs mt-2" }, "Content rendering logic will be attached here."))));
|
|
4106
4347
|
};
|
|
4107
4348
|
|
|
4108
4349
|
// src/components/DriveShareModal.tsx
|
|
4109
|
-
var
|
|
4350
|
+
var import_react81 = __toESM(require("react"));
|
|
4110
4351
|
var DriveShareModal = ({ items, onClose }) => {
|
|
4111
4352
|
if (!items || items.length === 0) return null;
|
|
4112
|
-
return /* @__PURE__ */
|
|
4353
|
+
return /* @__PURE__ */ import_react81.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_react81.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_react81.default.createElement("div", null, /* @__PURE__ */ import_react81.default.createElement("h3", { className: "text-lg text-black tracking-tight mb-1" }, "Share Access"), /* @__PURE__ */ import_react81.default.createElement("p", { className: "text-xs text-neutral-500" }, "Managing permissions for ", items.length, " selected item(s).")), /* @__PURE__ */ import_react81.default.createElement("div", { className: "flex justify-end gap-3 mt-2" }, /* @__PURE__ */ import_react81.default.createElement(
|
|
4113
4354
|
"button",
|
|
4114
4355
|
{
|
|
4115
4356
|
onClick: onClose,
|
|
4116
4357
|
className: "px-6 py-2.5 text-xs text-neutral-500 hover:bg-neutral-50 rounded-full transition-colors outline-none"
|
|
4117
4358
|
},
|
|
4118
4359
|
"Close"
|
|
4119
|
-
), /* @__PURE__ */
|
|
4360
|
+
), /* @__PURE__ */ import_react81.default.createElement(ThreeDActionButton, { onClick: onClose }, "Save Links"))));
|
|
4120
4361
|
};
|
|
4121
4362
|
|
|
4122
4363
|
// src/components/AiApproveDecline.tsx
|
|
4123
|
-
var
|
|
4124
|
-
var
|
|
4125
|
-
var
|
|
4364
|
+
var import_react82 = __toESM(require("react"));
|
|
4365
|
+
var import_react83 = require("@hugeicons/react");
|
|
4366
|
+
var import_core_free_icons29 = require("@hugeicons/core-free-icons");
|
|
4126
4367
|
var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline, onEdit }) => {
|
|
4127
|
-
const [isEditing, setIsEditing] = (0,
|
|
4128
|
-
const [editVal, setEditVal] = (0,
|
|
4129
|
-
return /* @__PURE__ */
|
|
4368
|
+
const [isEditing, setIsEditing] = (0, import_react82.useState)(false);
|
|
4369
|
+
const [editVal, setEditVal] = (0, import_react82.useState)(typeof suggestionValue === "string" ? suggestionValue : "");
|
|
4370
|
+
return /* @__PURE__ */ import_react82.default.createElement("div", { className: "border border-orange-100 bg-linear-to-bl from-orange-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react82.default.createElement("div", null, /* @__PURE__ */ import_react82.default.createElement("span", { className: "text-[11px] tracking-widest text-orange-600 block mb-1 " }, "AI Suggestion: ", suggestionTitle), !isEditing ? /* @__PURE__ */ import_react82.default.createElement("div", { className: "text-sm text-black" }, suggestionValue) : /* @__PURE__ */ import_react82.default.createElement(
|
|
4130
4371
|
"input",
|
|
4131
4372
|
{
|
|
4132
4373
|
type: "text",
|
|
@@ -4135,45 +4376,45 @@ var AiApproveDecline = ({ suggestionTitle, suggestionValue, onApprove, onDecline
|
|
|
4135
4376
|
className: "w-full text-sm p-2 border-b border-orange-200 bg-transparent outline-none focus:border-orange-400 transition-colors",
|
|
4136
4377
|
autoFocus: true
|
|
4137
4378
|
}
|
|
4138
|
-
)), /* @__PURE__ */
|
|
4379
|
+
)), /* @__PURE__ */ import_react82.default.createElement("div", { className: "flex items-center gap-1 mt-2" }, !isEditing ? /* @__PURE__ */ import_react82.default.createElement(import_react82.default.Fragment, null, /* @__PURE__ */ import_react82.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_react82.default.createElement(import_react83.HugeiconsIcon, { icon: import_core_free_icons29.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react82.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_react82.default.createElement(import_react83.HugeiconsIcon, { icon: import_core_free_icons29.CancelCircleIcon, size: 28 })), onEdit && /* @__PURE__ */ import_react82.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_react82.default.createElement(import_react83.HugeiconsIcon, { icon: import_core_free_icons29.PencilEdit01Icon, size: 18 }))) : /* @__PURE__ */ import_react82.default.createElement(import_react82.default.Fragment, null, /* @__PURE__ */ import_react82.default.createElement("button", { onClick: () => {
|
|
4139
4380
|
onEdit?.(editVal);
|
|
4140
4381
|
setIsEditing(false);
|
|
4141
|
-
}, 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__ */
|
|
4382
|
+
}, 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_react82.default.createElement(import_react83.HugeiconsIcon, { icon: import_core_free_icons29.CheckmarkCircle01Icon, size: 28 })), /* @__PURE__ */ import_react82.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_react82.default.createElement(import_react83.HugeiconsIcon, { icon: import_core_free_icons29.CancelCircleIcon, size: 28 })))));
|
|
4142
4383
|
};
|
|
4143
4384
|
|
|
4144
4385
|
// src/components/AiStageCheck.tsx
|
|
4145
|
-
var
|
|
4146
|
-
var
|
|
4147
|
-
var
|
|
4386
|
+
var import_react84 = __toESM(require("react"));
|
|
4387
|
+
var import_react85 = require("@hugeicons/react");
|
|
4388
|
+
var import_core_free_icons30 = require("@hugeicons/core-free-icons");
|
|
4148
4389
|
var AiStageCheck = ({ tasks }) => {
|
|
4149
|
-
return /* @__PURE__ */
|
|
4390
|
+
return /* @__PURE__ */ import_react84.default.createElement("div", { className: "flex flex-col gap-3 p-5 rounded-2xl border border-orange-100 bg-linear-to-bl from-orange-50/80 via-white to-white relative overflow-hidden" }, /* @__PURE__ */ import_react84.default.createElement("span", { className: "text-[11px] tracking-widest text-orange-600 mb-1 " }, "AI Processing"), tasks.map((task) => /* @__PURE__ */ import_react84.default.createElement("div", { key: task.id, className: "flex items-center gap-3" }, task.status === "pending" && /* @__PURE__ */ import_react84.default.createElement("div", { className: "w-4 h-4 rounded-full border border-orange-200" }), task.status === "loading" && /* @__PURE__ */ import_react84.default.createElement(import_react85.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 16, className: "animate-spin text-orange-500" }), task.status === "success" && /* @__PURE__ */ import_react84.default.createElement(import_react85.HugeiconsIcon, { icon: import_core_free_icons30.CheckmarkCircle02Icon, size: 16, className: "text-emerald-500" }), task.status === "error" && /* @__PURE__ */ import_react84.default.createElement(import_react85.HugeiconsIcon, { icon: import_core_free_icons30.CancelCircleIcon, size: 16, className: "text-red-500" }), /* @__PURE__ */ import_react84.default.createElement("span", { className: `text-xs transition-colors ${task.status === "success" ? "text-black" : task.status === "loading" ? "text-orange-700" : "text-neutral-500"}` }, task.label))));
|
|
4150
4391
|
};
|
|
4151
4392
|
|
|
4152
4393
|
// src/components/Stagger.tsx
|
|
4153
|
-
var
|
|
4154
|
-
var
|
|
4155
|
-
var
|
|
4394
|
+
var import_react86 = __toESM(require("react"));
|
|
4395
|
+
var import_react87 = require("@hugeicons/react");
|
|
4396
|
+
var import_core_free_icons31 = require("@hugeicons/core-free-icons");
|
|
4156
4397
|
var Stagger = ({ steps, currentStep }) => {
|
|
4157
4398
|
const getIconForStep = (stepName) => {
|
|
4158
4399
|
const lowerName = stepName.toLowerCase();
|
|
4159
|
-
if (lowerName.includes("document")) return
|
|
4160
|
-
if (lowerName.includes("review")) return
|
|
4161
|
-
if (lowerName.includes("submit")) return
|
|
4162
|
-
return
|
|
4400
|
+
if (lowerName.includes("document")) return import_core_free_icons31.Upload01Icon;
|
|
4401
|
+
if (lowerName.includes("review")) return import_core_free_icons31.FileSyncIcon;
|
|
4402
|
+
if (lowerName.includes("submit")) return import_core_free_icons31.CloudUploadIcon;
|
|
4403
|
+
return import_core_free_icons31.Briefcase02Icon;
|
|
4163
4404
|
};
|
|
4164
|
-
return /* @__PURE__ */
|
|
4405
|
+
return /* @__PURE__ */ import_react86.default.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ import_react86.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_react86.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) => {
|
|
4165
4406
|
const isActive = idx === currentStep;
|
|
4166
4407
|
const isPassed = idx < currentStep;
|
|
4167
4408
|
const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-100 text-neutral-500" : "bg-neutral-100 text-neutral-500";
|
|
4168
|
-
return /* @__PURE__ */
|
|
4409
|
+
return /* @__PURE__ */ import_react86.default.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ import_react86.default.createElement(import_react87.HugeiconsIcon, { icon: getIconForStep(step), size: 11 }));
|
|
4169
4410
|
}));
|
|
4170
4411
|
};
|
|
4171
4412
|
|
|
4172
4413
|
// src/components/UniversalRegistrationFlow.tsx
|
|
4173
|
-
var
|
|
4414
|
+
var import_react88 = __toESM(require("react"));
|
|
4174
4415
|
var import_react_hot_toast10 = __toESM(require("react-hot-toast"));
|
|
4175
|
-
var
|
|
4176
|
-
var
|
|
4416
|
+
var import_react89 = require("@hugeicons/react");
|
|
4417
|
+
var import_core_free_icons32 = require("@hugeicons/core-free-icons");
|
|
4177
4418
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
4178
4419
|
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"];
|
|
4179
4420
|
var MEMBER_ROLES = ["Director Only", "Shareholder Only", "Both Director & Shareholder"];
|
|
@@ -4186,12 +4427,12 @@ var UniversalRegistrationFlow = ({
|
|
|
4186
4427
|
onRedirectToBilling,
|
|
4187
4428
|
onRedirectToApplication
|
|
4188
4429
|
}) => {
|
|
4189
|
-
const [isBooting, setIsBooting] = (0,
|
|
4190
|
-
const [macroStep, setMacroStep] = (0,
|
|
4191
|
-
const [appStatus, setAppStatus] = (0,
|
|
4192
|
-
const [isAbortModalOpen, setIsAbortModalOpen] = (0,
|
|
4193
|
-
const [isAborting, setIsAborting] = (0,
|
|
4194
|
-
const [formState, setFormState] = (0,
|
|
4430
|
+
const [isBooting, setIsBooting] = (0, import_react88.useState)(true);
|
|
4431
|
+
const [macroStep, setMacroStep] = (0, import_react88.useState)(0);
|
|
4432
|
+
const [appStatus, setAppStatus] = (0, import_react88.useState)("");
|
|
4433
|
+
const [isAbortModalOpen, setIsAbortModalOpen] = (0, import_react88.useState)(false);
|
|
4434
|
+
const [isAborting, setIsAborting] = (0, import_react88.useState)(false);
|
|
4435
|
+
const [formState, setFormState] = (0, import_react88.useState)({
|
|
4195
4436
|
natureApproved: false,
|
|
4196
4437
|
nameApproved: false,
|
|
4197
4438
|
addressApproved: false,
|
|
@@ -4202,13 +4443,13 @@ var UniversalRegistrationFlow = ({
|
|
|
4202
4443
|
passportApproved: false,
|
|
4203
4444
|
signatureApproved: false
|
|
4204
4445
|
});
|
|
4205
|
-
const idRef = (0,
|
|
4206
|
-
const passportRef = (0,
|
|
4207
|
-
const signatureRef = (0,
|
|
4208
|
-
const other1Ref = (0,
|
|
4209
|
-
const other2Ref = (0,
|
|
4210
|
-
const other3Ref = (0,
|
|
4211
|
-
const [formData, setFormData] = (0,
|
|
4446
|
+
const idRef = (0, import_react88.useRef)(null);
|
|
4447
|
+
const passportRef = (0, import_react88.useRef)(null);
|
|
4448
|
+
const signatureRef = (0, import_react88.useRef)(null);
|
|
4449
|
+
const other1Ref = (0, import_react88.useRef)(null);
|
|
4450
|
+
const other2Ref = (0, import_react88.useRef)(null);
|
|
4451
|
+
const other3Ref = (0, import_react88.useRef)(null);
|
|
4452
|
+
const [formData, setFormData] = (0, import_react88.useState)({
|
|
4212
4453
|
businessDesc: "",
|
|
4213
4454
|
natureOfBusiness: null,
|
|
4214
4455
|
proposedName: "",
|
|
@@ -4235,22 +4476,22 @@ var UniversalRegistrationFlow = ({
|
|
|
4235
4476
|
otherDoc3Url: "",
|
|
4236
4477
|
otherDoc3Meta: null
|
|
4237
4478
|
});
|
|
4238
|
-
const [activeModal, setActiveModal] = (0,
|
|
4239
|
-
const [iAgree, setIAgree] = (0,
|
|
4240
|
-
const [isAnalyzingNature, setIsAnalyzingNature] = (0,
|
|
4241
|
-
const [suggestedNature, setSuggestedNature] = (0,
|
|
4242
|
-
const [isCheckingQualifier, setIsCheckingQualifier] = (0,
|
|
4243
|
-
const [qualifierCheckResult, setQualifierCheckResult] = (0,
|
|
4244
|
-
const [isCheckingName, setIsCheckingName] = (0,
|
|
4245
|
-
const [nameCheckResult, setNameCheckResult] = (0,
|
|
4246
|
-
const [globalExtractingId, setGlobalExtractingId] = (0,
|
|
4247
|
-
const [globalUploadingPassport, setGlobalUploadingPassport] = (0,
|
|
4248
|
-
const [globalUploadingSignature, setGlobalUploadingSignature] = (0,
|
|
4249
|
-
const [isUploadingOther1, setIsUploadingOther1] = (0,
|
|
4250
|
-
const [isUploadingOther2, setIsUploadingOther2] = (0,
|
|
4251
|
-
const [isUploadingOther3, setIsUploadingOther3] = (0,
|
|
4252
|
-
const [aiTasks, setAiTasks] = (0,
|
|
4253
|
-
const [isSubmitting, setIsSubmitting] = (0,
|
|
4479
|
+
const [activeModal, setActiveModal] = (0, import_react88.useState)({ isOpen: false, type: null, memberIndex: null });
|
|
4480
|
+
const [iAgree, setIAgree] = (0, import_react88.useState)(false);
|
|
4481
|
+
const [isAnalyzingNature, setIsAnalyzingNature] = (0, import_react88.useState)(false);
|
|
4482
|
+
const [suggestedNature, setSuggestedNature] = (0, import_react88.useState)(null);
|
|
4483
|
+
const [isCheckingQualifier, setIsCheckingQualifier] = (0, import_react88.useState)(false);
|
|
4484
|
+
const [qualifierCheckResult, setQualifierCheckResult] = (0, import_react88.useState)(null);
|
|
4485
|
+
const [isCheckingName, setIsCheckingName] = (0, import_react88.useState)(false);
|
|
4486
|
+
const [nameCheckResult, setNameCheckResult] = (0, import_react88.useState)(null);
|
|
4487
|
+
const [globalExtractingId, setGlobalExtractingId] = (0, import_react88.useState)(false);
|
|
4488
|
+
const [globalUploadingPassport, setGlobalUploadingPassport] = (0, import_react88.useState)(false);
|
|
4489
|
+
const [globalUploadingSignature, setGlobalUploadingSignature] = (0, import_react88.useState)(false);
|
|
4490
|
+
const [isUploadingOther1, setIsUploadingOther1] = (0, import_react88.useState)(false);
|
|
4491
|
+
const [isUploadingOther2, setIsUploadingOther2] = (0, import_react88.useState)(false);
|
|
4492
|
+
const [isUploadingOther3, setIsUploadingOther3] = (0, import_react88.useState)(false);
|
|
4493
|
+
const [aiTasks, setAiTasks] = (0, import_react88.useState)([]);
|
|
4494
|
+
const [isSubmitting, setIsSubmitting] = (0, import_react88.useState)(false);
|
|
4254
4495
|
const isReadOnly = ["PENDING", "AWAITING_PAYMENT", "COMPLETED"].includes(appStatus);
|
|
4255
4496
|
const isAnyUploading = globalExtractingId || globalUploadingPassport || globalUploadingSignature || isUploadingOther1 || isUploadingOther2 || isUploadingOther3;
|
|
4256
4497
|
const baseApi = async (action, payload = {}) => {
|
|
@@ -4265,7 +4506,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4265
4506
|
return { success: false, error: "Network communication failed." };
|
|
4266
4507
|
}
|
|
4267
4508
|
};
|
|
4268
|
-
(0,
|
|
4509
|
+
(0, import_react88.useEffect)(() => {
|
|
4269
4510
|
baseApi("progress_load").then((data) => {
|
|
4270
4511
|
if (data.success && data.data) {
|
|
4271
4512
|
const meta = data.data;
|
|
@@ -4751,23 +4992,23 @@ var UniversalRegistrationFlow = ({
|
|
|
4751
4992
|
const isStep0Valid = type === "company" ? formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.membersDetailsApproved : formState.natureApproved && formState.nameApproved && formState.addressApproved && formState.ownerApproved;
|
|
4752
4993
|
const isStep1Valid = type === "company" ? formState.membersDocsApproved : formState.idApproved && formState.passportApproved && formState.signatureApproved;
|
|
4753
4994
|
const titleText = type === "company" ? "Company Incorporation (LLC)" : "Business Name Registration";
|
|
4754
|
-
if (isBooting) return /* @__PURE__ */
|
|
4995
|
+
if (isBooting) return /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex justify-center py-20" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Loading03Icon, size: 32, className: "animate-spin text-black" }));
|
|
4755
4996
|
if (!["DRAFT", "QUEUED", "REJECTED"].includes(appStatus) && appStatus !== "") {
|
|
4756
|
-
return /* @__PURE__ */
|
|
4997
|
+
return /* @__PURE__ */ import_react88.default.createElement("div", { className: "w-full max-w-5xl 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_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.CheckmarkBadge01Icon, size: 35 })), /* @__PURE__ */ import_react88.default.createElement("h2", { className: "text-xl text-black" }, "Registration Completed"), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application has been successfully verified and registered.")) : appStatus === "PENDING" ? /* @__PURE__ */ import_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.HourglassIcon, size: 35, className: "animate-spin" })), /* @__PURE__ */ import_react88.default.createElement("h2", { className: "text-xl text-black" }, "Application is Pending"), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-neutral-500 max-w-md" }, "Your application is currently pending review.")) : appStatus === "AWAITING_PAYMENT" ? /* @__PURE__ */ import_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.HourglassIcon, size: 35, className: "animate-pulse" })), /* @__PURE__ */ import_react88.default.createElement("h2", { className: "text-xl text-black" }, "Awaiting Payment"), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react88.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_react88.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_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.HourglassIcon, size: 35 })), /* @__PURE__ */ import_react88.default.createElement("h2", { className: "text-xl text-black" }, "Application Submitted"), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "mt-6 flex flex-col items-center gap-3" }, /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isAborting && setIsAbortModalOpen(false) }), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "p-6 flex flex-col gap-4 text-center" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-[17px] text-black tracking-tight" }, "Abort Application?"), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "w-full flex " }, /* @__PURE__ */ import_react88.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_react88.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")))));
|
|
4757
4998
|
}
|
|
4758
|
-
return /* @__PURE__ */
|
|
4999
|
+
return /* @__PURE__ */ import_react88.default.createElement("div", { className: "w-full max-w-5xl 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_react88.default.createElement("div", { className: "flex flex-col gap-8" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("h2", { className: "text-xl text-black tracking-tight mb-1" }, titleText), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-neutral-500" }, "Answer the questions below to build your official application.")), /* @__PURE__ */ import_react88.default.createElement("div", { className: "px-2" }, /* @__PURE__ */ import_react88.default.createElement(Stagger, { steps: MACRO_STEPS, currentStep: macroStep }))), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-8" }, macroStep === 0 && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm " }, "What does your ", type === "company" ? "company" : "business", " do?")), !formState.natureApproved ? /* @__PURE__ */ import_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-3 " }, /* @__PURE__ */ import_react88.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_react88.default.createElement(ThreeDActionButton, { onClick: handleAnalyzeNature, disabled: formData.businessDesc.length < 5 || isAnalyzingNature || isReadOnly, isLoading: isAnalyzingNature, className: "w-fit" }, "Analyze Nature")), isAnalyzingNature && /* @__PURE__ */ import_react88.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react88.default.createElement(AiStageCheck, { tasks: [{ id: "1", label: "Matching with Official Categories...", status: "loading" }] })), suggestedNature && /* @__PURE__ */ import_react88.default.createElement("div", { className: " mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react88.default.createElement(AiApproveDecline, { suggestionTitle: "Classification Found", suggestionValue: /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("p", { className: " text-black" }, suggestedNature.specificLabel), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, "Category: ", suggestedNature.categoryLabel)), onApprove: () => {
|
|
4759
5000
|
const newForm = { ...formData, natureOfBusiness: suggestedNature };
|
|
4760
5001
|
setFormData(newForm);
|
|
4761
5002
|
approveSection("natureApproved", newForm);
|
|
4762
|
-
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */
|
|
5003
|
+
}, onDecline: () => setSuggestedNature(null) }))) : /* @__PURE__ */ import_react88.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "pr-4" }, /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-black" }, formData.natureOfBusiness?.specificLabel), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-neutral-400 mt-1" }, formData.businessDesc)), !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => editSection("natureApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.PencilEdit01Icon, size: 16 })))), formState.natureApproved && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm " }, "What name would you like to register?")), /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Proposed Name 1 (Preferred)", value: formData.proposedName, onChange: (v) => setFormData({ ...formData, proposedName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Proposed Name 2 (Alternative)", value: formData.proposedName2, onChange: (v) => setFormData({ ...formData, proposedName2: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "mt-2 animate-in fade-in" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "border border-orange-100 bg-linear-to-bl from-orange-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-[11px] tracking-widest text-orange-600 block mb-1" }, "AI Suggestion: Structural Qualifier Missing"), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-black mb-3" }, "Nigerian registrations require a structural qualifier to be approved."), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-2" }, (qualifierCheckResult.suggestions || []).map((alt, i) => /* @__PURE__ */ import_react88.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_react88.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_react88.default.createElement("div", { className: " mt-2 animate-in fade-in" }, nameCheckResult.status === "APPROVED" || nameCheckResult.status === "APPROVED_WARNING" || nameCheckResult.status === "SKIPPED" ? /* @__PURE__ */ import_react88.default.createElement(AiApproveDecline, { suggestionTitle: nameCheckResult.status === "APPROVED" ? "Name Available!" : "Fallback Approval", suggestionValue: /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.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_react88.default.createElement("p", { className: "text-xs text-neutral-600" }, nameCheckResult.message), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-neutral-600 mt-2 " }, "Proposed Option: ", nameCheckResult.approvedOption)), onApprove: () => {
|
|
4763
5004
|
const newForm = { ...formData, approvedName: nameCheckResult.approvedOption };
|
|
4764
5005
|
setFormData(newForm);
|
|
4765
5006
|
approveSection("nameApproved", newForm);
|
|
4766
|
-
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */
|
|
4767
|
-
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */
|
|
4768
|
-
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */
|
|
4769
|
-
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */
|
|
4770
|
-
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react83.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_react83.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react83.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react83.default.createElement("div", null, /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react83.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react83.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react83.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react83.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react83.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react83.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react83.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react83.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react83.default.createElement("div", null, /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react83.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react83.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react83.default.createElement(import_react83.default.Fragment, null, /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react83.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react83.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react83.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react83.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react83.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_react83.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_react83.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_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react83.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react83.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react83.default.createElement("div", { className: " mt-2 animate-in fade-in border border-orange-100 bg-linear-to-bl from-orange-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react83.default.createElement("div", null, /* @__PURE__ */ import_react83.default.createElement("span", { className: "text-[11px] tracking-widest text-orange-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react83.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react83.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_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react83.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react83.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react83.default.createElement("div", null, /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react83.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react83.default.createElement(import_react83.default.Fragment, null, /* @__PURE__ */ import_react83.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_react83.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_react83.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_react83.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react83.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react83.default.Fragment, null, /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react83.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react83.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react83.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react83.default.createElement("div", { className: " mt-2 animate-in fade-in border border-orange-100 bg-linear-to-bl from-orange-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react83.default.createElement("div", null, /* @__PURE__ */ import_react83.default.createElement("span", { className: "text-[11px] tracking-widest text-orange-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react83.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_react83.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_react83.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react83.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react83.default.createElement("div", null, /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react83.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react83.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react83.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react83.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_react83.default.createElement(import_react84.HugeiconsIcon, { icon: import_core_free_icons30.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react83.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_react83.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_react83.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_react83.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_react83.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react83.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react83.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_react83.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
5007
|
+
}, onDecline: () => setNameCheckResult(null) }) : /* @__PURE__ */ import_react88.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_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-[11px] tracking-widest text-red-600 block mb-1" }, "Registry Conflict Detected"), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-black mb-3" }, nameCheckResult.message), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-2" }, (nameCheckResult.alternatives || []).map((alt, i) => /* @__PURE__ */ import_react88.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_react88.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_react88.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-black" }, formData.approvedName), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Verified against registry")), !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => editSection("nameApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.PencilEdit01Icon, size: 16 })))), formState.nameApproved && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm " }, "Where is your head office located?")), !formState.addressApproved ? /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Street Address", value: formData.address, onChange: (v) => setFormData({ ...formData, address: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "City", value: formData.city, onChange: (v) => setFormData({ ...formData, city: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.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: () => {
|
|
5008
|
+
}, disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react88.default.createElement(ThreeDActionButton, { onClick: () => approveSection("addressApproved"), disabled: !formData.address || !formData.city || !formData.state || isReadOnly, className: "w-fit mt-2" }, "Confirm Address")) : /* @__PURE__ */ import_react88.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-neutral-500" }, formData.address, ", ", formData.city, ", ", formData.state), !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => editSection("addressApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "company" && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center justify-between gap-2 text-black" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm " }, "Directors & Shareholders")), !formState.membersDetailsApproved && /* @__PURE__ */ import_react88.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_react88.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_react88.default.createElement("div", { className: "flex flex-col gap-6 " }, formData.members.map((member, i) => /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex justify-between items-center mb-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400" }, "Member ", i + 1), formData.members.length > 1 && !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => removeCompanyMember(i), className: "text-red-500 text-xs hover:text-red-600" }, "Remove")), /* @__PURE__ */ import_react88.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Role", value: member.role, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "role", memberIndex: i }), onChange: () => {
|
|
5009
|
+
}, disabled: isReadOnly || isSubmitting }), member.role !== "Director Only" && /* @__PURE__ */ import_react88.default.createElement(NumberInput, { label: "Share Percentage (%)", value: member.sharePercentage, onChange: (v) => updateCompanyMemberInfo(i, "sharePercentage", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Full Name", value: member.fullName, onChange: (v) => updateCompanyMemberInfo(i, "fullName", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react88.default.createElement(NumberInput, { label: "Phone Number", value: member.phone, onChange: (v) => updateCompanyMemberInfo(i, "phone", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Email Address", value: member.email, onChange: (v) => updateCompanyMemberInfo(i, "email", v), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Nationality", value: member.nationality, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "nationality", memberIndex: i }), onChange: () => {
|
|
5010
|
+
}, disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Residential Address", value: member.address, onChange: (v) => updateCompanyMemberInfo(i, "address", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "City", value: member.city, onChange: (v) => updateCompanyMemberInfo(i, "city", v), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "State", value: member.state, readOnly: true, onClick: () => !isReadOnly && setActiveModal({ isOpen: true, type: "state", memberIndex: i }), onChange: () => {
|
|
5011
|
+
}, disabled: isReadOnly || isSubmitting })))), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center justify-between mt-2" }, !isReadOnly && /* @__PURE__ */ import_react88.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_react88.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDetailsApproved"), disabled: !areCompanyMembersValid() || isReadOnly, className: "w-fit" }, "Confirm Members"))) : /* @__PURE__ */ import_react88.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-black" }, formData.members.length, " Member(s) Registered"), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, "Total Shares: 100% Verified.")), !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => editSection("membersDetailsApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.PencilEdit01Icon, size: 16 })))), formState.addressApproved && type === "business" && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center text-black" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm " }, "Who owns the business?")), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex flex-col gap-4 " }, /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Full Name", value: formData.ownerName, onChange: (v) => setFormData({ ...formData, ownerName: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4" }, /* @__PURE__ */ import_react88.default.createElement(NumberInput, { label: "Phone Number", value: formData.ownerPhone, onChange: (v) => setFormData({ ...formData, ownerPhone: v }), disabled: isReadOnly || isSubmitting }), /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "Email Address", value: formData.ownerEmail, onChange: (v) => setFormData({ ...formData, ownerEmail: v }), disabled: isReadOnly || isSubmitting })), /* @__PURE__ */ import_react88.default.createElement(ThreeDActionButton, { onClick: () => approveSection("ownerApproved"), disabled: !formData.ownerName || !formData.ownerPhone || !formData.ownerEmail || isReadOnly, className: "w-fit mt-2" }, "Confirm Owner Details")) : /* @__PURE__ */ import_react88.default.createElement("div", { className: " flex items-center justify-between" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-black" }, formData.ownerName), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-neutral-500 mt-1" }, formData.ownerEmail, " \u2022 ", formData.ownerPhone)), !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => editSection("ownerApproved"), className: "p-2 text-neutral-400 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.ArrowLeft01Icon, size: 14 }), " Close"), /* @__PURE__ */ import_react88.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep0Valid, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 1 && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-8 animate-in fade-in" }, type === "company" ? /* @__PURE__ */ import_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm text-black" }, "Member Identity Documents"), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex flex-col gap-6" }, formData.members.map((member, i) => /* @__PURE__ */ import_react88.default.createElement("div", { key: member.id, className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-[11px] tracking-widest text-black mb-1" }, member.fullName || `Member ${i + 1}`, " ", /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-400 ml-2" }, "(", member.role, ")")), /* @__PURE__ */ import_react88.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_react88.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_react88.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_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Valid ID (NIN, License, Voter's Card)") : globalExtractingId && !member.idExtractedData ? /* @__PURE__ */ import_react88.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react88.default.createElement(AiStageCheck, { tasks: aiTasks })) : member.idExtractedData ? /* @__PURE__ */ import_react88.default.createElement("div", { className: " mt-2 animate-in fade-in border border-orange-100 bg-linear-to-bl from-orange-50/80 via-white to-white p-5 rounded-xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-[11px] tracking-widest text-orange-600 block mb-2" }, "Review Extracted ID"), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react88.default.createElement(TextInput, { label: "ID Number", value: member.idExtractedData.idNumber, onChange: (v) => updateCompanyMemberInfo(i, "idExtractedData", { ...member.idExtractedData, idNumber: v }), disabled: isReadOnly || isAnyUploading }), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, !isReadOnly && /* @__PURE__ */ import_react88.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_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !member.passportFileUrl ? /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : member.passportFileUrl ? /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Delete02Icon, size: 16 }))) : null, !member.signatureFileUrl && !globalUploadingSignature ? /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !member.signatureFileUrl ? /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : member.signatureFileUrl ? /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Delete02Icon, size: 16 }))) : null)), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ import_react88.default.createElement(ThreeDActionButton, { onClick: () => approveSection("membersDocsApproved"), disabled: !areCompanyMemberDocsValid() || isReadOnly || isAnyUploading, className: "w-fit" }, "Confirm All Documents"))) : /* @__PURE__ */ import_react88.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-emerald-800" }, "Documents Uploaded"), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted.")), !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => editSection("membersDocsApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.PencilEdit01Icon, size: 16 })))) : /* @__PURE__ */ import_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.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_react88.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_react88.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_react88.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center gap-2 text-black" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm " }, "Upload Means of Identification")), /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Upload01Icon, size: 24, className: "text-neutral-400" }), /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-xs" }, "Select ID Image to Upload")), globalExtractingId && /* @__PURE__ */ import_react88.default.createElement("div", { className: " mt-2" }, /* @__PURE__ */ import_react88.default.createElement(AiStageCheck, { tasks: aiTasks })), formData.idExtractedData && /* @__PURE__ */ import_react88.default.createElement("div", { className: " mt-2 animate-in fade-in border border-orange-100 bg-linear-to-bl from-orange-50/80 via-white to-white p-5 rounded-2xl flex flex-col gap-4 relative overflow-hidden" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-[11px] tracking-widest text-orange-600 block mb-2" }, "Review AI Extracted Data"), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ import_react88.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_react88.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_react88.default.createElement("div", { className: "flex items-center gap-2 mt-2" }, /* @__PURE__ */ import_react88.default.createElement(ThreeDActionButton, { onClick: () => approveSection("idApproved"), disabled: isAnyUploading || isReadOnly, className: "w-fit shrink-0" }, "Approve Data"), !isReadOnly && /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: " flex items-center justify-between bg-emerald-50 p-6 rounded-full" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-sm text-emerald-800" }, "ID Document Verified"), /* @__PURE__ */ import_react88.default.createElement("p", { className: "text-xs text-emerald-600 mt-1" }, "Data safely extracted and stored.")), !isReadOnly && /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => editSection("idApproved"), className: "p-2 text-emerald-700 hover:text-black transition-colors outline-none shrink-0" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.PencilEdit01Icon, size: 16 })))), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4 pt-6 animate-in slide-in-from-top-4 duration-500" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-3 " }, !formState.passportApproved && !globalUploadingPassport ? /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Passport Photo") : globalUploadingPassport && !formData.passportFileUrl ? /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Passport...") : /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.IdentificationIcon, size: 18 }), " Passport Uploaded"), !isReadOnly && /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Delete02Icon, size: 16 }))), !formState.signatureApproved && !globalUploadingSignature ? /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Signature") : globalUploadingSignature && !formData.signatureFileUrl ? /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Signature...") : /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.SignatureIcon, size: 18 }), " Signature Uploaded"), !isReadOnly && /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Delete02Icon, size: 16 })))))), /* @__PURE__ */ import_react88.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_react88.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_react88.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_react88.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_react88.default.createElement("div", { className: "flex flex-col gap-1 mb-2" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm text-black" }, "Additional Documents (Optional)"), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex flex-col gap-3" }, [1, 2, 3].map((num) => {
|
|
4771
5012
|
const docType = `other${num}`;
|
|
4772
5013
|
const ref = num === 1 ? other1Ref : num === 2 ? other2Ref : other3Ref;
|
|
4773
5014
|
const isUploading = num === 1 ? isUploadingOther1 : num === 2 ? isUploadingOther2 : isUploadingOther3;
|
|
@@ -4775,29 +5016,29 @@ var UniversalRegistrationFlow = ({
|
|
|
4775
5016
|
if (!fileUrl && !isUploading) {
|
|
4776
5017
|
const prevUrl = num > 1 ? formData[`otherDoc${num - 1}Url`] : true;
|
|
4777
5018
|
if (!prevUrl) return null;
|
|
4778
|
-
return /* @__PURE__ */
|
|
5019
|
+
return /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Upload01Icon, size: 18, className: "text-neutral-400" }), " Upload Optional Document ", num);
|
|
4779
5020
|
}
|
|
4780
5021
|
if (isUploading) {
|
|
4781
|
-
return /* @__PURE__ */
|
|
5022
|
+
return /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Loading03Icon, size: 18, className: "animate-spin text-black" }), " Uploading Document ", num, "...");
|
|
4782
5023
|
}
|
|
4783
|
-
return /* @__PURE__ */
|
|
4784
|
-
}))), /* @__PURE__ */
|
|
5024
|
+
return /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.CheckmarkBadge01Icon, size: 18 }), " Optional Document ", num, " Uploaded"), !isReadOnly && /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.Delete02Icon, size: 16 })));
|
|
5025
|
+
}))), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center justify-between mt-8 pt-6 " }, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react88.default.createElement(ThreeDActionButton, { onClick: handleNext, disabled: !isStep1Valid || isAnyUploading, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 2 && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react88.default.createElement("div", null, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-sm mb-5 text-black" }, "Application Summary"), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-4 text-sm" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-500 truncate text-[13px] " }, type === "company" ? "Company Name" : "Business Name"), /* @__PURE__ */ import_react88.default.createElement("span", { className: " text-black text-[13px]" }, formData.approvedName)), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Classification"), /* @__PURE__ */ import_react88.default.createElement("span", { className: " text-black truncate sm:text-right text-[13px] " }, formData.natureOfBusiness?.specificLabel || "Pending")), type === "company" ? /* @__PURE__ */ import_react88.default.createElement(import_react88.default.Fragment, null, /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Total Members"), /* @__PURE__ */ import_react88.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.members.length, " Directors/Shareholders")), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Share Capital"), /* @__PURE__ */ import_react88.default.createElement("span", { className: " text-black truncate text-[13px] " }, "100% Allocated"))) : /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between border-b border-neutral-100 pb-3 gap-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Proprietor"), /* @__PURE__ */ import_react88.default.createElement("span", { className: " text-black truncate text-[13px] " }, formData.ownerName)), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Documents Attached"), /* @__PURE__ */ import_react88.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, "ID, Passport, Signature")), formData.otherDoc1Url && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row sm:justify-between pb-2 gap-1" }, /* @__PURE__ */ import_react88.default.createElement("span", { className: "text-neutral-500 text-[13px] " }, "Optional Documents"), /* @__PURE__ */ import_react88.default.createElement("span", { className: " text-neutral-400 text-[13px] " }, [formData.otherDoc1Url, formData.otherDoc2Url, formData.otherDoc3Url].filter(Boolean).length, " Attached")))), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 " }, /* @__PURE__ */ import_react88.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_react88.default.createElement(import_react89.HugeiconsIcon, { icon: import_core_free_icons32.ArrowLeft01Icon, size: 14 }), " Back"), /* @__PURE__ */ import_react88.default.createElement(ThreeDActionButton, { onClick: handleNext, className: "w-fit shrink-0" }, "Next Step"))), macroStep === 3 && /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col gap-6 py-6 animate-in zoom-in-95 duration-500" }, /* @__PURE__ */ import_react88.default.createElement("h2", { className: "text-lg text-black tracking-tight mb-2" }, "Terms and Conditions of Application"), /* @__PURE__ */ import_react88.default.createElement("div", { className: "text-xs text-neutral-500 mb-4" }, /* @__PURE__ */ import_react88.default.createElement("p", { className: " mb-3" }, "Declaration and Consent"), /* @__PURE__ */ import_react88.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_react88.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_react88.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_react88.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_react88.default.createElement("label", { className: "flex items-start gap-3 mt-2 cursor-pointer group" }, /* @__PURE__ */ import_react88.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_react88.default.createElement("span", { className: "text-[13px] text-neutral-500 group-hover:text-neutral-600 transition-colors" }, "I have read, understood, and agree to the terms of data transfer and processing.")), /* @__PURE__ */ import_react88.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-4 mt-8 w-full justify-end pt-6" }, /* @__PURE__ */ import_react88.default.createElement("button", { onClick: onCancelOrClose, disabled: isSubmitting, className: "text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full px-8 py-2.5 border border-neutral-100 transition-colors outline-none w-full sm:w-auto" }, "Cancel"), /* @__PURE__ */ import_react88.default.createElement("button", { onClick: () => setMacroStep(0), disabled: isSubmitting || isReadOnly, className: " text-[11px] tracking-widest text-neutral-500 hover:text-black hover:bg-neutral-50 rounded-full px-8 py-2.5 border border-neutral-100transition-colors outline-none w-full sm:w-auto" }, "Edit Application"), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react88.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }) }), /* @__PURE__ */ import_react88.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_react88.default.createElement("div", { className: "p-4 text-center w-full shrink-0" }, /* @__PURE__ */ import_react88.default.createElement("h3", { className: "text-[14px] text-black tracking-tight capitalize" }, "Select ", activeModal.type)), /* @__PURE__ */ import_react88.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) => {
|
|
4785
5026
|
const isSelected = activeModal.isGlobalState ? formData.state === opt : formData.members[activeModal.memberIndex][activeModal.type] === opt;
|
|
4786
|
-
return /* @__PURE__ */
|
|
5027
|
+
return /* @__PURE__ */ import_react88.default.createElement("button", { key: opt, onClick: () => {
|
|
4787
5028
|
if (activeModal.isGlobalState) setFormData({ ...formData, state: opt });
|
|
4788
5029
|
else updateCompanyMemberInfo(activeModal.memberIndex, activeModal.type, opt);
|
|
4789
5030
|
setActiveModal({ isOpen: false, type: null, memberIndex: null });
|
|
4790
5031
|
}, 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);
|
|
4791
|
-
})), /* @__PURE__ */
|
|
5032
|
+
})), /* @__PURE__ */ import_react88.default.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ import_react88.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")))));
|
|
4792
5033
|
};
|
|
4793
5034
|
|
|
4794
5035
|
// src/components/UniversalDeveloperSettings.tsx
|
|
4795
|
-
var
|
|
5036
|
+
var import_react90 = __toESM(require("react"));
|
|
4796
5037
|
var import_react_hot_toast11 = require("react-hot-toast");
|
|
4797
|
-
var
|
|
4798
|
-
var
|
|
4799
|
-
var ButtonSpinner5 = () => /* @__PURE__ */
|
|
4800
|
-
var
|
|
5038
|
+
var import_react91 = require("@hugeicons/react");
|
|
5039
|
+
var import_core_free_icons33 = require("@hugeicons/core-free-icons");
|
|
5040
|
+
var ButtonSpinner5 = () => /* @__PURE__ */ import_react90.default.createElement(import_react91.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 16, className: "animate-spin text-current" });
|
|
5041
|
+
var PageSpinner8 = () => /* @__PURE__ */ import_react90.default.createElement("div", { className: "flex justify-center items-center py-12 w-full" }, /* @__PURE__ */ import_react90.default.createElement(import_react91.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 32, className: "animate-spin text-black" }));
|
|
4801
5042
|
var UniversalDeveloperSettings = ({
|
|
4802
5043
|
initialPublicKey,
|
|
4803
5044
|
initialWebhookUrl,
|
|
@@ -4806,12 +5047,12 @@ var UniversalDeveloperSettings = ({
|
|
|
4806
5047
|
onGenerateKeys,
|
|
4807
5048
|
onSaveWebhook
|
|
4808
5049
|
}) => {
|
|
4809
|
-
const [publicKey, setPublicKey] = (0,
|
|
4810
|
-
const [webhookUrl, setWebhookUrl] = (0,
|
|
4811
|
-
const [isGenerating, setIsGenerating] = (0,
|
|
4812
|
-
const [isSavingWebhook, setIsSavingWebhook] = (0,
|
|
4813
|
-
const [isRollModalOpen, setIsRollModalOpen] = (0,
|
|
4814
|
-
(0,
|
|
5050
|
+
const [publicKey, setPublicKey] = (0, import_react90.useState)(initialPublicKey);
|
|
5051
|
+
const [webhookUrl, setWebhookUrl] = (0, import_react90.useState)(initialWebhookUrl);
|
|
5052
|
+
const [isGenerating, setIsGenerating] = (0, import_react90.useState)(false);
|
|
5053
|
+
const [isSavingWebhook, setIsSavingWebhook] = (0, import_react90.useState)(false);
|
|
5054
|
+
const [isRollModalOpen, setIsRollModalOpen] = (0, import_react90.useState)(false);
|
|
5055
|
+
(0, import_react90.useEffect)(() => {
|
|
4815
5056
|
setPublicKey(initialPublicKey || "");
|
|
4816
5057
|
setWebhookUrl(initialWebhookUrl || "");
|
|
4817
5058
|
}, [initialPublicKey, initialWebhookUrl]);
|
|
@@ -4871,7 +5112,7 @@ SECRET_KEY="${secKey}"
|
|
|
4871
5112
|
};
|
|
4872
5113
|
const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
|
|
4873
5114
|
const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
|
|
4874
|
-
return /* @__PURE__ */
|
|
5115
|
+
return /* @__PURE__ */ import_react90.default.createElement("div", { className: "flex flex-col max-w-5xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react90.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react90.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react90.default.createElement("h1", { className: " text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ import_react90.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ import_react90.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_react90.default.createElement(import_react91.HugeiconsIcon, { icon: import_core_free_icons33.CircleLock02Icon, size: 18, className: "text-current" }))), isLoading ? /* @__PURE__ */ import_react90.default.createElement(PageSpinner8, null) : /* @__PURE__ */ import_react90.default.createElement("div", { className: "w-full max-w-5xl flex flex-col gap-12" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react90.default.createElement(
|
|
4875
5116
|
TextInput,
|
|
4876
5117
|
{
|
|
4877
5118
|
label: "Public Key",
|
|
@@ -4880,7 +5121,7 @@ SECRET_KEY="${secKey}"
|
|
|
4880
5121
|
},
|
|
4881
5122
|
disabled: true
|
|
4882
5123
|
}
|
|
4883
|
-
), /* @__PURE__ */
|
|
5124
|
+
), /* @__PURE__ */ import_react90.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_react90.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react90.default.createElement(
|
|
4884
5125
|
ThreeDActionButton,
|
|
4885
5126
|
{
|
|
4886
5127
|
onClick: () => {
|
|
@@ -4892,7 +5133,7 @@ SECRET_KEY="${secKey}"
|
|
|
4892
5133
|
className: "w-fit"
|
|
4893
5134
|
},
|
|
4894
5135
|
publicKey ? "Roll API Keys" : "Generate Keys"
|
|
4895
|
-
))), /* @__PURE__ */
|
|
5136
|
+
))), /* @__PURE__ */ import_react90.default.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react90.default.createElement(
|
|
4896
5137
|
TextInput,
|
|
4897
5138
|
{
|
|
4898
5139
|
label: "Webhook URL",
|
|
@@ -4902,7 +5143,7 @@ SECRET_KEY="${secKey}"
|
|
|
4902
5143
|
placeholder: "https://your-domain.com/webhook",
|
|
4903
5144
|
type: "url"
|
|
4904
5145
|
}
|
|
4905
|
-
), /* @__PURE__ */
|
|
5146
|
+
), /* @__PURE__ */ import_react90.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_react90.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react90.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block truncate " }, "Webhook Status"), /* @__PURE__ */ import_react90.default.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ import_react90.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_react90.default.createElement(
|
|
4906
5147
|
"button",
|
|
4907
5148
|
{
|
|
4908
5149
|
type: "button",
|
|
@@ -4910,7 +5151,7 @@ SECRET_KEY="${secKey}"
|
|
|
4910
5151
|
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"
|
|
4911
5152
|
},
|
|
4912
5153
|
"Cancel"
|
|
4913
|
-
), /* @__PURE__ */
|
|
5154
|
+
), /* @__PURE__ */ import_react90.default.createElement(
|
|
4914
5155
|
ThreeDActionButton,
|
|
4915
5156
|
{
|
|
4916
5157
|
type: "submit",
|
|
@@ -4919,7 +5160,7 @@ SECRET_KEY="${secKey}"
|
|
|
4919
5160
|
className: "min-w-32 w-full sm:w-auto"
|
|
4920
5161
|
},
|
|
4921
5162
|
"Save Webhook"
|
|
4922
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */
|
|
5163
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ import_react90.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react90.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ import_react90.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_react90.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react90.default.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ import_react90.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_react90.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react90.default.createElement(
|
|
4923
5164
|
"button",
|
|
4924
5165
|
{
|
|
4925
5166
|
onClick: () => setIsRollModalOpen(false),
|
|
@@ -4927,30 +5168,30 @@ SECRET_KEY="${secKey}"
|
|
|
4927
5168
|
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
4928
5169
|
},
|
|
4929
5170
|
"Cancel"
|
|
4930
|
-
), /* @__PURE__ */
|
|
5171
|
+
), /* @__PURE__ */ import_react90.default.createElement(
|
|
4931
5172
|
"button",
|
|
4932
5173
|
{
|
|
4933
5174
|
onClick: handleGenerateKeys,
|
|
4934
5175
|
disabled: isGenerating,
|
|
4935
5176
|
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"
|
|
4936
5177
|
},
|
|
4937
|
-
isGenerating ? /* @__PURE__ */
|
|
5178
|
+
isGenerating ? /* @__PURE__ */ import_react90.default.createElement(ButtonSpinner5, null) : "Roll Keys"
|
|
4938
5179
|
)))));
|
|
4939
5180
|
};
|
|
4940
5181
|
|
|
4941
5182
|
// src/components/UniversalAppLibrary.tsx
|
|
4942
|
-
var
|
|
4943
|
-
var
|
|
4944
|
-
var
|
|
5183
|
+
var import_react92 = __toESM(require("react"));
|
|
5184
|
+
var import_react93 = require("@hugeicons/react");
|
|
5185
|
+
var import_core_free_icons34 = require("@hugeicons/core-free-icons");
|
|
4945
5186
|
var AppCard = ({ app }) => {
|
|
4946
|
-
const [isLoading, setIsLoading] = (0,
|
|
4947
|
-
return /* @__PURE__ */
|
|
5187
|
+
const [isLoading, setIsLoading] = (0, import_react92.useState)(true);
|
|
5188
|
+
return /* @__PURE__ */ import_react92.default.createElement(
|
|
4948
5189
|
"button",
|
|
4949
5190
|
{
|
|
4950
5191
|
onClick: app.onClick,
|
|
4951
5192
|
className: "flex flex-col gap-3 group cursor-pointer w-25 shrink-0 text-left outline-none"
|
|
4952
5193
|
},
|
|
4953
|
-
/* @__PURE__ */
|
|
5194
|
+
/* @__PURE__ */ import_react92.default.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ import_react92.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react92.default.createElement(import_react93.HugeiconsIcon, { icon: import_core_free_icons34.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react92.default.createElement(
|
|
4954
5195
|
"img",
|
|
4955
5196
|
{
|
|
4956
5197
|
src: app.logoSrc,
|
|
@@ -4960,7 +5201,7 @@ var AppCard = ({ app }) => {
|
|
|
4960
5201
|
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
4961
5202
|
}
|
|
4962
5203
|
)),
|
|
4963
|
-
/* @__PURE__ */
|
|
5204
|
+
/* @__PURE__ */ import_react92.default.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
|
|
4964
5205
|
);
|
|
4965
5206
|
};
|
|
4966
5207
|
var UniversalAppLibrary = ({
|
|
@@ -4968,18 +5209,18 @@ var UniversalAppLibrary = ({
|
|
|
4968
5209
|
headline,
|
|
4969
5210
|
categories
|
|
4970
5211
|
}) => {
|
|
4971
|
-
return /* @__PURE__ */
|
|
5212
|
+
return /* @__PURE__ */ import_react92.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "max-w-6xl w-full" }, (tagline || headline) && /* @__PURE__ */ import_react92.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ import_react92.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), headline && /* @__PURE__ */ import_react92.default.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, headline))), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex flex-col gap-14" }, categories.map((category) => /* @__PURE__ */ import_react92.default.createElement("div", { key: category.id, className: "flex flex-col" }, /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex items-end justify-between mb-5 px-1" }, /* @__PURE__ */ import_react92.default.createElement("h3", { className: "text-lg text-black tracking-tight " }, category.title), category.onSeeMore && /* @__PURE__ */ import_react92.default.createElement(
|
|
4972
5213
|
"button",
|
|
4973
5214
|
{
|
|
4974
5215
|
onClick: category.onSeeMore,
|
|
4975
5216
|
className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors outline-none shrink-0 ml-4 pb-0.5"
|
|
4976
5217
|
},
|
|
4977
5218
|
category.seeMoreLabel || "See More"
|
|
4978
|
-
)), /* @__PURE__ */
|
|
5219
|
+
)), /* @__PURE__ */ import_react92.default.createElement("div", { className: "flex gap-4 sm:gap-6 overflow-x-auto pb-6 pt-2 -mx-4 px-4 sm:mx-0 sm:px-1 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none" }, category.apps.map((app) => /* @__PURE__ */ import_react92.default.createElement(AppCard, { key: app.id, app }))), /* @__PURE__ */ import_react92.default.createElement("div", { className: "w-full h-px mt-2 last-of-type:hidden" })))))));
|
|
4979
5220
|
};
|
|
4980
5221
|
|
|
4981
5222
|
// src/components/MedicalFeatureStatsBlock.tsx
|
|
4982
|
-
var
|
|
5223
|
+
var import_react94 = __toESM(require("react"));
|
|
4983
5224
|
var import_image11 = __toESM(require("next/image"));
|
|
4984
5225
|
var MedicalFeatureStatsBlock = ({
|
|
4985
5226
|
bottomHeadline,
|
|
@@ -4988,9 +5229,9 @@ var MedicalFeatureStatsBlock = ({
|
|
|
4988
5229
|
trustText,
|
|
4989
5230
|
stats
|
|
4990
5231
|
}) => {
|
|
4991
|
-
const [isAnimating, setIsAnimating] = (0,
|
|
4992
|
-
const titleRef = (0,
|
|
4993
|
-
(0,
|
|
5232
|
+
const [isAnimating, setIsAnimating] = (0, import_react94.useState)(false);
|
|
5233
|
+
const titleRef = (0, import_react94.useRef)(null);
|
|
5234
|
+
(0, import_react94.useEffect)(() => {
|
|
4994
5235
|
const observer = new IntersectionObserver(
|
|
4995
5236
|
([entry]) => {
|
|
4996
5237
|
if (entry.isIntersecting) {
|
|
@@ -5008,7 +5249,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
5008
5249
|
}
|
|
5009
5250
|
return () => observer.disconnect();
|
|
5010
5251
|
}, []);
|
|
5011
|
-
return /* @__PURE__ */
|
|
5252
|
+
return /* @__PURE__ */ import_react94.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react94.default.createElement(
|
|
5012
5253
|
"h2",
|
|
5013
5254
|
{
|
|
5014
5255
|
ref: titleRef,
|
|
@@ -5016,7 +5257,7 @@ var MedicalFeatureStatsBlock = ({
|
|
|
5016
5257
|
style: isAnimating ? { animationIterationCount: 1 } : {}
|
|
5017
5258
|
},
|
|
5018
5259
|
bottomHeadline
|
|
5019
|
-
), /* @__PURE__ */
|
|
5260
|
+
), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react94.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_react94.default.createElement(
|
|
5020
5261
|
import_image11.default,
|
|
5021
5262
|
{
|
|
5022
5263
|
src,
|
|
@@ -5025,17 +5266,17 @@ var MedicalFeatureStatsBlock = ({
|
|
|
5025
5266
|
sizes: "48px",
|
|
5026
5267
|
className: "object-cover"
|
|
5027
5268
|
}
|
|
5028
|
-
)))), /* @__PURE__ */
|
|
5269
|
+
)))), /* @__PURE__ */ import_react94.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react94.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react94.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react94.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react94.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react94.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
|
|
5029
5270
|
};
|
|
5030
5271
|
|
|
5031
5272
|
// src/components/ConsultantShowcase.tsx
|
|
5032
|
-
var
|
|
5273
|
+
var import_react95 = __toESM(require("react"));
|
|
5033
5274
|
var import_image12 = __toESM(require("next/image"));
|
|
5034
|
-
var
|
|
5035
|
-
var
|
|
5275
|
+
var import_react96 = require("@hugeicons/react");
|
|
5276
|
+
var import_core_free_icons35 = require("@hugeicons/core-free-icons");
|
|
5036
5277
|
var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
5037
|
-
const [isLoading, setIsLoading] = (0,
|
|
5038
|
-
return /* @__PURE__ */
|
|
5278
|
+
const [isLoading, setIsLoading] = (0, import_react95.useState)(true);
|
|
5279
|
+
return /* @__PURE__ */ import_react95.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react95.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_react95.default.createElement(import_react96.HugeiconsIcon, { icon: import_core_free_icons35.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react95.default.createElement(
|
|
5039
5280
|
import_image12.default,
|
|
5040
5281
|
{
|
|
5041
5282
|
src,
|
|
@@ -5054,9 +5295,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
|
|
|
5054
5295
|
var ConsultantShowcase = ({
|
|
5055
5296
|
profiles
|
|
5056
5297
|
}) => {
|
|
5057
|
-
const [currentIndex, setCurrentIndex] = (0,
|
|
5058
|
-
const [touchStart, setTouchStart] = (0,
|
|
5059
|
-
const [touchEnd, setTouchEnd] = (0,
|
|
5298
|
+
const [currentIndex, setCurrentIndex] = (0, import_react95.useState)(0);
|
|
5299
|
+
const [touchStart, setTouchStart] = (0, import_react95.useState)(null);
|
|
5300
|
+
const [touchEnd, setTouchEnd] = (0, import_react95.useState)(null);
|
|
5060
5301
|
const nextSlide = () => {
|
|
5061
5302
|
setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
|
|
5062
5303
|
};
|
|
@@ -5081,7 +5322,7 @@ var ConsultantShowcase = ({
|
|
|
5081
5322
|
}
|
|
5082
5323
|
};
|
|
5083
5324
|
if (!profiles || profiles.length === 0) return null;
|
|
5084
|
-
return /* @__PURE__ */
|
|
5325
|
+
return /* @__PURE__ */ import_react95.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react95.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react95.default.createElement(
|
|
5085
5326
|
"div",
|
|
5086
5327
|
{
|
|
5087
5328
|
className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
|
|
@@ -5091,13 +5332,13 @@ var ConsultantShowcase = ({
|
|
|
5091
5332
|
},
|
|
5092
5333
|
profiles.map((profile, idx) => {
|
|
5093
5334
|
const isActive = idx === currentIndex;
|
|
5094
|
-
return /* @__PURE__ */
|
|
5335
|
+
return /* @__PURE__ */ import_react95.default.createElement(
|
|
5095
5336
|
"div",
|
|
5096
5337
|
{
|
|
5097
5338
|
key: profile.id,
|
|
5098
5339
|
className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
|
|
5099
5340
|
},
|
|
5100
|
-
/* @__PURE__ */
|
|
5341
|
+
/* @__PURE__ */ import_react95.default.createElement(
|
|
5101
5342
|
ImageWithLoader,
|
|
5102
5343
|
{
|
|
5103
5344
|
src: profile.imageSrc,
|
|
@@ -5105,14 +5346,14 @@ var ConsultantShowcase = ({
|
|
|
5105
5346
|
priority: idx === 0
|
|
5106
5347
|
}
|
|
5107
5348
|
),
|
|
5108
|
-
/* @__PURE__ */
|
|
5109
|
-
/* @__PURE__ */
|
|
5110
|
-
/* @__PURE__ */
|
|
5349
|
+
/* @__PURE__ */ import_react95.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
|
|
5350
|
+
/* @__PURE__ */ import_react95.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" }),
|
|
5351
|
+
/* @__PURE__ */ import_react95.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_react95.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react95.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react95.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react95.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
|
|
5111
5352
|
);
|
|
5112
5353
|
}),
|
|
5113
|
-
/* @__PURE__ */
|
|
5114
|
-
/* @__PURE__ */
|
|
5115
|
-
/* @__PURE__ */
|
|
5354
|
+
/* @__PURE__ */ import_react95.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" }),
|
|
5355
|
+
/* @__PURE__ */ import_react95.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" }),
|
|
5356
|
+
/* @__PURE__ */ import_react95.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_react95.default.createElement(
|
|
5116
5357
|
"button",
|
|
5117
5358
|
{
|
|
5118
5359
|
key: idx,
|
|
@@ -5125,10 +5366,10 @@ var ConsultantShowcase = ({
|
|
|
5125
5366
|
};
|
|
5126
5367
|
|
|
5127
5368
|
// src/components/ContentGridBlock.tsx
|
|
5128
|
-
var
|
|
5369
|
+
var import_react97 = __toESM(require("react"));
|
|
5129
5370
|
var import_image13 = __toESM(require("next/image"));
|
|
5130
|
-
var
|
|
5131
|
-
var
|
|
5371
|
+
var import_react98 = require("@hugeicons/react");
|
|
5372
|
+
var import_core_free_icons36 = require("@hugeicons/core-free-icons");
|
|
5132
5373
|
var ContentGridBlock = ({
|
|
5133
5374
|
header,
|
|
5134
5375
|
leftCard,
|
|
@@ -5136,23 +5377,23 @@ var ContentGridBlock = ({
|
|
|
5136
5377
|
middleBottomCard,
|
|
5137
5378
|
rightCards
|
|
5138
5379
|
}) => {
|
|
5139
|
-
return /* @__PURE__ */
|
|
5380
|
+
return /* @__PURE__ */ import_react97.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react97.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react97.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react97.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react97.default.createElement("div", null, /* @__PURE__ */ import_react97.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react97.default.createElement(import_image13.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react97.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react97.default.createElement(import_image13.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react97.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_react97.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react97.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react97.default.createElement("div", null, /* @__PURE__ */ import_react97.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react97.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react97.default.createElement(import_image13.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react97.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react97.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react97.default.createElement("div", { key: idx, className: "relative w-full h-80 bg-[#2027d7] rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react97.default.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ import_react97.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react97.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react97.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react97.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react97.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
|
|
5140
5381
|
};
|
|
5141
5382
|
|
|
5142
5383
|
// src/components/UniversalAppDetails.tsx
|
|
5143
|
-
var
|
|
5144
|
-
var
|
|
5145
|
-
var
|
|
5384
|
+
var import_react99 = __toESM(require("react"));
|
|
5385
|
+
var import_react100 = require("@hugeicons/react");
|
|
5386
|
+
var import_core_free_icons37 = require("@hugeicons/core-free-icons");
|
|
5146
5387
|
var ScreenshotCard = ({ src, alt, onClick }) => {
|
|
5147
|
-
const [isLoading, setIsLoading] = (0,
|
|
5148
|
-
return /* @__PURE__ */
|
|
5388
|
+
const [isLoading, setIsLoading] = (0, import_react99.useState)(true);
|
|
5389
|
+
return /* @__PURE__ */ import_react99.default.createElement(
|
|
5149
5390
|
"button",
|
|
5150
5391
|
{
|
|
5151
5392
|
onClick,
|
|
5152
5393
|
className: "relative w-28 sm:w-32 aspect-9/19 shrink-0 rounded-2xl overflow-hidden bg-neutral-100 border border-neutral-200/50 outline-none hover:opacity-90 transition-opacity"
|
|
5153
5394
|
},
|
|
5154
|
-
isLoading && /* @__PURE__ */
|
|
5155
|
-
/* @__PURE__ */
|
|
5395
|
+
isLoading && /* @__PURE__ */ import_react99.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })),
|
|
5396
|
+
/* @__PURE__ */ import_react99.default.createElement(
|
|
5156
5397
|
"img",
|
|
5157
5398
|
{
|
|
5158
5399
|
src,
|
|
@@ -5165,8 +5406,8 @@ var ScreenshotCard = ({ src, alt, onClick }) => {
|
|
|
5165
5406
|
);
|
|
5166
5407
|
};
|
|
5167
5408
|
var LightboxImage = ({ src }) => {
|
|
5168
|
-
const [isLoading, setIsLoading] = (0,
|
|
5169
|
-
return /* @__PURE__ */
|
|
5409
|
+
const [isLoading, setIsLoading] = (0, import_react99.useState)(true);
|
|
5410
|
+
return /* @__PURE__ */ import_react99.default.createElement("div", { className: "relative w-full h-full flex items-center justify-center p-4" }, isLoading && /* @__PURE__ */ import_react99.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10" }, /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.Loading03Icon, size: 32, className: "animate-spin text-white" })), /* @__PURE__ */ import_react99.default.createElement(
|
|
5170
5411
|
"img",
|
|
5171
5412
|
{
|
|
5172
5413
|
src,
|
|
@@ -5177,9 +5418,9 @@ var LightboxImage = ({ src }) => {
|
|
|
5177
5418
|
));
|
|
5178
5419
|
};
|
|
5179
5420
|
var UniversalAppDetails = ({ app, onBack }) => {
|
|
5180
|
-
const [isLogoLoading, setIsLogoLoading] = (0,
|
|
5181
|
-
const [isDescExpanded, setIsDescExpanded] = (0,
|
|
5182
|
-
const [lightboxIndex, setLightboxIndex] = (0,
|
|
5421
|
+
const [isLogoLoading, setIsLogoLoading] = (0, import_react99.useState)(true);
|
|
5422
|
+
const [isDescExpanded, setIsDescExpanded] = (0, import_react99.useState)(false);
|
|
5423
|
+
const [lightboxIndex, setLightboxIndex] = (0, import_react99.useState)(null);
|
|
5183
5424
|
const MAX_DESC_LENGTH = 150;
|
|
5184
5425
|
const isDescLong = app.description.length > MAX_DESC_LENGTH;
|
|
5185
5426
|
const displayDesc = isDescExpanded || !isDescLong ? app.description : `${app.description.substring(0, MAX_DESC_LENGTH)}...`;
|
|
@@ -5193,7 +5434,7 @@ var UniversalAppDetails = ({ app, onBack }) => {
|
|
|
5193
5434
|
setLightboxIndex(lightboxIndex === app.screenshots.length - 1 ? 0 : lightboxIndex + 1);
|
|
5194
5435
|
}
|
|
5195
5436
|
};
|
|
5196
|
-
return /* @__PURE__ */
|
|
5437
|
+
return /* @__PURE__ */ import_react99.default.createElement("div", { className: "w-full max-w-3xl mx-auto pt-10 pb-20 px-6 min-h-screen flex flex-col items-center" }, /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col sm:flex-row items-start gap-4 w-full mb-10 text-left" }, /* @__PURE__ */ import_react99.default.createElement("div", { className: "relative w-20 h-20 sm:w-20 sm:h-20 md:w-24 md:h-24 lg:w-28 lg:h-28 shrink-0 rounded-2xl overflow-hidden flex items-center justify-center border border-neutral-100/50 bg-neutral-50" }, isLogoLoading && /* @__PURE__ */ import_react99.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100 animate-pulse" }), /* @__PURE__ */ import_react99.default.createElement(
|
|
5197
5438
|
"img",
|
|
5198
5439
|
{
|
|
5199
5440
|
src: app.logoSrc,
|
|
@@ -5201,15 +5442,15 @@ var UniversalAppDetails = ({ app, onBack }) => {
|
|
|
5201
5442
|
onLoad: () => setIsLogoLoading(false),
|
|
5202
5443
|
className: `w-full h-full object-cover transition-opacity duration-300 z-20 ${isLogoLoading ? "opacity-0" : "opacity-100"}`
|
|
5203
5444
|
}
|
|
5204
|
-
)), /* @__PURE__ */
|
|
5445
|
+
)), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col justify-center pt-1 min-w-0" }, /* @__PURE__ */ import_react99.default.createElement("h1", { className: "text-xl text-black leading-tight mb-1 " }, /* @__PURE__ */ import_react99.default.createElement("span", { className: "block truncate" }, app.name)), /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-xs mt-1 text-neutral-400 truncate max-w-full" }, app.tagline), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-wrap items-center mt-4 gap-8 w-full" }, /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex items-center gap-1.5 h-6 text-neutral-800" }, app.platforms.android && /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.AndroidIcon, size: 18 }), app.platforms.ios && /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.AppleIcon, size: 18 })), /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Platforms")), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-sm h-6 flex items-center text-neutral-800 truncate" }, app.stats.type), /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Type")), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-sm h-6 flex items-center text-neutral-800 truncate" }, app.stats.size), /* @__PURE__ */ import_react99.default.createElement("span", { className: "text-[10px] text-neutral-400 mt-1" }, "Size"))))), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 items-center w-full mx-auto mb-12" }, app.ctaText && app.ctaHref && /* @__PURE__ */ import_react99.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react99.default.createElement(ThreeDButton, { href: app.ctaHref }, /* @__PURE__ */ import_react99.default.createElement("span", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.Download01Icon, size: 16 }), app.ctaText))), app.secondaryCtaText && app.secondaryCtaHref && /* @__PURE__ */ import_react99.default.createElement(
|
|
5205
5446
|
"a",
|
|
5206
5447
|
{
|
|
5207
5448
|
href: app.secondaryCtaHref,
|
|
5208
5449
|
className: "w-full sm:w-60 inline-flex items-center justify-center gap-2 text-[11px] tracking-widest rounded-full px-8 py-2.5 border border-neutral-100 text-center text-black hover:bg-neutral-50 outline-none transition-colors"
|
|
5209
5450
|
},
|
|
5210
|
-
/* @__PURE__ */
|
|
5451
|
+
/* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.Bookmark02Icon, size: 16 }),
|
|
5211
5452
|
app.secondaryCtaText
|
|
5212
|
-
)), /* @__PURE__ */
|
|
5453
|
+
)), /* @__PURE__ */ import_react99.default.createElement("div", { className: "w-full mb-12" }, /* @__PURE__ */ import_react99.default.createElement("h2", { className: "text-xl text-black mb-4" }, "About"), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex gap-3 overflow-x-auto pb-4 scrollbar-hide -mx-6 px-6" }, app.screenshots.map((src, idx) => /* @__PURE__ */ import_react99.default.createElement(
|
|
5213
5454
|
ScreenshotCard,
|
|
5214
5455
|
{
|
|
5215
5456
|
key: idx,
|
|
@@ -5217,43 +5458,43 @@ var UniversalAppDetails = ({ app, onBack }) => {
|
|
|
5217
5458
|
alt: `${app.name} Screenshot ${idx + 1}`,
|
|
5218
5459
|
onClick: () => setLightboxIndex(idx)
|
|
5219
5460
|
}
|
|
5220
|
-
))), /* @__PURE__ */
|
|
5461
|
+
))), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex items-end text-neutral-500 text-sm leading-relaxed mt-2" }, /* @__PURE__ */ import_react99.default.createElement("p", { className: "flex-1 whitespace-pre-wrap" }, displayDesc), isDescLong && /* @__PURE__ */ import_react99.default.createElement(
|
|
5221
5462
|
"button",
|
|
5222
5463
|
{
|
|
5223
5464
|
onClick: () => setIsDescExpanded(!isDescExpanded),
|
|
5224
5465
|
className: "ml-2 mb-0.5 text-neutral-400 hover:text-black transition-colors outline-none shrink-0"
|
|
5225
5466
|
},
|
|
5226
|
-
/* @__PURE__ */
|
|
5227
|
-
|
|
5467
|
+
/* @__PURE__ */ import_react99.default.createElement(
|
|
5468
|
+
import_react100.HugeiconsIcon,
|
|
5228
5469
|
{
|
|
5229
|
-
icon:
|
|
5470
|
+
icon: import_core_free_icons37.ArrowDown01Icon,
|
|
5230
5471
|
size: 18,
|
|
5231
5472
|
className: `transform transition-transform ${isDescExpanded ? "rotate-180" : ""}`
|
|
5232
5473
|
}
|
|
5233
5474
|
)
|
|
5234
|
-
))), lightboxIndex !== null && /* @__PURE__ */
|
|
5475
|
+
))), lightboxIndex !== null && /* @__PURE__ */ import_react99.default.createElement("div", { className: "fixed inset-0 z-50 bg-black/30 flex flex-col" }, /* @__PURE__ */ import_react99.default.createElement("div", { className: "w-full p-4 sm:p-6 flex justify-end" }, /* @__PURE__ */ import_react99.default.createElement(
|
|
5235
5476
|
"button",
|
|
5236
5477
|
{
|
|
5237
5478
|
onClick: () => setLightboxIndex(null),
|
|
5238
5479
|
className: "p-3 text-white bg-white/30 rounded-full transition-colors outline-none"
|
|
5239
5480
|
},
|
|
5240
|
-
/* @__PURE__ */
|
|
5241
|
-
)), /* @__PURE__ */
|
|
5481
|
+
/* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.Cancel01Icon, size: 24 })
|
|
5482
|
+
)), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex-1 flex items-center justify-between px-4 sm:px-10 pb-10" }, /* @__PURE__ */ import_react99.default.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.ArrowLeft01Icon, size: 24 })), /* @__PURE__ */ import_react99.default.createElement("div", { className: "flex-1 h-full max-h-[80vh]" }, /* @__PURE__ */ import_react99.default.createElement(LightboxImage, { src: app.screenshots[lightboxIndex] })), /* @__PURE__ */ import_react99.default.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.ArrowRight01Icon, size: 24 }))), /* @__PURE__ */ import_react99.default.createElement("div", { className: "sm:hidden flex justify-between px-8 pb-12 w-full" }, /* @__PURE__ */ import_react99.default.createElement("button", { onClick: handlePrev, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.ArrowLeft01Icon, size: 24 })), /* @__PURE__ */ import_react99.default.createElement("button", { onClick: handleNext, className: "p-3 text-white bg-white/30 rounded-full" }, /* @__PURE__ */ import_react99.default.createElement(import_react100.HugeiconsIcon, { icon: import_core_free_icons37.ArrowRight01Icon, size: 24 })))));
|
|
5242
5483
|
};
|
|
5243
5484
|
|
|
5244
5485
|
// src/components/UniversalAppCategoryGrid.tsx
|
|
5245
|
-
var
|
|
5246
|
-
var
|
|
5247
|
-
var
|
|
5486
|
+
var import_react101 = __toESM(require("react"));
|
|
5487
|
+
var import_react102 = require("@hugeicons/react");
|
|
5488
|
+
var import_core_free_icons38 = require("@hugeicons/core-free-icons");
|
|
5248
5489
|
var AppGridCard = ({ app }) => {
|
|
5249
|
-
const [isLoading, setIsLoading] = (0,
|
|
5250
|
-
return /* @__PURE__ */
|
|
5490
|
+
const [isLoading, setIsLoading] = (0, import_react101.useState)(true);
|
|
5491
|
+
return /* @__PURE__ */ import_react101.default.createElement(
|
|
5251
5492
|
"button",
|
|
5252
5493
|
{
|
|
5253
5494
|
onClick: app.onClick,
|
|
5254
5495
|
className: "flex flex-col gap-3 group cursor-pointer w-25 text-left outline-none"
|
|
5255
5496
|
},
|
|
5256
|
-
/* @__PURE__ */
|
|
5497
|
+
/* @__PURE__ */ import_react101.default.createElement("div", { className: "relative w-full aspect-square rounded-2xl bg-white overflow-hidden transition-all duration-300 flex items-center justify-center" }, isLoading && /* @__PURE__ */ import_react101.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-50/50" }, /* @__PURE__ */ import_react101.default.createElement(import_react102.HugeiconsIcon, { icon: import_core_free_icons38.Loading03Icon, size: 24, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react101.default.createElement(
|
|
5257
5498
|
"img",
|
|
5258
5499
|
{
|
|
5259
5500
|
src: app.logoSrc,
|
|
@@ -5263,7 +5504,7 @@ var AppGridCard = ({ app }) => {
|
|
|
5263
5504
|
className: `w-full h-full object-cover transition-all duration-700 ease-out z-20 ${isLoading ? "opacity-0 scale-95 blur-md" : "opacity-100 scale-100 blur-0"}`
|
|
5264
5505
|
}
|
|
5265
5506
|
)),
|
|
5266
|
-
/* @__PURE__ */
|
|
5507
|
+
/* @__PURE__ */ import_react101.default.createElement("div", { className: "flex flex-col min-w-0 px-1" }, /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-[13px] text-black tracking-tight truncate group-hover:text-neutral-600 transition-colors" }, app.name), /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-wide truncate mt-0.5" }, app.category))
|
|
5267
5508
|
);
|
|
5268
5509
|
};
|
|
5269
5510
|
var UniversalAppCategoryGrid = ({
|
|
@@ -5271,7 +5512,7 @@ var UniversalAppCategoryGrid = ({
|
|
|
5271
5512
|
categoryTitle,
|
|
5272
5513
|
apps
|
|
5273
5514
|
}) => {
|
|
5274
|
-
return /* @__PURE__ */
|
|
5515
|
+
return /* @__PURE__ */ import_react101.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react101.default.createElement("div", { className: "relative z-10" }, tagline && /* @__PURE__ */ import_react101.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), categoryTitle && /* @__PURE__ */ import_react101.default.createElement("h2", { className: "text-2xl sm:text-3xl tracking-tight text-black leading-[1.1]" }, categoryTitle))), /* @__PURE__ */ import_react101.default.createElement("div", { className: "grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-4 sm:gap-6 px-1" }, apps.map((app) => /* @__PURE__ */ import_react101.default.createElement(AppGridCard, { key: app.id, app }))))));
|
|
5275
5516
|
};
|
|
5276
5517
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5277
5518
|
0 && (module.exports = {
|
|
@@ -5280,6 +5521,7 @@ var UniversalAppCategoryGrid = ({
|
|
|
5280
5521
|
AiStageCheck,
|
|
5281
5522
|
AppBento2,
|
|
5282
5523
|
Banner,
|
|
5524
|
+
CardLogo,
|
|
5283
5525
|
ConsultantShowcase,
|
|
5284
5526
|
ContentGridBlock,
|
|
5285
5527
|
DriveItemOpener,
|
|
@@ -5321,6 +5563,7 @@ var UniversalAppCategoryGrid = ({
|
|
|
5321
5563
|
UniversalDirectoryPage,
|
|
5322
5564
|
UniversalDriveView,
|
|
5323
5565
|
UniversalErrorView,
|
|
5566
|
+
UniversalHomeView,
|
|
5324
5567
|
UniversalIdentityPage,
|
|
5325
5568
|
UniversalLookupPage,
|
|
5326
5569
|
UniversalMembersPage,
|
|
@@ -5331,6 +5574,7 @@ var UniversalAppCategoryGrid = ({
|
|
|
5331
5574
|
UniversalSidebar,
|
|
5332
5575
|
UniversalTransactionPage,
|
|
5333
5576
|
UniversalTrashView,
|
|
5577
|
+
UniversalWalletPage,
|
|
5334
5578
|
ZairusAuth,
|
|
5335
5579
|
ZairusShareCard
|
|
5336
5580
|
});
|