@b3dotfun/sdk 0.0.65-test.1 → 0.0.65-test.3
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/cjs/anyspend/react/components/AnySpend.js +4 -2
- package/dist/cjs/anyspend/react/components/AnySpendCustom.js +1 -1
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +1 -1
- package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +1 -1
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +4 -2
- package/dist/cjs/anyspend/react/hooks/useSigMint.d.ts +1 -1
- package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.js +80 -37
- package/dist/cjs/global-account/react/components/B3DynamicModal.js +1 -9
- package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
- package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +37 -0
- package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.js +4 -3
- package/dist/cjs/global-account/react/components/ManageAccount/HomeActions.js +1 -1
- package/dist/cjs/global-account/react/components/ManageAccount/ManageAccount.js +1 -1
- package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +6 -3
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +77 -9
- package/dist/cjs/global-account/react/components/SignInWithB3/SignIn.js +3 -1
- package/dist/cjs/global-account/react/components/index.d.ts +1 -2
- package/dist/cjs/global-account/react/components/index.js +6 -8
- package/dist/cjs/global-account/react/hooks/useAccountWallet.d.ts +1 -0
- package/dist/cjs/global-account/react/hooks/useAccountWallet.js +18 -0
- package/dist/cjs/global-account/react/hooks/useAuthentication.d.ts +2 -2
- package/dist/cjs/global-account/react/hooks/useUserQuery.d.ts +2 -2
- package/dist/cjs/global-account/react/stores/useModalStore.d.ts +1 -7
- package/dist/cjs/shared/constants/chains/supported.d.ts +1 -1
- package/dist/cjs/shared/utils/ipfs.js +10 -3
- package/dist/esm/anyspend/react/components/AnySpend.js +4 -2
- package/dist/esm/anyspend/react/components/AnySpendCustom.js +1 -1
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +1 -1
- package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +1 -1
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +4 -2
- package/dist/esm/anyspend/react/hooks/useSigMint.d.ts +1 -1
- package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.js +81 -38
- package/dist/esm/global-account/react/components/B3DynamicModal.js +1 -9
- package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
- package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +34 -0
- package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.js +4 -3
- package/dist/esm/global-account/react/components/ManageAccount/HomeActions.js +1 -1
- package/dist/esm/global-account/react/components/ManageAccount/ManageAccount.js +1 -1
- package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +6 -3
- package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +74 -9
- package/dist/esm/global-account/react/components/SignInWithB3/SignIn.js +4 -2
- package/dist/esm/global-account/react/components/index.d.ts +1 -2
- package/dist/esm/global-account/react/components/index.js +3 -4
- package/dist/esm/global-account/react/hooks/useAccountWallet.d.ts +1 -0
- package/dist/esm/global-account/react/hooks/useAccountWallet.js +17 -0
- package/dist/esm/global-account/react/hooks/useAuthentication.d.ts +2 -2
- package/dist/esm/global-account/react/hooks/useUserQuery.d.ts +2 -2
- package/dist/esm/global-account/react/stores/useModalStore.d.ts +1 -7
- package/dist/esm/shared/constants/chains/supported.d.ts +1 -1
- package/dist/esm/shared/utils/ipfs.js +10 -3
- package/dist/styles/index.css +1 -1
- package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
- package/dist/types/anyspend/react/hooks/useSigMint.d.ts +1 -1
- package/dist/types/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
- package/dist/types/global-account/react/components/index.d.ts +1 -2
- package/dist/types/global-account/react/hooks/useAccountWallet.d.ts +1 -0
- package/dist/types/global-account/react/hooks/useAuthentication.d.ts +2 -2
- package/dist/types/global-account/react/hooks/useUserQuery.d.ts +2 -2
- package/dist/types/global-account/react/stores/useModalStore.d.ts +1 -7
- package/dist/types/shared/constants/chains/supported.d.ts +1 -1
- package/package.json +1 -1
- package/src/anyspend/react/components/AnySpend.tsx +4 -3
- package/src/anyspend/react/components/AnySpendCustom.tsx +0 -2
- package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +0 -2
- package/src/anyspend/react/components/AnyspendDepositHype.tsx +0 -2
- package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +6 -13
- package/src/global-account/react/components/AvatarEditor/AvatarEditor.tsx +129 -74
- package/src/global-account/react/components/B3DynamicModal.tsx +2 -10
- package/src/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.tsx +84 -0
- package/src/global-account/react/components/ManageAccount/BalanceContent.tsx +4 -7
- package/src/global-account/react/components/ManageAccount/HomeActions.tsx +1 -1
- package/src/global-account/react/components/ManageAccount/ManageAccount.tsx +2 -2
- package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +9 -11
- package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +129 -23
- package/src/global-account/react/components/SignInWithB3/SignIn.tsx +11 -7
- package/src/global-account/react/components/index.ts +3 -4
- package/src/global-account/react/hooks/useAccountWallet.tsx +26 -0
- package/src/global-account/react/stores/useModalStore.ts +1 -9
- package/src/shared/utils/ipfs.ts +10 -3
- package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
- package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.js +0 -141
- package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
- package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.js +0 -135
- package/dist/types/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
- package/src/global-account/react/components/ProfileEditor/ProfileEditor.tsx +0 -265
|
@@ -1,24 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const app_1 = __importDefault(require("../../../../global-account/app"));
|
|
4
8
|
const react_1 = require("../../../../global-account/react");
|
|
5
9
|
const utils_1 = require("../../../../shared/utils");
|
|
6
|
-
const ipfs_1 = require("../../../../shared/utils/ipfs");
|
|
7
10
|
const lucide_react_1 = require("lucide-react");
|
|
8
|
-
const react_2 = require("
|
|
11
|
+
const react_2 = require("react");
|
|
12
|
+
const sonner_1 = require("sonner");
|
|
13
|
+
const react_3 = require("thirdweb/react");
|
|
9
14
|
const useFirstEOA_1 = require("../../hooks/useFirstEOA");
|
|
15
|
+
const IPFSMediaRenderer_1 = require("../IPFSMediaRenderer/IPFSMediaRenderer");
|
|
10
16
|
const SettingsProfileCard = () => {
|
|
11
|
-
const account = (0,
|
|
17
|
+
const account = (0, react_3.useActiveAccount)();
|
|
12
18
|
const { address: eoaAddress } = (0, useFirstEOA_1.useFirstEOA)();
|
|
13
|
-
const { data: profile } = (0, react_1.useProfile)({
|
|
19
|
+
const { data: profile, refetch: refreshProfile } = (0, react_1.useProfile)({
|
|
14
20
|
address: eoaAddress || account?.address,
|
|
15
21
|
fresh: true,
|
|
16
22
|
});
|
|
17
|
-
const { user } = (0, react_1.useB3)();
|
|
23
|
+
const { user, setUser } = (0, react_1.useB3)();
|
|
18
24
|
const setB3ModalOpen = (0, react_1.useModalStore)(state => state.setB3ModalOpen);
|
|
19
25
|
const setB3ModalContentType = (0, react_1.useModalStore)(state => state.setB3ModalContentType);
|
|
20
26
|
const navigateBack = (0, react_1.useModalStore)(state => state.navigateBack);
|
|
21
|
-
|
|
27
|
+
// State for inline username editing
|
|
28
|
+
const [isEditingUsername, setIsEditingUsername] = (0, react_2.useState)(false);
|
|
29
|
+
const [editedUsername, setEditedUsername] = (0, react_2.useState)("");
|
|
30
|
+
const [isSaving, setIsSaving] = (0, react_2.useState)(false);
|
|
31
|
+
const inputRef = (0, react_2.useRef)(null);
|
|
32
|
+
// IPFSMediaRenderer will handle IPFS URL conversion and validation
|
|
33
|
+
const avatarSrc = user?.avatar || profile?.avatar;
|
|
34
|
+
// Get current username - prioritize user.username, fallback to profile data
|
|
35
|
+
const currentUsername = user?.username || profile?.displayName || (0, utils_1.formatUsername)(profile?.name || "");
|
|
36
|
+
// Focus input when entering edit mode
|
|
37
|
+
(0, react_2.useEffect)(() => {
|
|
38
|
+
if (isEditingUsername && inputRef.current) {
|
|
39
|
+
inputRef.current.focus();
|
|
40
|
+
inputRef.current.select();
|
|
41
|
+
}
|
|
42
|
+
}, [isEditingUsername]);
|
|
22
43
|
const handleEditAvatar = () => {
|
|
23
44
|
setB3ModalOpen(true);
|
|
24
45
|
setB3ModalContentType({
|
|
@@ -30,9 +51,56 @@ const SettingsProfileCard = () => {
|
|
|
30
51
|
});
|
|
31
52
|
};
|
|
32
53
|
const handleEditUsername = () => {
|
|
33
|
-
|
|
34
|
-
|
|
54
|
+
setEditedUsername(currentUsername || "");
|
|
55
|
+
setIsEditingUsername(true);
|
|
56
|
+
};
|
|
57
|
+
const handleCancelEdit = () => {
|
|
58
|
+
setIsEditingUsername(false);
|
|
59
|
+
setEditedUsername("");
|
|
60
|
+
};
|
|
61
|
+
const handleSaveUsername = async () => {
|
|
62
|
+
if (!editedUsername.trim()) {
|
|
63
|
+
sonner_1.toast.error("Username cannot be empty");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (editedUsername === currentUsername) {
|
|
67
|
+
// No change, just exit edit mode
|
|
68
|
+
handleCancelEdit();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
setIsSaving(true);
|
|
72
|
+
try {
|
|
73
|
+
const updatedUser = await app_1.default.service("users").registerUsername({ username: editedUsername.trim() },
|
|
74
|
+
// @ts-expect-error - our typed client is expecting context even though it's set elsewhere
|
|
75
|
+
{});
|
|
76
|
+
// Update user state - registerUsername returns an array with single user
|
|
77
|
+
setUser(Array.isArray(updatedUser) ? updatedUser[0] : updatedUser);
|
|
78
|
+
// Refresh profile to get updated data
|
|
79
|
+
await refreshProfile();
|
|
80
|
+
sonner_1.toast.success("Username updated successfully!");
|
|
81
|
+
setIsEditingUsername(false);
|
|
82
|
+
setEditedUsername("");
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error("Error updating username:", error);
|
|
86
|
+
sonner_1.toast.error("Failed to update username. Please try again.");
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
setIsSaving(false);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const handleKeyDown = (e) => {
|
|
93
|
+
if (e.key === "Enter") {
|
|
94
|
+
handleSaveUsername();
|
|
95
|
+
}
|
|
96
|
+
else if (e.key === "Escape") {
|
|
97
|
+
handleCancelEdit();
|
|
98
|
+
}
|
|
35
99
|
};
|
|
36
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: "flex w-full items-center gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "relative shrink-0", children: [
|
|
100
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "flex w-full items-center gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "relative shrink-0", children: [(0, jsx_runtime_1.jsx)(IPFSMediaRenderer_1.IPFSMediaRenderer, { src: avatarSrc, alt: "Profile", className: "border-black/8 size-14 rounded-full border object-cover" }), (0, jsx_runtime_1.jsx)("button", { onClick: handleEditAvatar, className: "absolute -bottom-0.5 -right-0.5 flex size-[18px] items-center justify-center rounded-full border-[1.5px] border-white bg-[#a0a0ab] transition-colors hover:bg-[#a0a0ab]/80", "aria-label": "Edit avatar", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Pencil, { size: 10, className: "text-white", strokeWidth: 2.5 }) })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex shrink-0 flex-col gap-1", children: isEditingUsername ? (
|
|
101
|
+
/* Edit mode - inline input */
|
|
102
|
+
(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("input", { ref: inputRef, type: "text", value: editedUsername, onChange: e => setEditedUsername(e.target.value), onKeyDown: handleKeyDown, disabled: isSaving, className: "border-b3-line bg-b3-background text-b3-grey placeholder:text-b3-foreground-muted font-neue-montreal-semibold focus:border-b3-primary-blue w-full rounded-md border px-2 py-1 text-lg leading-none transition-colors focus:outline-none disabled:opacity-50", placeholder: "Enter username" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1", children: [(0, jsx_runtime_1.jsx)("button", { onClick: handleSaveUsername, disabled: isSaving, className: "text-b3-primary-blue hover:text-b3-primary-blue/80 flex items-center justify-center rounded-md p-1 transition-colors disabled:opacity-50", "aria-label": "Save username", children: isSaving ? (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { size: 18, className: "animate-spin" }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 18, strokeWidth: 2.5 }) }), (0, jsx_runtime_1.jsx)("button", { onClick: handleCancelEdit, disabled: isSaving, className: "text-b3-foreground-muted hover:text-b3-grey flex items-center justify-center rounded-md p-1 transition-colors disabled:opacity-50", "aria-label": "Cancel editing", children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 18, strokeWidth: 2.5 }) })] })] })) : (
|
|
103
|
+
/* Display mode */
|
|
104
|
+
(0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-1", children: (0, jsx_runtime_1.jsx)("p", { className: "font-neue-montreal-semibold text-lg leading-none text-[#0B57C2]", children: currentUsername }) }), (0, jsx_runtime_1.jsx)("button", { onClick: handleEditUsername, className: "flex items-center justify-center gap-1 text-left transition-opacity hover:opacity-80", children: (0, jsx_runtime_1.jsx)("p", { className: "font-inter text-sm font-semibold leading-5 text-[#51525C]", children: "Edit Username" }) })] })) })] }));
|
|
37
105
|
};
|
|
38
106
|
exports.default = SettingsProfileCard;
|
|
@@ -12,6 +12,7 @@ const utils_1 = require("../../../../shared/utils");
|
|
|
12
12
|
const react_2 = require("@headlessui/react");
|
|
13
13
|
const react_3 = require("react");
|
|
14
14
|
const react_4 = require("thirdweb/react");
|
|
15
|
+
const useAccountWallet_1 = require("../../hooks/useAccountWallet");
|
|
15
16
|
const ManageAccountButton_1 = require("../custom/ManageAccountButton");
|
|
16
17
|
function SignIn(props) {
|
|
17
18
|
const { className } = props;
|
|
@@ -40,8 +41,9 @@ function SignIn(props) {
|
|
|
40
41
|
setActiveWallet(connectedEOAWallet);
|
|
41
42
|
}
|
|
42
43
|
}, [connectedEOAWallet, isActiveEOAWallet, setActiveWallet, automaticallySetFirstEoa]);
|
|
44
|
+
const walletImage = (0, useAccountWallet_1.useAccountWalletImage)();
|
|
43
45
|
// Desktop version - original dropdown menu
|
|
44
|
-
return ((0, jsx_runtime_1.jsx)(react_1.StyleRoot, { children: (0, jsx_runtime_1.jsx)(react_2.Menu, { className: `relative flex items-center ${className || ""}`, as: "div", children: globalAddress ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_2.MenuButton, { className: "bg-b3-react-background group flex h-10 items-center gap-1 rounded-xl px-3", children: [!!
|
|
46
|
+
return ((0, jsx_runtime_1.jsx)(react_1.StyleRoot, { children: (0, jsx_runtime_1.jsx)(react_2.Menu, { className: `relative flex items-center ${className || ""}`, as: "div", children: globalAddress ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_2.MenuButton, { className: "bg-b3-react-background group flex h-10 items-center gap-1 rounded-xl px-3 focus:outline-none", children: [!!walletImage && ((0, jsx_runtime_1.jsx)(react_1.IPFSMediaRenderer, { src: walletImage, alt: "Wallet Image", className: "bg-b3-react-primary h-6 w-6 rounded-full object-cover opacity-100" })), (0, jsx_runtime_1.jsx)("div", { className: "text-as-primary", children: ensName ? ensName : (0, utils_1.truncateAddress)(globalAddress) })] }), (0, jsx_runtime_1.jsx)(react_2.Transition, { enter: "duration-200 ease-out", enterFrom: "scale-95 opacity-0", enterTo: "scale-100 opacity-100", leave: "duration-300 ease-out", leaveFrom: "scale-100 opacity-100", leaveTo: "scale-95 opacity-0", children: (0, jsx_runtime_1.jsx)(react_2.MenuItems, { className: "b3-root absolute -right-4 top-full min-w-64 rounded-2xl border focus:outline-none lg:right-0", modal: false,
|
|
45
47
|
// TODO: Figure out why setting anchor on mobile causes z-index issues where it appears under elements
|
|
46
48
|
anchor: isMobile ? "top end" : undefined, children: (0, jsx_runtime_1.jsxs)("div", { className: "bg-b3-react-background", children: [connectedEOAWallet ? ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("border-b3-react-subtle bg-b3-react-background flex cursor-pointer items-center justify-between rounded-xl p-3"), onClick: () => handleSetActiveAccount(connectedEOAWallet?.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("img", { className: "bg-b3-react-primary h-16 w-16 rounded-full opacity-100", src: eoaWalletIcon, alt: connectedEOAWallet?.id }), (0, jsx_runtime_1.jsxs)("div", { className: "ml-4 grow", children: [ensName && (0, jsx_runtime_1.jsx)("div", { children: ensName }), (0, jsx_runtime_1.jsx)("div", { children: (0, utils_1.truncateAddress)(globalAddress) }), (0, jsx_runtime_1.jsx)("div", { children: walletInfo?.name })] })] }), isActiveEOAWallet && (0, jsx_runtime_1.jsx)(Icon_1.default, { className: "fill-b3-react-primary", name: "check" })] })) : (connectedSmartWallet && ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("mb-2 flex cursor-pointer items-center justify-between rounded-xl p-3", isActiveSmartWallet
|
|
47
49
|
? "bg-b3-react-background"
|
|
@@ -15,8 +15,7 @@ export { getConnectOptionsFromStrategy, isWalletType, type AllowedStrategy } fro
|
|
|
15
15
|
export { ManageAccount } from "./ManageAccount/ManageAccount";
|
|
16
16
|
export { Deposit } from "./Deposit/Deposit";
|
|
17
17
|
export { Send } from "./Send/Send";
|
|
18
|
-
export {
|
|
19
|
-
export { ProfileEditor } from "./ProfileEditor/ProfileEditor";
|
|
18
|
+
export { IPFSMediaRenderer } from "./IPFSMediaRenderer/IPFSMediaRenderer";
|
|
20
19
|
export { RequestPermissions } from "./RequestPermissions/RequestPermissions";
|
|
21
20
|
export { RequestPermissionsButton } from "./RequestPermissions/RequestPermissionsButton";
|
|
22
21
|
export { AccountAssets } from "./AccountAssets/AccountAssets";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DialogDescription = exports.DialogContent = exports.DialogClose = exports.Dialog = exports.CommandShortcut = exports.CommandSeparator = exports.CommandList = exports.CommandItem = exports.CommandInput = exports.CommandGroup = exports.CommandEmpty = exports.CommandDialog = exports.Command = exports.buttonVariants = exports.Button = exports.badgeVariants = exports.Badge = exports.WalletConnectorIcon = exports.StaggeredFadeLoader = exports.CopyToClipboard = exports.ClientOnly = exports.customButtonVariants = exports.CustomButton = exports.SendERC20Button = exports.SendETHButton = exports.MintButton = exports.AccountAssets = exports.RequestPermissionsButton = exports.RequestPermissions = exports.
|
|
4
|
-
exports.AnimatedLottie = exports.TransitionPanel = exports.TooltipTrigger = exports.TooltipProvider = exports.TooltipContent = exports.Tooltip = exports.TextShimmer = exports.TextLoop = exports.TabTrigger = exports.TabsTransitionWrapper = exports.TabsList = exports.TabsContent = exports.Tabs = exports.TabTriggerPrimitive = exports.TabsPrimitive = exports.TabsListPrimitive = exports.TabsContentPrimitive = exports.Skeleton = exports.ShinyButton = exports.ScrollBar = exports.ScrollArea = exports.PopoverTrigger = exports.PopoverContent = exports.Popover = exports.Loading = exports.Input = exports.GlareCardRounded = exports.GlareCard = exports.DropdownMenuTrigger = exports.DropdownMenuSeparator = exports.DropdownMenuItem = exports.DropdownMenuContent = exports.DropdownMenu = exports.DrawerTrigger = exports.DrawerTitle = exports.DrawerPortal = exports.DrawerOverlay = exports.DrawerHeader = exports.DrawerFooter = exports.DrawerDescription = exports.DrawerContent = exports.DrawerClose = exports.Drawer = exports.DialogTrigger = exports.DialogTitle = exports.DialogPortal = exports.DialogOverlay = exports.DialogHeader =
|
|
3
|
+
exports.DialogFooter = exports.DialogDescription = exports.DialogContent = exports.DialogClose = exports.Dialog = exports.CommandShortcut = exports.CommandSeparator = exports.CommandList = exports.CommandItem = exports.CommandInput = exports.CommandGroup = exports.CommandEmpty = exports.CommandDialog = exports.Command = exports.buttonVariants = exports.Button = exports.badgeVariants = exports.Badge = exports.WalletConnectorIcon = exports.StaggeredFadeLoader = exports.CopyToClipboard = exports.ClientOnly = exports.customButtonVariants = exports.CustomButton = exports.SendERC20Button = exports.SendETHButton = exports.MintButton = exports.AccountAssets = exports.RequestPermissionsButton = exports.RequestPermissions = exports.IPFSMediaRenderer = exports.Send = exports.Deposit = exports.ManageAccount = exports.isWalletType = exports.getConnectOptionsFromStrategy = exports.LoginStepContainer = exports.SignInWithB3Privy = exports.SignInWithB3Flow = exports.SignInWithB3 = exports.WalletRow = exports.PermissionItem = exports.AuthButton = exports.StyleRoot = exports.useB3 = exports.B3Context = exports.RelayKitProviderWrapper = exports.InnerProvider = exports.B3Provider = exports.B3DynamicModal = void 0;
|
|
4
|
+
exports.AnimatedLottie = exports.TransitionPanel = exports.TooltipTrigger = exports.TooltipProvider = exports.TooltipContent = exports.Tooltip = exports.TextShimmer = exports.TextLoop = exports.TabTrigger = exports.TabsTransitionWrapper = exports.TabsList = exports.TabsContent = exports.Tabs = exports.TabTriggerPrimitive = exports.TabsPrimitive = exports.TabsListPrimitive = exports.TabsContentPrimitive = exports.Skeleton = exports.ShinyButton = exports.ScrollBar = exports.ScrollArea = exports.PopoverTrigger = exports.PopoverContent = exports.Popover = exports.Loading = exports.Input = exports.GlareCardRounded = exports.GlareCard = exports.DropdownMenuTrigger = exports.DropdownMenuSeparator = exports.DropdownMenuItem = exports.DropdownMenuContent = exports.DropdownMenu = exports.DrawerTrigger = exports.DrawerTitle = exports.DrawerPortal = exports.DrawerOverlay = exports.DrawerHeader = exports.DrawerFooter = exports.DrawerDescription = exports.DrawerContent = exports.DrawerClose = exports.Drawer = exports.DialogTrigger = exports.DialogTitle = exports.DialogPortal = exports.DialogOverlay = exports.DialogHeader = void 0;
|
|
5
|
+
// TODO woj: Barrel file for all components, this might be reason of bundle size issues
|
|
5
6
|
// Core Components
|
|
6
7
|
var B3DynamicModal_1 = require("./B3DynamicModal");
|
|
7
8
|
Object.defineProperty(exports, "B3DynamicModal", { enumerable: true, get: function () { return B3DynamicModal_1.B3DynamicModal; } });
|
|
@@ -43,12 +44,9 @@ Object.defineProperty(exports, "Deposit", { enumerable: true, get: function () {
|
|
|
43
44
|
// Send Components
|
|
44
45
|
var Send_1 = require("./Send/Send");
|
|
45
46
|
Object.defineProperty(exports, "Send", { enumerable: true, get: function () { return Send_1.Send; } });
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Object.defineProperty(exports, "AvatarEditor", { enumerable: true, get: function () { return AvatarEditor_1.AvatarEditor; } });
|
|
50
|
-
var ProfileEditor_1 = require("./ProfileEditor/ProfileEditor");
|
|
51
|
-
Object.defineProperty(exports, "ProfileEditor", { enumerable: true, get: function () { return ProfileEditor_1.ProfileEditor; } });
|
|
47
|
+
// Media Components
|
|
48
|
+
var IPFSMediaRenderer_1 = require("./IPFSMediaRenderer/IPFSMediaRenderer");
|
|
49
|
+
Object.defineProperty(exports, "IPFSMediaRenderer", { enumerable: true, get: function () { return IPFSMediaRenderer_1.IPFSMediaRenderer; } });
|
|
52
50
|
// RequestPermissions Components
|
|
53
51
|
var RequestPermissions_1 = require("./RequestPermissions/RequestPermissions");
|
|
54
52
|
Object.defineProperty(exports, "RequestPermissions", { enumerable: true, get: function () { return RequestPermissions_1.RequestPermissions; } });
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useAccountWallet = useAccountWallet;
|
|
4
|
+
exports.useAccountWalletImage = useAccountWalletImage;
|
|
4
5
|
const react_1 = require("../../../global-account/react");
|
|
5
6
|
const constants_1 = require("../../../shared/constants");
|
|
6
7
|
const debug_1 = require("../../../shared/utils/debug");
|
|
@@ -72,3 +73,20 @@ function useAccountWallet() {
|
|
|
72
73
|
]);
|
|
73
74
|
return res;
|
|
74
75
|
}
|
|
76
|
+
function useAccountWalletImage() {
|
|
77
|
+
const { account, user } = (0, react_1.useB3)();
|
|
78
|
+
const activeWallet = (0, react_3.useActiveWallet)();
|
|
79
|
+
const connectedWallets = (0, react_3.useConnectedWallets)();
|
|
80
|
+
const connectedSmartWallet = connectedWallets.find(wallet => wallet.id === constants_1.ecosystemWalletId);
|
|
81
|
+
const connectedEOAWallet = connectedWallets.find(wallet => wallet.id !== constants_1.ecosystemWalletId);
|
|
82
|
+
const isActiveSmartWallet = activeWallet?.id === connectedSmartWallet?.id;
|
|
83
|
+
const { data: walletImage } = (0, react_3.useWalletImage)(connectedEOAWallet?.id);
|
|
84
|
+
// If not EOA sign in, then we need to show the smart wallet icon
|
|
85
|
+
const lastAuthProvider = useLastAuthProvider();
|
|
86
|
+
const smartWalletIcon = lastAuthProvider && !connectedEOAWallet
|
|
87
|
+
? in_app_1.socialIcons[lastAuthProvider]
|
|
88
|
+
: "https://gradvatar.com/0x0000000000000000000000000000000000000000"; // show smart wallet of eoa wallet is gradvatar
|
|
89
|
+
const { data: profileData } = (0, react_1.useProfile)({ address: account?.address });
|
|
90
|
+
const avatarUrl = user?.avatar || profileData?.avatar;
|
|
91
|
+
return avatarUrl || (isActiveSmartWallet ? smartWalletIcon : walletImage) || "";
|
|
92
|
+
}
|
|
@@ -13,8 +13,8 @@ export declare function useAuthentication(partnerId: string): {
|
|
|
13
13
|
onConnect: (_walleAutoConnectedWith: Wallet, allConnectedWallets: Wallet[]) => Promise<void>;
|
|
14
14
|
user: {
|
|
15
15
|
email?: string | undefined;
|
|
16
|
-
username?: string | undefined;
|
|
17
16
|
telNumber?: string | undefined;
|
|
17
|
+
username?: string | undefined;
|
|
18
18
|
ens?: string | undefined;
|
|
19
19
|
avatar?: string | undefined;
|
|
20
20
|
preferences?: {} | undefined;
|
|
@@ -41,8 +41,8 @@ export declare function useAuthentication(partnerId: string): {
|
|
|
41
41
|
name?: string | undefined;
|
|
42
42
|
address?: string | undefined;
|
|
43
43
|
email?: string | undefined;
|
|
44
|
-
phone?: string | undefined;
|
|
45
44
|
username?: string | undefined;
|
|
45
|
+
phone?: string | undefined;
|
|
46
46
|
fid?: string | undefined;
|
|
47
47
|
};
|
|
48
48
|
}[] | undefined;
|
|
@@ -8,8 +8,8 @@ import { Users } from "@b3dotfun/b3-api";
|
|
|
8
8
|
export declare function useUserQuery(): {
|
|
9
9
|
user: {
|
|
10
10
|
email?: string | undefined;
|
|
11
|
-
username?: string | undefined;
|
|
12
11
|
telNumber?: string | undefined;
|
|
12
|
+
username?: string | undefined;
|
|
13
13
|
ens?: string | undefined;
|
|
14
14
|
avatar?: string | undefined;
|
|
15
15
|
preferences?: {} | undefined;
|
|
@@ -36,8 +36,8 @@ export declare function useUserQuery(): {
|
|
|
36
36
|
name?: string | undefined;
|
|
37
37
|
address?: string | undefined;
|
|
38
38
|
email?: string | undefined;
|
|
39
|
-
phone?: string | undefined;
|
|
40
39
|
username?: string | undefined;
|
|
40
|
+
phone?: string | undefined;
|
|
41
41
|
fid?: string | undefined;
|
|
42
42
|
};
|
|
43
43
|
}[] | undefined;
|
|
@@ -360,12 +360,6 @@ export interface AvatarEditorModalProps extends BaseModalProps {
|
|
|
360
360
|
/** Callback function called when avatar is successfully set */
|
|
361
361
|
onSuccess?: () => void;
|
|
362
362
|
}
|
|
363
|
-
export interface ProfileEditorModalProps extends BaseModalProps {
|
|
364
|
-
/** Modal type identifier */
|
|
365
|
-
type: "profileEditor";
|
|
366
|
-
/** Callback function called when profile is successfully updated */
|
|
367
|
-
onSuccess?: () => void;
|
|
368
|
-
}
|
|
369
363
|
/**
|
|
370
364
|
* Props for the Deposit modal
|
|
371
365
|
* Allows users to deposit tokens into their global account
|
|
@@ -391,7 +385,7 @@ export interface SendModalProps extends BaseModalProps {
|
|
|
391
385
|
/**
|
|
392
386
|
* Union type of all possible modal content types
|
|
393
387
|
*/
|
|
394
|
-
export type ModalContentType = SignInWithB3ModalProps | RequestPermissionsModalProps | ManageAccountModalProps | AnySpendModalProps | AnyspendOrderDetailsProps | AnySpendNftProps | AnySpendJoinTournamentProps | AnySpendFundTournamentProps | AnySpendOrderHistoryProps | AnySpendStakeB3Props | AnySpendStakeB3ExactInProps | AnySpendStakeUpsideProps | AnySpendStakeUpsideExactInProps | AnySpendBuySpinProps | AnySpendSignatureMintProps | AnySpendBondKitProps | LinkAccountModalProps | LinkNewAccountModalProps | AnySpendDepositHypeProps | AvatarEditorModalProps | DepositModalProps | SendModalProps
|
|
388
|
+
export type ModalContentType = SignInWithB3ModalProps | RequestPermissionsModalProps | ManageAccountModalProps | AnySpendModalProps | AnyspendOrderDetailsProps | AnySpendNftProps | AnySpendJoinTournamentProps | AnySpendFundTournamentProps | AnySpendOrderHistoryProps | AnySpendStakeB3Props | AnySpendStakeB3ExactInProps | AnySpendStakeUpsideProps | AnySpendStakeUpsideExactInProps | AnySpendBuySpinProps | AnySpendSignatureMintProps | AnySpendBondKitProps | LinkAccountModalProps | LinkNewAccountModalProps | AnySpendDepositHypeProps | AvatarEditorModalProps | DepositModalProps | SendModalProps;
|
|
395
389
|
/**
|
|
396
390
|
* State interface for the modal store
|
|
397
391
|
*/
|
|
@@ -35,13 +35,13 @@ export declare const supportedChainNetworks: {
|
|
|
35
35
|
uri: string;
|
|
36
36
|
}[];
|
|
37
37
|
};
|
|
38
|
+
_id: string | {};
|
|
38
39
|
icon: {
|
|
39
40
|
format: string;
|
|
40
41
|
height: number;
|
|
41
42
|
width: number;
|
|
42
43
|
url: string;
|
|
43
44
|
};
|
|
44
|
-
_id: string | {};
|
|
45
45
|
}[];
|
|
46
46
|
export declare const coingeckoChains: Record<number, {
|
|
47
47
|
coingecko_id: string;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getIpfsUrl = getIpfsUrl;
|
|
4
|
+
/**
|
|
5
|
+
* List of IPFS gateways to use for converting ipfs:// URLs to HTTP URLs
|
|
6
|
+
* These gateways must match the allowed list in profileDisplay.ts validateImageUrl()
|
|
7
|
+
*/
|
|
4
8
|
const IPFS_GATEWAYS = [
|
|
5
|
-
"https://cloudflare-ipfs.com/ipfs",
|
|
6
|
-
"https://ipfs.io/ipfs",
|
|
7
|
-
//
|
|
9
|
+
"https://cloudflare-ipfs.com/ipfs", // Primary gateway - fast and reliable
|
|
10
|
+
"https://ipfs.io/ipfs", // Fallback gateway
|
|
11
|
+
"https://gateway.pinata.cloud/ipfs", // Additional option
|
|
12
|
+
"https://dweb.link/ipfs", // Additional option
|
|
13
|
+
"https://nftstorage.link/ipfs", // Additional option
|
|
14
|
+
"https://w3s.link/ipfs", // Additional option
|
|
8
15
|
];
|
|
9
16
|
/**
|
|
10
17
|
* Converts an IPFS URL to a gateway URL
|
|
@@ -4,6 +4,7 @@ import { getDefaultToken, USDC_BASE } from "../../../anyspend/index.js";
|
|
|
4
4
|
import { useAnyspendCreateOnrampOrder, useAnyspendCreateOrder, useAnyspendOrderAndTransactions, useAnyspendQuote, useGeoOnrampOptions, } from "../../../anyspend/react/index.js";
|
|
5
5
|
import { Button, ShinyButton, StyleRoot, TabsPrimitive, TransitionPanel, useAccountWallet, useB3, useModalStore, useProfile, useRouter, useSearchParamsSSR, useTokenBalanceDirect, useTokenData, useTokenFromUrl, } from "../../../global-account/react/index.js";
|
|
6
6
|
import BottomNavigation from "../../../global-account/react/components/ManageAccount/BottomNavigation.js";
|
|
7
|
+
import { useAccountWalletImage } from "../../../global-account/react/hooks/useAccountWallet.js";
|
|
7
8
|
import { cn } from "../../../shared/utils/cn.js";
|
|
8
9
|
import { formatTokenAmount } from "../../../shared/utils/number.js";
|
|
9
10
|
import invariant from "invariant";
|
|
@@ -330,6 +331,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
330
331
|
const { address: globalAddress, wallet: globalWallet, connectedEOAWallet } = useAccountWallet();
|
|
331
332
|
const recipientProfile = useProfile({ address: recipientAddress, fresh: true });
|
|
332
333
|
const recipientName = recipientProfile.data?.name;
|
|
334
|
+
const globalWalletImage = useAccountWalletImage();
|
|
333
335
|
// Auto-set active wallet from wagmi
|
|
334
336
|
useAutoSetActiveWalletFromWagmi();
|
|
335
337
|
// Check token balance for crypto payments
|
|
@@ -851,12 +853,12 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
851
853
|
params.set("paymentMethod", selectedCryptoPaymentMethod);
|
|
852
854
|
}
|
|
853
855
|
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
854
|
-
}, onBack: navigateBack, recipientEnsName: globalWallet?.ensName, recipientImageUrl:
|
|
856
|
+
}, onBack: navigateBack, recipientEnsName: globalWallet?.ensName, recipientImageUrl: globalWalletImage }));
|
|
855
857
|
const recipientSelectionView = (_jsx(RecipientSelection, { initialValue: recipientAddress || "", onBack: navigateBack, onConfirm: address => {
|
|
856
858
|
setRecipientAddress(address);
|
|
857
859
|
navigateBack();
|
|
858
860
|
} }));
|
|
859
|
-
const cryptoPaymentMethodView = (_jsx(CryptoPaymentMethod, {
|
|
861
|
+
const cryptoPaymentMethodView = (_jsx(CryptoPaymentMethod, { selectedPaymentMethod: selectedCryptoPaymentMethod, setSelectedPaymentMethod: setSelectedCryptoPaymentMethod, isCreatingOrder: isCreatingOrder, onBack: navigateBack, onSelectPaymentMethod: (method) => {
|
|
860
862
|
setSelectedCryptoPaymentMethod(method);
|
|
861
863
|
navigateBack();
|
|
862
864
|
} }));
|
|
@@ -515,7 +515,7 @@ function AnySpendCustomInner({ loadOrder, mode = "modal", activeTab: activeTabPr
|
|
|
515
515
|
setActivePanel(PanelView.CONFIRM_ORDER);
|
|
516
516
|
} }) }));
|
|
517
517
|
// Crypto payment method view
|
|
518
|
-
const cryptoPaymentMethodView = (_jsx("div", { className: cn("bg-as-surface-primary mx-auto w-[460px] max-w-full rounded-xl p-4"), children: _jsx(CryptoPaymentMethod, {
|
|
518
|
+
const cryptoPaymentMethodView = (_jsx("div", { className: cn("bg-as-surface-primary mx-auto w-[460px] max-w-full rounded-xl p-4"), children: _jsx(CryptoPaymentMethod, { selectedPaymentMethod: selectedCryptoPaymentMethod, setSelectedPaymentMethod: setSelectedCryptoPaymentMethod, isCreatingOrder: isCreatingOrder, onBack: () => setActivePanel(PanelView.CONFIRM_ORDER), onSelectPaymentMethod: (method) => {
|
|
519
519
|
setSelectedCryptoPaymentMethod(method);
|
|
520
520
|
setActivePanel(PanelView.CONFIRM_ORDER);
|
|
521
521
|
} }) }));
|
|
@@ -226,7 +226,7 @@ function AnySpendCustomExactInInner({ loadOrder, mode = "modal", recipientAddres
|
|
|
226
226
|
setSelectedRecipientAddress(address);
|
|
227
227
|
setActivePanel(PanelView.MAIN);
|
|
228
228
|
} }));
|
|
229
|
-
const cryptoPaymentMethodView = (_jsx(CryptoPaymentMethod, {
|
|
229
|
+
const cryptoPaymentMethodView = (_jsx(CryptoPaymentMethod, { selectedPaymentMethod: selectedCryptoPaymentMethod, setSelectedPaymentMethod: setSelectedCryptoPaymentMethod, isCreatingOrder: isCreatingOrder, onBack: () => setActivePanel(PanelView.MAIN), onSelectPaymentMethod: (method) => {
|
|
230
230
|
setSelectedCryptoPaymentMethod(method);
|
|
231
231
|
setActivePanel(PanelView.MAIN);
|
|
232
232
|
} }));
|
|
@@ -216,7 +216,7 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
|
|
|
216
216
|
setSelectedRecipientAddress(address);
|
|
217
217
|
setActivePanel(PanelView.MAIN);
|
|
218
218
|
} }));
|
|
219
|
-
const cryptoPaymentMethodView = (_jsx(CryptoPaymentMethod, {
|
|
219
|
+
const cryptoPaymentMethodView = (_jsx(CryptoPaymentMethod, { selectedPaymentMethod: selectedCryptoPaymentMethod, setSelectedPaymentMethod: setSelectedCryptoPaymentMethod, isCreatingOrder: isCreatingOrder, onBack: () => setActivePanel(PanelView.MAIN), onSelectPaymentMethod: (method) => {
|
|
220
220
|
setSelectedCryptoPaymentMethod(method);
|
|
221
221
|
setActivePanel(PanelView.MAIN);
|
|
222
222
|
} }));
|
|
@@ -5,12 +5,6 @@ export declare enum CryptoPaymentMethodType {
|
|
|
5
5
|
TRANSFER_CRYPTO = "transfer_crypto"
|
|
6
6
|
}
|
|
7
7
|
interface CryptoPaymentMethodProps {
|
|
8
|
-
globalAddress?: string;
|
|
9
|
-
globalWallet?: {
|
|
10
|
-
meta?: {
|
|
11
|
-
icon?: string;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
8
|
selectedPaymentMethod: CryptoPaymentMethodType;
|
|
15
9
|
setSelectedPaymentMethod: (method: CryptoPaymentMethodType) => void;
|
|
16
10
|
isCreatingOrder: boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useAccountWallet } from "../../../../global-account/react/index.js";
|
|
4
|
+
import { useAccountWalletImage } from "../../../../global-account/react/hooks/useAccountWallet.js";
|
|
4
5
|
import { cn } from "../../../../shared/utils/cn.js";
|
|
5
6
|
import { shortenAddress } from "../../../../shared/utils/formatAddress.js";
|
|
6
7
|
import { client } from "../../../../shared/utils/thirdweb.js";
|
|
@@ -21,7 +22,7 @@ export var CryptoPaymentMethodType;
|
|
|
21
22
|
CryptoPaymentMethodType["TRANSFER_CRYPTO"] = "transfer_crypto";
|
|
22
23
|
})(CryptoPaymentMethodType || (CryptoPaymentMethodType = {}));
|
|
23
24
|
export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod, isCreatingOrder, onBack, onSelectPaymentMethod, }) {
|
|
24
|
-
const {
|
|
25
|
+
const { connectedEOAWallet: connectedEOAWallet, connectedSmartWallet: connectedSmartWallet } = useAccountWallet();
|
|
25
26
|
const { connector, address } = useAccount();
|
|
26
27
|
const { connect, connectors, isPending } = useConnect();
|
|
27
28
|
const { disconnect } = useDisconnect();
|
|
@@ -31,6 +32,7 @@ export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentM
|
|
|
31
32
|
const { data: eoaWalletInfo } = useWalletInfo(connectedEOAWallet?.id);
|
|
32
33
|
const isConnected = !!connectedEOAWallet;
|
|
33
34
|
const globalAddress = connectedSmartWallet?.getAccount()?.address;
|
|
35
|
+
const walletImage = useAccountWalletImage();
|
|
34
36
|
// Use custom hook to determine wallet display logic
|
|
35
37
|
const { shouldShowConnectedEOA, shouldShowWagmiWallet } = useConnectedWalletDisplay(selectedPaymentMethod);
|
|
36
38
|
// Map wagmi connector names to thirdweb wallet IDs
|
|
@@ -198,7 +200,7 @@ export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentM
|
|
|
198
200
|
toast.success("Selected B3 Account");
|
|
199
201
|
}, className: cn("crypto-payment-method-global-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.GLOBAL_WALLET
|
|
200
202
|
? "connected-wallet border-as-brand bg-as-brand/5"
|
|
201
|
-
: "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [
|
|
203
|
+
: "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [walletImage ? (_jsx("img", { src: walletImage, alt: "Global Account", className: "h-10 w-10 rounded-full" })) : (_jsx("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-purple-100", children: _jsx(Wallet, { className: "h-5 w-5 text-purple-600" }) })), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-as-primary font-semibold", children: "Global Account" }), _jsx("span", { className: "text-as-primary/60 text-sm", children: shortenAddress(globalAddress || "") })] })] }), _jsx("div", { className: "flex items-center gap-2", children: selectedPaymentMethod === CryptoPaymentMethodType.GLOBAL_WALLET && (_jsx("div", { className: "h-2 w-2 rounded-full bg-green-500" })) })] }) }))] })] })), _jsxs("div", { className: "other-payment-methods", children: [_jsx("h3", { className: "text-as-primary/80 mb-3 text-sm font-medium", children: "Payment methods" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("button", { onClick: () => {
|
|
202
204
|
// Always show wallet selection modal first
|
|
203
205
|
setShowWalletModal(true);
|
|
204
206
|
}, className: "crypto-payment-method-connect-wallet bg-as-surface-primary border-as-border-secondary hover:border-as-secondary/80 group flex w-full items-center justify-between gap-4 rounded-xl border px-4 py-3.5 transition-all duration-200 hover:shadow-md", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "wallet-icon flex h-8 w-8 items-center justify-center rounded-full bg-blue-100", children: _jsx(Wallet, { className: "h-4 w-4 text-blue-600" }) }), _jsx("div", { className: "flex flex-col items-start text-left", children: _jsx("h4", { className: "text-as-primary font-semibold", children: "Connect wallet" }) })] }), _jsx(ChevronRightCircle, { className: "text-as-primary/40 group-hover:text-as-primary/60 h-5 w-5 transition-colors" })] }), _jsxs("button", { onClick: () => {
|