@layerswap/widget 1.0.6 → 1.1.0

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 (336) hide show
  1. package/dist/esm/Models/LayerSwapSettings.js +0 -1
  2. package/dist/esm/Models/Theme.js +39 -0
  3. package/dist/esm/components/Buttons/submitButton.js +2 -1
  4. package/dist/esm/components/Common/ConnectWalletButton.js +9 -3
  5. package/dist/esm/components/Common/CountDownTimer.js +0 -1
  6. package/dist/esm/components/Common/WarningMessage.js +4 -2
  7. package/dist/esm/components/Common/guideLink.js +4 -6
  8. package/dist/esm/components/ErrorFallback.js +11 -11
  9. package/dist/esm/components/HeaderWithMenu.js +1 -1
  10. package/dist/esm/components/Icons/Wallets/Xverse.js +3 -0
  11. package/dist/esm/components/Icons/Wallets/index.js +1 -0
  12. package/dist/esm/components/Input/Address/AddressPicker/index.js +15 -12
  13. package/dist/esm/components/Input/Amount/Balance.js +1 -1
  14. package/dist/esm/components/Input/Amount/ExchangeReceiveAmount.js +8 -0
  15. package/dist/esm/components/Input/Amount/MinMax.js +1 -1
  16. package/dist/esm/components/Input/Amount/PriceImpact.js +5 -38
  17. package/dist/esm/components/Input/Amount/ReceiveAmount.js +2 -2
  18. package/dist/esm/components/Input/Amount/index.js +3 -3
  19. package/dist/esm/components/Input/DestinationPicker.js +2 -2
  20. package/dist/esm/components/Input/RoutePicker/Content.js +2 -2
  21. package/dist/esm/components/Input/RoutePicker/RouterPickerWalletConnect.js +5 -5
  22. package/dist/esm/components/Input/RoutePicker/Routes.js +18 -18
  23. package/dist/esm/components/Input/RoutePicker/Rows/CollapsableHeader.js +2 -2
  24. package/dist/esm/components/Input/RoutePicker/Rows/CollapsibleRow.js +3 -3
  25. package/dist/esm/components/Input/RoutePicker/Rows/StickyHeader.js +2 -2
  26. package/dist/esm/components/Input/RoutePicker/Rows/SuggestionsHeader.js +55 -0
  27. package/dist/esm/components/Input/RoutePicker/Rows/TitleRow.js +11 -0
  28. package/dist/esm/components/Input/RoutePicker/Rows/index.js +5 -6
  29. package/dist/esm/components/Input/RoutePicker/index.js +2 -2
  30. package/dist/esm/components/Input/SourceWalletPicker.js +6 -4
  31. package/dist/esm/components/Menu/index.js +1 -1
  32. package/dist/esm/components/Pages/Campaigns/Details/Leaderboard.js +2 -2
  33. package/dist/esm/components/Pages/Campaigns/Details/Rewards.js +2 -2
  34. package/dist/esm/components/Pages/Campaigns/Details/index.js +2 -3
  35. package/dist/esm/components/Pages/Campaigns/index.js +3 -4
  36. package/dist/esm/components/Pages/Swap/Form/ExchangeForm.js +21 -19
  37. package/dist/esm/components/Pages/Swap/Form/FeeDetails/Rate.js +5 -4
  38. package/dist/esm/components/Pages/Swap/Form/FeeDetails/Refuel.js +2 -2
  39. package/dist/esm/components/Pages/Swap/Form/FeeDetails/SwapQuote/DetailedEstimates.js +51 -14
  40. package/dist/esm/components/Pages/Swap/Form/FeeDetails/SwapQuote/SummaryRow.js +1 -1
  41. package/dist/esm/components/Pages/Swap/Form/FeeDetails/SwapQuote/index.js +3 -3
  42. package/dist/esm/components/Pages/Swap/Form/FeeDetails/index.js +8 -9
  43. package/dist/esm/components/Pages/Swap/Form/Form.js +27 -3
  44. package/dist/esm/components/Pages/Swap/Form/FormWrapper.js +6 -8
  45. package/dist/esm/components/Pages/Swap/Form/NetworkForm.js +11 -21
  46. package/dist/esm/components/Pages/Swap/Form/SecondaryComponents/ReserveGasNote.js +8 -6
  47. package/dist/esm/components/Pages/Swap/Withdraw/Failed.js +12 -8
  48. package/dist/esm/components/Pages/Swap/Withdraw/ManualWithdraw.js +28 -9
  49. package/dist/esm/components/Pages/Swap/Withdraw/NotFound.js +15 -4
  50. package/dist/esm/components/Pages/Swap/Withdraw/Processing/Processing.js +36 -41
  51. package/dist/esm/components/Pages/Swap/Withdraw/Summary/Summary.js +1 -1
  52. package/dist/esm/components/Pages/Swap/Withdraw/Summary/index.js +2 -2
  53. package/dist/esm/components/Pages/Swap/Withdraw/SwapDetails.js +9 -7
  54. package/dist/esm/components/Pages/Swap/Withdraw/Wallet/Common/actionMessage.js +43 -0
  55. package/dist/esm/components/Pages/Swap/Withdraw/Wallet/Common/buttons.js +118 -71
  56. package/dist/esm/components/Pages/Swap/Withdraw/Wallet/index.js +56 -65
  57. package/dist/esm/components/Pages/Swap/Withdraw/WalletTransferButton.js +2 -2
  58. package/dist/esm/components/Pages/Swap/Withdraw/WalletTransferContent.js +2 -2
  59. package/dist/esm/components/Pages/Swap/Withdraw/Withdraw.js +3 -3
  60. package/dist/esm/components/Pages/Swap/Withdraw/index.js +5 -4
  61. package/dist/esm/components/Pages/Swap/Withdraw/messages/TransactionMessages.js +14 -15
  62. package/dist/esm/components/Pages/SwapHistory/History.js +1 -1
  63. package/dist/esm/components/Pages/SwapHistory/index.js +4 -4
  64. package/dist/esm/components/Wallet/WalletComponents/WalletsList.js +1 -1
  65. package/dist/esm/components/Wallet/WalletModal/Connector.js +2 -2
  66. package/dist/esm/components/Wallet/WalletModal/ConnectorsList.js +5 -1
  67. package/dist/esm/components/Wallet/WalletModal/index.js +3 -1
  68. package/dist/esm/components/Wallet/WalletProviders/index.js +4 -2
  69. package/dist/esm/components/Widget/Content.js +2 -2
  70. package/dist/esm/components/Widget/Footer.js +1 -1
  71. package/dist/esm/components/Widget/Index.js +1 -1
  72. package/dist/esm/components/WidgetLoading.js +9 -2
  73. package/dist/esm/context/ErrorProvider.js +14 -0
  74. package/dist/esm/context/LayerswapProvider.js +6 -5
  75. package/dist/esm/context/callbackProvider.js +54 -52
  76. package/dist/esm/context/resolverContext.js +7 -2
  77. package/dist/esm/context/swap.js +10 -13
  78. package/dist/esm/context/{balanceAccounts.js → swapAccounts.js} +17 -17
  79. package/dist/esm/context/validationContext.js +1 -1
  80. package/dist/esm/context/walletProviders.js +7 -1
  81. package/dist/esm/context/withdrawalContext.js +2 -2
  82. package/dist/esm/exports/internal.js +4 -3
  83. package/dist/esm/helpers/filterSourceNetworks.js +23 -0
  84. package/dist/esm/helpers/getSettings/getSettings.js +18 -13
  85. package/dist/esm/helpers/routes.js +4 -1
  86. package/dist/esm/hooks/useAllWithdrawalBalances.js +6 -5
  87. package/dist/esm/hooks/useFormRoutes.js +16 -8
  88. package/dist/esm/hooks/useFormValidation.js +5 -4
  89. package/dist/esm/hooks/useRouteValidation.js +1 -1
  90. package/dist/esm/hooks/useSwrSwaps.js +1 -1
  91. package/dist/esm/hooks/useTransfer.js +9 -0
  92. package/dist/esm/hooks/useWallet.js +7 -7
  93. package/dist/esm/lib/AppSettings.js +27 -16
  94. package/dist/esm/lib/ErrorHandler.js +6 -0
  95. package/dist/esm/lib/apiClients/layerSwapApiClient.js +12 -35
  96. package/dist/esm/lib/balances/balanceResolver.js +9 -13
  97. package/dist/esm/lib/fees.js +50 -0
  98. package/dist/esm/lib/resolvers/resolverService.js +10 -1
  99. package/dist/esm/lib/transfers/index.js +1 -0
  100. package/dist/esm/lib/transfers/transferResolver.js +14 -0
  101. package/dist/esm/stores/balanceStore.js +0 -1
  102. package/dist/esm/stores/logStore.js +11 -0
  103. package/dist/esm/types/balance.js +8 -9
  104. package/dist/esm/types/index.js +1 -0
  105. package/dist/esm/types/logEvents.js +1 -0
  106. package/dist/index.css +1 -1
  107. package/dist/tsconfig.tsbuildinfo +1 -1
  108. package/dist/types/Models/Balance.d.ts +1 -1
  109. package/dist/types/Models/LayerSwapSettings.d.ts +7 -0
  110. package/dist/types/Models/LayerSwapSettings.d.ts.map +1 -1
  111. package/dist/types/Models/Theme.d.ts.map +1 -1
  112. package/dist/types/components/Buttons/submitButton.d.ts +1 -1
  113. package/dist/types/components/Buttons/submitButton.d.ts.map +1 -1
  114. package/dist/types/components/Common/ConnectWalletButton.d.ts +1 -1
  115. package/dist/types/components/Common/ConnectWalletButton.d.ts.map +1 -1
  116. package/dist/types/components/Common/CountDownTimer.d.ts.map +1 -1
  117. package/dist/types/components/Common/WarningMessage.d.ts.map +1 -1
  118. package/dist/types/components/Common/guideLink.d.ts.map +1 -1
  119. package/dist/types/components/ErrorFallback.d.ts.map +1 -1
  120. package/dist/types/components/HeaderWithMenu.d.ts.map +1 -1
  121. package/dist/types/components/Icons/Wallets/Xverse.d.ts +4 -0
  122. package/dist/types/components/Icons/Wallets/Xverse.d.ts.map +1 -0
  123. package/dist/types/components/Icons/Wallets/index.d.ts +1 -0
  124. package/dist/types/components/Icons/Wallets/index.d.ts.map +1 -1
  125. package/dist/types/components/Input/Address/AddressNote.d.ts +2 -2
  126. package/dist/types/components/Input/Address/AddressPicker/AddressBook.d.ts +3 -3
  127. package/dist/types/components/Input/Address/AddressPicker/AddressButton.d.ts +3 -3
  128. package/dist/types/components/Input/Address/AddressPicker/AddressWithIcon.d.ts +2 -2
  129. package/dist/types/components/Input/Address/AddressPicker/ConnectedWallets.d.ts +2 -2
  130. package/dist/types/components/Input/Address/AddressPicker/ManualAddressInput.d.ts +4 -4
  131. package/dist/types/components/Input/Address/AddressPicker/index.d.ts +4 -4
  132. package/dist/types/components/Input/Address/AddressPicker/index.d.ts.map +1 -1
  133. package/dist/types/components/Input/Address/index.d.ts +1 -1
  134. package/dist/types/components/Input/Amount/Balance.d.ts +1 -1
  135. package/dist/types/components/Input/Amount/Balance.d.ts.map +1 -1
  136. package/dist/types/components/Input/Amount/ExchangeReceiveAmount.d.ts +11 -0
  137. package/dist/types/components/Input/Amount/ExchangeReceiveAmount.d.ts.map +1 -0
  138. package/dist/types/components/Input/Amount/MinMax.d.ts +1 -1
  139. package/dist/types/components/Input/Amount/PriceImpact.d.ts +2 -6
  140. package/dist/types/components/Input/Amount/PriceImpact.d.ts.map +1 -1
  141. package/dist/types/components/Input/Amount/ReceiveAmount.d.ts +2 -3
  142. package/dist/types/components/Input/Amount/ReceiveAmount.d.ts.map +1 -1
  143. package/dist/types/components/Input/Amount/helpers.d.ts +2 -2
  144. package/dist/types/components/Input/Amount/index.d.ts +1 -1
  145. package/dist/types/components/Input/CexPicker.d.ts +1 -1
  146. package/dist/types/components/Input/DestinationPicker.d.ts +1 -1
  147. package/dist/types/components/Input/DestinationPicker.d.ts.map +1 -1
  148. package/dist/types/components/Input/RoutePicker/Content.d.ts +5 -5
  149. package/dist/types/components/Input/RoutePicker/Content.d.ts.map +1 -1
  150. package/dist/types/components/Input/RoutePicker/RouterPickerWalletConnect.d.ts +1 -1
  151. package/dist/types/components/Input/RoutePicker/Routes.d.ts +4 -8
  152. package/dist/types/components/Input/RoutePicker/Routes.d.ts.map +1 -1
  153. package/dist/types/components/Input/RoutePicker/Rows/CollapsableHeader.d.ts +3 -4
  154. package/dist/types/components/Input/RoutePicker/Rows/CollapsableHeader.d.ts.map +1 -1
  155. package/dist/types/components/Input/RoutePicker/Rows/CollapsibleRow.d.ts +6 -5
  156. package/dist/types/components/Input/RoutePicker/Rows/CollapsibleRow.d.ts.map +1 -1
  157. package/dist/types/components/Input/RoutePicker/Rows/StickyHeader.d.ts +3 -4
  158. package/dist/types/components/Input/RoutePicker/Rows/StickyHeader.d.ts.map +1 -1
  159. package/dist/types/components/Input/RoutePicker/Rows/SuggestionsHeader.d.ts +7 -0
  160. package/dist/types/components/Input/RoutePicker/Rows/SuggestionsHeader.d.ts.map +1 -0
  161. package/dist/types/components/Input/RoutePicker/Rows/TitleRow.d.ts +7 -0
  162. package/dist/types/components/Input/RoutePicker/Rows/TitleRow.d.ts.map +1 -0
  163. package/dist/types/components/Input/RoutePicker/Rows/index.d.ts +5 -5
  164. package/dist/types/components/Input/RoutePicker/Rows/index.d.ts.map +1 -1
  165. package/dist/types/components/Input/RoutePicker/index.d.ts +1 -1
  166. package/dist/types/components/Input/RoutePicker/index.d.ts.map +1 -1
  167. package/dist/types/components/Input/SourcePicker.d.ts +1 -1
  168. package/dist/types/components/Input/SourceWalletPicker.d.ts.map +1 -1
  169. package/dist/types/components/Pages/Campaigns/Details/Leaderboard.d.ts +1 -1
  170. package/dist/types/components/Pages/Campaigns/Details/Rewards.d.ts +1 -1
  171. package/dist/types/components/Pages/Campaigns/Details/index.d.ts +1 -2
  172. package/dist/types/components/Pages/Campaigns/Details/index.d.ts.map +1 -1
  173. package/dist/types/components/Pages/Campaigns/index.d.ts +2 -3
  174. package/dist/types/components/Pages/Campaigns/index.d.ts.map +1 -1
  175. package/dist/types/components/Pages/Swap/Form/ExchangeForm.d.ts +3 -1
  176. package/dist/types/components/Pages/Swap/Form/ExchangeForm.d.ts.map +1 -1
  177. package/dist/types/components/Pages/Swap/Form/FeeDetails/Rate.d.ts +7 -6
  178. package/dist/types/components/Pages/Swap/Form/FeeDetails/Rate.d.ts.map +1 -1
  179. package/dist/types/components/Pages/Swap/Form/FeeDetails/ReceiveAmounts.d.ts +2 -2
  180. package/dist/types/components/Pages/Swap/Form/FeeDetails/Refuel.d.ts +1 -1
  181. package/dist/types/components/Pages/Swap/Form/FeeDetails/RefuelModal.d.ts +1 -1
  182. package/dist/types/components/Pages/Swap/Form/FeeDetails/Slippage.d.ts +1 -1
  183. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/DetailedEstimates.d.ts +3 -2
  184. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/DetailedEstimates.d.ts.map +1 -1
  185. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/SummaryRow.d.ts +4 -4
  186. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/index.d.ts +4 -4
  187. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/index.d.ts.map +1 -1
  188. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/utils.d.ts +2 -2
  189. package/dist/types/components/Pages/Swap/Form/FeeDetails/index.d.ts +7 -4
  190. package/dist/types/components/Pages/Swap/Form/FeeDetails/index.d.ts.map +1 -1
  191. package/dist/types/components/Pages/Swap/Form/Form.d.ts.map +1 -1
  192. package/dist/types/components/Pages/Swap/Form/FormWrapper.d.ts +1 -1
  193. package/dist/types/components/Pages/Swap/Form/FormWrapper.d.ts.map +1 -1
  194. package/dist/types/components/Pages/Swap/Form/NetworkForm.d.ts +1 -1
  195. package/dist/types/components/Pages/Swap/Form/NetworkForm.d.ts.map +1 -1
  196. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/FormButton.d.ts +1 -1
  197. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/ReserveGasNote.d.ts +2 -2
  198. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/ReserveGasNote.d.ts.map +1 -1
  199. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/validationError/ErrorDisplay.d.ts +1 -1
  200. package/dist/types/components/Pages/Swap/Form/SwapFormValues.d.ts +2 -2
  201. package/dist/types/components/Pages/Swap/Withdraw/Failed.d.ts.map +1 -1
  202. package/dist/types/components/Pages/Swap/Withdraw/ManualWithdraw.d.ts +4 -3
  203. package/dist/types/components/Pages/Swap/Withdraw/ManualWithdraw.d.ts.map +1 -1
  204. package/dist/types/components/Pages/Swap/Withdraw/NotFound.d.ts.map +1 -1
  205. package/dist/types/components/Pages/Swap/Withdraw/Processing/Processing.d.ts +1 -1
  206. package/dist/types/components/Pages/Swap/Withdraw/Processing/Processing.d.ts.map +1 -1
  207. package/dist/types/components/Pages/Swap/Withdraw/QuoteUpdate.d.ts +1 -1
  208. package/dist/types/components/Pages/Swap/Withdraw/Summary/Summary.d.ts +1 -1
  209. package/dist/types/components/Pages/Swap/Withdraw/SwapDetails.d.ts +2 -1
  210. package/dist/types/components/Pages/Swap/Withdraw/SwapDetails.d.ts.map +1 -1
  211. package/dist/types/components/Pages/Swap/Withdraw/SwapQuoteDetails.d.ts +3 -3
  212. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/actionMessage.d.ts +6 -0
  213. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/actionMessage.d.ts.map +1 -0
  214. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/buttons.d.ts +4 -3
  215. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/buttons.d.ts.map +1 -1
  216. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/sharedTypes.d.ts +2 -1
  217. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/sharedTypes.d.ts.map +1 -1
  218. package/dist/types/components/Pages/Swap/Withdraw/Wallet/index.d.ts +2 -1
  219. package/dist/types/components/Pages/Swap/Withdraw/Wallet/index.d.ts.map +1 -1
  220. package/dist/types/components/Pages/Swap/Withdraw/WalletTransferButton.d.ts +2 -1
  221. package/dist/types/components/Pages/Swap/Withdraw/WalletTransferButton.d.ts.map +1 -1
  222. package/dist/types/components/Pages/Swap/Withdraw/WalletTransferContent.d.ts +1 -1
  223. package/dist/types/components/Pages/Swap/Withdraw/Withdraw.d.ts +2 -1
  224. package/dist/types/components/Pages/Swap/Withdraw/Withdraw.d.ts.map +1 -1
  225. package/dist/types/components/Pages/Swap/Withdraw/index.d.ts +1 -2
  226. package/dist/types/components/Pages/Swap/Withdraw/index.d.ts.map +1 -1
  227. package/dist/types/components/Pages/Swap/Withdraw/messages/TransactionMessages.d.ts +3 -4
  228. package/dist/types/components/Pages/Swap/Withdraw/messages/TransactionMessages.d.ts.map +1 -1
  229. package/dist/types/components/Pages/SwapHistory/HistorySummary.d.ts +2 -2
  230. package/dist/types/components/Pages/SwapHistory/StatusIcons.d.ts +1 -1
  231. package/dist/types/components/Pages/SwapHistory/SwapDetailsComponent.d.ts +1 -1
  232. package/dist/types/components/Pages/SwapHistory/index.d.ts +3 -1
  233. package/dist/types/components/Pages/SwapHistory/index.d.ts.map +1 -1
  234. package/dist/types/components/Wallet/WalletComponents/WalletsList.d.ts +3 -3
  235. package/dist/types/components/Wallet/WalletComponents/WalletsList.d.ts.map +1 -1
  236. package/dist/types/components/Wallet/WalletModal/Connector.d.ts +2 -1
  237. package/dist/types/components/Wallet/WalletModal/Connector.d.ts.map +1 -1
  238. package/dist/types/components/Wallet/WalletModal/ConnectorsList.d.ts +1 -1
  239. package/dist/types/components/Wallet/WalletModal/ConnectorsList.d.ts.map +1 -1
  240. package/dist/types/components/Wallet/WalletModal/index.d.ts +1 -1
  241. package/dist/types/components/Wallet/WalletModal/index.d.ts.map +1 -1
  242. package/dist/types/components/Wallet/WalletProviders/index.d.ts +3 -1
  243. package/dist/types/components/Wallet/WalletProviders/index.d.ts.map +1 -1
  244. package/dist/types/components/Widget/Content.d.ts +2 -1
  245. package/dist/types/components/Widget/Content.d.ts.map +1 -1
  246. package/dist/types/components/Widget/Footer.d.ts +2 -1
  247. package/dist/types/components/Widget/Footer.d.ts.map +1 -1
  248. package/dist/types/components/Widget/Index.d.ts +3 -2
  249. package/dist/types/components/Widget/Index.d.ts.map +1 -1
  250. package/dist/types/components/WidgetLoading.d.ts.map +1 -1
  251. package/dist/types/components/shadcn/command.d.ts +9 -52
  252. package/dist/types/components/shadcn/command.d.ts.map +1 -1
  253. package/dist/types/context/ErrorProvider.d.ts +3 -0
  254. package/dist/types/context/ErrorProvider.d.ts.map +1 -0
  255. package/dist/types/context/LayerswapProvider.d.ts +22 -4
  256. package/dist/types/context/LayerswapProvider.d.ts.map +1 -1
  257. package/dist/types/context/callbackProvider.d.ts +6 -10
  258. package/dist/types/context/callbackProvider.d.ts.map +1 -1
  259. package/dist/types/context/resolverContext.d.ts.map +1 -1
  260. package/dist/types/context/swap.d.ts +7 -7
  261. package/dist/types/context/swap.d.ts.map +1 -1
  262. package/dist/types/context/{balanceAccounts.d.ts → swapAccounts.d.ts} +9 -9
  263. package/dist/types/context/swapAccounts.d.ts.map +1 -0
  264. package/dist/types/context/walletProviders.d.ts.map +1 -1
  265. package/dist/types/context/withdrawalContext.d.ts +2 -0
  266. package/dist/types/context/withdrawalContext.d.ts.map +1 -1
  267. package/dist/types/exports/internal.d.ts +9 -7
  268. package/dist/types/exports/internal.d.ts.map +1 -1
  269. package/dist/types/helpers/accountSelectHelper.d.ts +1 -1
  270. package/dist/types/helpers/balanceHelper.d.ts +2 -2
  271. package/dist/types/helpers/filterSourceNetworks.d.ts +4 -0
  272. package/dist/types/helpers/filterSourceNetworks.d.ts.map +1 -0
  273. package/dist/types/helpers/getSettings/getSettings.d.ts +1 -1
  274. package/dist/types/helpers/getSettings/getSettings.d.ts.map +1 -1
  275. package/dist/types/helpers/routes.d.ts +1 -1
  276. package/dist/types/helpers/routes.d.ts.map +1 -1
  277. package/dist/types/helpers/tokenHelper.d.ts +2 -2
  278. package/dist/types/hooks/useAllWithdrawalBalances.d.ts +2 -1
  279. package/dist/types/hooks/useAllWithdrawalBalances.d.ts.map +1 -1
  280. package/dist/types/hooks/useFee.d.ts +1 -1
  281. package/dist/types/hooks/useFormRoutes.d.ts +2 -3
  282. package/dist/types/hooks/useFormRoutes.d.ts.map +1 -1
  283. package/dist/types/hooks/useFormValidation.d.ts +2 -1
  284. package/dist/types/hooks/useFormValidation.d.ts.map +1 -1
  285. package/dist/types/hooks/useSwapHistoryData.d.ts +2 -2
  286. package/dist/types/hooks/useTransfer.d.ts +5 -0
  287. package/dist/types/hooks/useTransfer.d.ts.map +1 -0
  288. package/dist/types/hooks/useWallet.d.ts +3 -3
  289. package/dist/types/hooks/useWallet.d.ts.map +1 -1
  290. package/dist/types/lib/AppSettings.d.ts +25 -16
  291. package/dist/types/lib/AppSettings.d.ts.map +1 -1
  292. package/dist/types/lib/ErrorHandler.d.ts +3 -0
  293. package/dist/types/lib/ErrorHandler.d.ts.map +1 -0
  294. package/dist/types/lib/apiClients/layerSwapApiClient.d.ts +1 -9
  295. package/dist/types/lib/apiClients/layerSwapApiClient.d.ts.map +1 -1
  296. package/dist/types/lib/balances/balanceResolver.d.ts +3 -3
  297. package/dist/types/lib/balances/balanceResolver.d.ts.map +1 -1
  298. package/dist/types/lib/balances/helpers.d.ts +1 -1
  299. package/dist/types/lib/balances/useBalance.d.ts +1 -1
  300. package/dist/types/lib/fees.d.ts +16 -0
  301. package/dist/types/lib/fees.d.ts.map +1 -1
  302. package/dist/types/lib/gases/gasResolver.d.ts +2 -2
  303. package/dist/types/lib/gases/useSWRGas.d.ts +3 -3
  304. package/dist/types/lib/generateSwapInitialValues.d.ts +1 -1
  305. package/dist/types/lib/nft/nftBalanceResolver.d.ts +1 -1
  306. package/dist/types/lib/resolvers/resolverService.d.ts +8 -5
  307. package/dist/types/lib/resolvers/resolverService.d.ts.map +1 -1
  308. package/dist/types/lib/sorting.d.ts +1 -1
  309. package/dist/types/lib/transfers/index.d.ts +2 -0
  310. package/dist/types/lib/transfers/index.d.ts.map +1 -0
  311. package/dist/types/lib/transfers/transferResolver.d.ts +7 -0
  312. package/dist/types/lib/transfers/transferResolver.d.ts.map +1 -0
  313. package/dist/types/stores/balanceStore.d.ts.map +1 -1
  314. package/dist/types/stores/logStore.d.ts +8 -0
  315. package/dist/types/stores/logStore.d.ts.map +1 -0
  316. package/dist/types/stores/walletStore.d.ts +1 -1
  317. package/dist/types/types/balance.d.ts +2 -2
  318. package/dist/types/types/balance.d.ts.map +1 -1
  319. package/dist/types/types/gas.d.ts +2 -2
  320. package/dist/types/types/index.d.ts +1 -0
  321. package/dist/types/types/index.d.ts.map +1 -1
  322. package/dist/types/types/logEvents.d.ts +41 -0
  323. package/dist/types/types/logEvents.d.ts.map +1 -0
  324. package/dist/types/types/nft.d.ts +1 -1
  325. package/dist/types/types/transfer.d.ts +7 -2
  326. package/dist/types/types/transfer.d.ts.map +1 -1
  327. package/dist/types/types/wallet.d.ts +23 -5
  328. package/dist/types/types/wallet.d.ts.map +1 -1
  329. package/package.json +3 -3
  330. package/dist/esm/helpers/querryHelper.js +0 -13
  331. package/dist/esm/lib/logError.js +0 -17
  332. package/dist/types/context/balanceAccounts.d.ts.map +0 -1
  333. package/dist/types/helpers/querryHelper.d.ts +0 -3
  334. package/dist/types/helpers/querryHelper.d.ts.map +0 -1
  335. package/dist/types/lib/logError.d.ts +0 -3
  336. package/dist/types/lib/logError.d.ts.map +0 -1
@@ -13,29 +13,28 @@ import ExchangeGasIcon from '../../../../../components/Icons/ExchangeGasIcon';
13
13
  import useSWRNftBalance from '../../../../../lib/nft/useSWRNftBalance';
14
14
  import NumberFlow from '@number-flow/react';
15
15
  import { resolveTokenUsdPrice } from '../../../../../helpers/tokenHelper';
16
- import { useSelectedAccount } from '../../../../../context/balanceAccounts';
16
+ import { useSelectedAccount } from '../../../../../context/swapAccounts';
17
17
  import { CupIcon } from '../../../../../components/Icons/CupIcon';
18
18
  import { DetailedEstimates } from './SwapQuote/DetailedEstimates';
19
- export default function QuoteDetails({ swapValues: values, quote: quoteData, isQuoteLoading }) {
19
+ export default function QuoteDetails({ swapValues: values, quote, isQuoteLoading, reward, variant = 'extended', triggerClassnames }) {
20
20
  const { toAsset, fromAsset: fromCurrency, destination_address } = values || {};
21
21
  const [isAccordionOpen, setIsAccordionOpen] = useState(false);
22
- return (_jsx(_Fragment, { children: quoteData &&
23
- _jsx(Accordion, { type: 'single', collapsible: true, className: 'w-full', value: isAccordionOpen ? 'quote' : '', onValueChange: (value) => { setIsAccordionOpen(value === 'quote'); }, children: _jsxs(AccordionItem, { value: 'quote', className: 'bg-secondary-500 rounded-2xl', children: [_jsxs(AccordionTrigger, { className: clsx('p-3.5 pr-5 w-full rounded-2xl flex items-center justify-between transition-colors duration-200 hover:bg-secondary-400', {
22
+ return (_jsx(_Fragment, { children: quote &&
23
+ _jsx(Accordion, { type: 'single', collapsible: true, className: 'w-full', value: isAccordionOpen ? 'quote' : '', onValueChange: (value) => { setIsAccordionOpen(value === 'quote'); }, children: _jsxs(AccordionItem, { value: 'quote', className: 'bg-secondary-500 rounded-2xl', children: [_jsxs(AccordionTrigger, { className: clsx('p-3.5 pr-5 w-full rounded-2xl flex items-center justify-between transition-colors duration-200 hover:bg-secondary-400 mt-3', triggerClassnames, {
24
24
  'bg-secondary-500': !isAccordionOpen,
25
25
  'bg-secondary-400': isAccordionOpen,
26
26
  'animate-pulse-strong': isQuoteLoading && !isAccordionOpen
27
27
  }), children: [(isAccordionOpen) ?
28
28
  _jsx("p", { className: 'text-sm', children: "Details" })
29
29
  :
30
- _jsx(DetailsButton, { quote: quoteData, isQuoteLoading: isQuoteLoading, swapValues: values, destination: values.to, destinationAddress: destination_address }), _jsx(ChevronDown, { className: 'h-3.5 w-3.5 text-secondary-text' })] }), _jsx(AccordionContent, { className: 'rounded-2xl', children: _jsx(ResizablePanel, { children: (quoteData || isQuoteLoading) && fromCurrency && toAsset &&
31
- _jsx(DetailedEstimates, { swapValues: values, quote: quoteData }) }) })] }) }) }));
30
+ _jsx(DetailsButton, { quote: quote, isQuoteLoading: isQuoteLoading, swapValues: values, destination: values.to, destinationAddress: destination_address, reward: reward }), _jsx(ChevronDown, { className: 'h-3.5 w-3.5 text-secondary-text' })] }), _jsx(AccordionContent, { className: 'rounded-2xl', children: _jsx(ResizablePanel, { children: (quote || isQuoteLoading) && fromCurrency && toAsset &&
31
+ _jsx(DetailedEstimates, { swapValues: values, quote: quote, variant: variant, reward: reward }) }) })] }) }) }));
32
32
  }
33
- export const DetailsButton = ({ quote: quoteData, isQuoteLoading, swapValues: values, destination, destinationAddress }) => {
34
- const { quote, reward } = quoteData || {};
33
+ export const DetailsButton = ({ quote, reward, isQuoteLoading, swapValues: values, destination, destinationAddress }) => {
35
34
  const isCEX = !!values.fromExchange;
36
35
  const sourceAccountNetwork = !isCEX ? values.from : undefined;
37
36
  const selectedSourceAccount = useSelectedAccount("from", sourceAccountNetwork?.name);
38
- const { wallets } = useWallet(quoteData?.quote?.source_network, 'withdrawal');
37
+ const { wallets } = useWallet(quote?.source_network, 'withdrawal');
39
38
  const wallet = wallets.find(w => w.id === selectedSourceAccount?.id);
40
39
  const { gasData: gasData } = useSWRGas(selectedSourceAccount?.address, values.from, values.fromAsset, values.amount, wallet);
41
40
  const gasTokenPriceInUsd = resolveTokenUsdPrice(gasData?.token, quote);
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { SwapDataProvider } from "../../../../context/swap";
4
- import { useMemo } from "react";
4
+ import { useMemo, useState } from "react";
5
5
  import { NetworkExchangeTabs, Tabs, TabsContent } from "./NetworkExchangeTabs";
6
6
  import NetworkForm from "./NetworkForm";
7
7
  import ExchangeForm from "./ExchangeForm";
@@ -15,15 +15,39 @@ import useSWR from "swr";
15
15
  import AppSettings from "../../../../lib/AppSettings";
16
16
  import clsx from "clsx";
17
17
  export default function Form() {
18
- const { from, appName, defaultTab: defaultTabQueryParam } = useInitialSettings();
18
+ const { from, appName, defaultTab: defaultTabQueryParam, theme: themeName } = useInitialSettings();
19
19
  const { sourceExchanges } = useSettingsState();
20
20
  const defaultTab = useMemo(() => {
21
21
  return defaultTabResolver({ from, sourceExchanges, defaultTabQueryParam });
22
22
  }, [from, sourceExchanges]);
23
+ const [showBanner, setShowBanner] = useState(false);
24
+ // useEffect(() => {
25
+ // if (typeof window === "undefined") return;
26
+ // const sessionCountKey = "exchange_banner_session_count";
27
+ // const closedKey = "exchange_banner_closed";
28
+ // const seenKey = "exchange_banner_seen";
29
+ // if (sessionStorage.getItem(closedKey) === "1") return;
30
+ // if (!sessionStorage.getItem(seenKey)) {
31
+ // sessionStorage.setItem(seenKey, "1");
32
+ // const next =
33
+ // (parseInt(localStorage.getItem(sessionCountKey) || "0") || 0) + 1;
34
+ // localStorage.setItem(sessionCountKey, String(next));
35
+ // if (next <= 3) setShowBanner(true);
36
+ // } else {
37
+ // const count = parseInt(localStorage.getItem(sessionCountKey) || "0") || 0;
38
+ // if (count <= 3) setShowBanner(true);
39
+ // }
40
+ // }, []);
41
+ const dismissBanner = () => {
42
+ setShowBanner(false);
43
+ if (typeof window !== "undefined") {
44
+ sessionStorage.setItem("exchange_banner_closed", "1");
45
+ }
46
+ };
23
47
  const layerswapApiClient = new LayerSwapApiClient();
24
48
  const { data: partnerData } = useSWR(appName && `/internal/apps?name=${appName}`, layerswapApiClient.fetcher);
25
49
  const partner = appName && partnerData?.data?.client_id?.toLowerCase() === appName?.toLowerCase() ? partnerData?.data : undefined;
26
- return _jsxs(Tabs, { defaultValue: defaultTab, children: [_jsx("div", { className: clsx("hidden sm:block", { 'sm:hidden': AppSettings.ThemeData?.enableWideVersion !== true }), children: _jsx(NetworkExchangeTabs, {}) }), _jsx(TabsContent, { value: "cross-chain", children: _jsx(SwapDataProvider, { children: _jsx(FormWrapper, { type: "cross-chain", partner: partner, children: _jsx(Widget, { contextualMenu: _jsx("div", { className: clsx("block w-full", { 'sm:hidden': AppSettings.ThemeData?.enableWideVersion == true }), children: _jsx(NetworkExchangeTabs, {}) }), children: _jsx(ValidationProvider, { children: _jsx(NetworkForm, { partner: partner }) }) }) }) }) }), _jsx(TabsContent, { value: "exchange", children: _jsx(SwapDataProvider, { children: _jsx(FormWrapper, { type: "exchange", partner: partner, children: _jsx(Widget, { contextualMenu: _jsx("div", { className: clsx("block w-full", { 'sm:hidden': AppSettings.ThemeData?.enableWideVersion == true }), children: _jsx(NetworkExchangeTabs, {}) }), children: _jsx(ValidationProvider, { children: _jsx(ExchangeForm, { partner: partner }) }) }) }) }) })] });
50
+ return _jsxs(Tabs, { defaultValue: defaultTab, children: [_jsx("div", { className: clsx("hidden sm:block", { 'sm:hidden': AppSettings.ThemeData?.enableWideVersion !== true }), children: _jsx(NetworkExchangeTabs, {}) }), _jsx(TabsContent, { value: "cross-chain", children: _jsx(SwapDataProvider, { children: _jsx(FormWrapper, { type: "cross-chain", partner: partner, children: _jsx(Widget, { contextualMenu: _jsx("div", { className: clsx("block w-full", { 'sm:hidden': AppSettings.ThemeData?.enableWideVersion == true }), children: _jsx(NetworkExchangeTabs, {}) }), children: _jsx(ValidationProvider, { children: _jsx(NetworkForm, { partner: partner }) }) }) }) }) }), _jsx(TabsContent, { value: "exchange", children: _jsx(SwapDataProvider, { children: _jsx(FormWrapper, { type: "exchange", partner: partner, children: _jsx(Widget, { contextualMenu: _jsx("div", { className: clsx("block w-full", { 'sm:hidden': AppSettings.ThemeData?.enableWideVersion == true }), children: _jsx(NetworkExchangeTabs, {}) }), children: _jsx(ValidationProvider, { children: _jsx(ExchangeForm, { partner: partner, showBanner: showBanner, dismissBanner: dismissBanner }) }) }) }) }) })] });
27
51
  }
28
52
  const defaultTabResolver = ({ from, sourceExchanges, defaultTabQueryParam }) => {
29
53
  if (defaultTabQueryParam) {
@@ -14,9 +14,9 @@ import VaulDrawer from "../../../../components/Modal/vaulModal";
14
14
  import { addressFormat } from "../../../../lib/address/formatter";
15
15
  import AddressNote from "../../../../components/Input/Address/AddressNote";
16
16
  import { useBalance } from "../../../../lib/balances/useBalance";
17
- import { useSelectedAccount } from "../../../../context/balanceAccounts";
17
+ import { useSelectedAccount } from "../../../../context/swapAccounts";
18
18
  import SwapDetails from "../Withdraw/SwapDetails";
19
- import { useSwapCreateCallback, useSwapModalStateChangeCallback } from "../../../../context/callbackProvider";
19
+ import { useCallbacks } from "../../../../context/callbackProvider";
20
20
  export default function FormWrapper({ children, type, partner }) {
21
21
  const formikRef = useRef(null);
22
22
  const [showConnectNetworkModal, setShowConnectNetworkModal] = useState(false);
@@ -29,8 +29,7 @@ export default function FormWrapper({ children, type, partner }) {
29
29
  const [walletWihdrawDone, setWalletWihdrawDone] = useState(false);
30
30
  const selectedSourceAccount = useSelectedAccount("from", swapBasicData?.source_network?.name);
31
31
  const { mutate: mutateBalances } = useBalance(selectedSourceAccount?.address, sourceNetworkWithTokens);
32
- const triggerSwapModalStateChangeCallback = useSwapModalStateChangeCallback();
33
- const triggerSwapCreateCallback = useSwapCreateCallback();
32
+ const { onSwapModalStateChange } = useCallbacks();
34
33
  const { getConfirmation } = useAsyncModal();
35
34
  const initialSettings = useInitialSettings();
36
35
  const { destination_address: destinationAddressFromQuery } = initialSettings;
@@ -48,7 +47,7 @@ export default function FormWrapper({ children, type, partner }) {
48
47
  destinationAddressFromQuery &&
49
48
  (addressFormat(destinationAddressFromQuery?.toString(), to) === addressFormat(destination_address, to)) &&
50
49
  !isAddressFromQueryConfirmed) {
51
- const provider = to && getProvider(to, 'autofil');
50
+ const provider = to && getProvider(to, 'autofill');
52
51
  const isDestAddressConnected = destination_address && provider?.connectedWallets?.some((wallet) => addressFormat(wallet.address, to) === addressFormat(destination_address, to));
53
52
  const confirmed = !isDestAddressConnected ? await getConfirmation({
54
53
  content: _jsx(AddressNote, { partner: partner, values: values }),
@@ -71,7 +70,6 @@ export default function FormWrapper({ children, type, partner }) {
71
70
  partner,
72
71
  createSwap: async (...props) => {
73
72
  const response = await createSwap(...props);
74
- triggerSwapCreateCallback(response);
75
73
  return response;
76
74
  },
77
75
  setShowSwapModal: handleShowSwapModal,
@@ -87,7 +85,7 @@ export default function FormWrapper({ children, type, partner }) {
87
85
  : generateSwapInitialValues(settings, initialSettings, type);
88
86
  const handleShowSwapModal = useCallback((value) => {
89
87
  setSwapModalOpen(value);
90
- triggerSwapModalStateChangeCallback(value);
88
+ onSwapModalStateChange(value);
91
89
  if (!value) {
92
90
  if (walletWihdrawDone) {
93
91
  mutateBalances();
@@ -100,7 +98,7 @@ export default function FormWrapper({ children, type, partner }) {
100
98
  setWalletWihdrawDone(true);
101
99
  }, []);
102
100
  return _jsx(_Fragment, { children: _jsx(Formik, { innerRef: formikRef, initialValues: initialValues, validateOnMount: true, onSubmit: handleSubmit, children: _jsxs(_Fragment, { children: [_jsx(VaulDrawer, { show: showConnectNetworkModal, setShow: setShowConnectNetworkModal, header: `${networkToConnect?.DisplayName} connect`, modalId: "showNetwork", children: _jsx(VaulDrawer.Snap, { id: "item-1", children: networkToConnect &&
103
- _jsx(ConnectNetwork, { NetworkDisplayName: networkToConnect?.DisplayName, AppURL: networkToConnect?.AppURL }) }) }), _jsx(VaulDrawer, { show: swapModalOpen, setShow: handleShowSwapModal, header: `Complete the swap`, modalId: "showSwap", className: !swapBasicData?.use_deposit_address ? "expandContainerHeight" : "", children: _jsx(VaulDrawer.Snap, { id: "item-1", children: _jsx(SwapDetails, { type: "contained", onWalletWithdrawalSuccess: handleWalletWithdrawalSuccess, partner: partner }) }) }), children] }) }) });
101
+ _jsx(ConnectNetwork, { NetworkDisplayName: networkToConnect?.DisplayName, AppURL: networkToConnect?.AppURL }) }) }), _jsx(VaulDrawer, { show: swapModalOpen, setShow: handleShowSwapModal, header: `Complete the swap`, modalId: "showSwap", className: !swapBasicData?.use_deposit_address ? "expandContainerHeight" : "", children: _jsx(VaulDrawer.Snap, { id: "item-1", children: _jsx(SwapDetails, { type: "contained", onWalletWithdrawalSuccess: handleWalletWithdrawalSuccess, partner: partner, onCancelWithdrawal: () => handleShowSwapModal(false) }) }) }), children] }) }) });
104
102
  }
105
103
  const handleCreateSwap = async ({ query, values, partner, setShowSwapModal, createSwap, setNetworkToConnect, setShowConnectNetworkModal, setSwapId, setSubmitedFormValues }) => {
106
104
  setSubmitedFormValues(values);
@@ -18,12 +18,12 @@ import { transformFormValuesToQuoteArgs, useQuoteData } from "../../../../hooks/
18
18
  import { useValidationContext } from "../../../../context/validationContext";
19
19
  import { useSwapDataState } from "../../../../context/swap";
20
20
  import ReserveGasNote from "../../../../components/Pages/Swap/Form/SecondaryComponents/ReserveGasNote";
21
- import { useSelectedAccount } from "../../../../context/balanceAccounts";
21
+ import { useSelectedAccount } from "../../../../context/swapAccounts";
22
22
  import QuoteDetails from "./FeeDetails";
23
23
  import DepositMethodComponent from "./FeeDetails/DepositMethod";
24
24
  import RefuelToggle from "./FeeDetails/Refuel";
25
25
  import RefuelModal from "./FeeDetails/RefuelModal";
26
- import { useFormChangeCallback } from "../../../../context/callbackProvider";
26
+ import { useCallbacks } from "../../../../context/callbackProvider";
27
27
  const NetworkForm = ({ partner }) => {
28
28
  const [openRefuelModal, setOpenRefuelModal] = useState(false);
29
29
  const { values, setValues, isSubmitting, setFieldValue, } = useFormikContext();
@@ -40,10 +40,10 @@ const NetworkForm = ({ partner }) => {
40
40
  const initialSettings = useInitialSettings();
41
41
  const isValid = !formValidation.message;
42
42
  const error = formValidation.message;
43
- const triggerFormChangeCallback = useFormChangeCallback();
43
+ const { onFormChange } = useCallbacks();
44
44
  useEffect(() => {
45
- triggerFormChangeCallback(values);
46
- }, [values, triggerFormChangeCallback]);
45
+ onFormChange(values);
46
+ }, [values, onFormChange]);
47
47
  useEffect(() => {
48
48
  if (!source || !toAsset || !toAsset.refuel) {
49
49
  setFieldValue('refuel', false, true);
@@ -54,22 +54,12 @@ const NetworkForm = ({ partner }) => {
54
54
  setFieldValue('amount', (nativeTokenBalance?.amount - networkGas).toString(), true);
55
55
  }, [setFieldValue]);
56
56
  const shouldConnectWallet = (source && source?.deposit_methods?.includes('wallet') && depositMethod !== 'deposit_address' && !selectedSourceAccount) || (!source && !wallets.length && depositMethod !== 'deposit_address');
57
- // useEffect(() => {
58
- // if (wallets?.length) {
59
- // const allWalletAddresses = wallets.flatMap(w => w.addresses).filter(Boolean);
60
- // posthog.setPersonProperties({
61
- // accounts: allWalletAddresses,
62
- // });
63
- // }
64
- // }, [wallets]);
65
- return (_jsxs(_Fragment, { children: [_jsx(DepositMethodComponent, {}), _jsxs(Form, { className: "h-full grow flex flex-col flex-1 justify-between w-full gap-3", children: [_jsx(Widget.Content, { children: _jsxs("div", { className: "w-full flex flex-col justify-between flex-1 gap-3", children: [_jsxs("div", { className: 'flex-col relative flex justify-between gap-2 w-full leading-4', children: [!(initialSettings?.hideFrom && values?.from) && _jsx(SourcePicker, { minAllowedAmount: minAllowedAmount, maxAllowedAmount: maxAllowedAmount, fee: quote }), !initialSettings?.hideFrom && !initialSettings?.hideTo &&
66
- _jsx(ValueSwapperButton, { values: values, setValues: setValues, providers: providers, query: initialSettings }), !(initialSettings?.hideTo && values?.to) && _jsx(DestinationPicker, { isFeeLoading: isQuoteLoading, fee: quote, partner: partner })] }), Number(values.amount) > 0 ?
67
- _jsx(ReserveGasNote, { maxAllowedAmount: minAllowedAmount, minAllowedAmount: maxAllowedAmount, onSubmit: handleReserveGas })
68
- : null, (values.toAsset?.refuel && !initialSettings.hideRefuel) ?
69
- _jsx(RefuelToggle, { quote: quote, onButtonClick: () => setOpenRefuelModal(true), minAllowedAmount: minAllowedAmount })
70
- : null, routeValidation.message
71
- ? _jsx(ValidationError, {})
72
- : null, _jsx(QuoteDetails, { swapValues: values, quote: quote, isQuoteLoading: isQuoteLoading })] }) }), _jsx(Widget.Footer, { showPoweredBy: true, children: _jsx(FormButton, { shouldConnectWallet: shouldConnectWallet, values: values, disabled: !isValid || isSubmitting || !quote || isQuoteLoading, error: error, isSubmitting: isSubmitting, partner: partner }) }), _jsx(RefuelModal, { openModal: openRefuelModal, setOpenModal: setOpenRefuelModal, fee: quote })] })] }));
57
+ return (_jsxs(_Fragment, { children: [_jsx(DepositMethodComponent, {}), _jsxs(Form, { className: "h-full grow flex flex-col flex-1 justify-between w-full gap-3", children: [_jsx(Widget.Content, { children: _jsxs("div", { className: "w-full flex flex-col justify-between flex-1", children: [_jsxs("div", { className: 'flex-col relative flex justify-between gap-2 w-full leading-4', children: [!(initialSettings?.hideFrom && values?.from) && _jsx(SourcePicker, { minAllowedAmount: minAllowedAmount, maxAllowedAmount: maxAllowedAmount, fee: quote }), !initialSettings?.hideFrom && !initialSettings?.hideTo &&
58
+ _jsx(ValueSwapperButton, { values: values, setValues: setValues, providers: providers, query: initialSettings }), !(initialSettings?.hideTo && values?.to) && _jsx(DestinationPicker, { isFeeLoading: isQuoteLoading, fee: quote, partner: partner })] }), _jsxs("div", { children: [Number(values.amount) > 0 &&
59
+ _jsx(ReserveGasNote, { maxAllowedAmount: maxAllowedAmount, minAllowedAmount: minAllowedAmount, onSubmit: handleReserveGas }), values.toAsset?.refuel && !initialSettings.hideRefuel &&
60
+ _jsx(RefuelToggle, { quote: quote, onButtonClick: () => setOpenRefuelModal(true), minAllowedAmount: minAllowedAmount }), routeValidation.message
61
+ ? _jsx("div", { className: "mt-3", children: _jsx(ValidationError, {}) })
62
+ : null, _jsx(QuoteDetails, { swapValues: values, quote: quote?.quote, reward: quote?.reward, isQuoteLoading: isQuoteLoading })] })] }) }), _jsx(Widget.Footer, { showPoweredBy: true, children: _jsx(FormButton, { shouldConnectWallet: shouldConnectWallet, values: values, disabled: !isValid || isSubmitting || !quote || isQuoteLoading, error: error, isSubmitting: isSubmitting, partner: partner }) }), _jsx(RefuelModal, { openModal: openRefuelModal, setOpenModal: setOpenRefuelModal, fee: quote })] })] }));
73
63
  };
74
64
  const ValueSwapperButton = ({ values, setValues, providers, query }) => {
75
65
  const [animate, cycle] = useCycle({ rotateX: 0 }, { rotateX: 180 });
@@ -4,7 +4,7 @@ import { useFormikContext } from "formik";
4
4
  import { truncateDecimals } from "../../../../../components/utils/RoundDecimals";
5
5
  import { useBalance } from "../../../../../lib/balances/useBalance";
6
6
  import useSWRGas from "../../../../../lib/gases/useSWRGas";
7
- import { useSelectedAccount } from "../../../../../context/balanceAccounts";
7
+ import { useSelectedAccount } from "../../../../../context/swapAccounts";
8
8
  const ReserveGasNote = ({ onSubmit, minAllowedAmount, maxAllowedAmount }) => {
9
9
  const { values, } = useFormikContext();
10
10
  const selectedSourceAccount = useSelectedAccount("from", values.from?.name);
@@ -13,14 +13,16 @@ const ReserveGasNote = ({ onSubmit, minAllowedAmount, maxAllowedAmount }) => {
13
13
  const nativeTokenBalance = balances?.find(b => b.token == values?.from?.token?.symbol);
14
14
  const mightBeOutOfGas = !!(nativeTokenBalance?.amount && !!(gasData && nativeTokenBalance?.isNativeCurrency && (Number(values.amount)
15
15
  + gasData.gas) > nativeTokenBalance.amount
16
- && minAllowedAmount
16
+ && minAllowedAmount && maxAllowedAmount && values.amount
17
+ && values.fromAsset?.symbol === values.from?.token?.symbol
17
18
  && nativeTokenBalance.amount > minAllowedAmount
19
+ && !(Number(values.amount) > nativeTokenBalance.amount)
18
20
  && !(maxAllowedAmount && (nativeTokenBalance.amount > (maxAllowedAmount + gasData.gas)))));
19
21
  const gasToReserveFormatted = mightBeOutOfGas ? truncateDecimals(gasData.gas, values?.fromAsset?.precision) : '';
20
22
  return (_jsx(_Fragment, { children: mightBeOutOfGas && gasToReserveFormatted ?
21
- ((Number(nativeTokenBalance.amount) < Number(gasData)) ?
22
- _jsx(WarningMessage, { messageType: "warning", children: _jsx("div", { className: "font-normal text-primary-text", children: "You don't have enough funds to cover gas fees." }) })
23
- :
24
- _jsx(WarningMessage, { messageType: "warning", children: _jsxs("div", { className: "font-normal text-primary-text", children: [_jsx("div", { children: "You might not be able to complete the transaction." }), _jsxs("div", { onClick: () => onSubmit(nativeTokenBalance, gasData.gas), className: "cursor-pointer border-b border-dotted border-primary-text w-fit hover:text-primary hover:border-primary text-primary-text", children: [_jsx("span", { children: "Reserve" }), " ", _jsx("span", { children: gasToReserveFormatted }), " ", _jsx("span", { children: values?.fromAsset?.symbol }), " ", _jsx("span", { children: "for gas." })] })] }) })) : null }));
23
+ (_jsx("div", { className: "mt-3", children: (Number(nativeTokenBalance.amount) < Number(gasData.gas)) ?
24
+ _jsx(WarningMessage, { messageType: "warning", children: _jsx("div", { className: "font-normal text-primary-text", children: "You don't have enough funds to cover gas fees." }) })
25
+ :
26
+ _jsx(WarningMessage, { messageType: "warning", children: _jsxs("div", { className: "font-normal text-primary-text", children: [_jsx("div", { children: "You might not be able to complete the transaction." }), _jsxs("div", { onClick: () => onSubmit(nativeTokenBalance, gasData.gas), className: "cursor-pointer border-b border-dotted border-primary-text w-fit hover:text-primary hover:border-primary text-primary-text", children: [_jsx("span", { children: "Reserve" }), " ", _jsx("span", { children: gasToReserveFormatted }), " ", _jsx("span", { children: nativeTokenBalance?.token }), " ", _jsx("span", { children: "for gas." })] })] }) }) })) : null }));
25
27
  };
26
28
  export default ReserveGasNote;
@@ -1,20 +1,24 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
2
+ import { useCallback, useEffect } from 'react';
3
3
  import { useSwapDataState } from '../../../../context/swap';
4
4
  import { useIntercom } from 'react-use-intercom';
5
5
  import { SwapStatus } from '../../../../Models/SwapStatus';
6
6
  import QuestionIcon from '../../../../components/Icons/Question';
7
- // import { posthog } from 'posthog-js';
7
+ import { ErrorHandler } from '../../../../lib/ErrorHandler';
8
8
  const Failed = () => {
9
9
  const { swapDetails } = useSwapDataState();
10
10
  const { boot, show, update } = useIntercom();
11
11
  const updateWithProps = () => update({ customAttributes: { swapId: swapDetails?.id } });
12
- // useEffect(() => {
13
- // posthog.capture('Swap failed', {
14
- // swapId: swapDetails?.id ?? null,
15
- // path: typeof window !== 'undefined' ? window.location.pathname : undefined,
16
- // });
17
- // }, []);
12
+ useEffect(() => {
13
+ const error = new Error(`Swap failed: ${swapDetails?.id}`);
14
+ ErrorHandler({
15
+ type: "SwapFailed",
16
+ message: error.message,
17
+ name: error.name,
18
+ stack: error.stack,
19
+ cause: error.cause
20
+ });
21
+ }, [swapDetails?.id]);
18
22
  const startIntercom = useCallback(() => {
19
23
  boot();
20
24
  show();
@@ -23,11 +23,15 @@ import { truncateDecimals } from '../../../../components/utils/RoundDecimals';
23
23
  import { addressFormat } from '../../../../lib/address/formatter';
24
24
  import { isValidAddress } from '../../../../lib/address/validator';
25
25
  import { ExtendedAddress } from '../../../../components/Input/Address/AddressPicker/AddressWithIcon';
26
- const ManualWithdraw = ({ swapBasicData, quote, depositActions, refuel, partner, type }) => {
26
+ import QuoteDetails from '../Form/FeeDetails';
27
+ const ManualWithdraw = ({ swapBasicData, depositActions, refuel, partner, type, quote, isQuoteLoading }) => {
27
28
  const { wallets } = useWallet();
28
29
  const { createSwap, setSwapId } = useSwapDataUpdate();
29
30
  const [isPopoverOpen, setIsPopoverOpen] = useState(false);
30
- const [newNetwork, setNewNetwork] = useState(null);
31
+ const [selectedFrom, setSelectedFrom] = useState({
32
+ network: swapBasicData?.source_network ?? null,
33
+ token: swapBasicData?.source_token ?? null,
34
+ });
31
35
  const [loading, setLoading] = useState(false);
32
36
  const { getConfirmation } = useAsyncModal();
33
37
  const [showQR, setShowQR] = useState(false);
@@ -43,8 +47,23 @@ const ManualWithdraw = ({ swapBasicData, quote, depositActions, refuel, partner,
43
47
  copy(depositAddress);
44
48
  }
45
49
  };
50
+ const swapValues = useMemo(() => {
51
+ const fromNetwork = (selectedFrom.network ?? swapBasicData?.source_network);
52
+ const fromToken = selectedFrom.token ?? swapBasicData?.source_token;
53
+ return {
54
+ amount: swapBasicData?.requested_amount?.toString(),
55
+ from: fromNetwork,
56
+ to: swapBasicData?.destination_network,
57
+ fromAsset: fromToken,
58
+ toAsset: swapBasicData?.destination_token,
59
+ refuel: !!refuel,
60
+ destination_address: swapBasicData?.destination_address,
61
+ fromExchange: swapBasicData?.source_exchange,
62
+ depositMethod: 'deposit_address',
63
+ };
64
+ }, [selectedFrom.network, selectedFrom.token, swapBasicData, refuel]);
46
65
  const handleClick = async (network, token) => {
47
- const swapValues = {
66
+ const nextSwapValues = {
48
67
  amount: swapBasicData?.requested_amount?.toString(),
49
68
  from: network,
50
69
  to: swapBasicData?.destination_network,
@@ -58,17 +77,17 @@ const ManualWithdraw = ({ swapBasicData, quote, depositActions, refuel, partner,
58
77
  try {
59
78
  setLoading(true);
60
79
  await handleLimitsUpdate({
61
- swapValues,
80
+ swapValues: nextSwapValues,
62
81
  network,
63
82
  token,
64
83
  getConfirmation
65
84
  });
66
- const swapData = await createSwap(swapValues, initialSettings);
67
- setNewNetwork(network);
85
+ const swapData = await createSwap(nextSwapValues, initialSettings);
68
86
  const swapId = swapData?.swap?.id;
69
87
  if (!swapId)
70
88
  throw new Error('Swap ID is undefined');
71
89
  setSwapId(swapId);
90
+ setSelectedFrom({ network, token });
72
91
  setIsPopoverOpen(false);
73
92
  }
74
93
  catch (e) {
@@ -86,13 +105,13 @@ const ManualWithdraw = ({ swapBasicData, quote, depositActions, refuel, partner,
86
105
  const { networks: withdrawalNetworks, isLoading: exchangeSourceNetworksLoading } = useExchangeNetworks(exchangeNetworkParams);
87
106
  const requestAmount = (_jsxs("span", { className: 'inline-flex items-center gap-1 px-1.5 mx-1 bg-secondary-300 rounded-lg', children: [_jsx("span", { children: truncateDecimals(Number(swapBasicData?.requested_amount), swapBasicData?.source_token?.precision) }), " ", _jsx("span", { children: swapBasicData?.source_token?.symbol }), _jsx(CopyButton, { toCopy: swapBasicData?.requested_amount, iconClassName: 'text-secondary-text' })] }));
88
107
  const destinationNetwork = (_jsxs("span", { className: 'flex items-center gap-1', children: [destinationLogo && _jsx(ImageWithFallback, { src: destinationLogo, alt: "Project Logo", height: "16", width: "16", loading: "eager", className: "rounded-md object-contain" }), swapBasicData?.destination_network?.display_name] }));
89
- const sourceNetworkPopover = (_jsxs(Popover, { open: isPopoverOpen, onOpenChange: setIsPopoverOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { className: "inline-flex items-center gap-1 px-1.5 mx-1 bg-secondary-300 rounded-lg", children: [_jsx(ImageWithFallback, { src: newNetwork?.logo || swapBasicData?.source_network?.logo, alt: "Project Logo", height: "16", width: "16", loading: "eager", className: "rounded-sm object-contain" }), _jsx("span", { children: newNetwork?.display_name || swapBasicData?.source_network?.display_name }), _jsx("span", { className: "pointer-events-none text-shadow-primary-text-tertiary", children: _jsx(ChevronDown, { className: "h-3.5 w-3.5 text-secondary-text", "aria-hidden": "true" }) })] }) }), _jsx(PopoverContent, { side: 'top', className: "bg-secondary-300! space-y-1 p-1! rounded-lg!", children: _jsx(CommandWrapper, { children: _jsx(CommandList, { children: withdrawalNetworks?.map((item) => {
108
+ const sourceNetworkPopover = (_jsxs(Popover, { open: isPopoverOpen, onOpenChange: setIsPopoverOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { className: "inline-flex items-center gap-1 px-1.5 mx-1 bg-secondary-300 rounded-lg", children: [_jsx(ImageWithFallback, { src: selectedFrom.network?.logo ?? swapBasicData?.source_network?.logo, alt: "Project Logo", height: "16", width: "16", loading: "eager", className: "rounded-sm object-contain" }), _jsx("span", { children: selectedFrom.network?.display_name ?? swapBasicData?.source_network?.display_name }), _jsx("span", { className: "pointer-events-none text-shadow-primary-text-tertiary", children: _jsx(ChevronDown, { className: "h-3.5 w-3.5 text-secondary-text", "aria-hidden": "true" }) })] }) }), _jsx(PopoverContent, { side: 'top', className: "bg-secondary-300! space-y-1 p-1! rounded-lg!", children: _jsx(CommandWrapper, { children: _jsx(CommandList, { children: withdrawalNetworks?.map((item) => {
90
109
  return (_jsx(CommandItem, { className: 'hover:bg-secondary-100 rounded-md p-1! cursor-pointer', value: item.network.name, onSelect: () => handleClick(item.network, item.token), children: _jsx("div", { className: `flex items-center justify-between w-full overflow-hidden`, children: _jsxs("div", { className: `gap-2 relative flex items-center w-full space-y-1`, children: [_jsx("div", { className: `h-6 w-6 shrink-0 mb-0!`, children: item.network.logo && (_jsx(ImageWithFallback, { src: item.network.logo, alt: "Project Logo", height: "24", width: "24", loading: "eager", className: "rounded-md object-contain" })) }), _jsx("div", { className: "flex justify-between w-full items-center", children: _jsx("span", { className: "flex items-center pb-0.5 text-sm font-medium text-primary-text pr-20", children: item.network.display_name }) })] }) }) }, item.network.name));
91
110
  }) }) }) })] }));
92
- return (_jsxs(_Fragment, { children: [_jsx(Widget.Content, { children: _jsx("div", { className: 'flex flex-col flex-1 h-full min-h-0 w-full space-y-3', children: (loading || exchangeSourceNetworksLoading) ? (_jsxs(_Fragment, { children: [_jsx(SkeletonStep, { number: 1 }), _jsx(SkeletonStep, { number: 2 }), _jsx(SkeletonStep, { number: 3 })] })) : (_jsxs(_Fragment, { children: [_jsx(Step, { number: 1, label: _jsxs("div", { className: "flex items-center justify-between gap-2 relative", children: [_jsx("span", { children: "Copy the deposit address" }), _jsx("div", { className: "relative", children: _jsxs(Popover, { open: showQR, onOpenChange: setShowQR, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("div", { className: "relative", children: _jsx(QRIcon, { className: "bg-secondary-300 p-1 rounded-lg cursor-pointer hover:opacity-80 fill-primary-text text-primary-text" }) }) }), _jsx(PopoverContent, { side: "left", align: "start", className: "bg-secondary-300 p-2 rounded-xl z-50", children: _jsx("div", { className: "bg-white p-2 rounded-xl shadow-lg", children: _jsx(QRCodeSVG, { className: "rounded-lg", value: depositAddress || '', includeMargin: true, size: 160, level: "H" }) }) })] }) })] }), value: _jsx("span", { className: "cursor-pointer hover:underline min-h-5 block", children: depositAddress ? (_jsxs("span", { className: 'flex items-center gap-1', children: [shortenAddress(depositAddress), _jsx(CopyButton, { toCopy: depositAddress || '', className: 'flex' })] })) : (_jsx("span", { className: "inline-block w-28 bg-secondary-400 h-5 rounded animate-pulse" })) }) }), _jsx(Step, { number: 2, label: _jsxs("span", { children: [_jsxs("span", { className: 'inline-flex items-center', children: [_jsx("span", { children: "Send" }), requestAmount] }), _jsx("span", { children: "via" }), swapBasicData?.source_exchange ? (_jsx("span", { className: "inline-flex items-center align-bottom", children: sourceNetworkPopover })) : (_jsxs("span", { className: "inline-flex items-center gap-1 mx-1 h-6 align-bottom", children: [_jsx(ImageWithFallback, { src: swapBasicData?.source_network?.logo, alt: "Project Logo", height: "16", width: "16", loading: "eager", className: "rounded-sm object-contain" }), _jsx("span", { children: swapBasicData?.source_network?.display_name })] })), _jsx("span", { children: "to the deposit address" })] }) }), _jsx(Step, { number: 3, label: _jsxs("span", { className: 'flex items-center gap-1', children: [_jsx("span", { children: "Receive" }), " ", _jsx("span", { children: truncateDecimals(quote?.receive_amount ?? 0, swapBasicData?.destination_token?.precision) }), " ", _jsx("span", { children: swapBasicData?.destination_token?.symbol }), " ", _jsx("span", { children: "at" }), " ", _jsx("span", { children: destinationNetwork })] }), value: _jsxs("span", { className: "cursor-pointer hover:underline flex items-center gap-1", children: [WalletIcon ? (_jsx(WalletIcon, { className: "w-4 h-4 bg-secondary-700 rounded-sm" })) : addressProviderIcon ? (_jsx(ImageWithFallback, { alt: "Partner logo", className: "h-4 w-4 rounded-md object-contain", src: partner.logo, width: "36", height: "36" })) : (_jsx(AddressIcon, { className: "h-4 w-4", address: swapBasicData.destination_address, size: 36, rounded: "4px" })), ((swapBasicData?.destination_network && isValidAddress(swapBasicData?.destination_address, swapBasicData?.destination_network)) ?
111
+ return (_jsxs(_Fragment, { children: [_jsx(Widget.Content, { children: _jsx("div", { className: 'flex flex-col flex-1 h-full min-h-0 w-full space-y-3', children: (loading || exchangeSourceNetworksLoading) ? (_jsxs(_Fragment, { children: [_jsx(SkeletonStep, { number: 1 }), _jsx(SkeletonStep, { number: 2 }), _jsx(SkeletonStep, { number: 3 })] })) : (_jsxs(_Fragment, { children: [_jsx(Step, { number: 1, label: _jsxs("div", { className: "flex items-center justify-between gap-2 relative", children: [_jsx("span", { children: "Copy the deposit address" }), _jsx("div", { className: "relative", children: _jsxs(Popover, { open: showQR, onOpenChange: setShowQR, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("div", { className: "relative", children: _jsx(QRIcon, { className: "bg-secondary-300 p-1 rounded-lg cursor-pointer hover:opacity-80 fill-primary-text text-primary-text" }) }) }), _jsx(PopoverContent, { side: "left", align: "start", className: "bg-secondary-300 p-2 rounded-xl z-50", children: _jsx("div", { className: "bg-white p-2 rounded-xl shadow-lg", children: _jsx(QRCodeSVG, { className: "rounded-lg", value: depositAddress || '', includeMargin: true, size: 160, level: "H" }) }) })] }) })] }), value: _jsx("span", { className: "cursor-pointer hover:underline min-h-5 block", children: depositAddress ? (_jsxs("span", { className: 'flex items-center gap-1', children: [shortenAddress(depositAddress), _jsx(CopyButton, { toCopy: depositAddress || '', className: 'flex' })] })) : (_jsx("span", { className: "inline-block w-28 bg-secondary-400 h-5 rounded animate-pulse" })) }) }), _jsx(Step, { number: 2, label: _jsxs("span", { children: [_jsxs("span", { className: 'inline-flex items-center', children: [_jsx("span", { children: "Send" }), requestAmount] }), _jsx("span", { children: "via" }), swapBasicData?.source_exchange ? (_jsx("span", { className: "inline-flex items-center align-bottom max-sm:mt-1", children: sourceNetworkPopover })) : (_jsxs("span", { className: "inline-flex items-center gap-1 mx-1 h-6 align-bottom", children: [_jsx(ImageWithFallback, { src: swapBasicData?.source_network?.logo, alt: "Project Logo", height: "16", width: "16", loading: "eager", className: "rounded-sm object-contain" }), _jsx("span", { children: swapBasicData?.source_network?.display_name })] })), _jsx("span", { children: "to the deposit address" })] }) }), _jsx(Step, { number: 3, label: _jsxs("span", { className: 'flex items-center gap-1', children: [_jsx("span", { children: "Receive" }), " ", _jsx("span", { children: truncateDecimals(quote?.receive_amount ?? 0, swapBasicData?.destination_token?.precision) }), " ", _jsx("span", { children: swapBasicData?.destination_token?.symbol }), " ", _jsx("span", { children: "at" }), " ", _jsx("span", { children: destinationNetwork })] }), value: _jsxs("span", { className: "cursor-pointer hover:underline flex items-center gap-1", children: [WalletIcon ? (_jsx(WalletIcon, { className: "w-4 h-4 bg-secondary-700 rounded-sm" })) : addressProviderIcon ? (_jsx(ImageWithFallback, { alt: "Partner logo", className: "h-4 w-4 rounded-md object-contain", src: partner.logo, width: "36", height: "36" })) : (_jsx(AddressIcon, { className: "h-4 w-4", address: swapBasicData.destination_address, size: 36, rounded: "4px" })), ((swapBasicData?.destination_network && isValidAddress(swapBasicData?.destination_address, swapBasicData?.destination_network)) ?
93
112
  _jsx("div", { className: "text-sm group/addressItem text-secondary-text", children: _jsx(ExtendedAddress, { address: addressFormat(swapBasicData?.destination_address, swapBasicData?.destination_network), network: swapBasicData?.destination_network, shouldShowChevron: false }) })
94
113
  :
95
- _jsx("p", { className: "text-sm text-secondary-text", children: shortenAddress(swapBasicData?.destination_address) }))] }) })] })) }) }), _jsx(Widget.Footer, { sticky: type == 'widget', children: _jsx(SubmitButton, { onClick: handleCopy, children: copied ? 'Copied!' : 'Copy deposit address' }) })] }));
114
+ _jsx("p", { className: "text-sm text-secondary-text", children: shortenAddress(swapBasicData?.destination_address) }))] }) }), _jsx(QuoteDetails, { swapValues: swapValues, quote: quote, isQuoteLoading: isQuoteLoading, triggerClassnames: 'mt-0!' })] })) }) }), _jsx(Widget.Footer, { sticky: type == 'widget', children: _jsx(SubmitButton, { onClick: handleCopy, children: copied ? 'Copied!' : 'Copy deposit address' }) })] }));
96
115
  };
97
116
  const Step = ({ number, label, value }) => (_jsxs("div", { className: "flex items-start space-x-3 bg-secondary-500 p-3 rounded-xl", children: [_jsx("div", { className: "w-6 h-6 rounded-md bg-secondary-400 text-primary-text flex items-center justify-center text-base font-normal leading-6", children: number }), _jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-normal text-base leading-6", children: label }), _jsx("div", { className: "text-sm text-secondary-text", children: value })] })] }));
98
117
  const SkeletonStep = ({ number }) => (_jsxs("div", { className: "flex items-start space-x-3 bg-secondary-500 p-3 rounded-lg animate-pulse", children: [_jsx("div", { className: "w-6 h-6 rounded-md bg-secondary-400 text-primary-text flex items-center justify-center text-base font-normal leading-6", children: number }), _jsxs("div", { className: "flex-1 space-y-3", children: [_jsx("div", { className: "h-5 bg-secondary-300 rounded w-3/4" }), _jsx("div", { className: "h-4 bg-secondary-300 rounded w-1/2" })] })] }));
@@ -1,19 +1,30 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback } from "react";
2
+ import { useCallback, useEffect } from "react";
3
3
  import { useIntercom } from "react-use-intercom";
4
4
  import { Home } from "lucide-react";
5
- import { useBackClickCallback } from "../../../../context/callbackProvider";
5
+ import { useCallbacks } from "../../../../context/callbackProvider";
6
6
  import MessageComponent from "../../../../components/Common/MessageComponent";
7
7
  import NotFoundIcon from "../../../../components/Icons/NotFoundIcon";
8
+ import { ErrorHandler } from "../../../../lib/ErrorHandler";
8
9
  const NotFound = ({ swapId }) => {
9
10
  const { boot, show, update } = useIntercom();
10
11
  const updateWithProps = () => update({ customAttributes: { swapId: swapId } });
11
- const triggerBackClickCallback = useBackClickCallback();
12
+ const { onBackClick } = useCallbacks();
13
+ useEffect(() => {
14
+ const error = new Error(`Swap not found: ${swapId}`);
15
+ ErrorHandler({
16
+ type: "NotFound",
17
+ message: error.message,
18
+ name: error.name,
19
+ stack: error.stack,
20
+ cause: error.cause
21
+ });
22
+ }, [swapId]);
12
23
  const startIntercom = useCallback(() => {
13
24
  boot();
14
25
  show();
15
26
  updateWithProps();
16
27
  }, [boot, show, updateWithProps]);
17
- return _jsxs(MessageComponent, { children: [_jsxs(MessageComponent.Content, { center: true, children: [_jsxs(MessageComponent.Header, { className: "mb-3", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-red-600/20", children: _jsx(NotFoundIcon, {}) }), _jsx("h1", { className: "text-center text-2xl font-semibold text-primary-text", children: "Swap not found" })] }), _jsx(MessageComponent.Description, { children: _jsxs("p", { className: "mx-auto text-center text-base font-normal leading-5 text-secondary-text px-9", children: [_jsx("span", { children: "We couldn't find a swap with this link. If you believe there's an issue, please" }), _jsx("button", { type: "button", onClick: startIntercom, className: "mx-1 underline decoration-gray-400 underline-offset-2 hover:decoration-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-[#0f1420] focus:ring-gray-400 rounded", children: _jsx("span", { children: "contact our support" }) }), _jsx("span", { children: "and we'll help you fix it." })] }) })] }), _jsx(MessageComponent.Buttons, { children: _jsx("div", { className: "flex w-full text-primary-text text-base space-x-2", children: _jsxs("button", { onClick: triggerBackClickCallback, type: "button", className: "w-full inline-flex items-center justify-center gap-2 rounded-xl bg-secondary-300 px-5 py-4 text-base font-semibold leading-6 hover:bg-secondary-400 focus:outline-none transition", children: [_jsx(Home, { className: "h-5 w-5", "aria-hidden": "true" }), _jsx("span", { children: "Back to app" })] }) }) })] });
28
+ return _jsxs(MessageComponent, { children: [_jsxs(MessageComponent.Content, { center: true, children: [_jsxs(MessageComponent.Header, { className: "mb-3", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-red-600/20", children: _jsx(NotFoundIcon, {}) }), _jsx("h1", { className: "text-center text-2xl font-semibold text-primary-text", children: "Swap not found" })] }), _jsx(MessageComponent.Description, { children: _jsxs("p", { className: "mx-auto text-center text-base font-normal leading-5 text-secondary-text px-9", children: [_jsx("span", { children: "We couldn't find a swap with this link. If you believe there's an issue, please" }), _jsx("button", { type: "button", onClick: startIntercom, className: "mx-1 underline decoration-gray-400 underline-offset-2 hover:decoration-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-[#0f1420] focus:ring-gray-400 rounded", children: _jsx("span", { children: "contact our support" }) }), _jsx("span", { children: "and we'll help you fix it." })] }) })] }), _jsx(MessageComponent.Buttons, { children: _jsx("div", { className: "flex w-full text-primary-text text-base space-x-2", children: _jsxs("button", { onClick: onBackClick, type: "button", className: "w-full inline-flex items-center justify-center gap-2 rounded-xl bg-secondary-300 px-5 py-4 text-base font-semibold leading-6 hover:bg-secondary-400 focus:outline-none transition", children: [_jsx(Home, { className: "h-5 w-5", "aria-hidden": "true" }), _jsx("span", { children: "Back to app" })] }) }) })] });
18
29
  };
19
30
  export default NotFound;
@@ -16,12 +16,13 @@ import { useSwapTransactionStore } from '../../../../../stores/swapTransactionSt
16
16
  import CountdownTimer from '../../../../../components/Common/CountDownTimer';
17
17
  import useSWR from 'swr';
18
18
  import { useIntercom } from 'react-use-intercom';
19
- import logError from '../../../../../lib/logError';
20
- // import { posthog } from 'posthog-js';
21
19
  import Steps from './StepsComponent';
20
+ import { useCallbacks } from '../../../../../context/callbackProvider';
21
+ import { ErrorHandler } from '../../../../../lib/ErrorHandler';
22
22
  const Processing = ({ swapBasicData, swapDetails, quote, refuel }) => {
23
- const { boot, show, update, showNewMessages } = useIntercom();
23
+ const { boot, show, update } = useIntercom();
24
24
  const { setSwapTransaction, swapTransactions } = useSwapTransactionStore();
25
+ const { onSwapStatusChange } = useCallbacks();
25
26
  const { source_network, destination_network, destination_token, } = swapBasicData;
26
27
  const { fail_reason } = swapDetails;
27
28
  const updateWithProps = () => update({ customAttributes: { swapId: swapDetails.id } });
@@ -42,17 +43,6 @@ const Processing = ({ swapBasicData, swapDetails, quote, refuel }) => {
42
43
  const { data: inputTxStatusData } = useSWR((transactionHash && swapInputTransaction?.status !== BackendTransactionStatus.Completed) ? [source_network?.name, transactionHash] : null, ([network, tx_id]) => apiClient.GetTransactionStatus(network, tx_id), { dedupingInterval: 6000 });
43
44
  const inputTxStatus = swapInputTransaction ? swapInputTransaction.status : inputTxStatusData?.data?.status.toLowerCase();
44
45
  const loggedNotDetectedTxAt = useRef(null);
45
- const handleSupportClick = useCallback(() => {
46
- const transactionHash = swapInputTransaction?.transaction_hash || storedWalletTransaction?.hash;
47
- const message = `Hi! My transaction (Swap ID: ${swapDetails.id}) has been processing for longer than expected. ${transactionHash ? `Transaction hash: ${transactionHash}` : ''} Could you please help me check the status?`;
48
- boot();
49
- update({
50
- customAttributes: {
51
- swapId: swapDetails.id,
52
- }
53
- });
54
- showNewMessages(message);
55
- }, [boot, show, update, swapDetails.id, swapInputTransaction, storedWalletTransaction]);
56
46
  useEffect(() => {
57
47
  if (inputTxStatus === TransactionStatus.Completed || inputTxStatus === TransactionStatus.Pending) {
58
48
  if (swapDetails?.transactions?.find(t => t.type === TransactionType.Input) || !swapDetails) {
@@ -60,7 +50,14 @@ const Processing = ({ swapBasicData, swapDetails, quote, refuel }) => {
60
50
  }
61
51
  if (Date.now() - (loggedNotDetectedTxAt.current || storedWalletTransaction.timestamp) > 60000) {
62
52
  loggedNotDetectedTxAt.current = Date.now();
63
- logError(`Transaction not detected in ${source_network.name}. Tx hash: \`${transactionHash}\`. Tx status: ${inputTxStatus}. Swap id: \`${swapDetails.id}\`. ${source_network.display_name} explorer: ${source_network?.transaction_explorer_template?.replace("{0}", transactionHash)} . LS explorer: https://layerswap.io/explorer/${storedWalletTransaction?.hash} `);
53
+ const error = new Error(`Transaction not detected in ${source_network.name}. Tx hash: \`${transactionHash}\`. Tx status: ${inputTxStatus}. Swap id: \`${swapDetails.id}\`. ${source_network.display_name} explorer: ${source_network?.transaction_explorer_template?.replace("{0}", transactionHash)} . LS explorer: https://layerswap.io/explorer/${storedWalletTransaction?.hash} `);
54
+ ErrorHandler({
55
+ type: "TransactionNotDetected",
56
+ message: error.message,
57
+ name: error.name,
58
+ stack: error.stack,
59
+ cause: error.cause
60
+ });
64
61
  }
65
62
  }
66
63
  }, [swapDetails, storedWalletTransaction, source_network]);
@@ -71,33 +68,31 @@ const Processing = ({ swapBasicData, swapDetails, quote, refuel }) => {
71
68
  useEffect(() => {
72
69
  if (inputTxStatus === TransactionStatus.Failed) {
73
70
  const err = new Error("Transaction failed");
74
- const renderingError = new Error(`Swap:${swapDetails?.id} transaction:${transactionHash} failed`);
75
- renderingError.name = `TransactionFailed`;
76
- renderingError.cause = err;
77
- // posthog.capture('$exception', {
78
- // name: renderingError.name,
79
- // message: renderingError.message,
80
- // $layerswap_exception_type: "Transaction Error",
81
- // stack: renderingError.stack,
82
- // cause: renderingError.cause,
83
- // where: 'TransactionError',
84
- // severity: 'error',
85
- // });
71
+ const error = new Error(`Swap:${swapDetails?.id} transaction:${transactionHash} failed`);
72
+ error.name = `TransactionFailed`;
73
+ error.cause = err;
74
+ ErrorHandler({
75
+ type: "TransactionFailed",
76
+ message: error.message,
77
+ name: error.name,
78
+ stack: error.stack,
79
+ cause: error.cause
80
+ });
86
81
  }
87
82
  }, [inputTxStatus, transactionHash, swapDetails?.id]);
88
- // useEffect(() => {
89
- // if (
90
- // swapDetails?.status === SwapStatus.Completed ||
91
- // swapDetails?.status === SwapStatus.Failed ||
92
- // swapDetails?.status === SwapStatus.Expired ||
93
- // swapDetails?.status === SwapStatus.LsTransferPending
94
- // ) {
95
- // posthog?.capture(`${swapDetails?.status}`, {
96
- // swap_id: swapDetails?.id,
97
- // status: swapDetails?.status,
98
- // })
99
- // }
100
- // }, [swapDetails?.status, swapDetails?.id])
83
+ useEffect(() => {
84
+ const status = swapDetails?.status;
85
+ if (status === SwapStatus.Completed ||
86
+ status === SwapStatus.Failed ||
87
+ status === SwapStatus.Expired ||
88
+ status === SwapStatus.LsTransferPending) {
89
+ onSwapStatusChange({
90
+ type: status,
91
+ swapId: swapDetails?.id,
92
+ path: 'Processing',
93
+ });
94
+ }
95
+ }, [swapDetails?.status, swapDetails?.id]);
101
96
  const truncatedRefuelAmount = refuel && truncateDecimals(refuel.amount, refuel.token?.precision);
102
97
  const progressStatuses = getProgressStatuses(swapDetails, refuel, inputTxStatusData?.data?.status.toLowerCase());
103
98
  const stepStatuses = progressStatuses.stepStatuses;
@@ -237,7 +232,7 @@ const Processing = ({ swapBasicData, swapDetails, quote, refuel }) => {
237
232
  let currentSteps = allSteps.filter((s) => s.status && s.status != ProgressStatus.Removed);
238
233
  let stepsProgressPercentage = currentSteps.filter(x => x.status == ProgressStatus.Complete).length / currentSteps.length * 100;
239
234
  const swapStatus = swapDetails.status;
240
- return (_jsx(Widget.Content, { children: _jsxs("div", { className: `w-full min-h-[410px] h-full space-y-3 flex flex-col justify-between text-primary-text`, children: [_jsx(SwapSummary, {}), _jsxs("div", { className: "bg-secondary-500 font-normal px-3 pt-6 pb-3 rounded-2xl space-y-4 flex flex-col w-full relative z-10 divide-y-2 divide-secondary-300 divide-dashed", children: [_jsx("div", { className: 'pb-4', children: _jsxs("div", { className: 'flex flex-col gap-2 items-center', children: [_jsxs("div", { className: 'flex items-center', children: [swapStatus === SwapStatus.PendingRefund && (_jsx("span", { className: "relative z-10 flex h-10 w-10 items-center justify-center rounded-full bg-primary/20", children: _jsx(Undo2, { className: "h-7 w-7 text-primary", "aria-hidden": "true" }) })), swapStatus === SwapStatus.Refunded && (_jsx("span", { className: "relative z-10 flex h-10 w-10 items-center justify-center", children: _jsx(CircleCheck, { className: "h-10 w-10 text-primary", strokeWidth: 2, "aria-hidden": "true" }) })), swapStatus !== SwapStatus.PendingRefund && swapStatus !== SwapStatus.Refunded && (_jsx(Gauge, { value: stepsProgressPercentage, size: "small", showCheckmark: swapStatus === SwapStatus.Completed }))] }), _jsxs("div", { className: "flex-col text-center ", children: [_jsx("span", { className: "font-medium text-primary-text", children: progressStatuses.generalStatus.title }), progressStatuses.generalStatus.subTitle &&
235
+ return (_jsx(Widget.Content, { fitContent: true, children: _jsxs("div", { className: `w-full min-h-[410px] h-full space-y-3 flex flex-col justify-between text-primary-text`, children: [_jsx(SwapSummary, {}), _jsxs("div", { className: "bg-secondary-500 font-normal px-3 pt-6 pb-3 rounded-2xl space-y-4 flex flex-col w-full relative z-10 divide-y-2 divide-secondary-300 divide-dashed", children: [_jsx("div", { className: 'pb-4', children: _jsxs("div", { className: 'flex flex-col gap-2 items-center', children: [_jsxs("div", { className: 'flex items-center', children: [swapStatus === SwapStatus.PendingRefund && (_jsx("span", { className: "relative z-10 flex h-10 w-10 items-center justify-center rounded-full bg-primary/20", children: _jsx(Undo2, { className: "h-7 w-7 text-primary", "aria-hidden": "true" }) })), swapStatus === SwapStatus.Refunded && (_jsx("span", { className: "relative z-10 flex h-10 w-10 items-center justify-center", children: _jsx(CircleCheck, { className: "h-10 w-10 text-primary", strokeWidth: 2, "aria-hidden": "true" }) })), swapStatus !== SwapStatus.PendingRefund && swapStatus !== SwapStatus.Refunded && (_jsx(Gauge, { value: stepsProgressPercentage, size: "small", showCheckmark: swapStatus === SwapStatus.Completed }))] }), _jsxs("div", { className: "flex-col text-center ", children: [_jsx("span", { className: "font-medium text-primary-text", children: progressStatuses.generalStatus.title }), progressStatuses.generalStatus.subTitle &&
241
236
  _jsx("span", { className: "text-sm block text-secondary-text", children: progressStatuses.generalStatus.subTitle }), swapOutputTransaction?.status != BackendTransactionStatus.Completed && (swapStatus !== SwapStatus.Cancelled && swapStatus !== SwapStatus.Expired && swapStatus !== SwapStatus.Failed && swapStatus !== SwapStatus.PendingRefund && swapStatus !== SwapStatus.Refunded) &&
242
237
  _jsx("span", { className: 'text-sm block space-x-1 text-secondary-text', children: _jsx("span", { children: countDownTimer }) })] })] }) }), _jsxs("div", { className: 'pt-4', children: [swapStatus != SwapStatus.Cancelled && swapStatus != SwapStatus.Expired && currentSteps.find(x => x.status != null) &&
243
238
  _jsx("div", { className: 'flex flex-col justify-center space-y-4', children: _jsx(Steps, { steps: currentSteps }) }), ([SwapStatus.Expired, SwapStatus.Cancelled, SwapStatus.UserTransferDelayed].includes(swapStatus)) &&
@@ -26,7 +26,7 @@ const Summary = (props) => {
26
26
  truncateDecimals(refuel.amount, nativeCurrency?.precision) : null;
27
27
  const refuelAmountInUsd = nativeCurrency && ((nativeCurrency?.price_in_usd || 1) * (Number(truncatedRefuelAmount) || 0)).toFixed(2);
28
28
  return (_jsx("div", { className: "bg-secondary-500 rounded-2xl px-3 py-4 w-full relative z-10 space-y-4", children: _jsxs("div", { className: "font-normal flex flex-col w-full relative z-10 space-y-3", children: [_jsxs("div", { className: "w-full grid grid-cols-10", children: [_jsx(RouteTokenPair, { route: sourceExchange || source, token: sourceCurrency }), _jsxs("div", { className: "flex flex-col col-start-7 col-span-4 items-end", children: [requestedAmount &&
29
- _jsxs("p", { className: "text-primary-text text-sm whitespace-nowrap", children: [truncateDecimals(Number(requestedAmount), sourceCurrency.precision), " ", sourceCurrency.symbol] }), _jsx("p", { className: "text-secondary-text text-sm flex justify-end", children: _jsx(NumberFlow, { value: Number(requestedAmountInUsd) || 0, format: { style: 'currency', currency: 'USD' }, trend: 0 }) })] })] }), _jsxs("div", { className: "relative text-secondary-text", children: [_jsx("hr", { className: "border border-secondary-400 w-full rounded-full" }), _jsx(ArrowDown, { className: "absolute left-1/2 -translate-x-1/2 top-[-10px] h-6 w-6 p-1 bg-secondary-400 rounded-md text-secondary-text" })] }), _jsxs("div", { className: "w-full grid grid-cols-10", children: [_jsx(RouteTokenPair, { route: destination, token: destinationCurrency }), receiveAmount && (_jsxs("div", { className: "flex flex-col justify-end items-end w-full col-start-7 col-span-4", children: [_jsx("p", { className: clsx("text-primary-text text-sm text-end"), children: _jsx(NumberFlow, { value: receiveAmount, suffix: ` ${destinationCurrency.symbol}`, trend: 0, format: { maximumFractionDigits: quote.quote.destination_token?.decimals || 2 } }) }), _jsxs("p", { className: "text-secondary-text text-sm flex items-center gap-1", children: [_jsx(PriceImpact, { className: "text-sm", bridgeFee: swapQuote?.blockchain_fee, destinationTokenPriceUsd: swapQuote?.destination_token?.price_in_usd, receiveAmount: swapQuote?.receive_amount, requestedAmount: swapQuote?.requested_amount, serviceFee: swapQuote?.service_fee, sourceTokenPriceUsd: swapQuote?.source_token?.price_in_usd }), _jsx(NumberFlow, { value: Number(receiveAmountInUsd) || 0, format: { style: 'currency', currency: 'USD' }, trend: 0 })] })] }))] }), (!!refuel != undefined && nativeCurrency) ?
29
+ _jsxs("p", { className: "text-primary-text text-sm whitespace-nowrap", children: [truncateDecimals(Number(requestedAmount), sourceCurrency.precision), " ", sourceCurrency.symbol] }), _jsx("p", { className: "text-secondary-text text-sm flex justify-end", children: _jsx(NumberFlow, { value: Number(requestedAmountInUsd) || 0, format: { style: 'currency', currency: 'USD' }, trend: 0 }) })] })] }), _jsxs("div", { className: "relative text-secondary-text", children: [_jsx("hr", { className: "border border-secondary-400 w-full rounded-full" }), _jsx(ArrowDown, { className: "absolute left-1/2 -translate-x-1/2 top-[-10px] h-6 w-6 p-1 bg-secondary-400 rounded-md text-secondary-text" })] }), _jsxs("div", { className: "w-full grid grid-cols-10", children: [_jsx(RouteTokenPair, { route: destination, token: destinationCurrency }), receiveAmount && (_jsxs("div", { className: "flex flex-col justify-end items-end w-full col-start-7 col-span-4", children: [_jsx("p", { className: clsx("text-primary-text text-sm text-end"), children: _jsx(NumberFlow, { value: receiveAmount, suffix: ` ${destinationCurrency.symbol}`, trend: 0, format: { maximumFractionDigits: quote.quote.destination_token?.decimals || 2 } }) }), _jsxs("p", { className: "text-secondary-text text-sm flex items-center gap-1", children: [_jsx(PriceImpact, { className: "text-sm", quote: swapQuote }), _jsx(NumberFlow, { value: Number(receiveAmountInUsd) || 0, format: { style: 'currency', currency: 'USD' }, trend: 0 })] })] }))] }), (!!refuel != undefined && nativeCurrency) ?
30
30
  _jsxs("div", { className: "flex items-center justify-between w-full ", children: [_jsxs("div", { className: 'flex items-center gap-3 text-sm', children: [_jsx("span", { className: "relative z-10 flex h-8 w-8 items-center justify-center rounded-lg p-2 bg-primary/20", children: _jsx(Fuel, { className: "h-5 w-5 text-primary", "aria-hidden": "true" }) }), _jsx("p", { children: "Refuel" })] }), _jsxs("div", { className: "flex flex-col items-end", children: [_jsxs("p", { className: "text-primary-text text-sm", children: [truncatedRefuelAmount, " ", nativeCurrency?.symbol] }), _jsxs("p", { className: "text-secondary-text text-sm flex justify-end", children: ["$", refuelAmountInUsd] })] })] })
31
31
  :
32
32
  _jsx(_Fragment, {})] }) }));
@@ -5,7 +5,7 @@ import { TransactionType } from "../../../../../lib/apiClients/layerSwapApiClien
5
5
  import { shortenEmail } from "../../../../../components/utils/ShortenAddress";
6
6
  import KnownInternalNames from "../../../../../lib/knownIds";
7
7
  import { useInitialSettings } from "../../../../../context/settings";
8
- import { useSelectedAccount } from "../../../../../context/balanceAccounts";
8
+ import { useSelectedAccount } from "../../../../../context/swapAccounts";
9
9
  const SwapSummary = () => {
10
10
  const { hideFrom, account, } = useInitialSettings();
11
11
  const { swapBasicData, swapDetails, quote, refuel, quoteIsLoading } = useSwapDataState();
@@ -18,7 +18,7 @@ const SwapSummary = () => {
18
18
  const swapOutputTransaction = swapDetails?.transactions?.find(t => t.type === TransactionType.Output);
19
19
  const requested_amount = (swapInputTransaction?.amount ?? swapBasicData.requested_amount) || undefined;
20
20
  const receiveAmount = quote?.receive_amount;
21
- const calculatedReceiveAmount = swapOutputTransaction?.amount ?? receiveAmount;
21
+ const calculatedReceiveAmount = swapOutputTransaction?.amount ? swapOutputTransaction?.amount : receiveAmount;
22
22
  let sourceAccountAddress = "";
23
23
  if (hideFrom && account) {
24
24
  sourceAccountAddress = account;