@b3dotfun/sdk 0.0.64-alpha.2 → 0.0.65-test.1
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 +73 -33
- package/dist/cjs/anyspend/react/components/AnySpendCustom.js +1 -1
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +1 -1
- package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.js +1 -1
- package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.js +2 -2
- package/dist/cjs/anyspend/react/components/common/OrderHistory.d.ts +1 -1
- package/dist/cjs/anyspend/react/components/common/OrderHistory.js +7 -3
- package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +1 -1
- package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.js +1 -1
- package/dist/cjs/anyspend/react/components/common/RecipientSelection.js +1 -1
- package/dist/cjs/global-account/react/components/AccountAssets/AccountAssets.js +38 -2
- package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.js +139 -33
- package/dist/cjs/global-account/react/components/B3DynamicModal.js +25 -6
- package/dist/cjs/global-account/react/components/Deposit/Deposit.d.ts +1 -0
- package/dist/cjs/global-account/react/components/Deposit/Deposit.js +65 -0
- package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
- package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.js +113 -279
- package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
- package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.js +331 -0
- package/dist/cjs/global-account/react/components/ManageAccount/AppsContent.d.ts +6 -0
- package/dist/cjs/global-account/react/components/ManageAccount/AppsContent.js +34 -0
- package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.js +2 -2
- package/dist/cjs/global-account/react/components/ManageAccount/BottomNavigation.d.ts +2 -0
- package/dist/cjs/global-account/react/components/ManageAccount/BottomNavigation.js +23 -0
- package/dist/cjs/global-account/react/components/ManageAccount/Header.d.ts +3 -0
- package/dist/cjs/global-account/react/components/ManageAccount/Header.js +120 -0
- package/dist/cjs/global-account/react/components/ManageAccount/HomeActions.d.ts +5 -0
- package/dist/cjs/global-account/react/components/ManageAccount/HomeActions.js +43 -0
- package/dist/cjs/global-account/react/components/ManageAccount/HomeContent.d.ts +6 -0
- package/dist/cjs/global-account/react/components/ManageAccount/HomeContent.js +16 -0
- package/dist/cjs/global-account/react/components/ManageAccount/ManageAccount.js +24 -193
- package/dist/cjs/global-account/react/components/ManageAccount/NFTContent.d.ts +2 -0
- package/dist/cjs/global-account/react/components/ManageAccount/NFTContent.js +15 -0
- package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
- package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +44 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +50 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +9 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsMenuItem.js +8 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +2 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +38 -0
- package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
- package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.js +22 -0
- package/dist/cjs/global-account/react/components/ModalHeader/ModalHeader.d.ts +10 -0
- package/dist/cjs/global-account/react/components/ModalHeader/ModalHeader.js +12 -0
- package/dist/cjs/global-account/react/components/Send/Send.d.ts +5 -0
- package/dist/cjs/global-account/react/components/Send/Send.js +187 -0
- package/dist/cjs/global-account/react/components/icons/BellIcon.d.ts +3 -0
- package/dist/cjs/global-account/react/components/icons/BellIcon.js +5 -0
- package/dist/cjs/global-account/react/components/icons/ChevronDownIcon.d.ts +2 -0
- package/dist/cjs/global-account/react/components/icons/ChevronDownIcon.js +7 -0
- package/dist/cjs/global-account/react/components/icons/CopyIcon.d.ts +2 -0
- package/dist/cjs/global-account/react/components/icons/CopyIcon.js +7 -0
- package/dist/cjs/global-account/react/components/icons/LinkIcon.d.ts +3 -0
- package/dist/cjs/global-account/react/components/icons/LinkIcon.js +5 -0
- package/dist/cjs/global-account/react/components/icons/LockIcon.d.ts +3 -0
- package/dist/cjs/global-account/react/components/icons/LockIcon.js +5 -0
- package/dist/cjs/global-account/react/components/icons/WalletIcon.d.ts +2 -0
- package/dist/cjs/global-account/react/components/icons/WalletIcon.js +7 -0
- package/dist/cjs/global-account/react/components/index.d.ts +4 -2
- package/dist/cjs/global-account/react/components/index.js +11 -4
- package/dist/cjs/global-account/react/components/ui/Tabs.js +2 -2
- package/dist/cjs/global-account/react/components/ui/dialog.js +2 -2
- package/dist/cjs/global-account/react/hooks/index.d.ts +1 -1
- package/dist/cjs/global-account/react/hooks/index.js +3 -1
- package/dist/cjs/global-account/react/hooks/useB3BalanceFromAddresses.js +1 -0
- package/dist/cjs/global-account/react/stores/index.d.ts +1 -0
- package/dist/cjs/global-account/react/stores/index.js +3 -1
- package/dist/cjs/global-account/react/stores/useModalStore.d.ts +34 -3
- package/dist/cjs/global-account/react/stores/useRecentAddressesStore.d.ts +25 -0
- package/dist/cjs/global-account/react/stores/useRecentAddressesStore.js +36 -0
- package/dist/cjs/global-account/react/utils/profileDisplay.d.ts +2 -0
- package/dist/cjs/global-account/react/utils/profileDisplay.js +2 -2
- package/dist/cjs/shared/constants/chains/supported.d.ts +2 -2
- package/dist/cjs/shared/utils/ipfs.js +1 -1
- package/dist/esm/anyspend/react/components/AnySpend.js +74 -34
- package/dist/esm/anyspend/react/components/AnySpendCustom.js +1 -1
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +1 -1
- package/dist/esm/anyspend/react/components/common/FeeDetailPanel.js +1 -1
- package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.js +2 -2
- package/dist/esm/anyspend/react/components/common/OrderHistory.d.ts +1 -1
- package/dist/esm/anyspend/react/components/common/OrderHistory.js +6 -5
- package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +1 -1
- package/dist/esm/anyspend/react/components/common/PointsDetailPanel.js +1 -1
- package/dist/esm/anyspend/react/components/common/RecipientSelection.js +1 -1
- package/dist/esm/global-account/react/components/AccountAssets/AccountAssets.js +38 -2
- package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.js +140 -34
- package/dist/esm/global-account/react/components/B3DynamicModal.js +25 -6
- package/dist/esm/global-account/react/components/Deposit/Deposit.d.ts +1 -0
- package/dist/esm/global-account/react/components/Deposit/Deposit.js +59 -0
- package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
- package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.js +113 -280
- package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
- package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.js +325 -0
- package/dist/esm/global-account/react/components/ManageAccount/AppsContent.d.ts +6 -0
- package/dist/esm/global-account/react/components/ManageAccount/AppsContent.js +32 -0
- package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.js +2 -2
- package/dist/esm/global-account/react/components/ManageAccount/BottomNavigation.d.ts +2 -0
- package/dist/esm/global-account/react/components/ManageAccount/BottomNavigation.js +21 -0
- package/dist/esm/global-account/react/components/ManageAccount/Header.d.ts +3 -0
- package/dist/esm/global-account/react/components/ManageAccount/Header.js +81 -0
- package/dist/esm/global-account/react/components/ManageAccount/HomeActions.d.ts +5 -0
- package/dist/esm/global-account/react/components/ManageAccount/HomeActions.js +41 -0
- package/dist/esm/global-account/react/components/ManageAccount/HomeContent.d.ts +6 -0
- package/dist/esm/global-account/react/components/ManageAccount/HomeContent.js +10 -0
- package/dist/esm/global-account/react/components/ManageAccount/ManageAccount.js +26 -195
- package/dist/esm/global-account/react/components/ManageAccount/NFTContent.d.ts +2 -0
- package/dist/esm/global-account/react/components/ManageAccount/NFTContent.js +13 -0
- package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
- package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +42 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +45 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +9 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsMenuItem.js +6 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +2 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +36 -0
- package/dist/esm/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
- package/dist/esm/global-account/react/components/ManageAccount/TokenContent.js +20 -0
- package/dist/esm/global-account/react/components/ModalHeader/ModalHeader.d.ts +10 -0
- package/dist/esm/global-account/react/components/ModalHeader/ModalHeader.js +10 -0
- package/dist/esm/global-account/react/components/Send/Send.d.ts +5 -0
- package/dist/esm/global-account/react/components/Send/Send.js +181 -0
- package/dist/esm/global-account/react/components/icons/BellIcon.d.ts +3 -0
- package/dist/esm/global-account/react/components/icons/BellIcon.js +3 -0
- package/dist/esm/global-account/react/components/icons/ChevronDownIcon.d.ts +2 -0
- package/dist/esm/global-account/react/components/icons/ChevronDownIcon.js +4 -0
- package/dist/esm/global-account/react/components/icons/CopyIcon.d.ts +2 -0
- package/dist/esm/global-account/react/components/icons/CopyIcon.js +4 -0
- package/dist/esm/global-account/react/components/icons/LinkIcon.d.ts +3 -0
- package/dist/esm/global-account/react/components/icons/LinkIcon.js +3 -0
- package/dist/esm/global-account/react/components/icons/LockIcon.d.ts +3 -0
- package/dist/esm/global-account/react/components/icons/LockIcon.js +3 -0
- package/dist/esm/global-account/react/components/icons/WalletIcon.d.ts +2 -0
- package/dist/esm/global-account/react/components/icons/WalletIcon.js +4 -0
- package/dist/esm/global-account/react/components/index.d.ts +4 -2
- package/dist/esm/global-account/react/components/index.js +7 -2
- package/dist/esm/global-account/react/components/ui/Tabs.js +2 -2
- package/dist/esm/global-account/react/components/ui/dialog.js +2 -2
- package/dist/esm/global-account/react/hooks/index.d.ts +1 -1
- package/dist/esm/global-account/react/hooks/index.js +1 -1
- package/dist/esm/global-account/react/hooks/useB3BalanceFromAddresses.js +1 -0
- package/dist/esm/global-account/react/stores/index.d.ts +1 -0
- package/dist/esm/global-account/react/stores/index.js +1 -0
- package/dist/esm/global-account/react/stores/useModalStore.d.ts +34 -3
- package/dist/esm/global-account/react/stores/useRecentAddressesStore.d.ts +25 -0
- package/dist/esm/global-account/react/stores/useRecentAddressesStore.js +33 -0
- package/dist/esm/global-account/react/utils/profileDisplay.d.ts +2 -0
- package/dist/esm/global-account/react/utils/profileDisplay.js +2 -2
- package/dist/esm/shared/constants/chains/supported.d.ts +2 -2
- package/dist/esm/shared/utils/ipfs.js +1 -1
- package/dist/styles/index.css +1 -1
- package/dist/types/anyspend/react/components/common/OrderHistory.d.ts +1 -1
- package/dist/types/global-account/react/components/Deposit/Deposit.d.ts +1 -0
- package/dist/types/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
- package/dist/types/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
- package/dist/types/global-account/react/components/ManageAccount/AppsContent.d.ts +6 -0
- package/dist/types/global-account/react/components/ManageAccount/BottomNavigation.d.ts +2 -0
- package/dist/types/global-account/react/components/ManageAccount/Header.d.ts +3 -0
- package/dist/types/global-account/react/components/ManageAccount/HomeActions.d.ts +5 -0
- package/dist/types/global-account/react/components/ManageAccount/HomeContent.d.ts +6 -0
- package/dist/types/global-account/react/components/ManageAccount/NFTContent.d.ts +2 -0
- package/dist/types/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
- package/dist/types/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
- package/dist/types/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +9 -0
- package/dist/types/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +2 -0
- package/dist/types/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
- package/dist/types/global-account/react/components/ModalHeader/ModalHeader.d.ts +10 -0
- package/dist/types/global-account/react/components/Send/Send.d.ts +5 -0
- package/dist/types/global-account/react/components/icons/BellIcon.d.ts +3 -0
- package/dist/types/global-account/react/components/icons/ChevronDownIcon.d.ts +2 -0
- package/dist/types/global-account/react/components/icons/CopyIcon.d.ts +2 -0
- package/dist/types/global-account/react/components/icons/LinkIcon.d.ts +3 -0
- package/dist/types/global-account/react/components/icons/LockIcon.d.ts +3 -0
- package/dist/types/global-account/react/components/icons/WalletIcon.d.ts +2 -0
- package/dist/types/global-account/react/components/index.d.ts +4 -2
- package/dist/types/global-account/react/hooks/index.d.ts +1 -1
- package/dist/types/global-account/react/stores/index.d.ts +1 -0
- package/dist/types/global-account/react/stores/useModalStore.d.ts +34 -3
- package/dist/types/global-account/react/stores/useRecentAddressesStore.d.ts +25 -0
- package/dist/types/global-account/react/utils/profileDisplay.d.ts +2 -0
- package/dist/types/shared/constants/chains/supported.d.ts +2 -2
- package/package.json +1 -1
- package/src/anyspend/react/components/AnySpend.tsx +225 -167
- package/src/anyspend/react/components/AnySpendCustom.tsx +1 -1
- package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +1 -1
- package/src/anyspend/react/components/common/FeeDetailPanel.tsx +1 -1
- package/src/anyspend/react/components/common/FiatPaymentMethod.tsx +2 -2
- package/src/anyspend/react/components/common/OrderHistory.tsx +8 -13
- package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +1 -1
- package/src/anyspend/react/components/common/PointsDetailPanel.tsx +1 -1
- package/src/anyspend/react/components/common/RecipientSelection.tsx +1 -1
- package/src/global-account/react/components/AccountAssets/AccountAssets.tsx +115 -25
- package/src/global-account/react/components/AvatarEditor/AvatarEditor.tsx +303 -126
- package/src/global-account/react/components/B3DynamicModal.tsx +28 -6
- package/src/global-account/react/components/Deposit/Deposit.tsx +211 -0
- package/src/global-account/react/components/LinkAccount/LinkAccount.tsx +332 -433
- package/src/global-account/react/components/LinkAccount/LinkNewAccount.tsx +490 -0
- package/src/global-account/react/components/ManageAccount/AppsContent.tsx +79 -0
- package/src/global-account/react/components/ManageAccount/BalanceContent.tsx +2 -3
- package/src/global-account/react/components/ManageAccount/BottomNavigation.tsx +83 -0
- package/src/global-account/react/components/ManageAccount/Header.tsx +230 -0
- package/src/global-account/react/components/ManageAccount/HomeActions.tsx +118 -0
- package/src/global-account/react/components/ManageAccount/HomeContent.tsx +42 -0
- package/src/global-account/react/components/ManageAccount/ManageAccount.tsx +73 -589
- package/src/global-account/react/components/ManageAccount/NFTContent.tsx +24 -0
- package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +74 -0
- package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +87 -0
- package/src/global-account/react/components/ManageAccount/SettingsMenuItem.tsx +31 -0
- package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +74 -0
- package/src/global-account/react/components/ManageAccount/TokenContent.tsx +41 -0
- package/src/global-account/react/components/ModalHeader/ModalHeader.tsx +50 -0
- package/src/global-account/react/components/Send/Send.tsx +585 -0
- package/src/global-account/react/components/icons/BellIcon.tsx +15 -0
- package/src/global-account/react/components/icons/ChevronDownIcon.tsx +17 -0
- package/src/global-account/react/components/icons/CopyIcon.tsx +22 -0
- package/src/global-account/react/components/icons/LinkIcon.tsx +15 -0
- package/src/global-account/react/components/icons/LockIcon.tsx +15 -0
- package/src/global-account/react/components/icons/WalletIcon.tsx +21 -0
- package/src/global-account/react/components/index.ts +9 -2
- package/src/global-account/react/components/ui/Tabs.tsx +5 -13
- package/src/global-account/react/components/ui/dialog.tsx +32 -14
- package/src/global-account/react/hooks/index.ts +3 -0
- package/src/global-account/react/hooks/useB3BalanceFromAddresses.ts +1 -0
- package/src/global-account/react/stores/index.ts +1 -0
- package/src/global-account/react/stores/useModalStore.ts +39 -2
- package/src/global-account/react/stores/useRecentAddressesStore.ts +55 -0
- package/src/global-account/react/utils/profileDisplay.ts +4 -2
- package/src/shared/utils/ipfs.ts +1 -1
- package/src/styles/index.css +6 -1
|
@@ -10,27 +10,42 @@ const app_1 = __importDefault(require("../../../../global-account/app"));
|
|
|
10
10
|
const react_1 = require("../../../../global-account/react");
|
|
11
11
|
const cn_1 = require("../../../../shared/utils/cn");
|
|
12
12
|
const debug_1 = require("../../../../shared/utils/debug");
|
|
13
|
+
const ipfs_1 = require("../../../../shared/utils/ipfs");
|
|
13
14
|
const thirdweb_1 = require("../../../../shared/utils/thirdweb");
|
|
14
15
|
const lucide_react_1 = require("lucide-react");
|
|
15
16
|
const react_2 = require("react");
|
|
16
17
|
const sonner_1 = require("sonner");
|
|
17
18
|
const react_3 = require("thirdweb/react");
|
|
18
19
|
const storage_1 = require("thirdweb/storage");
|
|
20
|
+
const useProfile_1 = require("../../hooks/useProfile");
|
|
21
|
+
const stores_1 = require("../../stores");
|
|
22
|
+
const ModalHeader_1 = __importDefault(require("../ModalHeader/ModalHeader"));
|
|
19
23
|
const debug = (0, debug_1.debugB3React)("AvatarEditor");
|
|
20
24
|
function AvatarEditor({ onSetAvatar, className }) {
|
|
25
|
+
const [viewStep, setViewStep] = (0, react_2.useState)("select");
|
|
26
|
+
const [selectedAvatar, setSelectedAvatar] = (0, react_2.useState)(null);
|
|
27
|
+
const [hoveredProfile, setHoveredProfile] = (0, react_2.useState)(null);
|
|
21
28
|
const [selectedFile, setSelectedFile] = (0, react_2.useState)(null);
|
|
22
29
|
const [previewUrl, setPreviewUrl] = (0, react_2.useState)(null);
|
|
23
30
|
const [isUploading, setIsUploading] = (0, react_2.useState)(false);
|
|
24
31
|
const [isSaving, setIsSaving] = (0, react_2.useState)(false);
|
|
32
|
+
const [isDragging, setIsDragging] = (0, react_2.useState)(false);
|
|
25
33
|
const fileInputRef = (0, react_2.useRef)(null);
|
|
26
|
-
const { setUser } = (0, react_1.useB3)();
|
|
34
|
+
const { setUser, user, partnerId } = (0, react_1.useB3)();
|
|
35
|
+
const setB3ModalContentType = (0, stores_1.useModalStore)(state => state.setB3ModalContentType);
|
|
36
|
+
const setB3ModalOpen = (0, stores_1.useModalStore)(state => state.setB3ModalOpen);
|
|
37
|
+
const contentType = (0, stores_1.useModalStore)(state => state.contentType);
|
|
38
|
+
const { setPreference } = (0, useProfile_1.useProfileSettings)();
|
|
27
39
|
const account = (0, react_3.useActiveAccount)();
|
|
28
40
|
const { data: profile, refetch: refreshProfile } = (0, react_1.useProfile)({
|
|
29
41
|
address: account?.address,
|
|
30
42
|
fresh: true,
|
|
31
43
|
});
|
|
32
|
-
|
|
33
|
-
|
|
44
|
+
const currentAvatar = user?.avatar
|
|
45
|
+
? (0, ipfs_1.getIpfsUrl)(user?.avatar)
|
|
46
|
+
: profile?.avatar
|
|
47
|
+
? (0, ipfs_1.getIpfsUrl)(profile.avatar)
|
|
48
|
+
: undefined;
|
|
34
49
|
const handleFileSelect = (event) => {
|
|
35
50
|
const file = event.target.files?.[0];
|
|
36
51
|
if (file) {
|
|
@@ -48,9 +63,11 @@ function AvatarEditor({ onSetAvatar, className }) {
|
|
|
48
63
|
// Create preview URL
|
|
49
64
|
const url = URL.createObjectURL(file);
|
|
50
65
|
setPreviewUrl(url);
|
|
66
|
+
setSelectedAvatar(url);
|
|
51
67
|
}
|
|
52
68
|
};
|
|
53
|
-
const
|
|
69
|
+
const handleRemovePreview = () => {
|
|
70
|
+
setSelectedAvatar(currentAvatar || null);
|
|
54
71
|
setSelectedFile(null);
|
|
55
72
|
if (previewUrl) {
|
|
56
73
|
URL.revokeObjectURL(previewUrl);
|
|
@@ -60,49 +77,138 @@ function AvatarEditor({ onSetAvatar, className }) {
|
|
|
60
77
|
fileInputRef.current.value = "";
|
|
61
78
|
}
|
|
62
79
|
};
|
|
63
|
-
const
|
|
64
|
-
if (!
|
|
65
|
-
sonner_1.toast.error("
|
|
80
|
+
const handleSaveChanges = async () => {
|
|
81
|
+
if (!account?.address) {
|
|
82
|
+
sonner_1.toast.error("No account connected");
|
|
66
83
|
return;
|
|
67
84
|
}
|
|
68
|
-
|
|
85
|
+
setIsSaving(true);
|
|
69
86
|
try {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
// If user uploaded a new file
|
|
88
|
+
if (selectedFile) {
|
|
89
|
+
debug("Starting upload to IPFS", selectedFile);
|
|
90
|
+
// Upload to IPFS using Thirdweb
|
|
91
|
+
const ipfsUrl = await (0, storage_1.upload)({
|
|
92
|
+
client: thirdweb_1.client,
|
|
93
|
+
files: [selectedFile],
|
|
94
|
+
});
|
|
95
|
+
debug("Upload successful", ipfsUrl);
|
|
96
|
+
// Save avatar URL using profiles service
|
|
97
|
+
const user = await app_1.default.service("users").setAvatar({
|
|
98
|
+
avatar: ipfsUrl,
|
|
99
|
+
},
|
|
100
|
+
// @ts-expect-error - our typed client is expecting context even though it's set elsewhere
|
|
101
|
+
{});
|
|
102
|
+
// update user
|
|
103
|
+
// @ts-expect-error this resolved fine, look into why expect-error needed
|
|
104
|
+
setUser(user);
|
|
105
|
+
sonner_1.toast.success("Looks great! Your avatar has been saved!");
|
|
106
|
+
}
|
|
107
|
+
else if (selectedAvatar && selectedAvatar !== currentAvatar) {
|
|
108
|
+
// User selected from existing profile avatars
|
|
109
|
+
// Find the profile that matches the selected avatar
|
|
110
|
+
const selectedProfile = profile?.profiles?.find(p => p.avatar === selectedAvatar);
|
|
111
|
+
if (selectedProfile && selectedProfile.type) {
|
|
112
|
+
debug("Setting profile preference to:", selectedProfile.type);
|
|
113
|
+
// Set preference for this profile type
|
|
114
|
+
await setPreference(account.address, selectedProfile.type, account.address, async (message) => {
|
|
115
|
+
// Sign the message using the active account
|
|
116
|
+
const signature = await account.signMessage({ message });
|
|
117
|
+
return signature;
|
|
118
|
+
});
|
|
119
|
+
sonner_1.toast.success("Avatar updated successfully!");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
87
122
|
// Refresh profile to get updated avatar
|
|
88
123
|
await refreshProfile();
|
|
89
|
-
sonner_1.toast.success(hasAvatar ? "Nice look! Your avatar has been updated!" : "Looks great! Your avatar has been saved!");
|
|
90
124
|
onSetAvatar?.();
|
|
91
|
-
// Clean up
|
|
92
|
-
handleRemoveFile();
|
|
93
125
|
}
|
|
94
126
|
catch (error) {
|
|
95
|
-
debug("Error
|
|
96
|
-
sonner_1.toast.error("Failed to
|
|
127
|
+
debug("Error saving avatar:", error);
|
|
128
|
+
sonner_1.toast.error("Failed to save avatar. Please try again.");
|
|
97
129
|
}
|
|
98
130
|
finally {
|
|
99
|
-
setIsUploading(false);
|
|
100
131
|
setIsSaving(false);
|
|
101
132
|
}
|
|
102
133
|
};
|
|
103
|
-
const
|
|
134
|
+
const handleCancel = () => {
|
|
135
|
+
if (viewStep === "upload") {
|
|
136
|
+
setViewStep("select");
|
|
137
|
+
handleRemovePreview();
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
setB3ModalContentType({
|
|
141
|
+
type: "manageAccount",
|
|
142
|
+
chain: contentType?.chain,
|
|
143
|
+
partnerId: partnerId,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const handleProfileAvatarSelect = (avatarUrl) => {
|
|
148
|
+
setSelectedAvatar(avatarUrl);
|
|
149
|
+
};
|
|
150
|
+
const handleUploadImageClick = () => {
|
|
151
|
+
setViewStep("upload");
|
|
152
|
+
};
|
|
153
|
+
const handleOpenFilePicker = () => {
|
|
104
154
|
fileInputRef.current?.click();
|
|
105
155
|
};
|
|
156
|
+
const handleDragEnter = (e) => {
|
|
157
|
+
e.preventDefault();
|
|
158
|
+
e.stopPropagation();
|
|
159
|
+
setIsDragging(true);
|
|
160
|
+
};
|
|
161
|
+
const handleDragLeave = (e) => {
|
|
162
|
+
e.preventDefault();
|
|
163
|
+
e.stopPropagation();
|
|
164
|
+
setIsDragging(false);
|
|
165
|
+
};
|
|
166
|
+
const handleDragOver = (e) => {
|
|
167
|
+
e.preventDefault();
|
|
168
|
+
e.stopPropagation();
|
|
169
|
+
};
|
|
170
|
+
const handleDrop = (e) => {
|
|
171
|
+
e.preventDefault();
|
|
172
|
+
e.stopPropagation();
|
|
173
|
+
setIsDragging(false);
|
|
174
|
+
const file = e.dataTransfer.files?.[0];
|
|
175
|
+
if (file) {
|
|
176
|
+
// Validate file type
|
|
177
|
+
if (!file.type.startsWith("image/")) {
|
|
178
|
+
sonner_1.toast.error("Please select an image file");
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Validate file size (max 5MB)
|
|
182
|
+
if (file.size > 5 * 1024 * 1024) {
|
|
183
|
+
sonner_1.toast.error("File size must be less than 5MB");
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
setSelectedFile(file);
|
|
187
|
+
// Create preview URL
|
|
188
|
+
const url = URL.createObjectURL(file);
|
|
189
|
+
setPreviewUrl(url);
|
|
190
|
+
setSelectedAvatar(url);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
const handleLinkMoreAccount = () => {
|
|
194
|
+
setB3ModalContentType({
|
|
195
|
+
type: "linkAccount",
|
|
196
|
+
chain: contentType?.chain,
|
|
197
|
+
partnerId: partnerId,
|
|
198
|
+
});
|
|
199
|
+
};
|
|
106
200
|
const isLoading = isUploading || isSaving;
|
|
107
|
-
|
|
201
|
+
// Get profile avatars
|
|
202
|
+
const profileAvatars = profile?.profiles
|
|
203
|
+
?.filter(p => p.avatar)
|
|
204
|
+
.map(p => ({
|
|
205
|
+
type: p.type,
|
|
206
|
+
avatar: (0, ipfs_1.getIpfsUrl)(p?.avatar || ""),
|
|
207
|
+
name: p.name || p.type,
|
|
208
|
+
})) || [];
|
|
209
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex w-full max-w-md flex-col bg-white", className), children: [viewStep === "upload" && (0, jsx_runtime_1.jsx)(ModalHeader_1.default, { title: "Upload Image" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center p-6", children: [viewStep === "select" ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "relative mb-6", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-32 w-32 overflow-hidden rounded-full", children: (0, jsx_runtime_1.jsx)("img", { src: selectedAvatar || currentAvatar || "https://via.placeholder.com/128", alt: "Avatar preview", className: "h-full w-full object-cover" }) }), selectedAvatar && ((0, jsx_runtime_1.jsx)("button", { onClick: handleRemovePreview, className: "absolute -right-1 -top-1 flex h-8 w-8 items-center justify-center rounded-full bg-[#51525c] text-white transition-colors hover:bg-[#71717a]", children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "h-4 w-4" }) }))] }), (0, jsx_runtime_1.jsxs)("button", { onClick: handleUploadImageClick, className: "font-inter shadow-xs mb-6 flex w-full items-center justify-center gap-2 rounded-xl border border-[#e4e4e7] bg-white px-4 py-3 text-sm font-semibold text-[#18181b] transition-colors hover:bg-[#f4f4f5]", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Upload, { className: "h-4 w-4" }), "Upload image"] }), (0, jsx_runtime_1.jsxs)("div", { className: "w-full", children: [(0, jsx_runtime_1.jsx)("h3", { className: "mb-2 text-base font-semibold text-[#18181b]", children: "Select your profile image" }), (0, jsx_runtime_1.jsx)("p", { className: "mb-4 text-sm font-semibold text-[#475467]", children: "Pick an avatar from your linked profiles, ENS or upload a new one." }), (0, jsx_runtime_1.jsx)("div", { className: "mb-4 flex gap-3", children: profileAvatars.map((profileAvatar, index) => ((0, jsx_runtime_1.jsxs)("div", { className: "relative", onMouseEnter: () => setHoveredProfile(profileAvatar.type), onMouseLeave: () => setHoveredProfile(null), children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => handleProfileAvatarSelect(profileAvatar.avatar), className: (0, cn_1.cn)("h-16 w-16 overflow-hidden rounded-full border-2 transition-all", selectedAvatar === profileAvatar.avatar
|
|
210
|
+
? "border-[#3368ef] ring-2 ring-[#3368ef]/20"
|
|
211
|
+
: "border-transparent hover:border-[#e4e4e7]"), children: (0, jsx_runtime_1.jsx)("img", { src: profileAvatar.avatar, alt: `${profileAvatar.type} avatar`, className: "h-full w-full object-cover" }) }), hoveredProfile === profileAvatar.type && ((0, jsx_runtime_1.jsx)("div", { className: "absolute -top-10 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-md bg-[#18181b] px-3 py-1.5 text-xs text-white", children: profileAvatar.name }))] }, index))) }), (0, jsx_runtime_1.jsxs)("button", { onClick: handleLinkMoreAccount, className: "font-inter flex items-center gap-2 text-sm font-semibold text-[#3368ef] hover:underline", children: [(0, jsx_runtime_1.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", children: (0, jsx_runtime_1.jsx)("path", { d: "M8.75 2.75C8.75 2.33579 8.41421 2 8 2C7.58579 2 7.25 2.33579 7.25 2.75V7.25H2.75C2.33579 7.25 2 7.58579 2 8C2 8.41421 2.33579 8.75 2.75 8.75H7.25V13.25C7.25 13.6642 7.58579 14 8 14C8.41421 14 8.75 13.6642 8.75 13.25V8.75H13.25C13.6642 8.75 14 8.41421 14 8C14 7.58579 13.6642 7.25 13.25 7.25H8.75V2.75Z", fill: "currentColor" }) }), "Link more account"] })] })] })) : ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: !selectedFile ? ((0, jsx_runtime_1.jsxs)("div", { onClick: handleOpenFilePicker, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: (0, cn_1.cn)("mb-6 flex w-full cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed p-16 transition-colors", isDragging
|
|
212
|
+
? "border-[#3368ef] bg-[#f0f5ff]"
|
|
213
|
+
: "border-[#e4e4e7] hover:border-[#3368ef] hover:bg-[#f0f5ff]"), children: [(0, jsx_runtime_1.jsxs)("p", { className: "font-inter mb-1 text-sm", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-semibold text-[#3368ef]", children: "Click to upload" }), (0, jsx_runtime_1.jsx)("span", { className: "text-[#71717a]", children: " or drag and drop" })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-[#71717a]", children: "PNG, JPG or GIF (up to 5MB)" })] })) : ((0, jsx_runtime_1.jsx)("div", { className: "mb-6 w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "aspect-square w-full overflow-hidden rounded-xl bg-[#f4f4f5]", children: (0, jsx_runtime_1.jsx)("img", { src: previewUrl || "", alt: "Preview", className: "h-full w-full object-cover" }) }) })) })), (0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, type: "file", accept: "image/*", onChange: handleFileSelect, className: "hidden" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "font-inter flex gap-3 border-t border-[#e4e4e7] p-6 font-semibold", children: [(0, jsx_runtime_1.jsx)(react_1.Button, { onClick: handleCancel, variant: "outline", disabled: isLoading, className: "flex-1 rounded-xl border-[#e4e4e7] text-[#18181b] hover:bg-[#f4f4f5]", children: "Cancel" }), (0, jsx_runtime_1.jsx)(react_1.Button, { onClick: handleSaveChanges, disabled: isLoading || !selectedAvatar, className: "flex-1 rounded-xl bg-[#3368ef] text-white hover:bg-[#2952cc]", children: isLoading ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Saving..."] })) : ("Save changes") })] })] }));
|
|
108
214
|
}
|
|
@@ -13,16 +13,22 @@ const react_3 = require("react");
|
|
|
13
13
|
const react_4 = require("thirdweb/react");
|
|
14
14
|
const AvatarEditor_1 = require("./AvatarEditor/AvatarEditor");
|
|
15
15
|
const useB3_1 = require("./B3Provider/useB3");
|
|
16
|
+
const Deposit_1 = require("./Deposit/Deposit");
|
|
16
17
|
const LinkAccount_1 = require("./LinkAccount/LinkAccount");
|
|
17
|
-
const
|
|
18
|
+
const LinkNewAccount_1 = require("./LinkAccount/LinkNewAccount");
|
|
18
19
|
const ManageAccount_1 = require("./ManageAccount/ManageAccount");
|
|
20
|
+
const ProfileEditor_1 = require("./ProfileEditor/ProfileEditor");
|
|
19
21
|
const RequestPermissions_1 = require("./RequestPermissions/RequestPermissions");
|
|
22
|
+
const Send_1 = require("./Send/Send");
|
|
20
23
|
const SignInWithB3Flow_1 = require("./SignInWithB3/SignInWithB3Flow");
|
|
21
24
|
const dialog_1 = require("./ui/dialog");
|
|
22
25
|
const drawer_1 = require("./ui/drawer");
|
|
23
26
|
const debug = (0, debug_1.debugB3React)("B3DynamicModal");
|
|
24
27
|
function B3DynamicModal() {
|
|
25
|
-
const
|
|
28
|
+
const isOpen = (0, react_2.useModalStore)(state => state.isOpen);
|
|
29
|
+
const setB3ModalOpen = (0, react_2.useModalStore)(state => state.setB3ModalOpen);
|
|
30
|
+
const contentType = (0, react_2.useModalStore)(state => state.contentType);
|
|
31
|
+
const navigateBack = (0, react_2.useModalStore)(state => state.navigateBack);
|
|
26
32
|
const { theme } = (0, useB3_1.useB3)();
|
|
27
33
|
const isMobile = (0, react_2.useIsMobile)();
|
|
28
34
|
const prevIsOpenRef = (0, react_3.useRef)(isOpen);
|
|
@@ -53,7 +59,10 @@ function B3DynamicModal() {
|
|
|
53
59
|
"anySpendSignatureMint",
|
|
54
60
|
"anySpendBondKit",
|
|
55
61
|
"linkAccount",
|
|
62
|
+
"linkNewAccount",
|
|
56
63
|
"avatarEditor",
|
|
64
|
+
"deposit",
|
|
65
|
+
"send",
|
|
57
66
|
"profileEditor",
|
|
58
67
|
];
|
|
59
68
|
const freestyleTypes = [
|
|
@@ -70,7 +79,7 @@ function B3DynamicModal() {
|
|
|
70
79
|
];
|
|
71
80
|
// Check if current content type is in freestyle types
|
|
72
81
|
const isFreestyleType = freestyleTypes.includes(contentType?.type);
|
|
73
|
-
const hideCloseButton =
|
|
82
|
+
const hideCloseButton = true;
|
|
74
83
|
// Build content class using cn utility
|
|
75
84
|
// eslint-disable-next-line tailwindcss/no-custom-classname
|
|
76
85
|
const contentClass = (0, cn_1.cn)("b3-modal", theme === "dark" && "dark", fullWidthTypes.includes(contentType?.type) && "w-full", isFreestyleType && "b3-modal-freestyle", contentType?.type === "signInWithB3" && "p-0", contentType?.type === "anySpend" && "md:px-6");
|
|
@@ -96,7 +105,7 @@ function B3DynamicModal() {
|
|
|
96
105
|
case "anySpendFundTournament":
|
|
97
106
|
return (0, jsx_runtime_1.jsx)(react_1.AnySpendTournament, { ...contentType, mode: "modal", action: "fund" });
|
|
98
107
|
case "anySpendOrderHistory":
|
|
99
|
-
return (0, jsx_runtime_1.jsx)(react_1.OrderHistory, {
|
|
108
|
+
return (0, jsx_runtime_1.jsx)(react_1.OrderHistory, { ...contentType, mode: "modal" });
|
|
100
109
|
case "anySpendStakeB3":
|
|
101
110
|
return (0, jsx_runtime_1.jsx)(react_1.AnySpendStakeB3, { ...contentType, mode: "modal" });
|
|
102
111
|
case "anySpendStakeB3ExactIn":
|
|
@@ -113,10 +122,16 @@ function B3DynamicModal() {
|
|
|
113
122
|
return (0, jsx_runtime_1.jsx)(react_1.AnySpendBondKit, { ...contentType });
|
|
114
123
|
case "linkAccount":
|
|
115
124
|
return (0, jsx_runtime_1.jsx)(LinkAccount_1.LinkAccount, { ...contentType });
|
|
125
|
+
case "linkNewAccount":
|
|
126
|
+
return (0, jsx_runtime_1.jsx)(LinkNewAccount_1.LinkNewAccount, { ...contentType });
|
|
116
127
|
case "anySpendDepositHype":
|
|
117
128
|
return (0, jsx_runtime_1.jsx)(AnyspendDepositHype_1.AnySpendDepositHype, { ...contentType, mode: "modal" });
|
|
118
129
|
case "avatarEditor":
|
|
119
130
|
return (0, jsx_runtime_1.jsx)(AvatarEditor_1.AvatarEditor, { onSetAvatar: contentType.onSuccess });
|
|
131
|
+
case "deposit":
|
|
132
|
+
return (0, jsx_runtime_1.jsx)(Deposit_1.Deposit, {});
|
|
133
|
+
case "send":
|
|
134
|
+
return (0, jsx_runtime_1.jsx)(Send_1.Send, { ...contentType });
|
|
120
135
|
case "profileEditor":
|
|
121
136
|
return (0, jsx_runtime_1.jsx)(ProfileEditor_1.ProfileEditor, { onSuccess: contentType.onSuccess });
|
|
122
137
|
// Add other modal types here
|
|
@@ -128,9 +143,13 @@ function B3DynamicModal() {
|
|
|
128
143
|
const ModalContent = isMobile ? drawer_1.DrawerContent : dialog_1.DialogContent;
|
|
129
144
|
const ModalTitle = isMobile ? drawer_1.DrawerTitle : dialog_1.DialogTitle;
|
|
130
145
|
const ModalDescription = isMobile ? drawer_1.DrawerDescription : dialog_1.DialogDescription;
|
|
131
|
-
return ((0, jsx_runtime_1.jsxs)(ModalComponent, { open: isOpen, onOpenChange: setB3ModalOpen, children: [(0, jsx_runtime_1.jsxs)(ModalContent, { className: (0, cn_1.cn)(contentClass, "rounded-2xl bg-white shadow-xl dark:bg-gray-900", "border border-gray-200 dark:border-gray-800",
|
|
146
|
+
return ((0, jsx_runtime_1.jsxs)(ModalComponent, { open: isOpen, onOpenChange: setB3ModalOpen, children: [(0, jsx_runtime_1.jsxs)(ModalContent, { className: (0, cn_1.cn)(contentClass, "rounded-2xl bg-white shadow-xl dark:bg-gray-900", "border border-gray-200 dark:border-gray-800", (contentType?.type === "manageAccount" ||
|
|
147
|
+
contentType?.type === "deposit" ||
|
|
148
|
+
contentType?.type === "send" ||
|
|
149
|
+
contentType?.type === "avatarEditor") &&
|
|
150
|
+
"p-0", "mx-auto w-full max-w-md sm:max-w-lg", // TODO CHECK THIS
|
|
132
151
|
// Remove default width classes for avatar editor and profile editor
|
|
133
152
|
contentType?.type === "avatarEditor" || contentType?.type === "profileEditor"
|
|
134
153
|
? "!w-[90vw] !max-w-none" // Use !important to override default styles
|
|
135
|
-
: "mx-auto w-full max-w-md sm:max-w-lg"), hideCloseButton: hideCloseButton, children: [(0, jsx_runtime_1.jsx)(ModalTitle, { className: "sr-only hidden", children: contentType?.type || "Modal" }), (0, jsx_runtime_1.jsx)(ModalDescription, { className: "sr-only hidden", children: contentType?.type || "Modal Body" }), (0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("no-scrollbar max-h-[90dvh] overflow-auto sm:max-h-[80dvh]"), children: [
|
|
154
|
+
: "mx-auto w-full max-w-md sm:max-w-lg"), hideCloseButton: hideCloseButton, children: [(0, jsx_runtime_1.jsx)(ModalTitle, { className: "sr-only hidden", children: contentType?.type || "Modal" }), (0, jsx_runtime_1.jsx)(ModalDescription, { className: "sr-only hidden", children: contentType?.type || "Modal Body" }), (0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("no-scrollbar max-h-[90dvh] overflow-auto sm:max-h-[80dvh]"), children: [(!hideCloseButton || contentType?.showBackButton) && ((0, jsx_runtime_1.jsxs)("button", { onClick: navigateBack, className: "flex items-center gap-2 px-6 py-4 text-gray-600 transition-colors hover:text-gray-900 dark:text-gray-400 dark:hover:text-white", children: [(0, jsx_runtime_1.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, jsx_runtime_1.jsx)("path", { d: "M15.8337 10H4.16699", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), (0, jsx_runtime_1.jsx)("path", { d: "M10.0003 15.8334L4.16699 10L10.0003 4.16669", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] }), (0, jsx_runtime_1.jsx)("span", { className: "font-inter text-sm font-semibold", children: "Back" })] })), renderContent()] })] }), (contentType?.type === "avatarEditor" || contentType?.type === "profileEditor") && ((0, jsx_runtime_1.jsx)("button", { onClick: () => setB3ModalOpen(false), className: "fixed right-5 top-5 z-[100] cursor-pointer text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white", children: (0, jsx_runtime_1.jsx)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, jsx_runtime_1.jsx)("path", { d: "M18 6L6 18M6 6L18 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }))] }));
|
|
136
155
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Deposit(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Deposit = Deposit;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const constants_1 = require("../../../../anyspend/constants");
|
|
9
|
+
const chain_1 = require("../../../../anyspend/utils/chain");
|
|
10
|
+
const react_1 = require("../../../../global-account/react");
|
|
11
|
+
const relay_kit_ui_1 = require("@relayprotocol/relay-kit-ui");
|
|
12
|
+
const lucide_react_1 = require("lucide-react");
|
|
13
|
+
const qrcode_react_1 = require("qrcode.react");
|
|
14
|
+
const react_2 = require("react");
|
|
15
|
+
const sonner_1 = require("sonner");
|
|
16
|
+
const chains_1 = require("thirdweb/chains");
|
|
17
|
+
const ModalHeader_1 = __importDefault(require("../ModalHeader/ModalHeader"));
|
|
18
|
+
const button_1 = require("../ui/button");
|
|
19
|
+
const dropdown_menu_1 = require("../ui/dropdown-menu");
|
|
20
|
+
// Coinbase logo SVG
|
|
21
|
+
const CoinbaseLogo = () => ((0, jsx_runtime_1.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, jsx_runtime_1.jsx)("path", { d: "M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16Z", fill: "#0052FF" }), (0, jsx_runtime_1.jsx)("path", { d: "M8.00065 11.3337C6.16065 11.3337 4.66732 9.84033 4.66732 8.00033C4.66732 6.16033 6.16065 4.66699 8.00065 4.66699C9.47399 4.66699 10.734 5.64699 11.1607 7.00033H13.2273C12.774 4.54699 10.6273 2.66699 8.00065 2.66699C5.05399 2.66699 2.66732 5.05366 2.66732 8.00033C2.66732 10.947 5.05399 13.3337 8.00065 13.3337C10.6273 13.3337 12.774 11.4537 13.2273 9.00033H11.1607C10.734 10.3537 9.47399 11.3337 8.00065 11.3337Z", fill: "white" })] }));
|
|
22
|
+
function Deposit() {
|
|
23
|
+
const { address } = (0, react_1.useAccountWallet)();
|
|
24
|
+
const navigateBack = (0, react_1.useModalStore)(state => state.navigateBack);
|
|
25
|
+
const setB3ModalOpen = (0, react_1.useModalStore)(state => state.setB3ModalOpen);
|
|
26
|
+
const history = (0, react_1.useModalStore)(state => state.history);
|
|
27
|
+
const [selectedChainId, setSelectedChainId] = (0, react_2.useState)(chains_1.base.id);
|
|
28
|
+
const [selectedToken, setSelectedToken] = (0, react_2.useState)({
|
|
29
|
+
address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
30
|
+
chainId: chains_1.base.id,
|
|
31
|
+
decimals: 6,
|
|
32
|
+
symbol: "USDC",
|
|
33
|
+
name: "USD Coin",
|
|
34
|
+
metadata: {
|
|
35
|
+
logoURI: "https://assets.relay.link/icons/1/light/usdc.png",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
// Get the selected chain object
|
|
39
|
+
const selectedChain = (0, react_2.useMemo)(() => chain_1.ALL_CHAINS[selectedChainId], [selectedChainId]);
|
|
40
|
+
// Get all supported chains for the dropdown
|
|
41
|
+
const supportedChains = (0, react_2.useMemo)(() => Object.values(chain_1.ALL_CHAINS), []);
|
|
42
|
+
// The deposit address is the user's active wallet address
|
|
43
|
+
const depositAddress = address || "0x0000000000000000000000000000000000000000";
|
|
44
|
+
const handleTokenSelect = (token) => {
|
|
45
|
+
setSelectedChainId(token.chainId);
|
|
46
|
+
setSelectedToken({
|
|
47
|
+
address: token.address,
|
|
48
|
+
chainId: token.chainId,
|
|
49
|
+
decimals: token.decimals,
|
|
50
|
+
metadata: { logoURI: token.logoURI },
|
|
51
|
+
name: token.name,
|
|
52
|
+
symbol: token.symbol,
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const handleCopyAddress = async () => {
|
|
56
|
+
try {
|
|
57
|
+
await navigator.clipboard.writeText(depositAddress);
|
|
58
|
+
sonner_1.toast.success("Address copied to clipboard");
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
sonner_1.toast.error("Failed to copy address");
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "flex w-full flex-col", children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.default, { title: "Deposit", showCloseButton: false }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col pb-5 pt-5", children: [(0, jsx_runtime_1.jsx)("div", { className: "mb-4 px-5", children: (0, jsx_runtime_1.jsx)("p", { className: "font-neue-montreal-medium text-base leading-snug text-[#3f3f46]", children: "Send any accepted token and we'll convert it to B3 on Base for you to use." }) }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-3 px-5", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "mb-1.5 block text-sm font-medium text-[#3f3f46]", children: "Chain" }), (0, jsx_runtime_1.jsxs)(dropdown_menu_1.DropdownMenu, { children: [(0, jsx_runtime_1.jsx)(dropdown_menu_1.DropdownMenuTrigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)("button", { className: "flex h-10 w-full items-center justify-between rounded-lg border border-[#d1d1d6] bg-white px-2.5 py-2 transition-colors hover:bg-[#fafafa]", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [selectedChain?.logoUrl && ((0, jsx_runtime_1.jsx)("img", { src: selectedChain.logoUrl, alt: selectedChain.name, className: "h-6 w-6 rounded-full" })), (0, jsx_runtime_1.jsx)("span", { className: "text-base text-[#18181b]", children: selectedChain?.name || "Select Chain" })] }), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { className: "h-4 w-4 text-[#51525c]" })] }) }), (0, jsx_runtime_1.jsx)(dropdown_menu_1.DropdownMenuContent, { className: "max-h-[300px] w-full overflow-y-auto", children: supportedChains.map(chain => ((0, jsx_runtime_1.jsx)(dropdown_menu_1.DropdownMenuItem, { onClick: () => setSelectedChainId(chain.id), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [chain.logoUrl && (0, jsx_runtime_1.jsx)("img", { src: chain.logoUrl, alt: chain.name, className: "h-6 w-6 rounded-full" }), (0, jsx_runtime_1.jsx)("span", { className: "text-[#18181b]", children: chain.name })] }) }, chain.id))) })] })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "mb-1.5 block text-sm font-medium text-[#3f3f46]", children: "Accepted tokens" }), (0, jsx_runtime_1.jsx)(relay_kit_ui_1.TokenSelector, { address: address, chainIdsFilter: [selectedChainId], context: "from", fromChainWalletVMSupported: true, isValidAddress: true, lockedChainIds: [selectedChainId], multiWalletSupportEnabled: true, onAnalyticEvent: undefined, popularChainIds: [1, 8453, constants_1.RELAY_SOLANA_MAINNET_CHAIN_ID], setToken: handleTokenSelect, supportedWalletVMs: ["evm", "svm"], token: undefined, trigger: (0, jsx_runtime_1.jsxs)("button", { className: "flex h-10 w-full items-center justify-between rounded-lg border border-[#d1d1d6] bg-white px-2.5 py-2 transition-colors hover:bg-[#fafafa]", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [selectedToken?.metadata?.logoURI && ((0, jsx_runtime_1.jsx)("img", { src: selectedToken.metadata.logoURI, alt: selectedToken.symbol, className: "h-6 w-6 rounded-full" })), (0, jsx_runtime_1.jsx)("span", { className: "text-base text-[#18181b]", children: selectedToken.symbol })] }), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { className: "h-4 w-4 text-[#51525c]" })] }) })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mx-5 mt-4 flex items-start rounded-xl border border-[#e4e4e7] bg-[#fafafa]", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-1 flex-col items-center gap-2 px-5 pb-3 pt-5", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex w-full items-center justify-center", children: (0, jsx_runtime_1.jsx)("div", { className: "w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "flex aspect-[144/146] w-full flex-col items-center justify-center overflow-hidden", children: (0, jsx_runtime_1.jsx)(qrcode_react_1.QRCodeSVG, { value: depositAddress, size: 144, level: "M" }) }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-xs font-semibold leading-[18px] text-[#0b57c2]", children: "SCAN WITH" }), (0, jsx_runtime_1.jsx)(CoinbaseLogo, {})] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "relative flex flex-1 flex-col gap-2 self-stretch border-l border-[#e4e4e7] p-6", children: [(0, jsx_runtime_1.jsx)("label", { className: "text-sm font-medium leading-5 text-[#3f3f46]", children: "Deposit address:" }), (0, jsx_runtime_1.jsxs)("div", { className: "relative flex w-full flex-wrap items-center gap-2", children: [(0, jsx_runtime_1.jsx)("p", { className: "h-[74px] flex-1 overflow-hidden text-ellipsis whitespace-pre-wrap break-all pr-6 text-base font-semibold leading-6 text-[#18181b]", children: depositAddress }), (0, jsx_runtime_1.jsx)("button", { onClick: handleCopyAddress, className: "absolute bottom-0 right-0 h-4 w-4 transition-opacity hover:opacity-70", "aria-label": "Copy address", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { className: "h-full w-full text-[#51525c]" }) })] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "mx-5 mt-4", children: (0, jsx_runtime_1.jsxs)("p", { className: "font-neue-montreal-italic text-center text-sm leading-[1.3] text-[#3f3f46]", children: ["Do not send any tokens other than the ones specified.", (0, jsx_runtime_1.jsx)("br", {}), "Tokens not accepted will not be converted."] }) }), (0, jsx_runtime_1.jsx)("div", { className: "mt-4 px-5", children: (0, jsx_runtime_1.jsx)(button_1.Button, { onClick: handleCopyAddress, className: "h-12 w-full rounded-xl bg-[#0c68e9] text-base font-semibold text-white shadow-[inset_0px_0px_0px_1px_rgba(10,13,18,0.18),inset_0px_-2px_0px_0px_rgba(10,13,18,0.05)] hover:bg-[#0b5fd4]", children: "Copy deposit address" }) })] })] }));
|
|
65
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Chain } from "thirdweb";
|
|
2
|
+
export declare const LinkAccount: ({ partnerId, onLogout, chain, }: {
|
|
3
|
+
partnerId: string;
|
|
4
|
+
onLogout?: () => void;
|
|
5
|
+
chain: Chain;
|
|
6
|
+
}) => import("react/jsx-runtime").JSX.Element;
|