@retinalabsllc/zairusjs 14.0.50 → 14.0.60
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.js +86 -64
- package/dist/index.mjs +76 -54
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1688,18 +1688,61 @@ var UniversalHomeView = ({
|
|
|
1688
1688
|
};
|
|
1689
1689
|
|
|
1690
1690
|
// src/components/UniversalWalletPage.tsx
|
|
1691
|
-
var
|
|
1691
|
+
var import_react29 = __toESM(require("react"));
|
|
1692
1692
|
var import_react_hot_toast6 = __toESM(require("react-hot-toast"));
|
|
1693
|
+
var import_react30 = require("@hugeicons/react");
|
|
1694
|
+
var import_core_free_icons10 = require("@hugeicons/core-free-icons");
|
|
1695
|
+
|
|
1696
|
+
// src/components/ConfirmationDialog.tsx
|
|
1697
|
+
var import_react27 = __toESM(require("react"));
|
|
1693
1698
|
var import_react28 = require("@hugeicons/react");
|
|
1694
1699
|
var import_core_free_icons9 = require("@hugeicons/core-free-icons");
|
|
1695
|
-
var
|
|
1700
|
+
var ConfirmationDialog = ({
|
|
1701
|
+
isOpen,
|
|
1702
|
+
title,
|
|
1703
|
+
message,
|
|
1704
|
+
confirmText = "Confirm",
|
|
1705
|
+
cancelText = "Cancel",
|
|
1706
|
+
isProcessing = false,
|
|
1707
|
+
isDestructive = true,
|
|
1708
|
+
onClose,
|
|
1709
|
+
onConfirm
|
|
1710
|
+
}) => {
|
|
1711
|
+
if (!isOpen) return null;
|
|
1712
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react27.default.createElement(
|
|
1713
|
+
"div",
|
|
1714
|
+
{
|
|
1715
|
+
className: "absolute inset-0 bg-black/40 ",
|
|
1716
|
+
onClick: () => !isProcessing && onClose()
|
|
1717
|
+
}
|
|
1718
|
+
), /* @__PURE__ */ import_react27.default.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ import_react27.default.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react27.default.createElement(
|
|
1719
|
+
"button",
|
|
1720
|
+
{
|
|
1721
|
+
onClick: onClose,
|
|
1722
|
+
disabled: isProcessing,
|
|
1723
|
+
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1724
|
+
},
|
|
1725
|
+
cancelText
|
|
1726
|
+
), /* @__PURE__ */ import_react27.default.createElement(
|
|
1727
|
+
"button",
|
|
1728
|
+
{
|
|
1729
|
+
onClick: onConfirm,
|
|
1730
|
+
disabled: isProcessing,
|
|
1731
|
+
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-black hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1732
|
+
},
|
|
1733
|
+
isProcessing ? /* @__PURE__ */ import_react27.default.createElement(import_react28.HugeiconsIcon, { icon: import_core_free_icons9.Loading03Icon, className: "animate-spin", size: 18 }) : confirmText
|
|
1734
|
+
))));
|
|
1735
|
+
};
|
|
1736
|
+
|
|
1737
|
+
// src/components/UniversalWalletPage.tsx
|
|
1738
|
+
var PageSpinner3 = () => /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1696
1739
|
var truncateAddress2 = (ref) => {
|
|
1697
1740
|
if (!ref || ref.length <= 14) return ref;
|
|
1698
1741
|
return `${ref.substring(0, 11)}.....${ref.substring(ref.length - 11)}`;
|
|
1699
1742
|
};
|
|
1700
1743
|
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
1701
|
-
const [isLoaded, setIsLoaded] = (0,
|
|
1702
|
-
return /* @__PURE__ */
|
|
1744
|
+
const [isLoaded, setIsLoaded] = (0, import_react29.useState)(false);
|
|
1745
|
+
return /* @__PURE__ */ import_react29.default.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Loading03Icon, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ import_react29.default.createElement("img", { src, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
|
|
1703
1746
|
};
|
|
1704
1747
|
var UniversalWalletPage = ({
|
|
1705
1748
|
headerTitle,
|
|
@@ -1721,17 +1764,18 @@ var UniversalWalletPage = ({
|
|
|
1721
1764
|
const onBackHandler = onBack ?? (() => {
|
|
1722
1765
|
if (typeof window !== "undefined") window.history.back();
|
|
1723
1766
|
});
|
|
1724
|
-
const [selectedWallet, setSelectedWallet] = (0,
|
|
1725
|
-
const [localSearchQuery, setLocalSearchQuery] = (0,
|
|
1726
|
-
const [addModalOpen, setAddModalOpen] = (0,
|
|
1727
|
-
const [importModalOpen, setImportModalOpen] = (0,
|
|
1728
|
-
const [flowStep, setFlowStep] = (0,
|
|
1729
|
-
const [generatedPhrase, setGeneratedPhrase] = (0,
|
|
1730
|
-
const [hasBackedUp, setHasBackedUp] = (0,
|
|
1731
|
-
const [verifyWords, setVerifyWords] = (0,
|
|
1732
|
-
const [walletPassword, setWalletPassword] = (0,
|
|
1733
|
-
const [importWords, setImportWords] = (0,
|
|
1734
|
-
const [isProcessing, setIsProcessing] = (0,
|
|
1767
|
+
const [selectedWallet, setSelectedWallet] = (0, import_react29.useState)(null);
|
|
1768
|
+
const [localSearchQuery, setLocalSearchQuery] = (0, import_react29.useState)("");
|
|
1769
|
+
const [addModalOpen, setAddModalOpen] = (0, import_react29.useState)(false);
|
|
1770
|
+
const [importModalOpen, setImportModalOpen] = (0, import_react29.useState)(false);
|
|
1771
|
+
const [flowStep, setFlowStep] = (0, import_react29.useState)(1);
|
|
1772
|
+
const [generatedPhrase, setGeneratedPhrase] = (0, import_react29.useState)("");
|
|
1773
|
+
const [hasBackedUp, setHasBackedUp] = (0, import_react29.useState)(false);
|
|
1774
|
+
const [verifyWords, setVerifyWords] = (0, import_react29.useState)([]);
|
|
1775
|
+
const [walletPassword, setWalletPassword] = (0, import_react29.useState)("");
|
|
1776
|
+
const [importWords, setImportWords] = (0, import_react29.useState)(Array(24).fill(""));
|
|
1777
|
+
const [isProcessing, setIsProcessing] = (0, import_react29.useState)(false);
|
|
1778
|
+
const [showCopyWarning, setShowCopyWarning] = (0, import_react29.useState)(false);
|
|
1735
1779
|
const filteredWallets = wallets.filter((wallet) => {
|
|
1736
1780
|
const q = localSearchQuery.toLowerCase();
|
|
1737
1781
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -1743,6 +1787,13 @@ var UniversalWalletPage = ({
|
|
|
1743
1787
|
}).catch(() => import_react_hot_toast6.default.error("Failed to copy."));
|
|
1744
1788
|
}
|
|
1745
1789
|
};
|
|
1790
|
+
const confirmCopyAddress = () => {
|
|
1791
|
+
if (selectedWallet) {
|
|
1792
|
+
handleCopy(selectedWallet.address, true);
|
|
1793
|
+
if (onCopyAddress) onCopyAddress(selectedWallet);
|
|
1794
|
+
}
|
|
1795
|
+
setShowCopyWarning(false);
|
|
1796
|
+
};
|
|
1746
1797
|
const handleDownloadTxt = () => {
|
|
1747
1798
|
const element = document.createElement("a");
|
|
1748
1799
|
const fileContent = generatedPhrase;
|
|
@@ -1829,7 +1880,7 @@ var UniversalWalletPage = ({
|
|
|
1829
1880
|
setIsProcessing(false);
|
|
1830
1881
|
}
|
|
1831
1882
|
};
|
|
1832
|
-
return /* @__PURE__ */
|
|
1883
|
+
return /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ import_react29.default.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react29.default.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-row flex-nowrap mb-4 items-center justify-between gap-4 w-full" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Search01Icon, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ import_react29.default.createElement(
|
|
1833
1884
|
"input",
|
|
1834
1885
|
{
|
|
1835
1886
|
type: "text",
|
|
@@ -1838,7 +1889,7 @@ var UniversalWalletPage = ({
|
|
|
1838
1889
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1839
1890
|
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black placeholder-neutral-400 outline-none transition-colors focus:border-black"
|
|
1840
1891
|
}
|
|
1841
|
-
)), !external && /* @__PURE__ */
|
|
1892
|
+
)), !external && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ import_react29.default.createElement("button", { onClick: startWalletGeneration, className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.PlusSignIcon, size: 16 })), /* @__PURE__ */ import_react29.default.createElement("button", { onClick: startWalletImport, className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Upload01Icon, size: 16 })))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react29.default.createElement(PageSpinner3, null) : /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react29.default.createElement("div", null, filteredWallets.length === 0 ? /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No wallets found") : filteredWallets.map((wallet) => /* @__PURE__ */ import_react29.default.createElement("div", { key: wallet.id, onClick: () => setSelectedWallet(wallet), className: "flex items-center justify-between py-4 hover:bg-neutral-50 transition-colors cursor-pointer group min-w-0 px-3 -mx-3 rounded-xl" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative shrink-0" }, /* @__PURE__ */ import_react29.default.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), wallet.networkLogoSrc && /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute -bottom-1 -right-1 w-4 h-4 rounded-full border border-white bg-white overflow-hidden shadow-sm" }, /* @__PURE__ */ import_react29.default.createElement("img", { src: wallet.networkLogoSrc, alt: "Network", className: "w-full h-full object-cover" }))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-[13px] text-black truncate" }, wallet.name), !external && wallet.isActive !== void 0 && /* @__PURE__ */ import_react29.default.createElement("span", { className: `text-[9px] px-1.5 py-0.5 rounded-sm tracking-widest uppercase ${wallet.isActive ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"}` }, wallet.isActive ? "Active" : "Inactive")), /* @__PURE__ */ import_react29.default.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts && !external ? "blur-sm opacity-40 select-none" : ""}` }, external ? wallet.currency : `${wallet.balance} ${wallet.currency}`))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[10px] tracking-wide text-neutral-600 bg-neutral-100 px-2.5 py-1 rounded-full " }, wallet.network)))))))), addModalOpen && /* @__PURE__ */ import_react29.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isProcessing && setAddModalOpen(false) }), /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react29.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, flowStep === 1 ? "Important Notice" : flowStep === 2 ? "Secret Recovery Phrase" : flowStep === 3 ? "Verify Phrase" : "Secure Wallet"), /* @__PURE__ */ import_react29.default.createElement("button", { onClick: () => !isProcessing && setAddModalOpen(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "p-6" }, flowStep === 1 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react29.default.createElement(Banner, { type: "alert", title: "Critical Warning", message: "You are about to generate a Self-Custodial Recovery Phrase. This phrase is the absolute master key to your wallet and all assets within it. Aeona DOES NOT store this phrase. If you lose it, your funds are permanently lost. Do not share this phrase with anyone.", isDismissible: false }), /* @__PURE__ */ import_react29.default.createElement(ThreeDActionButton, { onClick: handleCreationNext, className: "w-full mt-2" }, "I Understand, Generate Phrase")), flowStep === 2 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-sm text-neutral-600" }, "Please write down these words in the exact order shown. Store them in a secure, offline location."), /* @__PURE__ */ import_react29.default.createElement("div", { className: "grid grid-cols-3 gap-2 max-h-48 overflow-y-auto custom-scrollbar pr-1" }, generatedPhrase.split(" ").map((word, idx) => /* @__PURE__ */ import_react29.default.createElement("div", { key: idx, className: "flex items-center gap-1.5 bg-neutral-50 rounded-lg p-2 selection:bg-neutral-200" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[10px] text-neutral-400 select-none w-4 text-right shrink-0" }, idx + 1, "."), /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] text-black " }, word)))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center justify-between gap-2 0 pt-4" }, /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => handleCopy(generatedPhrase, false), className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Copy01Icon, size: 14 }), " Copy Phrase"), /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: handleDownloadTxt, className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Download01Icon, size: 14 }), " Download .txt")), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-start gap-3 p-3 rounded-xl border border-neutral-200 mt-2" }, /* @__PURE__ */ import_react29.default.createElement("input", { type: "checkbox", id: "backup-confirm", checked: hasBackedUp, onChange: (e) => setHasBackedUp(e.target.checked), className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer shrink-0" }), /* @__PURE__ */ import_react29.default.createElement("label", { htmlFor: "backup-confirm", className: "text-xs text-neutral-600 cursor-pointer leading-relaxed" }, "I have securely copied and stored my recovery phrase. I understand that if I lose it, my funds are gone forever.")), /* @__PURE__ */ import_react29.default.createElement(ThreeDActionButton, { onClick: handleCreationNext, className: "w-full mt-2" }, "Continue")), flowStep === 3 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-sm text-neutral-600" }, "Please enter or paste your recovery phrase below to verify your backup."), /* @__PURE__ */ import_react29.default.createElement("div", { className: "grid grid-cols-3 gap-2 max-h-56 overflow-y-auto custom-scrollbar pr-1 pb-1" }, verifyWords.map((word, idx) => /* @__PURE__ */ import_react29.default.createElement("div", { key: idx, className: "flex items-center gap-1 bg-white border border-neutral-200 focus-within:border-black rounded-lg p-1.5 transition-colors" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[10px] text-neutral-400 w-4 shrink-0 text-right select-none" }, idx + 1, "."), /* @__PURE__ */ import_react29.default.createElement(
|
|
1842
1893
|
"input",
|
|
1843
1894
|
{
|
|
1844
1895
|
type: "text",
|
|
@@ -1863,7 +1914,7 @@ var UniversalWalletPage = ({
|
|
|
1863
1914
|
},
|
|
1864
1915
|
className: "w-full bg-transparent text-[13px] text-black outline-none min-w-0"
|
|
1865
1916
|
}
|
|
1866
|
-
)))), /* @__PURE__ */
|
|
1917
|
+
)))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center justify-between pt-4" }, /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => handleGridPaste(setVerifyWords, verifyWords), className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.ClipboardIcon, size: 14 }), " Paste Phrase")), /* @__PURE__ */ import_react29.default.createElement(ThreeDActionButton, { onClick: handleCreationNext, className: "w-full mt-2" }, "Verify Backup")), flowStep === 4 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ import_react29.default.createElement(Banner, { type: "success", title: "Phrase Verified", message: "Your phrase is correct. Now set a local password to encrypt your wallet on this browser.", isDismissible: false }), /* @__PURE__ */ import_react29.default.createElement(TextInput, { label: "Local Password", type: "password", value: walletPassword, onChange: setWalletPassword, placeholder: "Enter a strong password" }), /* @__PURE__ */ import_react29.default.createElement(ThreeDActionButton, { onClick: () => handleSaveWallet("generated"), isLoading: isProcessing, className: "w-full mt-2" }, "Encrypt & Save Wallet"))))), importModalOpen && /* @__PURE__ */ import_react29.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isProcessing && setImportModalOpen(false) }), /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react29.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Import Wallet"), /* @__PURE__ */ import_react29.default.createElement("button", { onClick: () => !isProcessing && setImportModalOpen(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "p-6" }, flowStep === 1 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-sm text-neutral-600" }, "Enter your 12 or 24-word recovery phrase to restore your wallet on this device."), /* @__PURE__ */ import_react29.default.createElement("div", { className: "grid grid-cols-3 gap-2 max-h-56 overflow-y-auto custom-scrollbar pr-1 pb-1" }, importWords.map((word, idx) => /* @__PURE__ */ import_react29.default.createElement("div", { key: idx, className: "flex items-center gap-1 bg-white border border-neutral-200 focus-within:border-black rounded-lg p-1.5 transition-colors" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[10px] text-neutral-400 w-4 shrink-0 text-right select-none" }, idx + 1, "."), /* @__PURE__ */ import_react29.default.createElement(
|
|
1867
1918
|
"input",
|
|
1868
1919
|
{
|
|
1869
1920
|
type: "text",
|
|
@@ -1889,15 +1940,27 @@ var UniversalWalletPage = ({
|
|
|
1889
1940
|
},
|
|
1890
1941
|
className: "w-full bg-transparent text-[13px] text-black outline-none min-w-0"
|
|
1891
1942
|
}
|
|
1892
|
-
)))), /* @__PURE__ */
|
|
1943
|
+
)))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center justify-between pt-4" }, /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => handleGridPaste(setImportWords, importWords), className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.ClipboardIcon, size: 14 }), " Paste Phrase")), /* @__PURE__ */ import_react29.default.createElement(ThreeDActionButton, { onClick: handleImportNext, className: "w-full mt-2" }, "Continue")), flowStep === 2 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-sm text-neutral-600" }, "Set a local password to encrypt this wallet on this specific browser."), /* @__PURE__ */ import_react29.default.createElement(TextInput, { label: "Local Password", type: "password", value: walletPassword, onChange: setWalletPassword, placeholder: "Enter a strong password" }), /* @__PURE__ */ import_react29.default.createElement(ThreeDActionButton, { onClick: () => handleSaveWallet("imported"), isLoading: isProcessing, className: "w-full mt-2" }, "Encrypt & Import Wallet"))))), selectedWallet && /* @__PURE__ */ import_react29.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedWallet(null) }), /* @__PURE__ */ import_react29.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_react29.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react29.default.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Wallet Details"), /* @__PURE__ */ import_react29.default.createElement("button", { onClick: () => setSelectedWallet(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-6" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative mb-4" }, /* @__PURE__ */ import_react29.default.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14" }), selectedWallet.networkLogoSrc && /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute -bottom-1 -right-1 w-5 h-5 rounded-full border border-white bg-white overflow-hidden shadow-sm" }, /* @__PURE__ */ import_react29.default.createElement("img", { src: selectedWallet.networkLogoSrc, alt: "Network", className: "w-full h-full object-cover" }))), /* @__PURE__ */ import_react29.default.createElement("h2", { className: `text-2xl text-black mb-2 transition-all duration-300 ${hideBalanceAmounts && !external ? "blur-[6px] opacity-40 select-none" : ""}` }, external ? selectedWallet.currency : `${selectedWallet.balance} ${selectedWallet.currency}`), /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full border border-neutral-200 mt-1 " }, selectedWallet.network, " NETWORK")), renderQrCode && /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, renderQrCode(selectedWallet)), external && /* @__PURE__ */ import_react29.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1893
1944
|
Banner,
|
|
1894
1945
|
{
|
|
1895
1946
|
type: "warning",
|
|
1896
1947
|
title: "Important Network Notice",
|
|
1897
|
-
message:
|
|
1948
|
+
message: `Ensure you only send assets using the exact network specified. Minimum deposit is 15 ${selectedWallet.currency}. Sending funds through an unsupported network or under the minimum will result in permanent loss of funds.`,
|
|
1898
1949
|
isDismissible: false
|
|
1899
1950
|
}
|
|
1900
|
-
)), /* @__PURE__ */
|
|
1951
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, truncateAddress2(selectedWallet.address)), /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Copy01Icon, size: 14 })))), !external && /* @__PURE__ */ import_react29.default.createElement("div", null, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Status"), selectedWallet.isActive ? /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-emerald-50 text-emerald-600 " }, "Active on this device") : /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-red-50 text-red-600 " }, "Inactive - Requires Import"))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react29.default.createElement(ThreeDActionButton, { onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet), isLoading: isGeneratingStatement, className: "w-full" }, "Generate Statement"), /* @__PURE__ */ import_react29.default.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 outline-none text-xs tracking-wide transition-colors" }, "Copy Wallet Address"))))), selectedWallet && /* @__PURE__ */ import_react29.default.createElement(
|
|
1952
|
+
ConfirmationDialog,
|
|
1953
|
+
{
|
|
1954
|
+
isOpen: showCopyWarning,
|
|
1955
|
+
title: "Quick Heads Up!",
|
|
1956
|
+
message: `You must send at least 15 ${selectedWallet.currency}. If you send anything less than that, or choose the wrong network, your money will be lost forever.`,
|
|
1957
|
+
confirmText: "Confirm & Copy",
|
|
1958
|
+
cancelText: "Cancel",
|
|
1959
|
+
isDestructive: false,
|
|
1960
|
+
onClose: () => setShowCopyWarning(false),
|
|
1961
|
+
onConfirm: confirmCopyAddress
|
|
1962
|
+
}
|
|
1963
|
+
)));
|
|
1901
1964
|
};
|
|
1902
1965
|
|
|
1903
1966
|
// src/components/UniversalCardPage.tsx
|
|
@@ -1906,47 +1969,6 @@ var import_navigation4 = require("next/navigation");
|
|
|
1906
1969
|
var import_react34 = require("@hugeicons/react");
|
|
1907
1970
|
var import_core_free_icons12 = require("@hugeicons/core-free-icons");
|
|
1908
1971
|
|
|
1909
|
-
// src/components/ConfirmationDialog.tsx
|
|
1910
|
-
var import_react29 = __toESM(require("react"));
|
|
1911
|
-
var import_react30 = require("@hugeicons/react");
|
|
1912
|
-
var import_core_free_icons10 = require("@hugeicons/core-free-icons");
|
|
1913
|
-
var ConfirmationDialog = ({
|
|
1914
|
-
isOpen,
|
|
1915
|
-
title,
|
|
1916
|
-
message,
|
|
1917
|
-
confirmText = "Confirm",
|
|
1918
|
-
cancelText = "Cancel",
|
|
1919
|
-
isProcessing = false,
|
|
1920
|
-
isDestructive = true,
|
|
1921
|
-
onClose,
|
|
1922
|
-
onConfirm
|
|
1923
|
-
}) => {
|
|
1924
|
-
if (!isOpen) return null;
|
|
1925
|
-
return /* @__PURE__ */ import_react29.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1926
|
-
"div",
|
|
1927
|
-
{
|
|
1928
|
-
className: "absolute inset-0 bg-black/40 ",
|
|
1929
|
-
onClick: () => !isProcessing && onClose()
|
|
1930
|
-
}
|
|
1931
|
-
), /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ import_react29.default.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
1932
|
-
"button",
|
|
1933
|
-
{
|
|
1934
|
-
onClick: onClose,
|
|
1935
|
-
disabled: isProcessing,
|
|
1936
|
-
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1937
|
-
},
|
|
1938
|
-
cancelText
|
|
1939
|
-
), /* @__PURE__ */ import_react29.default.createElement(
|
|
1940
|
-
"button",
|
|
1941
|
-
{
|
|
1942
|
-
onClick: onConfirm,
|
|
1943
|
-
disabled: isProcessing,
|
|
1944
|
-
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-black hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1945
|
-
},
|
|
1946
|
-
isProcessing ? /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons10.Loading03Icon, className: "animate-spin", size: 18 }) : confirmText
|
|
1947
|
-
))));
|
|
1948
|
-
};
|
|
1949
|
-
|
|
1950
1972
|
// src/components/PinDialerBottomSheet.tsx
|
|
1951
1973
|
var import_react31 = __toESM(require("react"));
|
|
1952
1974
|
var import_react32 = require("@hugeicons/react");
|
|
@@ -2141,7 +2163,7 @@ var UniversalCardPage = ({
|
|
|
2141
2163
|
"div",
|
|
2142
2164
|
{
|
|
2143
2165
|
className: "relative w-full max-w-85",
|
|
2144
|
-
style: { height:
|
|
2166
|
+
style: { height: 186 }
|
|
2145
2167
|
},
|
|
2146
2168
|
!isBgLoaded && /* @__PURE__ */ import_react33.default.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50" }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 28, className: "animate-spin text-black" })),
|
|
2147
2169
|
showActionOverlay && /* @__PURE__ */ import_react33.default.createElement("div", { className: `absolute inset-0 z-40 w-full h-full rounded-2xl flex flex-col items-center justify-center transition-all ${overlayClasses}` }, isUnactivated && /* @__PURE__ */ import_react33.default.createElement(
|
|
@@ -4080,7 +4102,7 @@ var UniversalRewardPage = ({
|
|
|
4080
4102
|
setIsClaiming(false);
|
|
4081
4103
|
}
|
|
4082
4104
|
};
|
|
4083
|
-
return /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ import_react69.default.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react69.default.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ import_react69.default.createElement(import_react_confetti.default, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), isLoading ? /* @__PURE__ */ import_react69.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full p-4 pt-10 mb-6 flex items-end justify-center gap-2 sm:gap-6 h-64 relative overflow-hidden" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, secondPlace ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(secondPlace.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: secondPlace.profile.avatarUrl, alt: secondPlace.profile.username, name: formatWeb3Name(secondPlace.profile.web3Name), sizeClass: "w-14 h-14 ring-4 ring-orange-100" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-
|
|
4105
|
+
return /* @__PURE__ */ import_react69.default.createElement("div", null, /* @__PURE__ */ import_react69.default.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ import_react69.default.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ import_react69.default.createElement(import_react70.HugeiconsIcon, { icon: import_core_free_icons23.ArrowLeft01Icon, size: 16 }), " Back")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react69.default.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ import_react69.default.createElement(import_react_confetti.default, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), isLoading ? /* @__PURE__ */ import_react69.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full p-4 pt-10 mb-6 flex items-end justify-center gap-2 sm:gap-6 h-64 relative overflow-hidden" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, secondPlace ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(secondPlace.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: secondPlace.profile.avatarUrl, alt: secondPlace.profile.username, name: formatWeb3Name(secondPlace.profile.web3Name), sizeClass: "w-14 h-14 ring-4 ring-orange-100" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-[#ceff8a] text-black flex items-center justify-center text-[10px] border border-white " }, "2")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#ceff8a] rounded-t-xl h-24 flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-neutral-800/30 text-2xl " }, "2nd"))) : /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-24 mt-auto" })), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-20 -mt-8" }, firstPlace ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(firstPlace.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: firstPlace.profile.avatarUrl, alt: firstPlace.profile.username, name: formatWeb3Name(firstPlace.profile.web3Name), sizeClass: "w-17 h-17 ring-4 ring-purple-200" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute -bottom-2 right-2 w-5 h-5 rounded-full bg-[#143731] text-white flex items-center justify-center text-[10px] border border-white " }, "1")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#143731] rounded-t-xl h-32 flex items-center justify-center " }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-white/40 text-3xl tracking-widest" }, "1st"))) : /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-32 mt-auto" })), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, thirdPlace ? /* @__PURE__ */ import_react69.default.createElement(import_react69.default.Fragment, null, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(thirdPlace.profile.web3Name)), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ import_react69.default.createElement(AvatarLogo, { src: thirdPlace.profile.avatarUrl, alt: thirdPlace.profile.username, name: formatWeb3Name(thirdPlace.profile.web3Name), sizeClass: "w-12 h-12 ring-4 ring-blue-100" }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-[#ceff8a] text-black flex items-center justify-center text-[10px] border border-white " }, "3")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#ceff8a] rounded-t-xl h-20 flex items-center justify-center" }, /* @__PURE__ */ import_react69.default.createElement("span", { className: "text-neutral-800/30 text-xl " }, "3rd"))) : /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-20 mt-auto" }))), /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center justify-center mb-6 sm:mb-8 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar " }, tabs.map((tab, idx) => {
|
|
4084
4106
|
const isActive = activeTabIndex === idx;
|
|
4085
4107
|
return /* @__PURE__ */ import_react69.default.createElement(
|
|
4086
4108
|
"button",
|
package/dist/index.mjs
CHANGED
|
@@ -1645,13 +1645,13 @@ var UniversalHomeView = ({
|
|
|
1645
1645
|
};
|
|
1646
1646
|
|
|
1647
1647
|
// src/components/UniversalWalletPage.tsx
|
|
1648
|
-
import
|
|
1648
|
+
import React18, { useState as useState10 } from "react";
|
|
1649
1649
|
import toast5 from "react-hot-toast";
|
|
1650
|
-
import { HugeiconsIcon as
|
|
1650
|
+
import { HugeiconsIcon as HugeiconsIcon12 } from "@hugeicons/react";
|
|
1651
1651
|
import {
|
|
1652
1652
|
Search01Icon as Search01Icon2,
|
|
1653
1653
|
CancelCircleIcon as CancelCircleIcon4,
|
|
1654
|
-
Loading03Icon as
|
|
1654
|
+
Loading03Icon as Loading03Icon7,
|
|
1655
1655
|
Copy01Icon as Copy01Icon2,
|
|
1656
1656
|
ArrowLeft01Icon as ArrowLeft01Icon5,
|
|
1657
1657
|
PlusSignIcon,
|
|
@@ -1659,14 +1659,57 @@ import {
|
|
|
1659
1659
|
Download01Icon,
|
|
1660
1660
|
ClipboardIcon
|
|
1661
1661
|
} from "@hugeicons/core-free-icons";
|
|
1662
|
-
|
|
1662
|
+
|
|
1663
|
+
// src/components/ConfirmationDialog.tsx
|
|
1664
|
+
import React17 from "react";
|
|
1665
|
+
import { HugeiconsIcon as HugeiconsIcon11 } from "@hugeicons/react";
|
|
1666
|
+
import { Loading03Icon as Loading03Icon6 } from "@hugeicons/core-free-icons";
|
|
1667
|
+
var ConfirmationDialog = ({
|
|
1668
|
+
isOpen,
|
|
1669
|
+
title,
|
|
1670
|
+
message,
|
|
1671
|
+
confirmText = "Confirm",
|
|
1672
|
+
cancelText = "Cancel",
|
|
1673
|
+
isProcessing = false,
|
|
1674
|
+
isDestructive = true,
|
|
1675
|
+
onClose,
|
|
1676
|
+
onConfirm
|
|
1677
|
+
}) => {
|
|
1678
|
+
if (!isOpen) return null;
|
|
1679
|
+
return /* @__PURE__ */ React17.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React17.createElement(
|
|
1680
|
+
"div",
|
|
1681
|
+
{
|
|
1682
|
+
className: "absolute inset-0 bg-black/40 ",
|
|
1683
|
+
onClick: () => !isProcessing && onClose()
|
|
1684
|
+
}
|
|
1685
|
+
), /* @__PURE__ */ React17.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React17.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ React17.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ React17.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ React17.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React17.createElement(
|
|
1686
|
+
"button",
|
|
1687
|
+
{
|
|
1688
|
+
onClick: onClose,
|
|
1689
|
+
disabled: isProcessing,
|
|
1690
|
+
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1691
|
+
},
|
|
1692
|
+
cancelText
|
|
1693
|
+
), /* @__PURE__ */ React17.createElement(
|
|
1694
|
+
"button",
|
|
1695
|
+
{
|
|
1696
|
+
onClick: onConfirm,
|
|
1697
|
+
disabled: isProcessing,
|
|
1698
|
+
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-black hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1699
|
+
},
|
|
1700
|
+
isProcessing ? /* @__PURE__ */ React17.createElement(HugeiconsIcon11, { icon: Loading03Icon6, className: "animate-spin", size: 18 }) : confirmText
|
|
1701
|
+
))));
|
|
1702
|
+
};
|
|
1703
|
+
|
|
1704
|
+
// src/components/UniversalWalletPage.tsx
|
|
1705
|
+
var PageSpinner3 = () => /* @__PURE__ */ React18.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon7, size: 32, className: "animate-spin mb-4 text-black" }));
|
|
1663
1706
|
var truncateAddress2 = (ref) => {
|
|
1664
1707
|
if (!ref || ref.length <= 14) return ref;
|
|
1665
1708
|
return `${ref.substring(0, 11)}.....${ref.substring(ref.length - 11)}`;
|
|
1666
1709
|
};
|
|
1667
1710
|
var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
|
|
1668
1711
|
const [isLoaded, setIsLoaded] = useState10(false);
|
|
1669
|
-
return /* @__PURE__ */
|
|
1712
|
+
return /* @__PURE__ */ React18.createElement("div", { className: `relative shrink-0 rounded-full bg-neutral-100 flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon7, size: 16, className: "animate-spin text-neutral-400 absolute" }), /* @__PURE__ */ React18.createElement("img", { src, alt, onLoad: () => setIsLoaded(true), className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}` }));
|
|
1670
1713
|
};
|
|
1671
1714
|
var UniversalWalletPage = ({
|
|
1672
1715
|
headerTitle,
|
|
@@ -1699,6 +1742,7 @@ var UniversalWalletPage = ({
|
|
|
1699
1742
|
const [walletPassword, setWalletPassword] = useState10("");
|
|
1700
1743
|
const [importWords, setImportWords] = useState10(Array(24).fill(""));
|
|
1701
1744
|
const [isProcessing, setIsProcessing] = useState10(false);
|
|
1745
|
+
const [showCopyWarning, setShowCopyWarning] = useState10(false);
|
|
1702
1746
|
const filteredWallets = wallets.filter((wallet) => {
|
|
1703
1747
|
const q = localSearchQuery.toLowerCase();
|
|
1704
1748
|
return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
|
|
@@ -1710,6 +1754,13 @@ var UniversalWalletPage = ({
|
|
|
1710
1754
|
}).catch(() => toast5.error("Failed to copy."));
|
|
1711
1755
|
}
|
|
1712
1756
|
};
|
|
1757
|
+
const confirmCopyAddress = () => {
|
|
1758
|
+
if (selectedWallet) {
|
|
1759
|
+
handleCopy(selectedWallet.address, true);
|
|
1760
|
+
if (onCopyAddress) onCopyAddress(selectedWallet);
|
|
1761
|
+
}
|
|
1762
|
+
setShowCopyWarning(false);
|
|
1763
|
+
};
|
|
1713
1764
|
const handleDownloadTxt = () => {
|
|
1714
1765
|
const element = document.createElement("a");
|
|
1715
1766
|
const fileContent = generatedPhrase;
|
|
@@ -1796,7 +1847,7 @@ var UniversalWalletPage = ({
|
|
|
1796
1847
|
setIsProcessing(false);
|
|
1797
1848
|
}
|
|
1798
1849
|
};
|
|
1799
|
-
return /* @__PURE__ */
|
|
1850
|
+
return /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React18.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: ArrowLeft01Icon5, size: 16 }), " Back")), /* @__PURE__ */ React18.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React18.createElement(ManagedToaster, null), !hideControls && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-row flex-nowrap mb-4 items-center justify-between gap-4 w-full" }, /* @__PURE__ */ React18.createElement("div", { className: "relative flex-1 min-w-0 max-w-full" }, /* @__PURE__ */ React18.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Search01Icon2, size: 16, className: "text-neutral-400" })), /* @__PURE__ */ React18.createElement(
|
|
1800
1851
|
"input",
|
|
1801
1852
|
{
|
|
1802
1853
|
type: "text",
|
|
@@ -1805,7 +1856,7 @@ var UniversalWalletPage = ({
|
|
|
1805
1856
|
onChange: (e) => setLocalSearchQuery(e.target.value),
|
|
1806
1857
|
className: "w-full pl-10 pr-4 py-2 bg-white rounded-full text-[13px] text-black placeholder-neutral-400 outline-none transition-colors focus:border-black"
|
|
1807
1858
|
}
|
|
1808
|
-
)), !external && /* @__PURE__ */
|
|
1859
|
+
)), !external && /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-3 w-auto pb-0 shrink-0" }, /* @__PURE__ */ React18.createElement("button", { onClick: startWalletGeneration, className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: PlusSignIcon, size: 16 })), /* @__PURE__ */ React18.createElement("button", { onClick: startWalletImport, className: "flex items-center justify-center bg-white w-9 h-9 rounded-full text-neutral-500 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Upload01Icon, size: 16 })))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-white w-full" }, /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("h1", { className: "text-black text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ React18.createElement("p", { className: "text-xs text-neutral-500" }, headerDescription))), /* @__PURE__ */ React18.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ React18.createElement(PageSpinner3, null) : /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React18.createElement("div", null, filteredWallets.length === 0 ? /* @__PURE__ */ React18.createElement("p", { className: "text-xs text-neutral-400 py-6 text-center" }, "No wallets found") : filteredWallets.map((wallet) => /* @__PURE__ */ React18.createElement("div", { key: wallet.id, onClick: () => setSelectedWallet(wallet), className: "flex items-center justify-between py-4 hover:bg-neutral-50 transition-colors cursor-pointer group min-w-0 px-3 -mx-3 rounded-xl" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React18.createElement("div", { className: "relative shrink-0" }, /* @__PURE__ */ React18.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), wallet.networkLogoSrc && /* @__PURE__ */ React18.createElement("div", { className: "absolute -bottom-1 -right-1 w-4 h-4 rounded-full border border-white bg-white overflow-hidden shadow-sm" }, /* @__PURE__ */ React18.createElement("img", { src: wallet.networkLogoSrc, alt: "Network", className: "w-full h-full object-cover" }))), /* @__PURE__ */ React18.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React18.createElement("p", { className: "text-[13px] text-black truncate" }, wallet.name), !external && wallet.isActive !== void 0 && /* @__PURE__ */ React18.createElement("span", { className: `text-[9px] px-1.5 py-0.5 rounded-sm tracking-widest uppercase ${wallet.isActive ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"}` }, wallet.isActive ? "Active" : "Inactive")), /* @__PURE__ */ React18.createElement("p", { className: `text-[13px] text-neutral-500 truncate transition-all duration-300 ${hideBalanceAmounts && !external ? "blur-sm opacity-40 select-none" : ""}` }, external ? wallet.currency : `${wallet.balance} ${wallet.currency}`))), /* @__PURE__ */ React18.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] tracking-wide text-neutral-600 bg-neutral-100 px-2.5 py-1 rounded-full " }, wallet.network)))))))), addModalOpen && /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isProcessing && setAddModalOpen(false) }), /* @__PURE__ */ React18.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, flowStep === 1 ? "Important Notice" : flowStep === 2 ? "Secret Recovery Phrase" : flowStep === 3 ? "Verify Phrase" : "Secure Wallet"), /* @__PURE__ */ React18.createElement("button", { onClick: () => !isProcessing && setAddModalOpen(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: CancelCircleIcon4, size: 18 }))), /* @__PURE__ */ React18.createElement("div", { className: "p-6" }, flowStep === 1 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ React18.createElement(Banner, { type: "alert", title: "Critical Warning", message: "You are about to generate a Self-Custodial Recovery Phrase. This phrase is the absolute master key to your wallet and all assets within it. Aeona DOES NOT store this phrase. If you lose it, your funds are permanently lost. Do not share this phrase with anyone.", isDismissible: false }), /* @__PURE__ */ React18.createElement(ThreeDActionButton, { onClick: handleCreationNext, className: "w-full mt-2" }, "I Understand, Generate Phrase")), flowStep === 2 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ React18.createElement("p", { className: "text-sm text-neutral-600" }, "Please write down these words in the exact order shown. Store them in a secure, offline location."), /* @__PURE__ */ React18.createElement("div", { className: "grid grid-cols-3 gap-2 max-h-48 overflow-y-auto custom-scrollbar pr-1" }, generatedPhrase.split(" ").map((word, idx) => /* @__PURE__ */ React18.createElement("div", { key: idx, className: "flex items-center gap-1.5 bg-neutral-50 rounded-lg p-2 selection:bg-neutral-200" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] text-neutral-400 select-none w-4 text-right shrink-0" }, idx + 1, "."), /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] text-black " }, word)))), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between gap-2 0 pt-4" }, /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => handleCopy(generatedPhrase, false), className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Copy01Icon2, size: 14 }), " Copy Phrase"), /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: handleDownloadTxt, className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Download01Icon, size: 14 }), " Download .txt")), /* @__PURE__ */ React18.createElement("div", { className: "flex items-start gap-3 p-3 rounded-xl border border-neutral-200 mt-2" }, /* @__PURE__ */ React18.createElement("input", { type: "checkbox", id: "backup-confirm", checked: hasBackedUp, onChange: (e) => setHasBackedUp(e.target.checked), className: "mt-0.5 w-4 h-4 bg-white border-neutral-300 rounded text-black focus:ring-black cursor-pointer shrink-0" }), /* @__PURE__ */ React18.createElement("label", { htmlFor: "backup-confirm", className: "text-xs text-neutral-600 cursor-pointer leading-relaxed" }, "I have securely copied and stored my recovery phrase. I understand that if I lose it, my funds are gone forever.")), /* @__PURE__ */ React18.createElement(ThreeDActionButton, { onClick: handleCreationNext, className: "w-full mt-2" }, "Continue")), flowStep === 3 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ React18.createElement("p", { className: "text-sm text-neutral-600" }, "Please enter or paste your recovery phrase below to verify your backup."), /* @__PURE__ */ React18.createElement("div", { className: "grid grid-cols-3 gap-2 max-h-56 overflow-y-auto custom-scrollbar pr-1 pb-1" }, verifyWords.map((word, idx) => /* @__PURE__ */ React18.createElement("div", { key: idx, className: "flex items-center gap-1 bg-white border border-neutral-200 focus-within:border-black rounded-lg p-1.5 transition-colors" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] text-neutral-400 w-4 shrink-0 text-right select-none" }, idx + 1, "."), /* @__PURE__ */ React18.createElement(
|
|
1809
1860
|
"input",
|
|
1810
1861
|
{
|
|
1811
1862
|
type: "text",
|
|
@@ -1830,7 +1881,7 @@ var UniversalWalletPage = ({
|
|
|
1830
1881
|
},
|
|
1831
1882
|
className: "w-full bg-transparent text-[13px] text-black outline-none min-w-0"
|
|
1832
1883
|
}
|
|
1833
|
-
)))), /* @__PURE__ */
|
|
1884
|
+
)))), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between pt-4" }, /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => handleGridPaste(setVerifyWords, verifyWords), className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: ClipboardIcon, size: 14 }), " Paste Phrase")), /* @__PURE__ */ React18.createElement(ThreeDActionButton, { onClick: handleCreationNext, className: "w-full mt-2" }, "Verify Backup")), flowStep === 4 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ React18.createElement(Banner, { type: "success", title: "Phrase Verified", message: "Your phrase is correct. Now set a local password to encrypt your wallet on this browser.", isDismissible: false }), /* @__PURE__ */ React18.createElement(TextInput, { label: "Local Password", type: "password", value: walletPassword, onChange: setWalletPassword, placeholder: "Enter a strong password" }), /* @__PURE__ */ React18.createElement(ThreeDActionButton, { onClick: () => handleSaveWallet("generated"), isLoading: isProcessing, className: "w-full mt-2" }, "Encrypt & Save Wallet"))))), importModalOpen && /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => !isProcessing && setImportModalOpen(false) }), /* @__PURE__ */ React18.createElement("div", { className: "relative w-full max-w-md bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Import Wallet"), /* @__PURE__ */ React18.createElement("button", { onClick: () => !isProcessing && setImportModalOpen(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: CancelCircleIcon4, size: 18 }))), /* @__PURE__ */ React18.createElement("div", { className: "p-6" }, flowStep === 1 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in" }, /* @__PURE__ */ React18.createElement("p", { className: "text-sm text-neutral-600" }, "Enter your 12 or 24-word recovery phrase to restore your wallet on this device."), /* @__PURE__ */ React18.createElement("div", { className: "grid grid-cols-3 gap-2 max-h-56 overflow-y-auto custom-scrollbar pr-1 pb-1" }, importWords.map((word, idx) => /* @__PURE__ */ React18.createElement("div", { key: idx, className: "flex items-center gap-1 bg-white border border-neutral-200 focus-within:border-black rounded-lg p-1.5 transition-colors" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] text-neutral-400 w-4 shrink-0 text-right select-none" }, idx + 1, "."), /* @__PURE__ */ React18.createElement(
|
|
1834
1885
|
"input",
|
|
1835
1886
|
{
|
|
1836
1887
|
type: "text",
|
|
@@ -1856,15 +1907,27 @@ var UniversalWalletPage = ({
|
|
|
1856
1907
|
},
|
|
1857
1908
|
className: "w-full bg-transparent text-[13px] text-black outline-none min-w-0"
|
|
1858
1909
|
}
|
|
1859
|
-
)))), /* @__PURE__ */
|
|
1910
|
+
)))), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between pt-4" }, /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => handleGridPaste(setImportWords, importWords), className: "text-xs text-black flex items-center gap-1.5 hover:underline outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: ClipboardIcon, size: 14 }), " Paste Phrase")), /* @__PURE__ */ React18.createElement(ThreeDActionButton, { onClick: handleImportNext, className: "w-full mt-2" }, "Continue")), flowStep === 2 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6 animate-in fade-in slide-in-from-right-4" }, /* @__PURE__ */ React18.createElement("p", { className: "text-sm text-neutral-600" }, "Set a local password to encrypt this wallet on this specific browser."), /* @__PURE__ */ React18.createElement(TextInput, { label: "Local Password", type: "password", value: walletPassword, onChange: setWalletPassword, placeholder: "Enter a strong password" }), /* @__PURE__ */ React18.createElement(ThreeDActionButton, { onClick: () => handleSaveWallet("imported"), isLoading: isProcessing, className: "w-full mt-2" }, "Encrypt & Import Wallet"))))), selectedWallet && /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement("div", { className: "absolute inset-0 bg-black/40 ", onClick: () => setSelectedWallet(null) }), /* @__PURE__ */ React18.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__ */ React18.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[15px] text-black tracking-tight" }, "Wallet Details"), /* @__PURE__ */ React18.createElement("button", { onClick: () => setSelectedWallet(null), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: CancelCircleIcon4, size: 18 }))), /* @__PURE__ */ React18.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-6" }, /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ React18.createElement("div", { className: "relative mb-4" }, /* @__PURE__ */ React18.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14" }), selectedWallet.networkLogoSrc && /* @__PURE__ */ React18.createElement("div", { className: "absolute -bottom-1 -right-1 w-5 h-5 rounded-full border border-white bg-white overflow-hidden shadow-sm" }, /* @__PURE__ */ React18.createElement("img", { src: selectedWallet.networkLogoSrc, alt: "Network", className: "w-full h-full object-cover" }))), /* @__PURE__ */ React18.createElement("h2", { className: `text-2xl text-black mb-2 transition-all duration-300 ${hideBalanceAmounts && !external ? "blur-[6px] opacity-40 select-none" : ""}` }, external ? selectedWallet.currency : `${selectedWallet.balance} ${selectedWallet.currency}`), /* @__PURE__ */ React18.createElement("span", { className: "text-[9px] tracking-widest text-neutral-500 px-4 py-1.5 rounded-full border border-neutral-200 mt-1 " }, selectedWallet.network, " NETWORK")), renderQrCode && /* @__PURE__ */ React18.createElement("div", { className: "w-full flex justify-center mb-6 mix-blend-multiply" }, renderQrCode(selectedWallet)), external && /* @__PURE__ */ React18.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React18.createElement(
|
|
1860
1911
|
Banner,
|
|
1861
1912
|
{
|
|
1862
1913
|
type: "warning",
|
|
1863
1914
|
title: "Important Network Notice",
|
|
1864
|
-
message:
|
|
1915
|
+
message: `Ensure you only send assets using the exact network specified. Minimum deposit is 15 ${selectedWallet.currency}. Sending funds through an unsupported network or under the minimum will result in permanent loss of funds.`,
|
|
1865
1916
|
isDismissible: false
|
|
1866
1917
|
}
|
|
1867
|
-
)), /* @__PURE__ */
|
|
1918
|
+
)), /* @__PURE__ */ React18.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Address"), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2 min-w-0" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] text-black truncate min-w-0 block" }, truncateAddress2(selectedWallet.address)), /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Copy01Icon2, size: 14 })))), !external && /* @__PURE__ */ React18.createElement("div", null, /* @__PURE__ */ React18.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-400 block mb-2" }, "Wallet Status"), selectedWallet.isActive ? /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-emerald-50 text-emerald-600 " }, "Active on this device") : /* @__PURE__ */ React18.createElement("span", { className: "text-[13px] px-1.5 py-0.5 bg-red-50 text-red-600 " }, "Inactive - Requires Import"))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React18.createElement(ThreeDActionButton, { onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet), isLoading: isGeneratingStatement, className: "w-full" }, "Generate Statement"), /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => setShowCopyWarning(true), className: "w-full flex items-center justify-center py-2.5 rounded-full border border-neutral-200 text-black hover:bg-neutral-50 outline-none text-xs tracking-wide transition-colors" }, "Copy Wallet Address"))))), selectedWallet && /* @__PURE__ */ React18.createElement(
|
|
1919
|
+
ConfirmationDialog,
|
|
1920
|
+
{
|
|
1921
|
+
isOpen: showCopyWarning,
|
|
1922
|
+
title: "Quick Heads Up!",
|
|
1923
|
+
message: `You must send at least 15 ${selectedWallet.currency}. If you send anything less than that, or choose the wrong network, your money will be lost forever.`,
|
|
1924
|
+
confirmText: "Confirm & Copy",
|
|
1925
|
+
cancelText: "Cancel",
|
|
1926
|
+
isDestructive: false,
|
|
1927
|
+
onClose: () => setShowCopyWarning(false),
|
|
1928
|
+
onConfirm: confirmCopyAddress
|
|
1929
|
+
}
|
|
1930
|
+
)));
|
|
1868
1931
|
};
|
|
1869
1932
|
|
|
1870
1933
|
// src/components/UniversalCardPage.tsx
|
|
@@ -1880,47 +1943,6 @@ import {
|
|
|
1880
1943
|
Loading03Icon as Loading03Icon9
|
|
1881
1944
|
} from "@hugeicons/core-free-icons";
|
|
1882
1945
|
|
|
1883
|
-
// src/components/ConfirmationDialog.tsx
|
|
1884
|
-
import React18 from "react";
|
|
1885
|
-
import { HugeiconsIcon as HugeiconsIcon12 } from "@hugeicons/react";
|
|
1886
|
-
import { Loading03Icon as Loading03Icon7 } from "@hugeicons/core-free-icons";
|
|
1887
|
-
var ConfirmationDialog = ({
|
|
1888
|
-
isOpen,
|
|
1889
|
-
title,
|
|
1890
|
-
message,
|
|
1891
|
-
confirmText = "Confirm",
|
|
1892
|
-
cancelText = "Cancel",
|
|
1893
|
-
isProcessing = false,
|
|
1894
|
-
isDestructive = true,
|
|
1895
|
-
onClose,
|
|
1896
|
-
onConfirm
|
|
1897
|
-
}) => {
|
|
1898
|
-
if (!isOpen) return null;
|
|
1899
|
-
return /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React18.createElement(
|
|
1900
|
-
"div",
|
|
1901
|
-
{
|
|
1902
|
-
className: "absolute inset-0 bg-black/40 ",
|
|
1903
|
-
onClick: () => !isProcessing && onClose()
|
|
1904
|
-
}
|
|
1905
|
-
), /* @__PURE__ */ React18.createElement("div", { className: "relative w-72 bg-white rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React18.createElement("div", { className: "p-6 pb-4 text-center w-full" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[17px] text-black tracking-tight mb-2" }, title), /* @__PURE__ */ React18.createElement("p", { className: "text-[12px] text-neutral-500 leading-relaxed px-2" }, message)), /* @__PURE__ */ React18.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React18.createElement(
|
|
1906
|
-
"button",
|
|
1907
|
-
{
|
|
1908
|
-
onClick: onClose,
|
|
1909
|
-
disabled: isProcessing,
|
|
1910
|
-
className: "flex-1 py-4 text-[14px] text-neutral-500 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none "
|
|
1911
|
-
},
|
|
1912
|
-
cancelText
|
|
1913
|
-
), /* @__PURE__ */ React18.createElement(
|
|
1914
|
-
"button",
|
|
1915
|
-
{
|
|
1916
|
-
onClick: onConfirm,
|
|
1917
|
-
disabled: isProcessing,
|
|
1918
|
-
className: `flex-1 py-4 text-[13px] transition-colors disabled:opacity-50 flex justify-center items-center outline-none ${isDestructive ? "text-black hover:bg-red-50" : "text-black hover:bg-neutral-50"}`
|
|
1919
|
-
},
|
|
1920
|
-
isProcessing ? /* @__PURE__ */ React18.createElement(HugeiconsIcon12, { icon: Loading03Icon7, className: "animate-spin", size: 18 }) : confirmText
|
|
1921
|
-
))));
|
|
1922
|
-
};
|
|
1923
|
-
|
|
1924
1946
|
// src/components/PinDialerBottomSheet.tsx
|
|
1925
1947
|
import React19, { useState as useState11, useEffect as useEffect8 } from "react";
|
|
1926
1948
|
import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
|
|
@@ -2115,7 +2137,7 @@ var UniversalCardPage = ({
|
|
|
2115
2137
|
"div",
|
|
2116
2138
|
{
|
|
2117
2139
|
className: "relative w-full max-w-85",
|
|
2118
|
-
style: { height:
|
|
2140
|
+
style: { height: 186 }
|
|
2119
2141
|
},
|
|
2120
2142
|
!isBgLoaded && /* @__PURE__ */ React20.createElement("div", { className: "absolute inset-0 w-full h-full bg-white rounded-2xl flex items-center justify-center z-50" }, /* @__PURE__ */ React20.createElement(HugeiconsIcon14, { icon: Loading03Icon9, size: 28, className: "animate-spin text-black" })),
|
|
2121
2143
|
showActionOverlay && /* @__PURE__ */ React20.createElement("div", { className: `absolute inset-0 z-40 w-full h-full rounded-2xl flex flex-col items-center justify-center transition-all ${overlayClasses}` }, isUnactivated && /* @__PURE__ */ React20.createElement(
|
|
@@ -4088,7 +4110,7 @@ var UniversalRewardPage = ({
|
|
|
4088
4110
|
setIsClaiming(false);
|
|
4089
4111
|
}
|
|
4090
4112
|
};
|
|
4091
|
-
return /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React42.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: ArrowLeft01Icon9, size: 16 }), " Back")), /* @__PURE__ */ React42.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React42.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ React42.createElement(Confetti, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), isLoading ? /* @__PURE__ */ React42.createElement(PageSpinner4, null) : /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement("div", { className: "w-full p-4 pt-10 mb-6 flex items-end justify-center gap-2 sm:gap-6 h-64 relative overflow-hidden" }, /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, secondPlace ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(secondPlace.profile.web3Name)), /* @__PURE__ */ React42.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ React42.createElement(AvatarLogo, { src: secondPlace.profile.avatarUrl, alt: secondPlace.profile.username, name: formatWeb3Name(secondPlace.profile.web3Name), sizeClass: "w-14 h-14 ring-4 ring-orange-100" }), /* @__PURE__ */ React42.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-
|
|
4113
|
+
return /* @__PURE__ */ React42.createElement("div", null, /* @__PURE__ */ React42.createElement("div", { className: "mb-6 flex max-w-3xl w-full mx-auto items-center px-1" }, /* @__PURE__ */ React42.createElement("button", { onClick: onBackHandler, className: "flex items-center gap-2 text-neutral-500 hover:text-black transition-colors text-[13px] outline-none" }, /* @__PURE__ */ React42.createElement(HugeiconsIcon28, { icon: ArrowLeft01Icon9, size: 16 }), " Back")), /* @__PURE__ */ React42.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ React42.createElement(ManagedToaster, null), showConfetti && /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-200 pointer-events-none" }, /* @__PURE__ */ React42.createElement(Confetti, { width, height, recycle: false, numberOfPieces: 500, gravity: 0.15 })), isLoading ? /* @__PURE__ */ React42.createElement(PageSpinner4, null) : /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement("div", { className: "w-full p-4 pt-10 mb-6 flex items-end justify-center gap-2 sm:gap-6 h-64 relative overflow-hidden" }, /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, secondPlace ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(secondPlace.profile.web3Name)), /* @__PURE__ */ React42.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ React42.createElement(AvatarLogo, { src: secondPlace.profile.avatarUrl, alt: secondPlace.profile.username, name: formatWeb3Name(secondPlace.profile.web3Name), sizeClass: "w-14 h-14 ring-4 ring-orange-100" }), /* @__PURE__ */ React42.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-[#ceff8a] text-black flex items-center justify-center text-[10px] border border-white " }, "2")), /* @__PURE__ */ React42.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#ceff8a] rounded-t-xl h-24 flex items-center justify-center" }, /* @__PURE__ */ React42.createElement("span", { className: "text-neutral-800/30 text-2xl " }, "2nd"))) : /* @__PURE__ */ React42.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-24 mt-auto" })), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col items-center w-1/3 z-20 -mt-8" }, firstPlace ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(firstPlace.profile.web3Name)), /* @__PURE__ */ React42.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ React42.createElement(AvatarLogo, { src: firstPlace.profile.avatarUrl, alt: firstPlace.profile.username, name: formatWeb3Name(firstPlace.profile.web3Name), sizeClass: "w-17 h-17 ring-4 ring-purple-200" }), /* @__PURE__ */ React42.createElement("div", { className: "absolute -bottom-2 right-2 w-5 h-5 rounded-full bg-[#143731] text-white flex items-center justify-center text-[10px] border border-white " }, "1")), /* @__PURE__ */ React42.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#143731] rounded-t-xl h-32 flex items-center justify-center " }, /* @__PURE__ */ React42.createElement("span", { className: "text-white/40 text-3xl tracking-widest" }, "1st"))) : /* @__PURE__ */ React42.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-32 mt-auto" })), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col items-center w-1/3 z-10" }, thirdPlace ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement("span", { className: "text-black text-[10px] mb-2 truncate max-w-full px-1" }, formatWeb3Name(thirdPlace.profile.web3Name)), /* @__PURE__ */ React42.createElement("div", { className: "relative shrink-0 mb-3" }, /* @__PURE__ */ React42.createElement(AvatarLogo, { src: thirdPlace.profile.avatarUrl, alt: thirdPlace.profile.username, name: formatWeb3Name(thirdPlace.profile.web3Name), sizeClass: "w-12 h-12 ring-4 ring-blue-100" }), /* @__PURE__ */ React42.createElement("div", { className: "absolute -bottom-2 right-0 w-5 h-5 rounded-full bg-[#ceff8a] text-black flex items-center justify-center text-[10px] border border-white " }, "3")), /* @__PURE__ */ React42.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-[#ceff8a] rounded-t-xl h-20 flex items-center justify-center" }, /* @__PURE__ */ React42.createElement("span", { className: "text-neutral-800/30 text-xl " }, "3rd"))) : /* @__PURE__ */ React42.createElement("div", { className: "w-full bg-linear-to-t from-neutral-100 to-neutral-200 rounded-t-xl h-20 mt-auto" }))), /* @__PURE__ */ React42.createElement("div", { className: "flex items-center justify-center mb-6 sm:mb-8 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar " }, tabs.map((tab, idx) => {
|
|
4092
4114
|
const isActive = activeTabIndex === idx;
|
|
4093
4115
|
return /* @__PURE__ */ React42.createElement(
|
|
4094
4116
|
"button",
|