@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 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] underline " }, "Terms of Service"), " and ", /* @__PURE__ */ import_react6.default.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6] underline " }, "Privacy Policy"), "."))), /* @__PURE__ */ import_react6.default.createElement(
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" }, "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(
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 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(
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: () => 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 },
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
- e.currentTarget.style.boxShadow = primaryHoverShadow;
4052
- e.currentTarget.style.transform = "translateY(-1px)";
4079
+ if (!isGeneratingReceipt) {
4080
+ e.currentTarget.style.boxShadow = primaryHoverShadow;
4081
+ e.currentTarget.style.transform = "translateY(-1px)";
4082
+ }
4053
4083
  },
4054
4084
  onMouseLeave: (e) => {
4055
- e.currentTarget.style.boxShadow = primaryBaseShadow;
4056
- e.currentTarget.style.transform = "translateY(0px)";
4085
+ if (!isGeneratingReceipt) {
4086
+ e.currentTarget.style.boxShadow = primaryBaseShadow;
4087
+ e.currentTarget.style.transform = "translateY(0px)";
4088
+ }
4057
4089
  },
4058
4090
  onMouseDown: (e) => {
4059
- e.currentTarget.style.boxShadow = primaryActiveShadow;
4060
- e.currentTarget.style.transform = "translateY(2px)";
4091
+ if (!isGeneratingReceipt) {
4092
+ e.currentTarget.style.boxShadow = primaryActiveShadow;
4093
+ e.currentTarget.style.transform = "translateY(2px)";
4094
+ }
4061
4095
  },
4062
4096
  onMouseUp: (e) => {
4063
- e.currentTarget.style.transform = "translateY(-1px)";
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" }, "Report Transaction")
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: () => 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"
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
- "Generate Receipt"
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: () => 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(
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: "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 },
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" }, "Download Pay ID")
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: () => onCopyAddress && onCopyAddress(selectedWallet),
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 import_react_hot_toast10 = __toESM(require("react-hot-toast"));
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
- import_react_hot_toast10.default.error("Uh oh! Something went wrong while loading.");
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
- import_react_hot_toast10.default.success("Application aborted.");
4693
+ import_react_hot_toast11.default.success("Application aborted.");
4630
4694
  setAppStatus("DRAFT");
4631
4695
  setMacroStep(0);
4632
4696
  setIsAbortModalOpen(false);
4633
- } else import_react_hot_toast10.default.error(data.error || "Uh oh! Something went wrong.");
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 import_react_hot_toast10.default.error(data.error || "Uh oh! Something went wrong.");
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
- import_react_hot_toast10.default.error(poll.data.error || "Uh oh! Something went wrong.");
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
- import_react_hot_toast10.default.error(data.error || "Uh oh! Something went wrong.");
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
- import_react_hot_toast10.default.error(error.message);
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
- import_react_hot_toast10.default.error(`Total shares cannot exceed 100%. Remaining: ${maxAllowed}%`, { id: "share-limit" });
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 import_react_hot_toast10.default.error(data.error || "Uh oh! Something went wrong.");
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 import_react_hot_toast10.default.error(`Failed to secure upload URL for ${docType}.`);
4891
+ } else import_react_hot_toast11.default.error(`Failed to secure upload URL for ${docType}.`);
4828
4892
  }
4829
4893
  } catch (error) {
4830
- import_react_hot_toast10.default.error(error.message);
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
- import_react_hot_toast10.default.error(data.error || "Uh oh! Something went wrong.");
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 import_react_hot_toast10.default.error(data.error || `Failed to upload ${docType}.`);
4963
+ } else import_react_hot_toast11.default.error(data.error || `Failed to upload ${docType}.`);
4900
4964
  }
4901
4965
  } catch (error) {
4902
- import_react_hot_toast10.default.error(error.message);
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
- import_react_hot_toast10.default.success("Application Submitted!");
5049
+ import_react_hot_toast11.default.success("Application Submitted!");
4986
5050
  onRedirectToApplication(applicationId);
4987
5051
  } else {
4988
- import_react_hot_toast10.default.error(data.error || "Uh oh! Something went wrong.");
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 import_react_hot_toast11 = require("react-hot-toast");
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
- import_react_hot_toast11.toast.success("Keys generated. Check your downloads folder.");
5148
+ import_react_hot_toast12.toast.success("Keys generated. Check your downloads folder.");
5085
5149
  setIsRollModalOpen(false);
5086
5150
  } else {
5087
- import_react_hot_toast11.toast.error(res.error || "Uh oh! Something went wrong.");
5151
+ import_react_hot_toast12.toast.error(res.error || "Uh oh! Something went wrong.");
5088
5152
  }
5089
5153
  } catch (error) {
5090
- import_react_hot_toast11.toast.error("Uh oh! Something went wrong.");
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
- import_react_hot_toast11.toast.success("Webhook URL updated.");
5167
+ import_react_hot_toast12.toast.success("Webhook URL updated.");
5104
5168
  } else {
5105
- import_react_hot_toast11.toast.error(res.error || "Uh oh! Something went wrong.");
5169
+ import_react_hot_toast12.toast.error(res.error || "Uh oh! Something went wrong.");
5106
5170
  }
5107
5171
  } catch (error) {
5108
- import_react_hot_toast11.toast.error("Uh oh! Something went wrong.");
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] underline " }, "Terms of Service"), " and ", /* @__PURE__ */ React5.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-[#1f26d6] underline " }, "Privacy Policy"), "."))), /* @__PURE__ */ React5.createElement(
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" }, "Defi 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(
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 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)), /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10" }, /* @__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()))), /* @__PURE__ */ React44.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React44.createElement(
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: () => onReportTransaction && onReportTransaction(selectedTransaction),
4041
- 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",
4042
- style: { boxShadow: primaryBaseShadow },
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
- e.currentTarget.style.boxShadow = primaryHoverShadow;
4045
- e.currentTarget.style.transform = "translateY(-1px)";
4072
+ if (!isGeneratingReceipt) {
4073
+ e.currentTarget.style.boxShadow = primaryHoverShadow;
4074
+ e.currentTarget.style.transform = "translateY(-1px)";
4075
+ }
4046
4076
  },
4047
4077
  onMouseLeave: (e) => {
4048
- e.currentTarget.style.boxShadow = primaryBaseShadow;
4049
- e.currentTarget.style.transform = "translateY(0px)";
4078
+ if (!isGeneratingReceipt) {
4079
+ e.currentTarget.style.boxShadow = primaryBaseShadow;
4080
+ e.currentTarget.style.transform = "translateY(0px)";
4081
+ }
4050
4082
  },
4051
4083
  onMouseDown: (e) => {
4052
- e.currentTarget.style.boxShadow = primaryActiveShadow;
4053
- e.currentTarget.style.transform = "translateY(2px)";
4084
+ if (!isGeneratingReceipt) {
4085
+ e.currentTarget.style.boxShadow = primaryActiveShadow;
4086
+ e.currentTarget.style.transform = "translateY(2px)";
4087
+ }
4054
4088
  },
4055
4089
  onMouseUp: (e) => {
4056
- e.currentTarget.style.transform = "translateY(-1px)";
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" }, "Report Transaction")
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: () => onGenerateReceipt && onGenerateReceipt(selectedTransaction),
4065
- className: "w-full flex items-center justify-center py-2 rounded-full border border-neutral-200 text-black outline-none text-[13px] tracking-wide"
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
- "Generate Receipt"
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: () => setSelectedWallet(null) }), /* @__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]" }, /* @__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: () => setSelectedWallet(null), 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(
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: "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",
4281
- style: { boxShadow: primaryBaseShadow },
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" }, "Download Pay ID")
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: () => onCopyAddress && onCopyAddress(selectedWallet),
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 toast9 from "react-hot-toast";
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
- toast9.error("Uh oh! Something went wrong while loading.");
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
- toast9.success("Application aborted.");
4690
+ toast10.success("Application aborted.");
4627
4691
  setAppStatus("DRAFT");
4628
4692
  setMacroStep(0);
4629
4693
  setIsAbortModalOpen(false);
4630
- } else toast9.error(data.error || "Uh oh! Something went wrong.");
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 toast9.error(data.error || "Uh oh! Something went wrong.");
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
- toast9.error(poll.data.error || "Uh oh! Something went wrong.");
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
- toast9.error(data.error || "Uh oh! Something went wrong.");
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
- toast9.error(error.message);
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
- toast9.error(`Total shares cannot exceed 100%. Remaining: ${maxAllowed}%`, { id: "share-limit" });
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 toast9.error(data.error || "Uh oh! Something went wrong.");
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 toast9.error(`Failed to secure upload URL for ${docType}.`);
4888
+ } else toast10.error(`Failed to secure upload URL for ${docType}.`);
4825
4889
  }
4826
4890
  } catch (error) {
4827
- toast9.error(error.message);
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
- toast9.error(data.error || "Uh oh! Something went wrong.");
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 toast9.error(data.error || `Failed to upload ${docType}.`);
4960
+ } else toast10.error(data.error || `Failed to upload ${docType}.`);
4897
4961
  }
4898
4962
  } catch (error) {
4899
- toast9.error(error.message);
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
- toast9.success("Application Submitted!");
5046
+ toast10.success("Application Submitted!");
4983
5047
  onRedirectToApplication(applicationId);
4984
5048
  } else {
4985
- toast9.error(data.error || "Uh oh! Something went wrong.");
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 toast10 } from "react-hot-toast";
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
- toast10.success("Keys generated. Check your downloads folder.");
5145
+ toast11.success("Keys generated. Check your downloads folder.");
5082
5146
  setIsRollModalOpen(false);
5083
5147
  } else {
5084
- toast10.error(res.error || "Uh oh! Something went wrong.");
5148
+ toast11.error(res.error || "Uh oh! Something went wrong.");
5085
5149
  }
5086
5150
  } catch (error) {
5087
- toast10.error("Uh oh! Something went wrong.");
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
- toast10.success("Webhook URL updated.");
5164
+ toast11.success("Webhook URL updated.");
5101
5165
  } else {
5102
- toast10.error(res.error || "Uh oh! Something went wrong.");
5166
+ toast11.error(res.error || "Uh oh! Something went wrong.");
5103
5167
  }
5104
5168
  } catch (error) {
5105
- toast10.error("Uh oh! Something went wrong.");
5169
+ toast11.error("Uh oh! Something went wrong.");
5106
5170
  } finally {
5107
5171
  setIsSavingWebhook(false);
5108
5172
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "5.1.5",
3
+ "version": "5.1.10",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",