@layerswap/widget 1.0.6 → 1.1.1

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 (437) 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 +12 -12
  9. package/dist/esm/components/HeaderWithMenu.js +1 -1
  10. package/dist/esm/components/Icons/CircularLoader.js +5 -0
  11. package/dist/esm/components/Icons/FailIcon.js +2 -2
  12. package/dist/esm/components/Icons/GlobeIcon.js +3 -0
  13. package/dist/esm/components/Icons/MenuIcon.js +5 -0
  14. package/dist/esm/components/Icons/TokenIcon.js +1 -1
  15. package/dist/esm/components/Icons/Wallets/index.js +0 -1
  16. package/dist/esm/components/Input/Address/AddressNote.js +2 -2
  17. package/dist/esm/components/Input/Address/AddressPicker/AddressWithIcon.js +5 -2
  18. package/dist/esm/components/Input/Address/AddressPicker/index.js +15 -12
  19. package/dist/esm/components/Input/Address/ContractAddressNote.js +17 -0
  20. package/dist/esm/components/Input/Address/UrlAddressNote.js +10 -0
  21. package/dist/esm/components/Input/Amount/Balance.js +1 -1
  22. package/dist/esm/components/Input/Amount/ExchangeReceiveAmount.js +8 -0
  23. package/dist/esm/components/Input/Amount/MinMax.js +1 -1
  24. package/dist/esm/components/Input/Amount/PriceImpact.js +5 -40
  25. package/dist/esm/components/Input/Amount/ReceiveAmount.js +2 -2
  26. package/dist/esm/components/Input/Amount/index.js +3 -3
  27. package/dist/esm/components/Input/DestinationPicker.js +2 -2
  28. package/dist/esm/components/Input/RoutePicker/Content.js +19 -3
  29. package/dist/esm/components/Input/RoutePicker/RouteTokenSwitch.js +4 -4
  30. package/dist/esm/components/Input/RoutePicker/RouterPickerWalletConnect.js +5 -5
  31. package/dist/esm/components/Input/RoutePicker/Routes.js +27 -26
  32. package/dist/esm/components/Input/RoutePicker/Rows/CollapsableHeader.js +2 -2
  33. package/dist/esm/components/Input/RoutePicker/Rows/CollapsibleRow.js +3 -3
  34. package/dist/esm/components/Input/RoutePicker/Rows/StickyHeader.js +2 -2
  35. package/dist/esm/components/Input/RoutePicker/Rows/SuggestionsHeader.js +55 -0
  36. package/dist/esm/components/Input/RoutePicker/Rows/TitleRow.js +11 -0
  37. package/dist/esm/components/Input/RoutePicker/Rows/index.js +5 -6
  38. package/dist/esm/components/Input/RoutePicker/TokenTitleDetails.js +10 -0
  39. package/dist/esm/components/Input/RoutePicker/index.js +2 -2
  40. package/dist/esm/components/Input/SourceWalletPicker.js +6 -4
  41. package/dist/esm/components/Menu/MenuList.js +11 -19
  42. package/dist/esm/components/Menu/index.js +16 -7
  43. package/dist/esm/components/Modal/modalWithoutAnimation.js +3 -3
  44. package/dist/esm/components/Pages/Campaigns/Details/Leaderboard.js +2 -2
  45. package/dist/esm/components/Pages/Campaigns/Details/Rewards.js +2 -2
  46. package/dist/esm/components/Pages/Campaigns/Details/index.js +3 -4
  47. package/dist/esm/components/Pages/Campaigns/index.js +3 -4
  48. package/dist/esm/components/Pages/Swap/Form/ExchangeForm.js +21 -19
  49. package/dist/esm/components/Pages/Swap/Form/FeeDetails/Rate.js +6 -4
  50. package/dist/esm/components/Pages/Swap/Form/FeeDetails/Refuel.js +8 -3
  51. package/dist/esm/components/Pages/Swap/Form/FeeDetails/SwapQuote/DetailedEstimates.js +51 -14
  52. package/dist/esm/components/Pages/Swap/Form/FeeDetails/SwapQuote/SummaryRow.js +1 -1
  53. package/dist/esm/components/Pages/Swap/Form/FeeDetails/SwapQuote/index.js +3 -3
  54. package/dist/esm/components/Pages/Swap/Form/FeeDetails/index.js +10 -11
  55. package/dist/esm/components/Pages/Swap/Form/Form.js +27 -3
  56. package/dist/esm/components/Pages/Swap/Form/FormWrapper.js +35 -10
  57. package/dist/esm/components/Pages/Swap/Form/NetworkForm.js +13 -22
  58. package/dist/esm/components/Pages/Swap/Form/SecondaryComponents/FormButton.js +1 -1
  59. package/dist/esm/components/Pages/Swap/Form/SecondaryComponents/ReserveGasNote.js +8 -6
  60. package/dist/esm/components/Pages/Swap/Form/SecondaryComponents/validationError/ContractAddressValidationCache.js +19 -0
  61. package/dist/esm/components/Pages/Swap/Withdraw/Failed.js +12 -8
  62. package/dist/esm/components/Pages/Swap/Withdraw/ManualWithdraw.js +28 -9
  63. package/dist/esm/components/Pages/Swap/Withdraw/NotFound.js +15 -4
  64. package/dist/esm/components/Pages/Swap/Withdraw/Processing/Processing.js +44 -45
  65. package/dist/esm/components/Pages/Swap/Withdraw/Summary/Summary.js +2 -3
  66. package/dist/esm/components/Pages/Swap/Withdraw/Summary/index.js +2 -2
  67. package/dist/esm/components/Pages/Swap/Withdraw/SwapDetails.js +9 -7
  68. package/dist/esm/components/Pages/Swap/Withdraw/Wallet/Common/actionMessage.js +43 -0
  69. package/dist/esm/components/Pages/Swap/Withdraw/Wallet/Common/buttons.js +125 -71
  70. package/dist/esm/components/Pages/Swap/Withdraw/Wallet/index.js +56 -65
  71. package/dist/esm/components/Pages/Swap/Withdraw/WalletTransferButton.js +2 -2
  72. package/dist/esm/components/Pages/Swap/Withdraw/WalletTransferContent.js +2 -2
  73. package/dist/esm/components/Pages/Swap/Withdraw/Withdraw.js +3 -3
  74. package/dist/esm/components/Pages/Swap/Withdraw/index.js +5 -4
  75. package/dist/esm/components/Pages/Swap/Withdraw/messages/Message.js +4 -4
  76. package/dist/esm/components/Pages/Swap/Withdraw/messages/TransactionMessages.js +14 -15
  77. package/dist/esm/components/Pages/SwapHistory/History.js +2 -2
  78. package/dist/esm/components/Pages/SwapHistory/HistorySummary.js +1 -1
  79. package/dist/esm/components/Pages/SwapHistory/index.js +4 -4
  80. package/dist/esm/components/Select/Selector/SelectItem.js +1 -1
  81. package/dist/esm/components/Wallet/WalletComponents/ConnectedWallets.js +4 -4
  82. package/dist/esm/components/Wallet/WalletComponents/WalletsList.js +1 -1
  83. package/dist/esm/components/Wallet/WalletModal/Connector.js +2 -2
  84. package/dist/esm/components/Wallet/WalletModal/ConnectorsList.js +78 -125
  85. package/dist/esm/components/Wallet/WalletModal/InstalledExtensionNotFound.js +16 -0
  86. package/dist/esm/components/Wallet/WalletModal/LoadingConnect.js +27 -0
  87. package/dist/esm/components/Wallet/WalletModal/MultichainConnectorPicker.js +23 -0
  88. package/dist/esm/components/Wallet/WalletModal/ProviderPicker.js +26 -0
  89. package/dist/esm/components/Wallet/WalletModal/WalletQrCode.js +18 -0
  90. package/dist/esm/components/Wallet/WalletModal/index.js +4 -2
  91. package/dist/esm/components/Wallet/WalletProviders/index.js +4 -2
  92. package/dist/esm/components/Widget/Content.js +2 -2
  93. package/dist/esm/components/Widget/Footer.js +21 -21
  94. package/dist/esm/components/Widget/Index.js +2 -2
  95. package/dist/esm/components/WidgetLoading.js +9 -2
  96. package/dist/esm/components/shadcn/checkbox.js +1 -1
  97. package/dist/esm/context/ErrorProvider.js +14 -0
  98. package/dist/esm/context/LayerswapProvider.js +6 -5
  99. package/dist/esm/context/callbackProvider.js +60 -52
  100. package/dist/esm/context/resolverContext.js +11 -2
  101. package/dist/esm/context/swap.js +10 -13
  102. package/dist/esm/context/{balanceAccounts.js → swapAccounts.js} +17 -17
  103. package/dist/esm/context/validationContext.js +1 -1
  104. package/dist/esm/context/walletProviders.js +7 -1
  105. package/dist/esm/context/withdrawalContext.js +2 -2
  106. package/dist/esm/exports/internal.js +4 -3
  107. package/dist/esm/helpers/filterSourceNetworks.js +23 -0
  108. package/dist/esm/helpers/getSettings/getSettings.js +18 -13
  109. package/dist/esm/helpers/routes.js +4 -1
  110. package/dist/esm/hooks/useAllWithdrawalBalances.js +11 -5
  111. package/dist/esm/hooks/useConnectors.js +72 -0
  112. package/dist/esm/hooks/useFormRoutes.js +16 -8
  113. package/dist/esm/hooks/useFormValidation.js +5 -4
  114. package/dist/esm/hooks/useRouteValidation.js +1 -1
  115. package/dist/esm/hooks/useSwrSwaps.js +1 -1
  116. package/dist/esm/hooks/useTransfer.js +9 -0
  117. package/dist/esm/hooks/useWallet.js +7 -7
  118. package/dist/esm/lib/AppSettings.js +27 -16
  119. package/dist/esm/lib/ErrorHandler.js +6 -0
  120. package/dist/esm/lib/address/contractAddressResolver.js +12 -0
  121. package/dist/esm/lib/apiClients/layerSwapApiClient.js +19 -35
  122. package/dist/esm/lib/balances/balanceResolver.js +57 -11
  123. package/dist/esm/lib/balances/errorUtils.js +13 -0
  124. package/dist/esm/lib/balances/nodeErrorClassifier.js +22 -0
  125. package/dist/esm/lib/fees.js +50 -0
  126. package/dist/esm/lib/generateSwapInitialValues.js +2 -2
  127. package/dist/esm/lib/isNewListed.js +8 -0
  128. package/dist/esm/lib/knownIds.js +1 -0
  129. package/dist/esm/lib/resolvers/resolverService.js +19 -1
  130. package/dist/esm/lib/transfers/index.js +1 -0
  131. package/dist/esm/lib/transfers/transferResolver.js +14 -0
  132. package/dist/esm/stores/balanceStore.js +39 -18
  133. package/dist/esm/stores/contractAddressStore.js +178 -0
  134. package/dist/esm/stores/logStore.js +11 -0
  135. package/dist/esm/types/balance.js +23 -11
  136. package/dist/esm/types/contract.js +1 -0
  137. package/dist/esm/types/index.js +2 -0
  138. package/dist/esm/types/logEvents.js +1 -0
  139. package/dist/index.css +1 -1
  140. package/dist/tsconfig.tsbuildinfo +1 -1
  141. package/dist/types/Models/Balance.d.ts +14 -2
  142. package/dist/types/Models/Balance.d.ts.map +1 -1
  143. package/dist/types/Models/LayerSwapSettings.d.ts +7 -0
  144. package/dist/types/Models/LayerSwapSettings.d.ts.map +1 -1
  145. package/dist/types/Models/Theme.d.ts.map +1 -1
  146. package/dist/types/components/Buttons/submitButton.d.ts +1 -1
  147. package/dist/types/components/Buttons/submitButton.d.ts.map +1 -1
  148. package/dist/types/components/Common/ConnectWalletButton.d.ts +1 -1
  149. package/dist/types/components/Common/ConnectWalletButton.d.ts.map +1 -1
  150. package/dist/types/components/Common/CountDownTimer.d.ts.map +1 -1
  151. package/dist/types/components/Common/WarningMessage.d.ts.map +1 -1
  152. package/dist/types/components/Common/guideLink.d.ts.map +1 -1
  153. package/dist/types/components/ErrorFallback.d.ts.map +1 -1
  154. package/dist/types/components/HeaderWithMenu.d.ts.map +1 -1
  155. package/dist/types/components/Icons/CircularLoader.d.ts +4 -0
  156. package/dist/types/components/Icons/CircularLoader.d.ts.map +1 -0
  157. package/dist/types/components/Icons/FailIcon.d.ts.map +1 -1
  158. package/dist/types/components/Icons/GasIcon.d.ts.map +1 -1
  159. package/dist/types/components/Icons/GlobeIcon.d.ts +4 -0
  160. package/dist/types/components/Icons/GlobeIcon.d.ts.map +1 -0
  161. package/dist/types/components/Icons/MenuIcon.d.ts +4 -0
  162. package/dist/types/components/Icons/MenuIcon.d.ts.map +1 -0
  163. package/dist/types/components/Icons/TokenIcon.d.ts.map +1 -1
  164. package/dist/types/components/Icons/Wallets/index.d.ts +0 -1
  165. package/dist/types/components/Icons/Wallets/index.d.ts.map +1 -1
  166. package/dist/types/components/Input/Address/AddressNote.d.ts +5 -5
  167. package/dist/types/components/Input/Address/AddressNote.d.ts.map +1 -1
  168. package/dist/types/components/Input/Address/AddressPicker/AddressBook.d.ts +3 -3
  169. package/dist/types/components/Input/Address/AddressPicker/AddressButton.d.ts +3 -3
  170. package/dist/types/components/Input/Address/AddressPicker/AddressWithIcon.d.ts +3 -2
  171. package/dist/types/components/Input/Address/AddressPicker/AddressWithIcon.d.ts.map +1 -1
  172. package/dist/types/components/Input/Address/AddressPicker/ConnectedWallets.d.ts +2 -2
  173. package/dist/types/components/Input/Address/AddressPicker/ManualAddressInput.d.ts +4 -4
  174. package/dist/types/components/Input/Address/AddressPicker/index.d.ts +4 -4
  175. package/dist/types/components/Input/Address/AddressPicker/index.d.ts.map +1 -1
  176. package/dist/types/components/Input/Address/ContractAddressNote.d.ts +9 -0
  177. package/dist/types/components/Input/Address/ContractAddressNote.d.ts.map +1 -0
  178. package/dist/types/components/Input/Address/UrlAddressNote.d.ts +10 -0
  179. package/dist/types/components/Input/Address/UrlAddressNote.d.ts.map +1 -0
  180. package/dist/types/components/Input/Address/index.d.ts +1 -1
  181. package/dist/types/components/Input/Amount/Balance.d.ts +1 -1
  182. package/dist/types/components/Input/Amount/Balance.d.ts.map +1 -1
  183. package/dist/types/components/Input/Amount/ExchangeReceiveAmount.d.ts +11 -0
  184. package/dist/types/components/Input/Amount/ExchangeReceiveAmount.d.ts.map +1 -0
  185. package/dist/types/components/Input/Amount/MinMax.d.ts +1 -1
  186. package/dist/types/components/Input/Amount/PriceImpact.d.ts +3 -6
  187. package/dist/types/components/Input/Amount/PriceImpact.d.ts.map +1 -1
  188. package/dist/types/components/Input/Amount/ReceiveAmount.d.ts +2 -3
  189. package/dist/types/components/Input/Amount/ReceiveAmount.d.ts.map +1 -1
  190. package/dist/types/components/Input/Amount/helpers.d.ts +2 -2
  191. package/dist/types/components/Input/Amount/index.d.ts +1 -1
  192. package/dist/types/components/Input/CexPicker.d.ts +1 -1
  193. package/dist/types/components/Input/DestinationPicker.d.ts +1 -1
  194. package/dist/types/components/Input/DestinationPicker.d.ts.map +1 -1
  195. package/dist/types/components/Input/RoutePicker/Content.d.ts +5 -5
  196. package/dist/types/components/Input/RoutePicker/Content.d.ts.map +1 -1
  197. package/dist/types/components/Input/RoutePicker/RouterPickerWalletConnect.d.ts +1 -1
  198. package/dist/types/components/Input/RoutePicker/RouterPickerWalletConnect.d.ts.map +1 -1
  199. package/dist/types/components/Input/RoutePicker/Routes.d.ts +4 -8
  200. package/dist/types/components/Input/RoutePicker/Routes.d.ts.map +1 -1
  201. package/dist/types/components/Input/RoutePicker/Rows/CollapsableHeader.d.ts +3 -4
  202. package/dist/types/components/Input/RoutePicker/Rows/CollapsableHeader.d.ts.map +1 -1
  203. package/dist/types/components/Input/RoutePicker/Rows/CollapsibleRow.d.ts +6 -5
  204. package/dist/types/components/Input/RoutePicker/Rows/CollapsibleRow.d.ts.map +1 -1
  205. package/dist/types/components/Input/RoutePicker/Rows/StickyHeader.d.ts +3 -4
  206. package/dist/types/components/Input/RoutePicker/Rows/StickyHeader.d.ts.map +1 -1
  207. package/dist/types/components/Input/RoutePicker/Rows/SuggestionsHeader.d.ts +7 -0
  208. package/dist/types/components/Input/RoutePicker/Rows/SuggestionsHeader.d.ts.map +1 -0
  209. package/dist/types/components/Input/RoutePicker/Rows/TitleRow.d.ts +7 -0
  210. package/dist/types/components/Input/RoutePicker/Rows/TitleRow.d.ts.map +1 -0
  211. package/dist/types/components/Input/RoutePicker/Rows/index.d.ts +5 -5
  212. package/dist/types/components/Input/RoutePicker/Rows/index.d.ts.map +1 -1
  213. package/dist/types/components/Input/RoutePicker/TokenTitleDetails.d.ts +18 -0
  214. package/dist/types/components/Input/RoutePicker/TokenTitleDetails.d.ts.map +1 -0
  215. package/dist/types/components/Input/RoutePicker/index.d.ts +1 -1
  216. package/dist/types/components/Input/RoutePicker/index.d.ts.map +1 -1
  217. package/dist/types/components/Input/SourcePicker.d.ts +1 -1
  218. package/dist/types/components/Input/SourceWalletPicker.d.ts.map +1 -1
  219. package/dist/types/components/Menu/MenuList.d.ts.map +1 -1
  220. package/dist/types/components/Menu/index.d.ts.map +1 -1
  221. package/dist/types/components/Modal/modalWithoutAnimation.d.ts +4 -2
  222. package/dist/types/components/Modal/modalWithoutAnimation.d.ts.map +1 -1
  223. package/dist/types/components/Pages/Campaigns/Details/Leaderboard.d.ts +1 -1
  224. package/dist/types/components/Pages/Campaigns/Details/Rewards.d.ts +1 -1
  225. package/dist/types/components/Pages/Campaigns/Details/index.d.ts +1 -2
  226. package/dist/types/components/Pages/Campaigns/Details/index.d.ts.map +1 -1
  227. package/dist/types/components/Pages/Campaigns/index.d.ts +2 -3
  228. package/dist/types/components/Pages/Campaigns/index.d.ts.map +1 -1
  229. package/dist/types/components/Pages/Swap/Form/ExchangeForm.d.ts +3 -1
  230. package/dist/types/components/Pages/Swap/Form/ExchangeForm.d.ts.map +1 -1
  231. package/dist/types/components/Pages/Swap/Form/FeeDetails/Rate.d.ts +7 -6
  232. package/dist/types/components/Pages/Swap/Form/FeeDetails/Rate.d.ts.map +1 -1
  233. package/dist/types/components/Pages/Swap/Form/FeeDetails/ReceiveAmounts.d.ts +2 -2
  234. package/dist/types/components/Pages/Swap/Form/FeeDetails/Refuel.d.ts +1 -2
  235. package/dist/types/components/Pages/Swap/Form/FeeDetails/Refuel.d.ts.map +1 -1
  236. package/dist/types/components/Pages/Swap/Form/FeeDetails/RefuelModal.d.ts +1 -1
  237. package/dist/types/components/Pages/Swap/Form/FeeDetails/Slippage.d.ts +1 -1
  238. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/DetailedEstimates.d.ts +3 -2
  239. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/DetailedEstimates.d.ts.map +1 -1
  240. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/SummaryRow.d.ts +4 -4
  241. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/index.d.ts +4 -4
  242. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/index.d.ts.map +1 -1
  243. package/dist/types/components/Pages/Swap/Form/FeeDetails/SwapQuote/utils.d.ts +2 -2
  244. package/dist/types/components/Pages/Swap/Form/FeeDetails/index.d.ts +7 -4
  245. package/dist/types/components/Pages/Swap/Form/FeeDetails/index.d.ts.map +1 -1
  246. package/dist/types/components/Pages/Swap/Form/Form.d.ts.map +1 -1
  247. package/dist/types/components/Pages/Swap/Form/FormWrapper.d.ts +1 -1
  248. package/dist/types/components/Pages/Swap/Form/FormWrapper.d.ts.map +1 -1
  249. package/dist/types/components/Pages/Swap/Form/NetworkForm.d.ts +1 -1
  250. package/dist/types/components/Pages/Swap/Form/NetworkForm.d.ts.map +1 -1
  251. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/FormButton.d.ts +1 -1
  252. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/FormButton.d.ts.map +1 -1
  253. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/ReserveGasNote.d.ts +2 -2
  254. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/ReserveGasNote.d.ts.map +1 -1
  255. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/validationError/ContractAddressValidationCache.d.ts +10 -0
  256. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/validationError/ContractAddressValidationCache.d.ts.map +1 -0
  257. package/dist/types/components/Pages/Swap/Form/SecondaryComponents/validationError/ErrorDisplay.d.ts +1 -1
  258. package/dist/types/components/Pages/Swap/Form/SwapFormValues.d.ts +2 -2
  259. package/dist/types/components/Pages/Swap/Withdraw/Failed.d.ts.map +1 -1
  260. package/dist/types/components/Pages/Swap/Withdraw/ManualWithdraw.d.ts +4 -3
  261. package/dist/types/components/Pages/Swap/Withdraw/ManualWithdraw.d.ts.map +1 -1
  262. package/dist/types/components/Pages/Swap/Withdraw/NotFound.d.ts.map +1 -1
  263. package/dist/types/components/Pages/Swap/Withdraw/Processing/Processing.d.ts +1 -1
  264. package/dist/types/components/Pages/Swap/Withdraw/Processing/Processing.d.ts.map +1 -1
  265. package/dist/types/components/Pages/Swap/Withdraw/QuoteUpdate.d.ts +1 -1
  266. package/dist/types/components/Pages/Swap/Withdraw/Summary/Summary.d.ts +1 -1
  267. package/dist/types/components/Pages/Swap/Withdraw/Summary/Summary.d.ts.map +1 -1
  268. package/dist/types/components/Pages/Swap/Withdraw/SwapDetails.d.ts +2 -1
  269. package/dist/types/components/Pages/Swap/Withdraw/SwapDetails.d.ts.map +1 -1
  270. package/dist/types/components/Pages/Swap/Withdraw/SwapQuoteDetails.d.ts +3 -3
  271. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/actionMessage.d.ts +6 -0
  272. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/actionMessage.d.ts.map +1 -0
  273. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/buttons.d.ts +4 -3
  274. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/buttons.d.ts.map +1 -1
  275. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/sharedTypes.d.ts +2 -1
  276. package/dist/types/components/Pages/Swap/Withdraw/Wallet/Common/sharedTypes.d.ts.map +1 -1
  277. package/dist/types/components/Pages/Swap/Withdraw/Wallet/index.d.ts +2 -1
  278. package/dist/types/components/Pages/Swap/Withdraw/Wallet/index.d.ts.map +1 -1
  279. package/dist/types/components/Pages/Swap/Withdraw/WalletTransferButton.d.ts +2 -1
  280. package/dist/types/components/Pages/Swap/Withdraw/WalletTransferButton.d.ts.map +1 -1
  281. package/dist/types/components/Pages/Swap/Withdraw/WalletTransferContent.d.ts +1 -1
  282. package/dist/types/components/Pages/Swap/Withdraw/Withdraw.d.ts +2 -1
  283. package/dist/types/components/Pages/Swap/Withdraw/Withdraw.d.ts.map +1 -1
  284. package/dist/types/components/Pages/Swap/Withdraw/index.d.ts +1 -2
  285. package/dist/types/components/Pages/Swap/Withdraw/index.d.ts.map +1 -1
  286. package/dist/types/components/Pages/Swap/Withdraw/messages/Message.d.ts.map +1 -1
  287. package/dist/types/components/Pages/Swap/Withdraw/messages/TransactionMessages.d.ts +3 -4
  288. package/dist/types/components/Pages/Swap/Withdraw/messages/TransactionMessages.d.ts.map +1 -1
  289. package/dist/types/components/Pages/SwapHistory/HistorySummary.d.ts +2 -2
  290. package/dist/types/components/Pages/SwapHistory/HistorySummary.d.ts.map +1 -1
  291. package/dist/types/components/Pages/SwapHistory/StatusIcons.d.ts +1 -1
  292. package/dist/types/components/Pages/SwapHistory/SwapDetailsComponent.d.ts +1 -1
  293. package/dist/types/components/Pages/SwapHistory/index.d.ts +3 -1
  294. package/dist/types/components/Pages/SwapHistory/index.d.ts.map +1 -1
  295. package/dist/types/components/Select/Command/commandSelect.d.ts.map +1 -1
  296. package/dist/types/components/Select/Selector/SelectItem.d.ts.map +1 -1
  297. package/dist/types/components/Wallet/WalletComponents/WalletsList.d.ts +3 -3
  298. package/dist/types/components/Wallet/WalletComponents/WalletsList.d.ts.map +1 -1
  299. package/dist/types/components/Wallet/WalletModal/Connector.d.ts +2 -1
  300. package/dist/types/components/Wallet/WalletModal/Connector.d.ts.map +1 -1
  301. package/dist/types/components/Wallet/WalletModal/ConnectorsList.d.ts +1 -1
  302. package/dist/types/components/Wallet/WalletModal/ConnectorsList.d.ts.map +1 -1
  303. package/dist/types/components/Wallet/WalletModal/InstalledExtensionNotFound.d.ts +7 -0
  304. package/dist/types/components/Wallet/WalletModal/InstalledExtensionNotFound.d.ts.map +1 -0
  305. package/dist/types/components/Wallet/WalletModal/LoadingConnect.d.ts +8 -0
  306. package/dist/types/components/Wallet/WalletModal/LoadingConnect.d.ts.map +1 -0
  307. package/dist/types/components/Wallet/WalletModal/MultichainConnectorPicker.d.ts +12 -0
  308. package/dist/types/components/Wallet/WalletModal/MultichainConnectorPicker.d.ts.map +1 -0
  309. package/dist/types/components/Wallet/WalletModal/ProviderPicker.d.ts +8 -0
  310. package/dist/types/components/Wallet/WalletModal/ProviderPicker.d.ts.map +1 -0
  311. package/dist/types/components/Wallet/WalletModal/WalletQrCode.d.ts +6 -0
  312. package/dist/types/components/Wallet/WalletModal/WalletQrCode.d.ts.map +1 -0
  313. package/dist/types/components/Wallet/WalletModal/index.d.ts +2 -1
  314. package/dist/types/components/Wallet/WalletModal/index.d.ts.map +1 -1
  315. package/dist/types/components/Wallet/WalletProviders/index.d.ts +3 -1
  316. package/dist/types/components/Wallet/WalletProviders/index.d.ts.map +1 -1
  317. package/dist/types/components/Widget/Content.d.ts +2 -1
  318. package/dist/types/components/Widget/Content.d.ts.map +1 -1
  319. package/dist/types/components/Widget/Footer.d.ts +2 -1
  320. package/dist/types/components/Widget/Footer.d.ts.map +1 -1
  321. package/dist/types/components/Widget/Index.d.ts +3 -2
  322. package/dist/types/components/Widget/Index.d.ts.map +1 -1
  323. package/dist/types/components/WidgetLoading.d.ts.map +1 -1
  324. package/dist/types/components/shadcn/command.d.ts +9 -52
  325. package/dist/types/components/shadcn/command.d.ts.map +1 -1
  326. package/dist/types/context/ErrorProvider.d.ts +3 -0
  327. package/dist/types/context/ErrorProvider.d.ts.map +1 -0
  328. package/dist/types/context/LayerswapProvider.d.ts +22 -4
  329. package/dist/types/context/LayerswapProvider.d.ts.map +1 -1
  330. package/dist/types/context/callbackProvider.d.ts +7 -10
  331. package/dist/types/context/callbackProvider.d.ts.map +1 -1
  332. package/dist/types/context/resolverContext.d.ts.map +1 -1
  333. package/dist/types/context/swap.d.ts +7 -7
  334. package/dist/types/context/swap.d.ts.map +1 -1
  335. package/dist/types/context/{balanceAccounts.d.ts → swapAccounts.d.ts} +9 -9
  336. package/dist/types/context/swapAccounts.d.ts.map +1 -0
  337. package/dist/types/context/walletProviders.d.ts.map +1 -1
  338. package/dist/types/context/withdrawalContext.d.ts +2 -0
  339. package/dist/types/context/withdrawalContext.d.ts.map +1 -1
  340. package/dist/types/exports/internal.d.ts +9 -7
  341. package/dist/types/exports/internal.d.ts.map +1 -1
  342. package/dist/types/helpers/accountSelectHelper.d.ts +1 -1
  343. package/dist/types/helpers/balanceHelper.d.ts +2 -2
  344. package/dist/types/helpers/filterSourceNetworks.d.ts +4 -0
  345. package/dist/types/helpers/filterSourceNetworks.d.ts.map +1 -0
  346. package/dist/types/helpers/getSettings/getSettings.d.ts +1 -1
  347. package/dist/types/helpers/getSettings/getSettings.d.ts.map +1 -1
  348. package/dist/types/helpers/routes.d.ts +1 -1
  349. package/dist/types/helpers/routes.d.ts.map +1 -1
  350. package/dist/types/helpers/tokenHelper.d.ts +2 -2
  351. package/dist/types/hooks/useAllWithdrawalBalances.d.ts +2 -1
  352. package/dist/types/hooks/useAllWithdrawalBalances.d.ts.map +1 -1
  353. package/dist/types/hooks/useConnectors.d.ts +28 -0
  354. package/dist/types/hooks/useConnectors.d.ts.map +1 -0
  355. package/dist/types/hooks/useFee.d.ts +1 -1
  356. package/dist/types/hooks/useFormRoutes.d.ts +2 -3
  357. package/dist/types/hooks/useFormRoutes.d.ts.map +1 -1
  358. package/dist/types/hooks/useFormValidation.d.ts +2 -1
  359. package/dist/types/hooks/useFormValidation.d.ts.map +1 -1
  360. package/dist/types/hooks/useSwapHistoryData.d.ts +2 -2
  361. package/dist/types/hooks/useTransfer.d.ts +5 -0
  362. package/dist/types/hooks/useTransfer.d.ts.map +1 -0
  363. package/dist/types/hooks/useWallet.d.ts +3 -3
  364. package/dist/types/hooks/useWallet.d.ts.map +1 -1
  365. package/dist/types/lib/AppSettings.d.ts +25 -16
  366. package/dist/types/lib/AppSettings.d.ts.map +1 -1
  367. package/dist/types/lib/ErrorHandler.d.ts +3 -0
  368. package/dist/types/lib/ErrorHandler.d.ts.map +1 -0
  369. package/dist/types/lib/address/contractAddressResolver.d.ts +7 -0
  370. package/dist/types/lib/address/contractAddressResolver.d.ts.map +1 -0
  371. package/dist/types/lib/apiClients/layerSwapApiClient.d.ts +1 -9
  372. package/dist/types/lib/apiClients/layerSwapApiClient.d.ts.map +1 -1
  373. package/dist/types/lib/balances/balanceResolver.d.ts +3 -3
  374. package/dist/types/lib/balances/balanceResolver.d.ts.map +1 -1
  375. package/dist/types/lib/balances/errorUtils.d.ts +12 -0
  376. package/dist/types/lib/balances/errorUtils.d.ts.map +1 -0
  377. package/dist/types/lib/balances/helpers.d.ts +1 -1
  378. package/dist/types/lib/balances/nodeErrorClassifier.d.ts +4 -0
  379. package/dist/types/lib/balances/nodeErrorClassifier.d.ts.map +1 -0
  380. package/dist/types/lib/balances/useBalance.d.ts +1 -1
  381. package/dist/types/lib/fees.d.ts +16 -0
  382. package/dist/types/lib/fees.d.ts.map +1 -1
  383. package/dist/types/lib/gases/gasResolver.d.ts +2 -2
  384. package/dist/types/lib/gases/useSWRGas.d.ts +3 -3
  385. package/dist/types/lib/generateSwapInitialValues.d.ts +1 -1
  386. package/dist/types/lib/isNewListed.d.ts +4 -0
  387. package/dist/types/lib/isNewListed.d.ts.map +1 -0
  388. package/dist/types/lib/knownIds.d.ts +1 -0
  389. package/dist/types/lib/knownIds.d.ts.map +1 -1
  390. package/dist/types/lib/nft/nftBalanceResolver.d.ts +1 -1
  391. package/dist/types/lib/resolvers/resolverService.d.ts +11 -5
  392. package/dist/types/lib/resolvers/resolverService.d.ts.map +1 -1
  393. package/dist/types/lib/transfers/index.d.ts +2 -0
  394. package/dist/types/lib/transfers/index.d.ts.map +1 -0
  395. package/dist/types/lib/transfers/transferResolver.d.ts +7 -0
  396. package/dist/types/lib/transfers/transferResolver.d.ts.map +1 -0
  397. package/dist/types/stores/balanceStore.d.ts +3 -0
  398. package/dist/types/stores/balanceStore.d.ts.map +1 -1
  399. package/dist/types/stores/contractAddressStore.d.ts +43 -0
  400. package/dist/types/stores/contractAddressStore.d.ts.map +1 -0
  401. package/dist/types/stores/logStore.d.ts +8 -0
  402. package/dist/types/stores/logStore.d.ts.map +1 -0
  403. package/dist/types/stores/walletStore.d.ts +1 -1
  404. package/dist/types/types/balance.d.ts +2 -2
  405. package/dist/types/types/balance.d.ts.map +1 -1
  406. package/dist/types/types/contract.d.ts +6 -0
  407. package/dist/types/types/contract.d.ts.map +1 -0
  408. package/dist/types/types/gas.d.ts +2 -2
  409. package/dist/types/types/index.d.ts +2 -0
  410. package/dist/types/types/index.d.ts.map +1 -1
  411. package/dist/types/types/logEvents.d.ts +59 -0
  412. package/dist/types/types/logEvents.d.ts.map +1 -0
  413. package/dist/types/types/nft.d.ts +1 -1
  414. package/dist/types/types/transfer.d.ts +7 -2
  415. package/dist/types/types/transfer.d.ts.map +1 -1
  416. package/dist/types/types/wallet.d.ts +29 -8
  417. package/dist/types/types/wallet.d.ts.map +1 -1
  418. package/package.json +3 -3
  419. package/dist/esm/components/Icons/Wallets/Keplr.js +0 -3
  420. package/dist/esm/components/Modal/popover.js +0 -15
  421. package/dist/esm/components/Wallet/WalletModal/utils.js +0 -23
  422. package/dist/esm/helpers/querryHelper.js +0 -13
  423. package/dist/esm/lib/logError.js +0 -17
  424. package/dist/esm/lib/sorting.js +0 -63
  425. package/dist/types/components/Icons/Wallets/Keplr.d.ts +0 -4
  426. package/dist/types/components/Icons/Wallets/Keplr.d.ts.map +0 -1
  427. package/dist/types/components/Modal/popover.d.ts +0 -12
  428. package/dist/types/components/Modal/popover.d.ts.map +0 -1
  429. package/dist/types/components/Wallet/WalletModal/utils.d.ts +0 -2
  430. package/dist/types/components/Wallet/WalletModal/utils.d.ts.map +0 -1
  431. package/dist/types/context/balanceAccounts.d.ts.map +0 -1
  432. package/dist/types/helpers/querryHelper.d.ts +0 -3
  433. package/dist/types/helpers/querryHelper.d.ts.map +0 -1
  434. package/dist/types/lib/logError.d.ts +0 -3
  435. package/dist/types/lib/logError.d.ts.map +0 -1
  436. package/dist/types/lib/sorting.d.ts +0 -22
  437. package/dist/types/lib/sorting.d.ts.map +0 -1
@@ -4,6 +4,6 @@ import * as React from "react";
4
4
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
5
5
  import { Check } from "lucide-react";
6
6
  import { classNames } from "../utils/classNames";
7
- const Checkbox = React.forwardRef(({ className, ...props }, ref) => (_jsx(CheckboxPrimitive.Root, { ref: ref, className: classNames("peer h-4 w-4 shrink-0 rounded border border-secondary-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-secondary-text data-[state=checked]:text-secondary-800", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { className: classNames("flex items-center justify-center text-current"), children: _jsx(Check, { className: "h-4 w-4" }) }) })));
7
+ const Checkbox = React.forwardRef(({ className, ...props }, ref) => (_jsx(CheckboxPrimitive.Root, { ref: ref, className: classNames("peer h-3 w-3 shrink-0 rounded border border-secondary-text data-[state=checked]:border-primary-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary-text data-[state=checked]:text-secondary-800", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { className: classNames("flex items-center justify-center text-current"), children: _jsx(Check, { className: "h-3 w-3" }) }) })));
8
8
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
9
9
  export { Checkbox };
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useEffect } from 'react';
3
+ import { useCallbacks } from './callbackProvider';
4
+ import { logStore } from '../stores/logStore';
5
+ const LogContext = createContext(null);
6
+ export const ErrorProvider = ({ children }) => {
7
+ const callbacks = useCallbacks();
8
+ useEffect(() => {
9
+ if (callbacks?.onError) {
10
+ logStore.getState().setLogger(callbacks.onError);
11
+ }
12
+ }, [callbacks.onError]);
13
+ return _jsx(LogContext.Provider, { value: null, children: children });
14
+ };
@@ -16,17 +16,18 @@ import ColorSchema from "../components/ColorSchema";
16
16
  import { WidgetLoading } from "../components/WidgetLoading";
17
17
  import WalletsProviders from "../components/Wallet/WalletProviders";
18
18
  import { CallbackProvider } from "./callbackProvider";
19
- import { BalanceAccountsProvider } from "./balanceAccounts";
19
+ import { SwapAccountsProvider } from "./swapAccounts";
20
20
  import { ResolverProviders } from "./resolverContext";
21
+ import { ErrorProvider } from "./ErrorProvider";
21
22
  const INTERCOM_APP_ID = 'h5zisg78';
22
23
  const LayerswapProviderComponent = ({ children, callbacks, config, walletProviders = [] }) => {
23
- let { apiKey, version, settings: _settings, theme: themeData, imtblPassport, initialValues } = config || {};
24
+ let { apiKey, version, settings: _settings, theme: themeData, initialValues, imtblPassport, tonConfigs, walletConnect } = config || {};
24
25
  const [fetchedSettings, setFetchedSettings] = useState(null);
25
26
  themeData = { ...THEME_COLORS['default'], ...config?.theme };
26
27
  AppSettings.ApiVersion = version || AppSettings.ApiVersion;
27
28
  AppSettings.ImtblPassportConfig = imtblPassport;
28
- AppSettings.TonClientConfig = config?.tonConfigs || AppSettings.TonClientConfig;
29
- AppSettings.WalletConnectConfig = config?.walletConnect || AppSettings.WalletConnectConfig;
29
+ AppSettings.TonClientConfig = tonConfigs || AppSettings.TonClientConfig;
30
+ AppSettings.WalletConnectConfig = walletConnect || AppSettings.WalletConnectConfig;
30
31
  AppSettings.ThemeData = themeData;
31
32
  if (apiKey)
32
33
  LayerSwapApiClient.apiKey = apiKey;
@@ -44,7 +45,7 @@ const LayerswapProviderComponent = ({ children, callbacks, config, walletProvide
44
45
  if (!settings)
45
46
  return _jsx(WidgetLoading, {});
46
47
  let appSettings = new LayerSwapAppSettings(settings);
47
- return (_jsx(IntercomProvider, { appId: INTERCOM_APP_ID, initializeDelay: 2500, children: _jsx(SettingsProvider, { initialLayerswapData: appSettings, initialSettings: config?.initialValues, children: _jsx(CallbackProvider, { callbacks: callbacks, children: _jsx(ErrorBoundary, { FallbackComponent: ErrorFallback, children: _jsx(ThemeWrapper, { children: _jsx(WalletsProviders, { appName: initialValues?.appName, themeData: themeData, walletProviders: walletProviders, children: _jsx(ResolverProviders, { walletProviders: walletProviders, children: _jsx(BalanceAccountsProvider, { children: _jsx(AsyncModalProvider, { children: children }) }) }) }) }) }) }) }) }));
48
+ return (_jsx(IntercomProvider, { appId: INTERCOM_APP_ID, initializeDelay: 2500, children: _jsx(SettingsProvider, { initialLayerswapData: appSettings, initialSettings: config?.initialValues, children: _jsx(CallbackProvider, { callbacks: callbacks, children: _jsx(ErrorProvider, { children: _jsx(ErrorBoundary, { FallbackComponent: ErrorFallback, children: _jsx(ThemeWrapper, { children: _jsx(WalletsProviders, { appName: initialValues?.appName, themeData: themeData, walletProviders: walletProviders, children: _jsx(ResolverProviders, { walletProviders: walletProviders, children: _jsx(SwapAccountsProvider, { children: _jsx(AsyncModalProvider, { children: children }) }) }) }) }) }) }) }) }) }));
48
49
  };
49
50
  export const LayerswapProvider = (props) => {
50
51
  return (_jsxs(_Fragment, { children: [_jsx(ColorSchema, { themeData: props.config?.theme }), _jsx("div", { style: { backgroundColor: 'transparent', height: '100%' }, className: "layerswap-styles", children: _jsx(LayerswapProviderComponent, { ...props, children: props.children }) })] }));
@@ -1,58 +1,66 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useCallback } from 'react';
3
- const CallbackContext = createContext({});
4
- export function CallbackProvider({ children, callbacks = {} }) {
5
- return (_jsx(CallbackContext.Provider, { value: callbacks, children: children }));
2
+ import { createContext, useContext, useMemo } from 'react';
3
+ import { ErrorHandler } from '../lib/ErrorHandler';
4
+ const CallbackContext = createContext(undefined);
5
+ export function CallbackProvider({ children, callbacks }) {
6
+ const value = useMemo(() => {
7
+ return {
8
+ onFormChange: (formData) => { try {
9
+ callbacks?.onFormChange?.(formData);
10
+ }
11
+ catch (error) {
12
+ ErrorHandler(error);
13
+ } },
14
+ onSwapCreate: (swapData) => { try {
15
+ callbacks?.onSwapCreate?.(swapData);
16
+ }
17
+ catch (error) {
18
+ ErrorHandler(error);
19
+ } },
20
+ onSwapComplete: (swapData) => { try {
21
+ callbacks?.onSwapComplete?.(swapData);
22
+ }
23
+ catch (error) {
24
+ ErrorHandler(error);
25
+ } },
26
+ onSwapModalStateChange: (open) => { try {
27
+ callbacks?.onSwapModalStateChange?.(open);
28
+ }
29
+ catch (error) {
30
+ ErrorHandler(error);
31
+ } },
32
+ onBackClick: () => { try {
33
+ callbacks?.onBackClick?.();
34
+ }
35
+ catch (error) {
36
+ ErrorHandler(error);
37
+ } },
38
+ onError: (error) => { try {
39
+ callbacks?.onError?.(error);
40
+ }
41
+ catch (error) {
42
+ ErrorHandler(error);
43
+ } },
44
+ onSwapStatusChange: (event) => { try {
45
+ callbacks?.onSwapStatusChange?.(event);
46
+ }
47
+ catch (error) {
48
+ ErrorHandler(error);
49
+ } },
50
+ onMenuNavigationChange: (path) => { try {
51
+ callbacks?.onMenuNavigationChange?.(path);
52
+ }
53
+ catch (error) {
54
+ ErrorHandler(error);
55
+ } },
56
+ };
57
+ }, [callbacks]);
58
+ return (_jsx(CallbackContext.Provider, { value: value, children: children }));
6
59
  }
7
60
  export function useCallbacks() {
8
61
  const context = useContext(CallbackContext);
62
+ if (!context) {
63
+ throw new Error('useCallbacks must be used within a CallbackProvider');
64
+ }
9
65
  return context;
10
66
  }
11
- export function useFormChangeCallback() {
12
- const { onFormChange } = useCallbacks();
13
- return useCallback((formData) => {
14
- if (onFormChange) {
15
- onFormChange(formData);
16
- }
17
- }, [onFormChange]);
18
- }
19
- export function useSwapCreateCallback() {
20
- const { onSwapCreate } = useCallbacks();
21
- return useCallback((swapData) => {
22
- if (onSwapCreate) {
23
- onSwapCreate(swapData);
24
- }
25
- }, [onSwapCreate]);
26
- }
27
- export function useSwapCompleteCallback() {
28
- const { onSwapComplete } = useCallbacks();
29
- return useCallback((swapData) => {
30
- if (onSwapComplete) {
31
- onSwapComplete(swapData);
32
- }
33
- }, [onSwapComplete]);
34
- }
35
- export function useSwapModalStateChangeCallback() {
36
- const { onSwapModalStateChange } = useCallbacks();
37
- return useCallback((open) => {
38
- if (onSwapModalStateChange) {
39
- onSwapModalStateChange(open);
40
- }
41
- }, [onSwapModalStateChange]);
42
- }
43
- export function useBackClickCallback() {
44
- const { onBackClick } = useCallbacks();
45
- return useCallback(() => {
46
- if (onBackClick) {
47
- onBackClick();
48
- }
49
- }, [onBackClick]);
50
- }
51
- export function useErrorCallback() {
52
- const { onError } = useCallbacks();
53
- return useCallback((error) => {
54
- if (onError) {
55
- onError(error);
56
- }
57
- }, [onError]);
58
- }
@@ -3,6 +3,15 @@ import { createContext, useContext, useMemo } from "react";
3
3
  import { resolverService } from "../lib/resolvers/resolverService";
4
4
  const ResolverContext = createContext(null);
5
5
  export const ResolverProviders = ({ children, walletProviders }) => {
6
+ const transferProviders = walletProviders
7
+ .map(provider => provider.transferProvider)
8
+ .flat()
9
+ .filter((provider) => Boolean(provider))
10
+ .map(provider => provider());
11
+ const contractAddressProviders = walletProviders
12
+ .map(provider => provider.contractAddressProvider)
13
+ .flat()
14
+ .filter((provider) => Boolean(provider));
6
15
  const isInitialized = useMemo(() => {
7
16
  // Extract balance providers from wallet providers
8
17
  const balanceProviders = walletProviders
@@ -23,9 +32,9 @@ export const ResolverProviders = ({ children, walletProviders }) => {
23
32
  .map(provider => provider.nftProvider)
24
33
  .flat()
25
34
  .filter((provider) => Boolean(provider));
26
- resolverService.setProviders(balanceProviders, gasProviders, addressUtilsProviders, nftProviders);
35
+ resolverService.setProviders(balanceProviders, gasProviders, addressUtilsProviders, nftProviders, transferProviders, contractAddressProviders);
27
36
  return true;
28
- }, [walletProviders]);
37
+ }, [walletProviders, transferProviders]);
29
38
  return (_jsx(ResolverContext.Provider, { value: { isInitialized }, children: children }));
30
39
  };
31
40
  export const useResolvers = () => {
@@ -7,11 +7,11 @@ import useWallet from '../hooks/useWallet';
7
7
  import { useSettingsState } from './settings';
8
8
  import { transformSwapDataToQuoteArgs, useQuoteData } from '../hooks/useFee';
9
9
  import { useRecentNetworksStore } from '../stores/recentRoutesStore';
10
- import { useSelectedAccount } from './balanceAccounts';
10
+ import { useSelectedAccount } from './swapAccounts';
11
11
  import { useInitialSettings } from './settings';
12
12
  import { addressFormat } from '../lib/address/formatter';
13
13
  import { useSlippageStore } from '../stores/slippageStore';
14
- // import { posthog } from 'posthog-js';
14
+ import { useCallbacks } from './callbackProvider';
15
15
  export const SwapDataStateContext = createContext({
16
16
  depositAddressIsFromAccount: false,
17
17
  withdrawType: undefined,
@@ -31,18 +31,19 @@ export const SwapDataStateContext = createContext({
31
31
  });
32
32
  export const SwapDataUpdateContext = createContext(null);
33
33
  export function SwapDataProvider({ children }) {
34
+ const { sourceRoutes, destinationRoutes } = useSettingsState();
35
+ const initialSettings = useInitialSettings();
36
+ const { onSwapCreate } = useCallbacks();
37
+ const updateRecentTokens = useRecentNetworksStore(state => state.updateRecentNetworks);
38
+ const [swapBasicFormData, setSwapBasicFormData] = useState();
39
+ const { providers } = useWallet(swapBasicFormData?.source_network, 'asSource');
34
40
  const [quoteIsLoading, setQuoteLoading] = useState(false);
35
41
  const [withdrawType, setWithdrawType] = useState();
36
42
  const [depositAddressIsFromAccount, setDepositAddressIsFromAccount] = useState();
37
- const initialSettings = useInitialSettings();
38
43
  const [swapId, setSwapId] = useState(initialSettings.swapId?.toString());
39
44
  const [swapTransaction, setSwapTransaction] = useState();
40
- const { sourceRoutes, destinationRoutes } = useSettingsState();
41
- const [swapBasicFormData, setSwapBasicFormData] = useState();
42
- const updateRecentTokens = useRecentNetworksStore(state => state.updateRecentNetworks);
43
45
  const [swapModalOpen, setSwapModalOpen] = useState(false);
44
46
  const [swapError, setSwapError] = useState('');
45
- const { providers } = useWallet(swapBasicFormData?.source_network, 'asSource');
46
47
  const quoteArgs = useMemo(() => transformSwapDataToQuoteArgs(swapBasicFormData, !!swapBasicFormData?.refuel), [swapBasicFormData]);
47
48
  const { quote: formDataQuote, quoteError: formDataQuoteError } = useQuoteData(quoteArgs, swapId ? 0 : undefined);
48
49
  const handleUpdateSwapid = (value) => {
@@ -169,17 +170,13 @@ export function SwapDataProvider({ children }) {
169
170
  const swap = swapResponse?.data;
170
171
  if (!swap?.swap.id)
171
172
  throw new Error("Could not create swap");
173
+ onSwapCreate(swap);
172
174
  updateRecentTokens({
173
175
  from: !fromExchange ? { network: from.name, token: fromCurrency.symbol } : undefined,
174
176
  to: { network: to.name, token: toCurrency.symbol }
175
177
  });
176
- // posthog.capture('Swap initiated', {
177
- // name: 'Swap initiated',
178
- // swapId: swapDetails?.id ?? null,
179
- // path: typeof window !== 'undefined' ? window.location.pathname : undefined,
180
- // });
181
178
  return swap;
182
- }, [selectedSourceAccount, formDataQuote]);
179
+ }, [selectedSourceAccount, formDataQuote, onSwapCreate]);
183
180
  const updateFns = {
184
181
  createSwap,
185
182
  setInterval,
@@ -3,9 +3,9 @@ import { createContext, useCallback, useContext, useMemo, useState } from 'react
3
3
  import useWallet from '../hooks/useWallet';
4
4
  import AddressIcon from '../components/Common/AddressIcon';
5
5
  import { getKey, useBalanceStore } from '../stores/balanceStore';
6
- const BalanceAccountsStateContext = createContext(null);
7
- const BalanceAccountsUpdateContext = createContext(null);
8
- export function BalanceAccountsProvider({ children }) {
6
+ const SwapAccountsStateContext = createContext(null);
7
+ const SwapAccountsUpdateContext = createContext(null);
8
+ export function SwapAccountsProvider({ children }) {
9
9
  const [selectedDestAccounts, setSelectedDestinationAccounts] = useState([]);
10
10
  const [selectedSourceAccounts, setSelectedSourceAccounts] = useState([]);
11
11
  const { providers } = useWallet();
@@ -17,7 +17,7 @@ export function BalanceAccountsProvider({ children }) {
17
17
  const wallet = selectedWallet || provider.activeWallet;
18
18
  const selectedAccountAddress = selectedWallet ? selectedSourceAccounts.find(acc => acc.providerName === provider.name && acc.id === selectedWallet.id)?.address : undefined;
19
19
  const address = selectedAccountAddress ? selectedAccountAddress : wallet.address;
20
- const res = ResolveWalletBalanceAccount(provider, wallet, address);
20
+ const res = ResolveWalletSwapAccount(provider, wallet, address);
21
21
  if (!selectedAccountAddress) {
22
22
  setSelectedSourceAccounts(prev => {
23
23
  const existingAccountIndex = prev.findIndex(acc => acc.providerName === res.providerName);
@@ -36,7 +36,7 @@ export function BalanceAccountsProvider({ children }) {
36
36
  return providers.map(provider => {
37
37
  const manuallyAdded = selectedDestAccounts.find(acc => acc.providerName === provider.name && acc.id === 'manually_added');
38
38
  if (manuallyAdded) {
39
- return ResolveManualBalanceAccount(provider, manuallyAdded.address);
39
+ return ResolveManualSwapAccount(provider, manuallyAdded.address);
40
40
  }
41
41
  if (!hasWallet(provider))
42
42
  return null;
@@ -44,7 +44,7 @@ export function BalanceAccountsProvider({ children }) {
44
44
  const wallet = selectedWallet || provider.activeWallet;
45
45
  const selectedAccountAddress = selectedWallet ? selectedDestAccounts.find(acc => acc.providerName === provider.name && acc.id === selectedWallet.id)?.address : undefined;
46
46
  const address = selectedAccountAddress ? selectedAccountAddress : wallet.address;
47
- return ResolveWalletBalanceAccount(provider, wallet, address);
47
+ return ResolveWalletSwapAccount(provider, wallet, address);
48
48
  }).filter(Boolean);
49
49
  }, [providers, selectedDestAccounts]);
50
50
  const selectDestinationAccount = useCallback((account) => {
@@ -81,21 +81,21 @@ export function BalanceAccountsProvider({ children }) {
81
81
  selectDestinationAccount,
82
82
  selectSourceAccount,
83
83
  }), [sourceAccounts, destinationAccounts, selectSourceAccount, selectDestinationAccount]);
84
- return (_jsx(BalanceAccountsStateContext.Provider, { value: stateValues, children: _jsx(BalanceAccountsUpdateContext.Provider, { value: update, children: children }) }));
84
+ return (_jsx(SwapAccountsStateContext.Provider, { value: stateValues, children: _jsx(SwapAccountsUpdateContext.Provider, { value: update, children: children }) }));
85
85
  }
86
- export function useBalanceAccounts(direction) {
87
- const values = useContext(BalanceAccountsStateContext);
86
+ export function useSwapAccounts(direction) {
87
+ const values = useContext(SwapAccountsStateContext);
88
88
  if (values === undefined) {
89
- throw new Error('useBalanceAccounts must be used within a BalanceAccountsProvider');
89
+ throw new Error('useSwapAccounts must be used within a SwapAccountsProvider');
90
90
  }
91
91
  return direction === "from" ? values.sourceAccounts : values.destinationAccounts;
92
92
  }
93
93
  export function useSelectedAccount(direction, networkName) {
94
- const values = useContext(BalanceAccountsStateContext);
94
+ const values = useContext(SwapAccountsStateContext);
95
95
  if (!networkName)
96
96
  return undefined;
97
97
  if (values === undefined) {
98
- throw new Error('useBalanceAccounts must be used within a BalanceAccountsProvider');
98
+ throw new Error('useSwapAccounts must be used within a SwapAccountsProvider');
99
99
  }
100
100
  return direction === "from" ? values.sourceAccounts.find(acc => acc.provider.withdrawalSupportedNetworks?.some(n => n === networkName))
101
101
  :
@@ -117,17 +117,17 @@ export function useNetworkBalance(direction, networkName) {
117
117
  const balance = useBalanceStore((s) => (s.balances[balanceKey || "unknown"]));
118
118
  return balance;
119
119
  }
120
- export function useUpdateBalanceAccount(direction) {
121
- const values = useContext(BalanceAccountsUpdateContext);
120
+ export function useSelectSwapAccount(direction) {
121
+ const values = useContext(SwapAccountsUpdateContext);
122
122
  if (values === undefined) {
123
- throw new Error('useUpdateBalanceAccount must be used within a BalanceAccountsUpdateContext');
123
+ throw new Error('useSelectSwapAccount must be used within a SwapAccountsUpdateContext');
124
124
  }
125
125
  return direction === "from" ? values.selectSourceAccount : values.selectDestinationAccount;
126
126
  }
127
127
  function hasWallet(p) {
128
128
  return Boolean(p.activeWallet);
129
129
  }
130
- function ResolveWalletBalanceAccount(provider, wallet, address) {
130
+ function ResolveWalletSwapAccount(provider, wallet, address) {
131
131
  return {
132
132
  address,
133
133
  provider,
@@ -141,7 +141,7 @@ function ResolveWalletBalanceAccount(provider, wallet, address) {
141
141
  icon: wallet.icon || ((props) => _jsx(AddressIcon, { address: address, size: 24, ...props })),
142
142
  };
143
143
  }
144
- function ResolveManualBalanceAccount(provider, address) {
144
+ function ResolveManualSwapAccount(provider, address) {
145
145
  return {
146
146
  address,
147
147
  provider,
@@ -6,7 +6,7 @@ import { transformFormValuesToQuoteArgs, useQuoteData } from '../hooks/useFee';
6
6
  import { resolveFormValidation } from '../hooks/useFormValidation';
7
7
  import { resolveRouteValidation } from '../hooks/useRouteValidation';
8
8
  import { useSwapDataState } from './swap';
9
- import { useSelectedAccount } from './balanceAccounts';
9
+ import { useSelectedAccount } from './swapAccounts';
10
10
  const defaultContext = {
11
11
  formValidation: { message: '' },
12
12
  routeValidation: { message: '', details: {} },
@@ -8,10 +8,15 @@ import { ChevronLeft } from "lucide-react";
8
8
  import ConnectorsList from "../components/Wallet/WalletModal/ConnectorsList";
9
9
  import { useConnectModal } from "../components/Wallet/WalletModal";
10
10
  import { isMobile } from "../lib/wallets/utils/isMobile";
11
+ import AppSettings from "../lib/AppSettings";
12
+ import { filterSourceNetworks } from "../helpers/filterSourceNetworks";
13
+ import useWindowDimensions from "../hooks/useWindowDimensions";
11
14
  const WalletProvidersContext = createContext([]);
12
15
  export const WalletProvidersProvider = ({ children, walletProviders }) => {
13
16
  const { networks } = useSettingsState();
17
+ const settings = useSettingsState();
14
18
  const isMobilePlatform = isMobile();
19
+ const { isMobile: isMobileSize } = useWindowDimensions();
15
20
  const { goBack, onFinish, open, setOpen, selectedConnector, selectedMultiChainConnector } = useConnectModal();
16
21
  const allProviders = walletProviders.map(provider => provider.walletConnectionProvider ? provider.walletConnectionProvider({ networks }) : undefined).filter(provider => provider !== undefined);
17
22
  const providers = useMemo(() => {
@@ -19,9 +24,10 @@ export const WalletProvidersProvider = ({ children, walletProviders }) => {
19
24
  networks.some(net => provider.autofillSupportedNetworks?.includes(net.name) ||
20
25
  provider.withdrawalSupportedNetworks?.includes(net.name) ||
21
26
  provider.asSourceSupportedNetworks?.includes(net.name)));
27
+ AppSettings.AvailableSourceNetworkTypes = filterSourceNetworks(settings, filteredProviders);
22
28
  return filteredProviders;
23
29
  }, [networks, isMobilePlatform, allProviders]);
24
30
  return (_jsxs(WalletProvidersContext.Provider, { value: providers, children: [children, _jsx(VaulDrawer, { show: open, setShow: setOpen, onClose: onFinish, modalId: "connectNewWallet", header: _jsxs("div", { className: "flex items-center gap-1", children: [(selectedConnector || selectedMultiChainConnector) &&
25
- _jsx("div", { className: "sm:-ml-2 -ml-0", children: _jsx(IconButton, { onClick: goBack, icon: _jsx(ChevronLeft, { className: "h-6 w-6" }) }) }), _jsx("p", { children: (selectedMultiChainConnector && !selectedConnector) ? "Select ecosystem" : "Connect wallet" })] }), children: _jsx(VaulDrawer.Snap, { openFullHeight: !isMobilePlatform, id: 'item-1', className: "pb-4 sm:!pb-0 sm:h-full", children: _jsx(ConnectorsList, { onFinish: onFinish }) }) })] }));
31
+ _jsx("div", { className: "sm:-ml-2 ml-0", children: _jsx(IconButton, { onClick: goBack, icon: _jsx(ChevronLeft, { className: "h-6 w-6" }) }) }), _jsx("p", { children: (selectedMultiChainConnector && !selectedConnector) ? "Select ecosystem" : "Connect wallet" })] }), children: _jsx(VaulDrawer.Snap, { openFullHeight: !isMobileSize, id: 'item-1', className: "pb-4 sm:pb-0! sm:h-full", children: _jsx(ConnectorsList, { onFinish: onFinish }) }) })] }));
26
32
  };
27
33
  export const useWalletProviders = () => useContext(WalletProvidersContext);
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from 'react';
3
3
  const WalletWithdrawalContext = React.createContext(null);
4
- export const WithdrawalProvider = ({ onWalletWithdrawalSuccess, children }) => {
5
- return (_jsx(WalletWithdrawalContext.Provider, { value: { onWalletWithdrawalSuccess }, children: children }));
4
+ export const WithdrawalProvider = ({ onWalletWithdrawalSuccess, onCancelWithdrawal, children }) => {
5
+ return (_jsx(WalletWithdrawalContext.Provider, { value: { onWalletWithdrawalSuccess, onCancelWithdrawal }, children: children }));
6
6
  };
7
7
  export function useWalletWithdrawalState() {
8
8
  const data = React.useContext(WalletWithdrawalContext);
@@ -3,8 +3,6 @@ import KnownInternalNames from "../lib/knownIds";
3
3
  export { KnownInternalNames };
4
4
  import NetworkSettings from "../lib/NetworkSettings";
5
5
  export { NetworkSettings };
6
- import logError from "../lib/logError";
7
- export { logError };
8
6
  export { insertIfNotExists } from "../lib/balances/helpers";
9
7
  export * from "../lib/retry";
10
8
  export { fetchWithTimeout } from "../lib/fetchWithTimeout";
@@ -18,11 +16,14 @@ export * from "../components/shadcn";
18
16
  export { default as WalletMessage } from "../components/Pages/Swap/Withdraw/messages/Message";
19
17
  export * from "../components/Buttons";
20
18
  export * from "../components/Pages/Swap/Withdraw/Wallet/Common/buttons";
19
+ export * from "../components/Pages/Swap/Withdraw/Wallet/Common/actionMessage";
21
20
  export { default as ClickTooltip } from "../components/Common/ClickTooltip";
22
- export { useSelectedAccount, useUpdateBalanceAccount, useBalanceAccounts, useNetworkBalance } from "../context/balanceAccounts";
21
+ export { useSelectedAccount, useSelectSwapAccount, useSwapAccounts, useNetworkBalance } from "../context/swapAccounts";
23
22
  export { default as useWallet } from "../hooks/useWallet";
24
23
  export * from "../lib/apiClients";
25
24
  export * from "../lib/formatUnits";
26
25
  export * from "../stores";
27
26
  export { default as shortenAddress } from "../components/utils/ShortenAddress";
28
27
  export * from "../context/swap";
28
+ export { useWalletProvidersList } from "../components/Wallet/WalletProviders";
29
+ export { ErrorHandler } from '../lib/ErrorHandler';
@@ -0,0 +1,23 @@
1
+ export function filterSourceNetworks(settings, walletProviders) {
2
+ const networkTypesAggregation = settings.sourceRoutes?.reduce((acc, route) => {
3
+ if (!acc[route.type]) {
4
+ acc[route.type] = [];
5
+ }
6
+ acc[route.type].push(route);
7
+ return acc;
8
+ }, {}) || {};
9
+ const allNetworkTypes = Object.keys(networkTypesAggregation);
10
+ const availableNetworkTypes = allNetworkTypes.filter(networkType => {
11
+ return networkTypesAggregation[networkType].some(route => route.deposit_methods.includes("deposit_address") ||
12
+ walletProviders.some(provider => provider.withdrawalSupportedNetworks.includes(route.name)));
13
+ });
14
+ if (availableNetworkTypes.length === allNetworkTypes.length) {
15
+ return {
16
+ all: true,
17
+ };
18
+ }
19
+ return {
20
+ all: false,
21
+ networks: availableNetworkTypes
22
+ };
23
+ }
@@ -2,17 +2,22 @@ import LayerSwapApiClient from "../../lib/apiClients/layerSwapApiClient";
2
2
  export async function getSettings(apiKey) {
3
3
  const apiClient = new LayerSwapApiClient();
4
4
  LayerSwapApiClient.apiKey = apiKey;
5
- const { data: networkData } = await apiClient.GetLSNetworksAsync();
6
- const { data: sourceExchangesData } = await apiClient.GetSourceExchangesAsync();
7
- const { data: sourceRoutes } = await apiClient.GetRoutesAsync('sources');
8
- const { data: destinationRoutes } = await apiClient.GetRoutesAsync('destinations');
9
- if (!networkData)
10
- return;
11
- const settings = {
12
- networks: networkData,
13
- sourceExchanges: sourceExchangesData || [],
14
- sourceRoutes: sourceRoutes || [],
15
- destinationRoutes: destinationRoutes || []
16
- };
17
- return settings;
5
+ try {
6
+ const { data: networkData } = await apiClient.GetLSNetworksAsync();
7
+ const { data: sourceExchangesData } = await apiClient.GetSourceExchangesAsync();
8
+ const { data: sourceRoutes } = await apiClient.GetRoutesAsync('sources');
9
+ const { data: destinationRoutes } = await apiClient.GetRoutesAsync('destinations');
10
+ if (!networkData)
11
+ return;
12
+ const settings = {
13
+ networks: networkData,
14
+ sourceExchanges: sourceExchangesData || [],
15
+ sourceRoutes: sourceRoutes || [],
16
+ destinationRoutes: destinationRoutes || []
17
+ };
18
+ return settings;
19
+ }
20
+ catch (error) {
21
+ return null;
22
+ }
18
23
  }
@@ -1,3 +1,4 @@
1
+ import AppSettings from "../lib/AppSettings";
1
2
  export const resolveExchangesURLForSelectedToken = (values) => {
2
3
  const include_unmatched = 'true';
3
4
  const include_swaps = 'false';
@@ -62,7 +63,9 @@ export const resolveRoutesURLForSelectedToken = ({ direction, network, token, in
62
63
  }
63
64
  : {})
64
65
  });
65
- const sourceRoutesURL = `/sources?${params.toString()}`;
66
+ const availableNetworkTypes = AppSettings.AvailableSourceNetworkTypes;
67
+ const networkTypesQuery = availableNetworkTypes?.all ? '' : availableNetworkTypes?.networks?.map(type => `network_types=${type}`).join('&') || '';
68
+ const sourceRoutesURL = `/sources?${params.toString()}${networkTypesQuery ? `&${networkTypesQuery}` : ''}`;
66
69
  const destinationRoutesURL = `/destinations?${params.toString()}`;
67
70
  const result = direction === "from" ? sourceRoutesURL : destinationRoutesURL;
68
71
  return result;
@@ -1,12 +1,12 @@
1
1
  import { useSettingsState } from "../context/settings";
2
2
  import { selectResolvedSortingBalances, useBalanceStore } from "../stores/balanceStore";
3
3
  import { useEffect, useMemo, useRef } from "react";
4
- import { useBalanceAccounts } from "../context/balanceAccounts";
4
+ import { useSwapAccounts } from "../context/swapAccounts";
5
5
  export default function useAllWithdrawalBalances() {
6
6
  const networks = useSettingsState().networks;
7
- const balanceAccounts = useBalanceAccounts("from");
7
+ const swapAccounts = useSwapAccounts("from");
8
8
  const walletNetworks = useMemo(() => {
9
- return balanceAccounts.map(account => {
9
+ return swapAccounts.map(account => {
10
10
  const withdrawalNetworks = account.walletWithdrawalSupportedNetworks;
11
11
  if (!withdrawalNetworks || withdrawalNetworks.length === 0)
12
12
  return [];
@@ -20,7 +20,7 @@ export default function useAllWithdrawalBalances() {
20
20
  };
21
21
  });
22
22
  }).flat().filter(item => item !== null);
23
- }, [balanceAccounts, networks]);
23
+ }, [swapAccounts, networks]);
24
24
  const walletNetwokrsString = useMemo(() => {
25
25
  return walletNetworks.map(item => `${item.address}-${item.network.name}`).join(',');
26
26
  }, [walletNetworks]);
@@ -28,12 +28,18 @@ export default function useAllWithdrawalBalances() {
28
28
  if (walletNetworks)
29
29
  useBalanceStore.getState().initSortingBalances(walletNetworks);
30
30
  }, [walletNetwokrsString]);
31
+ useEffect(() => {
32
+ return () => {
33
+ useBalanceStore.getState().cleanupSortingBalances();
34
+ };
35
+ }, []);
31
36
  const lastBalancesRef = useRef(null);
32
37
  const resolvedBalances = useBalanceStore(selectResolvedSortingBalances);
33
38
  const isLoading = useBalanceStore(s => s.sortingDataIsLoading);
39
+ const partialPublished = useBalanceStore(s => s.partialPublished);
34
40
  if (resolvedBalances != null && Object.keys(resolvedBalances).length > 0) {
35
41
  lastBalancesRef.current = resolvedBalances;
36
42
  }
37
43
  const result = resolvedBalances === null && isLoading ? lastBalancesRef.current : resolvedBalances;
38
- return useMemo(() => ({ isLoading, balances: result }), [result, isLoading]);
44
+ return useMemo(() => ({ isLoading, balances: result, partialPublished }), [result, isLoading, partialPublished]);
39
45
  }
@@ -0,0 +1,72 @@
1
+ import { useMemo } from "react";
2
+ export function useConnectors({ featuredProviders, filteredProviders, searchValue, recentConnectors, }) {
3
+ const featuredConnectors = useMemo(() => featuredProviders
4
+ .filter(g => g.availableWalletsForConnect && g.availableWalletsForConnect?.length > 0)
5
+ .map((provider) => provider.availableWalletsForConnect
6
+ ?.filter(v => searchValue ? v.name.toLowerCase().includes(searchValue.toLowerCase()) : true)
7
+ .map((connector) => ({ ...connector, providerName: provider.name })))
8
+ .flat(), [featuredProviders, searchValue]);
9
+ const hiddenConnectors = useMemo(() => featuredProviders
10
+ .filter(g => g.availableHiddenWalletsForConnect && g.availableHiddenWalletsForConnect?.length > 0)
11
+ .map((provider) => provider.availableHiddenWalletsForConnect
12
+ ?.filter(v => (searchValue ? v.name.toLowerCase().includes(searchValue.toLowerCase()) : true) &&
13
+ !featuredWalletsIds.includes(v.id.toLowerCase()))
14
+ .map((connector) => ({ ...connector, providerName: provider.name, isHidden: true })))
15
+ .flat(), [featuredProviders, searchValue]);
16
+ const initialConnectors = useMemo(() => {
17
+ return removeDuplicatesWithKey([...featuredConnectors, ...hiddenConnectors]
18
+ .sort((a, b) => sortRecentConnectors(a, b, recentConnectors)), 'name');
19
+ }, [featuredConnectors, hiddenConnectors, searchValue?.length, recentConnectors]);
20
+ return {
21
+ featuredConnectors,
22
+ hiddenConnectors,
23
+ initialConnectors,
24
+ featuredProviders,
25
+ filteredProviders,
26
+ };
27
+ }
28
+ const featuredWalletsIds = [
29
+ 'metamask',
30
+ 'argent',
31
+ 'rainbow',
32
+ 'bitkeep',
33
+ 'okx-wallet',
34
+ ];
35
+ function removeDuplicatesWithKey(arr, key) {
36
+ const countMap = {};
37
+ // First pass: Count occurrences of each unique key.
38
+ arr.forEach(item => {
39
+ const identifier = item[key];
40
+ countMap[identifier] = (countMap[identifier] || 0) + 1;
41
+ });
42
+ // Second pass: Create a new array with one instance of each object.
43
+ const unique = [];
44
+ const seen = new Set();
45
+ arr.forEach(item => {
46
+ const identifier = item[key];
47
+ if (!seen.has(identifier)) {
48
+ seen.add(identifier);
49
+ // Add a property 'duplicateCount' to indicate extra duplicates found.
50
+ unique.push({
51
+ ...item,
52
+ isMultiChain: countMap[identifier] > 1
53
+ });
54
+ }
55
+ });
56
+ return unique;
57
+ }
58
+ export function sortRecentConnectors(a, b, recentConnectors) {
59
+ function getIndex(c) {
60
+ const idx = recentConnectors?.findIndex(v => v.connectorName === c.name);
61
+ return idx === -1 ? Infinity : idx;
62
+ }
63
+ const indexA = getIndex(a);
64
+ const indexB = getIndex(b);
65
+ if (indexA !== indexB) {
66
+ return indexA - indexB;
67
+ }
68
+ if (a.type && b.type) {
69
+ return a.type.localeCompare(b.type);
70
+ }
71
+ return 0;
72
+ }