@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.
Files changed (461) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.js +75 -50
  2. package/dist/cjs/anyspend/react/components/AnySpendBuySpin.js +9 -10
  3. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +41 -41
  4. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -0
  5. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +17 -9
  6. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +7 -8
  7. package/dist/cjs/anyspend/react/components/AnySpendStakeB3ExactIn.js +7 -8
  8. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.d.ts +2 -1
  9. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +2 -2
  10. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
  11. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +18 -14
  12. package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.js +1 -1
  13. package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.js +2 -2
  14. package/dist/cjs/anyspend/react/components/common/InsufficientDepositPayment.js +6 -6
  15. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +35 -35
  16. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +1 -2
  17. package/dist/cjs/anyspend/react/components/common/OrderHistory.d.ts +1 -1
  18. package/dist/cjs/anyspend/react/components/common/OrderHistory.js +7 -3
  19. package/dist/cjs/anyspend/react/components/common/OrderHistoryItem.js +1 -1
  20. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +4 -4
  21. package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +8 -9
  22. package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.js +1 -1
  23. package/dist/cjs/anyspend/react/components/common/RecipientSelection.js +1 -1
  24. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +2 -3
  25. package/dist/cjs/anyspend/react/components/webview/WebviewOnrampOrderStatus.js +1 -2
  26. package/dist/cjs/anyspend/react/components/webview/WebviewOnrampPayment.js +12 -12
  27. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +4 -5
  28. package/dist/cjs/anyspend/react/hooks/useConnectedWalletDisplay.js +3 -2
  29. package/dist/cjs/anyspend/react/hooks/usePhantomTransfer.js +17 -17
  30. package/dist/cjs/anyspend/react/utils/toast.d.ts +6 -0
  31. package/dist/cjs/anyspend/react/utils/toast.js +9 -0
  32. package/dist/cjs/global-account/react/components/AccountAssets/AccountAssets.js +38 -2
  33. package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.js +2 -3
  34. package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +1 -0
  35. package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.js +275 -39
  36. package/dist/cjs/global-account/react/components/B3DynamicModal.js +40 -13
  37. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
  38. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +19 -3
  39. package/dist/cjs/global-account/react/components/Deposit/Deposit.d.ts +1 -0
  40. package/dist/cjs/global-account/react/components/Deposit/Deposit.js +61 -0
  41. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
  42. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +34 -0
  43. package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
  44. package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.js +104 -283
  45. package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
  46. package/dist/cjs/global-account/react/components/LinkAccount/LinkNewAccount.js +320 -0
  47. package/dist/cjs/global-account/react/components/LinkAccount/LinkedAccountItem.d.ts +16 -0
  48. package/dist/cjs/global-account/react/components/LinkAccount/LinkedAccountItem.js +44 -0
  49. package/dist/cjs/global-account/react/components/ManageAccount/BottomNavigation.d.ts +2 -0
  50. package/dist/cjs/global-account/react/components/ManageAccount/BottomNavigation.js +23 -0
  51. package/dist/cjs/global-account/react/components/ManageAccount/ContentTokens.js +1 -2
  52. package/dist/cjs/global-account/react/components/ManageAccount/Header.d.ts +3 -0
  53. package/dist/cjs/global-account/react/components/ManageAccount/Header.js +120 -0
  54. package/dist/cjs/global-account/react/components/ManageAccount/HomeActions.d.ts +5 -0
  55. package/dist/cjs/global-account/react/components/ManageAccount/HomeActions.js +43 -0
  56. package/dist/cjs/global-account/react/components/ManageAccount/HomeContent.d.ts +6 -0
  57. package/dist/cjs/global-account/react/components/ManageAccount/HomeContent.js +16 -0
  58. package/dist/cjs/global-account/react/components/ManageAccount/ManageAccount.js +16 -194
  59. package/dist/cjs/global-account/react/components/ManageAccount/NFTContent.d.ts +2 -0
  60. package/dist/cjs/global-account/react/components/ManageAccount/NFTContent.js +15 -0
  61. package/dist/cjs/global-account/react/components/ManageAccount/NotificationChannel.d.ts +16 -0
  62. package/dist/cjs/global-account/react/components/ManageAccount/NotificationChannel.js +13 -0
  63. package/dist/cjs/global-account/react/components/ManageAccount/NotificationsContent.d.ts +8 -0
  64. package/dist/cjs/global-account/react/components/ManageAccount/NotificationsContent.js +152 -0
  65. package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
  66. package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +47 -0
  67. package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
  68. package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +60 -0
  69. package/dist/cjs/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +9 -0
  70. package/dist/cjs/global-account/react/components/ManageAccount/SettingsMenuItem.js +8 -0
  71. package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +2 -0
  72. package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +116 -0
  73. package/dist/cjs/global-account/react/components/ManageAccount/TokenBalanceRow.d.ts +3 -3
  74. package/dist/cjs/global-account/react/components/ManageAccount/TokenBalanceRow.js +2 -2
  75. package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
  76. package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.js +44 -0
  77. package/dist/cjs/global-account/react/components/ManageAccount/channels/DiscordChannel.d.ts +11 -0
  78. package/dist/cjs/global-account/react/components/ManageAccount/channels/DiscordChannel.js +48 -0
  79. package/dist/cjs/global-account/react/components/ManageAccount/channels/EmailChannel.d.ts +11 -0
  80. package/dist/cjs/global-account/react/components/ManageAccount/channels/EmailChannel.js +68 -0
  81. package/dist/cjs/global-account/react/components/ManageAccount/channels/PhoneChannel.d.ts +14 -0
  82. package/dist/cjs/global-account/react/components/ManageAccount/channels/PhoneChannel.js +79 -0
  83. package/dist/cjs/global-account/react/components/ManageAccount/channels/TelegramChannel.d.ts +11 -0
  84. package/dist/cjs/global-account/react/components/ManageAccount/channels/TelegramChannel.js +79 -0
  85. package/dist/cjs/global-account/react/components/ManageAccount/channels/index.d.ts +4 -0
  86. package/dist/cjs/global-account/react/components/ManageAccount/channels/index.js +11 -0
  87. package/dist/cjs/global-account/react/components/ModalHeader/ModalHeader.d.ts +11 -0
  88. package/dist/cjs/global-account/react/components/ModalHeader/ModalHeader.js +12 -0
  89. package/dist/cjs/global-account/react/components/Send/Send.d.ts +5 -0
  90. package/dist/cjs/global-account/react/components/Send/Send.js +195 -0
  91. package/dist/cjs/global-account/react/components/SignInWithB3/SignIn.js +5 -4
  92. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +1 -1
  93. package/dist/cjs/global-account/react/components/Toast/ToastComponents.d.ts +15 -0
  94. package/dist/cjs/global-account/react/components/Toast/ToastComponents.js +54 -0
  95. package/dist/cjs/global-account/react/components/Toast/ToastContext.d.ts +19 -0
  96. package/dist/cjs/global-account/react/components/Toast/ToastContext.js +59 -0
  97. package/dist/cjs/global-account/react/components/Toast/index.d.ts +4 -0
  98. package/dist/cjs/global-account/react/components/Toast/index.js +12 -0
  99. package/dist/cjs/global-account/react/components/Toast/toastApi.d.ts +21 -0
  100. package/dist/cjs/global-account/react/components/Toast/toastApi.js +93 -0
  101. package/dist/cjs/global-account/react/components/WalletImage/WalletImage.d.ts +4 -0
  102. package/dist/cjs/global-account/react/components/WalletImage/WalletImage.js +13 -0
  103. package/dist/cjs/global-account/react/components/icons/BellIcon.d.ts +3 -0
  104. package/dist/cjs/global-account/react/components/icons/BellIcon.js +5 -0
  105. package/dist/cjs/global-account/react/components/icons/ChevronDownIcon.d.ts +2 -0
  106. package/dist/cjs/global-account/react/components/icons/ChevronDownIcon.js +7 -0
  107. package/dist/cjs/global-account/react/components/icons/CopyIcon.d.ts +2 -0
  108. package/dist/cjs/global-account/react/components/icons/CopyIcon.js +7 -0
  109. package/dist/cjs/global-account/react/components/icons/LinkIcon.d.ts +3 -0
  110. package/dist/cjs/global-account/react/components/icons/LinkIcon.js +5 -0
  111. package/dist/cjs/global-account/react/components/icons/LockIcon.d.ts +3 -0
  112. package/dist/cjs/global-account/react/components/icons/LockIcon.js +5 -0
  113. package/dist/cjs/global-account/react/components/icons/WalletIcon.d.ts +2 -0
  114. package/dist/cjs/global-account/react/components/icons/WalletIcon.js +7 -0
  115. package/dist/cjs/global-account/react/components/index.d.ts +10 -4
  116. package/dist/cjs/global-account/react/components/index.js +29 -9
  117. package/dist/cjs/global-account/react/components/ui/Tabs.js +2 -2
  118. package/dist/cjs/global-account/react/components/ui/dialog.js +2 -2
  119. package/dist/cjs/global-account/react/components/ui/drawer.js +1 -1
  120. package/dist/cjs/global-account/react/hooks/index.d.ts +3 -2
  121. package/dist/cjs/global-account/react/hooks/index.js +7 -3
  122. package/dist/cjs/global-account/react/hooks/useAccountWallet.d.ts +1 -0
  123. package/dist/cjs/global-account/react/hooks/useAccountWallet.js +18 -0
  124. package/dist/cjs/global-account/react/hooks/useB3BalanceFromAddresses.js +1 -0
  125. package/dist/cjs/global-account/react/hooks/useChainSwitchWithAction.js +11 -11
  126. package/dist/cjs/global-account/react/hooks/useNativeBalance.js +2 -2
  127. package/dist/cjs/global-account/react/hooks/useNotifications.d.ts +48 -0
  128. package/dist/cjs/global-account/react/hooks/useNotifications.js +189 -0
  129. package/dist/cjs/global-account/react/hooks/useSimBalance.js +3 -3
  130. package/dist/cjs/global-account/react/hooks/useTokenBalanceDirect.d.ts +1 -0
  131. package/dist/cjs/global-account/react/hooks/useTokenBalanceDirect.js +1 -0
  132. package/dist/cjs/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +17 -17
  133. package/dist/cjs/global-account/react/stores/index.d.ts +1 -0
  134. package/dist/cjs/global-account/react/stores/index.js +3 -1
  135. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +47 -6
  136. package/dist/cjs/global-account/react/stores/useRecentAddressesStore.d.ts +25 -0
  137. package/dist/cjs/global-account/react/stores/useRecentAddressesStore.js +36 -0
  138. package/dist/cjs/global-account/react/utils/index.d.ts +4 -0
  139. package/dist/cjs/global-account/react/utils/index.js +20 -0
  140. package/dist/cjs/global-account/react/utils/notificationsAPI.d.ts +80 -0
  141. package/dist/cjs/global-account/react/utils/notificationsAPI.js +257 -0
  142. package/dist/cjs/global-account/react/utils/profileDisplay.d.ts +3 -0
  143. package/dist/cjs/global-account/react/utils/profileDisplay.js +8 -4
  144. package/dist/cjs/global-account/react/utils/toast.d.ts +6 -0
  145. package/dist/cjs/global-account/react/utils/toast.js +9 -0
  146. package/dist/cjs/shared/constants/chains/supported.d.ts +3 -2
  147. package/dist/cjs/shared/constants/chains/supported.js +4 -0
  148. package/dist/cjs/shared/utils/ipfs.js +10 -3
  149. package/dist/esm/anyspend/react/components/AnySpend.js +67 -42
  150. package/dist/esm/anyspend/react/components/AnySpendBuySpin.js +1 -2
  151. package/dist/esm/anyspend/react/components/AnySpendCustom.js +10 -10
  152. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -0
  153. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +12 -4
  154. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +1 -2
  155. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +1 -2
  156. package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +2 -1
  157. package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +2 -2
  158. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
  159. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +9 -5
  160. package/dist/esm/anyspend/react/components/common/FeeDetailPanel.js +1 -1
  161. package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.js +2 -2
  162. package/dist/esm/anyspend/react/components/common/InsufficientDepositPayment.js +1 -1
  163. package/dist/esm/anyspend/react/components/common/OrderDetails.js +2 -2
  164. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +1 -2
  165. package/dist/esm/anyspend/react/components/common/OrderHistory.d.ts +1 -1
  166. package/dist/esm/anyspend/react/components/common/OrderHistory.js +6 -5
  167. package/dist/esm/anyspend/react/components/common/OrderHistoryItem.js +2 -2
  168. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +4 -4
  169. package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +2 -3
  170. package/dist/esm/anyspend/react/components/common/PointsDetailPanel.js +1 -1
  171. package/dist/esm/anyspend/react/components/common/RecipientSelection.js +1 -1
  172. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +1 -2
  173. package/dist/esm/anyspend/react/components/webview/WebviewOnrampOrderStatus.js +1 -2
  174. package/dist/esm/anyspend/react/components/webview/WebviewOnrampPayment.js +1 -1
  175. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +1 -2
  176. package/dist/esm/anyspend/react/hooks/useConnectedWalletDisplay.js +3 -2
  177. package/dist/esm/anyspend/react/hooks/usePhantomTransfer.js +1 -1
  178. package/dist/esm/anyspend/react/utils/toast.d.ts +6 -0
  179. package/dist/esm/anyspend/react/utils/toast.js +5 -0
  180. package/dist/esm/global-account/react/components/AccountAssets/AccountAssets.js +38 -2
  181. package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.js +1 -2
  182. package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +1 -0
  183. package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.js +276 -40
  184. package/dist/esm/global-account/react/components/B3DynamicModal.js +37 -13
  185. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
  186. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +19 -3
  187. package/dist/esm/global-account/react/components/Deposit/Deposit.d.ts +1 -0
  188. package/dist/esm/global-account/react/components/Deposit/Deposit.js +55 -0
  189. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
  190. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +31 -0
  191. package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
  192. package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.js +103 -283
  193. package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
  194. package/dist/esm/global-account/react/components/LinkAccount/LinkNewAccount.js +314 -0
  195. package/dist/esm/global-account/react/components/LinkAccount/LinkedAccountItem.d.ts +16 -0
  196. package/dist/esm/global-account/react/components/LinkAccount/LinkedAccountItem.js +42 -0
  197. package/dist/esm/global-account/react/components/ManageAccount/BottomNavigation.d.ts +2 -0
  198. package/dist/esm/global-account/react/components/ManageAccount/BottomNavigation.js +21 -0
  199. package/dist/esm/global-account/react/components/ManageAccount/ContentTokens.js +1 -2
  200. package/dist/esm/global-account/react/components/ManageAccount/Header.d.ts +3 -0
  201. package/dist/esm/global-account/react/components/ManageAccount/Header.js +81 -0
  202. package/dist/esm/global-account/react/components/ManageAccount/HomeActions.d.ts +5 -0
  203. package/dist/esm/global-account/react/components/ManageAccount/HomeActions.js +41 -0
  204. package/dist/esm/global-account/react/components/ManageAccount/HomeContent.d.ts +6 -0
  205. package/dist/esm/global-account/react/components/ManageAccount/HomeContent.js +10 -0
  206. package/dist/esm/global-account/react/components/ManageAccount/ManageAccount.js +18 -196
  207. package/dist/esm/global-account/react/components/ManageAccount/NFTContent.d.ts +2 -0
  208. package/dist/esm/global-account/react/components/ManageAccount/NFTContent.js +13 -0
  209. package/dist/esm/global-account/react/components/ManageAccount/NotificationChannel.d.ts +16 -0
  210. package/dist/esm/global-account/react/components/ManageAccount/NotificationChannel.js +9 -0
  211. package/dist/esm/global-account/react/components/ManageAccount/NotificationsContent.d.ts +8 -0
  212. package/dist/esm/global-account/react/components/ManageAccount/NotificationsContent.js +147 -0
  213. package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
  214. package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +45 -0
  215. package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
  216. package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +55 -0
  217. package/dist/esm/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +9 -0
  218. package/dist/esm/global-account/react/components/ManageAccount/SettingsMenuItem.js +6 -0
  219. package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +2 -0
  220. package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +111 -0
  221. package/dist/esm/global-account/react/components/ManageAccount/TokenBalanceRow.d.ts +3 -3
  222. package/dist/esm/global-account/react/components/ManageAccount/TokenBalanceRow.js +3 -3
  223. package/dist/esm/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
  224. package/dist/esm/global-account/react/components/ManageAccount/TokenContent.js +42 -0
  225. package/dist/esm/global-account/react/components/ManageAccount/channels/DiscordChannel.d.ts +11 -0
  226. package/dist/esm/global-account/react/components/ManageAccount/channels/DiscordChannel.js +44 -0
  227. package/dist/esm/global-account/react/components/ManageAccount/channels/EmailChannel.d.ts +11 -0
  228. package/dist/esm/global-account/react/components/ManageAccount/channels/EmailChannel.js +64 -0
  229. package/dist/esm/global-account/react/components/ManageAccount/channels/PhoneChannel.d.ts +14 -0
  230. package/dist/esm/global-account/react/components/ManageAccount/channels/PhoneChannel.js +75 -0
  231. package/dist/esm/global-account/react/components/ManageAccount/channels/TelegramChannel.d.ts +11 -0
  232. package/dist/esm/global-account/react/components/ManageAccount/channels/TelegramChannel.js +75 -0
  233. package/dist/esm/global-account/react/components/ManageAccount/channels/index.d.ts +4 -0
  234. package/dist/esm/global-account/react/components/ManageAccount/channels/index.js +4 -0
  235. package/dist/esm/global-account/react/components/ModalHeader/ModalHeader.d.ts +11 -0
  236. package/dist/esm/global-account/react/components/ModalHeader/ModalHeader.js +10 -0
  237. package/dist/esm/global-account/react/components/Send/Send.d.ts +5 -0
  238. package/dist/esm/global-account/react/components/Send/Send.js +189 -0
  239. package/dist/esm/global-account/react/components/SignInWithB3/SignIn.js +7 -6
  240. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +1 -1
  241. package/dist/esm/global-account/react/components/Toast/ToastComponents.d.ts +15 -0
  242. package/dist/esm/global-account/react/components/Toast/ToastComponents.js +50 -0
  243. package/dist/esm/global-account/react/components/Toast/ToastContext.d.ts +19 -0
  244. package/dist/esm/global-account/react/components/Toast/ToastContext.js +55 -0
  245. package/dist/esm/global-account/react/components/Toast/index.d.ts +4 -0
  246. package/dist/esm/global-account/react/components/Toast/index.js +3 -0
  247. package/dist/esm/global-account/react/components/Toast/toastApi.d.ts +21 -0
  248. package/dist/esm/global-account/react/components/Toast/toastApi.js +89 -0
  249. package/dist/esm/global-account/react/components/WalletImage/WalletImage.d.ts +4 -0
  250. package/dist/esm/global-account/react/components/WalletImage/WalletImage.js +11 -0
  251. package/dist/esm/global-account/react/components/icons/BellIcon.d.ts +3 -0
  252. package/dist/esm/global-account/react/components/icons/BellIcon.js +3 -0
  253. package/dist/esm/global-account/react/components/icons/ChevronDownIcon.d.ts +2 -0
  254. package/dist/esm/global-account/react/components/icons/ChevronDownIcon.js +4 -0
  255. package/dist/esm/global-account/react/components/icons/CopyIcon.d.ts +2 -0
  256. package/dist/esm/global-account/react/components/icons/CopyIcon.js +4 -0
  257. package/dist/esm/global-account/react/components/icons/LinkIcon.d.ts +3 -0
  258. package/dist/esm/global-account/react/components/icons/LinkIcon.js +3 -0
  259. package/dist/esm/global-account/react/components/icons/LockIcon.d.ts +3 -0
  260. package/dist/esm/global-account/react/components/icons/LockIcon.js +3 -0
  261. package/dist/esm/global-account/react/components/icons/WalletIcon.d.ts +2 -0
  262. package/dist/esm/global-account/react/components/icons/WalletIcon.js +4 -0
  263. package/dist/esm/global-account/react/components/index.d.ts +10 -4
  264. package/dist/esm/global-account/react/components/index.js +14 -5
  265. package/dist/esm/global-account/react/components/ui/Tabs.js +2 -2
  266. package/dist/esm/global-account/react/components/ui/dialog.js +2 -2
  267. package/dist/esm/global-account/react/components/ui/drawer.js +1 -1
  268. package/dist/esm/global-account/react/hooks/index.d.ts +3 -2
  269. package/dist/esm/global-account/react/hooks/index.js +3 -2
  270. package/dist/esm/global-account/react/hooks/useAccountWallet.d.ts +1 -0
  271. package/dist/esm/global-account/react/hooks/useAccountWallet.js +17 -0
  272. package/dist/esm/global-account/react/hooks/useB3BalanceFromAddresses.js +1 -0
  273. package/dist/esm/global-account/react/hooks/useChainSwitchWithAction.js +2 -2
  274. package/dist/esm/global-account/react/hooks/useNativeBalance.js +1 -1
  275. package/dist/esm/global-account/react/hooks/useNotifications.d.ts +48 -0
  276. package/dist/esm/global-account/react/hooks/useNotifications.js +186 -0
  277. package/dist/esm/global-account/react/hooks/useSimBalance.js +3 -3
  278. package/dist/esm/global-account/react/hooks/useTokenBalanceDirect.d.ts +1 -0
  279. package/dist/esm/global-account/react/hooks/useTokenBalanceDirect.js +1 -0
  280. package/dist/esm/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +2 -2
  281. package/dist/esm/global-account/react/stores/index.d.ts +1 -0
  282. package/dist/esm/global-account/react/stores/index.js +1 -0
  283. package/dist/esm/global-account/react/stores/useModalStore.d.ts +47 -6
  284. package/dist/esm/global-account/react/stores/useRecentAddressesStore.d.ts +25 -0
  285. package/dist/esm/global-account/react/stores/useRecentAddressesStore.js +33 -0
  286. package/dist/esm/global-account/react/utils/index.d.ts +4 -0
  287. package/dist/esm/global-account/react/utils/index.js +4 -0
  288. package/dist/esm/global-account/react/utils/notificationsAPI.d.ts +80 -0
  289. package/dist/esm/global-account/react/utils/notificationsAPI.js +254 -0
  290. package/dist/esm/global-account/react/utils/profileDisplay.d.ts +3 -0
  291. package/dist/esm/global-account/react/utils/profileDisplay.js +8 -4
  292. package/dist/esm/global-account/react/utils/toast.d.ts +6 -0
  293. package/dist/esm/global-account/react/utils/toast.js +5 -0
  294. package/dist/esm/shared/constants/chains/supported.d.ts +3 -2
  295. package/dist/esm/shared/constants/chains/supported.js +3 -0
  296. package/dist/esm/shared/utils/ipfs.js +10 -3
  297. package/dist/styles/index.css +1 -1
  298. package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -0
  299. package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +2 -1
  300. package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +0 -6
  301. package/dist/types/anyspend/react/components/common/OrderHistory.d.ts +1 -1
  302. package/dist/types/anyspend/react/utils/toast.d.ts +6 -0
  303. package/dist/types/global-account/react/components/AvatarEditor/AvatarEditor.d.ts +1 -0
  304. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
  305. package/dist/types/global-account/react/components/Deposit/Deposit.d.ts +1 -0
  306. package/dist/types/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +39 -0
  307. package/dist/types/global-account/react/components/LinkAccount/LinkAccount.d.ts +6 -4
  308. package/dist/types/global-account/react/components/LinkAccount/LinkNewAccount.d.ts +4 -0
  309. package/dist/types/global-account/react/components/LinkAccount/LinkedAccountItem.d.ts +16 -0
  310. package/dist/types/global-account/react/components/ManageAccount/BottomNavigation.d.ts +2 -0
  311. package/dist/types/global-account/react/components/ManageAccount/Header.d.ts +3 -0
  312. package/dist/types/global-account/react/components/ManageAccount/HomeActions.d.ts +5 -0
  313. package/dist/types/global-account/react/components/ManageAccount/HomeContent.d.ts +6 -0
  314. package/dist/types/global-account/react/components/ManageAccount/NFTContent.d.ts +2 -0
  315. package/dist/types/global-account/react/components/ManageAccount/NotificationChannel.d.ts +16 -0
  316. package/dist/types/global-account/react/components/ManageAccount/NotificationsContent.d.ts +8 -0
  317. package/dist/types/global-account/react/components/ManageAccount/ProfileSection.d.ts +2 -0
  318. package/dist/types/global-account/react/components/ManageAccount/SettingsContent.d.ts +7 -0
  319. package/dist/types/global-account/react/components/ManageAccount/SettingsMenuItem.d.ts +9 -0
  320. package/dist/types/global-account/react/components/ManageAccount/SettingsProfileCard.d.ts +2 -0
  321. package/dist/types/global-account/react/components/ManageAccount/TokenBalanceRow.d.ts +3 -3
  322. package/dist/types/global-account/react/components/ManageAccount/TokenContent.d.ts +2 -0
  323. package/dist/types/global-account/react/components/ManageAccount/channels/DiscordChannel.d.ts +11 -0
  324. package/dist/types/global-account/react/components/ManageAccount/channels/EmailChannel.d.ts +11 -0
  325. package/dist/types/global-account/react/components/ManageAccount/channels/PhoneChannel.d.ts +14 -0
  326. package/dist/types/global-account/react/components/ManageAccount/channels/TelegramChannel.d.ts +11 -0
  327. package/dist/types/global-account/react/components/ManageAccount/channels/index.d.ts +4 -0
  328. package/dist/types/global-account/react/components/ModalHeader/ModalHeader.d.ts +11 -0
  329. package/dist/types/global-account/react/components/Send/Send.d.ts +5 -0
  330. package/dist/types/global-account/react/components/Toast/ToastComponents.d.ts +15 -0
  331. package/dist/types/global-account/react/components/Toast/ToastContext.d.ts +19 -0
  332. package/dist/types/global-account/react/components/Toast/index.d.ts +4 -0
  333. package/dist/types/global-account/react/components/Toast/toastApi.d.ts +21 -0
  334. package/dist/types/global-account/react/components/WalletImage/WalletImage.d.ts +4 -0
  335. package/dist/types/global-account/react/components/icons/BellIcon.d.ts +3 -0
  336. package/dist/types/global-account/react/components/icons/ChevronDownIcon.d.ts +2 -0
  337. package/dist/types/global-account/react/components/icons/CopyIcon.d.ts +2 -0
  338. package/dist/types/global-account/react/components/icons/LinkIcon.d.ts +3 -0
  339. package/dist/types/global-account/react/components/icons/LockIcon.d.ts +3 -0
  340. package/dist/types/global-account/react/components/icons/WalletIcon.d.ts +2 -0
  341. package/dist/types/global-account/react/components/index.d.ts +10 -4
  342. package/dist/types/global-account/react/hooks/index.d.ts +3 -2
  343. package/dist/types/global-account/react/hooks/useAccountWallet.d.ts +1 -0
  344. package/dist/types/global-account/react/hooks/useNotifications.d.ts +48 -0
  345. package/dist/types/global-account/react/hooks/useTokenBalanceDirect.d.ts +1 -0
  346. package/dist/types/global-account/react/stores/index.d.ts +1 -0
  347. package/dist/types/global-account/react/stores/useModalStore.d.ts +47 -6
  348. package/dist/types/global-account/react/stores/useRecentAddressesStore.d.ts +25 -0
  349. package/dist/types/global-account/react/utils/index.d.ts +4 -0
  350. package/dist/types/global-account/react/utils/notificationsAPI.d.ts +80 -0
  351. package/dist/types/global-account/react/utils/profileDisplay.d.ts +3 -0
  352. package/dist/types/global-account/react/utils/toast.d.ts +6 -0
  353. package/dist/types/shared/constants/chains/supported.d.ts +3 -2
  354. package/package.json +2 -1
  355. package/src/anyspend/react/components/AnySpend.tsx +213 -173
  356. package/src/anyspend/react/components/AnySpendBuySpin.tsx +2 -1
  357. package/src/anyspend/react/components/AnySpendCustom.tsx +80 -77
  358. package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +20 -4
  359. package/src/anyspend/react/components/AnySpendStakeB3.tsx +2 -1
  360. package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +2 -1
  361. package/src/anyspend/react/components/AnyspendDepositHype.tsx +3 -0
  362. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +56 -22
  363. package/src/anyspend/react/components/common/FeeDetailPanel.tsx +1 -1
  364. package/src/anyspend/react/components/common/FiatPaymentMethod.tsx +2 -2
  365. package/src/anyspend/react/components/common/InsufficientDepositPayment.tsx +1 -1
  366. package/src/anyspend/react/components/common/OrderDetails.tsx +6 -2
  367. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +2 -2
  368. package/src/anyspend/react/components/common/OrderHistory.tsx +8 -13
  369. package/src/anyspend/react/components/common/OrderHistoryItem.tsx +69 -25
  370. package/src/anyspend/react/components/common/PanelOnramp.tsx +6 -4
  371. package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +3 -3
  372. package/src/anyspend/react/components/common/PointsDetailPanel.tsx +1 -1
  373. package/src/anyspend/react/components/common/RecipientSelection.tsx +1 -1
  374. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +2 -2
  375. package/src/anyspend/react/components/webview/WebviewOnrampOrderStatus.tsx +3 -3
  376. package/src/anyspend/react/components/webview/WebviewOnrampPayment.tsx +2 -1
  377. package/src/anyspend/react/hooks/useAnyspendFlow.ts +2 -1
  378. package/src/anyspend/react/hooks/useConnectedWalletDisplay.ts +3 -2
  379. package/src/anyspend/react/hooks/usePhantomTransfer.ts +1 -1
  380. package/src/anyspend/react/utils/toast.ts +6 -0
  381. package/src/global-account/react/components/AccountAssets/AccountAssets.tsx +115 -25
  382. package/src/global-account/react/components/AvatarCreator/AvatarCreator.tsx +2 -2
  383. package/src/global-account/react/components/AvatarEditor/AvatarEditor.tsx +491 -130
  384. package/src/global-account/react/components/B3DynamicModal.tsx +76 -17
  385. package/src/global-account/react/components/B3Provider/B3Provider.tsx +40 -20
  386. package/src/global-account/react/components/Deposit/Deposit.tsx +208 -0
  387. package/src/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.tsx +84 -0
  388. package/src/global-account/react/components/LinkAccount/LinkAccount.tsx +269 -434
  389. package/src/global-account/react/components/LinkAccount/LinkNewAccount.tsx +480 -0
  390. package/src/global-account/react/components/LinkAccount/LinkedAccountItem.tsx +135 -0
  391. package/src/global-account/react/components/ManageAccount/BottomNavigation.tsx +83 -0
  392. package/src/global-account/react/components/ManageAccount/ContentTokens.tsx +2 -1
  393. package/src/global-account/react/components/ManageAccount/Header.tsx +230 -0
  394. package/src/global-account/react/components/ManageAccount/HomeActions.tsx +118 -0
  395. package/src/global-account/react/components/ManageAccount/HomeContent.tsx +42 -0
  396. package/src/global-account/react/components/ManageAccount/ManageAccount.tsx +74 -597
  397. package/src/global-account/react/components/ManageAccount/NFTContent.tsx +24 -0
  398. package/src/global-account/react/components/ManageAccount/NotificationChannel.tsx +94 -0
  399. package/src/global-account/react/components/ManageAccount/NotificationsContent.tsx +268 -0
  400. package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +79 -0
  401. package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +106 -0
  402. package/src/global-account/react/components/ManageAccount/SettingsMenuItem.tsx +31 -0
  403. package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +197 -0
  404. package/src/global-account/react/components/ManageAccount/TokenBalanceRow.tsx +20 -5
  405. package/src/global-account/react/components/ManageAccount/TokenContent.tsx +66 -0
  406. package/src/global-account/react/components/ManageAccount/channels/DiscordChannel.tsx +119 -0
  407. package/src/global-account/react/components/ManageAccount/channels/EmailChannel.tsx +168 -0
  408. package/src/global-account/react/components/ManageAccount/channels/PhoneChannel.tsx +227 -0
  409. package/src/global-account/react/components/ManageAccount/channels/TelegramChannel.tsx +150 -0
  410. package/src/global-account/react/components/ManageAccount/channels/index.ts +4 -0
  411. package/src/global-account/react/components/ModalHeader/ModalHeader.tsx +61 -0
  412. package/src/global-account/react/components/Send/Send.tsx +621 -0
  413. package/src/global-account/react/components/SignInWithB3/SignIn.tsx +13 -12
  414. package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +1 -1
  415. package/src/global-account/react/components/Toast/README.md +350 -0
  416. package/src/global-account/react/components/Toast/ToastComponents.tsx +159 -0
  417. package/src/global-account/react/components/Toast/ToastContext.tsx +86 -0
  418. package/src/global-account/react/components/Toast/index.ts +4 -0
  419. package/src/global-account/react/components/Toast/toastApi.ts +98 -0
  420. package/src/global-account/react/components/WalletImage/WalletImage.tsx +12 -0
  421. package/src/global-account/react/components/icons/BellIcon.tsx +15 -0
  422. package/src/global-account/react/components/icons/ChevronDownIcon.tsx +17 -0
  423. package/src/global-account/react/components/icons/CopyIcon.tsx +22 -0
  424. package/src/global-account/react/components/icons/LinkIcon.tsx +15 -0
  425. package/src/global-account/react/components/icons/LockIcon.tsx +15 -0
  426. package/src/global-account/react/components/icons/WalletIcon.tsx +21 -0
  427. package/src/global-account/react/components/index.ts +19 -5
  428. package/src/global-account/react/components/ui/Tabs.tsx +5 -13
  429. package/src/global-account/react/components/ui/dialog.tsx +23 -14
  430. package/src/global-account/react/components/ui/drawer.tsx +1 -1
  431. package/src/global-account/react/hooks/index.ts +5 -1
  432. package/src/global-account/react/hooks/useAccountWallet.tsx +26 -0
  433. package/src/global-account/react/hooks/useB3BalanceFromAddresses.ts +1 -0
  434. package/src/global-account/react/hooks/useChainSwitchWithAction.ts +3 -2
  435. package/src/global-account/react/hooks/useNativeBalance.tsx +2 -1
  436. package/src/global-account/react/hooks/useNotifications.ts +229 -0
  437. package/src/global-account/react/hooks/useSimBalance.ts +3 -3
  438. package/src/global-account/react/hooks/useTokenBalanceDirect.tsx +2 -0
  439. package/src/global-account/react/hooks/useUnifiedChainSwitchAndExecute.ts +3 -2
  440. package/src/global-account/react/stores/index.ts +1 -0
  441. package/src/global-account/react/stores/useModalStore.ts +53 -6
  442. package/src/global-account/react/stores/useRecentAddressesStore.ts +54 -0
  443. package/src/global-account/react/utils/index.ts +4 -0
  444. package/src/global-account/react/utils/notificationsAPI.ts +305 -0
  445. package/src/global-account/react/utils/profileDisplay.ts +12 -4
  446. package/src/global-account/react/utils/toast.ts +6 -0
  447. package/src/shared/constants/chains/supported.ts +4 -0
  448. package/src/shared/utils/ipfs.ts +10 -3
  449. package/src/styles/index.css +12 -1
  450. package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.d.ts +0 -7
  451. package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.js +0 -107
  452. package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
  453. package/dist/cjs/global-account/react/components/ProfileEditor/ProfileEditor.js +0 -151
  454. package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.d.ts +0 -7
  455. package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.js +0 -104
  456. package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
  457. package/dist/esm/global-account/react/components/ProfileEditor/ProfileEditor.js +0 -145
  458. package/dist/types/global-account/react/components/ManageAccount/BalanceContent.d.ts +0 -7
  459. package/dist/types/global-account/react/components/ProfileEditor/ProfileEditor.d.ts +0 -6
  460. package/src/global-account/react/components/ManageAccount/BalanceContent.tsx +0 -258
  461. package/src/global-account/react/components/ProfileEditor/ProfileEditor.tsx +0 -279
@@ -1,138 +1,59 @@
1
1
  import app from "@b3dotfun/sdk/global-account/app";
2
- import { ecosystemWalletId } from "@b3dotfun/sdk/shared/constants";
3
- import { thirdwebB3Mainnet } from "@b3dotfun/sdk/shared/constants/chains/b3Chain";
2
+ import {
3
+ Button,
4
+ ManageAccountModalProps,
5
+ toast,
6
+ useB3,
7
+ useModalStore,
8
+ useQueryB3,
9
+ } from "@b3dotfun/sdk/global-account/react";
4
10
  import { client } from "@b3dotfun/sdk/shared/utils/thirdweb";
5
- import { Loader2, Mail, Phone, WalletIcon } from "lucide-react";
6
- import { useCallback, useEffect, useState } from "react";
7
- import { toast } from "sonner";
8
- import { useLinkProfile, useProfiles } from "thirdweb/react";
9
- import { createWallet, preAuthenticate, WalletId } from "thirdweb/wallets";
10
- import { WalletRow } from "../..";
11
- import { LinkAccountModalProps, useModalStore } from "../../stores/useModalStore";
12
- import { getProfileDisplayInfo } from "../../utils/profileDisplay";
13
- import { useB3 } from "../B3Provider/useB3";
14
- import { AppleIcon } from "../icons/AppleIcon";
15
- import { DiscordIcon } from "../icons/DiscordIcon";
16
- import { FarcasterIcon } from "../icons/FarcasterIcon";
17
- import { GoogleIcon } from "../icons/GoogleIcon";
18
- import { XIcon } from "../icons/XIcon";
19
- import { Button } from "../ui/button";
20
- type OTPStrategy = "email" | "phone";
21
- type SocialStrategy = "google" | "x" | "discord" | "apple" | "farcaster";
22
- type Strategy = OTPStrategy | SocialStrategy | "wallet";
11
+ import { Copy, Loader2, Pencil } from "lucide-react";
12
+ import { useEffect, useRef, useState } from "react";
23
13
 
24
- interface AuthMethod {
25
- id: Strategy;
26
- label: string;
27
- enabled: boolean;
28
- icon: React.ReactNode;
29
- walletType?: WalletId;
30
- }
14
+ import { useProfiles, useUnlinkProfile } from "thirdweb/react";
31
15
 
32
- const AUTH_METHODS: AuthMethod[] = [
33
- { id: "email", label: "Email", enabled: true, icon: <Mail className="text-b3-primary-blue size-6" /> },
34
- { id: "phone", label: "Phone", enabled: true, icon: <Phone className="text-b3-primary-blue size-6" /> },
35
- { id: "google", label: "Google", enabled: true, icon: <GoogleIcon className="size-6" /> },
36
- { id: "x", label: "X (Twitter)", enabled: true, icon: <XIcon className="size-6" /> },
37
- { id: "discord", label: "Discord", enabled: true, icon: <DiscordIcon className="size-6" /> },
38
- { id: "apple", label: "Apple", enabled: true, icon: <AppleIcon className="size-6" /> },
39
- {
40
- id: "farcaster",
41
- label: "Farcaster",
42
- enabled: true,
43
- icon: <FarcasterIcon className="size-6" />,
44
- },
45
- ];
16
+ import { Chain } from "thirdweb";
17
+ import { getProfileDisplayInfo } from "../../utils/profileDisplay";
46
18
 
47
- const WALLET_METHODS: AuthMethod[] = [
48
- {
49
- id: "wallet",
50
- label: "Wallet",
51
- enabled: true,
52
- icon: <WalletIcon className="size-6" />,
53
- walletType: "com.coinbase.wallet",
54
- },
55
- { id: "wallet", label: "Wallet", enabled: true, icon: <WalletIcon className="size-6" />, walletType: "io.metamask" },
56
- {
57
- id: "wallet",
58
- label: "Wallet",
59
- enabled: true,
60
- icon: <WalletIcon className="size-6" />,
61
- walletType: "me.rainbow",
62
- },
63
- {
64
- id: "wallet",
65
- label: "Wallet",
66
- enabled: true,
67
- icon: <WalletIcon className="size-6" />,
68
- walletType: "app.phantom",
69
- },
70
- { id: "wallet", label: "Wallet", enabled: true, icon: <WalletIcon className="size-6" />, walletType: "io.rabby" },
71
- {
72
- id: "wallet",
73
- label: "Wallet",
74
- enabled: true,
75
- icon: <WalletIcon className="size-6" />,
76
- walletType: "walletConnect",
77
- },
78
- ];
19
+ import { Referrals, Users } from "@b3dotfun/b3-api";
20
+ import ModalHeader from "../ModalHeader/ModalHeader";
21
+ import LinkedAccountItem from "./LinkedAccountItem";
79
22
 
80
- export function LinkAccount({
81
- onSuccess: onSuccessCallback,
82
- onError,
83
- onClose,
84
- chain,
23
+ export const LinkAccount = ({
85
24
  partnerId,
86
- className,
87
- }: LinkAccountModalProps & { className?: string }) {
88
- const { isLinking, linkingMethod, setLinkingState, navigateBack, setB3ModalContentType } = useModalStore();
89
- const [selectedMethod, setSelectedMethod] = useState<Strategy | null>(null);
90
- const [email, setEmail] = useState("");
91
- const [phone, setPhone] = useState("");
92
- const [otp, setOtp] = useState("");
93
- const [otpSent, setOtpSent] = useState(false);
94
- const [error, setError] = useState<string | null>(null);
95
- const { data: profilesRaw = [] } = useProfiles({ client });
96
-
97
- // Get connected auth methods
98
- const connectedAuthMethods = profilesRaw
99
- .filter((profile: any) => !["custom_auth_endpoint"].includes(profile.type))
100
- .map((profile: any) => profile.type as Strategy);
101
-
102
- // Filter available auth methods
103
- const availableAuthMethods = AUTH_METHODS.filter(
104
- method => !connectedAuthMethods.includes(method.id) && method.enabled,
25
+ onLogout: _onLogout,
26
+ chain,
27
+ }: {
28
+ partnerId: string;
29
+ onLogout?: () => void;
30
+ chain: Chain;
31
+ }) => {
32
+ const [unlinkingAccountId, setUnlinkingAccountId] = useState<string | null>(null);
33
+ const [profileToUnlink, setProfileToUnlink] = useState<any>(null);
34
+ const { data: profilesRaw = [], isLoading: isLoadingProfiles } = useProfiles({ client });
35
+ const { mutate: unlinkProfile, isPending: isUnlinking } = useUnlinkProfile();
36
+ const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
37
+ const isLinking = useModalStore(state => state.isLinking);
38
+ const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
39
+ const contentType = useModalStore(state => state.contentType);
40
+ const { user, setUser } = useB3();
41
+ const [isUpdatingCode, setIsUpdatingCode] = useState(false);
42
+ const [newReferralCode, setNewReferralCode] = useState("");
43
+ const [isEditingCode, setIsEditingCode] = useState(false);
44
+ const referallCodeRef = useRef<HTMLInputElement>(null);
45
+ const { data: referrals, isLoading: isLoadingReferrals } = useQueryB3(
46
+ "referrals",
47
+ "find",
48
+ { query: { referrerId: user?.userId } },
49
+ !!user?.userId,
105
50
  );
106
-
107
- const profiles = profilesRaw
108
- .filter((profile: any) => !["custom_auth_endpoint"].includes(profile.type))
109
- .map((profile: any) => ({
110
- ...getProfileDisplayInfo(profile),
111
- originalProfile: profile,
112
- }));
113
-
114
- const { account } = useB3();
115
- const { mutate: linkProfile } = useLinkProfile();
116
-
117
- const onSuccess = useCallback(async () => {
118
- await onSuccessCallback?.();
119
- }, [onSuccessCallback]);
120
-
121
- // Reset linking state when component unmounts
122
- useEffect(() => {
123
- return () => {
124
- if (isLinking) {
125
- setLinkingState(false);
126
- }
127
- };
128
- }, [isLinking, setLinkingState]);
51
+ const showReferralInfo = (contentType as ManageAccountModalProps)?.showReferralInfo ?? false;
129
52
 
130
53
  const mutationOptions = {
131
54
  onError: (error: Error) => {
132
- console.error("Error linking account:", error);
55
+ console.error("Error Unlinking account:", error);
133
56
  toast.error(error.message);
134
- setLinkingState(false);
135
- onError?.(error);
136
57
  },
137
58
  onSuccess: async (data: any) => {
138
59
  console.log("Raw Link Account Data:", data);
@@ -145,348 +66,262 @@ export function LinkAccount({
145
66
  },
146
67
  };
147
68
 
148
- const validateInput = () => {
149
- if (selectedMethod === "email") {
150
- if (!email) {
151
- setError("Please enter your email address");
152
- return false;
153
- }
154
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
155
- setError("Please enter a valid email address");
156
- return false;
157
- }
158
- } else if (selectedMethod === "phone") {
159
- if (!phone) {
160
- setError("Please enter your phone number");
161
- return false;
162
- }
163
- if (!/^\+?[\d\s-]{10,}$/.test(phone)) {
164
- setError("Please enter a valid phone number");
165
- return false;
166
- }
167
- }
168
- setError(null);
169
- return true;
170
- };
171
-
172
- const handleSendOTP = async () => {
173
- if (!validateInput()) return;
69
+ // Fetch referred users
70
+ const currentReferralCode = user?.referralCode || user?.userId || "";
174
71
 
72
+ const handleCopyCode = async () => {
175
73
  try {
176
- setLinkingState(true, selectedMethod);
177
- setError(null);
178
-
179
- if (selectedMethod === "email") {
180
- await preAuthenticate({
181
- client,
182
- strategy: "email",
183
- email,
184
- ecosystem: {
185
- id: ecosystemWalletId,
186
- partnerId: partnerId,
187
- },
188
- });
189
- } else if (selectedMethod === "phone") {
190
- await preAuthenticate({
191
- client,
192
- strategy: "phone",
193
- phoneNumber: phone,
194
- ecosystem: {
195
- id: ecosystemWalletId,
196
- partnerId: partnerId,
197
- },
198
- });
199
- }
200
-
201
- setOtpSent(true);
74
+ await navigator.clipboard.writeText(currentReferralCode);
75
+ toast.success("Referral code copied to clipboard!");
202
76
  } catch (error) {
203
- console.error("Error sending OTP:", error);
204
- setError(error instanceof Error ? error.message : "Failed to send OTP");
205
- onError?.(error as Error);
206
- setLinkingState(false);
77
+ toast.error("Failed to copy referral code");
207
78
  }
208
79
  };
209
80
 
210
- const handleLinkAccount = async () => {
211
- if (!otp) {
212
- console.error("No OTP entered");
213
- setError("Please enter the verification code");
214
- return;
215
- }
81
+ const handleUpdateReferralCode = async () => {
82
+ if (!newReferralCode) return;
216
83
 
84
+ setIsUpdatingCode(true);
217
85
  try {
218
- setOtpSent(false);
219
- setLinkingState(true, selectedMethod);
220
- setError(null);
221
-
222
- if (selectedMethod === "email") {
223
- await linkProfile(
224
- {
225
- client,
226
- strategy: "email",
227
- email,
228
- verificationCode: otp,
229
- },
230
- mutationOptions,
231
- );
232
- } else if (selectedMethod === "phone") {
233
- await linkProfile(
234
- {
235
- client,
236
- strategy: "phone",
237
- phoneNumber: phone,
238
- verificationCode: otp,
239
- },
240
- mutationOptions,
241
- );
242
- }
243
- } catch (error) {
244
- console.error("Error linking account:", error);
245
- setError(error instanceof Error ? error.message : "Failed to link account");
246
- onError?.(error as Error);
247
- }
248
- };
249
-
250
- const handleLinkWallet = async (walletType: WalletId) => {
251
- setLinkingState(true, "wallet");
252
- console.log("selectedMethod", walletType);
253
- try {
254
- if (!walletType) {
255
- throw new Error("Wallet type not found");
256
- }
257
- await linkProfile(
258
- {
259
- client,
260
- strategy: "wallet",
261
- wallet: createWallet(walletType),
262
- chain: thirdwebB3Mainnet,
263
- },
264
- mutationOptions,
265
- );
86
+ // @ts-expect-error - setReferralCode is not typed for some reason
87
+ const newUser = await app.service("users").setReferralCode({
88
+ userId: user?.userId,
89
+ referralCode: newReferralCode,
90
+ });
91
+ setUser(newUser as unknown as Users);
92
+ toast.success("Referral code updated successfully!");
93
+ setIsEditingCode(false);
94
+ setNewReferralCode("");
266
95
  } catch (error) {
267
- console.error("Error linking account:", error);
268
- setError(error instanceof Error ? error.message : "Failed to link account");
269
- onError?.(error as Error);
96
+ toast.error("Failed to update referral code");
97
+ } finally {
98
+ setIsUpdatingCode(false);
270
99
  }
271
100
  };
272
101
 
273
- const handleSocialLink = async (strategy: SocialStrategy) => {
274
- try {
275
- console.log("handleSocialLink", strategy);
276
- setLinkingState(true, strategy);
277
- setError(null);
278
-
279
- const result = await linkProfile(
280
- {
281
- client,
282
- strategy,
283
- },
284
- mutationOptions,
285
- );
286
-
287
- console.log("result", result);
288
-
289
- // Don't close the modal yet, wait for auth to complete
290
- onSuccess?.();
291
- } catch (error) {
292
- console.error("Error linking with social:", error);
293
- setError(error instanceof Error ? error.message : "Failed to link social account");
294
- onError?.(error as Error);
295
- setLinkingState(false);
296
- }
297
- };
102
+ const profiles = profilesRaw
103
+ .filter((profile: any) => !["custom_auth_endpoint"].includes(profile.type))
104
+ .map((profile: any) => ({
105
+ ...getProfileDisplayInfo(profile),
106
+ originalProfile: profile,
107
+ }));
108
+ console.log("profiles :", profiles);
298
109
 
299
- // Add effect to handle social auth completion
110
+ // Reset confirmation state after 3 seconds
300
111
  useEffect(() => {
301
- if (isLinking && linkingMethod && !selectedMethod) {
302
- // This means we're in a social auth flow
303
- const checkAuthStatus = async () => {
304
- try {
305
- // Wait a bit to ensure auth is complete
306
- await new Promise(resolve => setTimeout(resolve, 1000));
307
- onClose?.();
308
- } catch (error) {
309
- console.error("Error checking auth status:", error);
310
- setLinkingState(false);
311
- }
312
- };
313
-
314
- checkAuthStatus();
112
+ if (profileToUnlink) {
113
+ const timer = setTimeout(() => {
114
+ setProfileToUnlink(null);
115
+ }, 5000);
116
+ return () => clearTimeout(timer);
315
117
  }
316
- }, [isLinking, linkingMethod, selectedMethod, onClose, setLinkingState]);
317
-
318
- const handleBack = useCallback(() => {
319
- if (isLinking) return;
320
- setSelectedMethod(null);
321
- setEmail("");
322
- setPhone("");
323
- setOtp("");
324
- setOtpSent(false);
325
- setError(null);
326
- setLinkingState(false);
327
- }, [isLinking, setSelectedMethod, setEmail, setPhone, setOtp, setOtpSent, setError, setLinkingState]);
118
+ }, [profileToUnlink]);
328
119
 
329
- const handleFinishedLinking = useCallback(
330
- (success: boolean) => {
331
- if (success) {
332
- onSuccess?.();
333
- onClose?.();
120
+ const handleUnlinkClick = (profile: any) => {
121
+ // If this profile is already pending confirmation, perform the unlink
122
+ if (profileToUnlink?.title === profile.title) {
123
+ setUnlinkingAccountId(profile.title);
124
+ try {
125
+ unlinkProfile({ client, profileToUnlink: profile.originalProfile }, mutationOptions);
126
+ } catch (error) {
127
+ console.error("Error unlinking account:", error);
128
+ } finally {
129
+ setUnlinkingAccountId(null);
130
+ setProfileToUnlink(null);
334
131
  }
335
-
336
- setLinkingState(false);
337
- navigateBack();
338
- setB3ModalContentType({
339
- type: "manageAccount",
340
- activeTab: "settings",
341
- setActiveTab: () => {},
342
- chain,
343
- partnerId,
344
- });
345
- },
346
- [chain, navigateBack, partnerId, setB3ModalContentType, setLinkingState, onSuccess, onClose],
347
- );
348
-
349
- useEffect(() => {
350
- if (isLinking) {
351
- handleFinishedLinking(true);
132
+ } else {
133
+ // First click - set pending confirmation
134
+ setProfileToUnlink(profile);
352
135
  }
353
- // eslint-disable-next-line react-hooks/exhaustive-deps
354
- }, [profiles.length]);
136
+ };
355
137
 
356
- if (!account) {
357
- return <div className="text-b3-foreground-muted py-8 text-center">Please connect your account first</div>;
358
- }
138
+ const handleOpenLinkModal = () => {
139
+ setB3ModalOpen(true);
140
+ setB3ModalContentType({
141
+ type: "linkNewAccount",
142
+ partnerId,
143
+ chain,
144
+ onSuccess: async () => {
145
+ // Let the LinkAccount component handle modal closing
146
+ },
147
+ onError: () => {
148
+ // Let the LinkAccount component handle errors
149
+ },
150
+ onClose: () => {
151
+ // Let the LinkAccount component handle closing
152
+ },
153
+ });
154
+ };
359
155
 
360
156
  return (
361
- <div className={`b3-link-account space-y-6 p-6 ${className || ""}`} data-testid="link-account">
362
- <div className="b3-link-account-header flex items-center justify-between">
363
- <h2 className="b3-link-account-title text-b3-grey font-neue-montreal-semibold text-2xl">Link New Account</h2>
364
- {selectedMethod && (
365
- <Button variant="ghost" className="text-b3-grey hover:text-b3-grey/80" onClick={handleBack}>
366
- Backs
367
- </Button>
157
+ <div className="linked-accounts-settings">
158
+ <ModalHeader title="Linked Accounts" />
159
+ {/* Linked Accounts Section */}
160
+ <div className="linked-accounts-section space-y-4 p-5">
161
+ {isLoadingProfiles ? (
162
+ <div className="linked-accounts-loading flex justify-center py-8">
163
+ <Loader2 className="text-b3-grey animate-spin" />
164
+ </div>
165
+ ) : profiles.length > 0 ? (
166
+ <div className="linked-accounts-list space-y-4">
167
+ {profiles.map(profile => (
168
+ <LinkedAccountItem
169
+ key={profile.title}
170
+ profile={profile}
171
+ profileToUnlink={profileToUnlink}
172
+ unlinkingAccountId={unlinkingAccountId}
173
+ isUnlinking={isUnlinking}
174
+ onUnlinkClick={handleUnlinkClick}
175
+ />
176
+ ))}
177
+ </div>
178
+ ) : (
179
+ <div className="linked-accounts-empty font-neue-montreal-medium text-b3-foreground-muted py-8 text-center">
180
+ No linked accounts found
181
+ </div>
368
182
  )}
369
- </div>
370
183
 
371
- {!selectedMethod ? (
372
- <div className="b3-link-account-methods grid gap-3">
373
- {availableAuthMethods.map(method => (
374
- <Button
375
- key={method.id}
376
- variant="outline"
377
- className="b3-link-account-method-button border-b3-line hover:border-b3-primary-blue/30 hover:bg-b3-primary-blue/5 text-b3-grey font-neue-montreal-medium h-14 justify-start bg-transparent px-6 text-base transition-all duration-200"
378
- data-method={method.id}
379
- onClick={() => {
380
- if (method.id === "email" || method.id === "phone") {
381
- setSelectedMethod(method.id);
382
- } else {
383
- handleSocialLink(method.id as SocialStrategy);
384
- }
385
- }}
386
- disabled={linkingMethod === method.id}
184
+ {/* Link New Account Button */}
185
+ <Button
186
+ onClick={handleOpenLinkModal}
187
+ disabled={isLinking}
188
+ className="b3-modal-link-new-account-button bg-b3-primary-blue hover:bg-b3-primary-blue/90 border-white/12 group relative h-12 w-full rounded-xl border-2 px-[18px] text-base font-semibold text-white shadow-[inset_0px_0px_0px_1px_rgba(10,13,18,0.18),inset_0px_-2px_0px_0px_rgba(10,13,18,0.05)] transition-all"
189
+ >
190
+ <div className="flex items-center justify-center gap-1.5">
191
+ <svg
192
+ width="20"
193
+ height="20"
194
+ viewBox="0 0 20 20"
195
+ fill="none"
196
+ xmlns="http://www.w3.org/2000/svg"
197
+ className="shrink-0"
387
198
  >
388
- {isLinking && linkingMethod === method.id ? (
389
- <Loader2 className="h-5 w-5 animate-spin" />
390
- ) : (
391
- <div className="b3-link-account-method-content flex items-center gap-4">
392
- <div className="b3-link-account-method-icon flex items-center justify-center rounded-full">
393
- {method.icon}
394
- </div>
395
- <span className="b3-link-account-method-label font-medium">{method.label}</span>
396
- </div>
397
- )}
398
- </Button>
399
- ))}
400
- {WALLET_METHODS.map(method => {
401
- if (!method.walletType) {
402
- return null;
403
- }
404
-
405
- return (
406
- <WalletRow
407
- key={method.walletType}
408
- walletId={method.walletType as WalletId}
409
- onClick={() => handleLinkWallet(method.walletType as WalletId)}
410
- isLoading={isLinking}
411
- />
412
- );
413
- })}
414
- {availableAuthMethods.length === 0 && (
415
- <div className="text-b3-foreground-muted py-8 text-center">
416
- All available authentication methods have been connected
417
- </div>
418
- )}
419
- </div>
420
- ) : (
421
- <div className="b3-link-account-form space-y-4">
422
- {selectedMethod === "email" && (
423
- <div className="space-y-2">
424
- <label className="text-b3-grey font-neue-montreal-medium text-sm">Email Address</label>
425
- <input
426
- type="email"
427
- placeholder="Enter your email"
428
- className="bg-b3-line text-b3-grey font-neue-montreal-medium focus:ring-b3-primary-blue/20 w-full rounded-xl p-4 focus:outline-none focus:ring-2"
429
- value={email}
430
- onChange={e => setEmail(e.target.value)}
431
- disabled={otpSent || (isLinking && linkingMethod === "email")}
199
+ <path
200
+ d="M10.0001 13.3333V6.66667M6.66675 10H13.3334M18.3334 10C18.3334 14.6024 14.6025 18.3333 10.0001 18.3333C5.39771 18.3333 1.66675 14.6024 1.66675 10C1.66675 5.39763 5.39771 1.66667 10.0001 1.66667C14.6025 1.66667 18.3334 5.39763 18.3334 10Z"
201
+ stroke="currentColor"
202
+ strokeWidth="1.67"
203
+ strokeLinecap="round"
204
+ strokeLinejoin="round"
432
205
  />
433
- </div>
434
- )}
435
-
436
- {selectedMethod === "phone" && (
437
- <div className="space-y-2">
438
- <label className="text-b3-grey font-neue-montreal-medium text-sm">Phone Number</label>
439
- <input
440
- type="tel"
441
- placeholder="Enter your phone number"
442
- className="bg-b3-line text-b3-grey font-neue-montreal-medium focus:ring-b3-primary-blue/20 w-full rounded-xl p-4 focus:outline-none focus:ring-2"
443
- value={phone}
444
- onChange={e => setPhone(e.target.value)}
445
- disabled={otpSent || (isLinking && linkingMethod === "phone")}
446
- />
447
- <p className="text-b3-foreground-muted font-neue-montreal-medium text-sm">
448
- Include country code (e.g., +1 for US)
449
- </p>
450
- </div>
451
- )}
452
-
453
- {error && <div className="text-b3-negative font-neue-montreal-medium py-2 text-sm">{error}</div>}
206
+ </svg>
207
+ <span>Link new account</span>
208
+ </div>
209
+ </Button>
210
+ </div>
454
211
 
455
- {(selectedMethod === "email" || selectedMethod === "phone") &&
456
- (otpSent ? (
457
- <div className="space-y-4">
458
- <div className="space-y-2">
459
- <label className="text-b3-grey font-neue-montreal-medium text-sm">Verification Code</label>
460
- <input
461
- type="text"
462
- placeholder="Enter verification code"
463
- className="bg-b3-line text-b3-grey font-neue-montreal-medium focus:ring-b3-primary-blue/20 w-full rounded-xl p-4 focus:outline-none focus:ring-2"
464
- value={otp}
465
- onChange={e => setOtp(e.target.value)}
466
- />
212
+ {showReferralInfo && (
213
+ /* Referral Section */
214
+ <div className="referrals-section space-y-4">
215
+ <h3 className="referrals-title text-b3-grey font-neue-montreal-semibold text-xl">Referrals</h3>
216
+
217
+ {/* Referral Code */}
218
+ <div className="referral-code-container bg-b3-line rounded-xl p-4">
219
+ {isEditingCode && (
220
+ <div className="referral-code-header-editing">
221
+ <div className="referral-code-title text-b3-grey font-neue-montreal-semibold">Your Referral Code</div>
222
+ <div className="referral-code-description text-b3-foreground-muted font-neue-montreal-medium text-sm">
223
+ Share this code with friends to earn rewards
467
224
  </div>
468
- <Button
469
- className="bg-b3-primary-blue hover:bg-b3-primary-blue/90 font-neue-montreal-semibold h-12 w-full text-white"
470
- onClick={handleLinkAccount}
471
- >
472
- Link Account
473
- </Button>
474
225
  </div>
475
- ) : (
476
- <Button
477
- className="bg-b3-primary-blue hover:bg-b3-primary-blue/90 font-neue-montreal-semibold h-12 w-full text-white"
478
- onClick={handleSendOTP}
479
- disabled={(!email && !phone) || (isLinking && linkingMethod === selectedMethod)}
480
- >
481
- {isLinking && linkingMethod === selectedMethod ? (
482
- <Loader2 className="animate-spin" />
226
+ )}
227
+ <div className="referral-code-content flex items-center justify-between">
228
+ {!isEditingCode && (
229
+ <div className="referral-code-header">
230
+ <div className="referral-code-title text-b3-grey font-neue-montreal-semibold">Your Referral Code</div>
231
+ <div className="referral-code-description text-b3-foreground-muted font-neue-montreal-medium text-sm">
232
+ Share this code with friends to earn rewards
233
+ </div>
234
+ </div>
235
+ )}
236
+ <div className="referral-code-actions flex items-center gap-2">
237
+ {isEditingCode ? (
238
+ <div className="referral-code-edit-form flex items-center gap-2">
239
+ <input
240
+ type="text"
241
+ value={newReferralCode}
242
+ onChange={e => setNewReferralCode(e.target.value)}
243
+ className="referral-code-input rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-sm"
244
+ placeholder="Enter new code"
245
+ ref={referallCodeRef}
246
+ />
247
+ <Button
248
+ size="sm"
249
+ className="referral-code-save-button"
250
+ onClick={handleUpdateReferralCode}
251
+ disabled={isUpdatingCode || !newReferralCode}
252
+ >
253
+ {isUpdatingCode ? (
254
+ <Loader2 className="referral-code-save-loading h-4 w-4 animate-spin" />
255
+ ) : (
256
+ "Save"
257
+ )}
258
+ </Button>
259
+ <Button
260
+ size="sm"
261
+ variant="ghost"
262
+ className="referral-code-cancel-button"
263
+ onClick={() => {
264
+ setIsEditingCode(false);
265
+ setNewReferralCode("");
266
+ }}
267
+ >
268
+ Cancel
269
+ </Button>
270
+ </div>
483
271
  ) : (
484
- "Send Verification Code"
272
+ <>
273
+ <div className="referral-code-display rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-sm">
274
+ {currentReferralCode}
275
+ </div>
276
+ <Button size="icon" variant="ghost" className="referral-code-copy-button" onClick={handleCopyCode}>
277
+ <Copy className="referral-code-copy-icon h-4 w-4" />
278
+ </Button>
279
+ <Button
280
+ size="icon"
281
+ variant="ghost"
282
+ className="referral-code-edit-button"
283
+ onClick={() => {
284
+ setIsEditingCode(true);
285
+ setTimeout(() => {
286
+ referallCodeRef.current?.focus();
287
+ }, 100);
288
+ }}
289
+ >
290
+ <Pencil className="referral-code-edit-icon h-4 w-4" />
291
+ </Button>
292
+ </>
485
293
  )}
486
- </Button>
487
- ))}
294
+ </div>
295
+ </div>
296
+ </div>
297
+
298
+ {/* Referred Users */}
299
+ <div className="referred-users-container bg-b3-line rounded-xl p-4">
300
+ <div className="referred-users-title text-b3-grey font-neue-montreal-semibold mb-4">Referred Users</div>
301
+ {isLoadingReferrals ? (
302
+ <div className="referred-users-loading flex justify-center py-4">
303
+ <Loader2 className="h-6 w-6 animate-spin text-gray-400" />
304
+ </div>
305
+ ) : referrals?.data?.length ? (
306
+ <div className="referred-users-list space-y-3">
307
+ {referrals.data.map((referral: Referrals) => (
308
+ <div
309
+ key={String(referral._id)}
310
+ className="referred-user-item flex items-center justify-between rounded-lg bg-white p-3"
311
+ >
312
+ <div className="referred-user-id text-sm font-medium">{referral.referreeId}</div>
313
+ <div className="referred-user-date text-sm text-gray-500">
314
+ {new Date(referral.createdAt).toLocaleDateString()}
315
+ </div>
316
+ </div>
317
+ ))}
318
+ </div>
319
+ ) : (
320
+ <div className="referred-users-empty py-4 text-center text-gray-500">No referred users yet</div>
321
+ )}
322
+ </div>
488
323
  </div>
489
324
  )}
490
325
  </div>
491
326
  );
492
- }
327
+ };