@retinalabsllc/zairusjs 5.1.5 → 5.1.10
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 +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +112 -48
- package/dist/index.mjs +112 -48
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1035,7 +1035,7 @@ interface UniversalTransactionPageProps {
|
|
|
1035
1035
|
activeTypeFilter: string;
|
|
1036
1036
|
onTypeFilterChange: (type: string) => void;
|
|
1037
1037
|
onReportTransaction?: (tx: UniversalTransaction) => void;
|
|
1038
|
-
onGenerateReceipt?: (tx: UniversalTransaction) => void
|
|
1038
|
+
onGenerateReceipt?: (tx: UniversalTransaction) => void | Promise<void>;
|
|
1039
1039
|
}
|
|
1040
1040
|
declare const UniversalTransactionPage: React.FC<UniversalTransactionPageProps>;
|
|
1041
1041
|
|
|
@@ -1079,6 +1079,7 @@ interface UniversalWalletPageProps {
|
|
|
1079
1079
|
headerDescription?: string;
|
|
1080
1080
|
hideControls?: boolean;
|
|
1081
1081
|
hideBalanceAmounts?: boolean;
|
|
1082
|
+
isGeneratingStatement?: boolean;
|
|
1082
1083
|
wallets: UniversalWallet[];
|
|
1083
1084
|
isLoading?: boolean;
|
|
1084
1085
|
renderQrCode?: (wallet: UniversalWallet) => React.ReactNode;
|
package/dist/index.d.ts
CHANGED
|
@@ -1035,7 +1035,7 @@ interface UniversalTransactionPageProps {
|
|
|
1035
1035
|
activeTypeFilter: string;
|
|
1036
1036
|
onTypeFilterChange: (type: string) => void;
|
|
1037
1037
|
onReportTransaction?: (tx: UniversalTransaction) => void;
|
|
1038
|
-
onGenerateReceipt?: (tx: UniversalTransaction) => void
|
|
1038
|
+
onGenerateReceipt?: (tx: UniversalTransaction) => void | Promise<void>;
|
|
1039
1039
|
}
|
|
1040
1040
|
declare const UniversalTransactionPage: React.FC<UniversalTransactionPageProps>;
|
|
1041
1041
|
|
|
@@ -1079,6 +1079,7 @@ interface UniversalWalletPageProps {
|
|
|
1079
1079
|
headerDescription?: string;
|
|
1080
1080
|
hideControls?: boolean;
|
|
1081
1081
|
hideBalanceAmounts?: boolean;
|
|
1082
|
+
isGeneratingStatement?: boolean;
|
|
1082
1083
|
wallets: UniversalWallet[];
|
|
1083
1084
|
isLoading?: boolean;
|
|
1084
1085
|
renderQrCode?: (wallet: UniversalWallet) => React.ReactNode;
|
package/dist/index.js
CHANGED
|
@@ -784,7 +784,7 @@ function AuthFormInner2({
|
|
|
784
784
|
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer",
|
|
785
785
|
required: true
|
|
786
786
|
}
|
|
787
|
-
), /* @__PURE__ */ import_react6.default.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ import_react6.default.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6]
|
|
787
|
+
), /* @__PURE__ */ import_react6.default.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ import_react6.default.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6] " }, "Terms of Service"), " and ", /* @__PURE__ */ import_react6.default.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6] " }, "Privacy Policy"), "."))), /* @__PURE__ */ import_react6.default.createElement(
|
|
788
788
|
ThreeDActionButton,
|
|
789
789
|
{
|
|
790
790
|
type: "submit",
|
|
@@ -2444,7 +2444,7 @@ var UniversalOrganizationPage = ({
|
|
|
2444
2444
|
};
|
|
2445
2445
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== initialSlug;
|
|
2446
2446
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
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" }, "
|
|
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" }, "Public 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(
|
|
2448
2448
|
TextInput,
|
|
2449
2449
|
{
|
|
2450
2450
|
label: "Display Name",
|
|
@@ -3918,6 +3918,7 @@ var UniversalTrashView = ({
|
|
|
3918
3918
|
// src/components/UniversalTransactionPage.tsx
|
|
3919
3919
|
var import_react72 = __toESM(require("react"));
|
|
3920
3920
|
var import_react73 = require("@hugeicons/react");
|
|
3921
|
+
var import_react_hot_toast10 = __toESM(require("react-hot-toast"));
|
|
3921
3922
|
var import_core_free_icons25 = require("@hugeicons/core-free-icons");
|
|
3922
3923
|
var PageSpinner6 = () => /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
3923
3924
|
var formatDate3 = (dateInput) => {
|
|
@@ -3951,6 +3952,7 @@ var UniversalTransactionPage = ({
|
|
|
3951
3952
|
onGenerateReceipt
|
|
3952
3953
|
}) => {
|
|
3953
3954
|
const [selectedTransaction, setSelectedTransaction] = (0, import_react72.useState)(null);
|
|
3955
|
+
const [isGeneratingReceipt, setIsGeneratingReceipt] = (0, import_react72.useState)(false);
|
|
3954
3956
|
const [localSearchQuery, setLocalSearchQuery] = (0, import_react72.useState)(searchQuery);
|
|
3955
3957
|
const [isTyping, setIsTyping] = (0, import_react72.useState)(false);
|
|
3956
3958
|
const [isDirectionModalOpen, setIsDirectionModalOpen] = (0, import_react72.useState)(false);
|
|
@@ -3987,6 +3989,18 @@ var UniversalTransactionPage = ({
|
|
|
3987
3989
|
if (tx.metadata?.description) return tx.metadata.description;
|
|
3988
3990
|
return tx.type === "CARD_TRANSACTION" ? "Card Transaction" : "Wallet Transaction";
|
|
3989
3991
|
};
|
|
3992
|
+
const handleGenerateReceipt = async () => {
|
|
3993
|
+
if (!onGenerateReceipt || !selectedTransaction) return;
|
|
3994
|
+
setIsGeneratingReceipt(true);
|
|
3995
|
+
try {
|
|
3996
|
+
await onGenerateReceipt(selectedTransaction);
|
|
3997
|
+
import_react_hot_toast10.default.success("Receipt generated successfully.");
|
|
3998
|
+
} catch (error) {
|
|
3999
|
+
import_react_hot_toast10.default.error("Failed to generate receipt.");
|
|
4000
|
+
} finally {
|
|
4001
|
+
setIsGeneratingReceipt(false);
|
|
4002
|
+
}
|
|
4003
|
+
};
|
|
3990
4004
|
const isListLoading = isLoading || isTyping;
|
|
3991
4005
|
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
4006
|
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)`;
|
|
@@ -4041,37 +4055,59 @@ var UniversalTransactionPage = ({
|
|
|
4041
4055
|
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"
|
|
4042
4056
|
},
|
|
4043
4057
|
/* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.ArrowRight01Icon, size: 14 })
|
|
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
|
|
4058
|
+
)))))), 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), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ import_react72.default.createElement(
|
|
4059
|
+
"a",
|
|
4060
|
+
{
|
|
4061
|
+
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
4062
|
+
target: "_blank",
|
|
4063
|
+
rel: "noopener noreferrer",
|
|
4064
|
+
className: "text-[11px] text-[#1f26d6] mt-4 transition-colors tracking-wide"
|
|
4065
|
+
},
|
|
4066
|
+
"View in block explorer"
|
|
4067
|
+
)), /* @__PURE__ */ import_react72.default.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__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())), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
|
|
4068
|
+
if (value === null || value === void 0 || typeof value === "object") return null;
|
|
4069
|
+
const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
4070
|
+
return /* @__PURE__ */ import_react72.default.createElement("div", { key }, /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, formattedKey), /* @__PURE__ */ import_react72.default.createElement("span", { className: "text-[13px] text-black break-all" }, String(value)));
|
|
4071
|
+
})), /* @__PURE__ */ import_react72.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react72.default.createElement(
|
|
4045
4072
|
"button",
|
|
4046
4073
|
{
|
|
4047
|
-
onClick:
|
|
4048
|
-
|
|
4049
|
-
|
|
4074
|
+
onClick: handleGenerateReceipt,
|
|
4075
|
+
disabled: isGeneratingReceipt,
|
|
4076
|
+
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 disabled:opacity-70 disabled:cursor-not-allowed",
|
|
4077
|
+
style: !isGeneratingReceipt ? { boxShadow: primaryBaseShadow } : {},
|
|
4050
4078
|
onMouseEnter: (e) => {
|
|
4051
|
-
|
|
4052
|
-
|
|
4079
|
+
if (!isGeneratingReceipt) {
|
|
4080
|
+
e.currentTarget.style.boxShadow = primaryHoverShadow;
|
|
4081
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4082
|
+
}
|
|
4053
4083
|
},
|
|
4054
4084
|
onMouseLeave: (e) => {
|
|
4055
|
-
|
|
4056
|
-
|
|
4085
|
+
if (!isGeneratingReceipt) {
|
|
4086
|
+
e.currentTarget.style.boxShadow = primaryBaseShadow;
|
|
4087
|
+
e.currentTarget.style.transform = "translateY(0px)";
|
|
4088
|
+
}
|
|
4057
4089
|
},
|
|
4058
4090
|
onMouseDown: (e) => {
|
|
4059
|
-
|
|
4060
|
-
|
|
4091
|
+
if (!isGeneratingReceipt) {
|
|
4092
|
+
e.currentTarget.style.boxShadow = primaryActiveShadow;
|
|
4093
|
+
e.currentTarget.style.transform = "translateY(2px)";
|
|
4094
|
+
}
|
|
4061
4095
|
},
|
|
4062
4096
|
onMouseUp: (e) => {
|
|
4063
|
-
|
|
4097
|
+
if (!isGeneratingReceipt) {
|
|
4098
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4099
|
+
}
|
|
4064
4100
|
}
|
|
4065
4101
|
},
|
|
4066
4102
|
/* @__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" }, "
|
|
4103
|
+
/* @__PURE__ */ import_react72.default.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 text-[13px] tracking-wide" }, isGeneratingReceipt ? /* @__PURE__ */ import_react72.default.createElement(import_react73.HugeiconsIcon, { icon: import_core_free_icons25.Loading03Icon, size: 14, className: "animate-spin" }) : null, isGeneratingReceipt ? "Generating..." : "Generate Receipt")
|
|
4068
4104
|
), /* @__PURE__ */ import_react72.default.createElement(
|
|
4069
4105
|
"button",
|
|
4070
4106
|
{
|
|
4071
|
-
onClick: () =>
|
|
4072
|
-
className: "w-full flex items-center justify-center py-2 rounded-full
|
|
4107
|
+
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
4108
|
+
className: "w-full flex items-center justify-center py-2 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none text-[13px] tracking-wide"
|
|
4073
4109
|
},
|
|
4074
|
-
"
|
|
4110
|
+
"Report Transaction"
|
|
4075
4111
|
))))), 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(
|
|
4076
4112
|
"button",
|
|
4077
4113
|
{
|
|
@@ -4216,7 +4252,8 @@ var UniversalHomeView = ({
|
|
|
4216
4252
|
{
|
|
4217
4253
|
...transactionsProps,
|
|
4218
4254
|
hideControls: true,
|
|
4219
|
-
hideBalanceAmounts: isBalanceHidden
|
|
4255
|
+
hideBalanceAmounts: isBalanceHidden,
|
|
4256
|
+
hidePagination: true
|
|
4220
4257
|
}
|
|
4221
4258
|
)));
|
|
4222
4259
|
};
|
|
@@ -4243,6 +4280,7 @@ var UniversalWalletPage = ({
|
|
|
4243
4280
|
headerDescription,
|
|
4244
4281
|
hideControls = false,
|
|
4245
4282
|
hideBalanceAmounts = false,
|
|
4283
|
+
isGeneratingStatement = false,
|
|
4246
4284
|
wallets,
|
|
4247
4285
|
isLoading = false,
|
|
4248
4286
|
renderQrCode,
|
|
@@ -4251,6 +4289,7 @@ var UniversalWalletPage = ({
|
|
|
4251
4289
|
}) => {
|
|
4252
4290
|
const [selectedWallet, setSelectedWallet] = (0, import_react76.useState)(null);
|
|
4253
4291
|
const [localSearchQuery, setLocalSearchQuery] = (0, import_react76.useState)("");
|
|
4292
|
+
const [showToast, setShowToast] = (0, import_react76.useState)(false);
|
|
4254
4293
|
const filteredWallets = wallets.filter((wallet) => {
|
|
4255
4294
|
const q = localSearchQuery.toLowerCase();
|
|
4256
4295
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -4258,6 +4297,16 @@ var UniversalWalletPage = ({
|
|
|
4258
4297
|
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
4298
|
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
4299
|
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)`;
|
|
4300
|
+
const disabledShadow = `inset 0 1px 0 0 rgba(255, 255, 255, 0.15), inset 0 -1px 0 0 rgba(0, 0, 0, 0.3), 0 1px 0 0 #1c1c1c`;
|
|
4301
|
+
const handleCopy = (wallet) => {
|
|
4302
|
+
if (onCopyAddress) onCopyAddress(wallet);
|
|
4303
|
+
if (typeof navigator !== "undefined" && navigator.clipboard) {
|
|
4304
|
+
navigator.clipboard.writeText(wallet.address).catch(() => {
|
|
4305
|
+
});
|
|
4306
|
+
}
|
|
4307
|
+
setShowToast(true);
|
|
4308
|
+
setTimeout(() => setShowToast(false), 2500);
|
|
4309
|
+
};
|
|
4261
4310
|
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
4311
|
"input",
|
|
4263
4312
|
{
|
|
@@ -4276,34 +4325,49 @@ var UniversalWalletPage = ({
|
|
|
4276
4325
|
},
|
|
4277
4326
|
/* @__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
4327
|
/* @__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: () =>
|
|
4328
|
+
)))))), 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: () => {
|
|
4329
|
+
setSelectedWallet(null);
|
|
4330
|
+
setShowToast(false);
|
|
4331
|
+
} }), /* @__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]" }, showToast && /* @__PURE__ */ import_react76.default.createElement("div", { className: "absolute top-4 left-1/2 -translate-x-1/2 z-50 bg-neutral-900 text-white px-5 py-2.5 rounded-full text-[12px] font-medium tracking-wide shadow-xl animate-in slide-in-from-top-4 fade-in duration-200 pointer-events-none whitespace-nowrap" }, "Address copied to clipboard"), /* @__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: () => {
|
|
4332
|
+
setSelectedWallet(null);
|
|
4333
|
+
setShowToast(false);
|
|
4334
|
+
}, 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
4335
|
"button",
|
|
4281
4336
|
{
|
|
4337
|
+
disabled: isGeneratingStatement,
|
|
4282
4338
|
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
4283
|
-
className:
|
|
4284
|
-
|
|
4339
|
+
className: `
|
|
4340
|
+
relative w-full flex items-center justify-center py-3 rounded-full bg-neutral-950 text-white
|
|
4341
|
+
transition-all duration-150 select-none outline-none
|
|
4342
|
+
${isGeneratingStatement ? "opacity-50 cursor-not-allowed" : "active:translate-y-0.5"}
|
|
4343
|
+
`,
|
|
4344
|
+
style: { boxShadow: isGeneratingStatement ? disabledShadow : primaryBaseShadow },
|
|
4285
4345
|
onMouseEnter: (e) => {
|
|
4346
|
+
if (isGeneratingStatement) return;
|
|
4286
4347
|
e.currentTarget.style.boxShadow = primaryHoverShadow;
|
|
4287
4348
|
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4288
4349
|
},
|
|
4289
4350
|
onMouseLeave: (e) => {
|
|
4351
|
+
if (isGeneratingStatement) return;
|
|
4290
4352
|
e.currentTarget.style.boxShadow = primaryBaseShadow;
|
|
4291
4353
|
e.currentTarget.style.transform = "translateY(0px)";
|
|
4292
4354
|
},
|
|
4293
4355
|
onMouseDown: (e) => {
|
|
4356
|
+
if (isGeneratingStatement) return;
|
|
4294
4357
|
e.currentTarget.style.boxShadow = primaryActiveShadow;
|
|
4295
4358
|
e.currentTarget.style.transform = "translateY(2px)";
|
|
4296
4359
|
},
|
|
4297
4360
|
onMouseUp: (e) => {
|
|
4361
|
+
if (isGeneratingStatement) return;
|
|
4298
4362
|
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4299
4363
|
}
|
|
4300
4364
|
},
|
|
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" }, "
|
|
4365
|
+
/* @__PURE__ */ import_react76.default.createElement("span", { className: "absolute inset-0 rounded-full py-2 bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
4366
|
+
/* @__PURE__ */ import_react76.default.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 text-[13px] tracking-wide font-medium" }, isGeneratingStatement ? /* @__PURE__ */ import_react76.default.createElement(import_react77.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 16, className: "animate-spin text-white" }) : "Generate Statement")
|
|
4303
4367
|
), /* @__PURE__ */ import_react76.default.createElement(
|
|
4304
4368
|
"button",
|
|
4305
4369
|
{
|
|
4306
|
-
onClick: () =>
|
|
4370
|
+
onClick: () => handleCopy(selectedWallet),
|
|
4307
4371
|
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
4372
|
},
|
|
4309
4373
|
"Copy Wallet Address"
|
|
@@ -4412,7 +4476,7 @@ var Stagger = ({ steps, currentStep }) => {
|
|
|
4412
4476
|
|
|
4413
4477
|
// src/components/UniversalRegistrationFlow.tsx
|
|
4414
4478
|
var import_react88 = __toESM(require("react"));
|
|
4415
|
-
var
|
|
4479
|
+
var import_react_hot_toast11 = __toESM(require("react-hot-toast"));
|
|
4416
4480
|
var import_react89 = require("@hugeicons/react");
|
|
4417
4481
|
var import_core_free_icons32 = require("@hugeicons/core-free-icons");
|
|
4418
4482
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
@@ -4614,7 +4678,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4614
4678
|
if (data.appStatus === "QUEUED" || data.appStatus === "REJECTED") setMacroStep(0);
|
|
4615
4679
|
}
|
|
4616
4680
|
}).catch(() => {
|
|
4617
|
-
|
|
4681
|
+
import_react_hot_toast11.default.error("Uh oh! Something went wrong while loading.");
|
|
4618
4682
|
}).finally(() => setIsBooting(false));
|
|
4619
4683
|
}, [applicationId, type, apiEndpoint]);
|
|
4620
4684
|
const saveProgress = async (newFormData = formData, newFormState = formState, newMacro = macroStep) => {
|
|
@@ -4626,11 +4690,11 @@ var UniversalRegistrationFlow = ({
|
|
|
4626
4690
|
setIsAborting(true);
|
|
4627
4691
|
const data = await baseApi("abort");
|
|
4628
4692
|
if (data.success) {
|
|
4629
|
-
|
|
4693
|
+
import_react_hot_toast11.default.success("Application aborted.");
|
|
4630
4694
|
setAppStatus("DRAFT");
|
|
4631
4695
|
setMacroStep(0);
|
|
4632
4696
|
setIsAbortModalOpen(false);
|
|
4633
|
-
} else
|
|
4697
|
+
} else import_react_hot_toast11.default.error(data.error || "Uh oh! Something went wrong.");
|
|
4634
4698
|
setIsAborting(false);
|
|
4635
4699
|
};
|
|
4636
4700
|
const handleBack = () => {
|
|
@@ -4673,7 +4737,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4673
4737
|
setIsAnalyzingNature(true);
|
|
4674
4738
|
const data = await baseApi("analyze_nature", { description: formData.businessDesc });
|
|
4675
4739
|
if (data.success) setSuggestedNature(data.data);
|
|
4676
|
-
else
|
|
4740
|
+
else import_react_hot_toast11.default.error(data.error || "Uh oh! Something went wrong.");
|
|
4677
4741
|
setIsAnalyzingNature(false);
|
|
4678
4742
|
};
|
|
4679
4743
|
const pollNameCheckJob = async (jobId) => {
|
|
@@ -4682,7 +4746,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4682
4746
|
setNameCheckResult(poll.data.result);
|
|
4683
4747
|
setIsCheckingName(false);
|
|
4684
4748
|
} else if (poll.success && poll.data.status === "error") {
|
|
4685
|
-
|
|
4749
|
+
import_react_hot_toast11.default.error(poll.data.error || "Uh oh! Something went wrong.");
|
|
4686
4750
|
setIsCheckingName(false);
|
|
4687
4751
|
} else setTimeout(() => pollNameCheckJob(jobId), 3e3);
|
|
4688
4752
|
};
|
|
@@ -4700,7 +4764,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4700
4764
|
const data = await baseApi("check_name_start", { name: nameToCheck, lineOfBusiness: formData.natureOfBusiness?.specificLabel });
|
|
4701
4765
|
if (data.success && data.data.jobId) pollNameCheckJob(data.data.jobId);
|
|
4702
4766
|
else {
|
|
4703
|
-
|
|
4767
|
+
import_react_hot_toast11.default.error(data.error || "Uh oh! Something went wrong.");
|
|
4704
4768
|
setIsCheckingName(false);
|
|
4705
4769
|
}
|
|
4706
4770
|
};
|
|
@@ -4725,7 +4789,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4725
4789
|
throw new Error(data.error || "Failed to secure upload URL.");
|
|
4726
4790
|
}
|
|
4727
4791
|
} catch (error) {
|
|
4728
|
-
|
|
4792
|
+
import_react_hot_toast11.default.error(error.message);
|
|
4729
4793
|
} finally {
|
|
4730
4794
|
if (optType === "other1") {
|
|
4731
4795
|
setIsUploadingOther1(false);
|
|
@@ -4776,7 +4840,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4776
4840
|
const maxAllowed = Math.max(0, 100 - otherSharesSum);
|
|
4777
4841
|
if (numValue > maxAllowed) {
|
|
4778
4842
|
numValue = maxAllowed;
|
|
4779
|
-
|
|
4843
|
+
import_react_hot_toast11.default.error(`Total shares cannot exceed 100%. Remaining: ${maxAllowed}%`, { id: "share-limit" });
|
|
4780
4844
|
} else if (numValue < 0) numValue = 0;
|
|
4781
4845
|
updated[index] = { ...updated[index], [key]: numValue.toString() };
|
|
4782
4846
|
}
|
|
@@ -4807,7 +4871,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4807
4871
|
updatedMembers[memberIndex] = { ...updatedMembers[memberIndex], idExtractedData: data.data, idFileUrl: uploadData.data.fileUrl, idMetadata: { fileName: file.name, contentType: file.type, fileSizeInBytes: file.size } };
|
|
4808
4872
|
setFormData({ ...formData, members: updatedMembers });
|
|
4809
4873
|
saveProgress({ ...formData, members: updatedMembers });
|
|
4810
|
-
} else
|
|
4874
|
+
} else import_react_hot_toast11.default.error(data.error || "Uh oh! Something went wrong.");
|
|
4811
4875
|
} else {
|
|
4812
4876
|
if (docType === "passport") setGlobalUploadingPassport(true);
|
|
4813
4877
|
else setGlobalUploadingSignature(true);
|
|
@@ -4824,10 +4888,10 @@ var UniversalRegistrationFlow = ({
|
|
|
4824
4888
|
}
|
|
4825
4889
|
setFormData({ ...formData, members: updatedMembers });
|
|
4826
4890
|
saveProgress({ ...formData, members: updatedMembers });
|
|
4827
|
-
} else
|
|
4891
|
+
} else import_react_hot_toast11.default.error(`Failed to secure upload URL for ${docType}.`);
|
|
4828
4892
|
}
|
|
4829
4893
|
} catch (error) {
|
|
4830
|
-
|
|
4894
|
+
import_react_hot_toast11.default.error(error.message);
|
|
4831
4895
|
} finally {
|
|
4832
4896
|
if (docType === "id") setGlobalExtractingId(false);
|
|
4833
4897
|
else if (docType === "passport") setGlobalUploadingPassport(false);
|
|
@@ -4876,7 +4940,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4876
4940
|
setFormData(updatedForm);
|
|
4877
4941
|
saveProgress(updatedForm);
|
|
4878
4942
|
} else {
|
|
4879
|
-
|
|
4943
|
+
import_react_hot_toast11.default.error(data.error || "Uh oh! Something went wrong.");
|
|
4880
4944
|
setAiTasks([{ id: "1", label: "Document Scanned", status: "success" }, { id: "2", label: "Extraction Failed", status: "error" }]);
|
|
4881
4945
|
}
|
|
4882
4946
|
} else {
|
|
@@ -4896,10 +4960,10 @@ var UniversalRegistrationFlow = ({
|
|
|
4896
4960
|
approveSection("signatureApproved", updatedForm);
|
|
4897
4961
|
}
|
|
4898
4962
|
setFormData(updatedForm);
|
|
4899
|
-
} else
|
|
4963
|
+
} else import_react_hot_toast11.default.error(data.error || `Failed to upload ${docType}.`);
|
|
4900
4964
|
}
|
|
4901
4965
|
} catch (error) {
|
|
4902
|
-
|
|
4966
|
+
import_react_hot_toast11.default.error(error.message);
|
|
4903
4967
|
} finally {
|
|
4904
4968
|
if (docType === "id") {
|
|
4905
4969
|
setGlobalExtractingId(false);
|
|
@@ -4982,10 +5046,10 @@ var UniversalRegistrationFlow = ({
|
|
|
4982
5046
|
}
|
|
4983
5047
|
const data = await baseApi("submit", finalJsonPayload);
|
|
4984
5048
|
if (data.success) {
|
|
4985
|
-
|
|
5049
|
+
import_react_hot_toast11.default.success("Application Submitted!");
|
|
4986
5050
|
onRedirectToApplication(applicationId);
|
|
4987
5051
|
} else {
|
|
4988
|
-
|
|
5052
|
+
import_react_hot_toast11.default.error(data.error || "Uh oh! Something went wrong.");
|
|
4989
5053
|
setIsSubmitting(false);
|
|
4990
5054
|
}
|
|
4991
5055
|
};
|
|
@@ -5034,7 +5098,7 @@ var UniversalRegistrationFlow = ({
|
|
|
5034
5098
|
|
|
5035
5099
|
// src/components/UniversalDeveloperSettings.tsx
|
|
5036
5100
|
var import_react90 = __toESM(require("react"));
|
|
5037
|
-
var
|
|
5101
|
+
var import_react_hot_toast12 = require("react-hot-toast");
|
|
5038
5102
|
var import_react91 = require("@hugeicons/react");
|
|
5039
5103
|
var import_core_free_icons33 = require("@hugeicons/core-free-icons");
|
|
5040
5104
|
var ButtonSpinner5 = () => /* @__PURE__ */ import_react90.default.createElement(import_react91.HugeiconsIcon, { icon: import_core_free_icons33.Loading03Icon, size: 16, className: "animate-spin text-current" });
|
|
@@ -5081,13 +5145,13 @@ SECRET_KEY="${secKey}"
|
|
|
5081
5145
|
if (res.success && res.data) {
|
|
5082
5146
|
setPublicKey(res.data.publicKey);
|
|
5083
5147
|
downloadEnvironmentFile(res.data.publicKey, res.data.secretKey);
|
|
5084
|
-
|
|
5148
|
+
import_react_hot_toast12.toast.success("Keys generated. Check your downloads folder.");
|
|
5085
5149
|
setIsRollModalOpen(false);
|
|
5086
5150
|
} else {
|
|
5087
|
-
|
|
5151
|
+
import_react_hot_toast12.toast.error(res.error || "Uh oh! Something went wrong.");
|
|
5088
5152
|
}
|
|
5089
5153
|
} catch (error) {
|
|
5090
|
-
|
|
5154
|
+
import_react_hot_toast12.toast.error("Uh oh! Something went wrong.");
|
|
5091
5155
|
} finally {
|
|
5092
5156
|
setIsGenerating(false);
|
|
5093
5157
|
}
|
|
@@ -5100,12 +5164,12 @@ SECRET_KEY="${secKey}"
|
|
|
5100
5164
|
const res = await onSaveWebhook(webhookUrl);
|
|
5101
5165
|
if (res.success && res.data) {
|
|
5102
5166
|
setWebhookUrl(res.data.webhookUrl || "");
|
|
5103
|
-
|
|
5167
|
+
import_react_hot_toast12.toast.success("Webhook URL updated.");
|
|
5104
5168
|
} else {
|
|
5105
|
-
|
|
5169
|
+
import_react_hot_toast12.toast.error(res.error || "Uh oh! Something went wrong.");
|
|
5106
5170
|
}
|
|
5107
5171
|
} catch (error) {
|
|
5108
|
-
|
|
5172
|
+
import_react_hot_toast12.toast.error("Uh oh! Something went wrong.");
|
|
5109
5173
|
} finally {
|
|
5110
5174
|
setIsSavingWebhook(false);
|
|
5111
5175
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -689,7 +689,7 @@ function AuthFormInner2({
|
|
|
689
689
|
className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer",
|
|
690
690
|
required: true
|
|
691
691
|
}
|
|
692
|
-
), /* @__PURE__ */ React5.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ React5.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6]
|
|
692
|
+
), /* @__PURE__ */ React5.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-500 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ React5.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6] " }, "Terms of Service"), " and ", /* @__PURE__ */ React5.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6] " }, "Privacy Policy"), "."))), /* @__PURE__ */ React5.createElement(
|
|
693
693
|
ThreeDActionButton,
|
|
694
694
|
{
|
|
695
695
|
type: "submit",
|
|
@@ -2363,7 +2363,7 @@ var UniversalOrganizationPage = ({
|
|
|
2363
2363
|
};
|
|
2364
2364
|
const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== initialSlug;
|
|
2365
2365
|
const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
|
|
2366
|
-
return /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-5xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ React29.createElement(ManagedToaster, null), /* @__PURE__ */ React29.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React29.createElement("div", null, /* @__PURE__ */ React29.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "
|
|
2366
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-5xl rounded-2xl p-6 bg-white fade-in duration-300 " }, /* @__PURE__ */ React29.createElement(ManagedToaster, null), /* @__PURE__ */ React29.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React29.createElement("div", null, /* @__PURE__ */ React29.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ React29.createElement("p", { className: "text-xs text-neutral-500" }, "Manage your financial payment handle identifiers and global public cryptographic signature identity details.")), isReadOnly && /* @__PURE__ */ React29.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-50 text-neutral-500 rounded-full shrink-0" }, /* @__PURE__ */ React29.createElement(HugeiconsIcon15, { icon: CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ React29.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ React29.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ React29.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ React29.createElement(
|
|
2367
2367
|
TextInput,
|
|
2368
2368
|
{
|
|
2369
2369
|
label: "Display Name",
|
|
@@ -3901,6 +3901,7 @@ var UniversalTrashView = ({
|
|
|
3901
3901
|
// src/components/UniversalTransactionPage.tsx
|
|
3902
3902
|
import React44, { useState as useState28, useEffect as useEffect19, useRef as useRef12 } from "react";
|
|
3903
3903
|
import { HugeiconsIcon as HugeiconsIcon29 } from "@hugeicons/react";
|
|
3904
|
+
import toast9 from "react-hot-toast";
|
|
3904
3905
|
import {
|
|
3905
3906
|
ArrowLeft01Icon as ArrowLeft01Icon10,
|
|
3906
3907
|
ArrowRight01Icon as ArrowRight01Icon10,
|
|
@@ -3944,6 +3945,7 @@ var UniversalTransactionPage = ({
|
|
|
3944
3945
|
onGenerateReceipt
|
|
3945
3946
|
}) => {
|
|
3946
3947
|
const [selectedTransaction, setSelectedTransaction] = useState28(null);
|
|
3948
|
+
const [isGeneratingReceipt, setIsGeneratingReceipt] = useState28(false);
|
|
3947
3949
|
const [localSearchQuery, setLocalSearchQuery] = useState28(searchQuery);
|
|
3948
3950
|
const [isTyping, setIsTyping] = useState28(false);
|
|
3949
3951
|
const [isDirectionModalOpen, setIsDirectionModalOpen] = useState28(false);
|
|
@@ -3980,6 +3982,18 @@ var UniversalTransactionPage = ({
|
|
|
3980
3982
|
if (tx.metadata?.description) return tx.metadata.description;
|
|
3981
3983
|
return tx.type === "CARD_TRANSACTION" ? "Card Transaction" : "Wallet Transaction";
|
|
3982
3984
|
};
|
|
3985
|
+
const handleGenerateReceipt = async () => {
|
|
3986
|
+
if (!onGenerateReceipt || !selectedTransaction) return;
|
|
3987
|
+
setIsGeneratingReceipt(true);
|
|
3988
|
+
try {
|
|
3989
|
+
await onGenerateReceipt(selectedTransaction);
|
|
3990
|
+
toast9.success("Receipt generated successfully.");
|
|
3991
|
+
} catch (error) {
|
|
3992
|
+
toast9.error("Failed to generate receipt.");
|
|
3993
|
+
} finally {
|
|
3994
|
+
setIsGeneratingReceipt(false);
|
|
3995
|
+
}
|
|
3996
|
+
};
|
|
3983
3997
|
const isListLoading = isLoading || isTyping;
|
|
3984
3998
|
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)`;
|
|
3985
3999
|
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)`;
|
|
@@ -4034,37 +4048,59 @@ var UniversalTransactionPage = ({
|
|
|
4034
4048
|
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"
|
|
4035
4049
|
},
|
|
4036
4050
|
/* @__PURE__ */ React44.createElement(HugeiconsIcon29, { icon: ArrowRight01Icon10, size: 14 })
|
|
4037
|
-
)))))), selectedTransaction && /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Details"), /* @__PURE__ */ React44.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon29, { icon: CancelCircleIcon2, size: 18 }))), /* @__PURE__ */ React44.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ React44.createElement("div", { className: `w-12 h-12 rounded-full
|
|
4051
|
+
)))))), selectedTransaction && /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Details"), /* @__PURE__ */ React44.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React44.createElement(HugeiconsIcon29, { icon: CancelCircleIcon2, size: 18 }))), /* @__PURE__ */ React44.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ React44.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__ */ React44.createElement(HugeiconsIcon29, { icon: selectedTransaction.direction === "CREDIT" ? ArrowDownRight01Icon : ArrowUpRight01Icon, size: 20 })), /* @__PURE__ */ React44.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__ */ React44.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full bg-neutral-50" }, selectedTransaction.status), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ React44.createElement(
|
|
4052
|
+
"a",
|
|
4053
|
+
{
|
|
4054
|
+
href: `https://basescan.org/tx/${selectedTransaction.reference}`,
|
|
4055
|
+
target: "_blank",
|
|
4056
|
+
rel: "noopener noreferrer",
|
|
4057
|
+
className: "text-[11px] text-[#1f26d6] mt-4 transition-colors tracking-wide"
|
|
4058
|
+
},
|
|
4059
|
+
"View in block explorer"
|
|
4060
|
+
)), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Reference ID"), /* @__PURE__ */ React44.createElement("span", { className: "text-[13px] text-black break-all" }, selectedTransaction.reference)), /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Date & Time"), /* @__PURE__ */ React44.createElement("span", { className: "text-[13px] text-black" }, formatDate3(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Transaction Type"), /* @__PURE__ */ React44.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ React44.createElement("div", null, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Flow Direction"), /* @__PURE__ */ React44.createElement("span", { className: "text-[13px] text-black capitalize" }, selectedTransaction.direction.toLowerCase())), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
|
|
4061
|
+
if (value === null || value === void 0 || typeof value === "object") return null;
|
|
4062
|
+
const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
4063
|
+
return /* @__PURE__ */ React44.createElement("div", { key }, /* @__PURE__ */ React44.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, formattedKey), /* @__PURE__ */ React44.createElement("span", { className: "text-[13px] text-black break-all" }, String(value)));
|
|
4064
|
+
})), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React44.createElement(
|
|
4038
4065
|
"button",
|
|
4039
4066
|
{
|
|
4040
|
-
onClick:
|
|
4041
|
-
|
|
4042
|
-
|
|
4067
|
+
onClick: handleGenerateReceipt,
|
|
4068
|
+
disabled: isGeneratingReceipt,
|
|
4069
|
+
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 disabled:opacity-70 disabled:cursor-not-allowed",
|
|
4070
|
+
style: !isGeneratingReceipt ? { boxShadow: primaryBaseShadow } : {},
|
|
4043
4071
|
onMouseEnter: (e) => {
|
|
4044
|
-
|
|
4045
|
-
|
|
4072
|
+
if (!isGeneratingReceipt) {
|
|
4073
|
+
e.currentTarget.style.boxShadow = primaryHoverShadow;
|
|
4074
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4075
|
+
}
|
|
4046
4076
|
},
|
|
4047
4077
|
onMouseLeave: (e) => {
|
|
4048
|
-
|
|
4049
|
-
|
|
4078
|
+
if (!isGeneratingReceipt) {
|
|
4079
|
+
e.currentTarget.style.boxShadow = primaryBaseShadow;
|
|
4080
|
+
e.currentTarget.style.transform = "translateY(0px)";
|
|
4081
|
+
}
|
|
4050
4082
|
},
|
|
4051
4083
|
onMouseDown: (e) => {
|
|
4052
|
-
|
|
4053
|
-
|
|
4084
|
+
if (!isGeneratingReceipt) {
|
|
4085
|
+
e.currentTarget.style.boxShadow = primaryActiveShadow;
|
|
4086
|
+
e.currentTarget.style.transform = "translateY(2px)";
|
|
4087
|
+
}
|
|
4054
4088
|
},
|
|
4055
4089
|
onMouseUp: (e) => {
|
|
4056
|
-
|
|
4090
|
+
if (!isGeneratingReceipt) {
|
|
4091
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4092
|
+
}
|
|
4057
4093
|
}
|
|
4058
4094
|
},
|
|
4059
4095
|
/* @__PURE__ */ React44.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
4060
|
-
/* @__PURE__ */ React44.createElement("span", { className: "relative z-10 text-[13px] tracking-wide" }, "
|
|
4096
|
+
/* @__PURE__ */ React44.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 text-[13px] tracking-wide" }, isGeneratingReceipt ? /* @__PURE__ */ React44.createElement(HugeiconsIcon29, { icon: Loading03Icon15, size: 14, className: "animate-spin" }) : null, isGeneratingReceipt ? "Generating..." : "Generate Receipt")
|
|
4061
4097
|
), /* @__PURE__ */ React44.createElement(
|
|
4062
4098
|
"button",
|
|
4063
4099
|
{
|
|
4064
|
-
onClick: () =>
|
|
4065
|
-
className: "w-full flex items-center justify-center py-2 rounded-full
|
|
4100
|
+
onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
|
|
4101
|
+
className: "w-full flex items-center justify-center py-2 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 transition-colors outline-none text-[13px] tracking-wide"
|
|
4066
4102
|
},
|
|
4067
|
-
"
|
|
4103
|
+
"Report Transaction"
|
|
4068
4104
|
))))), isDirectionModalOpen && /* @__PURE__ */ React44.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React44.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setIsDirectionModalOpen(false) }), /* @__PURE__ */ React44.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__ */ React44.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React44.createElement("h3", { className: "text-[14px] text-black tracking-tight" }, "Payment Type")), /* @__PURE__ */ React44.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, ["ALL", "CREDIT", "DEBIT"].map((option) => /* @__PURE__ */ React44.createElement(
|
|
4069
4105
|
"button",
|
|
4070
4106
|
{
|
|
@@ -4209,7 +4245,8 @@ var UniversalHomeView = ({
|
|
|
4209
4245
|
{
|
|
4210
4246
|
...transactionsProps,
|
|
4211
4247
|
hideControls: true,
|
|
4212
|
-
hideBalanceAmounts: isBalanceHidden
|
|
4248
|
+
hideBalanceAmounts: isBalanceHidden,
|
|
4249
|
+
hidePagination: true
|
|
4213
4250
|
}
|
|
4214
4251
|
)));
|
|
4215
4252
|
};
|
|
@@ -4240,6 +4277,7 @@ var UniversalWalletPage = ({
|
|
|
4240
4277
|
headerDescription,
|
|
4241
4278
|
hideControls = false,
|
|
4242
4279
|
hideBalanceAmounts = false,
|
|
4280
|
+
isGeneratingStatement = false,
|
|
4243
4281
|
wallets,
|
|
4244
4282
|
isLoading = false,
|
|
4245
4283
|
renderQrCode,
|
|
@@ -4248,6 +4286,7 @@ var UniversalWalletPage = ({
|
|
|
4248
4286
|
}) => {
|
|
4249
4287
|
const [selectedWallet, setSelectedWallet] = useState30(null);
|
|
4250
4288
|
const [localSearchQuery, setLocalSearchQuery] = useState30("");
|
|
4289
|
+
const [showToast, setShowToast] = useState30(false);
|
|
4251
4290
|
const filteredWallets = wallets.filter((wallet) => {
|
|
4252
4291
|
const q = localSearchQuery.toLowerCase();
|
|
4253
4292
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -4255,6 +4294,16 @@ var UniversalWalletPage = ({
|
|
|
4255
4294
|
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)`;
|
|
4256
4295
|
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)`;
|
|
4257
4296
|
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)`;
|
|
4297
|
+
const disabledShadow = `inset 0 1px 0 0 rgba(255, 255, 255, 0.15), inset 0 -1px 0 0 rgba(0, 0, 0, 0.3), 0 1px 0 0 #1c1c1c`;
|
|
4298
|
+
const handleCopy = (wallet) => {
|
|
4299
|
+
if (onCopyAddress) onCopyAddress(wallet);
|
|
4300
|
+
if (typeof navigator !== "undefined" && navigator.clipboard) {
|
|
4301
|
+
navigator.clipboard.writeText(wallet.address).catch(() => {
|
|
4302
|
+
});
|
|
4303
|
+
}
|
|
4304
|
+
setShowToast(true);
|
|
4305
|
+
setTimeout(() => setShowToast(false), 2500);
|
|
4306
|
+
};
|
|
4258
4307
|
return /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, !hideControls && /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ React46.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ React46.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: Search01Icon3, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ React46.createElement(
|
|
4259
4308
|
"input",
|
|
4260
4309
|
{
|
|
@@ -4273,34 +4322,49 @@ var UniversalWalletPage = ({
|
|
|
4273
4322
|
},
|
|
4274
4323
|
/* @__PURE__ */ React46.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React46.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), /* @__PURE__ */ React46.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React46.createElement("p", { className: "text-[13px] text-black truncate font-medium" }, wallet.name), /* @__PURE__ */ React46.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, wallet.balance, " ", wallet.currency))),
|
|
4275
4324
|
/* @__PURE__ */ React46.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React46.createElement("span", { className: "text-[10px] tracking-wide text-neutral-500 bg-neutral-100/80 px-2.5 py-1 rounded-full uppercase" }, wallet.network))
|
|
4276
|
-
)))))), selectedWallet && /* @__PURE__ */ React46.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React46.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () =>
|
|
4325
|
+
)))))), selectedWallet && /* @__PURE__ */ React46.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React46.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => {
|
|
4326
|
+
setSelectedWallet(null);
|
|
4327
|
+
setShowToast(false);
|
|
4328
|
+
} }), /* @__PURE__ */ React46.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]" }, showToast && /* @__PURE__ */ React46.createElement("div", { className: "absolute top-4 left-1/2 -translate-x-1/2 z-50 bg-neutral-900 text-white px-5 py-2.5 rounded-full text-[12px] font-medium tracking-wide shadow-xl animate-in slide-in-from-top-4 fade-in duration-200 pointer-events-none whitespace-nowrap" }, "Address copied to clipboard"), /* @__PURE__ */ React46.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React46.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Wallet Details"), /* @__PURE__ */ React46.createElement("button", { onClick: () => {
|
|
4329
|
+
setSelectedWallet(null);
|
|
4330
|
+
setShowToast(false);
|
|
4331
|
+
}, className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: CancelCircleIcon3, size: 18 }))), /* @__PURE__ */ React46.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ React46.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14 mb-4" }), /* @__PURE__ */ React46.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__ */ React46.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__ */ React46.createElement("div", { className: "w-full flex justify-center mb-8" }, renderQrCode(selectedWallet)), /* @__PURE__ */ React46.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ React46.createElement("span", { className: "text-[13px] text-black break-all font-medium" }, selectedWallet.address)), /* @__PURE__ */ React46.createElement("div", null, /* @__PURE__ */ React46.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Name"), /* @__PURE__ */ React46.createElement("span", { className: "text-[13px] text-black" }, selectedWallet.name))), /* @__PURE__ */ React46.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React46.createElement(
|
|
4277
4332
|
"button",
|
|
4278
4333
|
{
|
|
4334
|
+
disabled: isGeneratingStatement,
|
|
4279
4335
|
onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
|
|
4280
|
-
className:
|
|
4281
|
-
|
|
4336
|
+
className: `
|
|
4337
|
+
relative w-full flex items-center justify-center py-3 rounded-full bg-neutral-950 text-white
|
|
4338
|
+
transition-all duration-150 select-none outline-none
|
|
4339
|
+
${isGeneratingStatement ? "opacity-50 cursor-not-allowed" : "active:translate-y-0.5"}
|
|
4340
|
+
`,
|
|
4341
|
+
style: { boxShadow: isGeneratingStatement ? disabledShadow : primaryBaseShadow },
|
|
4282
4342
|
onMouseEnter: (e) => {
|
|
4343
|
+
if (isGeneratingStatement) return;
|
|
4283
4344
|
e.currentTarget.style.boxShadow = primaryHoverShadow;
|
|
4284
4345
|
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4285
4346
|
},
|
|
4286
4347
|
onMouseLeave: (e) => {
|
|
4348
|
+
if (isGeneratingStatement) return;
|
|
4287
4349
|
e.currentTarget.style.boxShadow = primaryBaseShadow;
|
|
4288
4350
|
e.currentTarget.style.transform = "translateY(0px)";
|
|
4289
4351
|
},
|
|
4290
4352
|
onMouseDown: (e) => {
|
|
4353
|
+
if (isGeneratingStatement) return;
|
|
4291
4354
|
e.currentTarget.style.boxShadow = primaryActiveShadow;
|
|
4292
4355
|
e.currentTarget.style.transform = "translateY(2px)";
|
|
4293
4356
|
},
|
|
4294
4357
|
onMouseUp: (e) => {
|
|
4358
|
+
if (isGeneratingStatement) return;
|
|
4295
4359
|
e.currentTarget.style.transform = "translateY(-1px)";
|
|
4296
4360
|
}
|
|
4297
4361
|
},
|
|
4298
|
-
/* @__PURE__ */ React46.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
4299
|
-
/* @__PURE__ */ React46.createElement("span", { className: "relative z-10 text-[13px] tracking-wide font-medium" }, "
|
|
4362
|
+
/* @__PURE__ */ React46.createElement("span", { className: "absolute inset-0 rounded-full py-2 bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
|
|
4363
|
+
/* @__PURE__ */ React46.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 text-[13px] tracking-wide font-medium" }, isGeneratingStatement ? /* @__PURE__ */ React46.createElement(HugeiconsIcon31, { icon: Loading03Icon16, size: 16, className: "animate-spin text-white" }) : "Generate Statement")
|
|
4300
4364
|
), /* @__PURE__ */ React46.createElement(
|
|
4301
4365
|
"button",
|
|
4302
4366
|
{
|
|
4303
|
-
onClick: () =>
|
|
4367
|
+
onClick: () => handleCopy(selectedWallet),
|
|
4304
4368
|
className: "w-full flex items-center justify-center py-2 rounded-full border border-neutral-200 text-black outline-none text-[13px] tracking-wide"
|
|
4305
4369
|
},
|
|
4306
4370
|
"Copy Wallet Address"
|
|
@@ -4409,7 +4473,7 @@ var Stagger = ({ steps, currentStep }) => {
|
|
|
4409
4473
|
|
|
4410
4474
|
// src/components/UniversalRegistrationFlow.tsx
|
|
4411
4475
|
import React53, { useState as useState32, useEffect as useEffect21, useRef as useRef13 } from "react";
|
|
4412
|
-
import
|
|
4476
|
+
import toast10 from "react-hot-toast";
|
|
4413
4477
|
import { HugeiconsIcon as HugeiconsIcon36 } from "@hugeicons/react";
|
|
4414
4478
|
import { CheckmarkBadge01Icon as CheckmarkBadge01Icon2, Upload01Icon as Upload01Icon3, Loading03Icon as Loading03Icon18, PencilEdit01Icon as PencilEdit01Icon2, Delete02Icon as Delete02Icon3, SignatureIcon, IdentificationIcon, ArrowLeft01Icon as ArrowLeft01Icon11, HourglassIcon } from "@hugeicons/core-free-icons";
|
|
4415
4479
|
var MACRO_STEPS = ["Details", "Documents", "Review", "Submit"];
|
|
@@ -4611,7 +4675,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4611
4675
|
if (data.appStatus === "QUEUED" || data.appStatus === "REJECTED") setMacroStep(0);
|
|
4612
4676
|
}
|
|
4613
4677
|
}).catch(() => {
|
|
4614
|
-
|
|
4678
|
+
toast10.error("Uh oh! Something went wrong while loading.");
|
|
4615
4679
|
}).finally(() => setIsBooting(false));
|
|
4616
4680
|
}, [applicationId, type, apiEndpoint]);
|
|
4617
4681
|
const saveProgress = async (newFormData = formData, newFormState = formState, newMacro = macroStep) => {
|
|
@@ -4623,11 +4687,11 @@ var UniversalRegistrationFlow = ({
|
|
|
4623
4687
|
setIsAborting(true);
|
|
4624
4688
|
const data = await baseApi("abort");
|
|
4625
4689
|
if (data.success) {
|
|
4626
|
-
|
|
4690
|
+
toast10.success("Application aborted.");
|
|
4627
4691
|
setAppStatus("DRAFT");
|
|
4628
4692
|
setMacroStep(0);
|
|
4629
4693
|
setIsAbortModalOpen(false);
|
|
4630
|
-
} else
|
|
4694
|
+
} else toast10.error(data.error || "Uh oh! Something went wrong.");
|
|
4631
4695
|
setIsAborting(false);
|
|
4632
4696
|
};
|
|
4633
4697
|
const handleBack = () => {
|
|
@@ -4670,7 +4734,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4670
4734
|
setIsAnalyzingNature(true);
|
|
4671
4735
|
const data = await baseApi("analyze_nature", { description: formData.businessDesc });
|
|
4672
4736
|
if (data.success) setSuggestedNature(data.data);
|
|
4673
|
-
else
|
|
4737
|
+
else toast10.error(data.error || "Uh oh! Something went wrong.");
|
|
4674
4738
|
setIsAnalyzingNature(false);
|
|
4675
4739
|
};
|
|
4676
4740
|
const pollNameCheckJob = async (jobId) => {
|
|
@@ -4679,7 +4743,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4679
4743
|
setNameCheckResult(poll.data.result);
|
|
4680
4744
|
setIsCheckingName(false);
|
|
4681
4745
|
} else if (poll.success && poll.data.status === "error") {
|
|
4682
|
-
|
|
4746
|
+
toast10.error(poll.data.error || "Uh oh! Something went wrong.");
|
|
4683
4747
|
setIsCheckingName(false);
|
|
4684
4748
|
} else setTimeout(() => pollNameCheckJob(jobId), 3e3);
|
|
4685
4749
|
};
|
|
@@ -4697,7 +4761,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4697
4761
|
const data = await baseApi("check_name_start", { name: nameToCheck, lineOfBusiness: formData.natureOfBusiness?.specificLabel });
|
|
4698
4762
|
if (data.success && data.data.jobId) pollNameCheckJob(data.data.jobId);
|
|
4699
4763
|
else {
|
|
4700
|
-
|
|
4764
|
+
toast10.error(data.error || "Uh oh! Something went wrong.");
|
|
4701
4765
|
setIsCheckingName(false);
|
|
4702
4766
|
}
|
|
4703
4767
|
};
|
|
@@ -4722,7 +4786,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4722
4786
|
throw new Error(data.error || "Failed to secure upload URL.");
|
|
4723
4787
|
}
|
|
4724
4788
|
} catch (error) {
|
|
4725
|
-
|
|
4789
|
+
toast10.error(error.message);
|
|
4726
4790
|
} finally {
|
|
4727
4791
|
if (optType === "other1") {
|
|
4728
4792
|
setIsUploadingOther1(false);
|
|
@@ -4773,7 +4837,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4773
4837
|
const maxAllowed = Math.max(0, 100 - otherSharesSum);
|
|
4774
4838
|
if (numValue > maxAllowed) {
|
|
4775
4839
|
numValue = maxAllowed;
|
|
4776
|
-
|
|
4840
|
+
toast10.error(`Total shares cannot exceed 100%. Remaining: ${maxAllowed}%`, { id: "share-limit" });
|
|
4777
4841
|
} else if (numValue < 0) numValue = 0;
|
|
4778
4842
|
updated[index] = { ...updated[index], [key]: numValue.toString() };
|
|
4779
4843
|
}
|
|
@@ -4804,7 +4868,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4804
4868
|
updatedMembers[memberIndex] = { ...updatedMembers[memberIndex], idExtractedData: data.data, idFileUrl: uploadData.data.fileUrl, idMetadata: { fileName: file.name, contentType: file.type, fileSizeInBytes: file.size } };
|
|
4805
4869
|
setFormData({ ...formData, members: updatedMembers });
|
|
4806
4870
|
saveProgress({ ...formData, members: updatedMembers });
|
|
4807
|
-
} else
|
|
4871
|
+
} else toast10.error(data.error || "Uh oh! Something went wrong.");
|
|
4808
4872
|
} else {
|
|
4809
4873
|
if (docType === "passport") setGlobalUploadingPassport(true);
|
|
4810
4874
|
else setGlobalUploadingSignature(true);
|
|
@@ -4821,10 +4885,10 @@ var UniversalRegistrationFlow = ({
|
|
|
4821
4885
|
}
|
|
4822
4886
|
setFormData({ ...formData, members: updatedMembers });
|
|
4823
4887
|
saveProgress({ ...formData, members: updatedMembers });
|
|
4824
|
-
} else
|
|
4888
|
+
} else toast10.error(`Failed to secure upload URL for ${docType}.`);
|
|
4825
4889
|
}
|
|
4826
4890
|
} catch (error) {
|
|
4827
|
-
|
|
4891
|
+
toast10.error(error.message);
|
|
4828
4892
|
} finally {
|
|
4829
4893
|
if (docType === "id") setGlobalExtractingId(false);
|
|
4830
4894
|
else if (docType === "passport") setGlobalUploadingPassport(false);
|
|
@@ -4873,7 +4937,7 @@ var UniversalRegistrationFlow = ({
|
|
|
4873
4937
|
setFormData(updatedForm);
|
|
4874
4938
|
saveProgress(updatedForm);
|
|
4875
4939
|
} else {
|
|
4876
|
-
|
|
4940
|
+
toast10.error(data.error || "Uh oh! Something went wrong.");
|
|
4877
4941
|
setAiTasks([{ id: "1", label: "Document Scanned", status: "success" }, { id: "2", label: "Extraction Failed", status: "error" }]);
|
|
4878
4942
|
}
|
|
4879
4943
|
} else {
|
|
@@ -4893,10 +4957,10 @@ var UniversalRegistrationFlow = ({
|
|
|
4893
4957
|
approveSection("signatureApproved", updatedForm);
|
|
4894
4958
|
}
|
|
4895
4959
|
setFormData(updatedForm);
|
|
4896
|
-
} else
|
|
4960
|
+
} else toast10.error(data.error || `Failed to upload ${docType}.`);
|
|
4897
4961
|
}
|
|
4898
4962
|
} catch (error) {
|
|
4899
|
-
|
|
4963
|
+
toast10.error(error.message);
|
|
4900
4964
|
} finally {
|
|
4901
4965
|
if (docType === "id") {
|
|
4902
4966
|
setGlobalExtractingId(false);
|
|
@@ -4979,10 +5043,10 @@ var UniversalRegistrationFlow = ({
|
|
|
4979
5043
|
}
|
|
4980
5044
|
const data = await baseApi("submit", finalJsonPayload);
|
|
4981
5045
|
if (data.success) {
|
|
4982
|
-
|
|
5046
|
+
toast10.success("Application Submitted!");
|
|
4983
5047
|
onRedirectToApplication(applicationId);
|
|
4984
5048
|
} else {
|
|
4985
|
-
|
|
5049
|
+
toast10.error(data.error || "Uh oh! Something went wrong.");
|
|
4986
5050
|
setIsSubmitting(false);
|
|
4987
5051
|
}
|
|
4988
5052
|
};
|
|
@@ -5031,7 +5095,7 @@ var UniversalRegistrationFlow = ({
|
|
|
5031
5095
|
|
|
5032
5096
|
// src/components/UniversalDeveloperSettings.tsx
|
|
5033
5097
|
import React54, { useState as useState33, useEffect as useEffect22 } from "react";
|
|
5034
|
-
import { toast as
|
|
5098
|
+
import { toast as toast11 } from "react-hot-toast";
|
|
5035
5099
|
import { HugeiconsIcon as HugeiconsIcon37 } from "@hugeicons/react";
|
|
5036
5100
|
import { Loading03Icon as Loading03Icon19, CircleLock02Icon as CircleLock02Icon5 } from "@hugeicons/core-free-icons";
|
|
5037
5101
|
var ButtonSpinner5 = () => /* @__PURE__ */ React54.createElement(HugeiconsIcon37, { icon: Loading03Icon19, size: 16, className: "animate-spin text-current" });
|
|
@@ -5078,13 +5142,13 @@ SECRET_KEY="${secKey}"
|
|
|
5078
5142
|
if (res.success && res.data) {
|
|
5079
5143
|
setPublicKey(res.data.publicKey);
|
|
5080
5144
|
downloadEnvironmentFile(res.data.publicKey, res.data.secretKey);
|
|
5081
|
-
|
|
5145
|
+
toast11.success("Keys generated. Check your downloads folder.");
|
|
5082
5146
|
setIsRollModalOpen(false);
|
|
5083
5147
|
} else {
|
|
5084
|
-
|
|
5148
|
+
toast11.error(res.error || "Uh oh! Something went wrong.");
|
|
5085
5149
|
}
|
|
5086
5150
|
} catch (error) {
|
|
5087
|
-
|
|
5151
|
+
toast11.error("Uh oh! Something went wrong.");
|
|
5088
5152
|
} finally {
|
|
5089
5153
|
setIsGenerating(false);
|
|
5090
5154
|
}
|
|
@@ -5097,12 +5161,12 @@ SECRET_KEY="${secKey}"
|
|
|
5097
5161
|
const res = await onSaveWebhook(webhookUrl);
|
|
5098
5162
|
if (res.success && res.data) {
|
|
5099
5163
|
setWebhookUrl(res.data.webhookUrl || "");
|
|
5100
|
-
|
|
5164
|
+
toast11.success("Webhook URL updated.");
|
|
5101
5165
|
} else {
|
|
5102
|
-
|
|
5166
|
+
toast11.error(res.error || "Uh oh! Something went wrong.");
|
|
5103
5167
|
}
|
|
5104
5168
|
} catch (error) {
|
|
5105
|
-
|
|
5169
|
+
toast11.error("Uh oh! Something went wrong.");
|
|
5106
5170
|
} finally {
|
|
5107
5171
|
setIsSavingWebhook(false);
|
|
5108
5172
|
}
|