@0xsequence/checkout 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 (416) hide show
  1. package/LICENSE +219 -0
  2. package/README.md +256 -0
  3. package/dist/cjs/api/data.js +165 -0
  4. package/dist/cjs/api/data.js.map +1 -0
  5. package/dist/cjs/api/index.js +18 -0
  6. package/dist/cjs/api/index.js.map +1 -0
  7. package/dist/cjs/components/CopyButton.js +24 -0
  8. package/dist/cjs/components/CopyButton.js.map +1 -0
  9. package/dist/cjs/components/DefaultIcon.js +13 -0
  10. package/dist/cjs/components/DefaultIcon.js.map +1 -0
  11. package/dist/cjs/components/NavigationHeader.js +23 -0
  12. package/dist/cjs/components/NavigationHeader.js.map +1 -0
  13. package/dist/cjs/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js +215 -0
  14. package/dist/cjs/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js.map +1 -0
  15. package/dist/cjs/components/SequenceCheckoutProvider/index.js +18 -0
  16. package/dist/cjs/components/SequenceCheckoutProvider/index.js.map +1 -0
  17. package/dist/cjs/constants/abi.js +188 -0
  18. package/dist/cjs/constants/abi.js.map +1 -0
  19. package/dist/cjs/constants/index.js +8 -0
  20. package/dist/cjs/constants/index.js.map +1 -0
  21. package/dist/cjs/contexts/AddFundsModal.js +7 -0
  22. package/dist/cjs/contexts/AddFundsModal.js.map +1 -0
  23. package/dist/cjs/contexts/CheckoutModal.js +8 -0
  24. package/dist/cjs/contexts/CheckoutModal.js.map +1 -0
  25. package/dist/cjs/contexts/Navigation.js +8 -0
  26. package/dist/cjs/contexts/Navigation.js.map +1 -0
  27. package/dist/cjs/contexts/SelectPaymentModal.js +7 -0
  28. package/dist/cjs/contexts/SelectPaymentModal.js.map +1 -0
  29. package/dist/cjs/contexts/SwapModal.js +8 -0
  30. package/dist/cjs/contexts/SwapModal.js.map +1 -0
  31. package/dist/cjs/contexts/TransactionStatusModal.js +7 -0
  32. package/dist/cjs/contexts/TransactionStatusModal.js.map +1 -0
  33. package/dist/cjs/contexts/TransferFundsModal.js +7 -0
  34. package/dist/cjs/contexts/TransferFundsModal.js.map +1 -0
  35. package/dist/cjs/contexts/genericContext.js +20 -0
  36. package/dist/cjs/contexts/genericContext.js.map +1 -0
  37. package/dist/cjs/contexts/index.js +24 -0
  38. package/dist/cjs/contexts/index.js.map +1 -0
  39. package/dist/cjs/hooks/index.js +30 -0
  40. package/dist/cjs/hooks/index.js.map +1 -0
  41. package/dist/cjs/hooks/useAddFundsModal.js +10 -0
  42. package/dist/cjs/hooks/useAddFundsModal.js.map +1 -0
  43. package/dist/cjs/hooks/useCheckoutModal.js +10 -0
  44. package/dist/cjs/hooks/useCheckoutModal.js.map +1 -0
  45. package/dist/cjs/hooks/useCheckoutOptionsSalesContract.js +20 -0
  46. package/dist/cjs/hooks/useCheckoutOptionsSalesContract.js.map +1 -0
  47. package/dist/cjs/hooks/useCheckoutWhitelistStatus.js +21 -0
  48. package/dist/cjs/hooks/useCheckoutWhitelistStatus.js.map +1 -0
  49. package/dist/cjs/hooks/useERC1155SaleContractCheckout.js +157 -0
  50. package/dist/cjs/hooks/useERC1155SaleContractCheckout.js.map +1 -0
  51. package/dist/cjs/hooks/useMarketplaceClient.js +40 -0
  52. package/dist/cjs/hooks/useMarketplaceClient.js.map +1 -0
  53. package/dist/cjs/hooks/useModalTheme.js +10 -0
  54. package/dist/cjs/hooks/useModalTheme.js.map +1 -0
  55. package/dist/cjs/hooks/useNavigation.js +24 -0
  56. package/dist/cjs/hooks/useNavigation.js.map +1 -0
  57. package/dist/cjs/hooks/useSardineClientToken.js +20 -0
  58. package/dist/cjs/hooks/useSardineClientToken.js.map +1 -0
  59. package/dist/cjs/hooks/useSelectPaymentModal.js +10 -0
  60. package/dist/cjs/hooks/useSelectPaymentModal.js.map +1 -0
  61. package/dist/cjs/hooks/useSkipOnCloseCallback.js +22 -0
  62. package/dist/cjs/hooks/useSkipOnCloseCallback.js.map +1 -0
  63. package/dist/cjs/hooks/useSwapModal.js +10 -0
  64. package/dist/cjs/hooks/useSwapModal.js.map +1 -0
  65. package/dist/cjs/hooks/useTransactionStatusModal.js +10 -0
  66. package/dist/cjs/hooks/useTransactionStatusModal.js.map +1 -0
  67. package/dist/cjs/hooks/useTransferFundsModal.js +10 -0
  68. package/dist/cjs/hooks/useTransferFundsModal.js.map +1 -0
  69. package/dist/cjs/index.js +27 -0
  70. package/dist/cjs/index.js.map +1 -0
  71. package/dist/cjs/utils/index.js +18 -0
  72. package/dist/cjs/utils/index.js.map +1 -0
  73. package/dist/cjs/utils/sardine.js +52 -0
  74. package/dist/cjs/utils/sardine.js.map +1 -0
  75. package/dist/cjs/utils/sizing.js +12 -0
  76. package/dist/cjs/utils/sizing.js.map +1 -0
  77. package/dist/cjs/utils/transak.js +41 -0
  78. package/dist/cjs/utils/transak.js.map +1 -0
  79. package/dist/cjs/views/AddFunds.js +50 -0
  80. package/dist/cjs/views/AddFunds.js.map +1 -0
  81. package/dist/cjs/views/CheckoutSelection/component/OrderSummaryItem.js +35 -0
  82. package/dist/cjs/views/CheckoutSelection/component/OrderSummaryItem.js.map +1 -0
  83. package/dist/cjs/views/CheckoutSelection/index.js +83 -0
  84. package/dist/cjs/views/CheckoutSelection/index.js.map +1 -0
  85. package/dist/cjs/views/PaymentSelection/Footer.js +12 -0
  86. package/dist/cjs/views/PaymentSelection/Footer.js.map +1 -0
  87. package/dist/cjs/views/PaymentSelection/OrderSummary/Price.js +42 -0
  88. package/dist/cjs/views/PaymentSelection/OrderSummary/Price.js.map +1 -0
  89. package/dist/cjs/views/PaymentSelection/OrderSummary/index.js +63 -0
  90. package/dist/cjs/views/PaymentSelection/OrderSummary/index.js.map +1 -0
  91. package/dist/cjs/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js +10 -0
  92. package/dist/cjs/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js.map +1 -0
  93. package/dist/cjs/views/PaymentSelection/PayWithCreditCard/index.js +112 -0
  94. package/dist/cjs/views/PaymentSelection/PayWithCreditCard/index.js.map +1 -0
  95. package/dist/cjs/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js +9 -0
  96. package/dist/cjs/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js.map +1 -0
  97. package/dist/cjs/views/PaymentSelection/PayWithCrypto/index.js +134 -0
  98. package/dist/cjs/views/PaymentSelection/PayWithCrypto/index.js.map +1 -0
  99. package/dist/cjs/views/PaymentSelection/TransferFunds.js +50 -0
  100. package/dist/cjs/views/PaymentSelection/TransferFunds.js.map +1 -0
  101. package/dist/cjs/views/PaymentSelection/index.js +332 -0
  102. package/dist/cjs/views/PaymentSelection/index.js.map +1 -0
  103. package/dist/cjs/views/PendingCreditCardTransaction.js +295 -0
  104. package/dist/cjs/views/PendingCreditCardTransaction.js.map +1 -0
  105. package/dist/cjs/views/Swap/index.js +173 -0
  106. package/dist/cjs/views/Swap/index.js.map +1 -0
  107. package/dist/cjs/views/TransactionError.js +23 -0
  108. package/dist/cjs/views/TransactionError.js.map +1 -0
  109. package/dist/cjs/views/TransactionStatus/index.js +178 -0
  110. package/dist/cjs/views/TransactionStatus/index.js.map +1 -0
  111. package/dist/cjs/views/TransactionSuccess.js +23 -0
  112. package/dist/cjs/views/TransactionSuccess.js.map +1 -0
  113. package/dist/cjs/views/TransferToWallet/CopyButton.js +24 -0
  114. package/dist/cjs/views/TransferToWallet/CopyButton.js.map +1 -0
  115. package/dist/cjs/views/TransferToWallet/QRCode.js +13 -0
  116. package/dist/cjs/views/TransferToWallet/QRCode.js.map +1 -0
  117. package/dist/cjs/views/TransferToWallet/index.js +17 -0
  118. package/dist/cjs/views/TransferToWallet/index.js.map +1 -0
  119. package/dist/cjs/views/index.js +26 -0
  120. package/dist/cjs/views/index.js.map +1 -0
  121. package/dist/esm/api/data.js +159 -0
  122. package/dist/esm/api/data.js.map +1 -0
  123. package/dist/esm/api/index.js +2 -0
  124. package/dist/esm/api/index.js.map +1 -0
  125. package/dist/esm/components/CopyButton.js +20 -0
  126. package/dist/esm/components/CopyButton.js.map +1 -0
  127. package/dist/esm/components/DefaultIcon.js +9 -0
  128. package/dist/esm/components/DefaultIcon.js.map +1 -0
  129. package/dist/esm/components/NavigationHeader.js +19 -0
  130. package/dist/esm/components/NavigationHeader.js.map +1 -0
  131. package/dist/esm/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js +210 -0
  132. package/dist/esm/components/SequenceCheckoutProvider/SequenceCheckoutProvider.js.map +1 -0
  133. package/dist/esm/components/SequenceCheckoutProvider/index.js +2 -0
  134. package/dist/esm/components/SequenceCheckoutProvider/index.js.map +1 -0
  135. package/dist/esm/constants/abi.js +185 -0
  136. package/dist/esm/constants/abi.js.map +1 -0
  137. package/dist/esm/constants/index.js +5 -0
  138. package/dist/esm/constants/index.js.map +1 -0
  139. package/dist/esm/contexts/AddFundsModal.js +3 -0
  140. package/dist/esm/contexts/AddFundsModal.js.map +1 -0
  141. package/dist/esm/contexts/CheckoutModal.js +4 -0
  142. package/dist/esm/contexts/CheckoutModal.js.map +1 -0
  143. package/dist/esm/contexts/Navigation.js +4 -0
  144. package/dist/esm/contexts/Navigation.js.map +1 -0
  145. package/dist/esm/contexts/SelectPaymentModal.js +3 -0
  146. package/dist/esm/contexts/SelectPaymentModal.js.map +1 -0
  147. package/dist/esm/contexts/SwapModal.js +4 -0
  148. package/dist/esm/contexts/SwapModal.js.map +1 -0
  149. package/dist/esm/contexts/TransactionStatusModal.js +3 -0
  150. package/dist/esm/contexts/TransactionStatusModal.js.map +1 -0
  151. package/dist/esm/contexts/TransferFundsModal.js +3 -0
  152. package/dist/esm/contexts/TransferFundsModal.js.map +1 -0
  153. package/dist/esm/contexts/genericContext.js +16 -0
  154. package/dist/esm/contexts/genericContext.js.map +1 -0
  155. package/dist/esm/contexts/index.js +8 -0
  156. package/dist/esm/contexts/index.js.map +1 -0
  157. package/dist/esm/hooks/index.js +14 -0
  158. package/dist/esm/hooks/index.js.map +1 -0
  159. package/dist/esm/hooks/useAddFundsModal.js +6 -0
  160. package/dist/esm/hooks/useAddFundsModal.js.map +1 -0
  161. package/dist/esm/hooks/useCheckoutModal.js +6 -0
  162. package/dist/esm/hooks/useCheckoutModal.js.map +1 -0
  163. package/dist/esm/hooks/useCheckoutOptionsSalesContract.js +16 -0
  164. package/dist/esm/hooks/useCheckoutOptionsSalesContract.js.map +1 -0
  165. package/dist/esm/hooks/useCheckoutWhitelistStatus.js +17 -0
  166. package/dist/esm/hooks/useCheckoutWhitelistStatus.js.map +1 -0
  167. package/dist/esm/hooks/useERC1155SaleContractCheckout.js +151 -0
  168. package/dist/esm/hooks/useERC1155SaleContractCheckout.js.map +1 -0
  169. package/dist/esm/hooks/useMarketplaceClient.js +36 -0
  170. package/dist/esm/hooks/useMarketplaceClient.js.map +1 -0
  171. package/dist/esm/hooks/useModalTheme.js +6 -0
  172. package/dist/esm/hooks/useModalTheme.js.map +1 -0
  173. package/dist/esm/hooks/useNavigation.js +20 -0
  174. package/dist/esm/hooks/useNavigation.js.map +1 -0
  175. package/dist/esm/hooks/useSardineClientToken.js +16 -0
  176. package/dist/esm/hooks/useSardineClientToken.js.map +1 -0
  177. package/dist/esm/hooks/useSelectPaymentModal.js +6 -0
  178. package/dist/esm/hooks/useSelectPaymentModal.js.map +1 -0
  179. package/dist/esm/hooks/useSkipOnCloseCallback.js +18 -0
  180. package/dist/esm/hooks/useSkipOnCloseCallback.js.map +1 -0
  181. package/dist/esm/hooks/useSwapModal.js +6 -0
  182. package/dist/esm/hooks/useSwapModal.js.map +1 -0
  183. package/dist/esm/hooks/useTransactionStatusModal.js +6 -0
  184. package/dist/esm/hooks/useTransactionStatusModal.js.map +1 -0
  185. package/dist/esm/hooks/useTransferFundsModal.js +6 -0
  186. package/dist/esm/hooks/useTransferFundsModal.js.map +1 -0
  187. package/dist/esm/index.js +13 -0
  188. package/dist/esm/index.js.map +1 -0
  189. package/dist/esm/utils/index.js +2 -0
  190. package/dist/esm/utils/index.js.map +1 -0
  191. package/dist/esm/utils/sardine.js +48 -0
  192. package/dist/esm/utils/sardine.js.map +1 -0
  193. package/dist/esm/utils/sizing.js +8 -0
  194. package/dist/esm/utils/sizing.js.map +1 -0
  195. package/dist/esm/utils/transak.js +36 -0
  196. package/dist/esm/utils/transak.js.map +1 -0
  197. package/dist/esm/views/AddFunds.js +46 -0
  198. package/dist/esm/views/AddFunds.js.map +1 -0
  199. package/dist/esm/views/CheckoutSelection/component/OrderSummaryItem.js +30 -0
  200. package/dist/esm/views/CheckoutSelection/component/OrderSummaryItem.js.map +1 -0
  201. package/dist/esm/views/CheckoutSelection/index.js +79 -0
  202. package/dist/esm/views/CheckoutSelection/index.js.map +1 -0
  203. package/dist/esm/views/PaymentSelection/Footer.js +8 -0
  204. package/dist/esm/views/PaymentSelection/Footer.js.map +1 -0
  205. package/dist/esm/views/PaymentSelection/OrderSummary/Price.js +38 -0
  206. package/dist/esm/views/PaymentSelection/OrderSummary/Price.js.map +1 -0
  207. package/dist/esm/views/PaymentSelection/OrderSummary/index.js +59 -0
  208. package/dist/esm/views/PaymentSelection/OrderSummary/index.js.map +1 -0
  209. package/dist/esm/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js +6 -0
  210. package/dist/esm/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.js.map +1 -0
  211. package/dist/esm/views/PaymentSelection/PayWithCreditCard/index.js +108 -0
  212. package/dist/esm/views/PaymentSelection/PayWithCreditCard/index.js.map +1 -0
  213. package/dist/esm/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js +5 -0
  214. package/dist/esm/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.js.map +1 -0
  215. package/dist/esm/views/PaymentSelection/PayWithCrypto/index.js +130 -0
  216. package/dist/esm/views/PaymentSelection/PayWithCrypto/index.js.map +1 -0
  217. package/dist/esm/views/PaymentSelection/TransferFunds.js +46 -0
  218. package/dist/esm/views/PaymentSelection/TransferFunds.js.map +1 -0
  219. package/dist/esm/views/PaymentSelection/index.js +326 -0
  220. package/dist/esm/views/PaymentSelection/index.js.map +1 -0
  221. package/dist/esm/views/PendingCreditCardTransaction.js +286 -0
  222. package/dist/esm/views/PendingCreditCardTransaction.js.map +1 -0
  223. package/dist/esm/views/Swap/index.js +169 -0
  224. package/dist/esm/views/Swap/index.js.map +1 -0
  225. package/dist/esm/views/TransactionError.js +18 -0
  226. package/dist/esm/views/TransactionError.js.map +1 -0
  227. package/dist/esm/views/TransactionStatus/index.js +170 -0
  228. package/dist/esm/views/TransactionStatus/index.js.map +1 -0
  229. package/dist/esm/views/TransactionSuccess.js +18 -0
  230. package/dist/esm/views/TransactionSuccess.js.map +1 -0
  231. package/dist/esm/views/TransferToWallet/CopyButton.js +20 -0
  232. package/dist/esm/views/TransferToWallet/CopyButton.js.map +1 -0
  233. package/dist/esm/views/TransferToWallet/QRCode.js +9 -0
  234. package/dist/esm/views/TransferToWallet/QRCode.js.map +1 -0
  235. package/dist/esm/views/TransferToWallet/index.js +13 -0
  236. package/dist/esm/views/TransferToWallet/index.js.map +1 -0
  237. package/dist/esm/views/index.js +10 -0
  238. package/dist/esm/views/index.js.map +1 -0
  239. package/dist/types/api/data.d.ts +21 -0
  240. package/dist/types/api/data.d.ts.map +1 -0
  241. package/dist/types/api/index.d.ts +2 -0
  242. package/dist/types/api/index.d.ts.map +1 -0
  243. package/dist/types/components/CopyButton.d.ts +9 -0
  244. package/dist/types/components/CopyButton.d.ts.map +1 -0
  245. package/dist/types/components/DefaultIcon.d.ts +6 -0
  246. package/dist/types/components/DefaultIcon.d.ts.map +1 -0
  247. package/dist/types/components/NavigationHeader.d.ts +8 -0
  248. package/dist/types/components/NavigationHeader.d.ts.map +1 -0
  249. package/dist/types/components/SequenceCheckoutProvider/SequenceCheckoutProvider.d.ts +7 -0
  250. package/dist/types/components/SequenceCheckoutProvider/SequenceCheckoutProvider.d.ts.map +1 -0
  251. package/dist/types/components/SequenceCheckoutProvider/index.d.ts +2 -0
  252. package/dist/types/components/SequenceCheckoutProvider/index.d.ts.map +1 -0
  253. package/dist/types/constants/abi.d.ts +46 -0
  254. package/dist/types/constants/abi.d.ts.map +1 -0
  255. package/dist/types/constants/index.d.ts +5 -0
  256. package/dist/types/constants/index.d.ts.map +1 -0
  257. package/dist/types/contexts/AddFundsModal.d.ts +22 -0
  258. package/dist/types/contexts/AddFundsModal.d.ts.map +1 -0
  259. package/dist/types/contexts/CheckoutModal.d.ts +56 -0
  260. package/dist/types/contexts/CheckoutModal.d.ts.map +1 -0
  261. package/dist/types/contexts/Navigation.d.ts +38 -0
  262. package/dist/types/contexts/Navigation.d.ts.map +1 -0
  263. package/dist/types/contexts/SelectPaymentModal.d.ts +43 -0
  264. package/dist/types/contexts/SelectPaymentModal.d.ts.map +1 -0
  265. package/dist/types/contexts/SwapModal.d.ts +25 -0
  266. package/dist/types/contexts/SwapModal.d.ts.map +1 -0
  267. package/dist/types/contexts/TransactionStatusModal.d.ts +25 -0
  268. package/dist/types/contexts/TransactionStatusModal.d.ts.map +1 -0
  269. package/dist/types/contexts/TransferFundsModal.d.ts +13 -0
  270. package/dist/types/contexts/TransferFundsModal.d.ts.map +1 -0
  271. package/dist/types/contexts/genericContext.d.ts +2 -0
  272. package/dist/types/contexts/genericContext.d.ts.map +1 -0
  273. package/dist/types/contexts/index.d.ts +8 -0
  274. package/dist/types/contexts/index.d.ts.map +1 -0
  275. package/dist/types/hooks/index.d.ts +14 -0
  276. package/dist/types/hooks/index.d.ts.map +1 -0
  277. package/dist/types/hooks/useAddFundsModal.d.ts +6 -0
  278. package/dist/types/hooks/useAddFundsModal.d.ts.map +1 -0
  279. package/dist/types/hooks/useCheckoutModal.d.ts +6 -0
  280. package/dist/types/hooks/useCheckoutModal.d.ts.map +1 -0
  281. package/dist/types/hooks/useCheckoutOptionsSalesContract.d.ts +6 -0
  282. package/dist/types/hooks/useCheckoutOptionsSalesContract.d.ts.map +1 -0
  283. package/dist/types/hooks/useCheckoutWhitelistStatus.d.ts +3 -0
  284. package/dist/types/hooks/useCheckoutWhitelistStatus.d.ts.map +1 -0
  285. package/dist/types/hooks/useERC1155SaleContractCheckout.d.ts +37 -0
  286. package/dist/types/hooks/useERC1155SaleContractCheckout.d.ts.map +1 -0
  287. package/dist/types/hooks/useMarketplaceClient.d.ts +9 -0
  288. package/dist/types/hooks/useMarketplaceClient.d.ts.map +1 -0
  289. package/dist/types/hooks/useModalTheme.d.ts +2 -0
  290. package/dist/types/hooks/useModalTheme.d.ts.map +1 -0
  291. package/dist/types/hooks/useNavigation.d.ts +11 -0
  292. package/dist/types/hooks/useNavigation.d.ts.map +1 -0
  293. package/dist/types/hooks/useSardineClientToken.d.ts +3 -0
  294. package/dist/types/hooks/useSardineClientToken.d.ts.map +1 -0
  295. package/dist/types/hooks/useSelectPaymentModal.d.ts +6 -0
  296. package/dist/types/hooks/useSelectPaymentModal.d.ts.map +1 -0
  297. package/dist/types/hooks/useSkipOnCloseCallback.d.ts +6 -0
  298. package/dist/types/hooks/useSkipOnCloseCallback.d.ts.map +1 -0
  299. package/dist/types/hooks/useSwapModal.d.ts +6 -0
  300. package/dist/types/hooks/useSwapModal.d.ts.map +1 -0
  301. package/dist/types/hooks/useTransactionStatusModal.d.ts +6 -0
  302. package/dist/types/hooks/useTransactionStatusModal.d.ts.map +1 -0
  303. package/dist/types/hooks/useTransferFundsModal.d.ts +6 -0
  304. package/dist/types/hooks/useTransferFundsModal.d.ts.map +1 -0
  305. package/dist/types/index.d.ts +14 -0
  306. package/dist/types/index.d.ts.map +1 -0
  307. package/dist/types/utils/index.d.ts +2 -0
  308. package/dist/types/utils/index.d.ts.map +1 -0
  309. package/dist/types/utils/sardine.d.ts +6 -0
  310. package/dist/types/utils/sardine.d.ts.map +1 -0
  311. package/dist/types/utils/sizing.d.ts +2 -0
  312. package/dist/types/utils/sizing.d.ts.map +1 -0
  313. package/dist/types/utils/transak.d.ts +7 -0
  314. package/dist/types/utils/transak.d.ts.map +1 -0
  315. package/dist/types/views/AddFunds.d.ts +2 -0
  316. package/dist/types/views/AddFunds.d.ts.map +1 -0
  317. package/dist/types/views/CheckoutSelection/component/OrderSummaryItem.d.ts +10 -0
  318. package/dist/types/views/CheckoutSelection/component/OrderSummaryItem.d.ts.map +1 -0
  319. package/dist/types/views/CheckoutSelection/index.d.ts +2 -0
  320. package/dist/types/views/CheckoutSelection/index.d.ts.map +1 -0
  321. package/dist/types/views/PaymentSelection/Footer.d.ts +2 -0
  322. package/dist/types/views/PaymentSelection/Footer.d.ts.map +1 -0
  323. package/dist/types/views/PaymentSelection/OrderSummary/Price.d.ts +2 -0
  324. package/dist/types/views/PaymentSelection/OrderSummary/Price.d.ts.map +1 -0
  325. package/dist/types/views/PaymentSelection/OrderSummary/index.d.ts +2 -0
  326. package/dist/types/views/PaymentSelection/OrderSummary/index.d.ts.map +1 -0
  327. package/dist/types/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.d.ts +11 -0
  328. package/dist/types/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.d.ts.map +1 -0
  329. package/dist/types/views/PaymentSelection/PayWithCreditCard/index.d.ts +9 -0
  330. package/dist/types/views/PaymentSelection/PayWithCreditCard/index.d.ts.map +1 -0
  331. package/dist/types/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.d.ts +2 -0
  332. package/dist/types/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.d.ts.map +1 -0
  333. package/dist/types/views/PaymentSelection/PayWithCrypto/index.d.ts +12 -0
  334. package/dist/types/views/PaymentSelection/PayWithCrypto/index.d.ts.map +1 -0
  335. package/dist/types/views/PaymentSelection/TransferFunds.d.ts +2 -0
  336. package/dist/types/views/PaymentSelection/TransferFunds.d.ts.map +1 -0
  337. package/dist/types/views/PaymentSelection/index.d.ts +4 -0
  338. package/dist/types/views/PaymentSelection/index.d.ts.map +1 -0
  339. package/dist/types/views/PendingCreditCardTransaction.d.ts +8 -0
  340. package/dist/types/views/PendingCreditCardTransaction.d.ts.map +1 -0
  341. package/dist/types/views/Swap/index.d.ts +2 -0
  342. package/dist/types/views/Swap/index.d.ts.map +1 -0
  343. package/dist/types/views/TransactionError.d.ts +3 -0
  344. package/dist/types/views/TransactionError.d.ts.map +1 -0
  345. package/dist/types/views/TransactionStatus/index.d.ts +9 -0
  346. package/dist/types/views/TransactionStatus/index.d.ts.map +1 -0
  347. package/dist/types/views/TransactionSuccess.d.ts +3 -0
  348. package/dist/types/views/TransactionSuccess.d.ts.map +1 -0
  349. package/dist/types/views/TransferToWallet/CopyButton.d.ts +10 -0
  350. package/dist/types/views/TransferToWallet/CopyButton.d.ts.map +1 -0
  351. package/dist/types/views/TransferToWallet/QRCode.d.ts +6 -0
  352. package/dist/types/views/TransferToWallet/QRCode.d.ts.map +1 -0
  353. package/dist/types/views/TransferToWallet/index.d.ts +2 -0
  354. package/dist/types/views/TransferToWallet/index.d.ts.map +1 -0
  355. package/dist/types/views/index.d.ts +10 -0
  356. package/dist/types/views/index.d.ts.map +1 -0
  357. package/package.json +73 -0
  358. package/src/api/data.ts +194 -0
  359. package/src/api/index.ts +1 -0
  360. package/src/components/CopyButton.tsx +32 -0
  361. package/src/components/DefaultIcon.tsx +22 -0
  362. package/src/components/NavigationHeader.tsx +57 -0
  363. package/src/components/SequenceCheckoutProvider/SequenceCheckoutProvider.tsx +363 -0
  364. package/src/components/SequenceCheckoutProvider/index.ts +1 -0
  365. package/src/constants/abi.ts +185 -0
  366. package/src/constants/index.ts +4 -0
  367. package/src/contexts/AddFundsModal.ts +25 -0
  368. package/src/contexts/CheckoutModal.ts +65 -0
  369. package/src/contexts/Navigation.ts +56 -0
  370. package/src/contexts/SelectPaymentModal.ts +50 -0
  371. package/src/contexts/SwapModal.ts +31 -0
  372. package/src/contexts/TransactionStatusModal.ts +29 -0
  373. package/src/contexts/TransferFundsModal.ts +16 -0
  374. package/src/contexts/genericContext.ts +19 -0
  375. package/src/contexts/index.ts +7 -0
  376. package/src/hooks/index.ts +13 -0
  377. package/src/hooks/useAddFundsModal.ts +7 -0
  378. package/src/hooks/useCheckoutModal.ts +7 -0
  379. package/src/hooks/useCheckoutOptionsSalesContract.ts +28 -0
  380. package/src/hooks/useCheckoutWhitelistStatus.ts +20 -0
  381. package/src/hooks/useERC1155SaleContractCheckout.ts +260 -0
  382. package/src/hooks/useMarketplaceClient.ts +49 -0
  383. package/src/hooks/useModalTheme.ts +7 -0
  384. package/src/hooks/useNavigation.ts +33 -0
  385. package/src/hooks/useSardineClientToken.ts +18 -0
  386. package/src/hooks/useSelectPaymentModal.ts +7 -0
  387. package/src/hooks/useSkipOnCloseCallback.ts +25 -0
  388. package/src/hooks/useSwapModal.ts +7 -0
  389. package/src/hooks/useTransactionStatusModal.ts +7 -0
  390. package/src/hooks/useTransferFundsModal.ts +7 -0
  391. package/src/index.ts +19 -0
  392. package/src/utils/index.ts +1 -0
  393. package/src/utils/sardine.ts +62 -0
  394. package/src/utils/sizing.ts +8 -0
  395. package/src/utils/transak.ts +72 -0
  396. package/src/views/AddFunds.tsx +59 -0
  397. package/src/views/CheckoutSelection/component/OrderSummaryItem.tsx +82 -0
  398. package/src/views/CheckoutSelection/index.tsx +207 -0
  399. package/src/views/PaymentSelection/Footer.tsx +39 -0
  400. package/src/views/PaymentSelection/OrderSummary/Price.tsx +66 -0
  401. package/src/views/PaymentSelection/OrderSummary/index.tsx +113 -0
  402. package/src/views/PaymentSelection/PayWithCreditCard/PaymentProviderOption.tsx +38 -0
  403. package/src/views/PaymentSelection/PayWithCreditCard/index.tsx +177 -0
  404. package/src/views/PaymentSelection/PayWithCreditCard/providers/SardineLogo.tsx +11 -0
  405. package/src/views/PaymentSelection/PayWithCrypto/index.tsx +250 -0
  406. package/src/views/PaymentSelection/TransferFunds.tsx +98 -0
  407. package/src/views/PaymentSelection/index.tsx +484 -0
  408. package/src/views/PendingCreditCardTransaction.tsx +429 -0
  409. package/src/views/Swap/index.tsx +289 -0
  410. package/src/views/TransactionError.tsx +39 -0
  411. package/src/views/TransactionStatus/index.tsx +337 -0
  412. package/src/views/TransactionSuccess.tsx +51 -0
  413. package/src/views/TransferToWallet/CopyButton.tsx +37 -0
  414. package/src/views/TransferToWallet/QRCode.tsx +25 -0
  415. package/src/views/TransferToWallet/index.tsx +36 -0
  416. package/src/views/index.ts +9 -0
@@ -0,0 +1,289 @@
1
+ import { CryptoOption, compareAddress, formatDisplay, sendTransactions } from '@0xsequence/connect'
2
+ import { Button, Spinner, Text } from '@0xsequence/design-system'
3
+ import { findSupportedNetwork } from '@0xsequence/network'
4
+ import { useGetContractInfo, useGetSwapPrices, useGetSwapQuote, useIndexerClient } from '@0xsequence/react-hooks'
5
+ import { useState, useEffect } from 'react'
6
+ import { zeroAddress, formatUnits, Hex } from 'viem'
7
+ import { useAccount, usePublicClient, useWalletClient } from 'wagmi'
8
+
9
+ import { HEADER_HEIGHT } from '../../constants'
10
+ import { useSwapModal, useTransactionStatusModal } from '../../hooks'
11
+
12
+ export const Swap = () => {
13
+ const { openTransactionStatusModal } = useTransactionStatusModal()
14
+ const { swapModalSettings, closeSwapModal } = useSwapModal()
15
+ const {
16
+ currencyAddress,
17
+ currencyAmount,
18
+ chainId,
19
+ disableMainCurrency = true,
20
+ description,
21
+ postSwapTransactions,
22
+ blockConfirmations,
23
+ onSuccess = () => {}
24
+ } = swapModalSettings!
25
+ const { address: userAddress, connector } = useAccount()
26
+ const [isTxsPending, setIsTxsPending] = useState(false)
27
+ const [isError, setIsError] = useState(false)
28
+ const [selectedCurrency, setSelectedCurrency] = useState<string>()
29
+ const publicClient = usePublicClient({ chainId })
30
+ const { data: walletClient } = useWalletClient({ chainId })
31
+
32
+ const buyCurrencyAddress = currencyAddress
33
+ const sellCurrencyAddress = selectedCurrency || ''
34
+
35
+ const {
36
+ data: currencyInfoData,
37
+ isLoading: isLoadingCurrencyInfo,
38
+ isError: isErrorCurrencyInfo
39
+ } = useGetContractInfo({ chainID: String(chainId), contractAddress: currencyAddress })
40
+
41
+ const {
42
+ data: swapPrices = [],
43
+ isLoading: swapPricesIsLoading,
44
+ isError: isErrorPrices
45
+ } = useGetSwapPrices({
46
+ userAddress: userAddress ?? '',
47
+ buyCurrencyAddress,
48
+ chainId: chainId,
49
+ buyAmount: currencyAmount,
50
+ withContractInfo: true
51
+ })
52
+
53
+ useEffect(() => {
54
+ if (!disableMainCurrency) {
55
+ setSelectedCurrency(currencyAddress)
56
+ } else if (!swapPricesIsLoading) {
57
+ const firstOptionAddress = swapPrices?.[0]?.info?.address
58
+ setSelectedCurrency(firstOptionAddress)
59
+ }
60
+ }, [swapPricesIsLoading])
61
+
62
+ const isNativeCurrency = compareAddress(currencyAddress, zeroAddress)
63
+ const network = findSupportedNetwork(chainId)
64
+
65
+ const mainCurrencyName = isNativeCurrency ? network?.nativeToken.name : currencyInfoData?.name
66
+ const mainCurrencyLogo = isNativeCurrency ? network?.logoURI : currencyInfoData?.logoURI
67
+ const mainCurrencySymbol = isNativeCurrency ? network?.nativeToken.symbol : currencyInfoData?.symbol
68
+ const mainCurrencyDecimals = isNativeCurrency ? network?.nativeToken.decimals : currencyInfoData?.decimals
69
+
70
+ const disableSwapQuote = !selectedCurrency || compareAddress(selectedCurrency, buyCurrencyAddress)
71
+
72
+ const {
73
+ data: swapQuote,
74
+ isLoading: isLoadingSwapQuote,
75
+ isError: isErrorSwapQuote
76
+ } = useGetSwapQuote(
77
+ {
78
+ userAddress: userAddress ?? '',
79
+ buyCurrencyAddress: currencyAddress,
80
+ buyAmount: currencyAmount,
81
+ chainId: chainId,
82
+ sellCurrencyAddress,
83
+ includeApprove: true
84
+ },
85
+ {
86
+ disabled: disableSwapQuote
87
+ }
88
+ )
89
+
90
+ const indexerClient = useIndexerClient(chainId)
91
+
92
+ const isMainCurrencySelected = compareAddress(selectedCurrency || '', currencyAddress)
93
+ const quoteFetchInProgress = isLoadingSwapQuote && !isMainCurrencySelected
94
+
95
+ const isLoading = isLoadingCurrencyInfo || swapPricesIsLoading
96
+
97
+ const onClickProceed = async () => {
98
+ if (!userAddress || !publicClient || !walletClient || !connector) {
99
+ return
100
+ }
101
+
102
+ setIsError(false)
103
+ setIsTxsPending(true)
104
+
105
+ try {
106
+ const swapPrice = swapPrices?.find(price => price.info?.address === selectedCurrency)
107
+ const isSwapNativeToken = compareAddress(zeroAddress, swapPrice?.price.currencyAddress || '')
108
+
109
+ const getSwapTransactions = () => {
110
+ if (isMainCurrencySelected || !swapQuote || !swapPrice) {
111
+ return []
112
+ }
113
+
114
+ const swapTransactions = [
115
+ // Swap quote optional approve step
116
+ ...(swapQuote?.approveData && !isSwapNativeToken
117
+ ? [
118
+ {
119
+ to: swapPrice.price.currencyAddress as Hex,
120
+ data: swapQuote.approveData as Hex,
121
+ chain: chainId
122
+ }
123
+ ]
124
+ : []),
125
+ // Swap quote tx
126
+ {
127
+ to: swapQuote.to as Hex,
128
+ data: swapQuote.transactionData as Hex,
129
+ chain: chainId,
130
+ ...(isSwapNativeToken
131
+ ? {
132
+ value: BigInt(swapQuote.transactionValue)
133
+ }
134
+ : {})
135
+ }
136
+ ]
137
+ return swapTransactions
138
+ }
139
+
140
+ const walletClientChainId = await walletClient.getChainId()
141
+ if (walletClientChainId !== chainId) {
142
+ await walletClient.switchChain({ id: chainId })
143
+ }
144
+
145
+ const txHash = await sendTransactions({
146
+ connector,
147
+ walletClient,
148
+ publicClient,
149
+ chainId,
150
+ indexerClient,
151
+ senderAddress: userAddress,
152
+ transactionConfirmations: blockConfirmations,
153
+ transactions: [...getSwapTransactions(), ...(postSwapTransactions ?? [])]
154
+ })
155
+
156
+ closeSwapModal()
157
+ openTransactionStatusModal({
158
+ chainId,
159
+ txHash,
160
+ onSuccess: () => {
161
+ onSuccess(txHash)
162
+ }
163
+ })
164
+ } catch (e) {
165
+ setIsTxsPending(false)
166
+ setIsError(true)
167
+ console.error('Failed to send transactions', e)
168
+ }
169
+ }
170
+
171
+ const isErrorFetchingPrices = isErrorPrices || isErrorCurrencyInfo
172
+ const noOptionsFound = disableMainCurrency && swapPrices.length === 0
173
+
174
+ const SwapContent = () => {
175
+ if (isLoading) {
176
+ return (
177
+ <div className="flex w-full justify-center items-center">
178
+ <Spinner />
179
+ </div>
180
+ )
181
+ } else if (isErrorFetchingPrices) {
182
+ return (
183
+ <div className="flex w-full justify-center items-center">
184
+ <Text variant="normal" color="negative">
185
+ An error occurred while fetching the swap options.
186
+ </Text>
187
+ </div>
188
+ )
189
+ } else if (noOptionsFound) {
190
+ return (
191
+ <div className="flex w-full justify-center items-center">
192
+ <Text variant="normal" color="primary">
193
+ No swap option found!
194
+ </Text>
195
+ </div>
196
+ )
197
+ } else {
198
+ const formattedPrice = formatUnits(BigInt(currencyAmount), mainCurrencyDecimals || 0)
199
+ const displayPrice = formatDisplay(formattedPrice, {
200
+ disableScientificNotation: true,
201
+ disableCompactNotation: true,
202
+ significantDigits: 6
203
+ })
204
+
205
+ return (
206
+ <div className="flex w-full gap-3 flex-col">
207
+ <Text variant="normal" color="primary">
208
+ {description}
209
+ </Text>
210
+ <div className="flex w-full flex-col gap-2">
211
+ {!disableMainCurrency && (
212
+ <CryptoOption
213
+ key={currencyAddress}
214
+ chainId={chainId}
215
+ currencyName={mainCurrencyName || mainCurrencySymbol || ''}
216
+ price={displayPrice}
217
+ iconUrl={mainCurrencyLogo}
218
+ symbol={mainCurrencySymbol || ''}
219
+ isSelected={compareAddress(selectedCurrency || '', currencyAddress)}
220
+ onClick={() => {
221
+ setIsError(false)
222
+ setSelectedCurrency(currencyAddress)
223
+ }}
224
+ disabled={isTxsPending}
225
+ />
226
+ )}
227
+ {swapPrices.map(swapPrice => {
228
+ const sellCurrencyAddress = swapPrice.info?.address || ''
229
+
230
+ const formattedPrice = formatUnits(BigInt(swapPrice.price.price), swapPrice.info?.decimals || 0)
231
+ const displayPrice = formatDisplay(formattedPrice, {
232
+ disableScientificNotation: true,
233
+ disableCompactNotation: true,
234
+ significantDigits: 6
235
+ })
236
+ return (
237
+ <CryptoOption
238
+ key={sellCurrencyAddress}
239
+ chainId={chainId}
240
+ currencyName={swapPrice.info?.name || swapPrice.info?.symbol || ''}
241
+ symbol={swapPrice.info?.symbol || ''}
242
+ isSelected={compareAddress(selectedCurrency || '', sellCurrencyAddress)}
243
+ iconUrl={swapPrice.info?.logoURI}
244
+ price={displayPrice}
245
+ onClick={() => {
246
+ setIsError(false)
247
+ setSelectedCurrency(sellCurrencyAddress)
248
+ }}
249
+ disabled={isTxsPending}
250
+ />
251
+ )
252
+ })}
253
+ </div>
254
+ {isError && (
255
+ <div className="w-full">
256
+ <Text color="negative" variant="small">
257
+ A problem occurred while executing the transaction.
258
+ </Text>
259
+ </div>
260
+ )}
261
+ {isErrorSwapQuote && (
262
+ <div className="w-full">
263
+ <Text color="negative" variant="small">
264
+ A problem occurred while fetching the swap quote.
265
+ </Text>
266
+ </div>
267
+ )}
268
+ <Button
269
+ disabled={noOptionsFound || !selectedCurrency || quoteFetchInProgress || isTxsPending || isErrorSwapQuote}
270
+ variant="primary"
271
+ label={quoteFetchInProgress ? 'Preparing swap...' : 'Proceed'}
272
+ onClick={onClickProceed}
273
+ />
274
+ </div>
275
+ )
276
+ }
277
+ }
278
+
279
+ return (
280
+ <div
281
+ className="flex flex-col gap-2 items-start pb-6 px-6"
282
+ style={{
283
+ paddingTop: HEADER_HEIGHT
284
+ }}
285
+ >
286
+ <SwapContent />
287
+ </div>
288
+ )
289
+ }
@@ -0,0 +1,39 @@
1
+ import { CloseIcon, Text } from '@0xsequence/design-system'
2
+ import React, { useEffect } from 'react'
3
+
4
+ import { TransactionErrorNavigation } from '../contexts'
5
+ import { useCheckoutModal, useNavigation } from '../hooks'
6
+
7
+ export const TransactionError = () => {
8
+ const { closeCheckout, settings } = useCheckoutModal()
9
+ const nav = useNavigation()
10
+ const navigation = nav.navigation as TransactionErrorNavigation
11
+
12
+ useEffect(() => {
13
+ setTimeout(() => {
14
+ closeCheckout()
15
+ settings?.creditCardCheckout?.onError?.(navigation.params.error, settings?.creditCardCheckout)
16
+ }, 3000)
17
+ }, [])
18
+
19
+ return (
20
+ <div style={{ height: '650px' }}>
21
+ <div
22
+ className="flex flex-col items-center absolute"
23
+ style={{ top: '50%', right: '50%', transform: 'translate(50%, -50%)' }}
24
+ >
25
+ <NotificationErrorIcon />
26
+ <Text variant="xlarge">Error</Text>
27
+ <Text className="text-center" variant="normal" color="secondary">
28
+ An error occurred while processing the transaction.
29
+ </Text>
30
+ </div>
31
+ </div>
32
+ )
33
+ }
34
+
35
+ export const NotificationErrorIcon = () => (
36
+ <div className="flex text-white items-center justify-center w-16 h-16 rounded-full mb-2 bg-negative">
37
+ <CloseIcon size="xl" />
38
+ </div>
39
+ )
@@ -0,0 +1,337 @@
1
+ import {
2
+ CollectibleTileImage,
3
+ formatDisplay,
4
+ TRANSACTION_CONFIRMATIONS_DEFAULT,
5
+ waitForTransactionReceipt
6
+ } from '@0xsequence/connect'
7
+ import {
8
+ ArrowDownIcon,
9
+ Card,
10
+ NetworkImage,
11
+ Spinner,
12
+ Text,
13
+ TokenImage,
14
+ CheckmarkIcon,
15
+ CloseIcon,
16
+ truncateAddress
17
+ } from '@0xsequence/design-system'
18
+ import { TransactionStatus as TransactionStatusSequence } from '@0xsequence/indexer'
19
+ import { findSupportedNetwork } from '@0xsequence/network'
20
+ import { useGetTokenMetadata, useGetContractInfo, useIndexerClient } from '@0xsequence/react-hooks'
21
+ import { useState, useEffect } from 'react'
22
+ import TimeAgo from 'timeago-react'
23
+ import { formatUnits, Hex, PublicClient } from 'viem'
24
+ import { usePublicClient } from 'wagmi'
25
+
26
+ import { HEADER_HEIGHT } from '../../constants'
27
+ import { useTransactionStatusModal } from '../../hooks'
28
+
29
+ export type TxStatus = 'pending' | 'success' | 'error'
30
+
31
+ interface TransactionStatusHeaderProps {
32
+ status: TxStatus
33
+ noItemsToDisplay: boolean
34
+ }
35
+
36
+ export const TransactionStatusHeader = ({ status, noItemsToDisplay }: TransactionStatusHeaderProps) => {
37
+ const getHeaderText = () => {
38
+ if (noItemsToDisplay) {
39
+ switch (status) {
40
+ case 'success':
41
+ return 'Your transaction has been processed'
42
+ case 'error':
43
+ return 'Your transaction has failed'
44
+ case 'pending':
45
+ default:
46
+ return 'Your transaction is processing'
47
+ }
48
+ } else {
49
+ switch (status) {
50
+ case 'success':
51
+ return 'Your purchase has been processed'
52
+ case 'error':
53
+ return 'Your purchase has failed'
54
+ case 'pending':
55
+ default:
56
+ return 'Your purchase is processing'
57
+ }
58
+ }
59
+ }
60
+
61
+ const headerText = getHeaderText()
62
+
63
+ return (
64
+ <div className="fixed" style={{ top: '18px' }}>
65
+ <Text className="text-xl" color="white" variant="normal" fontWeight="bold">
66
+ {headerText}
67
+ </Text>
68
+ </div>
69
+ )
70
+ }
71
+
72
+ export const TransactionStatus = () => {
73
+ const { transactionStatusSettings } = useTransactionStatusModal()
74
+ const {
75
+ collectionAddress,
76
+ chainId,
77
+ items,
78
+ txHash,
79
+ currencyAddress,
80
+ blockConfirmations = TRANSACTION_CONFIRMATIONS_DEFAULT,
81
+ onSuccess,
82
+ onError,
83
+ onClose = () => {}
84
+ } = transactionStatusSettings!
85
+ const networkConfig = findSupportedNetwork(chainId)
86
+ const blockExplorerUrl = `${networkConfig?.blockExplorer?.rootUrl}tx/${txHash}`
87
+
88
+ const [startTime] = useState(new Date())
89
+ const [status, setStatus] = useState<TxStatus>('pending')
90
+ const noItemsToDisplay = !items || !collectionAddress
91
+ const { data: tokenMetadatas, isLoading: isLoadingTokenMetadatas } = useGetTokenMetadata(
92
+ {
93
+ chainID: String(chainId),
94
+ contractAddress: collectionAddress || '',
95
+ tokenIDs: items?.map(i => i.tokenId) || []
96
+ },
97
+ {
98
+ disabled: noItemsToDisplay
99
+ }
100
+ )
101
+
102
+ const publicClient = usePublicClient({
103
+ chainId
104
+ })
105
+
106
+ const indexerClient = useIndexerClient(chainId)
107
+
108
+ const waitForTransaction = async (publicClient: PublicClient, txnHash: string) => {
109
+ try {
110
+ const { txnStatus } = await waitForTransactionReceipt({
111
+ indexerClient,
112
+ txnHash: txnHash as Hex,
113
+ publicClient,
114
+ confirmations: blockConfirmations
115
+ })
116
+
117
+ if (txnStatus === TransactionStatusSequence.FAILED) {
118
+ throw new Error('Transaction failed')
119
+ }
120
+
121
+ setStatus('success')
122
+ onSuccess?.(txnHash)
123
+ } catch (e) {
124
+ console.error('An error occurred while waiting for transaction confirmation', e)
125
+ setStatus('error')
126
+ onError?.(e as Error)
127
+ }
128
+ }
129
+
130
+ useEffect(() => {
131
+ if (status === 'pending' && publicClient) {
132
+ waitForTransaction(publicClient, txHash)
133
+ }
134
+ }, [status, publicClient, txHash])
135
+
136
+ useEffect(() => {
137
+ return () => {
138
+ onClose()
139
+ }
140
+ }, [])
141
+
142
+ const { data: dataCollectionInfo, isLoading: isLoadingCollectionInfo } = useGetContractInfo(
143
+ {
144
+ chainID: String(chainId),
145
+ contractAddress: collectionAddress || ''
146
+ },
147
+ {
148
+ disabled: noItemsToDisplay
149
+ }
150
+ )
151
+ const { data: dataCurrencyInfo, isLoading: isLoadingCurrencyInfo } = useGetContractInfo(
152
+ {
153
+ chainID: String(chainId),
154
+ contractAddress: currencyAddress || ''
155
+ },
156
+ {
157
+ disabled: noItemsToDisplay
158
+ }
159
+ )
160
+
161
+ const isLoading = isLoadingTokenMetadatas || isLoadingCollectionInfo || isLoadingCurrencyInfo
162
+
163
+ const getInformationText = () => {
164
+ if (noItemsToDisplay) {
165
+ switch (status) {
166
+ case 'success':
167
+ return 'The transaction has been confirmed on the blockchain!'
168
+ case 'error':
169
+ return 'An error occurred while processing the transaction.'
170
+ case 'pending':
171
+ default:
172
+ return `The transaction will be confirmed on the blockchain shortly.`
173
+ }
174
+ } else {
175
+ const tokenNames =
176
+ tokenMetadatas
177
+ ?.map(metadata => {
178
+ return `${metadata.name} #${metadata.tokenId}`
179
+ })
180
+ .join(', ') || ''
181
+
182
+ switch (status) {
183
+ case 'success':
184
+ return `You just purchased ${tokenNames}. It’s been confirmed on the blockchain!`
185
+ case 'error':
186
+ return `You just purchased ${tokenNames}, but an error occurred.`
187
+ case 'pending':
188
+ default:
189
+ return `You just purchased ${tokenNames}. It should be confirmed on the blockchain shortly.`
190
+ }
191
+ }
192
+ }
193
+
194
+ const StatusIndicator = () => {
195
+ switch (status) {
196
+ case 'success':
197
+ return (
198
+ <div className="flex gap-2 justify-center items-center">
199
+ <div className="w-6 h-6 rounded-full bg-positive">
200
+ <CheckmarkIcon className="text-white relative" style={{ top: '3px', right: '-1px' }} />
201
+ </div>
202
+ <Text variant="normal" color="muted">
203
+ Transaction complete
204
+ </Text>
205
+ </div>
206
+ )
207
+ case 'error':
208
+ return (
209
+ <div className="flex gap-2 justify-center items-center">
210
+ <div className="w-6 h-6 rounded-full bg-negative">
211
+ <CloseIcon className="text-white relative" style={{ top: '2px', right: '-2px' }} />
212
+ </div>
213
+ <Text variant="normal" color="muted">
214
+ Transaction failed
215
+ </Text>
216
+ </div>
217
+ )
218
+ case 'pending':
219
+ default:
220
+ return (
221
+ <div className="flex gap-2 justify-center items-center">
222
+ <Spinner />
223
+ <Text variant="normal" color="muted">
224
+ Processing transaction
225
+ </Text>
226
+ </div>
227
+ )
228
+ }
229
+ }
230
+
231
+ const ItemsInfo = () => {
232
+ return (
233
+ <div className="flex gap-3 flex-col">
234
+ {items?.map(item => {
235
+ const collectibleQuantity = Number(formatUnits(BigInt(item.quantity), item?.decimals || 0))
236
+ const tokenMetadata = tokenMetadatas?.find(tokenMetadata => tokenMetadata.tokenId === item.tokenId)
237
+
238
+ const price = formatDisplay(formatUnits(BigInt(item.price), dataCurrencyInfo?.decimals || 0))
239
+
240
+ return (
241
+ <div className="flex flex-row items-center justify-between" key={item.tokenId}>
242
+ <div className="flex flex-row gap-2">
243
+ <div
244
+ className="rounded-xl"
245
+ style={{
246
+ height: '36px',
247
+ width: '36px'
248
+ }}
249
+ >
250
+ <CollectibleTileImage imageUrl={tokenMetadata?.image} />
251
+ </div>
252
+ <div className="flex flex-col gap-0.5">
253
+ <Text variant="small" color="secondary" fontWeight="medium">
254
+ {dataCollectionInfo?.name || null}
255
+ </Text>
256
+ <Text variant="small" color="primary" fontWeight="bold">
257
+ {`${tokenMetadata?.name || 'Collectible'} #${item.tokenId} ${collectibleQuantity > 1 ? `x${collectibleQuantity}` : ''}`}
258
+ </Text>
259
+ </div>
260
+ </div>
261
+ <div className="flex flex-row gap-1 items-center justify-center">
262
+ <TokenImage src={dataCurrencyInfo?.logoURI} size="xs" symbol={dataCurrencyInfo?.symbol} disableAnimation />
263
+ <Text variant="normal" fontWeight="bold" color="white">{`${price} ${dataCurrencyInfo?.symbol}`}</Text>
264
+ </div>
265
+ </div>
266
+ )
267
+ })}
268
+ </div>
269
+ )
270
+ }
271
+
272
+ const TxInfo = () => {
273
+ const getStatusText = () => {
274
+ switch (status) {
275
+ case 'success':
276
+ return 'Sent!'
277
+ case 'error':
278
+ return 'Not sent'
279
+ case 'pending':
280
+ default:
281
+ return 'Sending...'
282
+ }
283
+ }
284
+
285
+ return (
286
+ <div className="flex mb-2 flex-row items-center justify-between">
287
+ <div className="flex flex-row gap-1 items-center justify-between">
288
+ <ArrowDownIcon className="text-secondary" size="xs" style={{ transform: 'rotate(180deg)', marginRight: '-4px' }} />
289
+ <Text color="secondary" variant="small" fontWeight="medium">
290
+ {getStatusText()}
291
+ </Text>
292
+ <NetworkImage chainId={chainId} size="xs" />
293
+ </div>
294
+ <div>
295
+ <Text color="muted" variant="small" fontWeight="medium">
296
+ <TimeAgo datetime={startTime} />
297
+ </Text>
298
+ </div>
299
+ </div>
300
+ )
301
+ }
302
+
303
+ return (
304
+ <div className="w-full px-6 pb-6">
305
+ <TransactionStatusHeader status={status} noItemsToDisplay={noItemsToDisplay} />
306
+ <div className="flex flex-col gap-6 items-center justify-center h-full" style={{ paddingTop: HEADER_HEIGHT }}>
307
+ {isLoading ? (
308
+ <div className="flex w-full justify-center items-center">
309
+ <Spinner size="md" />
310
+ </div>
311
+ ) : (
312
+ <>
313
+ <div className="flex w-full justify-start">
314
+ <Text variant="normal" color="primary">
315
+ {getInformationText()}
316
+ </Text>
317
+ </div>
318
+ {!noItemsToDisplay && (
319
+ <Card className="p-4">
320
+ <TxInfo />
321
+ <ItemsInfo />
322
+ </Card>
323
+ )}
324
+ <div className="flex w-full justify-between items-center">
325
+ <StatusIndicator />
326
+ <Text className="no-underline cursor-pointer" variant="normal" style={{ color: '#8E7EFF' }} asChild>
327
+ <a href={blockExplorerUrl} target="_blank" rel="noreferrer">
328
+ {truncateAddress(txHash, 4, 4)}
329
+ </a>
330
+ </Text>
331
+ </div>
332
+ </>
333
+ )}
334
+ </div>
335
+ </div>
336
+ )
337
+ }