@lifi/widget 2.0.0-beta.0 → 2.0.0-beta.10

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 (289) hide show
  1. package/App.d.ts +4 -3
  2. package/AppDrawer.d.ts +1 -1
  3. package/AppDrawer.js +2 -1
  4. package/AppProvider.js +1 -1
  5. package/README.md +11 -12
  6. package/cjs/App.d.ts +4 -3
  7. package/cjs/AppDrawer.d.ts +1 -1
  8. package/cjs/AppDrawer.js +2 -1
  9. package/cjs/AppProvider.js +1 -1
  10. package/cjs/components/ChainSelect/ChainSelect.d.ts +1 -1
  11. package/cjs/components/ChainSelect/ChainSelect.style.js +1 -1
  12. package/cjs/components/ChainSelect/useChainSelect.js +6 -0
  13. package/cjs/components/GasMessage/FundsSufficiencyMessage.d.ts +1 -1
  14. package/cjs/components/GasMessage/GasMessage.js +1 -6
  15. package/cjs/components/Header/Header.js +2 -2
  16. package/cjs/components/Header/Header.style.d.ts +10 -3
  17. package/cjs/components/Header/Header.style.js +3 -0
  18. package/cjs/components/Header/NavigationHeader.js +23 -7
  19. package/cjs/components/Header/NavigationTabs.d.ts +1 -0
  20. package/cjs/components/Header/NavigationTabs.js +26 -0
  21. package/cjs/components/Header/NavigationTabs.style.d.ts +34 -0
  22. package/cjs/components/Header/NavigationTabs.style.js +61 -0
  23. package/cjs/components/Header/WalletHeader.d.ts +1 -0
  24. package/cjs/components/Header/WalletHeader.js +16 -9
  25. package/cjs/components/Header/useHeaderActionStore.js +0 -1
  26. package/cjs/components/Insurance/Insurance.js +2 -2
  27. package/cjs/components/Insurance/InsuranceCard.js +34 -12
  28. package/cjs/components/Insurance/InsuranceCollapsed.js +9 -11
  29. package/cjs/components/Insurance/index.d.ts +1 -0
  30. package/cjs/components/Insurance/index.js +1 -0
  31. package/cjs/components/Insurance/types.d.ts +12 -9
  32. package/cjs/components/NFT/NFT.js +2 -2
  33. package/cjs/components/NFT/types.d.ts +1 -1
  34. package/cjs/components/PoweredBy/PoweredBy.js +2 -3
  35. package/cjs/components/SelectChainAndToken.js +8 -7
  36. package/cjs/components/SelectTokenButton/SelectTokenButton.js +6 -3
  37. package/cjs/components/SendToWallet/SendToWallet.js +2 -2
  38. package/cjs/components/SmallAvatar.d.ts +1 -1
  39. package/cjs/components/Step/CircularProgress.d.ts +1 -1
  40. package/cjs/components/Step/Step.js +15 -5
  41. package/cjs/components/Step/StepList.d.ts +1 -1
  42. package/cjs/components/StepActions/StepActions.js +4 -20
  43. package/cjs/components/SwapButton/SwapButton.js +16 -4
  44. package/cjs/components/SwapInput/FormPriceHelperText.js +1 -1
  45. package/cjs/components/SwapInput/SwapInput.js +2 -2
  46. package/cjs/components/SwapInput/SwapInputEndAdornment.d.ts +1 -1
  47. package/cjs/components/SwapInput/SwapInputEndAdornment.js +2 -2
  48. package/cjs/components/SwapRouteCard/SwapRouteCard.js +19 -3
  49. package/cjs/components/SwapRouteCard/SwapRouteCardEssentials.js +1 -1
  50. package/cjs/components/SwapRouteCard/SwapRouteCardSkeleton.js +1 -1
  51. package/cjs/components/SwapRoutes/SwapRoutes.js +1 -1
  52. package/cjs/components/SwapRoutes/SwapRoutesExpanded.d.ts +2 -2
  53. package/cjs/components/SwapRoutes/SwapRoutesExpanded.js +2 -2
  54. package/cjs/components/SwapRoutes/SwapRoutesExpanded.style.js +1 -0
  55. package/cjs/components/Token/Token.js +1 -1
  56. package/cjs/components/TokenAvatar/TokenAvatar.d.ts +4 -4
  57. package/cjs/components/TokenList/TokenList.js +9 -4
  58. package/cjs/components/TokenList/TokenList.style.d.ts +5 -2
  59. package/cjs/components/TokenList/TokenList.style.js +20 -1
  60. package/cjs/components/TokenList/TokenListItem.d.ts +1 -1
  61. package/cjs/components/TokenList/TokenListItem.js +28 -5
  62. package/cjs/components/TokenList/VirtualizedTokenList.js +3 -3
  63. package/cjs/components/TokenList/types.d.ts +6 -3
  64. package/cjs/config/theme.js +15 -3
  65. package/cjs/config/version.d.ts +1 -1
  66. package/cjs/config/version.js +1 -1
  67. package/cjs/hooks/index.d.ts +2 -1
  68. package/cjs/hooks/index.js +2 -1
  69. package/cjs/hooks/useContentHeight.js +3 -5
  70. package/cjs/hooks/useFeaturedTokens.d.ts +1 -1
  71. package/cjs/hooks/useFundsSufficiency.js +2 -2
  72. package/cjs/hooks/useGasRefuel.d.ts +1 -1
  73. package/cjs/hooks/useGasRefuel.js +5 -15
  74. package/cjs/hooks/useGasSufficiency.js +12 -3
  75. package/cjs/hooks/useInitializer.js +0 -1
  76. package/cjs/hooks/useProcessMessage.d.ts +2 -1
  77. package/cjs/hooks/useProcessMessage.js +27 -9
  78. package/cjs/hooks/useRouteExecution.js +6 -5
  79. package/cjs/hooks/useSwapOnly.d.ts +1 -0
  80. package/cjs/hooks/useSwapOnly.js +9 -0
  81. package/cjs/hooks/useSwapRoutes.d.ts +1 -2
  82. package/cjs/hooks/useSwapRoutes.js +32 -18
  83. package/cjs/hooks/useToken.d.ts +1 -1
  84. package/cjs/hooks/useTokenAddressBalance.d.ts +2 -2
  85. package/cjs/hooks/useTokenBalance.js +6 -7
  86. package/cjs/hooks/useTokenBalances.d.ts +5 -5
  87. package/cjs/hooks/useTokenBalances.js +4 -19
  88. package/cjs/hooks/useTokenSearch.d.ts +2 -2
  89. package/cjs/hooks/useTokens.d.ts +2 -2
  90. package/cjs/i18n/bn.json +8 -0
  91. package/cjs/i18n/en.json +30 -5
  92. package/cjs/i18n/fr.json +8 -0
  93. package/cjs/i18n/id.json +22 -7
  94. package/cjs/i18n/ko.json +22 -7
  95. package/cjs/i18n/pt.json +40 -12
  96. package/cjs/i18n/th.json +21 -6
  97. package/cjs/i18n/uk.json +45 -20
  98. package/cjs/i18n/zh.json +23 -8
  99. package/cjs/icons/InsuraceLogo.d.ts +1 -1
  100. package/cjs/icons/LiFiFullLogo.d.ts +1 -1
  101. package/cjs/icons/LiFiLogo.d.ts +1 -1
  102. package/cjs/icons/LiFiToolLogo.d.ts +1 -1
  103. package/cjs/index.d.ts +1 -1
  104. package/cjs/pages/ActiveSwapsPage/ActiveSwapsPage.d.ts +1 -1
  105. package/cjs/pages/SelectTokenPage/SearchTokenInput.d.ts +1 -1
  106. package/cjs/pages/SelectTokenPage/SelectTokenPage.js +3 -1
  107. package/cjs/pages/SelectWalletPage/SelectWalletPage.d.ts +1 -1
  108. package/cjs/pages/SelectWalletPage/SelectWalletPage.js +5 -5
  109. package/cjs/pages/SettingsPage/GasPriceSelect.d.ts +1 -1
  110. package/cjs/pages/SettingsPage/LanguageSelect.js +1 -1
  111. package/cjs/pages/SettingsPage/SettingsPage.d.ts +1 -1
  112. package/cjs/pages/SettingsPage/ShowDestinationWallet.d.ts +1 -1
  113. package/cjs/pages/SettingsPage/SlippageInput.d.ts +1 -1
  114. package/cjs/pages/SwapDetailsPage/SwapDetailsPage.js +6 -2
  115. package/cjs/pages/SwapPage/ExchangeRateBottomSheet.js +1 -1
  116. package/cjs/pages/SwapPage/StatusBottomSheet.js +15 -9
  117. package/cjs/pages/SwapPage/StatusBottomSheet.style.d.ts +1 -1
  118. package/cjs/pages/SwapPage/StatusBottomSheet.style.js +2 -2
  119. package/cjs/pages/SwapPage/SwapPage.js +31 -10
  120. package/cjs/pages/SwapPage/TokenValueBottomSheet.js +7 -12
  121. package/cjs/pages/SwapPage/utils.d.ts +2 -0
  122. package/cjs/pages/SwapPage/utils.js +10 -0
  123. package/cjs/providers/I18nProvider/I18nProvider.js +3 -3
  124. package/cjs/providers/SDKProvider/SDKProvider.js +2 -0
  125. package/cjs/providers/SwapFormProvider/FormUpdater.js +3 -0
  126. package/cjs/providers/WalletProvider/WalletProvider.js +107 -35
  127. package/cjs/providers/WalletProvider/index.d.ts +1 -1
  128. package/cjs/providers/WalletProvider/index.js +1 -1
  129. package/cjs/providers/WalletProvider/types.d.ts +4 -6
  130. package/cjs/providers/WidgetProvider/WidgetProvider.js +1 -1
  131. package/cjs/stores/StoreProvider.d.ts +2 -2
  132. package/cjs/stores/StoreProvider.js +3 -2
  133. package/cjs/stores/routes/RouteExecutionStore.d.ts +1 -1
  134. package/cjs/stores/routes/RouteExecutionStore.js +0 -1
  135. package/cjs/stores/settings/index.d.ts +1 -0
  136. package/cjs/stores/settings/index.js +1 -0
  137. package/cjs/stores/settings/types.d.ts +11 -0
  138. package/cjs/stores/settings/useSplitSubvariantStore.d.ts +7 -0
  139. package/cjs/stores/settings/useSplitSubvariantStore.js +44 -0
  140. package/cjs/types/events.d.ts +9 -1
  141. package/cjs/types/events.js +1 -0
  142. package/cjs/types/token.d.ts +2 -2
  143. package/cjs/types/widget.d.ts +13 -8
  144. package/cjs/types/widget.js +4 -2
  145. package/cjs/utils/format.d.ts +1 -1
  146. package/cjs/utils/format.js +7 -12
  147. package/cjs/utils/wallet.d.ts +1 -1
  148. package/cjs/utils/wallet.js +3 -3
  149. package/components/ChainSelect/ChainSelect.d.ts +1 -1
  150. package/components/ChainSelect/ChainSelect.style.js +1 -1
  151. package/components/ChainSelect/useChainSelect.js +7 -1
  152. package/components/GasMessage/FundsSufficiencyMessage.d.ts +1 -1
  153. package/components/GasMessage/GasMessage.js +2 -7
  154. package/components/Header/Header.js +3 -3
  155. package/components/Header/Header.style.d.ts +10 -3
  156. package/components/Header/Header.style.js +3 -0
  157. package/components/Header/NavigationHeader.js +23 -7
  158. package/components/Header/NavigationTabs.d.ts +1 -0
  159. package/components/Header/NavigationTabs.js +22 -0
  160. package/components/Header/NavigationTabs.style.d.ts +34 -0
  161. package/components/Header/NavigationTabs.style.js +58 -0
  162. package/components/Header/WalletHeader.d.ts +1 -0
  163. package/components/Header/WalletHeader.js +14 -8
  164. package/components/Header/useHeaderActionStore.js +0 -1
  165. package/components/Insurance/Insurance.js +2 -2
  166. package/components/Insurance/InsuranceCard.js +37 -15
  167. package/components/Insurance/InsuranceCollapsed.js +9 -11
  168. package/components/Insurance/index.d.ts +1 -0
  169. package/components/Insurance/index.js +1 -0
  170. package/components/Insurance/types.d.ts +12 -9
  171. package/components/NFT/NFT.js +2 -2
  172. package/components/NFT/types.d.ts +1 -1
  173. package/components/PoweredBy/PoweredBy.js +2 -3
  174. package/components/SelectChainAndToken.js +9 -8
  175. package/components/SelectTokenButton/SelectTokenButton.js +7 -4
  176. package/components/SendToWallet/SendToWallet.js +2 -2
  177. package/components/SmallAvatar.d.ts +1 -1
  178. package/components/Step/CircularProgress.d.ts +1 -1
  179. package/components/Step/Step.js +16 -6
  180. package/components/Step/StepList.d.ts +1 -1
  181. package/components/StepActions/StepActions.js +4 -20
  182. package/components/SwapButton/SwapButton.js +16 -4
  183. package/components/SwapInput/FormPriceHelperText.js +2 -2
  184. package/components/SwapInput/SwapInput.js +3 -3
  185. package/components/SwapInput/SwapInputEndAdornment.d.ts +1 -1
  186. package/components/SwapInput/SwapInputEndAdornment.js +2 -2
  187. package/components/SwapRouteCard/SwapRouteCard.js +21 -5
  188. package/components/SwapRouteCard/SwapRouteCardEssentials.js +1 -1
  189. package/components/SwapRouteCard/SwapRouteCardSkeleton.js +1 -1
  190. package/components/SwapRoutes/SwapRoutes.js +1 -1
  191. package/components/SwapRoutes/SwapRoutesExpanded.d.ts +2 -2
  192. package/components/SwapRoutes/SwapRoutesExpanded.js +2 -2
  193. package/components/SwapRoutes/SwapRoutesExpanded.style.js +1 -0
  194. package/components/Token/Token.js +1 -1
  195. package/components/TokenAvatar/TokenAvatar.d.ts +4 -4
  196. package/components/TokenList/TokenList.js +10 -5
  197. package/components/TokenList/TokenList.style.d.ts +5 -2
  198. package/components/TokenList/TokenList.style.js +21 -2
  199. package/components/TokenList/TokenListItem.d.ts +1 -1
  200. package/components/TokenList/TokenListItem.js +32 -9
  201. package/components/TokenList/VirtualizedTokenList.js +3 -3
  202. package/components/TokenList/types.d.ts +6 -3
  203. package/config/theme.js +15 -3
  204. package/config/version.d.ts +1 -1
  205. package/config/version.js +1 -1
  206. package/hooks/index.d.ts +2 -1
  207. package/hooks/index.js +2 -1
  208. package/hooks/useContentHeight.js +4 -6
  209. package/hooks/useFeaturedTokens.d.ts +1 -1
  210. package/hooks/useFundsSufficiency.js +2 -2
  211. package/hooks/useGasRefuel.d.ts +1 -1
  212. package/hooks/useGasRefuel.js +5 -15
  213. package/hooks/useGasSufficiency.js +13 -4
  214. package/hooks/useInitializer.js +0 -1
  215. package/hooks/useProcessMessage.d.ts +2 -1
  216. package/hooks/useProcessMessage.js +27 -9
  217. package/hooks/useRouteExecution.js +6 -5
  218. package/hooks/useSwapOnly.d.ts +1 -0
  219. package/hooks/useSwapOnly.js +5 -0
  220. package/hooks/useSwapRoutes.d.ts +1 -2
  221. package/hooks/useSwapRoutes.js +32 -18
  222. package/hooks/useToken.d.ts +1 -1
  223. package/hooks/useTokenAddressBalance.d.ts +2 -2
  224. package/hooks/useTokenBalance.js +6 -7
  225. package/hooks/useTokenBalances.d.ts +5 -5
  226. package/hooks/useTokenBalances.js +4 -19
  227. package/hooks/useTokenSearch.d.ts +2 -2
  228. package/hooks/useTokens.d.ts +2 -2
  229. package/i18n/bn.json +8 -0
  230. package/i18n/en.json +30 -5
  231. package/i18n/fr.json +8 -0
  232. package/i18n/id.json +22 -7
  233. package/i18n/ko.json +22 -7
  234. package/i18n/pt.json +40 -12
  235. package/i18n/th.json +21 -6
  236. package/i18n/uk.json +45 -20
  237. package/i18n/zh.json +23 -8
  238. package/icons/InsuraceLogo.d.ts +1 -1
  239. package/icons/LiFiFullLogo.d.ts +1 -1
  240. package/icons/LiFiLogo.d.ts +1 -1
  241. package/icons/LiFiToolLogo.d.ts +1 -1
  242. package/index.d.ts +1 -1
  243. package/package.json +13 -13
  244. package/pages/ActiveSwapsPage/ActiveSwapsPage.d.ts +1 -1
  245. package/pages/SelectTokenPage/SearchTokenInput.d.ts +1 -1
  246. package/pages/SelectTokenPage/SelectTokenPage.js +4 -2
  247. package/pages/SelectWalletPage/SelectWalletPage.d.ts +1 -1
  248. package/pages/SelectWalletPage/SelectWalletPage.js +5 -5
  249. package/pages/SettingsPage/GasPriceSelect.d.ts +1 -1
  250. package/pages/SettingsPage/LanguageSelect.js +1 -1
  251. package/pages/SettingsPage/SettingsPage.d.ts +1 -1
  252. package/pages/SettingsPage/ShowDestinationWallet.d.ts +1 -1
  253. package/pages/SettingsPage/SlippageInput.d.ts +1 -1
  254. package/pages/SwapDetailsPage/SwapDetailsPage.js +6 -2
  255. package/pages/SwapPage/ExchangeRateBottomSheet.js +2 -2
  256. package/pages/SwapPage/StatusBottomSheet.js +18 -12
  257. package/pages/SwapPage/StatusBottomSheet.style.d.ts +1 -1
  258. package/pages/SwapPage/StatusBottomSheet.style.js +1 -1
  259. package/pages/SwapPage/SwapPage.js +33 -12
  260. package/pages/SwapPage/TokenValueBottomSheet.js +8 -13
  261. package/pages/SwapPage/utils.d.ts +2 -0
  262. package/pages/SwapPage/utils.js +6 -0
  263. package/providers/I18nProvider/I18nProvider.js +3 -3
  264. package/providers/SDKProvider/SDKProvider.js +2 -0
  265. package/providers/SwapFormProvider/FormUpdater.js +3 -0
  266. package/providers/WalletProvider/WalletProvider.js +108 -36
  267. package/providers/WalletProvider/index.d.ts +1 -1
  268. package/providers/WalletProvider/index.js +1 -1
  269. package/providers/WalletProvider/types.d.ts +4 -6
  270. package/providers/WidgetProvider/WidgetProvider.js +2 -2
  271. package/stores/StoreProvider.d.ts +2 -2
  272. package/stores/StoreProvider.js +3 -2
  273. package/stores/routes/RouteExecutionStore.d.ts +1 -1
  274. package/stores/routes/RouteExecutionStore.js +0 -1
  275. package/stores/settings/index.d.ts +1 -0
  276. package/stores/settings/index.js +1 -0
  277. package/stores/settings/types.d.ts +11 -0
  278. package/stores/settings/useSplitSubvariantStore.d.ts +7 -0
  279. package/stores/settings/useSplitSubvariantStore.js +37 -0
  280. package/tsconfig.cjs.tsbuildinfo +1 -1
  281. package/types/events.d.ts +9 -1
  282. package/types/events.js +1 -0
  283. package/types/token.d.ts +2 -2
  284. package/types/widget.d.ts +13 -8
  285. package/types/widget.js +4 -2
  286. package/utils/format.d.ts +1 -1
  287. package/utils/format.js +5 -10
  288. package/utils/wallet.d.ts +1 -1
  289. package/utils/wallet.js +1 -1
@@ -8,20 +8,25 @@ const react_1 = require("react");
8
8
  const react_hook_form_1 = require("react-hook-form");
9
9
  const react_i18next_1 = require("react-i18next");
10
10
  const react_router_dom_1 = require("react-router-dom");
11
+ const ContractComponent_1 = require("../../components/ContractComponent");
11
12
  const GasMessage_1 = require("../../components/GasMessage");
12
13
  const Insurance_1 = require("../../components/Insurance");
13
14
  const Step_1 = require("../../components/Step");
14
15
  const hooks_1 = require("../../hooks");
15
16
  const providers_1 = require("../../providers");
16
17
  const stores_1 = require("../../stores");
18
+ const events_1 = require("../../types/events");
19
+ const utils_1 = require("../../utils");
17
20
  const ExchangeRateBottomSheet_1 = require("./ExchangeRateBottomSheet");
18
21
  const StartSwapButton_1 = require("./StartSwapButton");
19
22
  const StatusBottomSheet_1 = require("./StatusBottomSheet");
20
23
  const SwapPage_style_1 = require("./SwapPage.style");
21
24
  const TokenValueBottomSheet_1 = require("./TokenValueBottomSheet");
25
+ const utils_2 = require("./utils");
22
26
  const SwapPage = () => {
23
27
  const { t } = (0, react_i18next_1.useTranslation)();
24
28
  const { setValue } = (0, react_hook_form_1.useFormContext)();
29
+ const emitter = (0, hooks_1.useWidgetEvents)();
25
30
  const { navigateBack } = (0, hooks_1.useNavigateBack)();
26
31
  const { variant, insurance } = (0, providers_1.useWidgetConfig)();
27
32
  const { state } = (0, react_router_dom_1.useLocation)();
@@ -29,21 +34,32 @@ const SwapPage = () => {
29
34
  const [routeId, setRouteId] = (0, react_1.useState)(stateRouteId);
30
35
  const tokenValueBottomSheetRef = (0, react_1.useRef)(null);
31
36
  const exchangeRateBottomSheetRef = (0, react_1.useRef)(null);
37
+ const onAcceptExchangeRateUpdate = (resolver, data) => {
38
+ exchangeRateBottomSheetRef.current?.open(resolver, data);
39
+ };
32
40
  const { route, status, executeRoute, restartRoute, deleteRoute } = (0, hooks_1.useRouteExecution)({
33
41
  routeId: routeId,
34
- onAcceptExchangeRateUpdate: exchangeRateBottomSheetRef.current?.open,
42
+ onAcceptExchangeRateUpdate,
35
43
  });
36
- const handleExecuteRoute = (0, react_1.useCallback)(() => {
44
+ const tokenValueLossThresholdExceeded = (0, TokenValueBottomSheet_1.getTokenValueLossThreshold)(route);
45
+ const handleExecuteRoute = () => {
37
46
  if (tokenValueBottomSheetRef.current?.isOpen()) {
47
+ if (route) {
48
+ emitter.emit(events_1.WidgetEvent.RouteHighValueLoss, {
49
+ fromAmountUsd: route.fromAmountUSD,
50
+ gasCostUSD: route.gasCostUSD,
51
+ toAmountUSD: route.toAmountUSD,
52
+ valueLoss: (0, utils_2.calcValueLoss)(route),
53
+ });
54
+ }
38
55
  tokenValueBottomSheetRef.current?.close();
39
56
  }
40
57
  executeRoute();
41
58
  setValue(providers_1.SwapFormKey.FromAmount, '');
42
- }, [executeRoute, setValue]);
59
+ };
43
60
  const handleSwapClick = async () => {
44
61
  if (status === stores_1.RouteExecutionStatus.Idle) {
45
- const thresholdExceeded = (0, TokenValueBottomSheet_1.getTokenValueLossThreshold)(route);
46
- if (thresholdExceeded) {
62
+ if (tokenValueLossThresholdExceeded && variant !== 'nft') {
47
63
  tokenValueBottomSheetRef.current?.open();
48
64
  }
49
65
  else {
@@ -61,9 +77,14 @@ const SwapPage = () => {
61
77
  const getSwapButtonText = () => {
62
78
  switch (status) {
63
79
  case stores_1.RouteExecutionStatus.Idle:
64
- return variant !== 'refuel'
65
- ? t(`button.startSwap`)
66
- : t(`button.startGasSwap`);
80
+ switch (variant) {
81
+ case 'nft':
82
+ return t('button.buyNow');
83
+ case 'refuel':
84
+ return t('button.startGasSwap');
85
+ default:
86
+ return t('button.startSwap');
87
+ }
67
88
  case stores_1.RouteExecutionStatus.Failed:
68
89
  return t('button.tryAgain');
69
90
  default:
@@ -81,10 +102,10 @@ const SwapPage = () => {
81
102
  const insuranceCoverageId = route?.steps[0].execution?.process
82
103
  .filter((process) => process.type !== 'TOKEN_ALLOWANCE')
83
104
  .find((process) => process.txHash)?.txHash ?? route?.fromAddress;
84
- return ((0, jsx_runtime_1.jsxs)(SwapPage_style_1.Container, { children: [(0, Step_1.getStepList)(route), insuranceAvailable ? ((0, jsx_runtime_1.jsx)(Insurance_1.Insurance, { mt: 2, status: status, insurableRouteId: stateRouteId, feeAmountUsd: route?.insurance.feeAmountUsd, insuranceCoverageId: insuranceCoverageId, onChange: setRouteId })) : null, status === stores_1.RouteExecutionStatus.Idle ||
105
+ return ((0, jsx_runtime_1.jsxs)(SwapPage_style_1.Container, { children: [(0, Step_1.getStepList)(route), variant === 'nft' ? (0, jsx_runtime_1.jsx)(ContractComponent_1.ContractComponent, { mt: 2 }) : null, route && insuranceAvailable ? ((0, jsx_runtime_1.jsx)(Insurance_1.Insurance, { mt: 2, status: status, insurableRouteId: stateRouteId, feeAmountUsd: route.insurance.feeAmountUsd, insuredAmount: (0, utils_1.formatTokenAmount)(route.toAmountMin, route.toToken.decimals), insuredTokenSymbol: route.toToken.symbol, insuranceCoverageId: insuranceCoverageId, onChange: setRouteId })) : null, status === stores_1.RouteExecutionStatus.Idle ||
85
106
  status === stores_1.RouteExecutionStatus.Failed ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(GasMessage_1.GasMessage, { mt: 2, route: route }), (0, jsx_runtime_1.jsxs)(material_1.Box, { mt: 2, display: "flex", children: [(0, jsx_runtime_1.jsx)(SwapButton, { text: getSwapButtonText(), onClick: handleSwapClick, route: route, insurableRouteId: stateRouteId }), status === stores_1.RouteExecutionStatus.Failed ? ((0, jsx_runtime_1.jsx)(material_1.Tooltip, { title: t('button.removeSwap'), placement: "bottom-end", enterDelay: 400, arrow: true, children: (0, jsx_runtime_1.jsx)(material_1.Button, { onClick: handleRemoveRoute, sx: {
86
107
  minWidth: 48,
87
108
  marginLeft: 1,
88
- }, children: (0, jsx_runtime_1.jsx)(Delete_1.default, {}) }) })) : null] })] })) : null, route && status ? ((0, jsx_runtime_1.jsx)(StatusBottomSheet_1.StatusBottomSheet, { status: status, route: route })) : null, route ? ((0, jsx_runtime_1.jsx)(TokenValueBottomSheet_1.TokenValueBottomSheet, { route: route, ref: tokenValueBottomSheetRef, onContinue: handleExecuteRoute })) : null, route ? ((0, jsx_runtime_1.jsx)(ExchangeRateBottomSheet_1.ExchangeRateBottomSheet, { ref: exchangeRateBottomSheetRef })) : null] }));
109
+ }, children: (0, jsx_runtime_1.jsx)(Delete_1.default, {}) }) })) : null] })] })) : null, route && status ? ((0, jsx_runtime_1.jsx)(StatusBottomSheet_1.StatusBottomSheet, { status: status, route: route })) : null, route && tokenValueLossThresholdExceeded && variant !== 'nft' ? ((0, jsx_runtime_1.jsx)(TokenValueBottomSheet_1.TokenValueBottomSheet, { route: route, ref: tokenValueBottomSheetRef, onContinue: handleExecuteRoute })) : null, route ? ((0, jsx_runtime_1.jsx)(ExchangeRateBottomSheet_1.ExchangeRateBottomSheet, { ref: exchangeRateBottomSheetRef })) : null] }));
89
110
  };
90
111
  exports.SwapPage = SwapPage;
@@ -4,12 +4,12 @@ exports.getTokenValueLossThreshold = exports.TokenValueBottomSheet = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const WarningRounded_1 = require("@mui/icons-material/WarningRounded");
6
6
  const material_1 = require("@mui/material");
7
- const big_js_1 = require("big.js");
8
7
  const react_1 = require("react");
9
8
  const react_i18next_1 = require("react-i18next");
10
9
  const BottomSheet_1 = require("../../components/BottomSheet");
11
10
  const hooks_1 = require("../../hooks");
12
11
  const StatusBottomSheet_style_1 = require("./StatusBottomSheet.style");
12
+ const utils_1 = require("./utils");
13
13
  exports.TokenValueBottomSheet = (0, react_1.forwardRef)(({ route, onContinue, onCancel }, ref) => {
14
14
  const handleCancel = () => {
15
15
  ref.current?.close();
@@ -21,23 +21,18 @@ const TokenValueBottomSheetContent = ({ route, onCancel, onContinue, }) => {
21
21
  const { t } = (0, react_i18next_1.useTranslation)();
22
22
  const ref = (0, react_1.useRef)();
23
23
  (0, hooks_1.useSetContentHeight)(ref);
24
- return ((0, jsx_runtime_1.jsxs)(material_1.Box, { p: 3, ref: ref, children: [(0, jsx_runtime_1.jsxs)(StatusBottomSheet_style_1.IconContainer, { children: [(0, jsx_runtime_1.jsx)(StatusBottomSheet_style_1.IconCircle, { status: "warning", mb: 1, children: (0, jsx_runtime_1.jsx)(WarningRounded_1.default, { color: "warning" }) }), (0, jsx_runtime_1.jsx)(material_1.Typography, { py: 1, fontSize: 18, fontWeight: 700, children: t('swap.warning.title.highValueLoss') })] }), (0, jsx_runtime_1.jsx)(material_1.Typography, { py: 1, children: t('swap.warning.message.highValueLoss') }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 1, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.swapping') }), (0, jsx_runtime_1.jsx)(material_1.Typography, { fontWeight: 600, children: t('format.currency', { value: route.fromAmountUSD }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 0.25, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.gasCost') }), (0, jsx_runtime_1.jsx)(material_1.Typography, { fontWeight: 600, children: t('format.currency', { value: route.gasCostUSD }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 0.25, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.receiving') }), (0, jsx_runtime_1.jsx)(material_1.Typography, { fontWeight: 600, children: t('format.currency', { value: route.toAmountUSD }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 0.25, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.valueLoss') }), (0, jsx_runtime_1.jsxs)(material_1.Typography, { fontWeight: 600, children: [(0, big_js_1.default)(route.toAmountUSD || 0)
25
- .div((0, big_js_1.default)(route.fromAmountUSD || 0).plus((0, big_js_1.default)(route.gasCostUSD || 0)))
26
- .minus(1)
27
- .mul(100)
28
- .round(2, big_js_1.default.roundUp)
29
- .toString(), "%"] })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", mt: 3, children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "text", onClick: onCancel, fullWidth: true, children: t('button.cancel') }), (0, jsx_runtime_1.jsx)(material_1.Box, { display: "flex", p: 1 }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", onClick: onContinue, fullWidth: true, children: t('button.continue') })] })] }));
24
+ return ((0, jsx_runtime_1.jsxs)(material_1.Box, { p: 3, ref: ref, children: [(0, jsx_runtime_1.jsxs)(StatusBottomSheet_style_1.CenterContainer, { children: [(0, jsx_runtime_1.jsx)(StatusBottomSheet_style_1.IconCircle, { status: "warning", mb: 1, children: (0, jsx_runtime_1.jsx)(WarningRounded_1.default, { color: "warning" }) }), (0, jsx_runtime_1.jsx)(material_1.Typography, { py: 1, fontSize: 18, fontWeight: 700, children: t('swap.warning.title.highValueLoss') })] }), (0, jsx_runtime_1.jsx)(material_1.Typography, { py: 1, children: t('swap.warning.message.highValueLoss') }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 1, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.swapping') }), (0, jsx_runtime_1.jsx)(material_1.Typography, { fontWeight: 600, children: t('format.currency', { value: route.fromAmountUSD }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 0.25, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.gasCost') }), (0, jsx_runtime_1.jsx)(material_1.Typography, { fontWeight: 600, children: t('format.currency', { value: route.gasCostUSD }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 0.25, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.receiving') }), (0, jsx_runtime_1.jsx)(material_1.Typography, { fontWeight: 600, children: t('format.currency', { value: route.toAmountUSD }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", justifyContent: "space-between", mt: 0.25, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: t('swap.valueLoss') }), (0, jsx_runtime_1.jsx)(material_1.Typography, { fontWeight: 600, children: (0, utils_1.calcValueLoss)(route) })] }), (0, jsx_runtime_1.jsxs)(material_1.Box, { display: "flex", mt: 3, children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "text", onClick: onCancel, fullWidth: true, children: t('button.cancel') }), (0, jsx_runtime_1.jsx)(material_1.Box, { display: "flex", p: 1 }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", onClick: onContinue, fullWidth: true, children: t('button.continue') })] })] }));
30
25
  };
31
26
  const getTokenValueLossThreshold = (route) => {
32
27
  if (!route) {
33
28
  return false;
34
29
  }
35
- const fromAmountUSD = (0, big_js_1.default)(route?.fromAmountUSD || 0);
36
- const toAmountUSD = (0, big_js_1.default)(route?.toAmountUSD || 0);
37
- const gasCostUSD = (0, big_js_1.default)(route?.gasCostUSD || 0);
38
- if (fromAmountUSD.eq(0) && toAmountUSD.eq(0)) {
30
+ const fromAmountUSD = Number(route.fromAmountUSD || 0);
31
+ const toAmountUSD = Number(route.toAmountUSD || 0);
32
+ const gasCostUSD = Number(route.gasCostUSD || 0);
33
+ if (!fromAmountUSD && !toAmountUSD) {
39
34
  return false;
40
35
  }
41
- return toAmountUSD.div(fromAmountUSD.plus(gasCostUSD)).lt(0.9);
36
+ return toAmountUSD / (fromAmountUSD + gasCostUSD) < 0.9;
42
37
  };
43
38
  exports.getTokenValueLossThreshold = getTokenValueLossThreshold;
@@ -0,0 +1,2 @@
1
+ import type { Route } from '@lifi/sdk';
2
+ export declare const calcValueLoss: (route: Route) => string;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calcValueLoss = void 0;
4
+ const calcValueLoss = (route) => {
5
+ return `${((Number(route.toAmountUSD || 0) /
6
+ (Number(route.fromAmountUSD || 0) + Number(route.gasCostUSD || 0)) -
7
+ 1) *
8
+ 100).toFixed(2)}%`;
9
+ };
10
+ exports.calcValueLoss = calcValueLoss;
@@ -11,7 +11,7 @@ const stores_1 = require("../../stores");
11
11
  const utils_1 = require("../../utils");
12
12
  const WidgetProvider_1 = require("../WidgetProvider");
13
13
  const I18nProvider = ({ children, }) => {
14
- const { languageResources, languages, disableI18n } = (0, WidgetProvider_1.useWidgetConfig)();
14
+ const { languageResources, languages, disableLanguageDetector } = (0, WidgetProvider_1.useWidgetConfig)();
15
15
  const { language } = (0, stores_1.useSettings)(['language']);
16
16
  const i18n = (0, react_1.useMemo)(() => {
17
17
  let resources = Object.keys(supportedLanguages)
@@ -50,12 +50,12 @@ const I18nProvider = ({ children, }) => {
50
50
  caches: [],
51
51
  },
52
52
  });
53
- if (!language && !languages?.default && !disableI18n) {
53
+ if (!language && !languages?.default && !disableLanguageDetector) {
54
54
  i18n = i18n.use(i18next_browser_languagedetector_1.default);
55
55
  }
56
56
  i18n.use(react_i18next_1.initReactI18next).init();
57
57
  return i18n;
58
- }, [disableI18n, language, languageResources, languages]);
58
+ }, [disableLanguageDetector, language, languageResources, languages]);
59
59
  return (0, jsx_runtime_1.jsx)(react_i18next_1.I18nextProvider, { i18n: i18n, children: children });
60
60
  };
61
61
  exports.I18nProvider = I18nProvider;
@@ -4,6 +4,7 @@ exports.SDKProvider = exports.useLiFi = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const sdk_1 = require("@lifi/sdk");
6
6
  const react_1 = require("react");
7
+ const version_1 = require("../../config/version");
7
8
  const WidgetProvider_1 = require("../WidgetProvider");
8
9
  let lifi;
9
10
  const SDKContext = (0, react_1.createContext)(null);
@@ -27,6 +28,7 @@ const SDKProvider = ({ children, }) => {
27
28
  if (!lifi) {
28
29
  lifi = new sdk_1.LiFi({
29
30
  disableVersionCheck: true,
31
+ widgetVersion: version_1.version,
30
32
  ...config,
31
33
  });
32
34
  }
@@ -26,6 +26,7 @@ const FormUpdater = ({ defaultValues }) => {
26
26
  const { isTouched: isToTokenTouched } = getFieldState(SwapFormProvider_1.SwapFormKey.ToToken);
27
27
  const { isTouched: isFromAmountTouched } = getFieldState(SwapFormProvider_1.SwapFormKey.FromAmount);
28
28
  if (!fromChain && !isFromChainTouched && !isFromTokenTouched) {
29
+ resetField(SwapFormProvider_1.SwapFormKey.FromChain, { defaultValue: account.chainId });
29
30
  setValue(SwapFormProvider_1.SwapFormKey.FromChain, account.chainId);
30
31
  setValue(SwapFormProvider_1.SwapFormKey.FromToken, '');
31
32
  if (isFromAmountTouched) {
@@ -33,6 +34,7 @@ const FormUpdater = ({ defaultValues }) => {
33
34
  }
34
35
  }
35
36
  if (!toChain && !isToChainTouched && !isToTokenTouched) {
37
+ resetField(SwapFormProvider_1.SwapFormKey.ToChain, { defaultValue: account.chainId });
36
38
  setValue(SwapFormProvider_1.SwapFormKey.ToChain, account.chainId);
37
39
  setValue(SwapFormProvider_1.SwapFormKey.ToToken, '');
38
40
  }
@@ -43,6 +45,7 @@ const FormUpdater = ({ defaultValues }) => {
43
45
  fromChain,
44
46
  getFieldState,
45
47
  getValues,
48
+ resetField,
46
49
  setValue,
47
50
  toChain,
48
51
  ]);
@@ -5,6 +5,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const wallet_management_1 = require("@lifi/wallet-management");
6
6
  const react_1 = require("react");
7
7
  const WidgetProvider_1 = require("../WidgetProvider");
8
+ const liFiWalletManagement = new wallet_management_1.LiFiWalletManagement();
8
9
  const stub = () => {
9
10
  throw new Error(`You forgot to wrap your component in <${exports.WalletProvider.name}>.`);
10
11
  };
@@ -21,8 +22,13 @@ const useWallet = () => (0, react_1.useContext)(WalletContext);
21
22
  exports.useWallet = useWallet;
22
23
  const WalletProvider = ({ children }) => {
23
24
  const { walletManagement } = (0, WidgetProvider_1.useWidgetConfig)();
24
- const { connect: walletManagementConnect, disconnect: walletManagementDisconnect, signer, provider, } = (0, wallet_management_1.useLiFiWalletManagement)();
25
25
  const [account, setAccount] = (0, react_1.useState)({});
26
+ const [currentWallet, setCurrentWallet] = (0, react_1.useState)();
27
+ const handleWalletUpdate = async (wallet) => {
28
+ setCurrentWallet(wallet);
29
+ const account = await (0, exports.extractAccountFromSigner)(wallet?.account?.signer);
30
+ setAccount(account);
31
+ };
26
32
  const connect = (0, react_1.useCallback)(async (wallet) => {
27
33
  if (walletManagement) {
28
34
  const signer = await walletManagement.connect();
@@ -30,52 +36,119 @@ const WalletProvider = ({ children }) => {
30
36
  setAccount(account);
31
37
  return;
32
38
  }
33
- await walletManagementConnect(wallet);
34
- }, [walletManagement, walletManagementConnect]);
39
+ await liFiWalletManagement.connect(wallet);
40
+ wallet.on('walletAccountChanged', handleWalletUpdate);
41
+ handleWalletUpdate(wallet);
42
+ }, [walletManagement]);
35
43
  const disconnect = (0, react_1.useCallback)(async () => {
36
44
  if (walletManagement) {
37
45
  await walletManagement.disconnect();
38
46
  setAccount({});
39
47
  return;
40
48
  }
41
- await walletManagementDisconnect();
42
- }, [walletManagement, walletManagementDisconnect]);
43
- // only for injected wallets
49
+ if (currentWallet) {
50
+ await liFiWalletManagement.disconnect(currentWallet);
51
+ currentWallet.removeAllListeners();
52
+ handleWalletUpdate(undefined);
53
+ }
54
+ }, [currentWallet, walletManagement]);
44
55
  const switchChain = (0, react_1.useCallback)(async (chainId) => {
45
- if (walletManagement?.switchChain) {
46
- const signer = await walletManagement.switchChain(chainId);
47
- const account = await (0, exports.extractAccountFromSigner)(signer);
48
- setAccount(account);
49
- return true;
56
+ try {
57
+ if (walletManagement?.switchChain) {
58
+ const signer = await walletManagement.switchChain(chainId);
59
+ const account = await (0, exports.extractAccountFromSigner)(signer);
60
+ setAccount(account);
61
+ return signer;
62
+ }
63
+ else if (!currentWallet) {
64
+ const provider = account.signer?.provider;
65
+ if (!provider) {
66
+ throw new Error(`Switch chain: No provider available`);
67
+ }
68
+ await (0, wallet_management_1.switchChain)(provider, chainId);
69
+ }
70
+ else {
71
+ await currentWallet?.switchChain(chainId);
72
+ handleWalletUpdate(currentWallet);
73
+ }
74
+ // TODO: this will fail if it's not created with ethers 'any' network, replace with the new signer when possible
75
+ return account.signer;
50
76
  }
51
- return (0, wallet_management_1.switchChain)(chainId);
52
- }, [walletManagement]);
77
+ catch {
78
+ return account.signer;
79
+ }
80
+ }, [account.signer, currentWallet, walletManagement]);
53
81
  const addChain = (0, react_1.useCallback)(async (chainId) => {
54
- if (walletManagement?.addChain) {
55
- return walletManagement.addChain(chainId);
82
+ try {
83
+ if (walletManagement?.addChain) {
84
+ return walletManagement.addChain(chainId);
85
+ }
86
+ else if (!currentWallet) {
87
+ const provider = account.signer?.provider;
88
+ if (!provider) {
89
+ throw new Error(`Add chain: No provider available`);
90
+ }
91
+ await (0, wallet_management_1.addChain)(provider, chainId);
92
+ }
93
+ else {
94
+ await currentWallet?.addChain(chainId);
95
+ handleWalletUpdate(currentWallet);
96
+ }
97
+ return true;
56
98
  }
57
- return (0, wallet_management_1.addChain)(chainId);
58
- }, [walletManagement]);
59
- const addToken = (0, react_1.useCallback)(async (chainId, token) => {
60
- if (walletManagement?.addToken) {
61
- return walletManagement.addToken(token, chainId);
99
+ catch {
100
+ return false;
62
101
  }
63
- return (0, wallet_management_1.switchChainAndAddToken)(chainId, token);
64
- }, [walletManagement]);
65
- // keep account information up to date
66
- (0, react_1.useEffect)(() => {
67
- const updateAccount = async () => {
68
- let account;
69
- if (walletManagement) {
70
- account = await (0, exports.extractAccountFromSigner)(walletManagement?.signer);
102
+ }, [account.signer?.provider, currentWallet, walletManagement]);
103
+ const addToken = (0, react_1.useCallback)(async (chainId, token) => {
104
+ try {
105
+ if (walletManagement?.addToken) {
106
+ return walletManagement.addToken(token, chainId);
107
+ }
108
+ else if (!currentWallet) {
109
+ const provider = account.signer?.provider;
110
+ if (!provider) {
111
+ throw new Error(`Add token: No provider available`);
112
+ }
113
+ await (0, wallet_management_1.switchChainAndAddToken)(provider, chainId, token);
71
114
  }
72
115
  else {
73
- account = await (0, exports.extractAccountFromSigner)(signer);
116
+ await currentWallet?.addToken(chainId, token);
117
+ handleWalletUpdate(currentWallet);
74
118
  }
75
- setAccount(account);
119
+ }
120
+ catch { }
121
+ }, [account.signer?.provider, currentWallet, walletManagement]);
122
+ (0, react_1.useEffect)(() => {
123
+ const autoConnect = async () => {
124
+ const persistedActiveWallets = (0, wallet_management_1.readActiveWallets)();
125
+ const activeWallets = wallet_management_1.supportedWallets.filter((wallet) => persistedActiveWallets.some((perstistedWallet) => perstistedWallet.name === wallet.name));
126
+ if (!activeWallets.length) {
127
+ return;
128
+ }
129
+ await liFiWalletManagement.autoConnect(activeWallets);
130
+ activeWallets[0].on('walletAccountChanged', handleWalletUpdate);
131
+ handleWalletUpdate(activeWallets[0]);
76
132
  };
77
- updateAccount();
78
- }, [signer, walletManagement]);
133
+ autoConnect();
134
+ }, []);
135
+ // keep widget in sync with changing external signer object
136
+ (0, react_1.useEffect)(() => {
137
+ if (walletManagement) {
138
+ let ignore = false;
139
+ const updateAccount = async () => {
140
+ const account = await (0, exports.extractAccountFromSigner)(walletManagement?.signer);
141
+ // we should ignore the update if there is a newer one
142
+ if (!ignore) {
143
+ setAccount(account);
144
+ }
145
+ };
146
+ updateAccount();
147
+ return () => {
148
+ ignore = true;
149
+ };
150
+ }
151
+ }, [walletManagement]);
79
152
  const value = (0, react_1.useMemo)(() => ({
80
153
  connect,
81
154
  disconnect,
@@ -83,8 +156,7 @@ const WalletProvider = ({ children }) => {
83
156
  addChain,
84
157
  addToken,
85
158
  account,
86
- provider,
87
- }), [account, addChain, addToken, connect, disconnect, provider, switchChain]);
159
+ }), [account, addChain, addToken, connect, disconnect, switchChain]);
88
160
  return ((0, jsx_runtime_1.jsx)(WalletContext.Provider, { value: value, children: children }));
89
161
  };
90
162
  exports.WalletProvider = WalletProvider;
@@ -98,7 +170,7 @@ const extractAccountFromSigner = async (signer) => {
98
170
  };
99
171
  }
100
172
  catch (error) {
101
- console.log(error);
173
+ console.error(error);
102
174
  return {};
103
175
  }
104
176
  };
@@ -1,2 +1,2 @@
1
- export * from './types';
2
1
  export * from './WalletProvider';
2
+ export * from './types';
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./types"), exports);
18
17
  __exportStar(require("./WalletProvider"), exports);
18
+ __exportStar(require("./types"), exports);
@@ -1,14 +1,12 @@
1
1
  import type { Signer } from '@ethersproject/abstract-signer';
2
- import type { Provider } from '@ethersproject/providers';
3
- import type { Token } from '@lifi/sdk';
2
+ import type { StaticToken } from '@lifi/sdk';
4
3
  import type { Wallet } from '@lifi/wallet-management';
5
4
  export interface WalletContextProps {
6
5
  account: WalletAccount;
7
- provider?: Provider;
8
6
  addChain(chainId: number): Promise<boolean>;
9
- addToken(chainId: number, token: Token): Promise<void>;
10
- disconnect(): void;
11
- switchChain(chainId: number): Promise<boolean>;
7
+ addToken(chainId: number, token: StaticToken): Promise<void>;
8
+ disconnect(wallet?: Wallet): void;
9
+ switchChain(chainId: number): Promise<Signer | undefined>;
12
10
  connect(wallet?: Wallet | undefined): Promise<void>;
13
11
  }
14
12
  export interface WalletAccount {
@@ -50,7 +50,7 @@ const WidgetProvider = ({ children, config: { fromChain, fromToken, toChain, toT
50
50
  toToken: searchParams.toToken?.toLowerCase() || toToken?.toLowerCase(),
51
51
  fromAmount: typeof searchParams.fromAmount === 'string' &&
52
52
  !isNaN(parseFloat(searchParams.fromAmount))
53
- ? (0, utils_1.formatAmount)(searchParams.fromAmount)
53
+ ? (0, utils_1.formatInputAmount)(searchParams.fromAmount)
54
54
  : fromAmount,
55
55
  elementId,
56
56
  integrator,
@@ -1,3 +1,3 @@
1
1
  import type { PropsWithChildren } from 'react';
2
- import type { PersistStoreProviderProps } from './types';
3
- export declare const StoreProvider: React.FC<PropsWithChildren<PersistStoreProviderProps>>;
2
+ import type { WidgetConfigProps } from '../types';
3
+ export declare const StoreProvider: React.FC<PropsWithChildren<WidgetConfigProps>>;
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StoreProvider = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const routes_1 = require("./routes");
6
- const StoreProvider = ({ children, namePrefix }) => {
7
- return ((0, jsx_runtime_1.jsx)(routes_1.RouteExecutionStoreProvider, { namePrefix: namePrefix, children: children }));
6
+ const settings_1 = require("./settings");
7
+ const StoreProvider = ({ children, config, }) => {
8
+ return ((0, jsx_runtime_1.jsx)(settings_1.SplitSubvariantStoreProvider, { state: config.subvariant === 'split' ? 'swap' : undefined, children: (0, jsx_runtime_1.jsx)(routes_1.RouteExecutionStoreProvider, { namePrefix: config?.localStorageKeyPrefix, children: children }) }));
8
9
  };
9
10
  exports.StoreProvider = StoreProvider;
@@ -4,6 +4,6 @@ import type { PersistStoreProviderProps } from '../types';
4
4
  import type { RouteExecutionState } from './types';
5
5
  export type RouteExecutionStore = UseBoundStore<StoreApi<RouteExecutionState>>;
6
6
  export declare const RouteExecutionStoreContext: import("react").Context<RouteExecutionStore | null>;
7
- export declare function RouteExecutionStoreProvider({ children, ...props }: PersistStoreProviderProps): JSX.Element;
7
+ export declare function RouteExecutionStoreProvider({ children, ...props }: PersistStoreProviderProps): import("react/jsx-runtime").JSX.Element;
8
8
  export declare function useRouteExecutionStore<T>(selector: (state: RouteExecutionState) => T, equalityFn?: (left: T, right: T) => boolean): T;
9
9
  export declare function useRouteExecutionStoreContext(): RouteExecutionStore;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useRouteExecutionStoreContext = exports.useRouteExecutionStore = exports.RouteExecutionStoreProvider = exports.RouteExecutionStoreContext = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- /* eslint-disable no-underscore-dangle */
6
5
  const react_1 = require("react");
7
6
  const createRouteExecutionStore_1 = require("./createRouteExecutionStore");
8
7
  exports.RouteExecutionStoreContext = (0, react_1.createContext)(null);
@@ -3,3 +3,4 @@ export * from './useAppearance';
3
3
  export * from './useSendToWalletStore';
4
4
  export * from './useSettings';
5
5
  export * from './useSettingsStore';
6
+ export * from './useSplitSubvariantStore';
@@ -19,3 +19,4 @@ __exportStar(require("./useAppearance"), exports);
19
19
  __exportStar(require("./useSendToWalletStore"), exports);
20
20
  __exportStar(require("./useSettings"), exports);
21
21
  __exportStar(require("./useSettingsStore"), exports);
22
+ __exportStar(require("./useSplitSubvariantStore"), exports);
@@ -1,4 +1,6 @@
1
1
  import type { Order } from '@lifi/sdk';
2
+ import type { PropsWithChildren } from 'react';
3
+ import type { StoreApi, UseBoundStore } from 'zustand';
2
4
  import type { Appearance, WidgetConfig } from '../../types';
3
5
  export type ValueSetter<S> = <K extends keyof S>(key: K, value: S[Extract<K, string>]) => void;
4
6
  export type ValuesSetter<S> = <K extends keyof S>(values: Record<K, S[Extract<K, string>]>) => void;
@@ -32,3 +34,12 @@ export interface SendToWalletStore extends SendToWalletState {
32
34
  toggleSendToWallet(): void;
33
35
  setSendToWallet(value: boolean): void;
34
36
  }
37
+ export interface SplitSubvariantState {
38
+ state?: 'swap' | 'bridge';
39
+ setState(state: 'swap' | 'bridge'): void;
40
+ }
41
+ export type SplitSubvariantStore = UseBoundStore<StoreApi<SplitSubvariantState>>;
42
+ export interface SplitSubvariantProps {
43
+ state?: 'swap' | 'bridge';
44
+ }
45
+ export type SplitSubvariantProviderProps = PropsWithChildren<SplitSubvariantProps>;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import type { SplitSubvariantProps, SplitSubvariantProviderProps, SplitSubvariantState, SplitSubvariantStore } from './types';
3
+ export declare const SplitSubvariantStoreContext: import("react").Context<SplitSubvariantStore | null>;
4
+ export declare function SplitSubvariantStoreProvider({ children, ...props }: SplitSubvariantProviderProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function useSplitSubvariantStore<T>(selector: (state: SplitSubvariantState) => T, equalityFn?: (left: T, right: T) => boolean): T;
6
+ export declare function useSplitSubvariantStoreContext(): SplitSubvariantStore;
7
+ export declare const createSplitSubvariantStore: ({ state }: SplitSubvariantProps) => import("zustand").UseBoundStore<import("zustand").StoreApi<SplitSubvariantState>>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSplitSubvariantStore = exports.useSplitSubvariantStoreContext = exports.useSplitSubvariantStore = exports.SplitSubvariantStoreProvider = exports.SplitSubvariantStoreContext = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const zustand_1 = require("zustand");
7
+ exports.SplitSubvariantStoreContext = (0, react_1.createContext)(null);
8
+ const shouldRecreateStore = (store, props) => {
9
+ const { state } = store.getState();
10
+ return (!state && props.state) || (state && !props.state);
11
+ };
12
+ function SplitSubvariantStoreProvider({ children, ...props }) {
13
+ const storeRef = (0, react_1.useRef)();
14
+ if (!storeRef.current || shouldRecreateStore(storeRef.current, props)) {
15
+ storeRef.current = (0, exports.createSplitSubvariantStore)(props);
16
+ }
17
+ return ((0, jsx_runtime_1.jsx)(exports.SplitSubvariantStoreContext.Provider, { value: storeRef.current, children: children }));
18
+ }
19
+ exports.SplitSubvariantStoreProvider = SplitSubvariantStoreProvider;
20
+ function useSplitSubvariantStore(selector, equalityFn) {
21
+ const useStore = (0, react_1.useContext)(exports.SplitSubvariantStoreContext);
22
+ if (!useStore) {
23
+ throw new Error(`You forgot to wrap your component in <${SplitSubvariantStoreProvider.name}>.`);
24
+ }
25
+ return useStore(selector, equalityFn);
26
+ }
27
+ exports.useSplitSubvariantStore = useSplitSubvariantStore;
28
+ function useSplitSubvariantStoreContext() {
29
+ const useStore = (0, react_1.useContext)(exports.SplitSubvariantStoreContext);
30
+ if (!useStore) {
31
+ throw new Error(`You forgot to wrap your component in <${SplitSubvariantStoreProvider.name}>.`);
32
+ }
33
+ return useStore;
34
+ }
35
+ exports.useSplitSubvariantStoreContext = useSplitSubvariantStoreContext;
36
+ const createSplitSubvariantStore = ({ state }) => (0, zustand_1.create)((set) => ({
37
+ state,
38
+ setState(state) {
39
+ set(() => ({
40
+ state,
41
+ }));
42
+ },
43
+ }));
44
+ exports.createSplitSubvariantStore = createSplitSubvariantStore;
@@ -3,13 +3,21 @@ export declare enum WidgetEvent {
3
3
  RouteExecutionStarted = "routeExecutionStarted",
4
4
  RouteExecutionUpdated = "routeExecutionUpdated",
5
5
  RouteExecutionCompleted = "routeExecutionCompleted",
6
- RouteExecutionFailed = "routeExecutionFailed"
6
+ RouteExecutionFailed = "routeExecutionFailed",
7
+ RouteHighValueLoss = "routeHighValueLoss"
8
+ }
9
+ export interface RouteHighValueLossUpdate {
10
+ fromAmountUsd: string;
11
+ gasCostUSD: string | undefined;
12
+ toAmountUSD: string;
13
+ valueLoss: string;
7
14
  }
8
15
  export type WidgetEvents = {
9
16
  routeExecutionStarted: Route;
10
17
  routeExecutionUpdated: RouteExecutionUpdate;
11
18
  routeExecutionCompleted: Route;
12
19
  routeExecutionFailed: RouteExecutionUpdate;
20
+ routeHighValueLoss: RouteHighValueLossUpdate;
13
21
  };
14
22
  export interface RouteExecutionUpdate {
15
23
  route: Route;
@@ -7,4 +7,5 @@ var WidgetEvent;
7
7
  WidgetEvent["RouteExecutionUpdated"] = "routeExecutionUpdated";
8
8
  WidgetEvent["RouteExecutionCompleted"] = "routeExecutionCompleted";
9
9
  WidgetEvent["RouteExecutionFailed"] = "routeExecutionFailed";
10
+ WidgetEvent["RouteHighValueLoss"] = "routeHighValueLoss";
10
11
  })(WidgetEvent = exports.WidgetEvent || (exports.WidgetEvent = {}));
@@ -1,4 +1,4 @@
1
- import type { TokenAmount } from '@lifi/sdk';
2
- export interface Token extends TokenAmount {
1
+ import type { TokenAmount as SDKTokenAmount } from '@lifi/sdk';
2
+ export interface TokenAmount extends SDKTokenAmount {
3
3
  featured?: boolean;
4
4
  }