@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
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { GroupedTokenHeader, NetworkRouteSelectItemDisplay } from "../Routes";
3
- export const CollapsableHeader = ({ item, direction, allbalancesLoaded, hideTokenImages, }) => {
3
+ export const CollapsableHeader = ({ item, direction, hideTokenImages, }) => {
4
4
  const groupedByToken = item.type === "grouped_token";
5
- return groupedByToken ? (_jsx(GroupedTokenHeader, { item: item, direction: direction, allbalancesLoaded: allbalancesLoaded, hideTokenImages: hideTokenImages })) : (_jsx(NetworkRouteSelectItemDisplay, { item: item.route, selected: false, direction: direction, allbalancesLoaded: allbalancesLoaded, hideTokenImages: hideTokenImages }));
5
+ return groupedByToken ? (_jsx(GroupedTokenHeader, { item: item, direction: direction, hideTokenImages: hideTokenImages })) : (_jsx(NetworkRouteSelectItemDisplay, { item: item.route, selected: false, direction: direction, hideTokenImages: hideTokenImages }));
6
6
  };
@@ -6,7 +6,7 @@ import { motion } from "framer-motion";
6
6
  import { CurrencySelectItemDisplay } from "../Routes";
7
7
  import { CollapsableHeader } from "./CollapsableHeader";
8
8
  import { StickyHeader } from "./StickyHeader";
9
- export const CollapsibleRow = ({ item, toggleContent, direction, onSelect, selectedRoute, selectedToken, searchQuery, openValues, scrollContainerRef, allbalancesLoaded, }) => {
9
+ export const CollapsibleRow = ({ item, index, toggleContent, direction, onSelect, selectedRoute, selectedToken, searchQuery, openValues, scrollContainerRef }) => {
10
10
  const groupName = item.type === "grouped_token" ? item.symbol : item.route.name;
11
11
  const headerId = `${groupName}-header`;
12
12
  const childrenList = useMemo(() => {
@@ -34,8 +34,8 @@ export const CollapsibleRow = ({ item, toggleContent, direction, onSelect, selec
34
34
  headerRef.current?.scrollIntoView({ block: "start", inline: "start" });
35
35
  };
36
36
  return (_createElement(motion.div, { ...(!searchQuery && { layout: "position" }), key: searchQuery ? "search" : "default" },
37
- _jsxs(AccordionItem, { value: groupName, children: [_jsx("div", { ref: headerRef, id: headerId, onClick: () => toggleContent(groupName), className: `cursor-pointer bg-secondary-700 rounded-lg hover:bg-secondary-600 relative ${isSticky ? "opacity-0" : ""}`, children: _jsx(AccordionTrigger, { children: _jsx(CollapsableHeader, { item: item, direction: direction, allbalancesLoaded: allbalancesLoaded, hideTokenImages: isOpen }) }) }), _jsx(StickyHeader, { item: item, direction: direction, scrollContainer: scrollContainerRef.current, open: isOpen, headerRef: headerRef, contentRef: contentRef, allbalancesLoaded: allbalancesLoaded, childrenCount: childrenList?.length, onClick: stickyToggle, isSticky: isSticky, setSticky: setSticky }), _jsx(AccordionContent, { className: "AccordionContent", ref: contentRef, itemsCount: childrenList?.length, children: _jsx("div", { className: "has-[.token-item]:mt-1 bg-secondary-500 rounded-xl overflow-hidden", children: _jsx("div", { className: "overflow-y-auto styled-scroll p-2", children: childrenList?.map(({ token, route }, index) => {
37
+ _jsxs(AccordionItem, { value: groupName, children: [_jsx("div", { ref: headerRef, id: headerId, onClick: () => toggleContent(groupName), className: `cursor-pointer bg-secondary-700 rounded-lg hover:bg-secondary-600 relative ${isSticky ? "opacity-0" : ""}`, children: _jsx(AccordionTrigger, { children: _jsx(CollapsableHeader, { item: item, direction: direction, hideTokenImages: isOpen }) }) }), _jsx(StickyHeader, { item: item, direction: direction, scrollContainer: scrollContainerRef.current, open: isOpen, headerRef: headerRef, contentRef: contentRef, childrenCount: childrenList?.length, onClick: stickyToggle, isSticky: isSticky, setSticky: setSticky }), _jsx(AccordionContent, { className: "AccordionContent", ref: contentRef, itemsCount: childrenList?.length, children: _jsx("div", { className: "has-[.token-item]:mt-1 bg-secondary-500 rounded-xl overflow-hidden", children: _jsx("div", { className: "overflow-y-auto styled-scroll p-2", children: childrenList?.map(({ token, route }, index) => {
38
38
  const isSelected = selectedRoute === route.name && selectedToken === token.symbol;
39
- return (_jsx("div", { className: "token-item pl-2 pr-3 cursor-pointer hover:bg-secondary-400 rounded-xl outline-none disabled:cursor-not-allowed", onClick: () => onSelect(route, token), children: _jsx(CurrencySelectItemDisplay, { allbalancesLoaded: allbalancesLoaded, item: token, selected: isSelected, route: route, direction: direction }) }, `${groupName}-${index}`));
39
+ return (_jsx("div", { className: "token-item pl-2 pr-3 cursor-pointer hover:bg-secondary-400 rounded-xl outline-none disabled:cursor-not-allowed", onClick: () => onSelect(route, token), children: _jsx(CurrencySelectItemDisplay, { item: token, selected: isSelected, route: route, direction: direction }) }, `${groupName}-${index}`));
40
40
  }) }) }) })] })));
41
41
  };
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useEffect } from "react";
3
3
  import ReactPortal from "../../../../components/Common/ReactPortal";
4
4
  import { CollapsableHeader } from "./CollapsableHeader";
5
- export function StickyHeader({ item, direction, scrollContainer, open, headerRef, contentRef, allbalancesLoaded, childrenCount, onClick, isSticky, setSticky, }) {
5
+ export function StickyHeader({ item, direction, scrollContainer, open, headerRef, contentRef, childrenCount, onClick, isSticky, setSticky, }) {
6
6
  useEffect(() => {
7
7
  if (!open) {
8
8
  setSticky(false);
@@ -24,5 +24,5 @@ export function StickyHeader({ item, direction, scrollContainer, open, headerRef
24
24
  }, [scrollContainer, open, headerRef, contentRef, childrenCount]);
25
25
  if (!isSticky)
26
26
  return null;
27
- return (_jsx(ReactPortal, { wrapperId: "sticky_accordion_header", children: _jsx("div", { onClick: onClick, className: "cursor-pointer bg-secondary-700 hover:bg-secondary-600 relative pb-1", children: _jsx(CollapsableHeader, { item: item, direction: direction, allbalancesLoaded: allbalancesLoaded, hideTokenImages: open }) }) }));
27
+ return (_jsx(ReactPortal, { wrapperId: "sticky_accordion_header", children: _jsx("div", { onClick: onClick, className: "cursor-pointer bg-secondary-700 hover:bg-secondary-600 relative pb-1", children: _jsx(CollapsableHeader, { item: item, direction: direction, hideTokenImages: open }) }) }));
28
28
  }
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useBalanceStore } from "../../../../stores/balanceStore";
3
+ import { motion, useInView } from "framer-motion";
4
+ import { useEffect, useMemo, useRef, useState } from "react";
5
+ const randomWords = [
6
+ 'Marinading',
7
+ "Fermenting",
8
+ "Steeping",
9
+ "Infusing",
10
+ "Polishing",
11
+ "Spicing",
12
+ "Compiling",
13
+ "Brewing",
14
+ "Spinning",
15
+ "Booting",
16
+ "Rendering",
17
+ "Synthesizing",
18
+ "Inferring",
19
+ "Neuralizing",
20
+ "Augmenting",
21
+ "Finalizing",
22
+ "Cooking"
23
+ ];
24
+ const SuggestionsHeader = () => {
25
+ const isLoading = useBalanceStore(s => s.sortingDataIsLoading);
26
+ const partialPublished = useBalanceStore(s => s.partialPublished);
27
+ const suggestionsTitle = useMemo(() => isLoading ? `${randomWords[Math.floor(Math.random() * randomWords.length)]}` : '', [isLoading, partialPublished]);
28
+ const [typingComplete, setTypingComplete] = useState(!isLoading);
29
+ const [textToType, setTextToType] = useState(suggestionsTitle);
30
+ useEffect(() => {
31
+ if (isLoading) {
32
+ setTypingComplete(false);
33
+ setTextToType(suggestionsTitle);
34
+ }
35
+ }, [isLoading, suggestionsTitle]);
36
+ if (!isLoading && typingComplete) {
37
+ return _jsx("div", { className: "text-primary-text-tertiary text-base font-normal leading-5 pl-1 sticky top-0 z-50 flex items-baseline", children: "Suggestions" });
38
+ }
39
+ return _jsx(TypingEffect, { text: `${textToType} Suggestions`, onComplete: () => setTypingComplete(true) });
40
+ };
41
+ export function TypingEffect({ text = 'Typing Effect', onComplete }) {
42
+ const ref = useRef(null);
43
+ const isInView = useInView(ref, { once: true });
44
+ useEffect(() => {
45
+ if (isInView && onComplete) {
46
+ const totalDuration = (text.length - 1) * 0.1 + 0.05;
47
+ const timeout = setTimeout(() => {
48
+ onComplete();
49
+ }, totalDuration * 1000);
50
+ return () => clearTimeout(timeout);
51
+ }
52
+ }, [isInView, text.length, onComplete]);
53
+ return (_jsx("div", { ref: ref, className: "text-transparent text-base font-normal leading-5 pl-1 top-0 z-50 items-baseline bg-[linear-gradient(120deg,var(--color-primary-text-tertiary)_40%,var(--color-primary-text),var(--color-primary-text-tertiary)_60%)]\n bg-[length:200%_100%]\n bg-clip-text\n animate-shine", children: text.split('').map((letter, index) => (_jsx(motion.span, { initial: { opacity: 0 }, animate: isInView ? { opacity: 1 } : {}, transition: { duration: 0.01, delay: index * 0.08 }, children: letter }, index))) }, text));
54
+ }
55
+ export default SuggestionsHeader;
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import SuggestionsHeader from "./SuggestionsHeader";
3
+ import RouteTokenSwitch from "../RouteTokenSwitch";
4
+ const TitleRow = ({ item }) => {
5
+ if (item.text.toLowerCase().includes("suggestions")) {
6
+ return _jsx(SuggestionsHeader, {});
7
+ }
8
+ return (_jsxs("div", { className: "text-primary-text-tertiary text-base font-normal leading-5 pl-1 sticky top-0 z-50 flex items-baseline", children: [_jsx("p", { children: item.text }), item.text.toLowerCase().includes("all") &&
9
+ _jsx("div", { className: "relative ml-auto", children: _jsx(RouteTokenSwitch, {}) })] }));
10
+ };
11
+ export default TitleRow;
@@ -1,24 +1,23 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { CurrencySelectItemDisplay } from "../Routes";
3
3
  import { CollapsibleRow } from "./CollapsibleRow";
4
- import RouteTokenSwitch from "../RouteTokenSwitch";
5
4
  import clsx from "clsx";
6
5
  import { SelectItem } from "../../../../components/Select/Selector/SelectItem";
7
- export default function Row({ item, direction, selectedRoute, selectedToken, searchQuery, toggleContent, onSelect, openValues, allbalancesLoaded, scrollContainerRef, }) {
6
+ import TitleRow from "./TitleRow";
7
+ export default function Row({ item, direction, selectedRoute, selectedToken, searchQuery, toggleContent, onSelect, openValues, scrollContainerRef, index, }) {
8
8
  switch (item.type) {
9
9
  case "network":
10
10
  case "grouped_token":
11
- return (_jsx(CollapsibleRow, { item: item, direction: direction, selectedRoute: selectedRoute, selectedToken: selectedToken, searchQuery: searchQuery, toggleContent: toggleContent, onSelect: onSelect, openValues: openValues, scrollContainerRef: scrollContainerRef, allbalancesLoaded: allbalancesLoaded }));
11
+ return (_jsx(CollapsibleRow, { index: index, item: item, direction: direction, selectedRoute: selectedRoute, selectedToken: selectedToken, searchQuery: searchQuery, toggleContent: toggleContent, onSelect: onSelect, openValues: openValues, scrollContainerRef: scrollContainerRef }));
12
12
  case "network_token":
13
13
  case "suggested_token": {
14
14
  const token = item.route.token;
15
15
  const route = item.route.route;
16
16
  const isSelected = selectedRoute === route.name && selectedToken === token.symbol;
17
- return (_jsx("div", { className: clsx("cursor-pointer hover:bg-secondary-500 outline-none disabled:cursor-not-allowed rounded-xl"), onClick: () => onSelect(route, token), children: _jsx(CurrencySelectItemDisplay, { allbalancesLoaded: allbalancesLoaded, item: token, selected: isSelected, route: route, direction: direction, type: item.type }) }));
17
+ return (_jsx("div", { className: clsx("cursor-pointer hover:bg-secondary-500 outline-none disabled:cursor-not-allowed rounded-xl"), onClick: () => onSelect(route, token), children: _jsx(CurrencySelectItemDisplay, { item: token, selected: isSelected, route: route, direction: direction, type: item.type }) }));
18
18
  }
19
19
  case "group_title":
20
- return (_jsxs("div", { className: "text-primary-text-tertiary text-base font-normal leading-5 pl-1 sticky top-0 z-50 flex items-baseline", style: { position: "sticky", top: 0, transform: "none" }, children: [_jsx("p", { children: item.text }), item.text.toLowerCase().includes("all") &&
21
- _jsx("div", { className: "relative ml-auto", children: _jsx(RouteTokenSwitch, {}) })] }));
20
+ return _jsx(TitleRow, { item: item });
22
21
  case "sceleton_token":
23
22
  return (_jsxs(SelectItem, { className: "animate-pulse", children: [_jsx(SelectItem.Logo, { altText: `sceleton logo `, className: "rounded-full bg-secondary-500" }), _jsxs(SelectItem.Title, { className: "py-0.5", children: [_jsxs("div", { className: "grid gap-0 leading-5 align-middle space-y-0.5 font-medium", children: [_jsx("span", { className: "align-middle h-3.5 my-1 w-12 bg-secondary-500 rounded-sm" }), _jsxs("div", { className: "flex items-center space-x-1 align-middle", children: [_jsx("div", { className: "w-2 h-2 my-1 bg-secondary-500 rounded-sm" }), _jsx("span", { className: "bg-secondary-500 text-xs whitespace-nowrap h-2 my-1 w-20 rounded-sm" })] })] }), _jsxs("span", { className: "text-sm text-secondary-text text-right my-auto leading-4 font-medium", children: [_jsx("div", { className: "text-primary-text text-lg leading-[22px] bg-secondary-500 h-3 my-1 w-16 ml-auto rounded-sm" }), _jsx("div", { className: "text-xs leading-4 bg-secondary-500 h-2 my-1 w-10 ml-auto rounded-sm" })] })] })] }));
24
23
  default:
@@ -13,7 +13,7 @@ import clsx from "clsx";
13
13
  const RoutePicker = ({ direction, isExchange = false, className }) => {
14
14
  const { values, setFieldValue, } = useFormikContext();
15
15
  const [searchQuery, setSearchQuery] = useState("");
16
- const { allRoutes, isLoading, routeElements, selectedRoute, selectedToken, allbalancesLoaded } = useFormRoutes({ direction, values }, searchQuery);
16
+ const { allRoutes, isLoading, routeElements, selectedRoute, selectedToken } = useFormRoutes({ direction, values }, searchQuery);
17
17
  const currencyFieldName = direction === 'from' ? 'fromAsset' : 'toAsset';
18
18
  useEffect(() => {
19
19
  const updateValues = async () => {
@@ -50,7 +50,7 @@ const RoutePicker = ({ direction, isExchange = false, className }) => {
50
50
  });
51
51
  }, [currencyFieldName, direction, setFieldValue]);
52
52
  const showbalance = !isExchange && (direction === 'to' || values.depositMethod === 'wallet');
53
- return (_jsxs("div", { className: clsx("flex flex-col self-end relative items-center", className), children: [_jsxs(Selector, { children: [_jsx(SelectorTrigger, { disabled: false, className: "group-[.exchange-picker]:bg-secondary-500 py-[6px] px-2 group-[.exchange-picker]:!py-2 group-[.exchange-picker]:!px-3 active:animate-press-down group-[.exchange-picker]:active:animate-none", children: _jsx(SelectedRouteDisplay, { route: selectedRoute, token: selectedToken, placeholder: "Select token" }) }), _jsx(SelectorContent, { isLoading: isLoading, searchHint: "Search", header: _jsx(PickerWalletConnect, { direction: direction }), children: ({ closeModal }) => (_jsx(Content, { allbalancesLoaded: allbalancesLoaded, onSelect: (r, t) => { handleSelect(r, t); closeModal(); }, searchQuery: searchQuery, setSearchQuery: setSearchQuery, rowElements: routeElements, direction: direction, selectedRoute: selectedRoute?.name, selectedToken: selectedToken?.symbol })) })] }), showbalance &&
53
+ return (_jsxs("div", { className: clsx("flex flex-col self-end relative items-center", className), children: [_jsxs(Selector, { children: [_jsx(SelectorTrigger, { disabled: false, className: "group-[.exchange-picker]:bg-secondary-500 py-[6px] px-2 group-[.exchange-picker]:!py-2 group-[.exchange-picker]:!px-3 active:animate-press-down group-[.exchange-picker]:active:animate-none", children: _jsx(SelectedRouteDisplay, { route: selectedRoute, token: selectedToken, placeholder: "Select token" }) }), _jsx(SelectorContent, { isLoading: isLoading, searchHint: "Search", header: _jsx(PickerWalletConnect, { direction: direction }), children: ({ closeModal }) => (_jsx(Content, { onSelect: (r, t) => { handleSelect(r, t); closeModal(); }, searchQuery: searchQuery, setSearchQuery: setSearchQuery, rowElements: routeElements, direction: direction, selectedRoute: selectedRoute?.name, selectedToken: selectedToken?.symbol })) })] }), showbalance &&
54
54
  _jsx(Balance, { values: values, direction: direction })] }));
55
55
  };
56
56
  export default RoutePicker;
@@ -12,12 +12,12 @@ import WalletsList from "../../components/Wallet/WalletComponents/WalletsList";
12
12
  import { Popover, PopoverContent, PopoverTrigger } from "../../components/shadcn/popover";
13
13
  import FilledCheck from "../../components/Icons/FilledCheck";
14
14
  import clsx from "clsx";
15
- import { useSelectedAccount, useUpdateBalanceAccount } from "../../context/balanceAccounts";
15
+ import { useSelectedAccount, useSelectSwapAccount } from "../../context/swapAccounts";
16
16
  const SourceWalletPicker = () => {
17
17
  const [openModal, setOpenModal] = useState(false);
18
18
  const { values, setFieldValue } = useFormikContext();
19
19
  const source_token = values.fromAsset;
20
- const selectSourceAccount = useUpdateBalanceAccount("from");
20
+ const selectSourceAccount = useSelectSwapAccount("from");
21
21
  const { provider } = useWallet(values.from, "withdrawal");
22
22
  const selectedSourceAccount = useSelectedAccount("from", values.from?.name);
23
23
  const { selectedConnector } = useConnectModal();
@@ -61,7 +61,7 @@ export const FormSourceWalletButton = () => {
61
61
  const walletNetwork = values.fromExchange ? undefined : values.from;
62
62
  const { provider } = useWallet(walletNetwork, 'withdrawal');
63
63
  const { isWalletModalOpen, cancel, selectedConnector, connect } = useConnectModal();
64
- const selectSourceAccount = useUpdateBalanceAccount("from");
64
+ const selectSourceAccount = useSelectSwapAccount("from");
65
65
  const handleWalletChange = () => {
66
66
  setOpenModal(true);
67
67
  };
@@ -106,12 +106,14 @@ export const FormSourceWalletButton = () => {
106
106
  };
107
107
  const Connect = ({ connectFn, setMountWalletPortal }) => {
108
108
  const { connect } = useConnectModal();
109
+ const { providers } = useWallet();
110
+ const isProvidersReady = providers.every(p => typeof p.ready === 'boolean' ? p.ready : true);
109
111
  const connectWallet = async () => {
110
112
  setMountWalletPortal && setMountWalletPortal(true);
111
113
  await connect();
112
114
  setMountWalletPortal && setMountWalletPortal(false);
113
115
  };
114
- return _jsx(SubmitButton, { onClick: () => connectFn ? connectFn() : connectWallet(), type: "button", icon: _jsx(WalletIcon, { className: "h-6 w-6", strokeWidth: 2 }), children: "Connect a wallet" });
116
+ return _jsx(SubmitButton, { onClick: () => connectFn ? connectFn() : connectWallet(), type: "button", icon: _jsx(WalletIcon, { className: "h-6 w-6", strokeWidth: 2 }), isDisabled: !isProvidersReady, children: "Connect a wallet" });
115
117
  };
116
118
  const ContinueWithoutWallet = ({ onClick }) => {
117
119
  //TODO: bg-secondary-700 is a hotfix, should refactor and fix sticky footer for VaulDrawer
@@ -26,7 +26,7 @@ const Comp = () => {
26
26
  const handleGoToStep = (step) => {
27
27
  goToStep(step);
28
28
  };
29
- return _jsx(_Fragment, { children: _jsxs("div", { className: "text-secondary-text cursor-pointer relative", children: [_jsx("div", { className: "sm:-mr-2 -mr-0", children: _jsx(IconButton, { className: "inline-flex active:animate-press-down", onClick: () => setOpenTopModal(true), icon: _jsx(MenuIcon, { strokeWidth: "2" }) }) }), _jsx(VaulDrawer, { modalId: "menuModal", show: openTopModal, setShow: handleModalOpenStateChange, header: _jsxs("div", { className: "inline-flex items-center", children: [goBack &&
29
+ return _jsx(_Fragment, { children: _jsxs("div", { className: "text-secondary-text cursor-pointer relative", children: [_jsx("div", { className: "sm:-mr-2 mr-0", children: _jsx(IconButton, { className: "inline-flex active:animate-press-down", onClick: () => setOpenTopModal(true), icon: _jsx(MenuIcon, { strokeWidth: "2" }) }) }), _jsx(VaulDrawer, { modalId: "menuModal", show: openTopModal, setShow: handleModalOpenStateChange, header: _jsxs("div", { className: "inline-flex items-center", children: [goBack &&
30
30
  _jsx(IconButton, { className: "inline-flex", onClick: goBack, icon: _jsx(ChevronLeft, { strokeWidth: "2" }) }), _jsx("h2", { children: currentStepName })] }), children: _jsx(VaulDrawer.Snap, { openFullHeight: true, className: "h-full pb-0!", id: "item-1", children: _jsxs(Wizard, { wizardId: 'menuWizard', children: [_jsx(WizardItem, { StepName: MenuStep.Menu, inModal: true, children: _jsx(MenuList, { goToStep: handleGoToStep }) }), _jsx(WizardItem, { StepName: MenuStep.Transactions, GoBack: goBackToMenuStep, className: "h-full", inModal: true, children: _jsx(HistoryList, { onNewTransferClick: () => handleModalOpenStateChange(false) }) }), _jsx(WizardItem, { StepName: MenuStep.Campaigns, GoBack: goBackToMenuStep, className: "h-full", inModal: true, children: _jsx(CampaignsComponent, { onCampaignSelect: (campaign) => { handleGoToStep(MenuStep.CampaignDetails); setSelectedCampaign(campaign.name); } }) }), _jsx(WizardItem, { StepName: MenuStep.CampaignDetails, GoBack: () => goToStep(MenuStep.Campaigns, "back"), className: "h-full", inModal: true, children: _jsx(CampaignDetailsComponent, { campaignName: selectedCampaign }) })] }) }) })] }) });
31
31
  };
32
32
  const LayerswapMenu = () => {
@@ -9,13 +9,13 @@ import shortenAddress from "../../../../components/utils/ShortenAddress";
9
9
  import { truncateDecimals } from "../../../../components/utils/RoundDecimals";
10
10
  import AddressIcon from "../../../../components/Common/AddressIcon";
11
11
  import { ImageWithFallback } from "../../../../components/Common/ImageWithFallback";
12
- import { useSelectedAccount } from "../../../../context/balanceAccounts";
12
+ import { useSelectedAccount } from "../../../../context/swapAccounts";
13
13
  import { useWallet } from "../../../../exports";
14
14
  import VaulDrawer from "../../../../components/Modal/vaulModal";
15
15
  const Component = ({ campaign }) => {
16
16
  const [openTopModal, setOpenTopModal] = useState(false);
17
17
  const selectedSourceAccount = useSelectedAccount("from", campaign.network?.name);
18
- const { wallets } = useWallet(campaign.network, 'autofil');
18
+ const { wallets } = useWallet(campaign.network, 'autofill');
19
19
  const wallet = wallets.find(w => w.id === selectedSourceAccount?.id);
20
20
  const address = wallet?.address;
21
21
  const handleOpenTopModal = () => {
@@ -12,7 +12,7 @@ import useWallet from "../../../../hooks/useWallet";
12
12
  import { ImageWithFallback } from "../../../../components/Common/ImageWithFallback";
13
13
  const Rewards = ({ campaign }) => {
14
14
  const network = campaign?.network;
15
- const { provider } = useWallet(network, 'autofil');
15
+ const { provider } = useWallet(network, 'autofill');
16
16
  const wallet = provider?.activeWallet;
17
17
  const address = wallet?.address;
18
18
  const apiClient = new LayerSwapApiClient();
@@ -42,7 +42,7 @@ const Rewards = ({ campaign }) => {
42
42
  const ProgressComponent = ({ campaign, rewardsData }) => {
43
43
  if (campaign.max_payout_amount) {
44
44
  const weeklyEarned = rewardsData?.user_reward.period_pending_amount || 0;
45
- return _jsx("div", { className: "bg-secondary-700 rounded-lg shadow-lg border border-secondary-700 hover:border-secondary-500 transition duration-200", children: _jsx(BackgroundField, { header: _jsx("p", { children: "Weekly reward earned" }), withoutBorder: true, children: _jsxs("div", { className: "flex flex-col w-full gap-2", children: [_jsx(Progress, { value: weeklyEarned === Infinity ? 0 : weeklyEarned }), _jsxs("div", { className: "flex justify-between w-full font-semibold text-sm ", children: [_jsxs("div", { className: "text-primary", children: [_jsx("span", { className: "text-primary-text", children: weeklyEarned.toFixed(0) }), " ", _jsx("span", { children: "/" }), " ", campaign.max_payout_amount, " ", campaign.token.symbol] }), _jsx("div", { children: "Refreshes every 7 days" })] })] }) }) });
45
+ return _jsx("div", { className: "bg-secondary-700 rounded-lg shadow-lg border border-secondary-700 hover:border-secondary-500 transition duration-200", children: _jsx(BackgroundField, { header: _jsx("p", { children: "Weekly reward earned" }), withoutBorder: true, children: _jsxs("div", { className: "flex flex-col w-full gap-2", children: [_jsx(Progress, { value: weeklyEarned === Infinity ? 0 : weeklyEarned }), _jsxs("div", { className: "flex justify-between w-full font-semibold text-sm ", children: [_jsxs("div", { className: "text-primary", children: [_jsx("span", { className: "text-primary-text", children: weeklyEarned.toFixed(0) }), " ", _jsx("span", { children: "/" }), " ", campaign.max_payout_amount, " ", campaign.token.symbol] }), _jsxs("div", { children: [_jsx("span", { children: "Refreshes every " }), " ", _jsx("span", { className: "font-semibold", children: campaign.reward_limit_period }), " ", _jsx("span", { children: " days" })] })] })] }) }) });
46
46
  }
47
47
  const DistributedAmount = ((campaign.distributed_amount / campaign.total_budget) * 100);
48
48
  const totalBudget = campaign.total_budget;
@@ -14,13 +14,12 @@ import SpinIcon from "../../../../components/Icons/spinIcon";
14
14
  import useWallet from "../../../../hooks/useWallet";
15
15
  import { useConnectModal } from "../../../../components/Wallet/WalletModal";
16
16
  import { ImageWithFallback } from "../../../../components/Common/ImageWithFallback";
17
- import { LayerswapProvider } from "../../../../context/LayerswapProvider";
18
17
  export const CampaignDetailsComponent = ({ campaignName }) => {
19
18
  const apiClient = new LayerSwapApiClient();
20
19
  const { data: campaignsData, isLoading } = useSWR('/campaigns', apiClient.fetcher);
21
20
  const campaign = campaignsData?.data?.find(c => c.name === campaignName);
22
21
  const network = campaign?.network;
23
- const { provider } = useWallet(network, 'autofil');
22
+ const { provider } = useWallet(network, 'autofill');
24
23
  const { connect } = useConnectModal();
25
24
  const handleConnect = useCallback(async () => {
26
25
  await connect(provider);
@@ -46,5 +45,5 @@ const BriefInformation = ({ campaign }) => _jsx("p", { className: "text-secondar
46
45
  const Loading = () => _jsx(Widget, { children: _jsx(Widget.Content, { children: _jsx("div", { className: "absolute top-[calc(50%-5px)] left-[calc(50%-5px)]", children: _jsx(SpinIcon, { className: "animate-spin h-5 w-5" }) }) }) });
47
46
  const NotFound = () => _jsx(Widget, { children: _jsx(Widget.Content, { children: _jsxs("div", { className: "h-[364px] flex flex-col items-center justify-center space-y-4", children: [_jsx(Gift, { className: "h-20 w-20 text-primary" }), _jsx("p", { className: "font-bold text-center", children: "Campaign not found" }), _jsx(LinkWrapper, { className: "text-xs underline hover:no-underline", href: '/campaigns', children: "See all campaigns" })] }) }) });
48
47
  export const CampaignDetails = (props) => {
49
- return (_jsx(LayerswapProvider, { ...props, children: _jsx(Widget, { goBack: props.goBack, children: _jsx(CampaignDetailsComponent, { campaignName: props.campaignName }) }) }));
48
+ return (_jsx(Widget, { goBack: props.goBack, children: _jsx(CampaignDetailsComponent, { campaignName: props.campaignName }) }));
50
49
  };
@@ -6,7 +6,6 @@ import SpinIcon from "../../../components/Icons/spinIcon";
6
6
  import useSWR from 'swr';
7
7
  import { Widget } from "../../../components/Widget/Index";
8
8
  import { ImageWithFallback } from "../../../components/Common/ImageWithFallback";
9
- import { LayerswapProvider } from "../../../context/LayerswapProvider";
10
9
  export const CampaignsComponent = ({ onCampaignSelect }) => {
11
10
  const apiClient = new LayerSwapApiClient();
12
11
  const { data: campaignsData, isLoading } = useSWR('/campaigns', apiClient.fetcher);
@@ -19,13 +18,13 @@ export const CampaignsComponent = ({ onCampaignSelect }) => {
19
18
  const activeCampaigns = sortedCampaigns?.filter(IsCampaignActive) || [];
20
19
  const inactiveCampaigns = sortedCampaigns?.filter(c => !IsCampaignActive(c)) || [];
21
20
  return (_jsx(_Fragment, { children: _jsx(Widget.Content, { children: !isLoading ?
22
- _jsxs("div", { className: "space-y-5 h-full text-primary-text sm:min-h-[350px]", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "font-bold text-left leading-5", children: "Campaigns" }), _jsx("div", { className: "bg-secondary-500 divide-y divide-secondary-500 rounded-lg shadow-lg border border-secondary-500 hover:border-secondary-400 transition duration-200", children: _jsx("div", { className: "p-3 space-y-4", children: activeCampaigns.length > 0 ?
21
+ _jsxs("div", { className: "space-y-5 h-full w-full text-primary-text sm:min-h-[350px]", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "font-bold text-left leading-5", children: "Campaigns" }), _jsx("div", { className: "bg-secondary-500 divide-y divide-secondary-500 rounded-lg shadow-lg border border-secondary-500 hover:border-secondary-400 transition duration-200", children: _jsx("div", { className: "p-3 space-y-4", children: activeCampaigns.length > 0 ?
23
22
  activeCampaigns.map(c => _jsx(CampaignItem, { onCampaignSelect: onCampaignSelect, campaign: c }, c.id))
24
23
  :
25
24
  _jsxs("div", { className: "flex flex-col items-center justify-center space-y-2 w-full", children: [_jsx(Gift, { className: "h-10 w-10 text-primary" }), _jsx("p", { className: "font-bold text-center", children: "There are no active campaigns right now" })] }) }) })] }), inactiveCampaigns.length > 0 &&
26
25
  _jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "font-bold text-left leading-5", children: "Old campaigns" }), _jsx("div", { className: "bg-secondary-500 divide-y divide-secondary-500 rounded-lg shadow-lg border border-secondary-500 hover:border-secondary-400 transition duration-200", children: _jsx("div", { className: "p-3 dpsv flex flex-col space-y-4", children: inactiveCampaigns?.map(c => _jsx(CampaignItem, { onCampaignSelect: onCampaignSelect, campaign: c }, c.id)) }) })] })] })
27
26
  :
28
- _jsx("div", { className: "absolute top-[calc(50%-5px)] left-[calc(50%-5px)]", children: _jsx(SpinIcon, { className: "animate-spin h-5 w-5" }) }) }) }));
27
+ _jsx("div", { className: "h-full w-full relative min-h-[350px]", children: _jsx("div", { className: "absolute top-[calc(50%-5px)] left-[calc(50%-5px)]", children: _jsx(SpinIcon, { className: "animate-spin h-5 w-5" }) }) }) }) }));
29
28
  };
30
29
  const CampaignItem = ({ campaign, onCampaignSelect }) => {
31
30
  const campaignDaysLeft = ((new Date(campaign.end_date).getTime() - new Date().getTime()) / 86400000).toFixed();
@@ -38,5 +37,5 @@ function IsCampaignActive(campaign) {
38
37
  return (new Date(campaign?.end_date).getTime() > now.getTime());
39
38
  }
40
39
  export const Campaigns = (props) => {
41
- return (_jsx(LayerswapProvider, { ...props, children: _jsx(Widget, { goBack: props.goBack, hideMenu: props.hideMenu, children: _jsx(CampaignsComponent, { onCampaignSelect: props.onCampaignSelect }) }) }));
40
+ return (_jsx(Widget, { goBack: props.goBack, hideMenu: props.hideMenu, children: _jsx(CampaignsComponent, { onCampaignSelect: props.onCampaignSelect }) }));
42
41
  };
@@ -18,18 +18,19 @@ import useWallet from "../../../../hooks/useWallet";
18
18
  import clsx from "clsx";
19
19
  import { useSwapDataState } from "../../../../context/swap";
20
20
  import { useClickOutside } from "../../../../hooks/useClickOutside";
21
- import { useFormChangeCallback } from "../../../../context/callbackProvider";
21
+ import { useCallbacks } from "../../../../context/callbackProvider";
22
22
  import QuoteDetails from "./FeeDetails";
23
23
  import DepositMethodComponent from "./FeeDetails/DepositMethod";
24
24
  import { AddressGroup } from "../../../../components/Input/Address/AddressPicker";
25
25
  import { ImageWithFallback } from "../../../../components/Common/ImageWithFallback";
26
- const ExchangeForm = ({ partner }) => {
26
+ import { ExchangeReceiveAmount } from "../../../../components/Input/Amount/ExchangeReceiveAmount";
27
+ const ExchangeForm = ({ partner, showBanner, dismissBanner }) => {
27
28
  const { values, isSubmitting } = useFormikContext();
28
- const triggerFormChangeCallback = useFormChangeCallback();
29
+ const { onFormChange } = useCallbacks();
29
30
  useEffect(() => {
30
- triggerFormChangeCallback(values);
31
- }, [values, triggerFormChangeCallback]);
32
- const { fromAsset: fromCurrency, from, to: destination, destination_address, amount } = values || {};
31
+ onFormChange?.(values);
32
+ }, [values, onFormChange]);
33
+ const { fromAsset: fromCurrency, from, to: destination, destination_address, amount, toAsset: toCurrency } = values || {};
33
34
  const quoteArgs = useMemo(() => transformFormValuesToQuoteArgs(values, true), [values]);
34
35
  const [actionTempValue, setActionTempValue] = useState(undefined);
35
36
  const { wallets } = useWallet();
@@ -44,19 +45,20 @@ const ExchangeForm = ({ partner }) => {
44
45
  const handleActionHover = (value) => {
45
46
  setActionTempValue(value);
46
47
  };
47
- 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: "flex flex-col w-full space-y-3 relative", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "From", className: "block font-normal text-secondary-text text-base leading-5", children: "Send from" }), _jsx("div", { className: "relative", children: _jsx(CexPicker, {}) })] }), _jsxs("div", { className: "space-y-2 leading-4", children: [_jsx("label", { htmlFor: "From", className: "block font-normal text-secondary-text text-base leading-5", children: "Send to" }), _jsx("div", { className: "relative group exchange-picker", children: _jsx(RoutePicker, { direction: "to", isExchange: true }) }), _jsx("div", { className: "hover:bg-secondary-300 bg-secondary-500 rounded-2xl p-3 h-[52px]", children: _jsx(Address, { partner: partner, children: ({ addressItem }) => {
48
- const addressProviderIcon = (partner?.is_wallet && addressItem?.group === AddressGroup.FromQuery && partner?.logo) ? partner.logo : undefined;
49
- return _jsx(_Fragment, { children: addressItem ? _jsx(_Fragment, { children: _jsx(AddressButton, { address: addressItem.address, network: destination, wallet: wallet, addressProviderIcon: addressProviderIcon }) })
50
- : destination_address ? _jsx(_Fragment, { children: _jsx(AddressButton, { address: destination_address }) })
51
- :
52
- _jsxs("span", { className: "flex items-center", children: [_jsx(SelectedEchangePlaceholder, { placeholder: 'Enter destination address' }), _jsx("span", { className: "absolute right-0 px-1 pr-5 pointer-events-none text-primary-text", children: _jsx(ChevronDown, { className: "h-4 w-4 text-secondary-text", "aria-hidden": "true" }) })] }) });
53
- } }) })] }), _jsxs("div", { className: "bg-secondary-500 rounded-2xl p-3 group space-y-2", onClick: setShowQuickActions, ref: parentRef, children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("label", { htmlFor: "From", className: "block font-normal text-secondary-text text-base ml-2 leading-5", children: "Enter amount" }), from && fromCurrency && minAllowedAmount && maxAmountFromApi &&
54
- _jsx("div", { className: clsx({
55
- "hidden": !showQuickActions,
56
- "block": showQuickActions,
57
- }, "group-hover:block"), children: _jsx(MinMax, { from: from, fromCurrency: fromCurrency, limitsMinAmount: minAllowedAmount, limitsMaxAmount: maxAmountFromApi, onActionHover: handleActionHover, depositMethod: "deposit_address" }) })] }), _jsx("div", { className: "relative group exchange-amount-field", children: _jsx(AmountField, { className: "pb-0! rounded-xl!", fee: quote, usdPosition: "right", actionValue: actionTempValue }) })] }), routeValidation.message
58
- ? _jsx(ValidationError, {})
59
- : null, _jsx(QuoteDetails, { swapValues: values, quote: quote, isQuoteLoading: isQuoteLoading })] }) }), _jsx(Widget.Footer, { showPoweredBy: true, children: _jsx(FormButton, { shouldConnectWallet: false, values: values, disabled: !isValid || isSubmitting || !quote || isQuoteLoading, error: error, isSubmitting: isSubmitting, partner: partner }) })] })] }));
48
+ 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 relative", children: [_jsxs("div", { className: "flex flex-col w-full gap-3", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "From", className: "block font-normal text-secondary-text text-base leading-5", children: "Send from" }), _jsx("div", { className: "relative", children: _jsx(CexPicker, {}) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "From", className: "block font-normal text-secondary-text text-base leading-5", children: "Send to" }), _jsx("div", { className: "relative group exchange-picker", children: _jsx(RoutePicker, { direction: "to", isExchange: true }) }), _jsx("div", { className: "hover:bg-secondary-300 bg-secondary-500 rounded-2xl p-3 h-[52px]", children: _jsx(Address, { partner: partner, children: ({ addressItem }) => {
49
+ const addressProviderIcon = (partner?.is_wallet && addressItem?.group === AddressGroup.FromQuery && partner?.logo) ? partner.logo : undefined;
50
+ return _jsx(_Fragment, { children: addressItem ? _jsx(_Fragment, { children: _jsx(AddressButton, { address: addressItem.address, network: destination, wallet: wallet, addressProviderIcon: addressProviderIcon }) })
51
+ : destination_address ? _jsx(_Fragment, { children: _jsx(AddressButton, { address: destination_address }) })
52
+ :
53
+ _jsxs("span", { className: "flex items-center", children: [_jsx(SelectedEchangePlaceholder, { placeholder: 'Enter destination address' }), _jsx("span", { className: "absolute right-0 px-1 pr-5 pointer-events-none text-primary-text", children: _jsx(ChevronDown, { className: "h-4 w-4 text-secondary-text", "aria-hidden": "true" }) })] }) });
54
+ } }) })] }), _jsxs("div", { className: "bg-secondary-500 rounded-2xl p-3 group space-y-2", onClick: setShowQuickActions, ref: parentRef, children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("label", { htmlFor: "From", className: "block font-normal text-secondary-text text-base ml-2 leading-5", children: "Enter amount" }), from && fromCurrency && minAllowedAmount && maxAmountFromApi &&
55
+ _jsx("div", { className: clsx({
56
+ "hidden": !showQuickActions,
57
+ "block": showQuickActions,
58
+ }, "group-hover:block"), children: _jsx(MinMax, { from: from, fromCurrency: fromCurrency, limitsMinAmount: minAllowedAmount, limitsMaxAmount: maxAmountFromApi, onActionHover: handleActionHover, depositMethod: "deposit_address" }) })] }), _jsxs("div", { className: "relative group exchange-amount-field", children: [_jsx(AmountField, { className: "pb-0! rounded-xl!", fee: quote, usdPosition: "right", actionValue: actionTempValue }), quote &&
59
+ _jsxs("div", { className: "mt-3 ml-2", children: [_jsx("span", { className: "text-base leading-5 text-secondary-text", children: "You will receive" }), _jsx(ExchangeReceiveAmount, { destination_token: toCurrency, fee: quote, isFeeLoading: isQuoteLoading })] })] })] })] }), _jsxs("div", { children: [routeValidation.message
60
+ ? _jsx(ValidationError, {})
61
+ : null, _jsx(QuoteDetails, { swapValues: values, quote: quote?.quote, isQuoteLoading: isQuoteLoading, reward: quote?.reward, variant: "base" })] })] }) }), _jsx(Widget.Footer, { showPoweredBy: true, children: _jsx(FormButton, { shouldConnectWallet: false, values: values, disabled: !isValid || isSubmitting || !quote || isQuoteLoading, error: error, isSubmitting: isSubmitting, partner: partner }) })] })] }));
60
62
  };
61
63
  export default ExchangeForm;
62
64
  const AddressButton = ({ address, network, wallet, addressProviderIcon }) => {
@@ -2,13 +2,14 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useState } from "react";
3
3
  import { ArrowRight } from "lucide-react";
4
4
  import { truncateDecimals } from "../../../../../components/utils/RoundDecimals";
5
- export const RateElement = ({ fromAsset, toAsset, requestAmount, receiveAmount, }) => {
5
+ export const RateElement = ({ fromAsset, toAsset, requestAmount, receiveAmount, totalFeeInUsd }) => {
6
6
  const [flipped, setFlipped] = useState(false);
7
- if (!requestAmount || !receiveAmount) {
7
+ if (toAsset.price_in_usd === 0) {
8
8
  return null;
9
9
  }
10
- const fromRate = receiveAmount / requestAmount;
11
- const toRate = requestAmount / receiveAmount;
10
+ const totalFee = totalFeeInUsd ? totalFeeInUsd / toAsset.price_in_usd : 0;
11
+ const fromRate = (receiveAmount + totalFee) / requestAmount;
12
+ const toRate = requestAmount / (receiveAmount + totalFee);
12
13
  const fromRateTruncated = truncateDecimals(fromRate, fromAsset?.precision || 6);
13
14
  const toRateTruncated = truncateDecimals(toRate, toAsset?.precision || 6);
14
15
  return (_jsx("div", { className: "flex text-sm ml-1 font-small items-center cursor-pointer", onClick: () => setFlipped(!flipped), children: !flipped ? (_jsxs(_Fragment, { children: [_jsxs("p", { children: [_jsx("span", { children: "1" }), " ", _jsx("span", { children: fromAsset?.symbol })] }), _jsx(ArrowRight, { className: "w-3 h-3 mx-1" }), _jsxs("span", { children: [fromRateTruncated, " ", toAsset?.symbol] })] })) : (_jsxs(_Fragment, { children: [_jsxs("p", { children: [_jsx("span", { children: "1" }), " ", _jsx("span", { children: toAsset?.symbol })] }), _jsx(ArrowRight, { className: "w-3 h-3 mx-1" }), _jsxs("span", { children: [toRateTruncated, " ", fromAsset?.symbol] })] })) }));
@@ -25,9 +25,9 @@ const RefuelToggle = ({ onButtonClick, quote, minAllowedAmount }) => {
25
25
  const handleConfirmToggleChange = (value) => {
26
26
  setFieldValue('refuel', value);
27
27
  };
28
- const showRefuel = needRefuel && (quote && (Number(amount) === Number(minAllowedAmount) || refuel) || (refuel && formValidation.code === FORM_VALIDATION_ERROR_CODES.MIN_AMOUNT_ERROR));
28
+ const showRefuel = needRefuel && formValidation.code !== FORM_VALIDATION_ERROR_CODES.ROUTE_NOT_FOUND;
29
29
  return (showRefuel &&
30
- _jsx("div", { className: clsx("gap-4 flex relative items-center outline-hidden w-full text-primary-text px-4 py-3 bg-secondary-500 border border-transparent transition-colors duration-200 rounded-2xl mt-auto", {
30
+ _jsx("div", { className: clsx("gap-4 flex relative items-center outline-hidden w-full text-primary-text px-4 py-3 bg-secondary-500 border border-transparent transition-colors duration-200 rounded-2xl mt-3", {
31
31
  "border-primary!": needRefuel && !refuel
32
32
  }), children: _jsxs("div", { className: "flex justify-between w-full text-secondary-text ", children: [_jsxs("button", { className: "space-y-1 mt-1 mb-0.5", type: "button", onClick: () => onButtonClick(), children: [_jsxs("div", { className: "flex items-center text-base space-x-1", children: [_jsx("p", { className: "leading-4", children: "Refuel" }), _jsx("div", { className: "p-0.5", children: _jsx(Info, { className: "h-3 w-3 text-secondary-text hover:text-primary-text", "aria-hidden": "true", strokeWidth: 2.5 }) })] }), needRefuel && !refuel &&
33
33
  _jsxs("p", { className: "text-xs", children: [_jsx("span", { children: "You need gas on" }), " ", _jsx("span", { children: to.display_name })] }), refuel && quote &&
@@ -6,17 +6,19 @@ import useSWRGas from "../../../../../../lib/gases/useSWRGas";
6
6
  import useWallet from "../../../../../../hooks/useWallet";
7
7
  import useSWRNftBalance from "../../../../../../lib/nft/useSWRNftBalance";
8
8
  import { resolveTokenUsdPrice } from "../../../../../../helpers/tokenHelper";
9
- import { useSelectedAccount } from "../../../../../../context/balanceAccounts";
9
+ import { useSelectedAccount } from "../../../../../../context/swapAccounts";
10
10
  import { RateElement } from "../Rate";
11
11
  import { Slippage } from "../Slippage";
12
12
  import { truncateDecimals } from "../../../../../../components/utils/RoundDecimals";
13
- export const DetailedEstimates = ({ quote: quoteData, swapValues: values, variant }) => {
14
- const quote = quoteData?.quote;
15
- const reward = quoteData?.reward;
13
+ import { isValidAddress } from "../../../../../../lib/address/validator";
14
+ import { addressFormat } from "../../../../../../lib/address/formatter";
15
+ import { ExtendedAddress } from "../../../../../../components/Input/Address/AddressPicker/AddressWithIcon";
16
+ import shortenAddress from "../../../../../../components/utils/ShortenAddress";
17
+ export const DetailedEstimates = ({ quote, reward, swapValues: values, variant }) => {
16
18
  const shouldCheckNFT = reward?.campaign_type === "for_nft_holders" && reward?.nft_contract_address;
17
19
  const { balance: nftBalance, isLoading, error } = useSWRNftBalance(values.destination_address || '', values.to, reward?.nft_contract_address || '');
18
20
  const showReward = !(!reward || !values.destination_address || shouldCheckNFT && (isLoading || error || nftBalance === undefined || nftBalance <= 0));
19
- return _jsxs("div", { className: "flex flex-col w-full px-2", children: [variant === "extended" && _jsx(GasFee, { values: values, quote: quote }), _jsx(Fees, { quote: quote, values: values }), _jsx(Rate, { fromAsset: values?.fromAsset, toAsset: values?.toAsset, requestAmount: quote?.requested_amount, receiveAmount: quote?.receive_amount }), variant === "extended" && values.depositMethod === "wallet" && _jsx(Slippage, { quoteData: quote, values: values }), _jsx(Estimates, { quote: quote }), showReward && _jsx(Reward, { reward: reward })] });
21
+ return _jsxs("div", { className: "flex flex-col w-full px-2", children: [variant === "extended" && _jsx(GasFee, { values: values, quote: quote }), _jsx(Fees, { quote: quote, values: values }), values.depositMethod !== "deposit_address" && _jsx(Rate, { fromAsset: values?.fromAsset, toAsset: values?.toAsset, requestAmount: quote?.requested_amount, receiveAmount: quote?.receive_amount, totalFeeInUsd: quote?.total_fee_in_usd }), values.depositMethod === "deposit_address" && variant === "extended" && values?.fromAsset?.contract && _jsx(ExchangeTokenContract, { fromAsset: values?.fromAsset, network: values?.from }), variant === "extended" && values.depositMethod === "wallet" && _jsx(Slippage, { quoteData: quote, values: values }), _jsx(Estimates, { quote: quote }), showReward && _jsx(Reward, { reward: reward })] });
20
22
  };
21
23
  const RowWrapper = ({ children, title }) => {
22
24
  return _jsxs("div", { className: "flex items-center w-full justify-between gap-1 py-3 px-2 text-sm", children: [_jsx("div", { className: "inline-flex items-center text-left text-secondary-text gap-1 pr-4", children: _jsx("label", { children: title }) }), _jsx("div", { className: "text-right text-primary-text", children: children })] });
@@ -34,22 +36,57 @@ export const GasFee = ({ values, quote }) => {
34
36
  const gasCurrencyName = gasData?.token?.symbol;
35
37
  if (!gasFeeInUsd || !gasFeeInUsd)
36
38
  return null;
37
- return _jsx(RowWrapper, { title: "Gas Fee", children: isGasLoading ? (_jsx(LoadingBar, {})) : _jsx("div", { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: gas !== undefined && (_jsx("span", { className: "text-sm ml-1 font-small", children: displayGasFeeInUsd })) }), _jsxs(TooltipContent, { className: "!bg-secondary-300 !border-secondary-300 !text-primary-text", children: [_jsxs("span", { children: [gas || '-', " "] }), _jsx("span", { children: gas ? gasCurrencyName : '' })] })] }) }) });
39
+ return _jsx(RowWrapper, { title: "Gas Fee", children: isGasLoading ? (_jsx(LoadingBar, {})) : _jsx("div", { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: gas !== undefined && (_jsx("span", { className: "text-sm ml-1 font-small", children: displayGasFeeInUsd })) }), _jsxs(TooltipContent, { className: "bg-secondary-300! border-secondary-300! text-primary-text!", children: [_jsxs("span", { children: [gas || '-', " "] }), _jsx("span", { children: gas ? gasCurrencyName : '' })] })] }) }) });
38
40
  };
39
41
  const Fees = ({ quote, values }) => {
40
42
  const lsFeeAmountInUsd = quote?.total_fee_in_usd;
41
- const displayLsFeeInUsd = lsFeeAmountInUsd != null ? (lsFeeAmountInUsd < 0.01 ? '<$0.01' : `$${lsFeeAmountInUsd.toFixed(2)}`) : null;
43
+ const feeDiscount = quote?.fee_discount;
44
+ const hasDiscount = feeDiscount != null && feeDiscount > 0;
45
+ // total_fee is the original fee, discounted fee is total_fee - fee_discount
46
+ const originalFee = quote?.total_fee;
47
+ const discountedFee = hasDiscount && originalFee !== undefined
48
+ ? originalFee - feeDiscount
49
+ : originalFee;
50
+ // Calculate fees in USD
51
+ const sourceTokenPriceInUsd = resolveTokenUsdPrice(values.fromAsset, quote);
52
+ const originalFeeInUsd = originalFee !== undefined && sourceTokenPriceInUsd != null
53
+ ? originalFee * sourceTokenPriceInUsd
54
+ : null;
55
+ // Calculate discounted fee in USD
56
+ const discountedFeeInUsd = discountedFee !== undefined && sourceTokenPriceInUsd != null
57
+ ? discountedFee * sourceTokenPriceInUsd
58
+ : null;
59
+ const displayOriginalFeeInUsd = originalFeeInUsd != null
60
+ ? (originalFeeInUsd < 0.01 ? '<$0.01' : `$${originalFeeInUsd.toFixed(2)}`)
61
+ : null;
62
+ const isFree = discountedFee !== undefined && discountedFee === 0;
63
+ const displayLsFeeInUsd = isFree
64
+ ? "Free"
65
+ : (discountedFeeInUsd != null
66
+ ? (discountedFeeInUsd < 0.01 ? '<$0.01' : `$${discountedFeeInUsd.toFixed(2)}`)
67
+ : null);
42
68
  const currencyName = values.fromAsset?.symbol || '';
43
- const displayLsFee = quote?.total_fee !== undefined ? truncateDecimals(quote.total_fee, values.fromAsset?.decimals) : undefined;
44
- return _jsx(RowWrapper, { title: "Fees", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: displayLsFeeInUsd !== undefined && (_jsx("span", { className: "text-sm ml-1 font-small", children: displayLsFeeInUsd })) }), _jsxs(TooltipContent, { className: "!bg-secondary-300 !border-ssecondary-300 !text-primart-text", children: [_jsxs("span", { children: [displayLsFee || '-', " "] }), _jsx("span", { children: displayLsFee ? currencyName : '' })] })] }) });
69
+ const displayLsFee = discountedFee !== undefined
70
+ ? truncateDecimals(discountedFee, values.fromAsset?.decimals)
71
+ : undefined;
72
+ return _jsx(RowWrapper, { title: "Fees", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: displayLsFeeInUsd !== undefined && (_jsxs("div", { className: "flex items-center gap-2 text-sm ml-1 font-small", children: [hasDiscount && displayOriginalFeeInUsd && (_jsx("span", { className: "line-through text-primary-text-tertiary", children: displayOriginalFeeInUsd })), _jsx("span", { className: hasDiscount || isFree ? "text-primary-text" : "", children: displayLsFeeInUsd })] })) }), _jsxs(TooltipContent, { className: "bg-secondary-300! border-ssecondary-300! text-primart-text!", children: [_jsxs("span", { children: [displayLsFee || '-', " "] }), _jsx("span", { children: displayLsFee ? currencyName : '' })] })] }) });
45
73
  };
46
74
  const Estimates = ({ quote }) => {
47
- return _jsx(RowWrapper, { title: "Estimates", children: _jsx(AverageCompletionTime, { avgCompletionTime: quote?.avg_completion_time }) });
75
+ return _jsx(RowWrapper, { title: "Est. time", children: _jsx(AverageCompletionTime, { avgCompletionTime: quote?.avg_completion_time }) });
48
76
  };
49
77
  const Reward = ({ reward }) => {
50
- return _jsx(RowWrapper, { title: "Reward", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: reward?.amount_in_usd !== undefined && (_jsxs("span", { className: "text-sm ml-1 font-small", children: ["$", reward.amount_in_usd.toFixed(2)] })) }), _jsxs(TooltipContent, { className: "!bg-secondary-300 !border-secondary-300 !text-primart-text", children: [_jsxs("span", { children: [reward?.amount || '-', " "] }), _jsx("span", { children: reward?.amount ? reward.token.symbol : '' })] })] }) });
78
+ return _jsx(RowWrapper, { title: "Reward", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: reward?.amount_in_usd !== undefined && (_jsxs("span", { className: "text-sm ml-1 font-small", children: ["$", reward.amount_in_usd.toFixed(2)] })) }), _jsxs(TooltipContent, { className: "bg-secondary-300! border-secondary-300! text-primart-text!", children: [_jsxs("span", { children: [reward?.amount || '-', " "] }), _jsx("span", { children: reward?.amount ? reward.token.symbol : '' })] })] }) });
51
79
  };
52
- const Rate = ({ fromAsset, toAsset, requestAmount, receiveAmount }) => {
53
- return _jsx(RowWrapper, { title: "Rate", children: _jsx(RateElement, { fromAsset: fromAsset, toAsset: toAsset, requestAmount: requestAmount, receiveAmount: receiveAmount }) });
80
+ const Rate = ({ fromAsset, toAsset, requestAmount, receiveAmount, totalFeeInUsd }) => {
81
+ if (!fromAsset || !toAsset || !requestAmount || !receiveAmount || !totalFeeInUsd) {
82
+ return null;
83
+ }
84
+ return _jsx(RowWrapper, { title: "Rate", children: _jsx(RateElement, { fromAsset: fromAsset, toAsset: toAsset, requestAmount: requestAmount, receiveAmount: receiveAmount, totalFeeInUsd: totalFeeInUsd }) });
85
+ };
86
+ const ExchangeTokenContract = ({ fromAsset, network }) => {
87
+ return _jsx(RowWrapper, { title: `${network?.display_name} - ${fromAsset?.symbol}`, children: (fromAsset?.contract && network && (isValidAddress(fromAsset?.contract, network)) ?
88
+ _jsx("div", { className: "text-sm group/addressItem text-secondary-text", children: _jsx(ExtendedAddress, { address: addressFormat(fromAsset?.contract, network), network: network, showDetails: false, shouldShowChevron: false }) })
89
+ :
90
+ _jsx("p", { className: "text-sm text-secondary-text", children: fromAsset?.contract ? shortenAddress(fromAsset.contract) : '' })) });
54
91
  };
55
- const LoadingBar = () => (_jsx("div", { className: 'h-[10px] w-16 inline-flex bg-gray-500 rounded-xs animate-pulse' }));
92
+ const LoadingBar = () => (_jsx("div", { className: 'h-2.5 w-16 inline-flex bg-gray-500 rounded-xs animate-pulse' }));
@@ -19,7 +19,7 @@ export const SummaryRow = ({ quoteData, isQuoteLoading, values, wallet, onOpen,
19
19
  _jsx("div", { className: "text-sm group/addressItem text-secondary-text", children: _jsx(ExtendedAddress, { address: addressFormat(values?.destination_address, values?.to), network: values?.to, showDetails: wallet ? true : false, title: wallet?.displayName?.split("-")[0], description: wallet?.providerName, logo: wallet?.icon, shouldShowChevron: false }) })
20
20
  :
21
21
  _jsx("p", { className: "text-sm text-secondary-text", children: shortenAddress(values?.destination_address) }))] }) })] })), _jsxs("div", { className: "flex items-center w-full justify-between gap-1 text-sm px-2 py-3", children: [_jsx("div", { className: "inline-flex items-center text-left text-secondary-text", children: _jsx("label", { children: "Receive at least" }) }), _jsx("div", { className: "text-right text-primary-text h-5", children: quoteData?.quote?.min_receive_amount !== undefined && !isNaN(quoteData?.quote?.min_receive_amount) && (_jsx(NumberFlow, { value: quoteData?.quote?.min_receive_amount, trend: 0, format: { maximumFractionDigits: quoteData?.quote.destination_token?.decimals || 2 }, suffix: ` ${values?.toAsset?.symbol}` })) })] }), _jsx(Slippage, { quoteData: quoteData.quote, values: values }), isOpen &&
22
- _jsx(GasFee, { values: values, quote: quoteData.quote }), _jsxs("div", { className: `${isOpen ? "hidden" : ""} flex items-center w-full justify-between px-2 py-3`, children: [_jsx(DetailsButton, { quote: quoteData, isQuoteLoading: isQuoteLoading, swapValues: values, destination: destination, destinationAddress: destinationAddress }), _jsxs("button", { type: "button", onClick: (e) => {
22
+ _jsx(GasFee, { values: values, quote: quoteData.quote }), _jsxs("div", { className: `${isOpen ? "hidden" : ""} flex items-center w-full justify-between px-2 py-3`, children: [_jsx(DetailsButton, { quote: quoteData?.quote, isQuoteLoading: isQuoteLoading, swapValues: values, destination: destination, destinationAddress: destinationAddress, reward: quoteData?.reward }), _jsxs("button", { type: "button", onClick: (e) => {
23
23
  e.stopPropagation();
24
24
  onOpen?.();
25
25
  }, className: "flex items-center text-secondary-text text-sm whitespace-nowrap gap-0.5 hover:text-primary-text", "aria-label": "See details", children: [_jsx("span", { children: "See details" }), _jsx(ChevronDown, { className: "h-3.5 w-3.5" })] })] })] }));
@@ -6,12 +6,12 @@ import useWallet from '../../../../../../hooks/useWallet';
6
6
  import { SummaryRow } from './SummaryRow';
7
7
  import { DetailedEstimates } from './DetailedEstimates';
8
8
  import { addressFormat } from '../../../../../../lib/address/formatter';
9
- import { useSelectedAccount } from '../../../../../../context/balanceAccounts';
9
+ import { useSelectedAccount } from '../../../../../../context/swapAccounts';
10
10
  const SwapQuoteComp = ({ swapValues: values, quote: quoteData, isQuoteLoading, partner }) => {
11
11
  const [isOpen, setIsOpen] = useState(false);
12
- const { wallets: destWallets } = useWallet(values.to, 'autofil');
12
+ const { wallets: destWallets } = useWallet(values.to, 'autofill');
13
13
  const wallet = (values?.to && values?.destination_address) ? destWallets?.find(w => w.addresses?.some(a => addressFormat(a, values.to) === addressFormat(values.destination_address, values.to))) : undefined;
14
14
  const selectedSourceAccount = useSelectedAccount("from", values?.from?.name);
15
- return (_jsx(Accordion, { type: "single", collapsible: true, className: "w-full", value: isOpen ? 'quote' : '', onValueChange: (v) => setIsOpen(v === 'quote'), children: _jsxs(AccordionItem, { value: "quote", className: "bg-secondary-500 rounded-2xl", children: [_jsx(AccordionTrigger, { onClick: (e) => e.preventDefault(), className: "w-full rounded-2xl flex items-center justify-between cursor-auto", children: _jsx(SummaryRow, { isQuoteLoading: isQuoteLoading, values: values, wallet: wallet, quoteData: quoteData, destination: values.to, destinationAddress: values.destination_address, onOpen: () => setIsOpen(true), isOpen: isOpen, sourceAddress: selectedSourceAccount?.address, partner: partner }) }), _jsx(AccordionContent, { className: "rounded-2xl", children: _jsx(DetailedEstimates, { swapValues: values, quote: quoteData, variant: 'base' }) }), isOpen && (_jsx("div", { className: "px-3.5 pb-3", children: _jsxs("button", { type: "button", onClick: () => setIsOpen(false), className: "mx-auto flex items-center justify-center gap-1 text-sm text-secondary-text hover:text-primary-text", children: [_jsx("span", { children: "Close details" }), _jsx(ChevronDown, { className: "h-3.5 w-3.5 rotate-180 transition-transform" })] }) }))] }) }));
15
+ return (_jsx(Accordion, { type: "single", collapsible: true, className: "w-full", value: isOpen ? 'quote' : '', onValueChange: (v) => setIsOpen(v === 'quote'), children: _jsxs(AccordionItem, { value: "quote", className: "bg-secondary-500 rounded-2xl", children: [_jsx(AccordionTrigger, { onClick: (e) => e.preventDefault(), className: "w-full rounded-2xl flex items-center justify-between cursor-auto", children: _jsx(SummaryRow, { isQuoteLoading: isQuoteLoading, values: values, wallet: wallet, quoteData: quoteData, destination: values.to, destinationAddress: values.destination_address, onOpen: () => setIsOpen(true), isOpen: isOpen, sourceAddress: selectedSourceAccount?.address, partner: partner }) }), _jsx(AccordionContent, { className: "rounded-2xl", children: _jsx(DetailedEstimates, { swapValues: values, quote: quoteData?.quote, reward: quoteData?.reward, variant: 'base' }) }), isOpen && (_jsx("div", { className: "px-3.5 pb-3", children: _jsxs("button", { type: "button", onClick: () => setIsOpen(false), className: "mx-auto flex items-center justify-center gap-1 text-sm text-secondary-text hover:text-primary-text", children: [_jsx("span", { children: "Close details" }), _jsx(ChevronDown, { className: "h-3.5 w-3.5 rotate-180 transition-transform" })] }) }))] }) }));
16
16
  };
17
17
  export default SwapQuoteComp;