@b3dotfun/sdk 0.0.73 → 0.0.74-alpha.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 +75 -50
- package/dist/cjs/anyspend/react/components/AnySpendBuySpin.js +9 -10
- package/dist/cjs/anyspend/react/components/AnySpendCustom.js +41 -41
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -0
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +17 -9
- package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +7 -8
- package/dist/cjs/anyspend/react/components/AnySpendStakeB3ExactIn.js +7 -8
- package/dist/cjs/anyspend/react/components/AnyspendDepositHype.d.ts +2 -1
- package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +2 -2
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +18 -14
- 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/InsufficientDepositPayment.js +6 -6
- package/dist/cjs/anyspend/react/components/common/OrderDetails.js +35 -35
- package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +1 -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/OrderHistoryItem.js +1 -1
- package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +4 -4
- package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +8 -9
- 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/common/TransferCryptoDetails.js +2 -3
- package/dist/cjs/anyspend/react/components/webview/WebviewOnrampOrderStatus.js +1 -2
- package/dist/cjs/anyspend/react/components/webview/WebviewOnrampPayment.js +12 -12
- package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +4 -5
- package/dist/cjs/anyspend/react/hooks/useConnectedWalletDisplay.js +3 -2
- package/dist/cjs/anyspend/react/hooks/usePhantomTransfer.js +17 -17
- package/dist/cjs/anyspend/react/utils/toast.d.ts +6 -0
- package/dist/cjs/anyspend/react/utils/toast.js +9 -0
- package/dist/cjs/global-account/react/components/AccountAssets/AccountAssets.js +38 -2
- package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.js +2 -3
- package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +1 -0
- package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.js +275 -39
- package/dist/cjs/global-account/react/components/B3DynamicModal.js +40 -13
- package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
- package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +19 -3
- package/dist/cjs/global-account/react/components/Deposit/Deposit.d.ts +1 -0
- package/dist/cjs/global-account/react/components/Deposit/Deposit.js +61 -0
- package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
- package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +34 -0
- package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
- package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.js +104 -283
- package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
- package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.js +320 -0
- package/dist/cjs/global-account/react/components/LinkAccount/LinkedAccountItem.d.ts +16 -0
- package/dist/cjs/global-account/react/components/LinkAccount/LinkedAccountItem.js +44 -0
- 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/ContentTokens.js +1 -2
- 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 +16 -194
- 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/NotificationChannel.d.ts +16 -0
- package/dist/cjs/global-account/react/components/ManageAccount/NotificationChannel.js +13 -0
- package/dist/cjs/global-account/react/components/ManageAccount/NotificationsContent.d.ts +8 -0
- package/dist/cjs/global-account/react/components/ManageAccount/NotificationsContent.js +152 -0
- package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
- package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +47 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +60 -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 +116 -0
- package/dist/cjs/global-account/react/components/ManageAccount/TokenBalanceRow.d.ts +3 -3
- package/dist/cjs/global-account/react/components/ManageAccount/TokenBalanceRow.js +2 -2
- package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
- package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.js +44 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/DiscordChannel.d.ts +11 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/DiscordChannel.js +48 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/EmailChannel.d.ts +11 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/EmailChannel.js +68 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/PhoneChannel.d.ts +14 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/PhoneChannel.js +79 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/TelegramChannel.d.ts +11 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/TelegramChannel.js +79 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/index.d.ts +4 -0
- package/dist/cjs/global-account/react/components/ManageAccount/channels/index.js +11 -0
- package/dist/cjs/global-account/react/components/ModalHeader/ModalHeader.d.ts +11 -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 +195 -0
- package/dist/cjs/global-account/react/components/SignInWithB3/SignIn.js +5 -4
- package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +1 -1
- package/dist/cjs/global-account/react/components/Toast/ToastComponents.d.ts +15 -0
- package/dist/cjs/global-account/react/components/Toast/ToastComponents.js +54 -0
- package/dist/cjs/global-account/react/components/Toast/ToastContext.d.ts +19 -0
- package/dist/cjs/global-account/react/components/Toast/ToastContext.js +59 -0
- package/dist/cjs/global-account/react/components/Toast/index.d.ts +4 -0
- package/dist/cjs/global-account/react/components/Toast/index.js +12 -0
- package/dist/cjs/global-account/react/components/Toast/toastApi.d.ts +21 -0
- package/dist/cjs/global-account/react/components/Toast/toastApi.js +93 -0
- package/dist/cjs/global-account/react/components/WalletImage/WalletImage.d.ts +4 -0
- package/dist/cjs/global-account/react/components/WalletImage/WalletImage.js +13 -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 +10 -4
- package/dist/cjs/global-account/react/components/index.js +29 -9
- 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 +3 -2
- package/dist/cjs/global-account/react/hooks/index.js +7 -3
- package/dist/cjs/global-account/react/hooks/useAccountWallet.d.ts +1 -0
- package/dist/cjs/global-account/react/hooks/useAccountWallet.js +18 -0
- package/dist/cjs/global-account/react/hooks/useB3BalanceFromAddresses.js +1 -0
- package/dist/cjs/global-account/react/hooks/useChainSwitchWithAction.js +11 -11
- package/dist/cjs/global-account/react/hooks/useNativeBalance.js +2 -2
- package/dist/cjs/global-account/react/hooks/useNotifications.d.ts +48 -0
- package/dist/cjs/global-account/react/hooks/useNotifications.js +189 -0
- package/dist/cjs/global-account/react/hooks/useSimBalance.js +3 -3
- package/dist/cjs/global-account/react/hooks/useTokenBalanceDirect.d.ts +1 -0
- package/dist/cjs/global-account/react/hooks/useTokenBalanceDirect.js +1 -0
- package/dist/cjs/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +17 -17
- 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 +47 -6
- 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/index.d.ts +4 -0
- package/dist/cjs/global-account/react/utils/index.js +20 -0
- package/dist/cjs/global-account/react/utils/notificationsAPI.d.ts +80 -0
- package/dist/cjs/global-account/react/utils/notificationsAPI.js +257 -0
- package/dist/cjs/global-account/react/utils/profileDisplay.d.ts +3 -0
- package/dist/cjs/global-account/react/utils/profileDisplay.js +8 -4
- package/dist/cjs/global-account/react/utils/toast.d.ts +6 -0
- package/dist/cjs/global-account/react/utils/toast.js +9 -0
- package/dist/cjs/shared/constants/chains/supported.d.ts +3 -2
- package/dist/cjs/shared/constants/chains/supported.js +4 -0
- package/dist/cjs/shared/utils/ipfs.js +10 -3
- package/dist/esm/anyspend/react/components/AnySpend.js +67 -42
- package/dist/esm/anyspend/react/components/AnySpendBuySpin.js +1 -2
- package/dist/esm/anyspend/react/components/AnySpendCustom.js +10 -10
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -0
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +12 -4
- package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +1 -2
- package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +1 -2
- package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +2 -1
- package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +2 -2
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +9 -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/InsufficientDepositPayment.js +1 -1
- package/dist/esm/anyspend/react/components/common/OrderDetails.js +2 -2
- package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +1 -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/OrderHistoryItem.js +2 -2
- package/dist/esm/anyspend/react/components/common/PanelOnramp.js +4 -4
- package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +2 -3
- 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/common/TransferCryptoDetails.js +1 -2
- package/dist/esm/anyspend/react/components/webview/WebviewOnrampOrderStatus.js +1 -2
- package/dist/esm/anyspend/react/components/webview/WebviewOnrampPayment.js +1 -1
- package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +1 -2
- package/dist/esm/anyspend/react/hooks/useConnectedWalletDisplay.js +3 -2
- package/dist/esm/anyspend/react/hooks/usePhantomTransfer.js +1 -1
- package/dist/esm/anyspend/react/utils/toast.d.ts +6 -0
- package/dist/esm/anyspend/react/utils/toast.js +5 -0
- package/dist/esm/global-account/react/components/AccountAssets/AccountAssets.js +38 -2
- package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.js +1 -2
- package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +1 -0
- package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.js +276 -40
- package/dist/esm/global-account/react/components/B3DynamicModal.js +37 -13
- package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
- package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +19 -3
- package/dist/esm/global-account/react/components/Deposit/Deposit.d.ts +1 -0
- package/dist/esm/global-account/react/components/Deposit/Deposit.js +55 -0
- package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
- package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +31 -0
- package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
- package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.js +103 -283
- package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
- package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.js +314 -0
- package/dist/esm/global-account/react/components/LinkAccount/LinkedAccountItem.d.ts +16 -0
- package/dist/esm/global-account/react/components/LinkAccount/LinkedAccountItem.js +42 -0
- 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/ContentTokens.js +1 -2
- 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 +18 -196
- 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/NotificationChannel.d.ts +16 -0
- package/dist/esm/global-account/react/components/ManageAccount/NotificationChannel.js +9 -0
- package/dist/esm/global-account/react/components/ManageAccount/NotificationsContent.d.ts +8 -0
- package/dist/esm/global-account/react/components/ManageAccount/NotificationsContent.js +147 -0
- package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
- package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +45 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
- package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +55 -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 +111 -0
- package/dist/esm/global-account/react/components/ManageAccount/TokenBalanceRow.d.ts +3 -3
- package/dist/esm/global-account/react/components/ManageAccount/TokenBalanceRow.js +3 -3
- package/dist/esm/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
- package/dist/esm/global-account/react/components/ManageAccount/TokenContent.js +42 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/DiscordChannel.d.ts +11 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/DiscordChannel.js +44 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/EmailChannel.d.ts +11 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/EmailChannel.js +64 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/PhoneChannel.d.ts +14 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/PhoneChannel.js +75 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/TelegramChannel.d.ts +11 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/TelegramChannel.js +75 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/index.d.ts +4 -0
- package/dist/esm/global-account/react/components/ManageAccount/channels/index.js +4 -0
- package/dist/esm/global-account/react/components/ModalHeader/ModalHeader.d.ts +11 -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 +189 -0
- package/dist/esm/global-account/react/components/SignInWithB3/SignIn.js +7 -6
- package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +1 -1
- package/dist/esm/global-account/react/components/Toast/ToastComponents.d.ts +15 -0
- package/dist/esm/global-account/react/components/Toast/ToastComponents.js +50 -0
- package/dist/esm/global-account/react/components/Toast/ToastContext.d.ts +19 -0
- package/dist/esm/global-account/react/components/Toast/ToastContext.js +55 -0
- package/dist/esm/global-account/react/components/Toast/index.d.ts +4 -0
- package/dist/esm/global-account/react/components/Toast/index.js +3 -0
- package/dist/esm/global-account/react/components/Toast/toastApi.d.ts +21 -0
- package/dist/esm/global-account/react/components/Toast/toastApi.js +89 -0
- package/dist/esm/global-account/react/components/WalletImage/WalletImage.d.ts +4 -0
- package/dist/esm/global-account/react/components/WalletImage/WalletImage.js +11 -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 +10 -4
- package/dist/esm/global-account/react/components/index.js +14 -5
- 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 +3 -2
- package/dist/esm/global-account/react/hooks/index.js +3 -2
- package/dist/esm/global-account/react/hooks/useAccountWallet.d.ts +1 -0
- package/dist/esm/global-account/react/hooks/useAccountWallet.js +17 -0
- package/dist/esm/global-account/react/hooks/useB3BalanceFromAddresses.js +1 -0
- package/dist/esm/global-account/react/hooks/useChainSwitchWithAction.js +2 -2
- package/dist/esm/global-account/react/hooks/useNativeBalance.js +1 -1
- package/dist/esm/global-account/react/hooks/useNotifications.d.ts +48 -0
- package/dist/esm/global-account/react/hooks/useNotifications.js +186 -0
- package/dist/esm/global-account/react/hooks/useSimBalance.js +3 -3
- package/dist/esm/global-account/react/hooks/useTokenBalanceDirect.d.ts +1 -0
- package/dist/esm/global-account/react/hooks/useTokenBalanceDirect.js +1 -0
- package/dist/esm/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +2 -2
- 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 +47 -6
- 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/index.d.ts +4 -0
- package/dist/esm/global-account/react/utils/index.js +4 -0
- package/dist/esm/global-account/react/utils/notificationsAPI.d.ts +80 -0
- package/dist/esm/global-account/react/utils/notificationsAPI.js +254 -0
- package/dist/esm/global-account/react/utils/profileDisplay.d.ts +3 -0
- package/dist/esm/global-account/react/utils/profileDisplay.js +8 -4
- package/dist/esm/global-account/react/utils/toast.d.ts +6 -0
- package/dist/esm/global-account/react/utils/toast.js +5 -0
- package/dist/esm/shared/constants/chains/supported.d.ts +3 -2
- package/dist/esm/shared/constants/chains/supported.js +3 -0
- package/dist/esm/shared/utils/ipfs.js +10 -3
- package/dist/styles/index.css +1 -1
- package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -0
- package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +2 -1
- package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
- package/dist/types/anyspend/react/components/common/OrderHistory.d.ts +1 -1
- package/dist/types/anyspend/react/utils/toast.d.ts +6 -0
- package/dist/types/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +1 -0
- package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
- package/dist/types/global-account/react/components/Deposit/Deposit.d.ts +1 -0
- package/dist/types/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -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/LinkAccount/LinkedAccountItem.d.ts +16 -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/NotificationChannel.d.ts +16 -0
- package/dist/types/global-account/react/components/ManageAccount/NotificationsContent.d.ts +8 -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/TokenBalanceRow.d.ts +3 -3
- package/dist/types/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
- package/dist/types/global-account/react/components/ManageAccount/channels/DiscordChannel.d.ts +11 -0
- package/dist/types/global-account/react/components/ManageAccount/channels/EmailChannel.d.ts +11 -0
- package/dist/types/global-account/react/components/ManageAccount/channels/PhoneChannel.d.ts +14 -0
- package/dist/types/global-account/react/components/ManageAccount/channels/TelegramChannel.d.ts +11 -0
- package/dist/types/global-account/react/components/ManageAccount/channels/index.d.ts +4 -0
- package/dist/types/global-account/react/components/ModalHeader/ModalHeader.d.ts +11 -0
- package/dist/types/global-account/react/components/Send/Send.d.ts +5 -0
- package/dist/types/global-account/react/components/Toast/ToastComponents.d.ts +15 -0
- package/dist/types/global-account/react/components/Toast/ToastContext.d.ts +19 -0
- package/dist/types/global-account/react/components/Toast/index.d.ts +4 -0
- package/dist/types/global-account/react/components/Toast/toastApi.d.ts +21 -0
- package/dist/types/global-account/react/components/WalletImage/WalletImage.d.ts +4 -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 +10 -4
- package/dist/types/global-account/react/hooks/index.d.ts +3 -2
- package/dist/types/global-account/react/hooks/useAccountWallet.d.ts +1 -0
- package/dist/types/global-account/react/hooks/useNotifications.d.ts +48 -0
- package/dist/types/global-account/react/hooks/useTokenBalanceDirect.d.ts +1 -0
- package/dist/types/global-account/react/stores/index.d.ts +1 -0
- package/dist/types/global-account/react/stores/useModalStore.d.ts +47 -6
- package/dist/types/global-account/react/stores/useRecentAddressesStore.d.ts +25 -0
- package/dist/types/global-account/react/utils/index.d.ts +4 -0
- package/dist/types/global-account/react/utils/notificationsAPI.d.ts +80 -0
- package/dist/types/global-account/react/utils/profileDisplay.d.ts +3 -0
- package/dist/types/global-account/react/utils/toast.d.ts +6 -0
- package/dist/types/shared/constants/chains/supported.d.ts +3 -2
- package/package.json +2 -1
- package/src/anyspend/react/components/AnySpend.tsx +213 -173
- package/src/anyspend/react/components/AnySpendBuySpin.tsx +2 -1
- package/src/anyspend/react/components/AnySpendCustom.tsx +80 -77
- package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +20 -4
- package/src/anyspend/react/components/AnySpendStakeB3.tsx +2 -1
- package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +2 -1
- package/src/anyspend/react/components/AnyspendDepositHype.tsx +3 -0
- package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +56 -22
- 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/InsufficientDepositPayment.tsx +1 -1
- package/src/anyspend/react/components/common/OrderDetails.tsx +6 -2
- package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +2 -2
- package/src/anyspend/react/components/common/OrderHistory.tsx +8 -13
- package/src/anyspend/react/components/common/OrderHistoryItem.tsx +69 -25
- package/src/anyspend/react/components/common/PanelOnramp.tsx +6 -4
- package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +3 -3
- 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/common/TransferCryptoDetails.tsx +2 -2
- package/src/anyspend/react/components/webview/WebviewOnrampOrderStatus.tsx +3 -3
- package/src/anyspend/react/components/webview/WebviewOnrampPayment.tsx +2 -1
- package/src/anyspend/react/hooks/useAnyspendFlow.ts +2 -1
- package/src/anyspend/react/hooks/useConnectedWalletDisplay.ts +3 -2
- package/src/anyspend/react/hooks/usePhantomTransfer.ts +1 -1
- package/src/anyspend/react/utils/toast.ts +6 -0
- package/src/global-account/react/components/AccountAssets/AccountAssets.tsx +115 -25
- package/src/global-account/react/components/AvatarCreator/AvatarCreator.tsx +2 -2
- package/src/global-account/react/components/AvatarEditor/AvatarEditor.tsx +491 -130
- package/src/global-account/react/components/B3DynamicModal.tsx +76 -17
- package/src/global-account/react/components/B3Provider/B3Provider.tsx +40 -20
- package/src/global-account/react/components/Deposit/Deposit.tsx +208 -0
- package/src/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.tsx +84 -0
- package/src/global-account/react/components/LinkAccount/LinkAccount.tsx +269 -434
- package/src/global-account/react/components/LinkAccount/LinkNewAccount.tsx +480 -0
- package/src/global-account/react/components/LinkAccount/LinkedAccountItem.tsx +135 -0
- package/src/global-account/react/components/ManageAccount/BottomNavigation.tsx +83 -0
- package/src/global-account/react/components/ManageAccount/ContentTokens.tsx +2 -1
- 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 +74 -597
- package/src/global-account/react/components/ManageAccount/NFTContent.tsx +24 -0
- package/src/global-account/react/components/ManageAccount/NotificationChannel.tsx +94 -0
- package/src/global-account/react/components/ManageAccount/NotificationsContent.tsx +268 -0
- package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +79 -0
- package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +106 -0
- package/src/global-account/react/components/ManageAccount/SettingsMenuItem.tsx +31 -0
- package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +197 -0
- package/src/global-account/react/components/ManageAccount/TokenBalanceRow.tsx +20 -5
- package/src/global-account/react/components/ManageAccount/TokenContent.tsx +66 -0
- package/src/global-account/react/components/ManageAccount/channels/DiscordChannel.tsx +119 -0
- package/src/global-account/react/components/ManageAccount/channels/EmailChannel.tsx +168 -0
- package/src/global-account/react/components/ManageAccount/channels/PhoneChannel.tsx +227 -0
- package/src/global-account/react/components/ManageAccount/channels/TelegramChannel.tsx +150 -0
- package/src/global-account/react/components/ManageAccount/channels/index.ts +4 -0
- package/src/global-account/react/components/ModalHeader/ModalHeader.tsx +61 -0
- package/src/global-account/react/components/Send/Send.tsx +621 -0
- package/src/global-account/react/components/SignInWithB3/SignIn.tsx +13 -12
- package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +1 -1
- package/src/global-account/react/components/Toast/README.md +350 -0
- package/src/global-account/react/components/Toast/ToastComponents.tsx +159 -0
- package/src/global-account/react/components/Toast/ToastContext.tsx +86 -0
- package/src/global-account/react/components/Toast/index.ts +4 -0
- package/src/global-account/react/components/Toast/toastApi.ts +98 -0
- package/src/global-account/react/components/WalletImage/WalletImage.tsx +12 -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 +19 -5
- package/src/global-account/react/components/ui/Tabs.tsx +5 -13
- package/src/global-account/react/components/ui/dialog.tsx +23 -14
- package/src/global-account/react/components/ui/drawer.tsx +1 -1
- package/src/global-account/react/hooks/index.ts +5 -1
- package/src/global-account/react/hooks/useAccountWallet.tsx +26 -0
- package/src/global-account/react/hooks/useB3BalanceFromAddresses.ts +1 -0
- package/src/global-account/react/hooks/useChainSwitchWithAction.ts +3 -2
- package/src/global-account/react/hooks/useNativeBalance.tsx +2 -1
- package/src/global-account/react/hooks/useNotifications.ts +229 -0
- package/src/global-account/react/hooks/useSimBalance.ts +3 -3
- package/src/global-account/react/hooks/useTokenBalanceDirect.tsx +2 -0
- package/src/global-account/react/hooks/useUnifiedChainSwitchAndExecute.ts +3 -2
- package/src/global-account/react/stores/index.ts +1 -0
- package/src/global-account/react/stores/useModalStore.ts +53 -6
- package/src/global-account/react/stores/useRecentAddressesStore.ts +54 -0
- package/src/global-account/react/utils/index.ts +4 -0
- package/src/global-account/react/utils/notificationsAPI.ts +305 -0
- package/src/global-account/react/utils/profileDisplay.ts +12 -4
- package/src/global-account/react/utils/toast.ts +6 -0
- package/src/shared/constants/chains/supported.ts +4 -0
- package/src/shared/utils/ipfs.ts +10 -3
- package/src/styles/index.css +12 -1
- package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.d.ts +0 -7
- package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.js +0 -107
- package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
- package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.js +0 -151
- package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.d.ts +0 -7
- package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.js +0 -104
- package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
- package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.js +0 -145
- package/dist/types/global-account/react/components/ManageAccount/BalanceContent.d.ts +0 -7
- package/dist/types/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
- package/src/global-account/react/components/ManageAccount/BalanceContent.tsx +0 -258
- package/src/global-account/react/components/ProfileEditor/ProfileEditor.tsx +0 -279
|
@@ -8,101 +8,337 @@ exports.AvatarEditor = AvatarEditor;
|
|
|
8
8
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
9
9
|
const app_1 = __importDefault(require("../../../../global-account/app"));
|
|
10
10
|
const react_1 = require("../../../../global-account/react");
|
|
11
|
+
const profileDisplay_1 = require("../../../../global-account/react/utils/profileDisplay");
|
|
11
12
|
const cn_1 = require("../../../../shared/utils/cn");
|
|
12
13
|
const debug_1 = require("../../../../shared/utils/debug");
|
|
14
|
+
const ipfs_1 = require("../../../../shared/utils/ipfs");
|
|
13
15
|
const thirdweb_1 = require("../../../../shared/utils/thirdweb");
|
|
14
16
|
const lucide_react_1 = require("lucide-react");
|
|
15
17
|
const react_2 = require("react");
|
|
16
|
-
const
|
|
18
|
+
const react_easy_crop_1 = __importDefault(require("react-easy-crop"));
|
|
19
|
+
require("react-easy-crop/react-easy-crop.css");
|
|
17
20
|
const react_3 = require("thirdweb/react");
|
|
18
21
|
const storage_1 = require("thirdweb/storage");
|
|
22
|
+
const stores_1 = require("../../stores");
|
|
23
|
+
const ModalHeader_1 = __importDefault(require("../ModalHeader/ModalHeader"));
|
|
19
24
|
const debug = (0, debug_1.debugB3React)("AvatarEditor");
|
|
25
|
+
// Helper function to create an image element from a URL
|
|
26
|
+
const createImage = (url) => new Promise((resolve, reject) => {
|
|
27
|
+
const image = new Image();
|
|
28
|
+
image.addEventListener("load", () => resolve(image));
|
|
29
|
+
image.addEventListener("error", error => reject(error));
|
|
30
|
+
image.setAttribute("crossOrigin", "anonymous");
|
|
31
|
+
image.src = url;
|
|
32
|
+
});
|
|
20
33
|
function AvatarEditor({ onSetAvatar, className }) {
|
|
34
|
+
const [viewStep, setViewStep] = (0, react_2.useState)("select");
|
|
35
|
+
const [selectedAvatar, setSelectedAvatar] = (0, react_2.useState)(null);
|
|
36
|
+
const [selectedProfileType, setSelectedProfileType] = (0, react_2.useState)(null); // Track which profile was selected
|
|
37
|
+
const [hoveredProfile, setHoveredProfile] = (0, react_2.useState)(null);
|
|
21
38
|
const [selectedFile, setSelectedFile] = (0, react_2.useState)(null);
|
|
22
39
|
const [previewUrl, setPreviewUrl] = (0, react_2.useState)(null);
|
|
23
|
-
const [isUploading, setIsUploading] = (0, react_2.useState)(false);
|
|
24
40
|
const [isSaving, setIsSaving] = (0, react_2.useState)(false);
|
|
41
|
+
const [isDragging, setIsDragging] = (0, react_2.useState)(false);
|
|
42
|
+
const [crop, setCrop] = (0, react_2.useState)({ x: 0, y: 0 });
|
|
43
|
+
const [zoom, setZoom] = (0, react_2.useState)(1);
|
|
44
|
+
const [croppedAreaPixels, setCroppedAreaPixels] = (0, react_2.useState)(null);
|
|
25
45
|
const fileInputRef = (0, react_2.useRef)(null);
|
|
26
|
-
const { setUser } = (0, react_1.useB3)();
|
|
46
|
+
const { setUser, user, partnerId } = (0, react_1.useB3)();
|
|
47
|
+
const setB3ModalContentType = (0, stores_1.useModalStore)(state => state.setB3ModalContentType);
|
|
48
|
+
const contentType = (0, stores_1.useModalStore)(state => state.contentType);
|
|
27
49
|
const account = (0, react_3.useActiveAccount)();
|
|
28
50
|
const { data: profile, refetch: refreshProfile } = (0, react_1.useProfile)({
|
|
29
51
|
address: account?.address,
|
|
30
52
|
fresh: true,
|
|
31
53
|
});
|
|
32
|
-
//
|
|
33
|
-
const
|
|
54
|
+
// Get raw avatar URLs, convert IPFS URLs, and validate them
|
|
55
|
+
const rawCurrentAvatar = user?.avatar || profile?.avatar;
|
|
56
|
+
const currentAvatar = (0, profileDisplay_1.validateImageUrl)(rawCurrentAvatar);
|
|
57
|
+
const safePreviewUrl = (0, profileDisplay_1.validateImageUrl)(previewUrl);
|
|
58
|
+
const onCropComplete = (0, react_2.useCallback)((_croppedArea, croppedAreaPixels) => {
|
|
59
|
+
setCroppedAreaPixels(croppedAreaPixels);
|
|
60
|
+
}, []);
|
|
61
|
+
const createCroppedImage = async (imageSrc, pixelCrop) => {
|
|
62
|
+
const image = await createImage(imageSrc);
|
|
63
|
+
const canvas = document.createElement("canvas");
|
|
64
|
+
const ctx = canvas.getContext("2d");
|
|
65
|
+
if (!ctx) {
|
|
66
|
+
throw new Error("Failed to get canvas context");
|
|
67
|
+
}
|
|
68
|
+
// Set canvas size to the crop area
|
|
69
|
+
canvas.width = pixelCrop.width;
|
|
70
|
+
canvas.height = pixelCrop.height;
|
|
71
|
+
// Draw the cropped image
|
|
72
|
+
ctx.drawImage(image, pixelCrop.x, pixelCrop.y, pixelCrop.width, pixelCrop.height, 0, 0, pixelCrop.width, pixelCrop.height);
|
|
73
|
+
// Return as blob
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
canvas.toBlob(blob => {
|
|
76
|
+
if (!blob) {
|
|
77
|
+
reject(new Error("Canvas is empty"));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
resolve(blob);
|
|
81
|
+
}, "image/jpeg");
|
|
82
|
+
});
|
|
83
|
+
};
|
|
34
84
|
const handleFileSelect = (event) => {
|
|
35
85
|
const file = event.target.files?.[0];
|
|
36
86
|
if (file) {
|
|
37
87
|
// Validate file type
|
|
38
88
|
if (!file.type.startsWith("image/")) {
|
|
39
|
-
|
|
89
|
+
react_1.toast.error("Please select an image file");
|
|
40
90
|
return;
|
|
41
91
|
}
|
|
42
92
|
// Validate file size (max 5MB)
|
|
43
93
|
if (file.size > 5 * 1024 * 1024) {
|
|
44
|
-
|
|
94
|
+
react_1.toast.error("File size must be less than 5MB");
|
|
45
95
|
return;
|
|
46
96
|
}
|
|
47
97
|
setSelectedFile(file);
|
|
98
|
+
// Clear profile type selection when uploading a new file
|
|
99
|
+
setSelectedProfileType(null);
|
|
48
100
|
// Create preview URL
|
|
49
101
|
const url = URL.createObjectURL(file);
|
|
50
102
|
setPreviewUrl(url);
|
|
103
|
+
setSelectedAvatar(url);
|
|
51
104
|
}
|
|
52
105
|
};
|
|
53
|
-
const
|
|
106
|
+
const handleRemovePreview = () => {
|
|
107
|
+
setSelectedAvatar(currentAvatar || null);
|
|
108
|
+
setSelectedProfileType(null);
|
|
54
109
|
setSelectedFile(null);
|
|
55
110
|
if (previewUrl) {
|
|
56
|
-
|
|
111
|
+
// Only revoke blob URLs (from file uploads), not regular URLs (from social profiles)
|
|
112
|
+
if (previewUrl.startsWith("blob:")) {
|
|
113
|
+
URL.revokeObjectURL(previewUrl);
|
|
114
|
+
}
|
|
57
115
|
setPreviewUrl(null);
|
|
58
116
|
}
|
|
59
117
|
if (fileInputRef.current) {
|
|
60
118
|
fileInputRef.current.value = "";
|
|
61
119
|
}
|
|
120
|
+
// Reset crop state
|
|
121
|
+
setCrop({ x: 0, y: 0 });
|
|
122
|
+
setZoom(1);
|
|
123
|
+
setCroppedAreaPixels(null);
|
|
62
124
|
};
|
|
63
|
-
const
|
|
64
|
-
if (!
|
|
65
|
-
|
|
125
|
+
const handleSaveChanges = async () => {
|
|
126
|
+
if (!account?.address) {
|
|
127
|
+
react_1.toast.error("No account connected");
|
|
66
128
|
return;
|
|
67
129
|
}
|
|
68
|
-
|
|
130
|
+
setIsSaving(true);
|
|
69
131
|
try {
|
|
70
|
-
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
132
|
+
let fileToUpload = null;
|
|
133
|
+
// If user uploaded a new file and cropped it
|
|
134
|
+
if (selectedFile && previewUrl && croppedAreaPixels) {
|
|
135
|
+
try {
|
|
136
|
+
const croppedBlob = await createCroppedImage(previewUrl, croppedAreaPixels);
|
|
137
|
+
const extension = selectedFile.name.split(".").pop() || "jpg";
|
|
138
|
+
fileToUpload = new File([croppedBlob], `avatar-cropped.${extension}`, { type: "image/jpeg" });
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
debug("Error cropping image:", error);
|
|
142
|
+
react_1.toast.error("Failed to crop image. Please try again.");
|
|
143
|
+
setIsSaving(false);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else if (selectedFile) {
|
|
148
|
+
// Fallback if no crop was made
|
|
149
|
+
fileToUpload = selectedFile;
|
|
150
|
+
}
|
|
151
|
+
else if (selectedProfileType && previewUrl && croppedAreaPixels) {
|
|
152
|
+
// User selected from social profile and cropped it
|
|
153
|
+
debug("Cropping social profile image:", previewUrl);
|
|
154
|
+
try {
|
|
155
|
+
const croppedBlob = await createCroppedImage(previewUrl, croppedAreaPixels);
|
|
156
|
+
fileToUpload = new File([croppedBlob], `avatar-${selectedProfileType}-cropped.jpg`, { type: "image/jpeg" });
|
|
157
|
+
debug("Successfully cropped social profile image");
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
debug("Error cropping social profile image:", error);
|
|
161
|
+
react_1.toast.error("Failed to crop image. Please try again.");
|
|
162
|
+
setIsSaving(false);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else if (selectedProfileType && selectedAvatar) {
|
|
167
|
+
// User selected from existing profile avatars without cropping
|
|
168
|
+
// Fetch the image from the URL and convert to blob
|
|
169
|
+
debug("Fetching image from social profile:", selectedAvatar);
|
|
170
|
+
try {
|
|
171
|
+
// Convert IPFS URLs to gateway URLs for fetching
|
|
172
|
+
const httpUrl = (0, ipfs_1.getIpfsUrl)(selectedAvatar);
|
|
173
|
+
const response = await fetch(httpUrl);
|
|
174
|
+
if (!response.ok) {
|
|
175
|
+
throw new Error("Failed to fetch image");
|
|
176
|
+
}
|
|
177
|
+
const blob = await response.blob();
|
|
178
|
+
debug("Fetched blob with type:", blob.type);
|
|
179
|
+
// Determine the correct extension from the blob's MIME type
|
|
180
|
+
// This handles URLs without extensions (like Farcaster images)
|
|
181
|
+
const mimeToExtension = {
|
|
182
|
+
"image/jpeg": "jpg",
|
|
183
|
+
"image/jpg": "jpg",
|
|
184
|
+
"image/png": "png",
|
|
185
|
+
"image/gif": "gif",
|
|
186
|
+
"image/webp": "webp",
|
|
187
|
+
"image/svg+xml": "svg",
|
|
188
|
+
};
|
|
189
|
+
const extension = blob.type ? mimeToExtension[blob.type.toLowerCase()] || "jpg" : "jpg";
|
|
190
|
+
const mimeType = blob.type || `image/${extension}`;
|
|
191
|
+
fileToUpload = new File([blob], `avatar-${selectedProfileType}.${extension}`, { type: mimeType });
|
|
192
|
+
debug("Successfully converted social profile image to file with extension:", extension);
|
|
193
|
+
}
|
|
194
|
+
catch (fetchError) {
|
|
195
|
+
debug("Error fetching social profile image:", fetchError);
|
|
196
|
+
react_1.toast.error("Failed to fetch profile image. Please try uploading manually.");
|
|
197
|
+
setIsSaving(false);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Upload to IPFS if we have a file
|
|
202
|
+
if (fileToUpload) {
|
|
203
|
+
debug("Starting upload to IPFS", fileToUpload);
|
|
204
|
+
// Upload to IPFS using Thirdweb
|
|
205
|
+
const ipfsUrl = await (0, storage_1.upload)({
|
|
206
|
+
client: thirdweb_1.client,
|
|
207
|
+
files: [fileToUpload],
|
|
208
|
+
});
|
|
209
|
+
debug("Upload successful", ipfsUrl);
|
|
210
|
+
// Save avatar URL using profiles service
|
|
211
|
+
const user = await app_1.default.service("users").setAvatar({
|
|
212
|
+
avatar: ipfsUrl,
|
|
213
|
+
},
|
|
214
|
+
// @ts-expect-error - our typed client is expecting context even though it's set elsewhere
|
|
215
|
+
{});
|
|
216
|
+
// update user
|
|
217
|
+
// @ts-expect-error this resolved fine, look into why expect-error needed
|
|
218
|
+
setUser(user);
|
|
219
|
+
react_1.toast.success("Looks great! Your avatar has been saved!");
|
|
220
|
+
}
|
|
87
221
|
// Refresh profile to get updated avatar
|
|
88
222
|
await refreshProfile();
|
|
89
|
-
sonner_1.toast.success(hasAvatar ? "Nice look! Your avatar has been updated!" : "Looks great! Your avatar has been saved!");
|
|
90
223
|
onSetAvatar?.();
|
|
91
|
-
// Clean up
|
|
92
|
-
handleRemoveFile();
|
|
93
224
|
}
|
|
94
225
|
catch (error) {
|
|
95
|
-
debug("Error
|
|
96
|
-
|
|
226
|
+
debug("Error saving avatar:", error);
|
|
227
|
+
react_1.toast.error("Failed to save avatar. Please try again.");
|
|
97
228
|
}
|
|
98
229
|
finally {
|
|
99
|
-
setIsUploading(false);
|
|
100
230
|
setIsSaving(false);
|
|
101
231
|
}
|
|
102
232
|
};
|
|
103
|
-
const
|
|
233
|
+
const handleCancel = () => {
|
|
234
|
+
if (viewStep === "upload") {
|
|
235
|
+
setViewStep("select");
|
|
236
|
+
handleRemovePreview();
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
setB3ModalContentType({
|
|
240
|
+
type: "manageAccount",
|
|
241
|
+
chain: contentType?.chain,
|
|
242
|
+
partnerId: partnerId,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
const handleProfileAvatarSelect = (avatarUrl, profileType) => {
|
|
247
|
+
setSelectedAvatar(avatarUrl);
|
|
248
|
+
setSelectedProfileType(profileType);
|
|
249
|
+
// Convert IPFS URLs to gateway URLs so the cropper can load them
|
|
250
|
+
const httpUrl = (0, ipfs_1.getIpfsUrl)(avatarUrl, 1);
|
|
251
|
+
// Set preview URL to the avatar so it shows in the cropper
|
|
252
|
+
setPreviewUrl(httpUrl);
|
|
253
|
+
// Clear any selected file since we're selecting from profile
|
|
254
|
+
setSelectedFile(null);
|
|
255
|
+
// Move to upload/crop view
|
|
256
|
+
setViewStep("upload");
|
|
257
|
+
};
|
|
258
|
+
const handleUploadImageClick = () => {
|
|
259
|
+
setViewStep("upload");
|
|
260
|
+
};
|
|
261
|
+
const handleOpenFilePicker = () => {
|
|
104
262
|
fileInputRef.current?.click();
|
|
105
263
|
};
|
|
106
|
-
const
|
|
107
|
-
|
|
264
|
+
const handleDragEnter = (e) => {
|
|
265
|
+
e.preventDefault();
|
|
266
|
+
e.stopPropagation();
|
|
267
|
+
setIsDragging(true);
|
|
268
|
+
};
|
|
269
|
+
const handleDragLeave = (e) => {
|
|
270
|
+
e.preventDefault();
|
|
271
|
+
e.stopPropagation();
|
|
272
|
+
setIsDragging(false);
|
|
273
|
+
};
|
|
274
|
+
const handleDragOver = (e) => {
|
|
275
|
+
e.preventDefault();
|
|
276
|
+
e.stopPropagation();
|
|
277
|
+
};
|
|
278
|
+
const handleDrop = (e) => {
|
|
279
|
+
e.preventDefault();
|
|
280
|
+
e.stopPropagation();
|
|
281
|
+
setIsDragging(false);
|
|
282
|
+
const file = e.dataTransfer.files?.[0];
|
|
283
|
+
if (file) {
|
|
284
|
+
// Validate file type
|
|
285
|
+
if (!file.type.startsWith("image/")) {
|
|
286
|
+
react_1.toast.error("Please select an image file");
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
// Validate file size (max 5MB)
|
|
290
|
+
if (file.size > 5 * 1024 * 1024) {
|
|
291
|
+
react_1.toast.error("File size must be less than 5MB");
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
setSelectedFile(file);
|
|
295
|
+
// Clear profile type selection when uploading a new file
|
|
296
|
+
setSelectedProfileType(null);
|
|
297
|
+
// Create preview URL
|
|
298
|
+
const url = URL.createObjectURL(file);
|
|
299
|
+
setPreviewUrl(url);
|
|
300
|
+
setSelectedAvatar(url);
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
const handleLinkMoreAccount = () => {
|
|
304
|
+
setB3ModalContentType({
|
|
305
|
+
type: "linkAccount",
|
|
306
|
+
chain: contentType?.chain,
|
|
307
|
+
partnerId: partnerId,
|
|
308
|
+
});
|
|
309
|
+
};
|
|
310
|
+
const isLoading = isSaving;
|
|
311
|
+
// Get profile avatars with validated URLs
|
|
312
|
+
const profileAvatars = profile?.profiles
|
|
313
|
+
?.filter(p => p.avatar)
|
|
314
|
+
.map(p => {
|
|
315
|
+
const rawAvatarUrl = p?.avatar || "";
|
|
316
|
+
const validatedUrl = (0, profileDisplay_1.validateImageUrl)(rawAvatarUrl);
|
|
317
|
+
return {
|
|
318
|
+
type: p.type,
|
|
319
|
+
avatar: validatedUrl,
|
|
320
|
+
name: p.name || p.type,
|
|
321
|
+
};
|
|
322
|
+
})
|
|
323
|
+
.filter(p => p.avatar !== null) || []; // Filter out profiles with invalid avatars
|
|
324
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("b3-modal-avatar-editor 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.jsx)("div", { className: "relative mb-6", children: (0, jsx_runtime_1.jsx)("div", { className: "h-32 w-32 overflow-hidden rounded-full", children: safePreviewUrl || selectedAvatar || currentAvatar ? ((0, jsx_runtime_1.jsx)(react_1.IPFSMediaRenderer, { src: safePreviewUrl || selectedAvatar || currentAvatar || "", alt: "Avatar preview", className: "h-full w-full object-cover" })) : ((0, jsx_runtime_1.jsx)("div", { className: "bg-b3-primary-wash h-full w-full" })) }) }), (0, jsx_runtime_1.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: [(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) => {
|
|
325
|
+
// Skip if avatar is null (should not happen due to filter, but TypeScript doesn't know that)
|
|
326
|
+
if (!profileAvatar.avatar)
|
|
327
|
+
return null;
|
|
328
|
+
return ((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 || "", profileAvatar.type || ""), className: (0, cn_1.cn)("h-16 w-16 overflow-hidden rounded-full border-2 transition-all", selectedProfileType === profileAvatar.type
|
|
329
|
+
? "border-[#3368ef] ring-2 ring-[#3368ef]/20"
|
|
330
|
+
: "border-transparent hover:border-[#e4e4e7]"), children: (0, jsx_runtime_1.jsx)(react_1.IPFSMediaRenderer, { 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 }))] }, profileAvatar.type + "-" + index));
|
|
331
|
+
}) }), (0, jsx_runtime_1.jsxs)("button", { onClick: handleLinkMoreAccount, className: "b3-modal-link-more-account 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 accounts"] })] })] })) : ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: !selectedFile && !previewUrl ? ((0, jsx_runtime_1.jsxs)("div", { onClick: handleOpenFilePicker, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: (0, cn_1.cn)("b3-modal-upload-view mb-6 flex w-full cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed p-16 transition-colors", isDragging
|
|
332
|
+
? "border-[#3368ef] bg-[#f0f5ff]"
|
|
333
|
+
: "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.jsxs)("div", { className: "mb-6 w-full", children: [(0, jsx_runtime_1.jsx)("div", { className: "relative aspect-square w-full overflow-hidden rounded-xl bg-[#f4f4f5]", children: safePreviewUrl ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_easy_crop_1.default, { image: safePreviewUrl, crop: crop, zoom: zoom, aspect: 1, onCropChange: setCrop, onCropComplete: onCropComplete, onZoomChange: setZoom, cropShape: "rect", showGrid: false, style: {
|
|
334
|
+
containerStyle: {
|
|
335
|
+
width: "100%",
|
|
336
|
+
height: "100%",
|
|
337
|
+
backgroundColor: "#f4f4f5",
|
|
338
|
+
},
|
|
339
|
+
cropAreaStyle: {
|
|
340
|
+
border: "2px solid #3368ef",
|
|
341
|
+
borderRadius: "0px",
|
|
342
|
+
},
|
|
343
|
+
} }), (0, jsx_runtime_1.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: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "h-4 w-4" }) })] })) : ((0, jsx_runtime_1.jsx)("div", { className: "bg-b3-primary-wash h-full w-full" })) }), safePreviewUrl && ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)("label", { className: "shrink-0 text-sm font-semibold text-[#475467]", children: "Zoom" }), (0, jsx_runtime_1.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]" })] }))] })) })), (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 || (!selectedFile && !selectedProfileType), className: "b3-modal-save-button 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
344
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.B3DynamicModal = B3DynamicModal;
|
|
4
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
@@ -9,26 +12,35 @@ const AnySpendStakeUpsideExactIn_1 = require("../../../anyspend/react/components
|
|
|
9
12
|
const react_2 = require("../../../global-account/react");
|
|
10
13
|
const cn_1 = require("../../../shared/utils/cn");
|
|
11
14
|
const debug_1 = require("../../../shared/utils/debug");
|
|
15
|
+
const framer_motion_1 = require("framer-motion");
|
|
12
16
|
const react_3 = require("react");
|
|
13
17
|
const react_4 = require("thirdweb/react");
|
|
14
18
|
const AvatarEditor_1 = require("./AvatarEditor/AvatarEditor");
|
|
15
19
|
const useB3_1 = require("./B3Provider/useB3");
|
|
20
|
+
const Deposit_1 = require("./Deposit/Deposit");
|
|
16
21
|
const LinkAccount_1 = require("./LinkAccount/LinkAccount");
|
|
17
|
-
const
|
|
22
|
+
const LinkNewAccount_1 = require("./LinkAccount/LinkNewAccount");
|
|
18
23
|
const ManageAccount_1 = require("./ManageAccount/ManageAccount");
|
|
24
|
+
const NotificationsContent_1 = __importDefault(require("./ManageAccount/NotificationsContent"));
|
|
19
25
|
const RequestPermissions_1 = require("./RequestPermissions/RequestPermissions");
|
|
26
|
+
const Send_1 = require("./Send/Send");
|
|
20
27
|
const SignInWithB3Flow_1 = require("./SignInWithB3/SignInWithB3Flow");
|
|
28
|
+
const index_1 = require("./Toast/index");
|
|
21
29
|
const dialog_1 = require("./ui/dialog");
|
|
22
30
|
const drawer_1 = require("./ui/drawer");
|
|
23
31
|
const AnySpendDepositUpside_1 = require("../../../anyspend/react/components/AnySpendDepositUpside");
|
|
24
32
|
const debug = (0, debug_1.debugB3React)("B3DynamicModal");
|
|
25
33
|
function B3DynamicModal() {
|
|
26
|
-
const
|
|
34
|
+
const isOpen = (0, react_2.useModalStore)(state => state.isOpen);
|
|
35
|
+
const setB3ModalOpen = (0, react_2.useModalStore)(state => state.setB3ModalOpen);
|
|
36
|
+
const contentType = (0, react_2.useModalStore)(state => state.contentType);
|
|
37
|
+
const navigateBack = (0, react_2.useModalStore)(state => state.navigateBack);
|
|
27
38
|
const { theme } = (0, useB3_1.useB3)();
|
|
28
39
|
const isMobile = (0, react_2.useIsMobile)();
|
|
29
40
|
const prevIsOpenRef = (0, react_3.useRef)(isOpen);
|
|
30
41
|
const { wallet } = (0, react_2.useGlobalAccount)();
|
|
31
42
|
const setActiveWallet = (0, react_4.useSetActiveWallet)();
|
|
43
|
+
const { toasts, removeToast } = (0, index_1.useToastContext)();
|
|
32
44
|
// anyspend cleanup global account chnages by setting account back
|
|
33
45
|
(0, react_3.useEffect)(() => {
|
|
34
46
|
if (prevIsOpenRef.current && !isOpen) {
|
|
@@ -54,8 +66,11 @@ function B3DynamicModal() {
|
|
|
54
66
|
"anySpendSignatureMint",
|
|
55
67
|
"anySpendBondKit",
|
|
56
68
|
"linkAccount",
|
|
69
|
+
"linkNewAccount",
|
|
57
70
|
"avatarEditor",
|
|
58
|
-
"
|
|
71
|
+
"deposit",
|
|
72
|
+
"send",
|
|
73
|
+
"notifications",
|
|
59
74
|
];
|
|
60
75
|
const freestyleTypes = [
|
|
61
76
|
"anySpendNft",
|
|
@@ -71,10 +86,10 @@ function B3DynamicModal() {
|
|
|
71
86
|
];
|
|
72
87
|
// Check if current content type is in freestyle types
|
|
73
88
|
const isFreestyleType = freestyleTypes.includes(contentType?.type);
|
|
74
|
-
const hideCloseButton =
|
|
89
|
+
const hideCloseButton = true;
|
|
75
90
|
// Build content class using cn utility
|
|
76
91
|
// eslint-disable-next-line tailwindcss/no-custom-classname
|
|
77
|
-
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:
|
|
92
|
+
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:p-0", contentType?.type === "send" && "p-0", contentType?.type === "manageAccount" && " md:p-0 md:pt-2", contentType?.type === "linkAccount" && "md:p-0");
|
|
78
93
|
debug("contentType", contentType);
|
|
79
94
|
const renderContent = () => {
|
|
80
95
|
if (!contentType)
|
|
@@ -97,7 +112,7 @@ function B3DynamicModal() {
|
|
|
97
112
|
case "anySpendFundTournament":
|
|
98
113
|
return (0, jsx_runtime_1.jsx)(react_1.AnySpendTournament, { ...contentType, mode: "modal", action: "fund" });
|
|
99
114
|
case "anySpendOrderHistory":
|
|
100
|
-
return (0, jsx_runtime_1.jsx)(react_1.OrderHistory, {
|
|
115
|
+
return (0, jsx_runtime_1.jsx)(react_1.OrderHistory, { ...contentType, mode: "modal" });
|
|
101
116
|
case "anySpendStakeB3":
|
|
102
117
|
return (0, jsx_runtime_1.jsx)(react_1.AnySpendStakeB3, { ...contentType, mode: "modal" });
|
|
103
118
|
case "anySpendStakeB3ExactIn":
|
|
@@ -116,14 +131,20 @@ function B3DynamicModal() {
|
|
|
116
131
|
return (0, jsx_runtime_1.jsx)(react_1.AnySpendBondKit, { ...contentType });
|
|
117
132
|
case "linkAccount":
|
|
118
133
|
return (0, jsx_runtime_1.jsx)(LinkAccount_1.LinkAccount, { ...contentType });
|
|
134
|
+
case "linkNewAccount":
|
|
135
|
+
return (0, jsx_runtime_1.jsx)(LinkNewAccount_1.LinkNewAccount, { ...contentType });
|
|
119
136
|
case "anySpendDepositHype":
|
|
120
137
|
return (0, jsx_runtime_1.jsx)(AnyspendDepositHype_1.AnySpendDepositHype, { ...contentType, mode: "modal" });
|
|
121
138
|
case "anySpendCollectorClubPurchase":
|
|
122
139
|
return (0, jsx_runtime_1.jsx)(react_1.AnySpendCollectorClubPurchase, { ...contentType, mode: "modal" });
|
|
123
140
|
case "avatarEditor":
|
|
124
141
|
return (0, jsx_runtime_1.jsx)(AvatarEditor_1.AvatarEditor, { onSetAvatar: contentType.onSuccess });
|
|
125
|
-
case "
|
|
126
|
-
return (0, jsx_runtime_1.jsx)(
|
|
142
|
+
case "deposit":
|
|
143
|
+
return (0, jsx_runtime_1.jsx)(Deposit_1.Deposit, {});
|
|
144
|
+
case "send":
|
|
145
|
+
return (0, jsx_runtime_1.jsx)(Send_1.Send, { ...contentType });
|
|
146
|
+
case "notifications":
|
|
147
|
+
return (0, jsx_runtime_1.jsx)(NotificationsContent_1.default, { ...contentType });
|
|
127
148
|
// Add other modal types here
|
|
128
149
|
default:
|
|
129
150
|
return null;
|
|
@@ -133,9 +154,15 @@ function B3DynamicModal() {
|
|
|
133
154
|
const ModalContent = isMobile ? drawer_1.DrawerContent : dialog_1.DialogContent;
|
|
134
155
|
const ModalTitle = isMobile ? drawer_1.DrawerTitle : dialog_1.DialogTitle;
|
|
135
156
|
const ModalDescription = isMobile ? drawer_1.DrawerDescription : dialog_1.DialogDescription;
|
|
136
|
-
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",
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
157
|
+
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" ||
|
|
158
|
+
contentType?.type === "deposit" ||
|
|
159
|
+
contentType?.type === "send" ||
|
|
160
|
+
contentType?.type === "avatarEditor" ||
|
|
161
|
+
contentType?.type === "notifications") &&
|
|
162
|
+
"p-0", "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 flex max-h-[90dvh] flex-col overflow-auto sm:max-h-[80dvh]"), children: [!hideCloseButton && ((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" })] })), (0, jsx_runtime_1.jsx)("div", { className: "flex-1", children: renderContent() }), (0, jsx_runtime_1.jsx)(framer_motion_1.AnimatePresence, { children: toasts.length > 0 && ((0, jsx_runtime_1.jsx)(framer_motion_1.motion.div, { initial: { height: 0 }, animate: { height: "auto" }, exit: { height: 0 }, transition: { duration: 0.3, ease: "easeInOut" }, className: "toast-section relative z-10 overflow-hidden bg-white dark:border-gray-800 dark:bg-gray-900", children: (0, jsx_runtime_1.jsx)(framer_motion_1.motion.div, { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 }, transition: { duration: 0.2, delay: 0.1 }, className: "p-4 pt-0", children: (0, jsx_runtime_1.jsx)(index_1.ToastContainer, { toasts: toasts, onDismiss: removeToast, theme: theme }) }) })) })] })] }), isOpen && ((0, jsx_runtime_1.jsx)("style", { children: `
|
|
163
|
+
.modal-inner-content {
|
|
164
|
+
transition: margin-bottom 0.3s ease-in-out;
|
|
165
|
+
margin-bottom: ${toasts.length > 0 ? "0px" : "23px"} !important;
|
|
166
|
+
}
|
|
167
|
+
` })), contentType?.type === "avatarEditor" && ((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" }) }) }))] }));
|
|
141
168
|
}
|
|
@@ -9,7 +9,7 @@ import { B3ContextType } from "./types";
|
|
|
9
9
|
/**
|
|
10
10
|
* Main B3Provider component
|
|
11
11
|
*/
|
|
12
|
-
export declare function B3Provider({ theme, children, accountOverride, environment, automaticallySetFirstEoa, simDuneApiKey, toaster, clientType, rpcUrls, partnerId, onConnect, connectors, overrideDefaultConnectors, createClientReferenceId, }: {
|
|
12
|
+
export declare function B3Provider({ theme, children, accountOverride, environment, automaticallySetFirstEoa, simDuneApiKey, toaster: _toaster, clientType, rpcUrls, partnerId, onConnect, connectors, overrideDefaultConnectors, createClientReferenceId, }: {
|
|
13
13
|
theme: "light" | "dark";
|
|
14
14
|
children: React.ReactNode;
|
|
15
15
|
accountOverride?: Account;
|
|
@@ -10,11 +10,11 @@ const debug_1 = require("../../../../shared/utils/debug");
|
|
|
10
10
|
require("@relayprotocol/relay-kit-ui/styles.css");
|
|
11
11
|
const react_query_1 = require("@tanstack/react-query");
|
|
12
12
|
const react_2 = require("react");
|
|
13
|
-
const sonner_1 = require("sonner");
|
|
14
13
|
const react_3 = require("thirdweb/react");
|
|
15
14
|
const wagmi_1 = require("wagmi");
|
|
16
15
|
const client_manager_1 = require("../../../client-manager");
|
|
17
16
|
const StyleRoot_1 = require("../StyleRoot");
|
|
17
|
+
const index_1 = require("../Toast/index");
|
|
18
18
|
const LocalSDKProvider_1 = require("./LocalSDKProvider");
|
|
19
19
|
const types_1 = require("./types");
|
|
20
20
|
const debug = (0, debug_1.debugB3React)("B3Provider");
|
|
@@ -32,7 +32,9 @@ const queryClient = new react_query_1.QueryClient();
|
|
|
32
32
|
/**
|
|
33
33
|
* Main B3Provider component
|
|
34
34
|
*/
|
|
35
|
-
function B3Provider({ theme = "light", children, accountOverride, environment, automaticallySetFirstEoa, simDuneApiKey,
|
|
35
|
+
function B3Provider({ theme = "light", children, accountOverride, environment, automaticallySetFirstEoa, simDuneApiKey,
|
|
36
|
+
// deprecated since v0.0.87
|
|
37
|
+
toaster: _toaster, clientType = "rest", rpcUrls, partnerId, onConnect, connectors, overrideDefaultConnectors = false, createClientReferenceId, }) {
|
|
36
38
|
// Initialize Google Analytics on mount
|
|
37
39
|
(0, react_2.useEffect)(() => {
|
|
38
40
|
(0, analytics_1.loadGA4Script)();
|
|
@@ -42,7 +44,7 @@ function B3Provider({ theme = "light", children, accountOverride, environment, a
|
|
|
42
44
|
(0, client_manager_1.setClientType)(clientType);
|
|
43
45
|
}, [clientType]);
|
|
44
46
|
const wagmiConfig = (0, createWagmiConfig_1.createWagmiConfig)({ partnerId, rpcUrls, connectors, overrideDefaultConnectors });
|
|
45
|
-
return ((0, jsx_runtime_1.jsx)(react_3.ThirdwebProvider, { children: (0, jsx_runtime_1.jsx)(wagmi_1.WagmiProvider, { config: wagmiConfig, reconnectOnMount: false, children: (0, jsx_runtime_1.jsx)(react_query_1.QueryClientProvider, { client: queryClient, children: (0, jsx_runtime_1.jsx)(react_1.TooltipProvider, { children: (0, jsx_runtime_1.jsx)(LocalSDKProvider_1.LocalSDKProvider, { onConnectCallback: onConnect, children: (0, jsx_runtime_1.
|
|
47
|
+
return ((0, jsx_runtime_1.jsx)(react_3.ThirdwebProvider, { children: (0, jsx_runtime_1.jsx)(wagmi_1.WagmiProvider, { config: wagmiConfig, reconnectOnMount: false, children: (0, jsx_runtime_1.jsx)(react_query_1.QueryClientProvider, { client: queryClient, children: (0, jsx_runtime_1.jsx)(react_1.TooltipProvider, { children: (0, jsx_runtime_1.jsx)(index_1.ToastProvider, { children: (0, jsx_runtime_1.jsx)(LocalSDKProvider_1.LocalSDKProvider, { onConnectCallback: onConnect, children: (0, jsx_runtime_1.jsxs)(InnerProvider, { accountOverride: accountOverride, environment: environment, theme: theme, automaticallySetFirstEoa: !!automaticallySetFirstEoa, clientType: clientType, partnerId: partnerId, createClientReferenceId: createClientReferenceId, children: [(0, jsx_runtime_1.jsx)(ToastContextConnector, {}), (0, jsx_runtime_1.jsxs)(react_1.RelayKitProviderWrapper, { simDuneApiKey: simDuneApiKey, children: [children, (0, jsx_runtime_1.jsx)(StyleRoot_1.StyleRoot, { id: "b3-root" })] })] }) }) }) }) }) }) }));
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
48
50
|
* Inner provider component that provides the actual B3Context
|
|
@@ -107,3 +109,17 @@ function InnerProvider({ children, accountOverride, environment, defaultPermissi
|
|
|
107
109
|
const InnerProvider2 = ({ children }) => {
|
|
108
110
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
109
111
|
};
|
|
112
|
+
/**
|
|
113
|
+
* Component to connect the toast context to the global toast API
|
|
114
|
+
*/
|
|
115
|
+
function ToastContextConnector() {
|
|
116
|
+
const toastContext = (0, index_1.useToastContext)();
|
|
117
|
+
(0, react_2.useEffect)(() => {
|
|
118
|
+
(0, index_1.setToastContext)({
|
|
119
|
+
addToast: toastContext.addToast,
|
|
120
|
+
removeToast: toastContext.removeToast,
|
|
121
|
+
clearAll: toastContext.clearAll,
|
|
122
|
+
});
|
|
123
|
+
}, [toastContext]);
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Deposit(): import("react/jsx-runtime").JSX.Element;
|