@b3dotfun/sdk 0.0.65-test.5 → 0.0.66-alpha.0
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 +69 -97
- package/dist/cjs/anyspend/react/components/AnySpendCustom.js +23 -10
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +45 -14
- package/dist/cjs/anyspend/react/components/AnySpendDepositUpside.d.ts +11 -0
- package/dist/cjs/anyspend/react/components/AnySpendDepositUpside.js +41 -0
- package/dist/cjs/anyspend/react/components/AnyspendDepositHype.d.ts +1 -1
- package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +14 -251
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +6 -0
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +3 -5
- 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 +3 -7
- package/dist/cjs/anyspend/react/components/common/OrderTokenAmount.js +2 -10
- 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/anyspend/react/components/index.d.ts +1 -0
- package/dist/cjs/anyspend/react/components/index.js +4 -1
- package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +5 -1
- package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +16 -10
- package/dist/cjs/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.d.ts +7 -5
- package/dist/cjs/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.js +13 -9
- package/dist/cjs/anyspend/react/hooks/useCryptoPaymentMethodState.d.ts +42 -0
- package/dist/cjs/anyspend/react/hooks/useCryptoPaymentMethodState.js +51 -0
- package/dist/cjs/anyspend/react/hooks/useSigMint.d.ts +1 -1
- package/dist/cjs/global-account/react/components/AccountAssets/AccountAssets.js +2 -38
- package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +0 -1
- package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.js +35 -251
- package/dist/cjs/global-account/react/components/B3DynamicModal.js +15 -23
- package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.d.ts +4 -6
- package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.js +279 -113
- package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.js +5 -6
- package/dist/cjs/global-account/react/components/ManageAccount/ManageAccount.js +193 -24
- package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +6 -0
- package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.js +141 -0
- package/dist/cjs/global-account/react/components/SignInWithB3/SignIn.js +1 -3
- package/dist/cjs/global-account/react/components/index.d.ts +4 -5
- package/dist/cjs/global-account/react/components/index.js +9 -14
- 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/components/ui/drawer.js +1 -1
- package/dist/cjs/global-account/react/hooks/index.d.ts +1 -1
- package/dist/cjs/global-account/react/hooks/index.js +1 -3
- package/dist/cjs/global-account/react/hooks/useAccountWallet.d.ts +0 -1
- package/dist/cjs/global-account/react/hooks/useAccountWallet.js +0 -18
- package/dist/cjs/global-account/react/hooks/useAuthentication.d.ts +2 -2
- package/dist/cjs/global-account/react/hooks/useB3BalanceFromAddresses.js +0 -1
- package/dist/cjs/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +6 -14
- package/dist/cjs/global-account/react/hooks/useUserQuery.d.ts +2 -2
- package/dist/cjs/global-account/react/stores/index.d.ts +0 -1
- package/dist/cjs/global-account/react/stores/index.js +1 -3
- package/dist/cjs/global-account/react/stores/useModalStore.d.ts +26 -31
- package/dist/cjs/global-account/react/utils/profileDisplay.d.ts +0 -2
- package/dist/cjs/global-account/react/utils/profileDisplay.js +2 -2
- package/dist/cjs/shared/constants/chains/supported.d.ts +3 -3
- package/dist/cjs/shared/utils/ipfs.js +3 -10
- package/dist/esm/anyspend/react/components/AnySpend.js +70 -98
- package/dist/esm/anyspend/react/components/AnySpendCustom.js +23 -10
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -1
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +45 -14
- package/dist/esm/anyspend/react/components/AnySpendDepositUpside.d.ts +11 -0
- package/dist/esm/anyspend/react/components/AnySpendDepositUpside.js +38 -0
- package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +1 -1
- package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +15 -249
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +6 -0
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +3 -5
- 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 +5 -6
- package/dist/esm/anyspend/react/components/common/OrderTokenAmount.js +2 -10
- 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/anyspend/react/components/index.d.ts +1 -0
- package/dist/esm/anyspend/react/components/index.js +1 -0
- package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +5 -1
- package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +16 -10
- package/dist/esm/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.d.ts +7 -5
- package/dist/esm/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.js +13 -9
- package/dist/esm/anyspend/react/hooks/useCryptoPaymentMethodState.d.ts +42 -0
- package/dist/esm/anyspend/react/hooks/useCryptoPaymentMethodState.js +48 -0
- package/dist/esm/anyspend/react/hooks/useSigMint.d.ts +1 -1
- package/dist/esm/global-account/react/components/AccountAssets/AccountAssets.js +2 -38
- package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +0 -1
- package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.js +38 -254
- package/dist/esm/global-account/react/components/B3DynamicModal.js +15 -23
- package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.d.ts +4 -6
- package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.js +280 -113
- package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.js +5 -6
- package/dist/esm/global-account/react/components/ManageAccount/ManageAccount.js +195 -26
- package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +6 -0
- package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.js +135 -0
- package/dist/esm/global-account/react/components/SignInWithB3/SignIn.js +2 -4
- package/dist/esm/global-account/react/components/index.d.ts +4 -5
- package/dist/esm/global-account/react/components/index.js +5 -9
- 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/components/ui/drawer.js +1 -1
- 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/useAccountWallet.d.ts +0 -1
- package/dist/esm/global-account/react/hooks/useAccountWallet.js +0 -17
- package/dist/esm/global-account/react/hooks/useAuthentication.d.ts +2 -2
- package/dist/esm/global-account/react/hooks/useB3BalanceFromAddresses.js +0 -1
- package/dist/esm/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +6 -14
- package/dist/esm/global-account/react/hooks/useUserQuery.d.ts +2 -2
- package/dist/esm/global-account/react/stores/index.d.ts +0 -1
- package/dist/esm/global-account/react/stores/index.js +0 -1
- package/dist/esm/global-account/react/stores/useModalStore.d.ts +26 -31
- package/dist/esm/global-account/react/utils/profileDisplay.d.ts +0 -2
- package/dist/esm/global-account/react/utils/profileDisplay.js +2 -2
- package/dist/esm/shared/constants/chains/supported.d.ts +3 -3
- package/dist/esm/shared/utils/ipfs.js +3 -10
- package/dist/styles/index.css +1 -1
- package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -1
- package/dist/types/anyspend/react/components/AnySpendDepositUpside.d.ts +11 -0
- package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +1 -1
- package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +6 -0
- package/dist/types/anyspend/react/components/common/OrderHistory.d.ts +1 -1
- package/dist/types/anyspend/react/components/index.d.ts +1 -0
- package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +5 -1
- package/dist/types/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.d.ts +7 -5
- package/dist/types/anyspend/react/hooks/useCryptoPaymentMethodState.d.ts +42 -0
- package/dist/types/anyspend/react/hooks/useSigMint.d.ts +1 -1
- package/dist/types/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +0 -1
- package/dist/types/global-account/react/components/LinkAccount/LinkAccount.d.ts +4 -6
- package/dist/types/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +6 -0
- package/dist/types/global-account/react/components/index.d.ts +4 -5
- package/dist/types/global-account/react/hooks/index.d.ts +1 -1
- package/dist/types/global-account/react/hooks/useAccountWallet.d.ts +0 -1
- 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/index.d.ts +0 -1
- package/dist/types/global-account/react/stores/useModalStore.d.ts +26 -31
- package/dist/types/global-account/react/utils/profileDisplay.d.ts +0 -2
- package/dist/types/shared/constants/chains/supported.d.ts +3 -3
- package/package.json +1 -2
- package/src/anyspend/react/components/AnySpend.tsx +218 -256
- package/src/anyspend/react/components/AnySpendCustom.tsx +31 -16
- package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +56 -13
- package/src/anyspend/react/components/AnySpendDepositUpside.tsx +81 -0
- package/src/anyspend/react/components/AnyspendDepositHype.tsx +36 -524
- package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +14 -7
- 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 +13 -8
- package/src/anyspend/react/components/common/OrderTokenAmount.tsx +2 -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/anyspend/react/components/index.ts +1 -0
- package/src/anyspend/react/hooks/useAnyspendFlow.ts +24 -12
- package/src/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.ts +20 -12
- package/src/anyspend/react/hooks/useCryptoPaymentMethodState.ts +71 -0
- package/src/global-account/react/components/AccountAssets/AccountAssets.tsx +25 -115
- package/src/global-account/react/components/AvatarEditor/AvatarEditor.tsx +128 -477
- package/src/global-account/react/components/B3DynamicModal.tsx +17 -28
- package/src/global-account/react/components/LinkAccount/LinkAccount.tsx +433 -332
- package/src/global-account/react/components/ManageAccount/BalanceContent.tsx +10 -6
- package/src/global-account/react/components/ManageAccount/ManageAccount.tsx +589 -73
- package/src/global-account/react/components/ProfileEditor/ProfileEditor.tsx +265 -0
- package/src/global-account/react/components/SignInWithB3/SignIn.tsx +7 -11
- package/src/global-account/react/components/index.ts +5 -11
- package/src/global-account/react/components/ui/Tabs.tsx +13 -5
- package/src/global-account/react/components/ui/dialog.tsx +14 -32
- package/src/global-account/react/components/ui/drawer.tsx +1 -1
- package/src/global-account/react/hooks/index.ts +0 -3
- package/src/global-account/react/hooks/useAccountWallet.tsx +0 -26
- package/src/global-account/react/hooks/useB3BalanceFromAddresses.ts +0 -1
- package/src/global-account/react/hooks/useUnifiedChainSwitchAndExecute.ts +6 -12
- package/src/global-account/react/stores/index.ts +0 -1
- package/src/global-account/react/stores/useModalStore.ts +28 -35
- package/src/global-account/react/utils/profileDisplay.ts +2 -4
- package/src/shared/utils/ipfs.ts +3 -10
- package/src/styles/index.css +9 -6
- package/dist/cjs/global-account/react/components/Deposit/Deposit.d.ts +0 -1
- package/dist/cjs/global-account/react/components/Deposit/Deposit.js +0 -65
- package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +0 -39
- package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +0 -37
- package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +0 -4
- package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.js +0 -331
- package/dist/cjs/global-account/react/components/ManageAccount/AppsContent.d.ts +0 -6
- package/dist/cjs/global-account/react/components/ManageAccount/AppsContent.js +0 -34
- package/dist/cjs/global-account/react/components/ManageAccount/BottomNavigation.d.ts +0 -2
- package/dist/cjs/global-account/react/components/ManageAccount/BottomNavigation.js +0 -23
- package/dist/cjs/global-account/react/components/ManageAccount/Header.d.ts +0 -3
- package/dist/cjs/global-account/react/components/ManageAccount/Header.js +0 -120
- package/dist/cjs/global-account/react/components/ManageAccount/HomeActions.d.ts +0 -5
- package/dist/cjs/global-account/react/components/ManageAccount/HomeActions.js +0 -43
- package/dist/cjs/global-account/react/components/ManageAccount/HomeContent.d.ts +0 -6
- package/dist/cjs/global-account/react/components/ManageAccount/HomeContent.js +0 -16
- package/dist/cjs/global-account/react/components/ManageAccount/NFTContent.d.ts +0 -2
- package/dist/cjs/global-account/react/components/ManageAccount/NFTContent.js +0 -15
- package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.d.ts +0 -2
- package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +0 -47
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.d.ts +0 -7
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +0 -50
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +0 -9
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsMenuItem.js +0 -8
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +0 -2
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +0 -106
- package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.d.ts +0 -2
- package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.js +0 -22
- package/dist/cjs/global-account/react/components/ModalHeader/ModalHeader.d.ts +0 -11
- package/dist/cjs/global-account/react/components/ModalHeader/ModalHeader.js +0 -12
- package/dist/cjs/global-account/react/components/Send/Send.d.ts +0 -5
- package/dist/cjs/global-account/react/components/Send/Send.js +0 -187
- package/dist/cjs/global-account/react/components/icons/BellIcon.d.ts +0 -3
- package/dist/cjs/global-account/react/components/icons/BellIcon.js +0 -5
- package/dist/cjs/global-account/react/components/icons/ChevronDownIcon.d.ts +0 -2
- package/dist/cjs/global-account/react/components/icons/ChevronDownIcon.js +0 -7
- package/dist/cjs/global-account/react/components/icons/CopyIcon.d.ts +0 -2
- package/dist/cjs/global-account/react/components/icons/CopyIcon.js +0 -7
- package/dist/cjs/global-account/react/components/icons/LinkIcon.d.ts +0 -3
- package/dist/cjs/global-account/react/components/icons/LinkIcon.js +0 -5
- package/dist/cjs/global-account/react/components/icons/LockIcon.d.ts +0 -3
- package/dist/cjs/global-account/react/components/icons/LockIcon.js +0 -5
- package/dist/cjs/global-account/react/components/icons/WalletIcon.d.ts +0 -2
- package/dist/cjs/global-account/react/components/icons/WalletIcon.js +0 -7
- package/dist/cjs/global-account/react/stores/useRecentAddressesStore.d.ts +0 -25
- package/dist/cjs/global-account/react/stores/useRecentAddressesStore.js +0 -36
- package/dist/esm/global-account/react/components/Deposit/Deposit.d.ts +0 -1
- package/dist/esm/global-account/react/components/Deposit/Deposit.js +0 -59
- package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +0 -39
- package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +0 -34
- package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +0 -4
- package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.js +0 -325
- package/dist/esm/global-account/react/components/ManageAccount/AppsContent.d.ts +0 -6
- package/dist/esm/global-account/react/components/ManageAccount/AppsContent.js +0 -32
- package/dist/esm/global-account/react/components/ManageAccount/BottomNavigation.d.ts +0 -2
- package/dist/esm/global-account/react/components/ManageAccount/BottomNavigation.js +0 -21
- package/dist/esm/global-account/react/components/ManageAccount/Header.d.ts +0 -3
- package/dist/esm/global-account/react/components/ManageAccount/Header.js +0 -81
- package/dist/esm/global-account/react/components/ManageAccount/HomeActions.d.ts +0 -5
- package/dist/esm/global-account/react/components/ManageAccount/HomeActions.js +0 -41
- package/dist/esm/global-account/react/components/ManageAccount/HomeContent.d.ts +0 -6
- package/dist/esm/global-account/react/components/ManageAccount/HomeContent.js +0 -10
- package/dist/esm/global-account/react/components/ManageAccount/NFTContent.d.ts +0 -2
- package/dist/esm/global-account/react/components/ManageAccount/NFTContent.js +0 -13
- package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.d.ts +0 -2
- package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +0 -45
- package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.d.ts +0 -7
- package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +0 -45
- package/dist/esm/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +0 -9
- package/dist/esm/global-account/react/components/ManageAccount/SettingsMenuItem.js +0 -6
- package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +0 -2
- package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +0 -101
- package/dist/esm/global-account/react/components/ManageAccount/TokenContent.d.ts +0 -2
- package/dist/esm/global-account/react/components/ManageAccount/TokenContent.js +0 -20
- package/dist/esm/global-account/react/components/ModalHeader/ModalHeader.d.ts +0 -11
- package/dist/esm/global-account/react/components/ModalHeader/ModalHeader.js +0 -10
- package/dist/esm/global-account/react/components/Send/Send.d.ts +0 -5
- package/dist/esm/global-account/react/components/Send/Send.js +0 -181
- package/dist/esm/global-account/react/components/icons/BellIcon.d.ts +0 -3
- package/dist/esm/global-account/react/components/icons/BellIcon.js +0 -3
- package/dist/esm/global-account/react/components/icons/ChevronDownIcon.d.ts +0 -2
- package/dist/esm/global-account/react/components/icons/ChevronDownIcon.js +0 -4
- package/dist/esm/global-account/react/components/icons/CopyIcon.d.ts +0 -2
- package/dist/esm/global-account/react/components/icons/CopyIcon.js +0 -4
- package/dist/esm/global-account/react/components/icons/LinkIcon.d.ts +0 -3
- package/dist/esm/global-account/react/components/icons/LinkIcon.js +0 -3
- package/dist/esm/global-account/react/components/icons/LockIcon.d.ts +0 -3
- package/dist/esm/global-account/react/components/icons/LockIcon.js +0 -3
- package/dist/esm/global-account/react/components/icons/WalletIcon.d.ts +0 -2
- package/dist/esm/global-account/react/components/icons/WalletIcon.js +0 -4
- package/dist/esm/global-account/react/stores/useRecentAddressesStore.d.ts +0 -25
- package/dist/esm/global-account/react/stores/useRecentAddressesStore.js +0 -33
- package/dist/types/global-account/react/components/Deposit/Deposit.d.ts +0 -1
- package/dist/types/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +0 -39
- package/dist/types/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +0 -4
- package/dist/types/global-account/react/components/ManageAccount/AppsContent.d.ts +0 -6
- package/dist/types/global-account/react/components/ManageAccount/BottomNavigation.d.ts +0 -2
- package/dist/types/global-account/react/components/ManageAccount/Header.d.ts +0 -3
- package/dist/types/global-account/react/components/ManageAccount/HomeActions.d.ts +0 -5
- package/dist/types/global-account/react/components/ManageAccount/HomeContent.d.ts +0 -6
- package/dist/types/global-account/react/components/ManageAccount/NFTContent.d.ts +0 -2
- package/dist/types/global-account/react/components/ManageAccount/ProfileSection.d.ts +0 -2
- package/dist/types/global-account/react/components/ManageAccount/SettingsContent.d.ts +0 -7
- package/dist/types/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +0 -9
- package/dist/types/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +0 -2
- package/dist/types/global-account/react/components/ManageAccount/TokenContent.d.ts +0 -2
- package/dist/types/global-account/react/components/ModalHeader/ModalHeader.d.ts +0 -11
- package/dist/types/global-account/react/components/Send/Send.d.ts +0 -5
- package/dist/types/global-account/react/components/icons/BellIcon.d.ts +0 -3
- package/dist/types/global-account/react/components/icons/ChevronDownIcon.d.ts +0 -2
- package/dist/types/global-account/react/components/icons/CopyIcon.d.ts +0 -2
- package/dist/types/global-account/react/components/icons/LinkIcon.d.ts +0 -3
- package/dist/types/global-account/react/components/icons/LockIcon.d.ts +0 -3
- package/dist/types/global-account/react/components/icons/WalletIcon.d.ts +0 -2
- package/dist/types/global-account/react/stores/useRecentAddressesStore.d.ts +0 -25
- package/src/global-account/react/components/Deposit/Deposit.tsx +0 -211
- package/src/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.tsx +0 -84
- package/src/global-account/react/components/LinkAccount/LinkNewAccount.tsx +0 -490
- package/src/global-account/react/components/ManageAccount/AppsContent.tsx +0 -79
- package/src/global-account/react/components/ManageAccount/BottomNavigation.tsx +0 -83
- package/src/global-account/react/components/ManageAccount/Header.tsx +0 -230
- package/src/global-account/react/components/ManageAccount/HomeActions.tsx +0 -118
- package/src/global-account/react/components/ManageAccount/HomeContent.tsx +0 -42
- package/src/global-account/react/components/ManageAccount/NFTContent.tsx +0 -24
- package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +0 -79
- package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +0 -87
- package/src/global-account/react/components/ManageAccount/SettingsMenuItem.tsx +0 -31
- package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +0 -182
- package/src/global-account/react/components/ManageAccount/TokenContent.tsx +0 -41
- package/src/global-account/react/components/ModalHeader/ModalHeader.tsx +0 -61
- package/src/global-account/react/components/Send/Send.tsx +0 -585
- package/src/global-account/react/components/icons/BellIcon.tsx +0 -15
- package/src/global-account/react/components/icons/ChevronDownIcon.tsx +0 -17
- package/src/global-account/react/components/icons/CopyIcon.tsx +0 -22
- package/src/global-account/react/components/icons/LinkIcon.tsx +0 -15
- package/src/global-account/react/components/icons/LockIcon.tsx +0 -15
- package/src/global-account/react/components/icons/WalletIcon.tsx +0 -21
- package/src/global-account/react/stores/useRecentAddressesStore.ts +0 -55
|
@@ -1,82 +1,30 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import app from "../../../../global-account/app.js";
|
|
4
|
-
import { Button,
|
|
5
|
-
import { validateImageUrl } from "../../../../global-account/react/utils/profileDisplay.js";
|
|
4
|
+
import { Button, useB3, useProfile } from "../../../../global-account/react/index.js";
|
|
6
5
|
import { cn } from "../../../../shared/utils/cn.js";
|
|
7
6
|
import { debugB3React } from "../../../../shared/utils/debug.js";
|
|
8
7
|
import { client } from "../../../../shared/utils/thirdweb.js";
|
|
9
|
-
import { Loader2, Upload, X } from "lucide-react";
|
|
10
|
-
import {
|
|
11
|
-
import Cropper from "react-easy-crop";
|
|
12
|
-
import "react-easy-crop/react-easy-crop.css";
|
|
8
|
+
import { Check, Loader2, Upload, X } from "lucide-react";
|
|
9
|
+
import { useRef, useState } from "react";
|
|
13
10
|
import { toast } from "sonner";
|
|
14
11
|
import { useActiveAccount } from "thirdweb/react";
|
|
15
12
|
import { upload } from "thirdweb/storage";
|
|
16
|
-
import { useProfileSettings } from "../../hooks/useProfile.js";
|
|
17
|
-
import { useModalStore } from "../../stores/index.js";
|
|
18
|
-
import ModalHeader from "../ModalHeader/ModalHeader.js";
|
|
19
13
|
const debug = debugB3React("AvatarEditor");
|
|
20
|
-
// Helper function to create an image element from a URL
|
|
21
|
-
const createImage = (url) => new Promise((resolve, reject) => {
|
|
22
|
-
const image = new Image();
|
|
23
|
-
image.addEventListener("load", () => resolve(image));
|
|
24
|
-
image.addEventListener("error", error => reject(error));
|
|
25
|
-
image.setAttribute("crossOrigin", "anonymous");
|
|
26
|
-
image.src = url;
|
|
27
|
-
});
|
|
28
14
|
export function AvatarEditor({ onSetAvatar, className }) {
|
|
29
|
-
const [viewStep, setViewStep] = useState("select");
|
|
30
|
-
const [selectedAvatar, setSelectedAvatar] = useState(null);
|
|
31
|
-
const [selectedProfileType, setSelectedProfileType] = useState(null); // Track which profile was selected
|
|
32
|
-
const [hoveredProfile, setHoveredProfile] = useState(null);
|
|
33
15
|
const [selectedFile, setSelectedFile] = useState(null);
|
|
34
16
|
const [previewUrl, setPreviewUrl] = useState(null);
|
|
17
|
+
const [isUploading, setIsUploading] = useState(false);
|
|
35
18
|
const [isSaving, setIsSaving] = useState(false);
|
|
36
|
-
const [isDragging, setIsDragging] = useState(false);
|
|
37
|
-
const [crop, setCrop] = useState({ x: 0, y: 0 });
|
|
38
|
-
const [zoom, setZoom] = useState(1);
|
|
39
|
-
const [croppedAreaPixels, setCroppedAreaPixels] = useState(null);
|
|
40
19
|
const fileInputRef = useRef(null);
|
|
41
|
-
const { setUser
|
|
42
|
-
const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
|
|
43
|
-
const contentType = useModalStore(state => state.contentType);
|
|
44
|
-
const { setPreference } = useProfileSettings();
|
|
20
|
+
const { setUser } = useB3();
|
|
45
21
|
const account = useActiveAccount();
|
|
46
22
|
const { data: profile, refetch: refreshProfile } = useProfile({
|
|
47
23
|
address: account?.address,
|
|
48
24
|
fresh: true,
|
|
49
25
|
});
|
|
50
|
-
//
|
|
51
|
-
const
|
|
52
|
-
const currentAvatar = validateImageUrl(rawCurrentAvatar);
|
|
53
|
-
const safePreviewUrl = validateImageUrl(previewUrl);
|
|
54
|
-
const onCropComplete = useCallback((_croppedArea, croppedAreaPixels) => {
|
|
55
|
-
setCroppedAreaPixels(croppedAreaPixels);
|
|
56
|
-
}, []);
|
|
57
|
-
const createCroppedImage = async (imageSrc, pixelCrop) => {
|
|
58
|
-
const image = await createImage(imageSrc);
|
|
59
|
-
const canvas = document.createElement("canvas");
|
|
60
|
-
const ctx = canvas.getContext("2d");
|
|
61
|
-
if (!ctx) {
|
|
62
|
-
throw new Error("Failed to get canvas context");
|
|
63
|
-
}
|
|
64
|
-
// Set canvas size to the crop area
|
|
65
|
-
canvas.width = pixelCrop.width;
|
|
66
|
-
canvas.height = pixelCrop.height;
|
|
67
|
-
// Draw the cropped image
|
|
68
|
-
ctx.drawImage(image, pixelCrop.x, pixelCrop.y, pixelCrop.width, pixelCrop.height, 0, 0, pixelCrop.width, pixelCrop.height);
|
|
69
|
-
// Return as blob
|
|
70
|
-
return new Promise((resolve, reject) => {
|
|
71
|
-
canvas.toBlob(blob => {
|
|
72
|
-
if (!blob) {
|
|
73
|
-
reject(new Error("Canvas is empty"));
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
resolve(blob);
|
|
77
|
-
}, "image/jpeg");
|
|
78
|
-
});
|
|
79
|
-
};
|
|
26
|
+
// Thirdweb upload function
|
|
27
|
+
const hasAvatar = profile?.avatar;
|
|
80
28
|
const handleFileSelect = (event) => {
|
|
81
29
|
const file = event.target.files?.[0];
|
|
82
30
|
if (file) {
|
|
@@ -91,17 +39,12 @@ export function AvatarEditor({ onSetAvatar, className }) {
|
|
|
91
39
|
return;
|
|
92
40
|
}
|
|
93
41
|
setSelectedFile(file);
|
|
94
|
-
// Clear profile type selection when uploading a new file
|
|
95
|
-
setSelectedProfileType(null);
|
|
96
42
|
// Create preview URL
|
|
97
43
|
const url = URL.createObjectURL(file);
|
|
98
44
|
setPreviewUrl(url);
|
|
99
|
-
setSelectedAvatar(url);
|
|
100
45
|
}
|
|
101
46
|
};
|
|
102
|
-
const
|
|
103
|
-
setSelectedAvatar(currentAvatar || null);
|
|
104
|
-
setSelectedProfileType(null);
|
|
47
|
+
const handleRemoveFile = () => {
|
|
105
48
|
setSelectedFile(null);
|
|
106
49
|
if (previewUrl) {
|
|
107
50
|
URL.revokeObjectURL(previewUrl);
|
|
@@ -110,209 +53,50 @@ export function AvatarEditor({ onSetAvatar, className }) {
|
|
|
110
53
|
if (fileInputRef.current) {
|
|
111
54
|
fileInputRef.current.value = "";
|
|
112
55
|
}
|
|
113
|
-
// Reset crop state
|
|
114
|
-
setCrop({ x: 0, y: 0 });
|
|
115
|
-
setZoom(1);
|
|
116
|
-
setCroppedAreaPixels(null);
|
|
117
56
|
};
|
|
118
|
-
const
|
|
119
|
-
if (!
|
|
120
|
-
toast.error("
|
|
57
|
+
const handleUpload = async () => {
|
|
58
|
+
if (!selectedFile) {
|
|
59
|
+
toast.error("Please select an image first");
|
|
121
60
|
return;
|
|
122
61
|
}
|
|
123
|
-
|
|
62
|
+
setIsUploading(true);
|
|
124
63
|
try {
|
|
125
|
-
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
fileToUpload = selectedFile;
|
|
143
|
-
}
|
|
144
|
-
else if (selectedProfileType && selectedAvatar) {
|
|
145
|
-
// User selected from existing profile avatars
|
|
146
|
-
// Fetch the image from the URL and convert to blob
|
|
147
|
-
debug("Fetching image from social profile:", selectedAvatar);
|
|
148
|
-
try {
|
|
149
|
-
const response = await fetch(selectedAvatar);
|
|
150
|
-
if (!response.ok) {
|
|
151
|
-
throw new Error("Failed to fetch image");
|
|
152
|
-
}
|
|
153
|
-
const blob = await response.blob();
|
|
154
|
-
debug("Fetched blob with type:", blob.type);
|
|
155
|
-
// Determine the correct extension from the blob's MIME type
|
|
156
|
-
// This handles URLs without extensions (like Farcaster images)
|
|
157
|
-
const mimeToExtension = {
|
|
158
|
-
"image/jpeg": "jpg",
|
|
159
|
-
"image/jpg": "jpg",
|
|
160
|
-
"image/png": "png",
|
|
161
|
-
"image/gif": "gif",
|
|
162
|
-
"image/webp": "webp",
|
|
163
|
-
"image/svg+xml": "svg",
|
|
164
|
-
};
|
|
165
|
-
const extension = blob.type ? mimeToExtension[blob.type.toLowerCase()] || "jpg" : "jpg";
|
|
166
|
-
const mimeType = blob.type || `image/${extension}`;
|
|
167
|
-
fileToUpload = new File([blob], `avatar-${selectedProfileType}.${extension}`, { type: mimeType });
|
|
168
|
-
debug("Successfully converted social profile image to file with extension:", extension);
|
|
169
|
-
}
|
|
170
|
-
catch (fetchError) {
|
|
171
|
-
debug("Error fetching social profile image:", fetchError);
|
|
172
|
-
toast.error("Failed to fetch profile image. Please try uploading manually.");
|
|
173
|
-
setIsSaving(false);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Upload to IPFS if we have a file
|
|
178
|
-
if (fileToUpload) {
|
|
179
|
-
debug("Starting upload to IPFS", fileToUpload);
|
|
180
|
-
// Upload to IPFS using Thirdweb
|
|
181
|
-
const ipfsUrl = await upload({
|
|
182
|
-
client,
|
|
183
|
-
files: [fileToUpload],
|
|
184
|
-
});
|
|
185
|
-
debug("Upload successful", ipfsUrl);
|
|
186
|
-
// Save avatar URL using profiles service
|
|
187
|
-
const user = await app.service("users").setAvatar({
|
|
188
|
-
avatar: ipfsUrl,
|
|
189
|
-
},
|
|
190
|
-
// @ts-expect-error - our typed client is expecting context even though it's set elsewhere
|
|
191
|
-
{});
|
|
192
|
-
// update user
|
|
193
|
-
// @ts-expect-error this resolved fine, look into why expect-error needed
|
|
194
|
-
setUser(user);
|
|
195
|
-
toast.success("Looks great! Your avatar has been saved!");
|
|
196
|
-
}
|
|
64
|
+
debug("Starting upload to IPFS", selectedFile);
|
|
65
|
+
// Upload to IPFS using Thirdweb
|
|
66
|
+
const ipfsUrl = await upload({
|
|
67
|
+
client,
|
|
68
|
+
files: [selectedFile],
|
|
69
|
+
});
|
|
70
|
+
debug("Upload successful", ipfsUrl);
|
|
71
|
+
// Save avatar URL using profiles service
|
|
72
|
+
setIsSaving(true);
|
|
73
|
+
const user = await app.service("users").setAvatar({
|
|
74
|
+
avatar: ipfsUrl,
|
|
75
|
+
},
|
|
76
|
+
// @ts-expect-error - our typed client is expecting context even though it's set elsewhere
|
|
77
|
+
{});
|
|
78
|
+
// update user
|
|
79
|
+
// @ts-expect-error this resolved fine, look into why expect-error needed
|
|
80
|
+
setUser(user);
|
|
197
81
|
// Refresh profile to get updated avatar
|
|
198
82
|
await refreshProfile();
|
|
83
|
+
toast.success(hasAvatar ? "Nice look! Your avatar has been updated!" : "Looks great! Your avatar has been saved!");
|
|
199
84
|
onSetAvatar?.();
|
|
85
|
+
// Clean up
|
|
86
|
+
handleRemoveFile();
|
|
200
87
|
}
|
|
201
88
|
catch (error) {
|
|
202
|
-
debug("Error
|
|
203
|
-
toast.error("Failed to
|
|
89
|
+
debug("Error uploading avatar:", error);
|
|
90
|
+
toast.error("Failed to upload avatar. Please try again.");
|
|
204
91
|
}
|
|
205
92
|
finally {
|
|
93
|
+
setIsUploading(false);
|
|
206
94
|
setIsSaving(false);
|
|
207
95
|
}
|
|
208
96
|
};
|
|
209
|
-
const
|
|
210
|
-
if (viewStep === "upload") {
|
|
211
|
-
setViewStep("select");
|
|
212
|
-
handleRemovePreview();
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
setB3ModalContentType({
|
|
216
|
-
type: "manageAccount",
|
|
217
|
-
chain: contentType?.chain,
|
|
218
|
-
partnerId: partnerId,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
const handleProfileAvatarSelect = (avatarUrl, profileType) => {
|
|
223
|
-
setSelectedAvatar(avatarUrl);
|
|
224
|
-
setSelectedProfileType(profileType);
|
|
225
|
-
// Clear any selected file since we're selecting from profile
|
|
226
|
-
setSelectedFile(null);
|
|
227
|
-
if (previewUrl) {
|
|
228
|
-
URL.revokeObjectURL(previewUrl);
|
|
229
|
-
setPreviewUrl(null);
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
const handleUploadImageClick = () => {
|
|
233
|
-
setViewStep("upload");
|
|
234
|
-
};
|
|
235
|
-
const handleOpenFilePicker = () => {
|
|
97
|
+
const handleFileInputClick = () => {
|
|
236
98
|
fileInputRef.current?.click();
|
|
237
99
|
};
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
e.stopPropagation();
|
|
241
|
-
setIsDragging(true);
|
|
242
|
-
};
|
|
243
|
-
const handleDragLeave = (e) => {
|
|
244
|
-
e.preventDefault();
|
|
245
|
-
e.stopPropagation();
|
|
246
|
-
setIsDragging(false);
|
|
247
|
-
};
|
|
248
|
-
const handleDragOver = (e) => {
|
|
249
|
-
e.preventDefault();
|
|
250
|
-
e.stopPropagation();
|
|
251
|
-
};
|
|
252
|
-
const handleDrop = (e) => {
|
|
253
|
-
e.preventDefault();
|
|
254
|
-
e.stopPropagation();
|
|
255
|
-
setIsDragging(false);
|
|
256
|
-
const file = e.dataTransfer.files?.[0];
|
|
257
|
-
if (file) {
|
|
258
|
-
// Validate file type
|
|
259
|
-
if (!file.type.startsWith("image/")) {
|
|
260
|
-
toast.error("Please select an image file");
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
// Validate file size (max 5MB)
|
|
264
|
-
if (file.size > 5 * 1024 * 1024) {
|
|
265
|
-
toast.error("File size must be less than 5MB");
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
setSelectedFile(file);
|
|
269
|
-
// Clear profile type selection when uploading a new file
|
|
270
|
-
setSelectedProfileType(null);
|
|
271
|
-
// Create preview URL
|
|
272
|
-
const url = URL.createObjectURL(file);
|
|
273
|
-
setPreviewUrl(url);
|
|
274
|
-
setSelectedAvatar(url);
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
const handleLinkMoreAccount = () => {
|
|
278
|
-
setB3ModalContentType({
|
|
279
|
-
type: "linkAccount",
|
|
280
|
-
chain: contentType?.chain,
|
|
281
|
-
partnerId: partnerId,
|
|
282
|
-
});
|
|
283
|
-
};
|
|
284
|
-
const isLoading = isSaving;
|
|
285
|
-
// Get profile avatars with validated URLs
|
|
286
|
-
const profileAvatars = profile?.profiles
|
|
287
|
-
?.filter(p => p.avatar)
|
|
288
|
-
.map(p => {
|
|
289
|
-
const rawAvatarUrl = p?.avatar || "";
|
|
290
|
-
const validatedUrl = validateImageUrl(rawAvatarUrl);
|
|
291
|
-
return {
|
|
292
|
-
type: p.type,
|
|
293
|
-
avatar: validatedUrl,
|
|
294
|
-
name: p.name || p.type,
|
|
295
|
-
};
|
|
296
|
-
})
|
|
297
|
-
.filter(p => p.avatar !== null) || []; // Filter out profiles with invalid avatars
|
|
298
|
-
return (_jsxs("div", { className: cn("flex w-full max-w-md flex-col bg-white", className), children: [viewStep === "upload" && _jsx(ModalHeader, { title: "Upload Image" }), _jsxs("div", { className: "flex flex-col items-center p-6", children: [viewStep === "select" ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "relative mb-6", children: [_jsx("div", { className: "h-32 w-32 overflow-hidden rounded-full", children: safePreviewUrl || selectedAvatar || currentAvatar ? (_jsx(IPFSMediaRenderer, { src: safePreviewUrl || selectedAvatar || currentAvatar || "", alt: "Avatar preview", className: "h-full w-full object-cover" })) : (_jsx("div", { className: "bg-b3-primary-wash h-full w-full" })) }), (selectedAvatar !== currentAvatar || selectedFile) && (_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: _jsx(X, { className: "h-4 w-4" }) }))] }), _jsxs("button", { onClick: handleUploadImageClick, className: "font-inter 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] shadow-sm transition-colors hover:bg-[#f4f4f5]", children: [_jsx(Upload, { className: "h-4 w-4" }), "Upload image"] }), _jsxs("div", { className: "w-full", children: [_jsx("h3", { className: "mb-2 text-base font-semibold text-[#18181b]", children: "Select your profile image" }), _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." }), _jsx("div", { className: "mb-4 flex gap-3", children: profileAvatars.map((profileAvatar, index) => {
|
|
299
|
-
// Skip if avatar is null (should not happen due to filter, but TypeScript doesn't know that)
|
|
300
|
-
if (!profileAvatar.avatar)
|
|
301
|
-
return null;
|
|
302
|
-
return (_jsxs("div", { className: "relative", onMouseEnter: () => setHoveredProfile(profileAvatar.type), onMouseLeave: () => setHoveredProfile(null), children: [_jsx("button", { onClick: () => handleProfileAvatarSelect(profileAvatar.avatar || "", profileAvatar.type || ""), className: cn("h-16 w-16 overflow-hidden rounded-full border-2 transition-all", selectedProfileType === profileAvatar.type
|
|
303
|
-
? "border-[#3368ef] ring-2 ring-[#3368ef]/20"
|
|
304
|
-
: "border-transparent hover:border-[#e4e4e7]"), children: _jsx("img", { src: profileAvatar.avatar, alt: `${profileAvatar.type} avatar`, className: "h-full w-full object-cover" }) }), hoveredProfile === profileAvatar.type && (_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));
|
|
305
|
-
}) }), _jsxs("button", { onClick: handleLinkMoreAccount, className: "font-inter flex items-center gap-2 text-sm font-semibold text-[#3368ef] hover:underline", children: [_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: _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"] })] })] })) : (_jsx(_Fragment, { children: !selectedFile ? (_jsxs("div", { onClick: handleOpenFilePicker, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: 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
|
|
306
|
-
? "border-[#3368ef] bg-[#f0f5ff]"
|
|
307
|
-
: "border-[#e4e4e7] hover:border-[#3368ef] hover:bg-[#f0f5ff]"), children: [_jsxs("p", { className: "font-inter mb-1 text-sm", children: [_jsx("span", { className: "font-semibold text-[#3368ef]", children: "Click to upload" }), _jsx("span", { className: "text-[#71717a]", children: " or drag and drop" })] }), _jsx("p", { className: "text-xs text-[#71717a]", children: "PNG, JPG or GIF (up to 5MB)" })] })) : (_jsxs("div", { className: "mb-6 w-full", children: [_jsx("div", { className: "relative aspect-square w-full overflow-hidden rounded-xl bg-[#f4f4f5]", children: safePreviewUrl ? (_jsxs(_Fragment, { children: [_jsx(Cropper, { image: safePreviewUrl, crop: crop, zoom: zoom, aspect: 1, onCropChange: setCrop, onCropComplete: onCropComplete, onZoomChange: setZoom, cropShape: "rect", showGrid: false, style: {
|
|
308
|
-
containerStyle: {
|
|
309
|
-
width: "100%",
|
|
310
|
-
height: "100%",
|
|
311
|
-
backgroundColor: "#f4f4f5",
|
|
312
|
-
},
|
|
313
|
-
cropAreaStyle: {
|
|
314
|
-
border: "2px solid #3368ef",
|
|
315
|
-
borderRadius: "0px",
|
|
316
|
-
},
|
|
317
|
-
} }), _jsx("button", { onClick: handleRemovePreview, className: "absolute right-4 top-4 z-10 flex h-8 w-8 items-center justify-center rounded-full bg-[#51525c] text-white transition-colors hover:bg-[#71717a]", children: _jsx(X, { className: "h-4 w-4" }) })] })) : (_jsx("div", { className: "bg-b3-primary-wash h-full w-full" })) }), safePreviewUrl && (_jsxs("div", { className: "mt-4 flex items-center gap-3", children: [_jsx("label", { className: "flex-shrink-0 text-sm font-semibold text-[#475467]", children: "Zoom" }), _jsx("input", { type: "range", min: 1, max: 3, step: 0.1, value: zoom, onChange: e => setZoom(Number(e.target.value)), className: "flex-1 accent-[#3368ef]" })] }))] })) })), _jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", onChange: handleFileSelect, className: "hidden" })] }), _jsxs("div", { className: "font-inter flex gap-3 border-t border-[#e4e4e7] p-6 font-semibold", children: [_jsx(Button, { onClick: handleCancel, variant: "outline", disabled: isLoading, className: "flex-1 rounded-xl border-[#e4e4e7] text-[#18181b] hover:bg-[#f4f4f5]", children: "Cancel" }), _jsx(Button, { onClick: handleSaveChanges, disabled: isLoading || (!selectedFile && !selectedProfileType), className: "flex-1 rounded-xl bg-[#3368ef] text-white hover:bg-[#2952cc]", children: isLoading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Saving..."] })) : ("Save changes") })] })] }));
|
|
100
|
+
const isLoading = isUploading || isSaving;
|
|
101
|
+
return (_jsxs("div", { className: cn("flex flex-col items-center justify-center space-y-6 p-8", className), children: [_jsxs("div", { className: "space-y-2 text-center", children: [_jsx("h2", { className: "font-neue-montreal-semibold text-b3-grey text-2xl", children: hasAvatar ? "Update Your Avatar" : "Set Your Avatar" }), _jsx("p", { className: "text-b3-foreground-muted font-neue-montreal-medium", children: "Upload an image to personalize your profile" })] }), hasAvatar && !previewUrl && (_jsx("div", { className: "relative", children: _jsx("div", { className: "border-b3-primary-blue h-32 w-32 overflow-hidden rounded-full border-4", children: _jsx("img", { src: profile.avatar, alt: "Current avatar", className: "h-full w-full object-cover" }) }) })), _jsxs("div", { className: "w-full max-w-md", children: [!selectedFile ? (_jsxs("div", { onClick: handleFileInputClick, className: "border-b3-line hover:border-b3-primary-blue hover:bg-b3-primary-wash/20 cursor-pointer rounded-xl border-2 border-dashed p-8 text-center transition-colors", children: [_jsx(Upload, { className: "text-b3-grey mx-auto mb-4 h-12 w-12" }), _jsx("p", { className: "text-b3-grey font-neue-montreal-semibold mb-2", children: "Click to select an image" }), _jsx("p", { className: "text-b3-foreground-muted font-neue-montreal-medium text-sm", children: "PNG, JPG, or GIF up to 5MB" })] })) : (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "relative", children: [_jsx("div", { className: "border-b3-primary-blue mx-auto h-32 w-32 overflow-hidden rounded-full border-4", children: previewUrl ? (_jsx("img", { src: previewUrl, alt: "Preview", className: "h-full w-full object-cover" })) : (_jsx("div", { className: "bg-b3-primary-wash flex h-full w-full items-center justify-center rounded-full", children: _jsx("p", { className: "text-b3-grey font-neue-montreal-semibold text-sm", children: "No file selected" }) })) }), _jsx("button", { onClick: handleRemoveFile, className: "bg-b3-negative absolute -right-2 -top-2 flex h-8 w-8 items-center justify-center rounded-full text-white transition-colors hover:bg-red-600", disabled: isLoading, children: _jsx(X, { size: 16 }) })] }), _jsxs("div", { className: "space-y-1 text-center", children: [_jsx("p", { className: "text-b3-grey font-neue-montreal-semibold text-sm", children: selectedFile.name }), _jsxs("p", { className: "text-b3-foreground-muted font-neue-montreal-medium text-xs", children: [(selectedFile.size / 1024 / 1024).toFixed(2), " MB"] })] })] })), _jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", onChange: handleFileSelect, className: "hidden" })] }), _jsxs("div", { className: "flex w-full max-w-md gap-3", children: [selectedFile && (_jsx(Button, { onClick: handleUpload, disabled: isLoading, className: "bg-b3-primary-blue hover:bg-b3-primary-blue/90 flex-1 text-white", children: isLoading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), isUploading ? "Uploading..." : "Saving..."] })) : (_jsxs(_Fragment, { children: [_jsx(Check, { className: "mr-2 h-4 w-4" }), hasAvatar ? "Update Avatar" : "Set Avatar"] })) })), _jsxs(Button, { variant: "outline", onClick: handleFileInputClick, disabled: isLoading, className: "flex-1", children: [_jsx(Upload, { className: "mr-2 h-4 w-4" }), selectedFile ? "Change Image" : "Select Image"] })] }), _jsx("div", { className: "text-b3-foreground-muted font-neue-montreal-medium max-w-md text-center text-xs", children: _jsx("p", { children: "Your avatar will be uploaded to IPFS and stored securely. Make sure you have the rights to use this image." }) })] }));
|
|
318
102
|
}
|
|
@@ -10,21 +10,17 @@ import { useEffect, useRef } from "react";
|
|
|
10
10
|
import { useSetActiveWallet } from "thirdweb/react";
|
|
11
11
|
import { AvatarEditor } from "./AvatarEditor/AvatarEditor.js";
|
|
12
12
|
import { useB3 } from "./B3Provider/useB3.js";
|
|
13
|
-
import { Deposit } from "./Deposit/Deposit.js";
|
|
14
13
|
import { LinkAccount } from "./LinkAccount/LinkAccount.js";
|
|
15
|
-
import {
|
|
14
|
+
import { ProfileEditor } from "./ProfileEditor/ProfileEditor.js";
|
|
16
15
|
import { ManageAccount } from "./ManageAccount/ManageAccount.js";
|
|
17
16
|
import { RequestPermissions } from "./RequestPermissions/RequestPermissions.js";
|
|
18
|
-
import { Send } from "./Send/Send.js";
|
|
19
17
|
import { SignInWithB3Flow } from "./SignInWithB3/SignInWithB3Flow.js";
|
|
20
18
|
import { Dialog, DialogContent, DialogDescription, DialogTitle } from "./ui/dialog.js";
|
|
21
19
|
import { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from "./ui/drawer.js";
|
|
20
|
+
import { AnySpendDepositUpside } from "../../../anyspend/react/components/AnySpendDepositUpside.js";
|
|
22
21
|
const debug = debugB3React("B3DynamicModal");
|
|
23
22
|
export function B3DynamicModal() {
|
|
24
|
-
const isOpen = useModalStore(
|
|
25
|
-
const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
|
|
26
|
-
const contentType = useModalStore(state => state.contentType);
|
|
27
|
-
const navigateBack = useModalStore(state => state.navigateBack);
|
|
23
|
+
const { isOpen, setB3ModalOpen, contentType, history, navigateBack } = useModalStore();
|
|
28
24
|
const { theme } = useB3();
|
|
29
25
|
const isMobile = useIsMobile();
|
|
30
26
|
const prevIsOpenRef = useRef(isOpen);
|
|
@@ -55,10 +51,8 @@ export function B3DynamicModal() {
|
|
|
55
51
|
"anySpendSignatureMint",
|
|
56
52
|
"anySpendBondKit",
|
|
57
53
|
"linkAccount",
|
|
58
|
-
"linkNewAccount",
|
|
59
54
|
"avatarEditor",
|
|
60
|
-
"
|
|
61
|
-
"send",
|
|
55
|
+
"profileEditor",
|
|
62
56
|
];
|
|
63
57
|
const freestyleTypes = [
|
|
64
58
|
"anySpendNft",
|
|
@@ -74,7 +68,7 @@ export function B3DynamicModal() {
|
|
|
74
68
|
];
|
|
75
69
|
// Check if current content type is in freestyle types
|
|
76
70
|
const isFreestyleType = freestyleTypes.includes(contentType?.type);
|
|
77
|
-
const hideCloseButton =
|
|
71
|
+
const hideCloseButton = isFreestyleType;
|
|
78
72
|
// Build content class using cn utility
|
|
79
73
|
// eslint-disable-next-line tailwindcss/no-custom-classname
|
|
80
74
|
const contentClass = 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");
|
|
@@ -100,7 +94,7 @@ export function B3DynamicModal() {
|
|
|
100
94
|
case "anySpendFundTournament":
|
|
101
95
|
return _jsx(AnySpendTournament, { ...contentType, mode: "modal", action: "fund" });
|
|
102
96
|
case "anySpendOrderHistory":
|
|
103
|
-
return _jsx(OrderHistory, {
|
|
97
|
+
return _jsx(OrderHistory, { onBack: () => { }, mode: "modal" });
|
|
104
98
|
case "anySpendStakeB3":
|
|
105
99
|
return _jsx(AnySpendStakeB3, { ...contentType, mode: "modal" });
|
|
106
100
|
case "anySpendStakeB3ExactIn":
|
|
@@ -109,6 +103,8 @@ export function B3DynamicModal() {
|
|
|
109
103
|
return _jsx(AnySpendStakeUpside, { ...contentType, mode: "modal" });
|
|
110
104
|
case "anySpendStakeUpsideExactIn":
|
|
111
105
|
return _jsx(AnySpendStakeUpsideExactIn, { ...contentType, mode: "modal" });
|
|
106
|
+
case "anySpendDepositUpside":
|
|
107
|
+
return _jsx(AnySpendDepositUpside, { ...contentType, mode: "modal" });
|
|
112
108
|
case "anySpendBuySpin":
|
|
113
109
|
return _jsx(AnySpendBuySpin, { ...contentType, mode: "modal" });
|
|
114
110
|
case "anySpendSignatureMint":
|
|
@@ -117,16 +113,12 @@ export function B3DynamicModal() {
|
|
|
117
113
|
return _jsx(AnySpendBondKit, { ...contentType });
|
|
118
114
|
case "linkAccount":
|
|
119
115
|
return _jsx(LinkAccount, { ...contentType });
|
|
120
|
-
case "linkNewAccount":
|
|
121
|
-
return _jsx(LinkNewAccount, { ...contentType });
|
|
122
116
|
case "anySpendDepositHype":
|
|
123
117
|
return _jsx(AnySpendDepositHype, { ...contentType, mode: "modal" });
|
|
124
118
|
case "avatarEditor":
|
|
125
119
|
return _jsx(AvatarEditor, { onSetAvatar: contentType.onSuccess });
|
|
126
|
-
case "
|
|
127
|
-
return _jsx(
|
|
128
|
-
case "send":
|
|
129
|
-
return _jsx(Send, { ...contentType });
|
|
120
|
+
case "profileEditor":
|
|
121
|
+
return _jsx(ProfileEditor, { onSuccess: contentType.onSuccess });
|
|
130
122
|
// Add other modal types here
|
|
131
123
|
default:
|
|
132
124
|
return null;
|
|
@@ -136,9 +128,9 @@ export function B3DynamicModal() {
|
|
|
136
128
|
const ModalContent = isMobile ? DrawerContent : DialogContent;
|
|
137
129
|
const ModalTitle = isMobile ? DrawerTitle : DialogTitle;
|
|
138
130
|
const ModalDescription = isMobile ? DrawerDescription : DialogDescription;
|
|
139
|
-
return (_jsxs(ModalComponent, { open: isOpen, onOpenChange: setB3ModalOpen, children: [_jsxs(ModalContent, { className: cn(contentClass, "rounded-2xl bg-white shadow-xl dark:bg-gray-900", "border border-gray-200 dark:border-gray-800",
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
131
|
+
return (_jsxs(ModalComponent, { open: isOpen, onOpenChange: setB3ModalOpen, children: [_jsxs(ModalContent, { className: cn(contentClass, "rounded-2xl bg-white shadow-xl dark:bg-gray-900", "border border-gray-200 dark:border-gray-800",
|
|
132
|
+
// Remove default width classes for avatar editor and profile editor
|
|
133
|
+
contentType?.type === "avatarEditor" || contentType?.type === "profileEditor"
|
|
134
|
+
? "!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: [_jsx(ModalTitle, { className: "sr-only hidden", children: contentType?.type || "Modal" }), _jsx(ModalDescription, { className: "sr-only hidden", children: contentType?.type || "Modal Body" }), _jsxs("div", { className: cn("no-scrollbar max-h-[90dvh] overflow-auto sm:max-h-[80dvh]"), children: [history.length > 0 && contentType?.showBackButton && (_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: [_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M15.8337 10H4.16699", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M10.0003 15.8334L4.16699 10L10.0003 4.16669", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] }), _jsx("span", { className: "text-sm font-medium", children: "Back" })] })), renderContent()] })] }), (contentType?.type === "avatarEditor" || contentType?.type === "profileEditor") && (_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: _jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M18 6L6 18M6 6L18 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }))] }));
|
|
144
136
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
chain: Chain;
|
|
6
|
-
}) => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
import { LinkAccountModalProps } from "../../stores/useModalStore";
|
|
2
|
+
export declare function LinkAccount({ onSuccess: onSuccessCallback, onError, onClose, chain, partnerId, className, }: LinkAccountModalProps & {
|
|
3
|
+
className?: string;
|
|
4
|
+
}): import("react/jsx-runtime").JSX.Element;
|