@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,113 @@
1
+ import { formatDisplay, NetworkBadge, CollectibleTileImage } from '@0xsequence/connect'
2
+ import { Spinner, NetworkImage, Text } from '@0xsequence/design-system'
3
+ import { findSupportedNetwork } from '@0xsequence/network'
4
+ import { useGetTokenMetadata, useGetContractInfo, useGetCoinPrices } from '@0xsequence/react-hooks'
5
+ import { formatUnits } from 'viem'
6
+
7
+ import { useSelectPaymentModal } from '../../../hooks'
8
+
9
+ export const OrderSummary = () => {
10
+ const { selectPaymentSettings } = useSelectPaymentModal()
11
+ const chain = selectPaymentSettings!.chain
12
+ const network = findSupportedNetwork(chain)
13
+ const chainId = network?.chainId || 137
14
+ const collectionAddress = selectPaymentSettings!.collectionAddress
15
+ const tokenIds = selectPaymentSettings?.collectibles.map(c => c.tokenId) || []
16
+ const { data: tokenMetadatas, isLoading: isLoadingTokenMetadatas } = useGetTokenMetadata({
17
+ chainID: String(chainId),
18
+ contractAddress: collectionAddress,
19
+ tokenIDs: tokenIds
20
+ })
21
+ const { data: dataCollectionInfo, isLoading: isLoadingCollectionInfo } = useGetContractInfo({
22
+ chainID: String(chainId),
23
+ contractAddress: selectPaymentSettings!.collectionAddress
24
+ })
25
+ const { data: dataCurrencyInfo, isLoading: isLoadingCurrencyInfo } = useGetContractInfo({
26
+ chainID: String(chainId),
27
+ contractAddress: selectPaymentSettings!.currencyAddress
28
+ })
29
+ const { data: dataCoinPrices, isLoading: isLoadingCoinPrices } = useGetCoinPrices([
30
+ {
31
+ chainId,
32
+ contractAddress: selectPaymentSettings!.currencyAddress
33
+ }
34
+ ])
35
+
36
+ const isLoading = isLoadingTokenMetadatas || isLoadingCollectionInfo || isLoadingCurrencyInfo || isLoadingCoinPrices
37
+
38
+ if (isLoading) {
39
+ return (
40
+ <div className="flex mb-2 gap-3" style={{ height: '72px' }}>
41
+ <Spinner />
42
+ </div>
43
+ )
44
+ }
45
+
46
+ const formattedPrice = formatUnits(BigInt(selectPaymentSettings!.price), dataCurrencyInfo?.decimals || 0)
47
+ const displayPrice = formatDisplay(formattedPrice, {
48
+ disableScientificNotation: true,
49
+ disableCompactNotation: true,
50
+ significantDigits: 6
51
+ })
52
+
53
+ const totalQuantity =
54
+ selectPaymentSettings?.collectibles.reduce((accumulator, collectible) => {
55
+ const quantity = formatUnits(BigInt(collectible.quantity), Number(collectible.decimals || 0))
56
+ return accumulator + Number(quantity)
57
+ }, 0) || 0
58
+
59
+ const fiatExchangeRate = dataCoinPrices?.[0].price?.value || 0
60
+ const priceFiat = (fiatExchangeRate * Number(formattedPrice)).toFixed(2)
61
+
62
+ return (
63
+ <div className="flex flex-col gap-5">
64
+ <div>
65
+ <Text
66
+ variant="small"
67
+ fontWeight="bold"
68
+ color="primary"
69
+ >{`${totalQuantity} ${totalQuantity > 1 ? 'items' : 'item'}`}</Text>
70
+ </div>
71
+ <div className="flex flex-row gap-1">
72
+ {selectPaymentSettings!.collectibles.map(collectible => {
73
+ const collectibleQuantity = Number(formatUnits(BigInt(collectible.quantity), Number(collectible.decimals || 0)))
74
+ const tokenMetadata = tokenMetadatas?.find(tokenMetadata => tokenMetadata.tokenId === collectible.tokenId)
75
+
76
+ return (
77
+ <div className="flex gap-3 items-center" key={collectible.tokenId}>
78
+ <div
79
+ className="rounded-xl"
80
+ style={{
81
+ height: '36px',
82
+ width: '36px'
83
+ }}
84
+ >
85
+ <CollectibleTileImage imageUrl={tokenMetadata?.image} />
86
+ </div>
87
+ <div className="flex flex-col gap-0.5">
88
+ <Text variant="small" color="secondary" fontWeight="medium">
89
+ {dataCollectionInfo?.name || null}
90
+ </Text>
91
+ <Text variant="small" color="primary" fontWeight="bold">
92
+ {`${tokenMetadata?.name || 'Collectible'} ${collectibleQuantity > 1 ? `x${collectibleQuantity}` : ''}`}
93
+ </Text>
94
+ </div>
95
+ </div>
96
+ )
97
+ })}
98
+ </div>
99
+ <div className="flex gap-1 flex-col">
100
+ <div className="flex flex-row gap-2 items-center">
101
+ <NetworkImage chainId={chainId} size="sm" />
102
+ <Text color="white" variant="large" fontWeight="bold">{`${displayPrice} ${dataCurrencyInfo?.symbol}`}</Text>
103
+ </div>
104
+ <div>
105
+ <Text color="muted" variant="normal" fontWeight="normal">
106
+ {`$${priceFiat} estimated total`}
107
+ </Text>
108
+ </div>
109
+ </div>
110
+ <NetworkBadge chainId={chainId} />
111
+ </div>
112
+ )
113
+ }
@@ -0,0 +1,38 @@
1
+ import { Card, cn, Text } from '@0xsequence/design-system'
2
+ import { JSX } from 'react'
3
+
4
+ interface PaymentProviderOptionProps {
5
+ name: string
6
+ onClick: () => void
7
+ isSelected: boolean
8
+ isRecommended: boolean
9
+ logo: JSX.Element
10
+ }
11
+
12
+ export const PaymentProviderOption = ({ name, onClick, isSelected, isRecommended, logo }: PaymentProviderOptionProps) => {
13
+ return (
14
+ <Card
15
+ className={cn(
16
+ 'flex border-2 border-solid justify-between p-4 cursor-pointer',
17
+ isSelected ? 'bg-background-raised' : 'bg-transparent'
18
+ )}
19
+ onClick={onClick}
20
+ >
21
+ <div className="flex justify-between w-full">
22
+ <div className="flex justify-between items-center gap-3">
23
+ <div className="rounded-xl">{logo}</div>
24
+ <Text variant="normal" fontWeight="bold" color="secondary">
25
+ {name}
26
+ </Text>
27
+ </div>
28
+ <div className="flex flex-row justify-center items-center gap-3">
29
+ {isRecommended && (
30
+ <Text color="muted" variant="small">
31
+ Recommended
32
+ </Text>
33
+ )}
34
+ </div>
35
+ </div>
36
+ </Card>
37
+ )
38
+ }
@@ -0,0 +1,177 @@
1
+ import { ArrowRightIcon, Card, PaymentsIcon, Spinner, Text } from '@0xsequence/design-system'
2
+ import { findSupportedNetwork } from '@0xsequence/network'
3
+ import { useClearCachedBalances, useGetContractInfo } from '@0xsequence/react-hooks'
4
+ import { useEffect, useState } from 'react'
5
+ import { useAccount } from 'wagmi'
6
+
7
+ import { SelectPaymentSettings } from '../../../contexts'
8
+ import { CheckoutSettings } from '../../../contexts/CheckoutModal'
9
+ import { useCheckoutModal, useSelectPaymentModal } from '../../../hooks'
10
+
11
+ interface PayWithCreditCardProps {
12
+ settings: SelectPaymentSettings
13
+ disableButtons: boolean
14
+ skipOnCloseCallback: () => void
15
+ }
16
+
17
+ type BasePaymentProviderOptions = 'sardine' | 'transak'
18
+ type CustomPaymentProviderOptions = 'custom'
19
+ type PaymentProviderOptions = BasePaymentProviderOptions | CustomPaymentProviderOptions
20
+
21
+ export const PayWithCreditCard = ({ settings, disableButtons, skipOnCloseCallback }: PayWithCreditCardProps) => {
22
+ const {
23
+ chain,
24
+ currencyAddress,
25
+ targetContractAddress,
26
+ price,
27
+ txData,
28
+ collectibles,
29
+ collectionAddress,
30
+ approvedSpenderAddress,
31
+ onSuccess = () => {},
32
+ onError = () => {},
33
+ onClose = () => {},
34
+ creditCardProviders = [],
35
+ transakConfig,
36
+ supplementaryAnalyticsInfo = {}
37
+ } = settings
38
+
39
+ const { address: userAddress } = useAccount()
40
+ const { clearCachedBalances } = useClearCachedBalances()
41
+ const { closeSelectPaymentModal } = useSelectPaymentModal()
42
+ const { triggerCheckout } = useCheckoutModal()
43
+ const network = findSupportedNetwork(chain)
44
+ const chainId = network?.chainId || 137
45
+ const { data: currencyInfoData, isLoading: isLoadingContractInfo } = useGetContractInfo({
46
+ chainID: String(chainId),
47
+ contractAddress: currencyAddress
48
+ })
49
+ const [selectedPaymentProvider, setSelectedPaymentProvider] = useState<PaymentProviderOptions>()
50
+ const isLoading = isLoadingContractInfo
51
+
52
+ useEffect(() => {
53
+ if (selectedPaymentProvider) {
54
+ payWithSelectedProvider()
55
+ }
56
+ }, [selectedPaymentProvider])
57
+
58
+ const payWithSelectedProvider = () => {
59
+ switch (selectedPaymentProvider) {
60
+ case 'custom':
61
+ if (settings.customProviderCallback) {
62
+ onClickCustomProvider()
63
+ }
64
+ return
65
+ case 'sardine':
66
+ case 'transak':
67
+ onPurchase()
68
+ return
69
+ default:
70
+ return
71
+ }
72
+ }
73
+
74
+ const onClickCustomProvider = () => {
75
+ if (settings.customProviderCallback) {
76
+ closeSelectPaymentModal()
77
+ settings.customProviderCallback(onSuccess, onError, onClose)
78
+ }
79
+ }
80
+
81
+ const onPurchase = () => {
82
+ if (!userAddress || !currencyInfoData) {
83
+ return
84
+ }
85
+
86
+ const collectible = collectibles[0]
87
+
88
+ const checkoutSettings: CheckoutSettings = {
89
+ creditCardCheckout: {
90
+ onSuccess: (txHash: string) => {
91
+ clearCachedBalances()
92
+ onSuccess(txHash)
93
+ },
94
+ onError,
95
+ onClose,
96
+ chainId,
97
+ recipientAddress: userAddress,
98
+ contractAddress: targetContractAddress,
99
+ currencyQuantity: price,
100
+ currencySymbol: currencyInfoData.symbol,
101
+ currencyAddress,
102
+ currencyDecimals: String(currencyInfoData?.decimals || 0),
103
+ nftId: collectible.tokenId,
104
+ nftAddress: collectionAddress,
105
+ nftQuantity: collectible.quantity,
106
+ nftDecimals: collectible.decimals === undefined ? undefined : String(collectible.decimals),
107
+ provider: selectedPaymentProvider as BasePaymentProviderOptions,
108
+ calldata: txData,
109
+ transakConfig,
110
+ approvedSpenderAddress: approvedSpenderAddress || targetContractAddress,
111
+ supplementaryAnalyticsInfo
112
+ }
113
+ }
114
+
115
+ skipOnCloseCallback()
116
+ closeSelectPaymentModal()
117
+ triggerCheckout(checkoutSettings)
118
+ }
119
+
120
+ const Options = () => {
121
+ return (
122
+ <div className="flex flex-col justify-center items-center gap-2 w-full">
123
+ {/* Only 1 option will be displayed, even if multiple providers are passed */}
124
+ {creditCardProviders
125
+ .slice(0, 1)
126
+ .filter(provider => {
127
+ // cannot display transak checkout if the settings aren't provided
128
+ if (provider === 'transak' && !settings.transakConfig) {
129
+ return false
130
+ }
131
+ return true
132
+ })
133
+ .map(creditCardProvider => {
134
+ switch (creditCardProvider) {
135
+ case 'sardine':
136
+ case 'transak':
137
+ case 'custom':
138
+ return (
139
+ <Card
140
+ className="flex justify-between items-center p-4 cursor-pointer"
141
+ key="sardine"
142
+ onClick={() => {
143
+ setSelectedPaymentProvider(creditCardProvider)
144
+ }}
145
+ disabled={disableButtons}
146
+ >
147
+ <div className="flex flex-row gap-3 items-center">
148
+ <PaymentsIcon className="text-white" />
149
+ <Text color="primary" variant="normal" fontWeight="bold">
150
+ Pay with credit or debit card
151
+ </Text>
152
+ </div>
153
+ <div style={{ transform: 'rotate(-45deg)' }}>
154
+ <ArrowRightIcon className="text-white" />
155
+ </div>
156
+ </Card>
157
+ )
158
+ default:
159
+ return null
160
+ }
161
+ })}
162
+ </div>
163
+ )
164
+ }
165
+
166
+ return (
167
+ <div className="w-full">
168
+ {isLoading ? (
169
+ <div className="flex w-full pt-5 justify-center items-center">
170
+ <Spinner />
171
+ </div>
172
+ ) : (
173
+ <Options />
174
+ )}
175
+ </div>
176
+ )
177
+ }
@@ -0,0 +1,11 @@
1
+ export const SardineLogo = () => {
2
+ return (
3
+ <svg width="42" height="42" className="rounded-xl" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
4
+ <rect className="w-24 h-24" fill="#2D29D7" />
5
+ <path
6
+ d="M19.6675 12.2188L13.9751 17.9112C13.8567 18.0296 13.649 18.0296 13.5306 17.9112L9.72601 14.1053C9.5485 13.9291 9.45219 13.6938 9.45219 13.4448C9.45219 13.1957 9.54988 12.9604 9.72601 12.7843L9.88975 12.6206C9.90213 12.6068 9.92002 12.5999 9.93653 12.5999C9.95442 12.5999 9.97093 12.6068 9.98332 12.6192L13.5788 16.216C13.6723 16.3082 13.8333 16.3082 13.9269 16.216L17.9709 12.1706C18.0659 12.0757 18.0659 11.9188 17.9709 11.8239L13.9269 7.77847C13.8333 7.68627 13.6723 7.6849 13.5802 7.77847L4.89078 16.4651C4.82336 16.5325 4.72979 16.5504 4.64173 16.5146C4.55366 16.4775 4.5 16.3963 4.5 16.3013V7.6904C4.5 7.59546 4.55366 7.51428 4.64173 7.4785C4.72841 7.44135 4.82473 7.46061 4.89216 7.52804L7.2506 9.88648C7.42673 10.0626 7.52442 10.2979 7.52442 10.547C7.52442 10.796 7.42673 11.0327 7.2506 11.2088L7.08824 11.3712C7.06484 11.3946 7.01944 11.3946 6.99467 11.3712L5.95855 10.3351C5.91314 10.2896 5.85397 10.2896 5.81545 10.3062C5.77554 10.3227 5.73289 10.3639 5.73289 10.4286V13.5617C5.73289 13.6264 5.77554 13.6677 5.81545 13.6842C5.85397 13.6993 5.91314 13.7007 5.95855 13.6553L13.5306 6.08462C13.6434 5.97179 13.8622 5.97179 13.9751 6.08462L19.6675 11.7771C19.79 11.8982 19.79 12.0977 19.6675 12.2202V12.2188Z"
7
+ fill="white"
8
+ />
9
+ </svg>
10
+ )
11
+ }
@@ -0,0 +1,250 @@
1
+ import { CryptoOption, compareAddress, ContractVerificationStatus, formatDisplay } from '@0xsequence/connect'
2
+ import { AddIcon, Button, SubtractIcon, Text, Spinner } from '@0xsequence/design-system'
3
+ import { findSupportedNetwork } from '@0xsequence/network'
4
+ import { useClearCachedBalances, useGetTokenBalancesSummary, useGetContractInfo, useGetSwapPrices } from '@0xsequence/react-hooks'
5
+ import { motion } from 'motion/react'
6
+ import { useState, useEffect, Fragment, SetStateAction } from 'react'
7
+ import { formatUnits } from 'viem'
8
+ import { useAccount } from 'wagmi'
9
+
10
+ import { SelectPaymentSettings } from '../../../contexts'
11
+
12
+ interface PayWithCryptoProps {
13
+ settings: SelectPaymentSettings
14
+ disableButtons: boolean
15
+ selectedCurrency: string | undefined
16
+ setSelectedCurrency: React.Dispatch<SetStateAction<string | undefined>>
17
+ isLoading: boolean
18
+ }
19
+
20
+ const MAX_OPTIONS = 3
21
+
22
+ export const PayWithCrypto = ({
23
+ settings,
24
+ disableButtons,
25
+ selectedCurrency,
26
+ setSelectedCurrency,
27
+ isLoading
28
+ }: PayWithCryptoProps) => {
29
+ const [showMore, setShowMore] = useState(false)
30
+ const { enableSwapPayments = true, enableMainCurrencyPayment = true } = settings
31
+
32
+ const { chain, currencyAddress, price } = settings
33
+ const { address: userAddress } = useAccount()
34
+ const { clearCachedBalances } = useClearCachedBalances()
35
+ const network = findSupportedNetwork(chain)
36
+ const chainId = network?.chainId || 137
37
+
38
+ const { data: currencyBalanceData, isLoading: currencyBalanceIsLoading } = useGetTokenBalancesSummary({
39
+ chainIds: [chainId],
40
+ filter: {
41
+ accountAddresses: userAddress ? [userAddress] : [],
42
+ contractStatus: ContractVerificationStatus.ALL,
43
+ contractWhitelist: [currencyAddress],
44
+ omitNativeBalances: false
45
+ },
46
+ omitMetadata: true
47
+ })
48
+
49
+ const { data: currencyInfoData, isLoading: isLoadingCurrencyInfo } = useGetContractInfo({
50
+ chainID: String(chainId),
51
+ contractAddress: currencyAddress
52
+ })
53
+
54
+ const buyCurrencyAddress = settings?.currencyAddress
55
+
56
+ const { data: swapPrices = [], isLoading: swapPricesIsLoading } = useGetSwapPrices(
57
+ {
58
+ userAddress: userAddress ?? '',
59
+ buyCurrencyAddress,
60
+ chainId: chainId,
61
+ buyAmount: price,
62
+ withContractInfo: true
63
+ },
64
+ { disabled: !enableSwapPayments }
65
+ )
66
+
67
+ const isLoadingOptions = currencyBalanceIsLoading || isLoadingCurrencyInfo || isLoading
68
+
69
+ const swapsIsLoading = swapPricesIsLoading
70
+
71
+ interface Coin {
72
+ index: number
73
+ name: string
74
+ symbol: string
75
+ currencyAddress: string
76
+ }
77
+
78
+ const coins: Coin[] = [
79
+ ...(enableMainCurrencyPayment
80
+ ? [
81
+ {
82
+ index: 0,
83
+ name: currencyInfoData?.name || 'Unknown',
84
+ symbol: currencyInfoData?.symbol || '',
85
+ currencyAddress
86
+ }
87
+ ]
88
+ : []),
89
+ ...swapPrices.map((price, index) => {
90
+ return {
91
+ index: index + 1,
92
+ name: price.info?.name || 'Unknown',
93
+ symbol: price.info?.symbol || '',
94
+ currencyAddress: price.info?.address || ''
95
+ }
96
+ })
97
+ ]
98
+
99
+ useEffect(() => {
100
+ if (enableMainCurrencyPayment) {
101
+ setSelectedCurrency(coins[0].currencyAddress)
102
+ } else if (!swapPricesIsLoading) {
103
+ setSelectedCurrency(swapPrices?.[0]?.info?.address)
104
+ }
105
+ }, [swapPricesIsLoading])
106
+ const priceFormatted = formatUnits(BigInt(price), currencyInfoData?.decimals || 0)
107
+ const priceDisplay = formatDisplay(priceFormatted, {
108
+ disableScientificNotation: true,
109
+ disableCompactNotation: true,
110
+ significantDigits: 6
111
+ })
112
+
113
+ const balanceInfo = currencyBalanceData?.find(balanceData => compareAddress(currencyAddress, balanceData.contractAddress))
114
+
115
+ const balance: bigint = BigInt(balanceInfo?.balance || '0')
116
+ // let balanceFormatted = Number(formatUnits(balance, currencyInfoData?.decimals || 0))
117
+ // balanceFormatted = Math.trunc(Number(balanceFormatted) * 10000) / 10000
118
+
119
+ const isNotEnoughFunds: boolean = BigInt(price) > balance
120
+
121
+ useEffect(() => {
122
+ clearCachedBalances()
123
+ }, [])
124
+
125
+ const Options = () => {
126
+ return (
127
+ <div className="flex flex-col justify-center items-center gap-2 w-full">
128
+ {coins.map(coin => {
129
+ if (compareAddress(coin.currencyAddress, currencyAddress)) {
130
+ return (
131
+ <Fragment key={currencyAddress}>
132
+ <CryptoOption
133
+ currencyName={currencyInfoData?.name || 'Unknown'}
134
+ chainId={chainId}
135
+ iconUrl={currencyInfoData?.logoURI}
136
+ symbol={currencyInfoData?.symbol || ''}
137
+ onClick={() => {
138
+ setSelectedCurrency(currencyAddress)
139
+ }}
140
+ price={priceDisplay}
141
+ disabled={disableButtons}
142
+ isSelected={compareAddress(selectedCurrency || '', currencyAddress)}
143
+ isInsufficientFunds={isNotEnoughFunds}
144
+ />
145
+ </Fragment>
146
+ )
147
+ } else {
148
+ const swapPrice = swapPrices?.find(price => compareAddress(price.info?.address || '', coin.currencyAddress))
149
+ const currencyInfoNotFound =
150
+ !swapPrice || !swapPrice.info || swapPrice?.info?.decimals === undefined || !swapPrice.balance?.balance
151
+
152
+ if (currencyInfoNotFound || !enableSwapPayments) {
153
+ return null
154
+ }
155
+ const swapQuotePriceFormatted = formatUnits(BigInt(swapPrice.price.price), swapPrice.info?.decimals || 18)
156
+ const swapQuoteAddress = swapPrice.info?.address || ''
157
+
158
+ const swapQuotePriceDisplay = formatDisplay(swapQuotePriceFormatted, {
159
+ disableScientificNotation: true,
160
+ disableCompactNotation: true,
161
+ significantDigits: 6
162
+ })
163
+
164
+ return (
165
+ <CryptoOption
166
+ key={swapQuoteAddress}
167
+ currencyName={swapPrice.info?.name || 'Unknown'}
168
+ chainId={chainId}
169
+ iconUrl={swapPrice.info?.logoURI}
170
+ symbol={swapPrice.info?.symbol || ''}
171
+ onClick={() => {
172
+ setSelectedCurrency(swapQuoteAddress)
173
+ }}
174
+ price={swapQuotePriceDisplay}
175
+ disabled={disableButtons}
176
+ isSelected={compareAddress(selectedCurrency || '', swapQuoteAddress)}
177
+ isInsufficientFunds={false}
178
+ />
179
+ )
180
+ }
181
+ })}
182
+ </div>
183
+ )
184
+ }
185
+
186
+ const gutterHeight = 8
187
+ const optionHeight = 72
188
+ const displayedOptionsAmount = Math.min(coins.length, MAX_OPTIONS)
189
+ const displayedGuttersAmount = displayedOptionsAmount - 1
190
+ const collapsedOptionsHeight = `${optionHeight * displayedOptionsAmount + gutterHeight * displayedGuttersAmount}px`
191
+
192
+ const ShowMoreButton = () => {
193
+ return (
194
+ <div className="flex justify-center items-center w-full">
195
+ <Button
196
+ className="text-white"
197
+ rightIcon={() => {
198
+ if (showMore) {
199
+ return <SubtractIcon style={{ marginLeft: '-4px' }} size="xs" />
200
+ }
201
+ return <AddIcon style={{ marginLeft: '-4px' }} size="xs" />
202
+ }}
203
+ variant="ghost"
204
+ onClick={() => {
205
+ setShowMore(!showMore)
206
+ }}
207
+ label={showMore ? 'Show less' : 'Show more'}
208
+ />
209
+ </div>
210
+ )
211
+ }
212
+
213
+ return (
214
+ <div className="w-full">
215
+ <div>
216
+ <Text variant="small" fontWeight="medium" color="white">
217
+ Pay with crypto
218
+ </Text>
219
+ </div>
220
+ <div
221
+ className="py-3"
222
+ style={{
223
+ marginBottom: '-12px'
224
+ }}
225
+ >
226
+ {isLoadingOptions ? (
227
+ <div className="flex w-full py-5 justify-center items-center">
228
+ <Spinner />
229
+ </div>
230
+ ) : (
231
+ <>
232
+ <motion.div
233
+ className="overflow-hidden"
234
+ animate={{ height: showMore ? 'auto' : collapsedOptionsHeight }}
235
+ transition={{ ease: 'easeOut', duration: 0.3 }}
236
+ >
237
+ <Options />
238
+ </motion.div>
239
+ {swapsIsLoading && (
240
+ <div className="flex justify-center items-center w-full mt-4">
241
+ <Spinner />
242
+ </div>
243
+ )}
244
+ {!swapsIsLoading && coins.length > MAX_OPTIONS && <ShowMoreButton />}
245
+ </>
246
+ )}
247
+ </div>
248
+ </div>
249
+ )
250
+ }
@@ -0,0 +1,98 @@
1
+ import { Card, CheckmarkIcon, CopyIcon, IconButton, Text, truncateAddress } from '@0xsequence/design-system'
2
+ import { QRCodeCanvas } from 'qrcode.react'
3
+ import { useState, useEffect } from 'react'
4
+ import { CopyToClipboard } from 'react-copy-to-clipboard'
5
+ import { useAccount } from 'wagmi'
6
+
7
+ import { useSelectPaymentModal, useTransferFundsModal } from '../../hooks'
8
+
9
+ export const TransferFunds = () => {
10
+ const { openTransferFundsModal } = useTransferFundsModal()
11
+ const { openSelectPaymentModal, closeSelectPaymentModal, selectPaymentSettings } = useSelectPaymentModal()
12
+ const { address: userAddress } = useAccount()
13
+ const [isCopied, setCopy] = useState(false)
14
+
15
+ useEffect(() => {
16
+ if (isCopied) {
17
+ setTimeout(() => {
18
+ setCopy(false)
19
+ }, 4000)
20
+ }
21
+ }, [isCopied])
22
+
23
+ const handleCopy = () => {
24
+ setCopy(true)
25
+ }
26
+
27
+ const onClickQrCode = (e: React.MouseEvent<HTMLDivElement>) => {
28
+ e.preventDefault()
29
+ e.stopPropagation()
30
+ if (!selectPaymentSettings) {
31
+ return
32
+ }
33
+
34
+ closeSelectPaymentModal()
35
+
36
+ setTimeout(() => {
37
+ openTransferFundsModal({
38
+ walletAddress: userAddress || '',
39
+ onClose: () => {
40
+ setTimeout(() => {
41
+ openSelectPaymentModal(selectPaymentSettings)
42
+ }, 500)
43
+ }
44
+ })
45
+ }, 500)
46
+ }
47
+
48
+ return (
49
+ <div className="w-full">
50
+ <div className="mb-3">
51
+ <Text variant="small" fontWeight="medium" color="white">
52
+ Transfer funds to your connected wallet
53
+ </Text>
54
+ </div>
55
+ <Card className="flex cursor-pointer w-full justify-between p-4" onClick={onClickQrCode}>
56
+ <div className="flex flex-row gap-3 items-center">
57
+ <div className="bg-white p-4 rounded-sm" style={{ width: 40, height: 40 }}>
58
+ <QRCodeCanvas
59
+ value={userAddress || ''}
60
+ size={36}
61
+ bgColor="white"
62
+ fgColor="black"
63
+ data-id="qr-code"
64
+ style={{ position: 'relative', top: '-14px', left: '-14px' }}
65
+ />
66
+ </div>
67
+ <div className="flex flex-col justify-center items-start">
68
+ <div>
69
+ <Text variant="normal" fontWeight="bold" color="secondary">
70
+ Transfer Funds
71
+ </Text>
72
+ </div>
73
+ <div>
74
+ <Text className="text-sm" color="muted" variant="normal">
75
+ {truncateAddress(userAddress || '', 12, 4)}
76
+ </Text>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ <div
81
+ onClick={e => {
82
+ e.stopPropagation()
83
+ e.preventDefault()
84
+ }}
85
+ >
86
+ <CopyToClipboard text={userAddress || ''} onCopy={handleCopy}>
87
+ <IconButton
88
+ className="text-muted"
89
+ variant="base"
90
+ size="md"
91
+ icon={isCopied ? () => <CheckmarkIcon size="lg" /> : () => <CopyIcon size="lg" />}
92
+ />
93
+ </CopyToClipboard>
94
+ </div>
95
+ </Card>
96
+ </div>
97
+ )
98
+ }