@0xsequence/wallet-widget 0.0.0-20250314205219

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 (514) hide show
  1. package/LICENSE +219 -0
  2. package/README.md +53 -0
  3. package/dist/cjs/components/Alert.js +15 -0
  4. package/dist/cjs/components/Alert.js.map +1 -0
  5. package/dist/cjs/components/CoinRow.js +19 -0
  6. package/dist/cjs/components/CoinRow.js.map +1 -0
  7. package/dist/cjs/components/CollectibleTileImage.js +10 -0
  8. package/dist/cjs/components/CollectibleTileImage.js.map +1 -0
  9. package/dist/cjs/components/CopyButton.js +25 -0
  10. package/dist/cjs/components/CopyButton.js.map +1 -0
  11. package/dist/cjs/components/DefaultIcon.js +13 -0
  12. package/dist/cjs/components/DefaultIcon.js.map +1 -0
  13. package/dist/cjs/components/FeeOptionSelector.js +48 -0
  14. package/dist/cjs/components/FeeOptionSelector.js.map +1 -0
  15. package/dist/cjs/components/InfiniteScroll.js +42 -0
  16. package/dist/cjs/components/InfiniteScroll.js.map +1 -0
  17. package/dist/cjs/components/Loader.js +10 -0
  18. package/dist/cjs/components/Loader.js.map +1 -0
  19. package/dist/cjs/components/NavigationHeader/index.js +26 -0
  20. package/dist/cjs/components/NavigationHeader/index.js.map +1 -0
  21. package/dist/cjs/components/NetworkBadge.js +18 -0
  22. package/dist/cjs/components/NetworkBadge.js.map +1 -0
  23. package/dist/cjs/components/SelectButton/SelectButton.js +12 -0
  24. package/dist/cjs/components/SelectButton/SelectButton.js.map +1 -0
  25. package/dist/cjs/components/SelectButton/SelectedIndicator.js +12 -0
  26. package/dist/cjs/components/SelectButton/SelectedIndicator.js.map +1 -0
  27. package/dist/cjs/components/SelectButton/index.js +6 -0
  28. package/dist/cjs/components/SelectButton/index.js.map +1 -0
  29. package/dist/cjs/components/SendItemInfo.js +21 -0
  30. package/dist/cjs/components/SendItemInfo.js.map +1 -0
  31. package/dist/cjs/components/SequenceWalletProvider/SequenceWalletProvider.js +55 -0
  32. package/dist/cjs/components/SequenceWalletProvider/SequenceWalletProvider.js.map +1 -0
  33. package/dist/cjs/components/SequenceWalletProvider/index.js +18 -0
  34. package/dist/cjs/components/SequenceWalletProvider/index.js.map +1 -0
  35. package/dist/cjs/components/SequenceWalletProvider/utils/index.js +84 -0
  36. package/dist/cjs/components/SequenceWalletProvider/utils/index.js.map +1 -0
  37. package/dist/cjs/components/TransactionConfirmation.js +65 -0
  38. package/dist/cjs/components/TransactionConfirmation.js.map +1 -0
  39. package/dist/cjs/components/TransactionHistoryList/TransactionHistoryItem.js +117 -0
  40. package/dist/cjs/components/TransactionHistoryList/TransactionHistoryItem.js.map +1 -0
  41. package/dist/cjs/components/TransactionHistoryList/TransactionHistorySkeleton.js +17 -0
  42. package/dist/cjs/components/TransactionHistoryList/TransactionHistorySkeleton.js.map +1 -0
  43. package/dist/cjs/components/TransactionHistoryList/index.js +97 -0
  44. package/dist/cjs/components/TransactionHistoryList/index.js.map +1 -0
  45. package/dist/cjs/components/WalletHeader/components/AccountInformation.js +15 -0
  46. package/dist/cjs/components/WalletHeader/components/AccountInformation.js.map +1 -0
  47. package/dist/cjs/components/WalletHeader/components/WalletDropdownContent.js +57 -0
  48. package/dist/cjs/components/WalletHeader/components/WalletDropdownContent.js.map +1 -0
  49. package/dist/cjs/components/WalletHeader/index.js +87 -0
  50. package/dist/cjs/components/WalletHeader/index.js.map +1 -0
  51. package/dist/cjs/constants/abi.js +92 -0
  52. package/dist/cjs/constants/abi.js.map +1 -0
  53. package/dist/cjs/constants/currency.js +29 -0
  54. package/dist/cjs/constants/currency.js.map +1 -0
  55. package/dist/cjs/constants/index.js +20 -0
  56. package/dist/cjs/constants/index.js.map +1 -0
  57. package/dist/cjs/constants/sizing.js +5 -0
  58. package/dist/cjs/constants/sizing.js.map +1 -0
  59. package/dist/cjs/contexts/Navigation.js +8 -0
  60. package/dist/cjs/contexts/Navigation.js.map +1 -0
  61. package/dist/cjs/contexts/WalletModal.js +8 -0
  62. package/dist/cjs/contexts/WalletModal.js.map +1 -0
  63. package/dist/cjs/contexts/genericContext.js +20 -0
  64. package/dist/cjs/contexts/genericContext.js.map +1 -0
  65. package/dist/cjs/contexts/index.js +19 -0
  66. package/dist/cjs/contexts/index.js.map +1 -0
  67. package/dist/cjs/hooks/index.js +20 -0
  68. package/dist/cjs/hooks/index.js.map +1 -0
  69. package/dist/cjs/hooks/useNavigation.js +23 -0
  70. package/dist/cjs/hooks/useNavigation.js.map +1 -0
  71. package/dist/cjs/hooks/useOpenWalletModal.js +10 -0
  72. package/dist/cjs/hooks/useOpenWalletModal.js.map +1 -0
  73. package/dist/cjs/hooks/useScrollbarWidth.js +13 -0
  74. package/dist/cjs/hooks/useScrollbarWidth.js.map +1 -0
  75. package/dist/cjs/hooks/useSettings.js +100 -0
  76. package/dist/cjs/hooks/useSettings.js.map +1 -0
  77. package/dist/cjs/index.js +12 -0
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/utils/helpers.js +49 -0
  80. package/dist/cjs/utils/helpers.js.map +1 -0
  81. package/dist/cjs/utils/index.js +19 -0
  82. package/dist/cjs/utils/index.js.map +1 -0
  83. package/dist/cjs/utils/tokens.js +78 -0
  84. package/dist/cjs/utils/tokens.js.map +1 -0
  85. package/dist/cjs/views/CoinDetails/Skeleton.js +13 -0
  86. package/dist/cjs/views/CoinDetails/Skeleton.js.map +1 -0
  87. package/dist/cjs/views/CoinDetails/index.js +90 -0
  88. package/dist/cjs/views/CoinDetails/index.js.map +1 -0
  89. package/dist/cjs/views/CollectibleDetails/Skeleton.js +14 -0
  90. package/dist/cjs/views/CollectibleDetails/Skeleton.js.map +1 -0
  91. package/dist/cjs/views/CollectibleDetails/index.js +83 -0
  92. package/dist/cjs/views/CollectibleDetails/index.js.map +1 -0
  93. package/dist/cjs/views/CollectionDetails/Skeleton.js +15 -0
  94. package/dist/cjs/views/CollectionDetails/Skeleton.js.map +1 -0
  95. package/dist/cjs/views/CollectionDetails/index.js +50 -0
  96. package/dist/cjs/views/CollectionDetails/index.js.map +1 -0
  97. package/dist/cjs/views/History.js +19 -0
  98. package/dist/cjs/views/History.js.map +1 -0
  99. package/dist/cjs/views/Home/components/AssetSummary/CoinTile/CoinTileContent.js +14 -0
  100. package/dist/cjs/views/Home/components/AssetSummary/CoinTile/CoinTileContent.js.map +1 -0
  101. package/dist/cjs/views/Home/components/AssetSummary/CoinTile/index.js +60 -0
  102. package/dist/cjs/views/Home/components/AssetSummary/CoinTile/index.js.map +1 -0
  103. package/dist/cjs/views/Home/components/AssetSummary/CollectibleTile/index.js +17 -0
  104. package/dist/cjs/views/Home/components/AssetSummary/CollectibleTile/index.js.map +1 -0
  105. package/dist/cjs/views/Home/components/AssetSummary/SkeletonTiles.js +14 -0
  106. package/dist/cjs/views/Home/components/AssetSummary/SkeletonTiles.js.map +1 -0
  107. package/dist/cjs/views/Home/components/AssetSummary/index.js +98 -0
  108. package/dist/cjs/views/Home/components/AssetSummary/index.js.map +1 -0
  109. package/dist/cjs/views/Home/index.js +10 -0
  110. package/dist/cjs/views/Home/index.js.map +1 -0
  111. package/dist/cjs/views/Receive.js +42 -0
  112. package/dist/cjs/views/Receive.js.map +1 -0
  113. package/dist/cjs/views/Search/SearchWallet.js +112 -0
  114. package/dist/cjs/views/Search/SearchWallet.js.map +1 -0
  115. package/dist/cjs/views/Search/SearchWalletViewAll.js +169 -0
  116. package/dist/cjs/views/Search/SearchWalletViewAll.js.map +1 -0
  117. package/dist/cjs/views/Search/components/BalanceItem.js +52 -0
  118. package/dist/cjs/views/Search/components/BalanceItem.js.map +1 -0
  119. package/dist/cjs/views/Search/components/CoinsTab.js +49 -0
  120. package/dist/cjs/views/Search/components/CoinsTab.js.map +1 -0
  121. package/dist/cjs/views/Search/components/CollectionsTab.js +49 -0
  122. package/dist/cjs/views/Search/components/CollectionsTab.js.map +1 -0
  123. package/dist/cjs/views/Search/components/WalletLink.js +15 -0
  124. package/dist/cjs/views/Search/components/WalletLink.js.map +1 -0
  125. package/dist/cjs/views/Search/index.js +19 -0
  126. package/dist/cjs/views/Search/index.js.map +1 -0
  127. package/dist/cjs/views/SendCoin.js +198 -0
  128. package/dist/cjs/views/SendCoin.js.map +1 -0
  129. package/dist/cjs/views/SendCollectible.js +237 -0
  130. package/dist/cjs/views/SendCollectible.js.map +1 -0
  131. package/dist/cjs/views/Settings/Currency.js +16 -0
  132. package/dist/cjs/views/Settings/Currency.js.map +1 -0
  133. package/dist/cjs/views/Settings/General.js +23 -0
  134. package/dist/cjs/views/Settings/General.js.map +1 -0
  135. package/dist/cjs/views/Settings/Menu.js +28 -0
  136. package/dist/cjs/views/Settings/Menu.js.map +1 -0
  137. package/dist/cjs/views/Settings/Network.js +35 -0
  138. package/dist/cjs/views/Settings/Network.js.map +1 -0
  139. package/dist/cjs/views/Settings/index.js +21 -0
  140. package/dist/cjs/views/Settings/index.js.map +1 -0
  141. package/dist/cjs/views/SwapCoin/SwapList.js +190 -0
  142. package/dist/cjs/views/SwapCoin/SwapList.js.map +1 -0
  143. package/dist/cjs/views/SwapCoin/index.js +89 -0
  144. package/dist/cjs/views/SwapCoin/index.js.map +1 -0
  145. package/dist/cjs/views/TransactionDetails/index.js +88 -0
  146. package/dist/cjs/views/TransactionDetails/index.js.map +1 -0
  147. package/dist/cjs/views/index.js +30 -0
  148. package/dist/cjs/views/index.js.map +1 -0
  149. package/dist/esm/components/Alert.js +11 -0
  150. package/dist/esm/components/Alert.js.map +1 -0
  151. package/dist/esm/components/CoinRow.js +14 -0
  152. package/dist/esm/components/CoinRow.js.map +1 -0
  153. package/dist/esm/components/CollectibleTileImage.js +6 -0
  154. package/dist/esm/components/CollectibleTileImage.js.map +1 -0
  155. package/dist/esm/components/CopyButton.js +21 -0
  156. package/dist/esm/components/CopyButton.js.map +1 -0
  157. package/dist/esm/components/DefaultIcon.js +9 -0
  158. package/dist/esm/components/DefaultIcon.js.map +1 -0
  159. package/dist/esm/components/FeeOptionSelector.js +41 -0
  160. package/dist/esm/components/FeeOptionSelector.js.map +1 -0
  161. package/dist/esm/components/InfiniteScroll.js +37 -0
  162. package/dist/esm/components/InfiniteScroll.js.map +1 -0
  163. package/dist/esm/components/Loader.js +6 -0
  164. package/dist/esm/components/Loader.js.map +1 -0
  165. package/dist/esm/components/NavigationHeader/index.js +22 -0
  166. package/dist/esm/components/NavigationHeader/index.js.map +1 -0
  167. package/dist/esm/components/NetworkBadge.js +14 -0
  168. package/dist/esm/components/NetworkBadge.js.map +1 -0
  169. package/dist/esm/components/SelectButton/SelectButton.js +8 -0
  170. package/dist/esm/components/SelectButton/SelectButton.js.map +1 -0
  171. package/dist/esm/components/SelectButton/SelectedIndicator.js +8 -0
  172. package/dist/esm/components/SelectButton/SelectedIndicator.js.map +1 -0
  173. package/dist/esm/components/SelectButton/index.js +2 -0
  174. package/dist/esm/components/SelectButton/index.js.map +1 -0
  175. package/dist/esm/components/SendItemInfo.js +16 -0
  176. package/dist/esm/components/SendItemInfo.js.map +1 -0
  177. package/dist/esm/components/SequenceWalletProvider/SequenceWalletProvider.js +50 -0
  178. package/dist/esm/components/SequenceWalletProvider/SequenceWalletProvider.js.map +1 -0
  179. package/dist/esm/components/SequenceWalletProvider/index.js +2 -0
  180. package/dist/esm/components/SequenceWalletProvider/index.js.map +1 -0
  181. package/dist/esm/components/SequenceWalletProvider/utils/index.js +79 -0
  182. package/dist/esm/components/SequenceWalletProvider/utils/index.js.map +1 -0
  183. package/dist/esm/components/TransactionConfirmation.js +61 -0
  184. package/dist/esm/components/TransactionConfirmation.js.map +1 -0
  185. package/dist/esm/components/TransactionHistoryList/TransactionHistoryItem.js +110 -0
  186. package/dist/esm/components/TransactionHistoryList/TransactionHistoryItem.js.map +1 -0
  187. package/dist/esm/components/TransactionHistoryList/TransactionHistorySkeleton.js +13 -0
  188. package/dist/esm/components/TransactionHistoryList/TransactionHistorySkeleton.js.map +1 -0
  189. package/dist/esm/components/TransactionHistoryList/index.js +93 -0
  190. package/dist/esm/components/TransactionHistoryList/index.js.map +1 -0
  191. package/dist/esm/components/WalletHeader/components/AccountInformation.js +12 -0
  192. package/dist/esm/components/WalletHeader/components/AccountInformation.js.map +1 -0
  193. package/dist/esm/components/WalletHeader/components/WalletDropdownContent.js +54 -0
  194. package/dist/esm/components/WalletHeader/components/WalletDropdownContent.js.map +1 -0
  195. package/dist/esm/components/WalletHeader/index.js +50 -0
  196. package/dist/esm/components/WalletHeader/index.js.map +1 -0
  197. package/dist/esm/constants/abi.js +89 -0
  198. package/dist/esm/constants/abi.js.map +1 -0
  199. package/dist/esm/constants/currency.js +26 -0
  200. package/dist/esm/constants/currency.js.map +1 -0
  201. package/dist/esm/constants/index.js +4 -0
  202. package/dist/esm/constants/index.js.map +1 -0
  203. package/dist/esm/constants/sizing.js +2 -0
  204. package/dist/esm/constants/sizing.js.map +1 -0
  205. package/dist/esm/contexts/Navigation.js +4 -0
  206. package/dist/esm/contexts/Navigation.js.map +1 -0
  207. package/dist/esm/contexts/WalletModal.js +4 -0
  208. package/dist/esm/contexts/WalletModal.js.map +1 -0
  209. package/dist/esm/contexts/genericContext.js +16 -0
  210. package/dist/esm/contexts/genericContext.js.map +1 -0
  211. package/dist/esm/contexts/index.js +3 -0
  212. package/dist/esm/contexts/index.js.map +1 -0
  213. package/dist/esm/hooks/index.js +4 -0
  214. package/dist/esm/hooks/index.js.map +1 -0
  215. package/dist/esm/hooks/useNavigation.js +19 -0
  216. package/dist/esm/hooks/useNavigation.js.map +1 -0
  217. package/dist/esm/hooks/useOpenWalletModal.js +6 -0
  218. package/dist/esm/hooks/useOpenWalletModal.js.map +1 -0
  219. package/dist/esm/hooks/useScrollbarWidth.js +9 -0
  220. package/dist/esm/hooks/useScrollbarWidth.js.map +1 -0
  221. package/dist/esm/hooks/useSettings.js +96 -0
  222. package/dist/esm/hooks/useSettings.js.map +1 -0
  223. package/dist/esm/index.js +6 -0
  224. package/dist/esm/index.js.map +1 -0
  225. package/dist/esm/utils/helpers.js +41 -0
  226. package/dist/esm/utils/helpers.js.map +1 -0
  227. package/dist/esm/utils/index.js +3 -0
  228. package/dist/esm/utils/index.js.map +1 -0
  229. package/dist/esm/utils/tokens.js +70 -0
  230. package/dist/esm/utils/tokens.js.map +1 -0
  231. package/dist/esm/views/CoinDetails/Skeleton.js +9 -0
  232. package/dist/esm/views/CoinDetails/Skeleton.js.map +1 -0
  233. package/dist/esm/views/CoinDetails/index.js +86 -0
  234. package/dist/esm/views/CoinDetails/index.js.map +1 -0
  235. package/dist/esm/views/CollectibleDetails/Skeleton.js +10 -0
  236. package/dist/esm/views/CollectibleDetails/Skeleton.js.map +1 -0
  237. package/dist/esm/views/CollectibleDetails/index.js +79 -0
  238. package/dist/esm/views/CollectibleDetails/index.js.map +1 -0
  239. package/dist/esm/views/CollectionDetails/Skeleton.js +11 -0
  240. package/dist/esm/views/CollectionDetails/Skeleton.js.map +1 -0
  241. package/dist/esm/views/CollectionDetails/index.js +46 -0
  242. package/dist/esm/views/CollectionDetails/index.js.map +1 -0
  243. package/dist/esm/views/History.js +15 -0
  244. package/dist/esm/views/History.js.map +1 -0
  245. package/dist/esm/views/Home/components/AssetSummary/CoinTile/CoinTileContent.js +10 -0
  246. package/dist/esm/views/Home/components/AssetSummary/CoinTile/CoinTileContent.js.map +1 -0
  247. package/dist/esm/views/Home/components/AssetSummary/CoinTile/index.js +56 -0
  248. package/dist/esm/views/Home/components/AssetSummary/CoinTile/index.js.map +1 -0
  249. package/dist/esm/views/Home/components/AssetSummary/CollectibleTile/index.js +13 -0
  250. package/dist/esm/views/Home/components/AssetSummary/CollectibleTile/index.js.map +1 -0
  251. package/dist/esm/views/Home/components/AssetSummary/SkeletonTiles.js +10 -0
  252. package/dist/esm/views/Home/components/AssetSummary/SkeletonTiles.js.map +1 -0
  253. package/dist/esm/views/Home/components/AssetSummary/index.js +94 -0
  254. package/dist/esm/views/Home/components/AssetSummary/index.js.map +1 -0
  255. package/dist/esm/views/Home/index.js +6 -0
  256. package/dist/esm/views/Home/index.js.map +1 -0
  257. package/dist/esm/views/Receive.js +38 -0
  258. package/dist/esm/views/Receive.js.map +1 -0
  259. package/dist/esm/views/Search/SearchWallet.js +105 -0
  260. package/dist/esm/views/Search/SearchWallet.js.map +1 -0
  261. package/dist/esm/views/Search/SearchWalletViewAll.js +162 -0
  262. package/dist/esm/views/Search/SearchWalletViewAll.js.map +1 -0
  263. package/dist/esm/views/Search/components/BalanceItem.js +48 -0
  264. package/dist/esm/views/Search/components/BalanceItem.js.map +1 -0
  265. package/dist/esm/views/Search/components/CoinsTab.js +45 -0
  266. package/dist/esm/views/Search/components/CoinsTab.js.map +1 -0
  267. package/dist/esm/views/Search/components/CollectionsTab.js +45 -0
  268. package/dist/esm/views/Search/components/CollectionsTab.js.map +1 -0
  269. package/dist/esm/views/Search/components/WalletLink.js +11 -0
  270. package/dist/esm/views/Search/components/WalletLink.js.map +1 -0
  271. package/dist/esm/views/Search/index.js +3 -0
  272. package/dist/esm/views/Search/index.js.map +1 -0
  273. package/dist/esm/views/SendCoin.js +194 -0
  274. package/dist/esm/views/SendCoin.js.map +1 -0
  275. package/dist/esm/views/SendCollectible.js +233 -0
  276. package/dist/esm/views/SendCollectible.js.map +1 -0
  277. package/dist/esm/views/Settings/Currency.js +12 -0
  278. package/dist/esm/views/Settings/Currency.js.map +1 -0
  279. package/dist/esm/views/Settings/General.js +19 -0
  280. package/dist/esm/views/Settings/General.js.map +1 -0
  281. package/dist/esm/views/Settings/Menu.js +24 -0
  282. package/dist/esm/views/Settings/Menu.js.map +1 -0
  283. package/dist/esm/views/Settings/Network.js +31 -0
  284. package/dist/esm/views/Settings/Network.js.map +1 -0
  285. package/dist/esm/views/Settings/index.js +5 -0
  286. package/dist/esm/views/Settings/index.js.map +1 -0
  287. package/dist/esm/views/SwapCoin/SwapList.js +186 -0
  288. package/dist/esm/views/SwapCoin/SwapList.js.map +1 -0
  289. package/dist/esm/views/SwapCoin/index.js +85 -0
  290. package/dist/esm/views/SwapCoin/index.js.map +1 -0
  291. package/dist/esm/views/TransactionDetails/index.js +81 -0
  292. package/dist/esm/views/TransactionDetails/index.js.map +1 -0
  293. package/dist/esm/views/index.js +14 -0
  294. package/dist/esm/views/index.js.map +1 -0
  295. package/dist/types/components/Alert.d.ts +12 -0
  296. package/dist/types/components/Alert.d.ts.map +1 -0
  297. package/dist/types/components/CoinRow.d.ts +13 -0
  298. package/dist/types/components/CoinRow.d.ts.map +1 -0
  299. package/dist/types/components/CollectibleTileImage.d.ts +6 -0
  300. package/dist/types/components/CollectibleTileImage.d.ts.map +1 -0
  301. package/dist/types/components/CopyButton.d.ts +10 -0
  302. package/dist/types/components/CopyButton.d.ts.map +1 -0
  303. package/dist/types/components/DefaultIcon.d.ts +6 -0
  304. package/dist/types/components/DefaultIcon.d.ts.map +1 -0
  305. package/dist/types/components/FeeOptionSelector.d.ts +29 -0
  306. package/dist/types/components/FeeOptionSelector.d.ts.map +1 -0
  307. package/dist/types/components/InfiniteScroll.d.ts +9 -0
  308. package/dist/types/components/InfiniteScroll.d.ts.map +1 -0
  309. package/dist/types/components/Loader.d.ts +2 -0
  310. package/dist/types/components/Loader.d.ts.map +1 -0
  311. package/dist/types/components/NavigationHeader/index.d.ts +7 -0
  312. package/dist/types/components/NavigationHeader/index.d.ts.map +1 -0
  313. package/dist/types/components/NetworkBadge.d.ts +6 -0
  314. package/dist/types/components/NetworkBadge.d.ts.map +1 -0
  315. package/dist/types/components/SelectButton/SelectButton.d.ts +13 -0
  316. package/dist/types/components/SelectButton/SelectButton.d.ts.map +1 -0
  317. package/dist/types/components/SelectButton/SelectedIndicator.d.ts +8 -0
  318. package/dist/types/components/SelectButton/SelectedIndicator.d.ts.map +1 -0
  319. package/dist/types/components/SelectButton/index.d.ts +2 -0
  320. package/dist/types/components/SelectButton/index.d.ts.map +1 -0
  321. package/dist/types/components/SendItemInfo.d.ts +15 -0
  322. package/dist/types/components/SendItemInfo.d.ts.map +1 -0
  323. package/dist/types/components/SequenceWalletProvider/SequenceWalletProvider.d.ts +7 -0
  324. package/dist/types/components/SequenceWalletProvider/SequenceWalletProvider.d.ts.map +1 -0
  325. package/dist/types/components/SequenceWalletProvider/index.d.ts +2 -0
  326. package/dist/types/components/SequenceWalletProvider/index.d.ts.map +1 -0
  327. package/dist/types/components/SequenceWalletProvider/utils/index.d.ts +4 -0
  328. package/dist/types/components/SequenceWalletProvider/utils/index.d.ts.map +1 -0
  329. package/dist/types/components/TransactionConfirmation.d.ts +24 -0
  330. package/dist/types/components/TransactionConfirmation.d.ts.map +1 -0
  331. package/dist/types/components/TransactionHistoryList/TransactionHistoryItem.d.ts +7 -0
  332. package/dist/types/components/TransactionHistoryList/TransactionHistoryItem.d.ts.map +1 -0
  333. package/dist/types/components/TransactionHistoryList/TransactionHistorySkeleton.d.ts +2 -0
  334. package/dist/types/components/TransactionHistoryList/TransactionHistorySkeleton.d.ts.map +1 -0
  335. package/dist/types/components/TransactionHistoryList/index.d.ts +9 -0
  336. package/dist/types/components/TransactionHistoryList/index.d.ts.map +1 -0
  337. package/dist/types/components/WalletHeader/components/AccountInformation.d.ts +7 -0
  338. package/dist/types/components/WalletHeader/components/AccountInformation.d.ts.map +1 -0
  339. package/dist/types/components/WalletHeader/components/WalletDropdownContent.d.ts +7 -0
  340. package/dist/types/components/WalletHeader/components/WalletDropdownContent.d.ts.map +1 -0
  341. package/dist/types/components/WalletHeader/index.d.ts +2 -0
  342. package/dist/types/components/WalletHeader/index.d.ts.map +1 -0
  343. package/dist/types/constants/abi.d.ts +40 -0
  344. package/dist/types/constants/abi.d.ts.map +1 -0
  345. package/dist/types/constants/currency.d.ts +11 -0
  346. package/dist/types/constants/currency.d.ts.map +1 -0
  347. package/dist/types/constants/index.d.ts +4 -0
  348. package/dist/types/constants/index.d.ts.map +1 -0
  349. package/dist/types/constants/sizing.d.ts +2 -0
  350. package/dist/types/constants/sizing.d.ts.map +1 -0
  351. package/dist/types/contexts/Navigation.d.ts +88 -0
  352. package/dist/types/contexts/Navigation.d.ts.map +1 -0
  353. package/dist/types/contexts/WalletModal.d.ts +11 -0
  354. package/dist/types/contexts/WalletModal.d.ts.map +1 -0
  355. package/dist/types/contexts/genericContext.d.ts +2 -0
  356. package/dist/types/contexts/genericContext.d.ts.map +1 -0
  357. package/dist/types/contexts/index.d.ts +3 -0
  358. package/dist/types/contexts/index.d.ts.map +1 -0
  359. package/dist/types/hooks/index.d.ts +4 -0
  360. package/dist/types/hooks/index.d.ts.map +1 -0
  361. package/dist/types/hooks/useNavigation.d.ts +10 -0
  362. package/dist/types/hooks/useNavigation.d.ts.map +1 -0
  363. package/dist/types/hooks/useOpenWalletModal.d.ts +5 -0
  364. package/dist/types/hooks/useOpenWalletModal.d.ts.map +1 -0
  365. package/dist/types/hooks/useScrollbarWidth.d.ts +2 -0
  366. package/dist/types/hooks/useScrollbarWidth.d.ts.map +1 -0
  367. package/dist/types/hooks/useSettings.d.ts +14 -0
  368. package/dist/types/hooks/useSettings.d.ts.map +1 -0
  369. package/dist/types/index.d.ts +4 -0
  370. package/dist/types/index.d.ts.map +1 -0
  371. package/dist/types/utils/helpers.d.ts +6 -0
  372. package/dist/types/utils/helpers.d.ts.map +1 -0
  373. package/dist/types/utils/index.d.ts +3 -0
  374. package/dist/types/utils/index.d.ts.map +1 -0
  375. package/dist/types/utils/tokens.d.ts +21 -0
  376. package/dist/types/utils/tokens.d.ts.map +1 -0
  377. package/dist/types/views/CoinDetails/Skeleton.d.ts +7 -0
  378. package/dist/types/views/CoinDetails/Skeleton.d.ts.map +1 -0
  379. package/dist/types/views/CoinDetails/index.d.ts +6 -0
  380. package/dist/types/views/CoinDetails/index.d.ts.map +1 -0
  381. package/dist/types/views/CollectibleDetails/Skeleton.d.ts +6 -0
  382. package/dist/types/views/CollectibleDetails/Skeleton.d.ts.map +1 -0
  383. package/dist/types/views/CollectibleDetails/index.d.ts +7 -0
  384. package/dist/types/views/CollectibleDetails/index.d.ts.map +1 -0
  385. package/dist/types/views/CollectionDetails/Skeleton.d.ts +6 -0
  386. package/dist/types/views/CollectionDetails/Skeleton.d.ts.map +1 -0
  387. package/dist/types/views/CollectionDetails/index.d.ts +7 -0
  388. package/dist/types/views/CollectionDetails/index.d.ts.map +1 -0
  389. package/dist/types/views/History.d.ts +2 -0
  390. package/dist/types/views/History.d.ts.map +1 -0
  391. package/dist/types/views/Home/components/AssetSummary/CoinTile/CoinTileContent.d.ts +12 -0
  392. package/dist/types/views/Home/components/AssetSummary/CoinTile/CoinTileContent.d.ts.map +1 -0
  393. package/dist/types/views/Home/components/AssetSummary/CoinTile/index.d.ts +7 -0
  394. package/dist/types/views/Home/components/AssetSummary/CoinTile/index.d.ts.map +1 -0
  395. package/dist/types/views/Home/components/AssetSummary/CollectibleTile/index.d.ts +7 -0
  396. package/dist/types/views/Home/components/AssetSummary/CollectibleTile/index.d.ts.map +1 -0
  397. package/dist/types/views/Home/components/AssetSummary/SkeletonTiles.d.ts +2 -0
  398. package/dist/types/views/Home/components/AssetSummary/SkeletonTiles.d.ts.map +1 -0
  399. package/dist/types/views/Home/components/AssetSummary/index.d.ts +2 -0
  400. package/dist/types/views/Home/components/AssetSummary/index.d.ts.map +1 -0
  401. package/dist/types/views/Home/index.d.ts +2 -0
  402. package/dist/types/views/Home/index.d.ts.map +1 -0
  403. package/dist/types/views/Receive.d.ts +2 -0
  404. package/dist/types/views/Receive.d.ts.map +1 -0
  405. package/dist/types/views/Search/SearchWallet.d.ts +2 -0
  406. package/dist/types/views/Search/SearchWallet.d.ts.map +1 -0
  407. package/dist/types/views/Search/SearchWalletViewAll.d.ts +10 -0
  408. package/dist/types/views/Search/SearchWalletViewAll.d.ts.map +1 -0
  409. package/dist/types/views/Search/components/BalanceItem.d.ts +7 -0
  410. package/dist/types/views/Search/components/BalanceItem.d.ts.map +1 -0
  411. package/dist/types/views/Search/components/CoinsTab.d.ts +16 -0
  412. package/dist/types/views/Search/components/CoinsTab.d.ts.map +1 -0
  413. package/dist/types/views/Search/components/CollectionsTab.d.ts +16 -0
  414. package/dist/types/views/Search/components/CollectionsTab.d.ts.map +1 -0
  415. package/dist/types/views/Search/components/WalletLink.d.ts +8 -0
  416. package/dist/types/views/Search/components/WalletLink.d.ts.map +1 -0
  417. package/dist/types/views/Search/index.d.ts +3 -0
  418. package/dist/types/views/Search/index.d.ts.map +1 -0
  419. package/dist/types/views/SendCoin.d.ts +7 -0
  420. package/dist/types/views/SendCoin.d.ts.map +1 -0
  421. package/dist/types/views/SendCollectible.d.ts +8 -0
  422. package/dist/types/views/SendCollectible.d.ts.map +1 -0
  423. package/dist/types/views/Settings/Currency.d.ts +2 -0
  424. package/dist/types/views/Settings/Currency.d.ts.map +1 -0
  425. package/dist/types/views/Settings/General.d.ts +2 -0
  426. package/dist/types/views/Settings/General.d.ts.map +1 -0
  427. package/dist/types/views/Settings/Menu.d.ts +2 -0
  428. package/dist/types/views/Settings/Menu.d.ts.map +1 -0
  429. package/dist/types/views/Settings/Network.d.ts +2 -0
  430. package/dist/types/views/Settings/Network.d.ts.map +1 -0
  431. package/dist/types/views/Settings/index.d.ts +5 -0
  432. package/dist/types/views/Settings/index.d.ts.map +1 -0
  433. package/dist/types/views/SwapCoin/SwapList.d.ts +8 -0
  434. package/dist/types/views/SwapCoin/SwapList.d.ts.map +1 -0
  435. package/dist/types/views/SwapCoin/index.d.ts +6 -0
  436. package/dist/types/views/SwapCoin/index.d.ts.map +1 -0
  437. package/dist/types/views/TransactionDetails/index.d.ts +7 -0
  438. package/dist/types/views/TransactionDetails/index.d.ts.map +1 -0
  439. package/dist/types/views/index.d.ts +14 -0
  440. package/dist/types/views/index.d.ts.map +1 -0
  441. package/package.json +69 -0
  442. package/src/components/Alert.tsx +51 -0
  443. package/src/components/CoinRow.tsx +62 -0
  444. package/src/components/CollectibleTileImage.tsx +14 -0
  445. package/src/components/CopyButton.tsx +41 -0
  446. package/src/components/DefaultIcon.tsx +22 -0
  447. package/src/components/FeeOptionSelector.tsx +133 -0
  448. package/src/components/InfiniteScroll.tsx +56 -0
  449. package/src/components/Loader.tsx +12 -0
  450. package/src/components/NavigationHeader/index.tsx +59 -0
  451. package/src/components/NetworkBadge.tsx +35 -0
  452. package/src/components/SelectButton/SelectButton.tsx +33 -0
  453. package/src/components/SelectButton/SelectedIndicator.tsx +34 -0
  454. package/src/components/SelectButton/index.ts +1 -0
  455. package/src/components/SendItemInfo.tsx +83 -0
  456. package/src/components/SequenceWalletProvider/SequenceWalletProvider.tsx +96 -0
  457. package/src/components/SequenceWalletProvider/index.ts +1 -0
  458. package/src/components/SequenceWalletProvider/utils/index.tsx +119 -0
  459. package/src/components/TransactionConfirmation.tsx +183 -0
  460. package/src/components/TransactionHistoryList/TransactionHistoryItem.tsx +190 -0
  461. package/src/components/TransactionHistoryList/TransactionHistorySkeleton.tsx +36 -0
  462. package/src/components/TransactionHistoryList/index.tsx +160 -0
  463. package/src/components/WalletHeader/components/AccountInformation.tsx +31 -0
  464. package/src/components/WalletHeader/components/WalletDropdownContent.tsx +96 -0
  465. package/src/components/WalletHeader/index.tsx +84 -0
  466. package/src/constants/abi.ts +90 -0
  467. package/src/constants/currency.ts +35 -0
  468. package/src/constants/index.ts +3 -0
  469. package/src/constants/sizing.ts +1 -0
  470. package/src/contexts/Navigation.ts +132 -0
  471. package/src/contexts/WalletModal.ts +15 -0
  472. package/src/contexts/genericContext.ts +19 -0
  473. package/src/contexts/index.ts +2 -0
  474. package/src/hooks/index.ts +3 -0
  475. package/src/hooks/useNavigation.ts +30 -0
  476. package/src/hooks/useOpenWalletModal.ts +7 -0
  477. package/src/hooks/useScrollbarWidth.ts +11 -0
  478. package/src/hooks/useSettings.ts +121 -0
  479. package/src/index.ts +6 -0
  480. package/src/utils/helpers.ts +51 -0
  481. package/src/utils/index.ts +2 -0
  482. package/src/utils/tokens.ts +98 -0
  483. package/src/views/CoinDetails/Skeleton.tsx +46 -0
  484. package/src/views/CoinDetails/index.tsx +153 -0
  485. package/src/views/CollectibleDetails/Skeleton.tsx +50 -0
  486. package/src/views/CollectibleDetails/index.tsx +184 -0
  487. package/src/views/CollectionDetails/Skeleton.tsx +36 -0
  488. package/src/views/CollectionDetails/index.tsx +98 -0
  489. package/src/views/History.tsx +28 -0
  490. package/src/views/Home/components/AssetSummary/CoinTile/CoinTileContent.tsx +60 -0
  491. package/src/views/Home/components/AssetSummary/CoinTile/index.tsx +93 -0
  492. package/src/views/Home/components/AssetSummary/CollectibleTile/index.tsx +20 -0
  493. package/src/views/Home/components/AssetSummary/SkeletonTiles.tsx +21 -0
  494. package/src/views/Home/components/AssetSummary/index.tsx +128 -0
  495. package/src/views/Home/index.tsx +11 -0
  496. package/src/views/Receive.tsx +83 -0
  497. package/src/views/Search/SearchWallet.tsx +177 -0
  498. package/src/views/Search/SearchWalletViewAll.tsx +265 -0
  499. package/src/views/Search/components/BalanceItem.tsx +76 -0
  500. package/src/views/Search/components/CoinsTab.tsx +89 -0
  501. package/src/views/Search/components/CollectionsTab.tsx +88 -0
  502. package/src/views/Search/components/WalletLink.tsx +32 -0
  503. package/src/views/Search/index.ts +2 -0
  504. package/src/views/SendCoin.tsx +397 -0
  505. package/src/views/SendCollectible.tsx +447 -0
  506. package/src/views/Settings/Currency.tsx +34 -0
  507. package/src/views/Settings/General.tsx +55 -0
  508. package/src/views/Settings/Menu.tsx +60 -0
  509. package/src/views/Settings/Network.tsx +60 -0
  510. package/src/views/Settings/index.ts +4 -0
  511. package/src/views/SwapCoin/SwapList.tsx +320 -0
  512. package/src/views/SwapCoin/index.tsx +150 -0
  513. package/src/views/TransactionDetails/index.tsx +213 -0
  514. package/src/views/index.ts +13 -0
@@ -0,0 +1,320 @@
1
+ import {
2
+ CryptoOption,
3
+ compareAddress,
4
+ formatDisplay,
5
+ sendTransactions,
6
+ useAnalyticsContext,
7
+ ExtendedConnector
8
+ } from '@0xsequence/connect'
9
+ import { Button, Spinner, Text } from '@0xsequence/design-system'
10
+ import {
11
+ useGetSwapPrices,
12
+ useGetSwapQuote,
13
+ useClearCachedBalances,
14
+ useGetContractInfo,
15
+ useIndexerClient
16
+ } from '@0xsequence/react-hooks'
17
+ import { useState, useEffect } from 'react'
18
+ import { zeroAddress, formatUnits, Hex } from 'viem'
19
+ import { useAccount, useChainId, usePublicClient, useSwitchChain, useWalletClient } from 'wagmi'
20
+
21
+ import { HEADER_HEIGHT } from '../../constants'
22
+ import { useNavigation } from '../../hooks'
23
+
24
+ interface SwapListProps {
25
+ chainId: number
26
+ contractAddress: string
27
+ amount: string
28
+ }
29
+
30
+ export const SwapList = ({ chainId, contractAddress, amount }: SwapListProps) => {
31
+ const { clearCachedBalances } = useClearCachedBalances()
32
+ const { setNavigation } = useNavigation()
33
+ const { address: userAddress, connector } = useAccount()
34
+ const [isTxsPending, setIsTxsPending] = useState(false)
35
+ const [isErrorTx, setIsErrorTx] = useState(false)
36
+ const [selectedCurrency, setSelectedCurrency] = useState<string>()
37
+ const publicClient = usePublicClient({ chainId })
38
+ const { data: walletClient } = useWalletClient({ chainId })
39
+ const { switchChainAsync } = useSwitchChain()
40
+
41
+ const isConnectorSequenceBased = !!(connector as ExtendedConnector)?._wallet?.isSequenceBased
42
+ const { analytics } = useAnalyticsContext()
43
+ const connectedChainId = useChainId()
44
+ const isCorrectChainId = connectedChainId === chainId
45
+ const showSwitchNetwork = !isCorrectChainId && !isConnectorSequenceBased
46
+
47
+ const buyCurrencyAddress = contractAddress
48
+ const sellCurrencyAddress = selectedCurrency || ''
49
+
50
+ const {
51
+ data: swapPrices = [],
52
+ isLoading: swapPricesIsLoading,
53
+ isError: isErrorSwapPrices
54
+ } = useGetSwapPrices({
55
+ userAddress: userAddress ?? '',
56
+ buyCurrencyAddress,
57
+ chainId: chainId,
58
+ buyAmount: amount,
59
+ withContractInfo: true
60
+ })
61
+
62
+ const { data: currencyInfo, isLoading: isLoadingCurrencyInfo } = useGetContractInfo({
63
+ chainID: String(chainId),
64
+ contractAddress: contractAddress
65
+ })
66
+
67
+ useEffect(() => {
68
+ if (!swapPricesIsLoading && swapPrices.length > 0) {
69
+ setSelectedCurrency(swapPrices[0].info?.address)
70
+ }
71
+ }, [swapPricesIsLoading])
72
+
73
+ const disableSwapQuote = !selectedCurrency || compareAddress(selectedCurrency, buyCurrencyAddress)
74
+
75
+ const {
76
+ data: swapQuote,
77
+ isLoading: isLoadingSwapQuote,
78
+ isError: isErrorSwapQuote
79
+ } = useGetSwapQuote(
80
+ {
81
+ userAddress: userAddress ?? '',
82
+ buyCurrencyAddress,
83
+
84
+ buyAmount: amount,
85
+ chainId: chainId,
86
+ sellCurrencyAddress,
87
+ includeApprove: true
88
+ },
89
+ {
90
+ disabled: disableSwapQuote
91
+ }
92
+ )
93
+
94
+ const indexerClient = useIndexerClient(chainId)
95
+
96
+ const quoteFetchInProgress = isLoadingSwapQuote
97
+
98
+ const isLoading = swapPricesIsLoading || isLoadingCurrencyInfo
99
+
100
+ const onClickProceed = async () => {
101
+ if (!userAddress || !publicClient || !walletClient || !connector) {
102
+ return
103
+ }
104
+
105
+ setIsErrorTx(false)
106
+ setIsTxsPending(true)
107
+ try {
108
+ const swapPrice = swapPrices?.find(price => price.info?.address === selectedCurrency)
109
+ const isSwapNativeToken = compareAddress(zeroAddress, swapPrice?.price.currencyAddress || '')
110
+
111
+ const getSwapTransactions = () => {
112
+ if (!swapQuote || !swapPrice) {
113
+ return []
114
+ }
115
+
116
+ const swapTransactions = [
117
+ // Swap quote optional approve step
118
+ ...(swapQuote?.approveData && !isSwapNativeToken
119
+ ? [
120
+ {
121
+ to: swapPrice.price.currencyAddress as Hex,
122
+ data: swapQuote.approveData as Hex,
123
+ chain: chainId
124
+ }
125
+ ]
126
+ : []),
127
+ // Swap quote tx
128
+ {
129
+ to: swapQuote.to as Hex,
130
+ data: swapQuote.transactionData as Hex,
131
+ chain: chainId,
132
+ ...(isSwapNativeToken
133
+ ? {
134
+ value: BigInt(swapQuote.transactionValue)
135
+ }
136
+ : {})
137
+ }
138
+ ]
139
+ return swapTransactions
140
+ }
141
+
142
+ const walletClientChainId = await walletClient.getChainId()
143
+ if (walletClientChainId !== chainId) {
144
+ await walletClient.switchChain({ id: chainId })
145
+ }
146
+
147
+ const txHash = await sendTransactions({
148
+ connector,
149
+ walletClient,
150
+ publicClient,
151
+ chainId,
152
+ indexerClient,
153
+ senderAddress: userAddress,
154
+ transactions: [...getSwapTransactions()]
155
+ })
156
+
157
+ analytics?.track({
158
+ event: 'SEND_TRANSACTION_REQUEST',
159
+ props: {
160
+ type: 'crypto',
161
+ walletClient: (connector as ExtendedConnector | undefined)?._wallet?.id || 'unknown',
162
+ source: 'sequence-kit/wallet',
163
+ chainId: String(chainId),
164
+ origin: window.location.origin,
165
+ txHash
166
+ }
167
+ })
168
+
169
+ clearCachedBalances()
170
+
171
+ setNavigation({
172
+ location: 'coin-details',
173
+ params: {
174
+ chainId,
175
+ contractAddress
176
+ }
177
+ })
178
+ } catch (e) {
179
+ setIsTxsPending(false)
180
+ setIsErrorTx(true)
181
+ console.error('Failed to send transactions', e)
182
+ }
183
+ }
184
+
185
+ const noOptionsFound = swapPrices.length === 0
186
+
187
+ const SwapContent = () => {
188
+ if (isLoading) {
189
+ return (
190
+ <div className="flex w-full justify-center items-center">
191
+ <Spinner />
192
+ </div>
193
+ )
194
+ } else if (isErrorSwapPrices) {
195
+ return (
196
+ <div className="flex w-full justify-center items-center">
197
+ <Text variant="normal" color="primary">
198
+ A problem occurred while fetching swap options.
199
+ </Text>
200
+ </div>
201
+ )
202
+ } else if (noOptionsFound) {
203
+ return (
204
+ <div className="flex w-full justify-center items-center">
205
+ <Text variant="normal" color="primary">
206
+ No swap option found!
207
+ </Text>
208
+ </div>
209
+ )
210
+ } else {
211
+ const buyCurrencySymbol = currencyInfo?.symbol || ''
212
+ const buyCurrencyDecimals = currencyInfo?.decimals || 0
213
+ const displayedAmount = formatDisplay(formatUnits(BigInt(amount), buyCurrencyDecimals), {
214
+ disableScientificNotation: true,
215
+ disableCompactNotation: true,
216
+ significantDigits: 6
217
+ })
218
+
219
+ const getButtonLabel = () => {
220
+ if (quoteFetchInProgress) {
221
+ return 'Preparing swap...'
222
+ } else if (isTxsPending) {
223
+ return 'Processing...'
224
+ } else {
225
+ return 'Proceed'
226
+ }
227
+ }
228
+
229
+ return (
230
+ <div className="flex w-full gap-3 flex-col">
231
+ <div className="flex w-full flex-col gap-2">
232
+ <Text variant="small" color="primary">
233
+ Select a token in your wallet to swap for {displayedAmount} {buyCurrencySymbol}.
234
+ </Text>
235
+ {swapPrices.map(swapPrice => {
236
+ const sellCurrencyAddress = swapPrice.info?.address || ''
237
+
238
+ const formattedPrice = formatUnits(BigInt(swapPrice.price.price), swapPrice.info?.decimals || 0)
239
+ const displayPrice = formatDisplay(formattedPrice, {
240
+ disableScientificNotation: true,
241
+ disableCompactNotation: true,
242
+ significantDigits: 6
243
+ })
244
+ return (
245
+ <CryptoOption
246
+ key={sellCurrencyAddress}
247
+ chainId={chainId}
248
+ currencyName={swapPrice.info?.name || swapPrice.info?.symbol || ''}
249
+ symbol={swapPrice.info?.symbol || ''}
250
+ isSelected={compareAddress(selectedCurrency || '', sellCurrencyAddress)}
251
+ iconUrl={swapPrice.info?.logoURI}
252
+ price={displayPrice}
253
+ onClick={() => {
254
+ setIsErrorTx(false)
255
+ setSelectedCurrency(sellCurrencyAddress)
256
+ }}
257
+ disabled={isTxsPending}
258
+ />
259
+ )
260
+ })}
261
+ </div>
262
+ {isErrorTx && (
263
+ <div className="w-full">
264
+ <Text color="negative" variant="small">
265
+ A problem occurred while executing the transaction.
266
+ </Text>
267
+ </div>
268
+ )}
269
+
270
+ {isErrorSwapQuote && (
271
+ <div className="w-full">
272
+ <Text color="negative" variant="small">
273
+ A problem occurred while fetching swap quote.
274
+ </Text>
275
+ </div>
276
+ )}
277
+
278
+ {showSwitchNetwork && (
279
+ <div className="mt-3">
280
+ <Text className="mb-2" variant="small" color="primary">
281
+ The wallet is connected to the wrong network. Please switch network before proceeding
282
+ </Text>
283
+ <Button
284
+ className="mt-2 w-full"
285
+ variant="primary"
286
+ size="lg"
287
+ type="button"
288
+ label="Switch Network"
289
+ onClick={async () => await switchChainAsync({ chainId })}
290
+ disabled={isCorrectChainId}
291
+ />
292
+ </div>
293
+ )}
294
+ <Button
295
+ className="w-full"
296
+ type="button"
297
+ disabled={
298
+ noOptionsFound ||
299
+ !selectedCurrency ||
300
+ quoteFetchInProgress ||
301
+ isTxsPending ||
302
+ (!isCorrectChainId && !isConnectorSequenceBased) ||
303
+ showSwitchNetwork
304
+ }
305
+ variant="primary"
306
+ size="lg"
307
+ label={getButtonLabel()}
308
+ onClick={onClickProceed}
309
+ />
310
+ </div>
311
+ )
312
+ }
313
+ }
314
+
315
+ return (
316
+ <div className="flex p-5 gap-2 flex-col" style={{ marginTop: HEADER_HEIGHT }}>
317
+ <SwapContent />
318
+ </div>
319
+ )
320
+ }
@@ -0,0 +1,150 @@
1
+ import { compareAddress, getNativeTokenInfoByChainId } from '@0xsequence/connect'
2
+ import { Button, ChevronRightIcon, Text, NumericInput } from '@0xsequence/design-system'
3
+ import { ContractVerificationStatus, TokenBalance } from '@0xsequence/indexer'
4
+ import { useGetTokenBalancesSummary, useGetCoinPrices, useGetExchangeRate } from '@0xsequence/react-hooks'
5
+ import { useRef, useState, ChangeEvent } from 'react'
6
+ import { parseUnits, zeroAddress } from 'viem'
7
+ import { useAccount, useConfig } from 'wagmi'
8
+
9
+ import { SendItemInfo } from '../../components/SendItemInfo'
10
+ import { HEADER_HEIGHT } from '../../constants'
11
+ import { useSettings, useNavigation } from '../../hooks'
12
+ import { computeBalanceFiat, limitDecimals } from '../../utils'
13
+
14
+ export interface SwapCoinProps {
15
+ contractAddress: string
16
+ chainId: number
17
+ }
18
+
19
+ export const SwapCoin = ({ contractAddress, chainId }: SwapCoinProps) => {
20
+ const { setNavigation } = useNavigation()
21
+ const { chains } = useConfig()
22
+ const { address: accountAddress = '' } = useAccount()
23
+
24
+ const amountInputRef = useRef<HTMLInputElement>(null)
25
+ const { fiatCurrency } = useSettings()
26
+ const [amount, setAmount] = useState<string>('0')
27
+
28
+ const { data: balances = [], isPending: isPendingBalances } = useGetTokenBalancesSummary({
29
+ chainIds: [chainId],
30
+ filter: {
31
+ accountAddresses: [accountAddress],
32
+ contractStatus: ContractVerificationStatus.ALL,
33
+ contractWhitelist: [contractAddress],
34
+ omitNativeBalances: false
35
+ }
36
+ })
37
+
38
+ const nativeTokenInfo = getNativeTokenInfoByChainId(chainId, chains)
39
+ const tokenBalance = (balances as TokenBalance[]).find(b => b.contractAddress === contractAddress)
40
+ const { data: coinPrices = [], isPending: isPendingCoinPrices } = useGetCoinPrices([
41
+ {
42
+ chainId,
43
+ contractAddress
44
+ }
45
+ ])
46
+
47
+ const { data: conversionRate = 1, isPending: isPendingConversionRate } = useGetExchangeRate(fiatCurrency.symbol)
48
+
49
+ const isPending = isPendingBalances || isPendingCoinPrices || isPendingConversionRate
50
+
51
+ const handleChangeAmount = (ev: ChangeEvent<HTMLInputElement>) => {
52
+ const { value } = ev.target
53
+
54
+ // Prevent value from having more decimals than the token supports
55
+ const formattedValue = limitDecimals(value, decimals)
56
+
57
+ setAmount(formattedValue)
58
+ }
59
+
60
+ const handleFindQuotesClick = (e: ChangeEvent<HTMLFormElement>) => {
61
+ e.preventDefault()
62
+ setNavigation({
63
+ location: 'swap-coin-list',
64
+ params: {
65
+ chainId,
66
+ contractAddress,
67
+ amount: amountRaw.toString()
68
+ }
69
+ })
70
+ }
71
+
72
+ if (isPending) {
73
+ return null
74
+ }
75
+
76
+ const isNativeCoin = compareAddress(contractAddress, zeroAddress)
77
+ const decimals = isNativeCoin ? nativeTokenInfo.decimals : tokenBalance?.contractInfo?.decimals || 18
78
+ const name = isNativeCoin ? nativeTokenInfo.name : tokenBalance?.contractInfo?.name || ''
79
+ const imageUrl = isNativeCoin ? nativeTokenInfo.logoURI : tokenBalance?.contractInfo?.logoURI
80
+ const symbol = isNativeCoin ? nativeTokenInfo.symbol : tokenBalance?.contractInfo?.symbol || ''
81
+ const amountToSendFormatted = amount === '' ? '0' : amount
82
+ const amountRaw = parseUnits(amountToSendFormatted, decimals)
83
+
84
+ const amountToSendFiat = computeBalanceFiat({
85
+ balance: {
86
+ ...(tokenBalance as TokenBalance),
87
+ balance: amountRaw.toString()
88
+ },
89
+ prices: coinPrices,
90
+ conversionRate,
91
+ decimals
92
+ })
93
+
94
+ const isNonZeroAmount = amountRaw > 0n
95
+
96
+ return (
97
+ <form
98
+ className="flex p-5 gap-2 flex-col"
99
+ onSubmit={handleFindQuotesClick}
100
+ style={{
101
+ marginTop: HEADER_HEIGHT
102
+ }}
103
+ >
104
+ <div className="flex bg-background-secondary rounded-xl p-4 gap-2 flex-col">
105
+ <SendItemInfo
106
+ imageUrl={imageUrl}
107
+ decimals={decimals}
108
+ name={name}
109
+ symbol={symbol}
110
+ balance={tokenBalance?.balance || '0'}
111
+ fiatValue={computeBalanceFiat({
112
+ balance: tokenBalance as TokenBalance,
113
+ prices: coinPrices,
114
+ conversionRate,
115
+ decimals
116
+ })}
117
+ chainId={chainId}
118
+ balanceSuffix="owned"
119
+ />
120
+ <NumericInput
121
+ ref={amountInputRef}
122
+ name="amount"
123
+ value={amount}
124
+ onChange={handleChangeAmount}
125
+ controls={
126
+ <>
127
+ <Text className="whitespace-nowrap" variant="small" color="muted">
128
+ {`~${fiatCurrency.sign}${amountToSendFiat}`}
129
+ </Text>
130
+ <Text variant="xlarge" fontWeight="bold" color="text100">
131
+ {symbol}
132
+ </Text>
133
+ </>
134
+ }
135
+ />
136
+ </div>
137
+ <div className="flex items-center justify-center" style={{ height: '52px' }}>
138
+ <Button
139
+ className="text-primary mt-3 w-full"
140
+ variant="primary"
141
+ size="lg"
142
+ type="submit"
143
+ disabled={!isNonZeroAmount}
144
+ label="Continue"
145
+ rightIcon={ChevronRightIcon}
146
+ />
147
+ </div>
148
+ </form>
149
+ )
150
+ }
@@ -0,0 +1,213 @@
1
+ import { Token } from '@0xsequence/api'
2
+ import { compareAddress, formatDisplay, getNativeTokenInfoByChainId } from '@0xsequence/connect'
3
+ import {
4
+ ArrowRightIcon,
5
+ Button,
6
+ Divider,
7
+ GradientAvatar,
8
+ LinkIcon,
9
+ NetworkImage,
10
+ Skeleton,
11
+ Text,
12
+ TokenImage
13
+ } from '@0xsequence/design-system'
14
+ import { Transaction, TxnTransfer } from '@0xsequence/indexer'
15
+ import { useGetCoinPrices, useGetCollectiblePrices, useGetExchangeRate } from '@0xsequence/react-hooks'
16
+ import dayjs from 'dayjs'
17
+ import { formatUnits, zeroAddress } from 'viem'
18
+ import { useConfig } from 'wagmi'
19
+
20
+ import { CopyButton } from '../../components/CopyButton'
21
+ import { NetworkBadge } from '../../components/NetworkBadge'
22
+ import { useSettings } from '../../hooks'
23
+
24
+ interface TransactionDetailProps {
25
+ transaction: Transaction
26
+ }
27
+
28
+ export const TransactionDetails = ({ transaction }: TransactionDetailProps) => {
29
+ const { chains } = useConfig()
30
+ const { fiatCurrency } = useSettings()
31
+
32
+ const coins: Token[] = []
33
+ const collectibles: Token[] = []
34
+ transaction.transfers?.forEach(transfer => {
35
+ if (transfer.contractInfo?.type === 'ERC721' || transfer.contractInfo?.type === 'ERC1155') {
36
+ transfer.tokenIds?.forEach(tokenId => {
37
+ const foundCollectible = collectibles.find(
38
+ collectible =>
39
+ collectible.chainId === transaction.chainId &&
40
+ compareAddress(collectible.contractAddress, transfer.contractInfo?.address || '') &&
41
+ collectible.tokenId === tokenId
42
+ )
43
+ if (!foundCollectible) {
44
+ collectibles.push({
45
+ chainId: transaction.chainId,
46
+ contractAddress: transfer.contractInfo?.address || '',
47
+ tokenId
48
+ })
49
+ }
50
+ })
51
+ } else {
52
+ const contractAddress = transfer?.contractInfo?.address || zeroAddress
53
+ const foundCoin = coins.find(
54
+ coin => coin.chainId === transaction.chainId && compareAddress(coin.contractAddress, contractAddress)
55
+ )
56
+ if (!foundCoin) {
57
+ coins.push({
58
+ chainId: transaction.chainId,
59
+ contractAddress
60
+ })
61
+ }
62
+ }
63
+ })
64
+
65
+ const { data: coinPricesData, isPending: isPendingCoinPrices } = useGetCoinPrices(coins)
66
+
67
+ const { data: collectiblePricesData, isPending: isPendingCollectiblePrices } = useGetCollectiblePrices(collectibles)
68
+
69
+ const { data: conversionRate = 1, isPending: isPendingConversionRate } = useGetExchangeRate(fiatCurrency.symbol)
70
+
71
+ const arePricesLoading =
72
+ (coins.length > 0 && isPendingCoinPrices) ||
73
+ (collectibles.length > 0 && isPendingCollectiblePrices) ||
74
+ isPendingConversionRate
75
+
76
+ const nativeTokenInfo = getNativeTokenInfoByChainId(transaction.chainId, chains)
77
+
78
+ const date = dayjs(transaction.timestamp).format('ddd MMM DD YYYY, h:m:s a')
79
+
80
+ const onClickBlockExplorer = () => {
81
+ if (typeof window !== 'undefined') {
82
+ window.open(`${nativeTokenInfo.blockExplorerUrl}/tx/${transaction.txnHash}`, '_blank')
83
+ }
84
+ }
85
+
86
+ interface TransferProps {
87
+ transfer: TxnTransfer
88
+ }
89
+ const Transfer = ({ transfer }: TransferProps) => {
90
+ const recipientAddress = transfer.to
91
+ const recipientAddressFormatted =
92
+ recipientAddress.substring(0, 10) + '...' + recipientAddress.substring(transfer.to.length - 4, transfer.to.length)
93
+ const isNativeToken = compareAddress(transfer?.contractInfo?.address || '', zeroAddress)
94
+ const logoURI = isNativeToken ? nativeTokenInfo.logoURI : transfer?.contractInfo?.logoURI
95
+ const symbol = isNativeToken ? nativeTokenInfo.symbol : transfer?.contractInfo?.symbol || ''
96
+
97
+ return (
98
+ <>
99
+ {transfer.amounts?.map((amount, index) => {
100
+ const isCollectible = transfer.contractType === 'ERC721' || transfer.contractType === 'ERC1155'
101
+ const tokenId = transfer.tokenIds?.[index] || '0'
102
+ const collectibleDecimals = transfer?.tokenMetadata?.[tokenId]?.decimals || 0
103
+ const coinDecimals = isNativeToken ? nativeTokenInfo.decimals : transfer?.contractInfo?.decimals || 0
104
+ const decimals = isCollectible ? collectibleDecimals : coinDecimals
105
+ const formattedBalance = formatUnits(BigInt(amount), decimals)
106
+ const balanceDisplayed = formatDisplay(formattedBalance)
107
+ const fiatPrice = isCollectible
108
+ ? collectiblePricesData?.find(
109
+ collectible =>
110
+ compareAddress(collectible.token.contractAddress, transfer.contractInfo?.address || '') &&
111
+ collectible.token.tokenId === transfer.tokenIds?.[index] &&
112
+ collectible.token.chainId === transaction.chainId
113
+ )?.price?.value
114
+ : coinPricesData?.find(
115
+ coin =>
116
+ compareAddress(coin.token.contractAddress, transfer.contractInfo?.address || zeroAddress) &&
117
+ coin.token.chainId === transaction.chainId
118
+ )?.price?.value
119
+
120
+ const fiatValue = (parseFloat(formattedBalance) * (conversionRate * (fiatPrice || 0))).toFixed(2)
121
+
122
+ return (
123
+ <div className="flex w-full flex-row gap-2 justify-between items-center" key={index}>
124
+ <div
125
+ className="flex flex-row justify-start items-center gap-2 h-12 rounded-xl bg-button-glass p-2"
126
+ style={{ flexBasis: '100%' }}
127
+ >
128
+ <TokenImage src={logoURI} symbol={symbol} size="sm" />
129
+ <div className="flex gap-0.5 flex-col items-start justify-center">
130
+ <Text variant="xsmall" fontWeight="bold" color="primary">
131
+ {`${balanceDisplayed} ${symbol}`}
132
+ </Text>
133
+ {arePricesLoading ? (
134
+ <Skeleton style={{ width: '44px', height: '12px' }} />
135
+ ) : (
136
+ <Text variant="xsmall" fontWeight="bold" color="muted">
137
+ {fiatPrice ? `${fiatCurrency.sign}${fiatValue}` : ''}
138
+ </Text>
139
+ )}
140
+ </div>
141
+ </div>
142
+ <ArrowRightIcon className="text-muted" style={{ width: '16px' }} />
143
+ <div
144
+ className="flex flex-row justify-start items-center gap-2 h-12 rounded-xl bg-button-glass p-2"
145
+ style={{ flexBasis: '100%' }}
146
+ >
147
+ <GradientAvatar size="sm" address={recipientAddress} />
148
+ <Text variant="xsmall" fontWeight="bold" color="primary">
149
+ {recipientAddressFormatted}
150
+ </Text>
151
+ </div>
152
+ </div>
153
+ )
154
+ })}
155
+ </>
156
+ )
157
+ }
158
+
159
+ return (
160
+ <div className="flex p-5 pt-3 flex-col items-center justify-center gap-10 mt-5">
161
+ <div className="flex mt-6 flex-col justify-center items-center gap-1">
162
+ <Text variant="normal" fontWeight="medium" color="primary">
163
+ Transaction details
164
+ </Text>
165
+ <Text className="mb-1" variant="small" fontWeight="medium" color="muted">
166
+ {date}
167
+ </Text>
168
+ <NetworkBadge chainId={transaction.chainId} />
169
+ </div>
170
+ <div className="flex flex-col items-center justify-center gap-4 w-full p-4 bg-background-secondary rounded-xl">
171
+ <div className="flex w-full gap-1 flex-row items-center justify-start">
172
+ <Text variant="normal" fontWeight="medium" color="muted">
173
+ Transfer
174
+ </Text>
175
+ <NetworkImage chainId={transaction.chainId} size="xs" />
176
+ </div>
177
+ {transaction.transfers?.map((transfer, index) => (
178
+ <div className="flex w-full flex-col justify-center items-center gap-4" key={`transfer-${index}`}>
179
+ <Transfer transfer={transfer} />
180
+ </div>
181
+ ))}
182
+ </div>
183
+ <Button
184
+ className="w-full rounded-xl"
185
+ onClick={onClickBlockExplorer}
186
+ rightIcon={LinkIcon}
187
+ label={`View on ${nativeTokenInfo.blockExplorerName}`}
188
+ />
189
+ <div>
190
+ <Divider className="w-full my-2" />
191
+ <div className="flex w-full flex-col gap-2 justify-center items-start">
192
+ <Text variant="normal" color="muted" fontWeight="medium">
193
+ Status
194
+ </Text>
195
+ <Text variant="normal" fontWeight="medium" color="primary">
196
+ Complete
197
+ </Text>
198
+ </div>
199
+
200
+ <Divider className="w-full my-2" />
201
+ <div className="flex w-full flex-col gap-2 justify-center items-start">
202
+ <Text variant="normal" color="muted" fontWeight="medium">
203
+ Transaction Hash
204
+ </Text>
205
+ <Text variant="normal" color="primary" fontWeight="medium" style={{ overflowWrap: 'anywhere' }}>
206
+ {transaction.txnHash}
207
+ </Text>
208
+ <CopyButton className="mt-2" buttonVariant="with-label" text={transaction.txnHash} />
209
+ </div>
210
+ </div>
211
+ </div>
212
+ )
213
+ }
@@ -0,0 +1,13 @@
1
+ export * from './Home'
2
+ export * from './Receive'
3
+ export * from './SendCoin'
4
+ export * from './SendCollectible'
5
+ export * from './History'
6
+ export * from './Search'
7
+ export * from './Settings'
8
+ export * from './CoinDetails'
9
+ export * from './CollectionDetails'
10
+ export * from './CollectibleDetails'
11
+ export * from './TransactionDetails'
12
+ export * from './SwapCoin'
13
+ export * from './SwapCoin/SwapList'