@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
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useActiveWallet } from "thirdweb/react";
|
|
2
|
+
import { AccountAssets } from "..";
|
|
3
|
+
import { useAccountAssets } from "../../hooks";
|
|
4
|
+
|
|
5
|
+
const NFTContent = () => {
|
|
6
|
+
// Get active wallet state
|
|
7
|
+
const activeWallet = useActiveWallet();
|
|
8
|
+
const activeAccount = activeWallet?.getAccount();
|
|
9
|
+
const activeAddress = activeAccount?.address;
|
|
10
|
+
|
|
11
|
+
const { data: nfts, isLoading } = useAccountAssets(activeAddress);
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<div style={{ minHeight: "100px" }}>
|
|
15
|
+
{nfts?.nftResponse ? (
|
|
16
|
+
<AccountAssets nfts={nfts.nftResponse} isLoading={isLoading} />
|
|
17
|
+
) : (
|
|
18
|
+
<div className="py-12 text-center text-gray-500">No NFTs found</div>
|
|
19
|
+
)}
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default NFTContent;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { useAccountWallet, useB3, useModalStore, useProfile, useSimBalance } from "@b3dotfun/sdk/global-account/react";
|
|
2
|
+
import { formatUsername } from "@b3dotfun/sdk/shared/utils";
|
|
3
|
+
import { getIpfsUrl } from "@b3dotfun/sdk/shared/utils/ipfs";
|
|
4
|
+
import { formatDisplayNumber } from "@b3dotfun/sdk/shared/utils/number";
|
|
5
|
+
import { Pencil } from "lucide-react";
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
import { useActiveAccount } from "thirdweb/react";
|
|
8
|
+
import { useFirstEOA } from "../../hooks/useFirstEOA";
|
|
9
|
+
|
|
10
|
+
const ProfileSection = () => {
|
|
11
|
+
const account = useActiveAccount();
|
|
12
|
+
const { address: eoaAddress } = useFirstEOA();
|
|
13
|
+
const { address: smartWalletAddress } = useAccountWallet();
|
|
14
|
+
const { data: profile } = useProfile({
|
|
15
|
+
address: eoaAddress || account?.address,
|
|
16
|
+
fresh: true,
|
|
17
|
+
});
|
|
18
|
+
const { user } = useB3();
|
|
19
|
+
const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
|
|
20
|
+
const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
|
|
21
|
+
const navigateBack = useModalStore(state => state.navigateBack);
|
|
22
|
+
|
|
23
|
+
const { data: simBalance } = useSimBalance(smartWalletAddress);
|
|
24
|
+
|
|
25
|
+
// Calculate total balance in USD
|
|
26
|
+
const totalBalanceUsd = useMemo(() => {
|
|
27
|
+
if (!simBalance?.balances) return 0;
|
|
28
|
+
return simBalance.balances.reduce((sum, token) => sum + (token.value_usd || 0), 0);
|
|
29
|
+
}, [simBalance]);
|
|
30
|
+
|
|
31
|
+
const avatarUrl = user?.avatar ? getIpfsUrl(user?.avatar) : profile?.avatar;
|
|
32
|
+
|
|
33
|
+
const handleEditAvatar = () => {
|
|
34
|
+
setB3ModalOpen(true);
|
|
35
|
+
setB3ModalContentType({
|
|
36
|
+
type: "avatarEditor",
|
|
37
|
+
onSuccess: () => {
|
|
38
|
+
// navigate back on success
|
|
39
|
+
navigateBack();
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div className="flex items-center justify-between px-5 py-6">
|
|
46
|
+
<div className="global-account-profile flex items-center gap-4">
|
|
47
|
+
<div className="global-account-profile-avatar relative">
|
|
48
|
+
{avatarUrl ? (
|
|
49
|
+
<img src={avatarUrl} alt="Profile" className="size-14 rounded-full" />
|
|
50
|
+
) : (
|
|
51
|
+
<div className="bg-b3-primary-wash size-14 rounded-full" />
|
|
52
|
+
)}
|
|
53
|
+
<button
|
|
54
|
+
onClick={handleEditAvatar}
|
|
55
|
+
className="border-b3-background hover:bg-b3-grey/80 absolute -bottom-1 -right-1 flex size-6 items-center justify-center rounded-full border-4 bg-[#a0a0ab] transition-colors"
|
|
56
|
+
>
|
|
57
|
+
<Pencil size={10} className="text-b3-background" />
|
|
58
|
+
</button>
|
|
59
|
+
</div>
|
|
60
|
+
<div className="global-account-profile-info flex flex-col gap-1">
|
|
61
|
+
<h2 className="text-b3-grey font-neue-montreal-semibold flex h-[38px] items-center gap-1 text-xl">
|
|
62
|
+
<div className="text-b3-foreground-muted"> $</div>
|
|
63
|
+
<div className="text-[30px]">{formatDisplayNumber(totalBalanceUsd, { fractionDigits: 2 })}</div>
|
|
64
|
+
</h2>
|
|
65
|
+
<div className="font-neue-montreal-semibold text-base leading-none text-[#0B57C2]">
|
|
66
|
+
{profile?.displayName || formatUsername(profile?.name || "")}
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export default ProfileSection;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { useModalStore } from "@b3dotfun/sdk/global-account/react";
|
|
2
|
+
import { Chain } from "thirdweb";
|
|
3
|
+
import LinkIcon from "../icons/LinkIcon";
|
|
4
|
+
import ModalHeader from "../ModalHeader/ModalHeader";
|
|
5
|
+
import SettingsMenuItem from "./SettingsMenuItem";
|
|
6
|
+
import SettingsProfileCard from "./SettingsProfileCard";
|
|
7
|
+
|
|
8
|
+
const SettingsContent = ({
|
|
9
|
+
partnerId,
|
|
10
|
+
onLogout,
|
|
11
|
+
chain,
|
|
12
|
+
}: {
|
|
13
|
+
partnerId: string;
|
|
14
|
+
onLogout?: () => void;
|
|
15
|
+
chain: Chain;
|
|
16
|
+
}) => {
|
|
17
|
+
const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
|
|
18
|
+
const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
|
|
19
|
+
|
|
20
|
+
const handleNavigate = (type: "home" | "swap" | "linkAccount" | "avatarEditor") => {
|
|
21
|
+
if (type === "home") {
|
|
22
|
+
setB3ModalContentType({
|
|
23
|
+
type: "manageAccount",
|
|
24
|
+
chain,
|
|
25
|
+
partnerId,
|
|
26
|
+
onLogout,
|
|
27
|
+
activeTab: "home",
|
|
28
|
+
});
|
|
29
|
+
} else if (type === "swap") {
|
|
30
|
+
setB3ModalContentType({
|
|
31
|
+
type: "manageAccount",
|
|
32
|
+
chain,
|
|
33
|
+
partnerId,
|
|
34
|
+
onLogout,
|
|
35
|
+
activeTab: "tokens",
|
|
36
|
+
});
|
|
37
|
+
} else if (type === "linkAccount") {
|
|
38
|
+
setB3ModalContentType({
|
|
39
|
+
type: "linkAccount",
|
|
40
|
+
chain,
|
|
41
|
+
partnerId,
|
|
42
|
+
});
|
|
43
|
+
} else {
|
|
44
|
+
setB3ModalContentType({
|
|
45
|
+
type: "avatarEditor",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
setB3ModalOpen(true);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<div className="flex h-[470px] flex-col">
|
|
53
|
+
<ModalHeader title="Settings" />
|
|
54
|
+
|
|
55
|
+
{/* Profile Section */}
|
|
56
|
+
<div className="p-5">
|
|
57
|
+
<div className="flex items-center rounded-xl border border-[#e4e4e7] bg-[#f4f4f5] p-4">
|
|
58
|
+
<SettingsProfileCard />
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
{/* Menu Items */}
|
|
63
|
+
<div className="space-y-3 px-5">
|
|
64
|
+
<SettingsMenuItem
|
|
65
|
+
icon={<LinkIcon className="text-b3-grey-500" />}
|
|
66
|
+
title="Linked Accounts"
|
|
67
|
+
subtitle="3 connected accounts"
|
|
68
|
+
onClick={() => handleNavigate("linkAccount")}
|
|
69
|
+
/>
|
|
70
|
+
{/* <SettingsMenuItem
|
|
71
|
+
icon={<BellIcon className="text-b3-grey-500" />}
|
|
72
|
+
title="Notifications"
|
|
73
|
+
subtitle="Manage your notifications"
|
|
74
|
+
onClick={() => handleNavigate("avatarEditor")}
|
|
75
|
+
/>
|
|
76
|
+
<SettingsMenuItem
|
|
77
|
+
icon={<LockIcon className="text-b3-grey-500" />}
|
|
78
|
+
title="Permissions"
|
|
79
|
+
subtitle="Security & apps"
|
|
80
|
+
onClick={() => handleNavigate("avatarEditor")}
|
|
81
|
+
/> */}
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export default SettingsContent;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ChevronRight } from "lucide-react";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
|
|
4
|
+
interface SettingsMenuItemProps {
|
|
5
|
+
icon: ReactNode;
|
|
6
|
+
title: string;
|
|
7
|
+
subtitle: string;
|
|
8
|
+
onClick?: () => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const SettingsMenuItem = ({ icon, title, subtitle, onClick }: SettingsMenuItemProps) => {
|
|
12
|
+
return (
|
|
13
|
+
<button
|
|
14
|
+
onClick={onClick}
|
|
15
|
+
className="flex w-full items-center gap-2 rounded-xl px-3 py-2 transition-colors hover:bg-[#f4f4f5]"
|
|
16
|
+
>
|
|
17
|
+
<div className="flex size-10 items-center justify-center rounded-full bg-[#f4f4f5]">{icon}</div>
|
|
18
|
+
<div className="flex flex-1 flex-col items-start gap-1 text-left">
|
|
19
|
+
<span className="font-neue-montreal-semibold text-[14px] leading-none tracking-[-0.28px] text-[#3f3f46]">
|
|
20
|
+
{title}
|
|
21
|
+
</span>
|
|
22
|
+
<span className="font-neue-montreal-medium text-[14px] leading-none tracking-[-0.28px] text-[#70707b]">
|
|
23
|
+
{subtitle}
|
|
24
|
+
</span>
|
|
25
|
+
</div>
|
|
26
|
+
<ChevronRight size={20} className="text-[#51525c]" />
|
|
27
|
+
</button>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default SettingsMenuItem;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { useB3, useModalStore, useProfile } from "@b3dotfun/sdk/global-account/react";
|
|
2
|
+
import { formatUsername } from "@b3dotfun/sdk/shared/utils";
|
|
3
|
+
import { getIpfsUrl } from "@b3dotfun/sdk/shared/utils/ipfs";
|
|
4
|
+
import { Pencil } from "lucide-react";
|
|
5
|
+
import { useActiveAccount } from "thirdweb/react";
|
|
6
|
+
import { useFirstEOA } from "../../hooks/useFirstEOA";
|
|
7
|
+
|
|
8
|
+
const SettingsProfileCard = () => {
|
|
9
|
+
const account = useActiveAccount();
|
|
10
|
+
const { address: eoaAddress } = useFirstEOA();
|
|
11
|
+
const { data: profile } = useProfile({
|
|
12
|
+
address: eoaAddress || account?.address,
|
|
13
|
+
fresh: true,
|
|
14
|
+
});
|
|
15
|
+
const { user } = useB3();
|
|
16
|
+
const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
|
|
17
|
+
const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
|
|
18
|
+
const navigateBack = useModalStore(state => state.navigateBack);
|
|
19
|
+
|
|
20
|
+
const avatarUrl = user?.avatar ? getIpfsUrl(user?.avatar) : profile?.avatar;
|
|
21
|
+
|
|
22
|
+
const handleEditAvatar = () => {
|
|
23
|
+
setB3ModalOpen(true);
|
|
24
|
+
setB3ModalContentType({
|
|
25
|
+
type: "avatarEditor",
|
|
26
|
+
onSuccess: () => {
|
|
27
|
+
// navigate back on success
|
|
28
|
+
navigateBack();
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const handleEditUsername = () => {
|
|
34
|
+
// TODO: Implement edit username functionality
|
|
35
|
+
console.log("Edit username clicked");
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<div className="flex w-full items-center gap-3">
|
|
40
|
+
{/* Avatar with edit badge */}
|
|
41
|
+
<div className="relative shrink-0">
|
|
42
|
+
{avatarUrl ? (
|
|
43
|
+
<img src={avatarUrl} alt="Profile" className="border-black/8 size-14 rounded-full border object-cover" />
|
|
44
|
+
) : (
|
|
45
|
+
<div className="bg-b3-primary-wash border-black/8 size-14 rounded-full border" />
|
|
46
|
+
)}
|
|
47
|
+
<button
|
|
48
|
+
onClick={handleEditAvatar}
|
|
49
|
+
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"
|
|
50
|
+
aria-label="Edit avatar"
|
|
51
|
+
>
|
|
52
|
+
<Pencil size={10} className="text-white" strokeWidth={2.5} />
|
|
53
|
+
</button>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
{/* Username and edit link */}
|
|
57
|
+
<div className="flex shrink-0 flex-col gap-1">
|
|
58
|
+
<div className="flex items-center gap-1">
|
|
59
|
+
<p className="font-neue-montreal-semibold text-lg leading-none text-[#0B57C2]">
|
|
60
|
+
{profile?.displayName || formatUsername(profile?.name || "")}
|
|
61
|
+
</p>
|
|
62
|
+
</div>
|
|
63
|
+
<button
|
|
64
|
+
onClick={handleEditUsername}
|
|
65
|
+
className="flex items-center justify-center gap-1 text-left transition-opacity hover:opacity-80"
|
|
66
|
+
>
|
|
67
|
+
<p className="font-inter text-sm font-semibold leading-5 text-[#51525C]">Edit Username</p>
|
|
68
|
+
</button>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export default SettingsProfileCard;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useB3BalanceFromAddresses, useNativeBalance } from "@b3dotfun/sdk/global-account/react";
|
|
2
|
+
import { useActiveWallet } from "thirdweb/react";
|
|
3
|
+
import { B3TokenIcon, EthereumTokenIcon } from "../TokenIcon";
|
|
4
|
+
import { TokenBalanceRow } from "./TokenBalanceRow";
|
|
5
|
+
|
|
6
|
+
const TokenContent = () => {
|
|
7
|
+
// Get active wallet state
|
|
8
|
+
const activeWallet = useActiveWallet();
|
|
9
|
+
//const globalAccountWallet = useGlobalWalletState(state => state.globalAccountWallet);
|
|
10
|
+
const activeAccount = activeWallet?.getAccount();
|
|
11
|
+
const activeAddress = activeAccount?.address;
|
|
12
|
+
|
|
13
|
+
// Balance data fetching - use active wallet address
|
|
14
|
+
const { data: activeNativeBalance } = useNativeBalance(activeAddress);
|
|
15
|
+
const { data: activeB3Balance } = useB3BalanceFromAddresses(activeAddress);
|
|
16
|
+
|
|
17
|
+
if (!activeAddress) {
|
|
18
|
+
return <div className="col-span-3 py-12 text-center text-gray-500">No tokens found</div>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<div className="flex flex-col gap-3">
|
|
23
|
+
<TokenBalanceRow
|
|
24
|
+
icon={<B3TokenIcon className="size-10" />}
|
|
25
|
+
name="B3"
|
|
26
|
+
balance={`${activeB3Balance?.formattedTotal || "0.00"} B3`}
|
|
27
|
+
usdValue={activeB3Balance?.balanceUsdFormatted || "0.00"}
|
|
28
|
+
priceChange={activeB3Balance?.priceChange24h}
|
|
29
|
+
/>
|
|
30
|
+
<TokenBalanceRow
|
|
31
|
+
icon={<EthereumTokenIcon className="size-10" />}
|
|
32
|
+
name="Ethereum"
|
|
33
|
+
balance={`${activeNativeBalance?.formattedTotal || "0.00"} ETH`}
|
|
34
|
+
usdValue={activeNativeBalance?.formattedTotalUsd || "0.00"}
|
|
35
|
+
priceChange={activeNativeBalance?.priceChange24h}
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export default TokenContent;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { cn } from "@b3dotfun/sdk/shared/utils";
|
|
2
|
+
import { ChevronDown, X } from "lucide-react";
|
|
3
|
+
import { useModalStore } from "../../stores";
|
|
4
|
+
|
|
5
|
+
const ModalHeader = ({
|
|
6
|
+
handleBack,
|
|
7
|
+
handleClose,
|
|
8
|
+
title,
|
|
9
|
+
children,
|
|
10
|
+
showCloseButton = true,
|
|
11
|
+
className,
|
|
12
|
+
showBackWord = false,
|
|
13
|
+
}: {
|
|
14
|
+
handleBack?: () => void;
|
|
15
|
+
handleClose?: () => void;
|
|
16
|
+
title: string;
|
|
17
|
+
children?: React.ReactNode;
|
|
18
|
+
showCloseButton?: boolean;
|
|
19
|
+
className?: string;
|
|
20
|
+
showBackWord?: boolean;
|
|
21
|
+
}) => {
|
|
22
|
+
const navigateBack = useModalStore(state => state.navigateBack);
|
|
23
|
+
const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<div
|
|
27
|
+
className={cn("flex h-16 items-center justify-between border-b border-[#e4e4e7] bg-white px-5 py-3", className)}
|
|
28
|
+
>
|
|
29
|
+
<button
|
|
30
|
+
onClick={handleBack || navigateBack}
|
|
31
|
+
className="flex h-6 w-6 items-center justify-center transition-opacity hover:opacity-70"
|
|
32
|
+
>
|
|
33
|
+
<ChevronDown className="h-6 w-6 rotate-90 text-[#51525c]" />
|
|
34
|
+
{showBackWord && <span className="text-sm font-medium">Back</span>}
|
|
35
|
+
</button>
|
|
36
|
+
<p className="font-inter text-lg font-semibold leading-7 text-[#18181b]">{title}</p>
|
|
37
|
+
{showCloseButton && (
|
|
38
|
+
<button
|
|
39
|
+
onClick={handleClose || (() => setB3ModalOpen(false))}
|
|
40
|
+
className="flex h-6 w-6 items-center justify-center transition-opacity hover:opacity-70"
|
|
41
|
+
>
|
|
42
|
+
<X className="h-6 w-6 text-[#51525c]" />
|
|
43
|
+
</button>
|
|
44
|
+
)}
|
|
45
|
+
{children}
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default ModalHeader;
|