@lifi/widget 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/dist/esm/App.d.ts +4 -2
  2. package/dist/esm/App.d.ts.map +1 -1
  3. package/dist/esm/App.js +4 -4
  4. package/dist/esm/App.js.map +1 -1
  5. package/dist/esm/AppDefault.js +14 -0
  6. package/dist/esm/AppDefault.js.map +1 -1
  7. package/dist/esm/AppDrawer.d.ts +1 -1
  8. package/dist/esm/AppDrawer.d.ts.map +1 -1
  9. package/dist/esm/AppDrawer.js +5 -6
  10. package/dist/esm/AppDrawer.js.map +1 -1
  11. package/dist/esm/AppDrawerContext.js +2 -2
  12. package/dist/esm/AppDrawerContext.js.map +1 -1
  13. package/dist/esm/components/ActionRow/ActionRow.style.js.map +1 -1
  14. package/dist/esm/components/AmountInput/AmountInput.js +2 -1
  15. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  16. package/dist/esm/components/AmountInput/AmountInput.style.js.map +1 -1
  17. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +4 -2
  18. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
  19. package/dist/esm/components/AmountInput/AmountInputEndAdornment.style.js +1 -1
  20. package/dist/esm/components/AmountInput/AmountInputEndAdornment.style.js.map +1 -1
  21. package/dist/esm/components/AmountInput/PriceFormHelperText.js +4 -2
  22. package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
  23. package/dist/esm/components/AmountInput/PriceFormHelperText.style.js.map +1 -1
  24. package/dist/esm/components/AmountInputCard/AmountInputCard.style.js +98 -0
  25. package/dist/esm/components/AmountInputCard/AmountInputCard.style.js.map +1 -0
  26. package/dist/esm/components/AmountInputCard/AmountInputCardPair.js +25 -0
  27. package/dist/esm/components/AmountInputCard/AmountInputCardPair.js.map +1 -0
  28. package/dist/esm/components/AmountInputCard/BalanceDisplay.js +35 -0
  29. package/dist/esm/components/AmountInputCard/BalanceDisplay.js.map +1 -0
  30. package/dist/esm/components/AmountInputCard/BalanceDisplay.style.js +11 -0
  31. package/dist/esm/components/AmountInputCard/BalanceDisplay.style.js.map +1 -0
  32. package/dist/esm/components/AmountInputCard/FiatValueToggle.js +41 -0
  33. package/dist/esm/components/AmountInputCard/FiatValueToggle.js.map +1 -0
  34. package/dist/esm/components/AmountInputCard/PercentageChips.js +80 -0
  35. package/dist/esm/components/AmountInputCard/PercentageChips.js.map +1 -0
  36. package/dist/esm/components/AmountInputCard/PercentageChips.style.js +43 -0
  37. package/dist/esm/components/AmountInputCard/PercentageChips.style.js.map +1 -0
  38. package/dist/esm/components/AmountInputCard/ReceiveAmountCard.js +137 -0
  39. package/dist/esm/components/AmountInputCard/ReceiveAmountCard.js.map +1 -0
  40. package/dist/esm/components/AmountInputCard/SendAmountCard.js +102 -0
  41. package/dist/esm/components/AmountInputCard/SendAmountCard.js.map +1 -0
  42. package/dist/esm/components/AppContainer.js.map +1 -1
  43. package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
  44. package/dist/esm/components/Avatar/Avatar.js +12 -3
  45. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  46. package/dist/esm/components/Avatar/Avatar.style.js.map +1 -1
  47. package/dist/esm/components/Avatar/SmallAvatar.js.map +1 -1
  48. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js +1 -0
  49. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
  50. package/dist/esm/components/BottomSheet/BottomSheet.js +3 -3
  51. package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
  52. package/dist/esm/components/ButtonTertiary.js.map +1 -1
  53. package/dist/esm/components/Card/Card.js.map +1 -1
  54. package/dist/esm/components/Card/CardButton.style.js.map +1 -1
  55. package/dist/esm/components/Card/CardHeader.js.map +1 -1
  56. package/dist/esm/components/Card/CardIconButton.js.map +1 -1
  57. package/dist/esm/components/Card/CardLabel.js.map +1 -1
  58. package/dist/esm/components/Card/CardTitle.js.map +1 -1
  59. package/dist/esm/components/Card/InputCard.js.map +1 -1
  60. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  61. package/dist/esm/components/ChainSelect/ChainSelect.style.js.map +1 -1
  62. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  63. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  64. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  65. package/dist/esm/components/Chains/ChainList.style.js.map +1 -1
  66. package/dist/esm/components/Chains/ChainsExpanded.style.js.map +1 -1
  67. package/dist/esm/components/Chains/VirtualizedChainList.js +2 -1
  68. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  69. package/dist/esm/components/ContextMenu.style.js.map +1 -1
  70. package/dist/esm/components/ContractComponent/NFT/NFT.style.js.map +1 -1
  71. package/dist/esm/components/Dialog/Dialog.style.js.map +1 -1
  72. package/dist/esm/components/EmptyListIndicator/EmptyListIndicator.style.js.map +1 -1
  73. package/dist/esm/components/ExecutionStatusCard/StatusIcon.js.map +1 -1
  74. package/dist/esm/components/ExecutionStatusCard/StatusIcon.style.js.map +1 -1
  75. package/dist/esm/components/ExecutionStatusCard/iconKey.js.map +1 -1
  76. package/dist/esm/components/Expansion/Expansion.style.js.map +1 -1
  77. package/dist/esm/components/Header/ActivitiesButton.style.js.map +1 -1
  78. package/dist/esm/components/Header/CloseDrawerButton.js +1 -0
  79. package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
  80. package/dist/esm/components/Header/Header.js +7 -10
  81. package/dist/esm/components/Header/Header.js.map +1 -1
  82. package/dist/esm/components/Header/Header.style.js.map +1 -1
  83. package/dist/esm/components/Header/HeaderNavigationTabs.js +39 -0
  84. package/dist/esm/components/Header/HeaderNavigationTabs.js.map +1 -0
  85. package/dist/esm/components/Header/HeaderTabs.js +33 -0
  86. package/dist/esm/components/Header/HeaderTabs.js.map +1 -0
  87. package/dist/esm/components/Header/NavigationHeader.js +7 -5
  88. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  89. package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
  90. package/dist/esm/components/Header/WalletMenu.style.js.map +1 -1
  91. package/dist/esm/components/IconCircle/IconCircle.style.js +1 -1
  92. package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
  93. package/dist/esm/components/IconTypography.js.map +1 -1
  94. package/dist/esm/components/Input.js.map +1 -1
  95. package/dist/esm/components/LimitOrderSettings/LimitOrderSettings.js +99 -0
  96. package/dist/esm/components/LimitOrderSettings/LimitOrderSettings.js.map +1 -0
  97. package/dist/esm/components/LimitOrderSettings/LimitOrderSettings.style.js +52 -0
  98. package/dist/esm/components/LimitOrderSettings/LimitOrderSettings.style.js.map +1 -0
  99. package/dist/esm/components/LimitPriceCard/LimitPriceCard.js +115 -0
  100. package/dist/esm/components/LimitPriceCard/LimitPriceCard.js.map +1 -0
  101. package/dist/esm/components/LimitPriceCard/LimitPriceCard.style.js +89 -0
  102. package/dist/esm/components/LimitPriceCard/LimitPriceCard.style.js.map +1 -0
  103. package/dist/esm/components/LimitPriceCard/LimitPricePresets.js +91 -0
  104. package/dist/esm/components/LimitPriceCard/LimitPricePresets.js.map +1 -0
  105. package/dist/esm/components/ListItem/ListItem.js.map +1 -1
  106. package/dist/esm/components/ListItem/ListItemButton.js.map +1 -1
  107. package/dist/esm/components/ListItemButton.js.map +1 -1
  108. package/dist/esm/components/ListItemText.js.map +1 -1
  109. package/dist/esm/components/Menu.js.map +1 -1
  110. package/dist/esm/components/Messages/AlertMessage.style.js.map +1 -1
  111. package/dist/esm/components/Messages/GasRefuelMessage.style.js.map +1 -1
  112. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  113. package/dist/esm/components/PageContainer.js.map +1 -1
  114. package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
  115. package/dist/esm/components/PoweredBy/PoweredBy.style.js.map +1 -1
  116. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js +1 -0
  117. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
  118. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.js.map +1 -1
  119. package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
  120. package/dist/esm/components/RouteCard/RouteDetails.style.js +2 -2
  121. package/dist/esm/components/RouteCard/RouteDetails.style.js.map +1 -1
  122. package/dist/esm/components/RouteCard/RouteProviderCard.js +118 -0
  123. package/dist/esm/components/RouteCard/RouteProviderCard.js.map +1 -0
  124. package/dist/esm/components/RouteCard/RouteToken.style.js.map +1 -1
  125. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  126. package/dist/esm/components/RouteCard/getMatchingLabels.js.map +1 -1
  127. package/dist/esm/components/Routes/LimitOrderRoutes.js +34 -0
  128. package/dist/esm/components/Routes/LimitOrderRoutes.js.map +1 -0
  129. package/dist/esm/components/Routes/Routes.js +2 -2
  130. package/dist/esm/components/Routes/Routes.js.map +1 -1
  131. package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
  132. package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
  133. package/dist/esm/components/Search/SearchInput.style.js.map +1 -1
  134. package/dist/esm/components/Search/SearchNotFound.style.js.map +1 -1
  135. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
  136. package/dist/esm/components/SendToWallet/SendToWalletButton.style.js.map +1 -1
  137. package/dist/esm/components/SettingsListItemButton.js.map +1 -1
  138. package/dist/esm/components/SettingsPanel/SettingsPanel.js +51 -0
  139. package/dist/esm/components/SettingsPanel/SettingsPanel.js.map +1 -0
  140. package/dist/esm/components/SettingsPanel/SettingsPanel.style.js +33 -0
  141. package/dist/esm/components/SettingsPanel/SettingsPanel.style.js.map +1 -0
  142. package/dist/esm/components/SettingsPanel/utils.js +14 -0
  143. package/dist/esm/components/SettingsPanel/utils.js.map +1 -0
  144. package/dist/esm/components/Skeleton/WidgetSkeleton.js +50 -47
  145. package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
  146. package/dist/esm/components/Skeleton/WidgetSkeleton.style.js.map +1 -1
  147. package/dist/esm/components/Step/StepActions.js.map +1 -1
  148. package/dist/esm/components/Step/StepActions.style.js.map +1 -1
  149. package/dist/esm/components/StepActions/SentToWalletRow.style.js.map +1 -1
  150. package/dist/esm/components/StepActions/StepActionRow.style.js.map +1 -1
  151. package/dist/esm/components/SwapButton/SwapButton.js +50 -0
  152. package/dist/esm/components/SwapButton/SwapButton.js.map +1 -0
  153. package/dist/esm/components/SwapButton/SwapButton.style.js +24 -0
  154. package/dist/esm/components/SwapButton/SwapButton.style.js.map +1 -0
  155. package/dist/esm/components/Switch.js.map +1 -1
  156. package/dist/esm/components/Tabs/NavigationTabs.js +3 -0
  157. package/dist/esm/components/Tabs/NavigationTabs.js.map +1 -1
  158. package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
  159. package/dist/esm/components/Timer/StepStatusTimer.style.js.map +1 -1
  160. package/dist/esm/components/Token/Token.style.js.map +1 -1
  161. package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
  162. package/dist/esm/components/TokenList/TokenDetailsSheet.js +4 -4
  163. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  164. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +4 -4
  165. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  166. package/dist/esm/components/TokenList/TokenDetailsSheetContent.style.js.map +1 -1
  167. package/dist/esm/components/TokenList/TokenList.style.js.map +1 -1
  168. package/dist/esm/components/TokenList/TokenListItem.js +2 -2
  169. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  170. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  171. package/dist/esm/components/TokenList/useTokenSelect.js +3 -3
  172. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  173. package/dist/esm/components/TokenPillButton/TokenPillButton.js +52 -0
  174. package/dist/esm/components/TokenPillButton/TokenPillButton.js.map +1 -0
  175. package/dist/esm/components/TokenPillButton/TokenPillButton.style.js +39 -0
  176. package/dist/esm/components/TokenPillButton/TokenPillButton.style.js.map +1 -0
  177. package/dist/esm/components/TokenRate/TokenRate.style.js.map +1 -1
  178. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  179. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js.map +1 -1
  180. package/dist/esm/components/TransactionCard/TransactionCard.style.js.map +1 -1
  181. package/dist/esm/config/version.d.ts +1 -1
  182. package/dist/esm/config/version.js +1 -1
  183. package/dist/esm/config/version.js.map +1 -1
  184. package/dist/esm/hooks/timer/validate.js.map +1 -1
  185. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  186. package/dist/esm/hooks/useAvailableChains.js +1 -1
  187. package/dist/esm/hooks/useChainSearch.js +2 -1
  188. package/dist/esm/hooks/useChainSearch.js.map +1 -1
  189. package/dist/esm/hooks/useChains.js +1 -1
  190. package/dist/esm/hooks/useExplorer.js.map +1 -1
  191. package/dist/esm/hooks/useFilteredByTokenBalances.js +1 -1
  192. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
  193. package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
  194. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  195. package/dist/esm/hooks/useLanguages.js +2 -2
  196. package/dist/esm/hooks/useLanguages.js.map +1 -1
  197. package/dist/esm/hooks/useLimitMarketRate.js +24 -0
  198. package/dist/esm/hooks/useLimitMarketRate.js.map +1 -0
  199. package/dist/esm/hooks/useLinkedLimitFields.js +49 -0
  200. package/dist/esm/hooks/useLinkedLimitFields.js.map +1 -0
  201. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  202. package/dist/esm/hooks/useRouteExecutionMessage.js.map +1 -1
  203. package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -1
  204. package/dist/esm/hooks/useRoutes.js +23 -6
  205. package/dist/esm/hooks/useRoutes.js.map +1 -1
  206. package/dist/esm/hooks/useSwapOnly.js +2 -4
  207. package/dist/esm/hooks/useSwapOnly.js.map +1 -1
  208. package/dist/esm/hooks/useToAddressRequirements.js +2 -2
  209. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  210. package/dist/esm/hooks/useToken.js.map +1 -1
  211. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  212. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  213. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
  214. package/dist/esm/hooks/useTokenSearch.js +1 -1
  215. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  216. package/dist/esm/hooks/useTokens.js +17 -15
  217. package/dist/esm/hooks/useTokens.js.map +1 -1
  218. package/dist/esm/hooks/useTools.js +1 -1
  219. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  220. package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
  221. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  222. package/dist/esm/hooks/useWideVariant.js +5 -2
  223. package/dist/esm/hooks/useWideVariant.js.map +1 -1
  224. package/dist/esm/i18n/en.json +25 -0
  225. package/dist/esm/index.d.ts +3 -3
  226. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  227. package/dist/esm/pages/MainPage/LimitPageContent.js +23 -0
  228. package/dist/esm/pages/MainPage/LimitPageContent.js.map +1 -0
  229. package/dist/esm/pages/MainPage/MainPage.js +19 -22
  230. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  231. package/dist/esm/pages/MainPage/MainPageActions.js +28 -0
  232. package/dist/esm/pages/MainPage/MainPageActions.js.map +1 -0
  233. package/dist/esm/pages/MainPage/ReviewButton.js +11 -4
  234. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  235. package/dist/esm/pages/RoutePriorityPage.js +48 -0
  236. package/dist/esm/pages/RoutePriorityPage.js.map +1 -0
  237. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  238. package/dist/esm/pages/RoutesPage/RoutesPage.style.js.map +1 -1
  239. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  240. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +3 -3
  241. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  242. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js +3 -3
  243. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
  244. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  245. package/dist/esm/pages/SendToWallet/SendToWalletPage.style.js.map +1 -1
  246. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js +2 -2
  247. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  248. package/dist/esm/pages/SettingsPage/GasPriceSettings.js +1 -1
  249. package/dist/esm/pages/SettingsPage/ResetSettingsButton.style.js.map +1 -1
  250. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js +12 -27
  251. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
  252. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCard.style.js.map +1 -1
  253. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js +3 -3
  254. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
  255. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js +3 -3
  256. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
  257. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippagePage.js +133 -0
  258. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippagePage.js.map +1 -0
  259. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js +14 -72
  260. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
  261. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js +26 -14
  262. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
  263. package/dist/esm/pages/SettingsPage/ThemeSettings.js +4 -0
  264. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  265. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.style.js.map +1 -1
  266. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
  267. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
  268. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +3 -3
  269. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  270. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +16 -15
  271. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  272. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.style.js.map +1 -1
  273. package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
  274. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +3 -3
  275. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  276. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.style.js.map +1 -1
  277. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +27 -31
  278. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js.map +1 -1
  279. package/dist/esm/pages/TransactionPage/TransactionReview.js +4 -1
  280. package/dist/esm/pages/TransactionPage/TransactionReview.js.map +1 -1
  281. package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
  282. package/dist/esm/providers/I18nProvider/I18nProvider.js +1 -1
  283. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  284. package/dist/esm/providers/I18nProvider/enResource.d.ts +1 -1
  285. package/dist/esm/providers/I18nProvider/enResource.js +1 -1
  286. package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
  287. package/dist/esm/providers/I18nProvider/types.d.ts +2 -2
  288. package/dist/esm/providers/QueryClientProvider.js +2 -2
  289. package/dist/esm/providers/QueryClientProvider.js.map +1 -1
  290. package/dist/esm/providers/SDKClientProvider.js +3 -3
  291. package/dist/esm/providers/SDKClientProvider.js.map +1 -1
  292. package/dist/esm/providers/WidgetProvider/WidgetProvider.js +4 -5
  293. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  294. package/dist/esm/stores/StoreProvider.js +3 -4
  295. package/dist/esm/stores/StoreProvider.js.map +1 -1
  296. package/dist/esm/stores/bookmarks/BookmarkStore.js +3 -3
  297. package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
  298. package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
  299. package/dist/esm/stores/chains/ChainOrderStore.js +4 -4
  300. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  301. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  302. package/dist/esm/stores/form/FormStore.js +1 -1
  303. package/dist/esm/stores/form/FormStore.js.map +1 -1
  304. package/dist/esm/stores/form/URLSearchParamsBuilder.js +14 -3
  305. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  306. package/dist/esm/stores/form/createFormStore.js +6 -2
  307. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  308. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js +3 -0
  309. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
  310. package/dist/esm/stores/form/types.d.ts +9 -1
  311. package/dist/esm/stores/form/types.d.ts.map +1 -1
  312. package/dist/esm/stores/form/types.js.map +1 -1
  313. package/dist/esm/stores/form/useClearAmountFields.js +1 -0
  314. package/dist/esm/stores/form/useClearAmountFields.js.map +1 -1
  315. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  316. package/dist/esm/stores/form/useFieldValues.js.map +1 -1
  317. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  318. package/dist/esm/stores/form/useFormStore.js +2 -2
  319. package/dist/esm/stores/form/useFormStore.js.map +1 -1
  320. package/dist/esm/stores/header/useHeaderStore.js +3 -3
  321. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  322. package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
  323. package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js +22 -0
  324. package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js.map +1 -0
  325. package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js +64 -0
  326. package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js.map +1 -0
  327. package/dist/esm/stores/navigationTabs/utils.js +122 -0
  328. package/dist/esm/stores/navigationTabs/utils.js.map +1 -0
  329. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js +3 -3
  330. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js.map +1 -1
  331. package/dist/esm/stores/pinnedTokens/createPinnedTokensStore.js.map +1 -1
  332. package/dist/esm/stores/routes/RouteExecutionStore.js +3 -3
  333. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  334. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  335. package/dist/esm/stores/routes/useIntermediateRoutesStore.js.map +1 -1
  336. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  337. package/dist/esm/stores/routes/utils.js.map +1 -1
  338. package/dist/esm/stores/settings/SettingsStore.js +3 -3
  339. package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
  340. package/dist/esm/stores/settings/createSettingsStore.js +122 -96
  341. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  342. package/dist/esm/stores/settings/types.d.ts +0 -2
  343. package/dist/esm/stores/settings/types.d.ts.map +1 -1
  344. package/dist/esm/stores/settings/types.js.map +1 -1
  345. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  346. package/dist/esm/themes/createTheme.js.map +1 -1
  347. package/dist/esm/themes/utils.js.map +1 -1
  348. package/dist/esm/types/events.d.ts +10 -1
  349. package/dist/esm/types/events.d.ts.map +1 -1
  350. package/dist/esm/types/events.js +2 -0
  351. package/dist/esm/types/events.js.map +1 -1
  352. package/dist/esm/types/widget.d.ts +28 -2
  353. package/dist/esm/types/widget.d.ts.map +1 -1
  354. package/dist/esm/types/widget.js.map +1 -1
  355. package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
  356. package/dist/esm/utils/converters.js.map +1 -1
  357. package/dist/esm/utils/deepEqual.js.map +1 -1
  358. package/dist/esm/utils/fees.js.map +1 -1
  359. package/dist/esm/utils/format.d.ts +1 -1
  360. package/dist/esm/utils/format.d.ts.map +1 -1
  361. package/dist/esm/utils/format.js +2 -2
  362. package/dist/esm/utils/format.js.map +1 -1
  363. package/dist/esm/utils/getActionMessage.js.map +1 -1
  364. package/dist/esm/utils/getErrorMessage.js.map +1 -1
  365. package/dist/esm/utils/item.js.map +1 -1
  366. package/dist/esm/utils/limitOrder.js +61 -0
  367. package/dist/esm/utils/limitOrder.js.map +1 -0
  368. package/dist/esm/utils/{variant.js → mode.js} +2 -2
  369. package/dist/esm/utils/mode.js.map +1 -0
  370. package/dist/esm/utils/navigationRoutes.d.ts +2 -0
  371. package/dist/esm/utils/navigationRoutes.d.ts.map +1 -1
  372. package/dist/esm/utils/navigationRoutes.js +6 -0
  373. package/dist/esm/utils/navigationRoutes.js.map +1 -1
  374. package/dist/esm/utils/prepareActions.js +1 -1
  375. package/dist/esm/utils/prepareActions.js.map +1 -1
  376. package/dist/esm/utils/timer.js.map +1 -1
  377. package/dist/esm/utils/token.js +1 -1
  378. package/dist/esm/utils/token.js.map +1 -1
  379. package/dist/esm/utils/tokenList.js.map +1 -1
  380. package/package.json +13 -13
  381. package/src/App.tsx +7 -7
  382. package/src/AppDefault.tsx +16 -0
  383. package/src/AppDrawer.tsx +77 -78
  384. package/src/AppDrawerContext.ts +2 -2
  385. package/src/components/AmountInput/AmountInputEndAdornment.style.ts +1 -1
  386. package/src/components/AmountInput/AmountInputEndAdornment.tsx +5 -2
  387. package/src/components/AmountInputCard/AmountInputCard.style.tsx +157 -0
  388. package/src/components/AmountInputCard/AmountInputCardPair.tsx +25 -0
  389. package/src/components/AmountInputCard/BalanceDisplay.style.tsx +9 -0
  390. package/src/components/AmountInputCard/BalanceDisplay.tsx +46 -0
  391. package/src/components/AmountInputCard/FiatValueToggle.tsx +55 -0
  392. package/src/components/AmountInputCard/PercentageChips.style.tsx +60 -0
  393. package/src/components/AmountInputCard/PercentageChips.tsx +100 -0
  394. package/src/components/AmountInputCard/ReceiveAmountCard.tsx +219 -0
  395. package/src/components/AmountInputCard/SendAmountCard.tsx +179 -0
  396. package/src/components/Avatar/Avatar.tsx +8 -3
  397. package/src/components/BaseTransactionButton/BaseTransactionButton.tsx +1 -0
  398. package/src/components/BottomSheet/BottomSheet.tsx +56 -52
  399. package/src/components/Header/CloseDrawerButton.tsx +5 -1
  400. package/src/components/Header/Header.tsx +20 -18
  401. package/src/components/Header/HeaderNavigationTabs.tsx +42 -0
  402. package/src/components/Header/HeaderTabs.tsx +48 -0
  403. package/src/components/Header/NavigationHeader.tsx +11 -8
  404. package/src/components/LimitOrderSettings/LimitOrderSettings.style.tsx +69 -0
  405. package/src/components/LimitOrderSettings/LimitOrderSettings.tsx +124 -0
  406. package/src/components/LimitPriceCard/LimitPriceCard.style.tsx +103 -0
  407. package/src/components/LimitPriceCard/LimitPriceCard.tsx +153 -0
  408. package/src/components/LimitPriceCard/LimitPricePresets.tsx +139 -0
  409. package/src/components/ReverseTokensButton/ReverseTokensButton.tsx +4 -1
  410. package/src/components/RouteCard/RouteProviderCard.tsx +113 -0
  411. package/src/components/Routes/LimitOrderRoutes.tsx +64 -0
  412. package/src/components/Routes/Routes.tsx +3 -2
  413. package/src/components/SettingsPanel/SettingsPanel.style.tsx +41 -0
  414. package/src/components/SettingsPanel/SettingsPanel.tsx +73 -0
  415. package/src/components/SettingsPanel/utils.ts +27 -0
  416. package/src/components/Skeleton/WidgetSkeleton.tsx +1 -1
  417. package/src/components/SwapButton/SwapButton.style.tsx +28 -0
  418. package/src/components/SwapButton/SwapButton.tsx +71 -0
  419. package/src/components/Tabs/NavigationTabs.tsx +3 -0
  420. package/src/components/TokenList/TokenDetailsSheet.tsx +9 -7
  421. package/src/components/TokenList/TokenDetailsSheetContent.tsx +176 -177
  422. package/src/components/TokenList/useTokenSelect.ts +2 -2
  423. package/src/components/TokenPillButton/TokenPillButton.style.tsx +50 -0
  424. package/src/components/TokenPillButton/TokenPillButton.tsx +81 -0
  425. package/src/config/version.ts +1 -1
  426. package/src/hooks/useLimitMarketRate.ts +39 -0
  427. package/src/hooks/useLinkedLimitFields.ts +74 -0
  428. package/src/hooks/useRoutes.ts +45 -4
  429. package/src/hooks/useSwapOnly.ts +2 -5
  430. package/src/hooks/useToAddressRequirements.ts +2 -2
  431. package/src/hooks/useWideVariant.ts +8 -2
  432. package/src/pages/MainPage/LimitPageContent.tsx +18 -0
  433. package/src/pages/MainPage/MainPage.tsx +43 -30
  434. package/src/pages/MainPage/MainPageActions.tsx +35 -0
  435. package/src/pages/MainPage/ReviewButton.tsx +15 -3
  436. package/src/pages/RoutePriorityPage.tsx +55 -0
  437. package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +176 -185
  438. package/src/pages/SendToWallet/ConfirmAddressSheet.tsx +9 -6
  439. package/src/pages/SettingsPage/RoutePrioritySettings.tsx +14 -38
  440. package/src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx +58 -65
  441. package/src/pages/SettingsPage/SettingsCard/SettingsAccordian.tsx +4 -4
  442. package/src/pages/SettingsPage/SlippageSettings/SlippagePage.tsx +176 -0
  443. package/src/pages/SettingsPage/SlippageSettings/SlippageSettings.style.tsx +32 -25
  444. package/src/pages/SettingsPage/SlippageSettings/SlippageSettings.tsx +14 -128
  445. package/src/pages/SettingsPage/ThemeSettings.tsx +4 -0
  446. package/src/pages/TransactionPage/ConfirmToAddressSheet.tsx +9 -6
  447. package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +53 -58
  448. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +24 -21
  449. package/src/pages/TransactionPage/TransactionExecutionContent.tsx +8 -6
  450. package/src/providers/QueryClientProvider.tsx +2 -2
  451. package/src/providers/SDKClientProvider.tsx +3 -7
  452. package/src/providers/WidgetProvider/WidgetProvider.tsx +6 -7
  453. package/src/stores/StoreProvider.tsx +3 -10
  454. package/src/stores/bookmarks/BookmarkStore.tsx +4 -4
  455. package/src/stores/chains/ChainOrderStore.tsx +4 -4
  456. package/src/stores/form/FormStore.tsx +2 -2
  457. package/src/stores/form/URLSearchParamsBuilder.tsx +25 -3
  458. package/src/stores/form/createFormStore.ts +7 -3
  459. package/src/stores/form/getDefaultValuesFromQueryString.ts +11 -0
  460. package/src/stores/form/types.ts +14 -1
  461. package/src/stores/form/useClearAmountFields.ts +1 -0
  462. package/src/stores/form/useFormStore.ts +2 -2
  463. package/src/stores/header/useHeaderStore.tsx +3 -5
  464. package/src/stores/navigationTabs/types.ts +33 -0
  465. package/src/stores/navigationTabs/useNavigationTabLabel.ts +28 -0
  466. package/src/stores/navigationTabs/useNavigationTabsStore.tsx +113 -0
  467. package/src/stores/navigationTabs/utils.ts +196 -0
  468. package/src/stores/pinnedTokens/PinnedTokensStore.tsx +4 -4
  469. package/src/stores/routes/RouteExecutionStore.tsx +4 -4
  470. package/src/stores/settings/SettingsStore.tsx +4 -4
  471. package/src/stores/settings/createSettingsStore.ts +48 -12
  472. package/src/stores/settings/types.ts +1 -16
  473. package/src/types/events.ts +12 -0
  474. package/src/types/widget.ts +40 -1
  475. package/src/utils/format.ts +6 -2
  476. package/src/utils/limitOrder.ts +88 -0
  477. package/src/utils/navigationRoutes.ts +6 -0
  478. package/dist/esm/components/Header/SplitNavigationTabs.js +0 -33
  479. package/dist/esm/components/Header/SplitNavigationTabs.js.map +0 -1
  480. package/dist/esm/stores/settings/useSplitModeStore.js +0 -36
  481. package/dist/esm/stores/settings/useSplitModeStore.js.map +0 -1
  482. package/dist/esm/utils/variant.js.map +0 -1
  483. package/src/components/Header/SplitNavigationTabs.tsx +0 -32
  484. package/src/stores/settings/useSplitModeStore.tsx +0 -58
  485. /package/src/utils/{variant.ts → mode.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { PropsWithChildren } from 'react'
2
- import { createContext, useContext, useEffect, useId, useState } from 'react'
2
+ import { createContext, use, useEffect, useId, useState } from 'react'
3
3
 
4
4
  const SettingsAccordionContext = createContext({
5
5
  setOpenCard: (_id: string) => {},
@@ -12,9 +12,9 @@ export const SettingsCardAccordion: React.FC<PropsWithChildren> = ({
12
12
  const [openCard, setOpenCard] = useState('')
13
13
 
14
14
  return (
15
- <SettingsAccordionContext.Provider value={{ openCard, setOpenCard }}>
15
+ <SettingsAccordionContext value={{ openCard, setOpenCard }}>
16
16
  {children}
17
- </SettingsAccordionContext.Provider>
17
+ </SettingsAccordionContext>
18
18
  )
19
19
  }
20
20
 
@@ -24,7 +24,7 @@ export const useSettingsCardExpandable = (): {
24
24
  } => {
25
25
  const settingCardExpandableId = useId()
26
26
  const [expanded, setExpanded] = useState(false)
27
- const { openCard, setOpenCard } = useContext(SettingsAccordionContext)
27
+ const { openCard, setOpenCard } = use(SettingsAccordionContext)
28
28
 
29
29
  const toggleExpanded = (forceExpanded?: boolean) => {
30
30
  const newExpanded = forceExpanded ?? !expanded
@@ -0,0 +1,176 @@
1
+ import Check from '@mui/icons-material/Check'
2
+ import CloseRounded from '@mui/icons-material/CloseRounded'
3
+ import WarningRounded from '@mui/icons-material/WarningRounded'
4
+ import { Box, Collapse, List, Typography } from '@mui/material'
5
+ import type { ChangeEventHandler, FocusEventHandler } from 'react'
6
+ import { useRef, useState } from 'react'
7
+ import { useTranslation } from 'react-i18next'
8
+ import { ListItemText } from '../../../components/ListItemText.js'
9
+ import { PageContainer } from '../../../components/PageContainer.js'
10
+ import { SettingsListItemButton } from '../../../components/SettingsListItemButton.js'
11
+ import { useHeader } from '../../../hooks/useHeader.js'
12
+ import { useListHeight } from '../../../hooks/useListHeight.js'
13
+ import { useSettingMonitor } from '../../../hooks/useSettingMonitor.js'
14
+ import { defaultSlippage } from '../../../stores/settings/createSettingsStore.js'
15
+ import { useSettings } from '../../../stores/settings/useSettings.js'
16
+ import { useSettingsActions } from '../../../stores/settings/useSettingsActions.js'
17
+ import { formatInputAmount, formatSlippage } from '../../../utils/format.js'
18
+ import {
19
+ SlippageClearButton,
20
+ SlippageInput,
21
+ SlippageLimitsWarningContainer,
22
+ } from './SlippageSettings.style.js'
23
+
24
+ const slippagePresets = ['0.5', '1']
25
+ const maxFractionDigits = 5
26
+
27
+ export const SlippagePage: React.FC = () => {
28
+ const { t } = useTranslation()
29
+ const {
30
+ isSlippageNotRecommended,
31
+ isSlippageUnderRecommendedLimits,
32
+ isSlippageOutsideRecommendedLimits,
33
+ } = useSettingMonitor()
34
+ const { slippage } = useSettings(['slippage'])
35
+ const { setValue } = useSettingsActions()
36
+ const defaultValue = useRef(slippage)
37
+ const listParentRef = useRef<HTMLUListElement | null>(null)
38
+ const { listHeight } = useListHeight({ listParentRef })
39
+
40
+ useHeader(t('settings.slippage'))
41
+
42
+ const isAuto = !slippage || slippage === defaultSlippage
43
+ const isPreset = !!slippage && slippagePresets.includes(slippage)
44
+ const isCustom = !isAuto && !isPreset
45
+
46
+ const [customMode, setCustomMode] = useState(isCustom)
47
+ const [inputValue, setInputValue] = useState(isCustom ? (slippage ?? '') : '')
48
+
49
+ const handleAuto = () => {
50
+ setCustomMode(false)
51
+ setInputValue('')
52
+ setValue('slippage', defaultSlippage)
53
+ }
54
+
55
+ const handlePreset = (preset: string) => {
56
+ setCustomMode(false)
57
+ setValue('slippage', preset)
58
+ }
59
+
60
+ const handleCustom = () => {
61
+ setCustomMode(true)
62
+ const initialValue = slippage || ''
63
+ if (initialValue) {
64
+ setInputValue(initialValue)
65
+ setValue('slippage', initialValue)
66
+ }
67
+ }
68
+
69
+ const formatAndSetSlippage = (value: string, returnInitial = false) => {
70
+ const formattedSlippage = formatSlippage(
71
+ value,
72
+ defaultValue.current,
73
+ returnInitial
74
+ )
75
+ const formattedValue =
76
+ Number(formattedSlippage) === 0 && !returnInitial
77
+ ? '0'
78
+ : formatInputAmount(formattedSlippage, maxFractionDigits, returnInitial)
79
+ const maxLength =
80
+ Number(formattedValue) < 10
81
+ ? maxFractionDigits + 2
82
+ : maxFractionDigits + 3
83
+ const slicedValue = formattedValue.slice(0, maxLength)
84
+ setInputValue(slicedValue)
85
+ setValue('slippage', slicedValue.length ? slicedValue : defaultSlippage)
86
+ }
87
+
88
+ const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {
89
+ formatAndSetSlippage(event.target.value, true)
90
+ }
91
+
92
+ const handleInputFocus: FocusEventHandler<HTMLInputElement> = (event) => {
93
+ formatAndSetSlippage(event.target.value)
94
+ }
95
+
96
+ const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {
97
+ formatAndSetSlippage(event.target.value)
98
+ }
99
+
100
+ const slippageWarningText = isSlippageOutsideRecommendedLimits
101
+ ? t('warning.message.slippageOutsideRecommendedLimits')
102
+ : isSlippageUnderRecommendedLimits
103
+ ? t('warning.message.slippageUnderRecommendedLimits')
104
+ : ''
105
+
106
+ return (
107
+ <PageContainer disableGutters>
108
+ <List
109
+ className="long-list"
110
+ ref={listParentRef}
111
+ style={{ height: listHeight, overflow: 'auto' }}
112
+ sx={{
113
+ padding: 1.5,
114
+ }}
115
+ >
116
+ <SettingsListItemButton onClick={handleAuto}>
117
+ <ListItemText
118
+ primary={t('button.auto')}
119
+ secondary={t('settings.slippageAutoDescription')}
120
+ />
121
+ {!customMode && isAuto && <Check color="primary" />}
122
+ </SettingsListItemButton>
123
+ {slippagePresets.map((preset) => (
124
+ <SettingsListItemButton
125
+ key={preset}
126
+ onClick={() => handlePreset(preset)}
127
+ >
128
+ <ListItemText primary={`${preset}%`} />
129
+ {!customMode && slippage === preset && <Check color="primary" />}
130
+ </SettingsListItemButton>
131
+ ))}
132
+ <SettingsListItemButton onClick={handleCustom}>
133
+ <ListItemText primary={t('settings.custom')} />
134
+ {customMode && <Check color="primary" />}
135
+ </SettingsListItemButton>
136
+ <Collapse in={customMode}>
137
+ <Box sx={{ px: 1.5, pt: 1 }}>
138
+ <SlippageInput
139
+ placeholder="0.5"
140
+ inputProps={{ inputMode: 'decimal' }}
141
+ value={inputValue}
142
+ onChange={handleInputUpdate}
143
+ onFocus={handleInputFocus}
144
+ onBlur={handleInputBlur}
145
+ autoComplete="off"
146
+ endAdornment={
147
+ !isAuto && (
148
+ <SlippageClearButton
149
+ size="small"
150
+ onClick={handleAuto}
151
+ aria-label="Clear"
152
+ >
153
+ <CloseRounded fontSize="small" />
154
+ </SlippageClearButton>
155
+ )
156
+ }
157
+ />
158
+ {isSlippageNotRecommended && (
159
+ <SlippageLimitsWarningContainer>
160
+ <WarningRounded color="warning" />
161
+ <Typography
162
+ sx={{
163
+ fontSize: 13,
164
+ fontWeight: 400,
165
+ }}
166
+ >
167
+ {slippageWarningText}
168
+ </Typography>
169
+ </SlippageLimitsWarningContainer>
170
+ )}
171
+ </Box>
172
+ </Collapse>
173
+ </List>
174
+ </PageContainer>
175
+ )
176
+ }
@@ -1,7 +1,7 @@
1
1
  import type { Theme } from '@mui/material'
2
2
  import {
3
3
  Box,
4
- ButtonBase,
4
+ IconButton,
5
5
  InputBase,
6
6
  inputBaseClasses,
7
7
  styled,
@@ -36,30 +36,6 @@ interface SettingsControlProps {
36
36
  selected?: boolean
37
37
  }
38
38
 
39
- export const SettingsDefaultButton: React.FC<
40
- React.ComponentProps<typeof ButtonBase> & SettingsControlProps
41
- > = styled(ButtonBase)<SettingsControlProps>(({ theme, selected }) => {
42
- const settingsControlSelectedStyles = settingsControlSelected(theme)
43
- const selectedStyle = selected
44
- ? {
45
- '&:not(:focus)': {
46
- ...settingsControlSelectedStyles,
47
- },
48
- }
49
- : {}
50
-
51
- return {
52
- height: '100%',
53
- width: '100%',
54
- fontSize: '1rem',
55
- fontWeight: 700,
56
- '&:focus': {
57
- ...settingsControlSelectedStyles,
58
- },
59
- ...selectedStyle,
60
- }
61
- })
62
-
63
39
  export const SettingsCustomInput: React.FC<
64
40
  React.ComponentProps<typeof InputBase> & SettingsControlProps
65
41
  > = styled(InputBase)<SettingsControlProps>(({ theme, selected }) => {
@@ -100,3 +76,34 @@ export const SlippageLimitsWarningContainer: React.FC<
100
76
  gap: theme.spacing(1.25),
101
77
  marginTop: theme.spacing(1.5),
102
78
  }))
79
+
80
+ export const SlippageInput: React.FC<React.ComponentProps<typeof InputBase>> =
81
+ styled(InputBase)(({ theme }) => ({
82
+ minHeight: 44,
83
+ width: '100%',
84
+ backgroundColor: theme.vars.palette.background.default,
85
+ border: '1px solid',
86
+ borderColor: theme.vars.palette.divider,
87
+ borderRadius: theme.vars.shape.borderRadius,
88
+ paddingRight: theme.spacing(1),
89
+ [`.${inputBaseClasses.input}`]: {
90
+ padding: theme.spacing(1.5),
91
+ fontSize: 16,
92
+ fontWeight: 500,
93
+ lineHeight: '20px',
94
+ '&::placeholder': {
95
+ opacity: 1,
96
+ color: theme.vars.palette.text.secondary,
97
+ },
98
+ '&::-webkit-outer-spin-button, &::-webkit-inner-spin-button': {
99
+ display: 'none',
100
+ },
101
+ },
102
+ }))
103
+
104
+ export const SlippageClearButton: React.FC<
105
+ React.ComponentProps<typeof IconButton>
106
+ > = styled(IconButton)(({ theme }) => ({
107
+ padding: theme.spacing(0.5),
108
+ flexShrink: 0,
109
+ }))
@@ -1,82 +1,17 @@
1
1
  import Percent from '@mui/icons-material/Percent'
2
- import WarningRounded from '@mui/icons-material/WarningRounded'
3
- import { Box, Typography } from '@mui/material'
4
- import type { ChangeEventHandler, FocusEventHandler } from 'react'
5
- import { useRef, useState } from 'react'
2
+ import { useNavigate } from '@tanstack/react-router'
6
3
  import { useTranslation } from 'react-i18next'
4
+ import { CardButton } from '../../../components/Card/CardButton.js'
7
5
  import { useSettingMonitor } from '../../../hooks/useSettingMonitor.js'
8
- import { defaultSlippage } from '../../../stores/settings/createSettingsStore.js'
9
6
  import { useSettings } from '../../../stores/settings/useSettings.js'
10
- import { useSettingsActions } from '../../../stores/settings/useSettingsActions.js'
11
- import { formatInputAmount, formatSlippage } from '../../../utils/format.js'
7
+ import { navigationRoutes } from '../../../utils/navigationRoutes.js'
12
8
  import { BadgedValue } from '../SettingsCard/BadgedValue.js'
13
- import { SettingCardExpandable } from '../SettingsCard/SettingCardExpandable.js'
14
- import {
15
- SettingsCustomInput,
16
- SettingsDefaultButton,
17
- SettingsFieldSet,
18
- SlippageLimitsWarningContainer,
19
- } from './SlippageSettings.style.js'
20
-
21
- const defaultSlippageInputValue = '0.5'
22
- const maxFractionDigits = 5
23
9
 
24
10
  export const SlippageSettings: React.FC = () => {
25
11
  const { t } = useTranslation()
26
- const {
27
- isSlippageNotRecommended,
28
- isSlippageUnderRecommendedLimits,
29
- isSlippageOutsideRecommendedLimits,
30
- isSlippageChanged,
31
- } = useSettingMonitor()
12
+ const navigate = useNavigate()
13
+ const { isSlippageNotRecommended, isSlippageChanged } = useSettingMonitor()
32
14
  const { slippage } = useSettings(['slippage'])
33
- const { setValue } = useSettingsActions()
34
- const defaultValue = useRef(slippage)
35
- const [focused, setFocused] = useState<'input' | 'button'>()
36
-
37
- const customInputValue =
38
- !slippage || slippage === defaultSlippage
39
- ? defaultSlippageInputValue
40
- : slippage
41
-
42
- const [inputValue, setInputValue] = useState(customInputValue)
43
-
44
- const handleDefaultClick = () => {
45
- setValue('slippage', defaultSlippage)
46
- }
47
-
48
- const formatAndSetSlippage = (value: string, returnInitial = false) => {
49
- const formattedSlippage = formatSlippage(
50
- value,
51
- defaultValue.current,
52
- returnInitial
53
- )
54
- const formattedValue =
55
- Number(formattedSlippage) === 0 && !returnInitial
56
- ? '0'
57
- : formatInputAmount(formattedSlippage, maxFractionDigits, returnInitial)
58
- const maxLength =
59
- Number(formattedValue) < 10
60
- ? maxFractionDigits + 2
61
- : maxFractionDigits + 3
62
- const slicedValue = formattedValue.slice(0, maxLength)
63
- setInputValue(slicedValue)
64
- setValue('slippage', slicedValue.length ? slicedValue : defaultSlippage)
65
- }
66
-
67
- const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {
68
- formatAndSetSlippage(event.target.value, true)
69
- }
70
-
71
- const handleInputFocus: FocusEventHandler<HTMLInputElement> = (event) => {
72
- setFocused('input')
73
- formatAndSetSlippage(event.target.value)
74
- }
75
-
76
- const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {
77
- setFocused(undefined)
78
- formatAndSetSlippage(event.target.value)
79
- }
80
15
 
81
16
  const badgeColor = isSlippageNotRecommended
82
17
  ? 'warning'
@@ -84,68 +19,19 @@ export const SlippageSettings: React.FC = () => {
84
19
  ? 'info'
85
20
  : undefined
86
21
 
87
- const slippageWarningText = isSlippageOutsideRecommendedLimits
88
- ? t('warning.message.slippageOutsideRecommendedLimits')
89
- : isSlippageUnderRecommendedLimits
90
- ? t('warning.message.slippageUnderRecommendedLimits')
91
- : ''
22
+ const handleClick = () => {
23
+ navigate({ to: navigationRoutes.slippage })
24
+ }
92
25
 
93
26
  return (
94
- <SettingCardExpandable
95
- value={
96
- <BadgedValue badgeColor={badgeColor} showBadge={!!badgeColor}>
97
- {slippage ? `${slippage}%` : t('button.auto')}
98
- </BadgedValue>
99
- }
27
+ <CardButton
28
+ onClick={handleClick}
100
29
  icon={<Percent />}
101
30
  title={t('settings.slippage')}
102
31
  >
103
- <Box
104
- sx={{
105
- mt: 1.5,
106
- }}
107
- >
108
- <SettingsFieldSet>
109
- <SettingsDefaultButton
110
- selected={defaultSlippage === slippage && focused !== 'input'}
111
- onFocus={() => {
112
- setFocused('button')
113
- }}
114
- onBlur={() => {
115
- setFocused(undefined)
116
- }}
117
- onClick={handleDefaultClick}
118
- disableRipple
119
- >
120
- {t('button.auto')}
121
- </SettingsDefaultButton>
122
- <SettingsCustomInput
123
- selected={defaultSlippage !== slippage && focused !== 'button'}
124
- placeholder={focused === 'input' ? '' : t('settings.custom')}
125
- inputProps={{
126
- inputMode: 'decimal',
127
- }}
128
- onChange={handleInputUpdate}
129
- onFocus={handleInputFocus}
130
- value={inputValue}
131
- autoComplete="off"
132
- onBlur={handleInputBlur}
133
- />
134
- </SettingsFieldSet>
135
- {isSlippageNotRecommended && (
136
- <SlippageLimitsWarningContainer>
137
- <WarningRounded color="warning" />
138
- <Typography
139
- sx={{
140
- fontSize: 13,
141
- fontWeight: 400,
142
- }}
143
- >
144
- {slippageWarningText}
145
- </Typography>
146
- </SlippageLimitsWarningContainer>
147
- )}
148
- </Box>
149
- </SettingCardExpandable>
32
+ <BadgedValue badgeColor={badgeColor} showBadge={!!badgeColor}>
33
+ {slippage ? `${slippage}%` : t('button.auto')}
34
+ </BadgedValue>
35
+ </CardButton>
150
36
  )
151
37
  }
@@ -5,7 +5,9 @@ import { Tooltip, useColorScheme } from '@mui/material'
5
5
  import { useTranslation } from 'react-i18next'
6
6
  import { CardValue } from '../../components/Card/CardButton.style.js'
7
7
  import { CardTabs, Tab } from '../../components/Tabs/Tabs.style.js'
8
+ import { useWidgetEvents } from '../../hooks/useWidgetEvents.js'
8
9
  import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
10
+ import { WidgetEvent } from '../../types/events.js'
9
11
  import type { Appearance } from '../../types/widget.js'
10
12
  import { SettingCardExpandable } from './SettingsCard/SettingCardExpandable.js'
11
13
 
@@ -37,6 +39,7 @@ const ThemeTab: React.FC<ThemeTabProps> = ({
37
39
  export const ThemeSettings: React.FC = () => {
38
40
  const { t } = useTranslation()
39
41
  const { mode, setMode } = useColorScheme()
42
+ const widgetEvents = useWidgetEvents()
40
43
  const { hiddenUI } = useWidgetConfig()
41
44
 
42
45
  if (hiddenUI?.appearance) {
@@ -52,6 +55,7 @@ export const ThemeSettings: React.FC = () => {
52
55
  appearance: Appearance
53
56
  ) => {
54
57
  setMode(appearance)
58
+ widgetEvents.emit(WidgetEvent.AppearanceChanged, appearance)
55
59
  }
56
60
 
57
61
  return (
@@ -1,8 +1,8 @@
1
1
  import Wallet from '@mui/icons-material/Wallet'
2
2
  import WarningRounded from '@mui/icons-material/WarningRounded'
3
3
  import { Button, Typography } from '@mui/material'
4
- import type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'
5
- import { forwardRef, useRef } from 'react'
4
+ import type { JSX, Ref, RefObject } from 'react'
5
+ import { useRef } from 'react'
6
6
  import { useTranslation } from 'react-i18next'
7
7
  import { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'
8
8
  import type { BottomSheetBase } from '../../components/BottomSheet/types.js'
@@ -28,9 +28,12 @@ interface ConfirmToAddressSheetContentProps extends ConfirmToAddressSheetProps {
28
28
  onClose: () => void
29
29
  }
30
30
 
31
- export const ConfirmToAddressSheet: ForwardRefExoticComponent<
32
- ConfirmToAddressSheetProps & RefAttributes<BottomSheetBase>
33
- > = forwardRef<BottomSheetBase, ConfirmToAddressSheetProps>((props, ref) => {
31
+ export const ConfirmToAddressSheet = ({
32
+ ref,
33
+ ...props
34
+ }: ConfirmToAddressSheetProps & {
35
+ ref?: Ref<BottomSheetBase>
36
+ }): JSX.Element => {
34
37
  const handleClose = () => {
35
38
  ;(ref as RefObject<BottomSheetBase>).current?.close()
36
39
  }
@@ -40,7 +43,7 @@ export const ConfirmToAddressSheet: ForwardRefExoticComponent<
40
43
  <ConfirmToAddressSheetContent {...props} onClose={handleClose} />
41
44
  </BottomSheet>
42
45
  )
43
- })
46
+ }
44
47
 
45
48
  const ConfirmToAddressSheetContent: React.FC<
46
49
  ConfirmToAddressSheetContentProps
@@ -1,13 +1,7 @@
1
1
  import type { ExchangeRateUpdateParams } from '@lifi/sdk'
2
2
  import { Box, Button, Typography } from '@mui/material'
3
- import type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'
4
- import {
5
- forwardRef,
6
- useCallback,
7
- useImperativeHandle,
8
- useRef,
9
- useState,
10
- } from 'react'
3
+ import type { JSX, Ref } from 'react'
4
+ import { useCallback, useImperativeHandle, useRef, useState } from 'react'
11
5
  import { useTranslation } from 'react-i18next'
12
6
  import { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'
13
7
  import type { BottomSheetBase } from '../../components/BottomSheet/types.js'
@@ -28,62 +22,63 @@ interface ExchangeRateBottomSheetProps {
28
22
  onCancel?(): void
29
23
  }
30
24
 
31
- export const ExchangeRateBottomSheet: ForwardRefExoticComponent<
32
- ExchangeRateBottomSheetProps & RefAttributes<ExchangeRateBottomSheetBase>
33
- > = forwardRef<ExchangeRateBottomSheetBase, ExchangeRateBottomSheetProps>(
34
- ({ onContinue, onCancel }, ref) => {
35
- const [data, setData] = useState<ExchangeRateUpdateParams>()
36
- const bottomSheetRef = useRef<BottomSheetBase>(null)
37
- const resolverRef = useRef<(value: boolean) => void>(null)
25
+ export const ExchangeRateBottomSheet = ({
26
+ onContinue,
27
+ onCancel,
28
+ ref,
29
+ }: ExchangeRateBottomSheetProps & {
30
+ ref?: Ref<ExchangeRateBottomSheetBase>
31
+ }): JSX.Element => {
32
+ const [data, setData] = useState<ExchangeRateUpdateParams>()
33
+ const bottomSheetRef = useRef<BottomSheetBase>(null)
34
+ const resolverRef = useRef<(value: boolean) => void>(null)
38
35
 
39
- const handleContinue = () => {
40
- ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(true)
41
- onContinue?.()
36
+ const close = useCallback((value = false, bottomSheetClose = true) => {
37
+ resolverRef.current?.(value)
38
+ if (bottomSheetClose) {
39
+ bottomSheetRef.current?.close()
42
40
  }
41
+ }, [])
43
42
 
44
- const handleCancel = useCallback(() => {
45
- ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(false)
46
- onCancel?.()
47
- }, [onCancel, ref])
43
+ const handleContinue = useCallback(() => {
44
+ close(true)
45
+ onContinue?.()
46
+ }, [close, onContinue])
48
47
 
49
- const handleClose = useCallback(() => {
50
- ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(
51
- false,
52
- false
53
- )
54
- onCancel?.()
55
- }, [onCancel, ref])
48
+ const handleCancel = useCallback(() => {
49
+ close(false)
50
+ onCancel?.()
51
+ }, [close, onCancel])
56
52
 
57
- useImperativeHandle(
58
- ref,
59
- () => ({
60
- isOpen: () => bottomSheetRef.current?.isOpen(),
61
- open: (resolver, data) => {
62
- setData(data)
63
- resolverRef.current = resolver
64
- bottomSheetRef.current?.open()
65
- },
66
- close: (value = false, bottomSheetClose = true) => {
67
- resolverRef.current?.(value)
68
- if (bottomSheetClose) {
69
- bottomSheetRef.current?.close()
70
- }
71
- },
72
- }),
73
- []
74
- )
53
+ const handleClose = useCallback(() => {
54
+ close(false, false)
55
+ onCancel?.()
56
+ }, [close, onCancel])
75
57
 
76
- return (
77
- <BottomSheet ref={bottomSheetRef} onClose={handleClose}>
78
- <ExchangeRateBottomSheetContent
79
- data={data}
80
- onContinue={handleContinue}
81
- onCancel={handleCancel}
82
- />
83
- </BottomSheet>
84
- )
85
- }
86
- )
58
+ useImperativeHandle(
59
+ ref,
60
+ () => ({
61
+ isOpen: () => bottomSheetRef.current?.isOpen(),
62
+ open: (resolver, data) => {
63
+ setData(data)
64
+ resolverRef.current = resolver
65
+ bottomSheetRef.current?.open()
66
+ },
67
+ close,
68
+ }),
69
+ [close]
70
+ )
71
+
72
+ return (
73
+ <BottomSheet ref={bottomSheetRef} onClose={handleClose}>
74
+ <ExchangeRateBottomSheetContent
75
+ data={data}
76
+ onContinue={handleContinue}
77
+ onCancel={handleCancel}
78
+ />
79
+ </BottomSheet>
80
+ )
81
+ }
87
82
 
88
83
  const ExchangeRateBottomSheetContent: React.FC<
89
84
  ExchangeRateBottomSheetProps