@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
@@ -4,14 +4,14 @@ import { AlertMessage } from "../../components/Messages/AlertMessage.js";
4
4
  import { BottomSheet } from "../../components/BottomSheet/BottomSheet.js";
5
5
  import { IconContainer, SendToWalletButtonRow, SendToWalletSheetContainer, SheetAddressContainer, SheetTitle } from "./SendToWalletPage.style.js";
6
6
  import { useSetContentHeight } from "../../hooks/useSetContentHeight.js";
7
- import { forwardRef, useRef } from "react";
7
+ import { useRef } from "react";
8
8
  import { Button, Typography } from "@mui/material";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  import { useTranslation } from "react-i18next";
11
11
  import Wallet from "@mui/icons-material/Wallet";
12
12
  import WarningRounded from "@mui/icons-material/WarningRounded";
13
13
  //#region src/pages/SendToWallet/ConfirmAddressSheet.tsx
14
- const ConfirmAddressSheet = forwardRef((props, ref) => {
14
+ const ConfirmAddressSheet = ({ ref, ...props }) => {
15
15
  const handleClose = () => {
16
16
  ref.current?.close();
17
17
  };
@@ -22,7 +22,7 @@ const ConfirmAddressSheet = forwardRef((props, ref) => {
22
22
  onClose: handleClose
23
23
  })
24
24
  });
25
- });
25
+ };
26
26
  const ConfirmAddressSheetContent = ({ validatedBookmark, onConfirm, onClose }) => {
27
27
  const { t } = useTranslation();
28
28
  const navigateBack = useNavigateBack();
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmAddressSheet.js","names":[],"sources":["../../../../src/pages/SendToWallet/ConfirmAddressSheet.tsx"],"sourcesContent":["import Wallet from '@mui/icons-material/Wallet'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Button, Typography } from '@mui/material'\nimport type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'\nimport { forwardRef, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { AlertMessage } from '../../components/Messages/AlertMessage.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport {\n IconContainer,\n SendToWalletButtonRow,\n SendToWalletSheetContainer,\n SheetAddressContainer,\n SheetTitle,\n} from './SendToWalletPage.style.js'\n\ninterface ConfirmAddressSheetProps {\n onConfirm: (wallet: Bookmark) => void\n validatedBookmark?: Bookmark\n}\n\ninterface ConfirmAddressSheetContentProps extends ConfirmAddressSheetProps {\n onClose: () => void\n}\n\nexport const ConfirmAddressSheet: ForwardRefExoticComponent<\n ConfirmAddressSheetProps & RefAttributes<BottomSheetBase>\n> = forwardRef<BottomSheetBase, ConfirmAddressSheetProps>((props, ref) => {\n const handleClose = () => {\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n }\n\n return (\n <BottomSheet ref={ref}>\n <ConfirmAddressSheetContent {...props} onClose={handleClose} />\n </BottomSheet>\n )\n})\n\nconst ConfirmAddressSheetContent: React.FC<ConfirmAddressSheetContentProps> = ({\n validatedBookmark,\n onConfirm,\n onClose,\n}) => {\n const { t } = useTranslation()\n const navigateBack = useNavigateBack()\n const { setFieldValue } = useFieldActions()\n const containerRef = useRef<HTMLElement>(null)\n useSetContentHeight(containerRef)\n\n const handleConfirm = () => {\n if (validatedBookmark) {\n setFieldValue('toAddress', validatedBookmark.address, {\n isTouched: true,\n isDirty: true,\n })\n onConfirm?.(validatedBookmark)\n onClose()\n navigateBack()\n }\n }\n\n return (\n <SendToWalletSheetContainer ref={containerRef}>\n <IconContainer>\n <Wallet sx={{ fontSize: 40 }} />\n </IconContainer>\n <SheetTitle>{t('sendToWallet.confirmWalletAddress')}</SheetTitle>\n <SheetAddressContainer>\n {validatedBookmark?.name ? (\n <Typography\n sx={{\n fontWeight: 600,\n mb: 0.5,\n }}\n >\n {validatedBookmark?.name}\n </Typography>\n ) : null}\n <Typography>{validatedBookmark?.address}</Typography>\n </SheetAddressContainer>\n <AlertMessage\n severity=\"warning\"\n title={\n <Typography variant=\"body2\" sx={{ color: 'text.primary' }}>\n {t('warning.message.fundsLossPrevention')}\n </Typography>\n }\n icon={<WarningRounded />}\n multiline\n />\n <SendToWalletButtonRow>\n <Button variant=\"text\" onClick={onClose} fullWidth>\n {t('button.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleConfirm} fullWidth>\n {t('button.confirm')}\n </Button>\n </SendToWalletButtonRow>\n </SendToWalletSheetContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AA8BA,MAAa,sBAET,YAAuD,OAAO,QAAQ;CACxE,MAAM,oBAAoB;EACvB,IAAoC,SAAS,MAAM;CACtD;CAEA,OACE,oBAAC,aAAD;EAAkB;YAChB,oBAAC,4BAAD;GAA4B,GAAI;GAAO,SAAS;EAAc,CAAA;CACnD,CAAA;AAEjB,CAAC;AAED,MAAM,8BAAyE,EAC7E,mBACA,WACA,cACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,eAAe,gBAAgB;CACrC,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,eAAe,OAAoB,IAAI;CAC7C,oBAAoB,YAAY;CAEhC,MAAM,sBAAsB;EAC1B,IAAI,mBAAmB;GACrB,cAAc,aAAa,kBAAkB,SAAS;IACpD,WAAW;IACX,SAAS;GACX,CAAC;GACD,YAAY,iBAAiB;GAC7B,QAAQ;GACR,aAAa;EACf;CACF;CAEA,OACE,qBAAC,4BAAD;EAA4B,KAAK;YAAjC;GACE,oBAAC,eAAD,EAAA,UACE,oBAAC,QAAD,EAAQ,IAAI,EAAE,UAAU,GAAG,EAAI,CAAA,EAClB,CAAA;GACf,oBAAC,YAAD,EAAA,UAAa,EAAE,mCAAmC,EAAc,CAAA;GAChE,qBAAC,uBAAD,EAAA,UAAA,CACG,mBAAmB,OAClB,oBAAC,YAAD;IACE,IAAI;KACF,YAAY;KACZ,IAAI;IACN;cAEC,mBAAmB;GACV,CAAA,IACV,MACJ,oBAAC,YAAD,EAAA,UAAa,mBAAmB,QAAoB,CAAA,CAC/B,EAAA,CAAA;GACvB,oBAAC,cAAD;IACE,UAAS;IACT,OACE,oBAAC,YAAD;KAAY,SAAQ;KAAQ,IAAI,EAAE,OAAO,eAAe;eACrD,EAAE,qCAAqC;IAC9B,CAAA;IAEd,MAAM,oBAAC,gBAAD,CAAiB,CAAA;IACvB,WAAA;GACD,CAAA;GACD,qBAAC,uBAAD,EAAA,UAAA,CACE,oBAAC,QAAD;IAAQ,SAAQ;IAAO,SAAS;IAAS,WAAA;cACtC,EAAE,eAAe;GACZ,CAAA,GACR,oBAAC,QAAD;IAAQ,SAAQ;IAAY,SAAS;IAAe,WAAA;cACjD,EAAE,gBAAgB;GACb,CAAA,CACa,EAAA,CAAA;EACG;;AAEhC"}
1
+ {"version":3,"file":"ConfirmAddressSheet.js","names":[],"sources":["../../../../src/pages/SendToWallet/ConfirmAddressSheet.tsx"],"sourcesContent":["import Wallet from '@mui/icons-material/Wallet'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Button, Typography } from '@mui/material'\nimport type { JSX, Ref, RefObject } from 'react'\nimport { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { AlertMessage } from '../../components/Messages/AlertMessage.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport {\n IconContainer,\n SendToWalletButtonRow,\n SendToWalletSheetContainer,\n SheetAddressContainer,\n SheetTitle,\n} from './SendToWalletPage.style.js'\n\ninterface ConfirmAddressSheetProps {\n onConfirm: (wallet: Bookmark) => void\n validatedBookmark?: Bookmark\n}\n\ninterface ConfirmAddressSheetContentProps extends ConfirmAddressSheetProps {\n onClose: () => void\n}\n\nexport const ConfirmAddressSheet = ({\n ref,\n ...props\n}: ConfirmAddressSheetProps & {\n ref?: Ref<BottomSheetBase>\n}): JSX.Element => {\n const handleClose = () => {\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n }\n\n return (\n <BottomSheet ref={ref}>\n <ConfirmAddressSheetContent {...props} onClose={handleClose} />\n </BottomSheet>\n )\n}\n\nconst ConfirmAddressSheetContent: React.FC<ConfirmAddressSheetContentProps> = ({\n validatedBookmark,\n onConfirm,\n onClose,\n}) => {\n const { t } = useTranslation()\n const navigateBack = useNavigateBack()\n const { setFieldValue } = useFieldActions()\n const containerRef = useRef<HTMLElement>(null)\n useSetContentHeight(containerRef)\n\n const handleConfirm = () => {\n if (validatedBookmark) {\n setFieldValue('toAddress', validatedBookmark.address, {\n isTouched: true,\n isDirty: true,\n })\n onConfirm?.(validatedBookmark)\n onClose()\n navigateBack()\n }\n }\n\n return (\n <SendToWalletSheetContainer ref={containerRef}>\n <IconContainer>\n <Wallet sx={{ fontSize: 40 }} />\n </IconContainer>\n <SheetTitle>{t('sendToWallet.confirmWalletAddress')}</SheetTitle>\n <SheetAddressContainer>\n {validatedBookmark?.name ? (\n <Typography\n sx={{\n fontWeight: 600,\n mb: 0.5,\n }}\n >\n {validatedBookmark?.name}\n </Typography>\n ) : null}\n <Typography>{validatedBookmark?.address}</Typography>\n </SheetAddressContainer>\n <AlertMessage\n severity=\"warning\"\n title={\n <Typography variant=\"body2\" sx={{ color: 'text.primary' }}>\n {t('warning.message.fundsLossPrevention')}\n </Typography>\n }\n icon={<WarningRounded />}\n multiline\n />\n <SendToWalletButtonRow>\n <Button variant=\"text\" onClick={onClose} fullWidth>\n {t('button.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleConfirm} fullWidth>\n {t('button.confirm')}\n </Button>\n </SendToWalletButtonRow>\n </SendToWalletSheetContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AA8BA,MAAa,uBAAuB,EAClC,KACA,GAAG,YAGc;CACjB,MAAM,oBAAoB;EACvB,IAAoC,SAAS,MAAM;CACtD;CAEA,OACE,oBAAC,aAAD;EAAkB;YAChB,oBAAC,4BAAD;GAA4B,GAAI;GAAO,SAAS;EAAc,CAAA;CACnD,CAAA;AAEjB;AAEA,MAAM,8BAAyE,EAC7E,mBACA,WACA,cACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,eAAe,gBAAgB;CACrC,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,eAAe,OAAoB,IAAI;CAC7C,oBAAoB,YAAY;CAEhC,MAAM,sBAAsB;EAC1B,IAAI,mBAAmB;GACrB,cAAc,aAAa,kBAAkB,SAAS;IACpD,WAAW;IACX,SAAS;GACX,CAAC;GACD,YAAY,iBAAiB;GAC7B,QAAQ;GACR,aAAa;EACf;CACF;CAEA,OACE,qBAAC,4BAAD;EAA4B,KAAK;YAAjC;GACE,oBAAC,eAAD,EAAA,UACE,oBAAC,QAAD,EAAQ,IAAI,EAAE,UAAU,GAAG,EAAI,CAAA,EAClB,CAAA;GACf,oBAAC,YAAD,EAAA,UAAa,EAAE,mCAAmC,EAAc,CAAA;GAChE,qBAAC,uBAAD,EAAA,UAAA,CACG,mBAAmB,OAClB,oBAAC,YAAD;IACE,IAAI;KACF,YAAY;KACZ,IAAI;IACN;cAEC,mBAAmB;GACV,CAAA,IACV,MACJ,oBAAC,YAAD,EAAA,UAAa,mBAAmB,QAAoB,CAAA,CAC/B,EAAA,CAAA;GACvB,oBAAC,cAAD;IACE,UAAS;IACT,OACE,oBAAC,YAAD;KAAY,SAAQ;KAAQ,IAAI,EAAE,OAAO,eAAe;eACrD,EAAE,qCAAqC;IAC9B,CAAA;IAEd,MAAM,oBAAC,gBAAD,CAAiB,CAAA;IACvB,WAAA;GACD,CAAA;GACD,qBAAC,uBAAD,EAAA,UAAA,CACE,oBAAC,QAAD;IAAQ,SAAQ;IAAO,SAAS;IAAS,WAAA;cACtC,EAAE,eAAe;GACZ,CAAA,GACR,oBAAC,QAAD;IAAQ,SAAQ;IAAY,SAAS;IAAe,WAAA;cACjD,EAAE,gBAAgB;GACb,CAAA,CACa,EAAA,CAAA;EACG;;AAEhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SendToWalletPage.js","names":[],"sources":["../../../../src/pages/SendToWallet/SendToWalletPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet'\nimport ErrorIcon from '@mui/icons-material/Error'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Box, Tooltip, Typography } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { ChangeEvent } from 'react'\nimport { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ButtonTertiary } from '../../components/ButtonTertiary.js'\nimport { CardButton } from '../../components/Card/CardButton.js'\nimport { AccountDeployedMessage } from '../../components/Messages/AccountDeployedMessage.js'\nimport {\n AddressType,\n useAddressValidation,\n} from '../../hooks/useAddressValidation.js'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { BookmarkAddressSheet } from './BookmarkAddressSheet.js'\nimport { ConfirmAddressSheet } from './ConfirmAddressSheet.js'\nimport {\n AddressInput,\n FullHeightAdjustablePageContainer,\n SendToWalletButtonRow,\n SendToWalletCard,\n SendToWalletIconButton,\n ValidationAlert,\n} from './SendToWalletPage.style.js'\n\nexport const SendToWalletPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const bookmarkAddressSheetRef = useRef<BottomSheetBase>(null)\n const confirmAddressSheetRef = useRef<BottomSheetBase>(null)\n const { bookmarks, recentWallets } = useBookmarks()\n const {\n addBookmark,\n getBookmark,\n setSelectedBookmark,\n getSelectedBookmark,\n addRecentWallet,\n } = useBookmarkActions()\n const { setFieldValue } = useFieldActions()\n const [inputAddressValue, setInputAddressValue] = useState(\n () => getSelectedBookmark()?.address ?? ''\n )\n const [validatedWallet, setValidatedWallet] = useState<Bookmark>()\n const [errorMessage, setErrorMessage] = useState('')\n const { validateAddress, isValidating } = useAddressValidation()\n const { requiredToChainType } = useToAddressRequirements()\n const [toChainId] = useFieldValues('toChain')\n const { chain: toChain } = useChain(toChainId)\n const [isDoneButtonLoading, setIsDoneButtonLoading] = useState(false)\n const [isBookmarkButtonLoading, setIsBookmarkButtonLoading] = useState(false)\n const { variant, hiddenUI, requiredUI } = useWidgetConfig()\n\n const { accounts } = useAccount()\n const connectedWallets = accounts.filter((account) => account.isConnected)\n\n useHeader(t('header.sendToWallet'))\n\n const handleInputChange = (e: ChangeEvent) => {\n if (errorMessage) {\n setErrorMessage('')\n }\n if (getSelectedBookmark()) {\n setFieldValue('toAddress', '', { isTouched: true })\n setSelectedBookmark()\n }\n setInputAddressValue((e.target as HTMLInputElement).value.trim())\n }\n\n const handleDone = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n setIsDoneButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n chainType: requiredToChainType,\n chain: toChain,\n })\n setIsDoneButtonLoading(false)\n if (!validationResult.isValid) {\n setErrorMessage(validationResult.error)\n return\n }\n\n if (\n requiredToChainType &&\n requiredToChainType !== validationResult.chainType\n ) {\n setErrorMessage(\n t('error.title.walletChainTypeInvalid', {\n chainName: toChain?.name,\n })\n )\n return\n }\n\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n })\n confirmAddressSheetRef.current?.open()\n }\n\n const handleBookmarkAddress = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n\n const existingBookmarkWallet = getBookmark(inputAddressValue)\n if (existingBookmarkWallet) {\n setErrorMessage(\n t('error.title.bookmarkAlreadyExists', {\n name: existingBookmarkWallet.name,\n })\n )\n return\n }\n setIsBookmarkButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n })\n setIsBookmarkButtonLoading(false)\n\n if (validationResult.isValid) {\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n })\n bookmarkAddressSheetRef.current?.open()\n } else {\n setErrorMessage(validationResult.error)\n }\n }\n\n const handleRecentWalletsClick = () => {\n navigate({ to: navigationRoutes.recentWallets })\n }\n\n const handleConnectedWalletsClick = () => {\n navigate({ to: navigationRoutes.connectedWallets })\n }\n const handleBookmarkedWalletsClick = () => {\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleAddBookmark = (bookmark: Bookmark) => {\n addBookmark(bookmark)\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleOnConfirm = (confirmedWallet: Bookmark) => {\n setSelectedBookmark(confirmedWallet)\n addRecentWallet(confirmedWallet)\n }\n\n const placeholder = t('sendToWallet.enterAddress', {\n context: 'long',\n })\n\n return (\n <FullHeightAdjustablePageContainer\n topGutters\n bottomGutters\n enableFullHeight={variant !== 'drawer'}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginBottom: 6,\n }}\n >\n <SendToWalletCard type={errorMessage ? 'error' : 'default'}>\n <AddressInput\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleInputChange}\n value={inputAddressValue}\n placeholder={placeholder}\n aria-label={placeholder}\n maxRows={2}\n inputProps={{ maxLength: 128 }}\n multiline\n />\n {errorMessage ? (\n <ValidationAlert icon={<ErrorIcon />} sx={{ pb: 2, paddingX: 2 }}>\n {errorMessage}\n </ValidationAlert>\n ) : null}\n <SendToWalletButtonRow sx={{ paddingX: 2, paddingBottom: 2 }}>\n <ButtonTertiary\n variant=\"text\"\n onClick={handleDone}\n loading={isDoneButtonLoading}\n loadingPosition=\"center\"\n sx={{ flexGrow: 1 }}\n >\n {t('button.done')}\n </ButtonTertiary>\n <Tooltip title={t('button.bookmark')}>\n <SendToWalletIconButton\n onClick={handleBookmarkAddress}\n loading={isBookmarkButtonLoading}\n loadingPosition=\"center\"\n >\n <TurnedIn fontSize=\"small\" />\n </SendToWalletIconButton>\n </Tooltip>\n </SendToWalletButtonRow>\n <ConfirmAddressSheet\n ref={confirmAddressSheetRef}\n validatedBookmark={validatedWallet}\n onConfirm={handleOnConfirm}\n />\n <BookmarkAddressSheet\n ref={bookmarkAddressSheetRef}\n validatedWallet={validatedWallet}\n onAddBookmark={handleAddBookmark}\n />\n </SendToWalletCard>\n {requiredUI?.accountDeployedMessage && <AccountDeployedMessage />}\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <CardButton\n title={t('header.recentWallets')}\n icon={<AccountBalanceWalletIcon />}\n onClick={handleRecentWalletsClick}\n >\n {!!recentWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {recentWallets.length}\n </Typography>\n )}\n </CardButton>\n {!hiddenUI?.addressBookConnectedWallets && (\n <CardButton\n title={t('sendToWallet.connectedWallets')}\n icon={<Wallet />}\n onClick={handleConnectedWalletsClick}\n >\n {!!connectedWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {connectedWallets.length}\n </Typography>\n )}\n </CardButton>\n )}\n <CardButton\n title={t('header.bookmarkedWallets')}\n icon={<TurnedIn />}\n onClick={handleBookmarkedWalletsClick}\n >\n {!!bookmarks.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {bookmarks.length}\n </Typography>\n )}\n </CardButton>\n </Box>\n </FullHeightAdjustablePageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAa,yBAAmC;CAC9C,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,0BAA0B,OAAwB,IAAI;CAC5D,MAAM,yBAAyB,OAAwB,IAAI;CAC3D,MAAM,EAAE,WAAW,kBAAkB,aAAa;CAClD,MAAM,EACJ,aACA,aACA,qBACA,qBACA,oBACE,mBAAmB;CACvB,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,CAAC,mBAAmB,wBAAwB,eAC1C,oBAAoB,GAAG,WAAW,EAC1C;CACA,MAAM,CAAC,iBAAiB,sBAAsB,SAAmB;CACjE,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,EAAE,iBAAiB,iBAAiB,qBAAqB;CAC/D,MAAM,EAAE,wBAAwB,yBAAyB;CACzD,MAAM,CAAC,aAAa,eAAe,SAAS;CAC5C,MAAM,EAAE,OAAO,YAAY,SAAS,SAAS;CAC7C,MAAM,CAAC,qBAAqB,0BAA0B,SAAS,KAAK;CACpE,MAAM,CAAC,yBAAyB,8BAA8B,SAAS,KAAK;CAC5E,MAAM,EAAE,SAAS,UAAU,eAAe,gBAAgB;CAE1D,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,mBAAmB,SAAS,QAAQ,YAAY,QAAQ,WAAW;CAEzE,UAAU,EAAE,qBAAqB,CAAC;CAElC,MAAM,qBAAqB,MAAmB;EAC5C,IAAI,cACF,gBAAgB,EAAE;EAEpB,IAAI,oBAAoB,GAAG;GACzB,cAAc,aAAa,IAAI,EAAE,WAAW,KAAK,CAAC;GAClD,oBAAoB;EACtB;EACA,qBAAsB,EAAE,OAA4B,MAAM,KAAK,CAAC;CAClE;CAEA,MAAM,aAAa,YAAY;EAC7B,IAAI,cACF;EAEF,IAAI,CAAC,mBAAmB;GACtB,gBAAgB,EAAE,mCAAmC,CAAC;GACtD;EACF;EACA,uBAAuB,IAAI;EAC3B,MAAM,mBAAmB,MAAM,gBAAgB;GAC7C,OAAO;GACP,WAAW;GACX,OAAO;EACT,CAAC;EACD,uBAAuB,KAAK;EAC5B,IAAI,CAAC,iBAAiB,SAAS;GAC7B,gBAAgB,iBAAiB,KAAK;GACtC;EACF;EAEA,IACE,uBACA,wBAAwB,iBAAiB,WACzC;GACA,gBACE,EAAE,sCAAsC,EACtC,WAAW,SAAS,KACtB,CAAC,CACH;GACA;EACF;EAEA,mBAAmB;GACjB,MACE,iBAAiB,gBAAA,IACb,oBACA,KAAA;GACN,SAAS,iBAAiB;GAC1B,WAAW,iBAAiB;EAC9B,CAAC;EACD,uBAAuB,SAAS,KAAK;CACvC;CAEA,MAAM,wBAAwB,YAAY;EACxC,IAAI,cACF;EAEF,IAAI,CAAC,mBAAmB;GACtB,gBAAgB,EAAE,mCAAmC,CAAC;GACtD;EACF;EAEA,MAAM,yBAAyB,YAAY,iBAAiB;EAC5D,IAAI,wBAAwB;GAC1B,gBACE,EAAE,qCAAqC,EACrC,MAAM,uBAAuB,KAC/B,CAAC,CACH;GACA;EACF;EACA,2BAA2B,IAAI;EAC/B,MAAM,mBAAmB,MAAM,gBAAgB,EAC7C,OAAO,kBACT,CAAC;EACD,2BAA2B,KAAK;EAEhC,IAAI,iBAAiB,SAAS;GAC5B,mBAAmB;IACjB,MACE,iBAAiB,gBAAA,IACb,oBACA,KAAA;IACN,SAAS,iBAAiB;IAC1B,WAAW,iBAAiB;GAC9B,CAAC;GACD,wBAAwB,SAAS,KAAK;EACxC,OACE,gBAAgB,iBAAiB,KAAK;CAE1C;CAEA,MAAM,iCAAiC;EACrC,SAAS,EAAE,IAAI,iBAAiB,cAAc,CAAC;CACjD;CAEA,MAAM,oCAAoC;EACxC,SAAS,EAAE,IAAI,iBAAiB,iBAAiB,CAAC;CACpD;CACA,MAAM,qCAAqC;EACzC,SAAS,EAAE,IAAI,iBAAiB,UAAU,CAAC;CAC7C;CAEA,MAAM,qBAAqB,aAAuB;EAChD,YAAY,QAAQ;EACpB,SAAS,EAAE,IAAI,iBAAiB,UAAU,CAAC;CAC7C;CAEA,MAAM,mBAAmB,oBAA8B;EACrD,oBAAoB,eAAe;EACnC,gBAAgB,eAAe;CACjC;CAEA,MAAM,cAAc,EAAE,6BAA6B,EACjD,SAAS,OACX,CAAC;CAED,OACE,qBAAC,mCAAD;EACE,YAAA;EACA,eAAA;EACA,kBAAkB,YAAY;YAHhC,CAKE,qBAAC,KAAD;GACE,IAAI;IACF,SAAS;IACT,eAAe;IACf,KAAK;IACL,cAAc;GAChB;aANF,CAQE,qBAAC,kBAAD;IAAkB,MAAM,eAAe,UAAU;cAAjD;KACE,oBAAC,cAAD;MACE,MAAK;MACL,cAAa;MACb,aAAY;MACZ,gBAAe;MACf,YAAW;MACX,UAAU;MACV,OAAO;MACM;MACb,cAAY;MACZ,SAAS;MACT,YAAY,EAAE,WAAW,IAAI;MAC7B,WAAA;KACD,CAAA;KACA,eACC,oBAAC,iBAAD;MAAiB,MAAM,oBAAC,WAAD,CAAY,CAAA;MAAG,IAAI;OAAE,IAAI;OAAG,UAAU;MAAE;gBAC5D;KACc,CAAA,IACf;KACJ,qBAAC,uBAAD;MAAuB,IAAI;OAAE,UAAU;OAAG,eAAe;MAAE;gBAA3D,CACE,oBAAC,gBAAD;OACE,SAAQ;OACR,SAAS;OACT,SAAS;OACT,iBAAgB;OAChB,IAAI,EAAE,UAAU,EAAE;iBAEjB,EAAE,aAAa;MACF,CAAA,GAChB,oBAAC,SAAD;OAAS,OAAO,EAAE,iBAAiB;iBACjC,oBAAC,wBAAD;QACE,SAAS;QACT,SAAS;QACT,iBAAgB;kBAEhB,oBAAC,UAAD,EAAU,UAAS,QAAS,CAAA;OACN,CAAA;MACjB,CAAA,CACY;;KACvB,oBAAC,qBAAD;MACE,KAAK;MACL,mBAAmB;MACnB,WAAW;KACZ,CAAA;KACD,oBAAC,sBAAD;MACE,KAAK;MACY;MACjB,eAAe;KAChB,CAAA;IACe;OACjB,YAAY,0BAA0B,oBAAC,wBAAD,CAAyB,CAAA,CAC7D;MACL,qBAAC,KAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,eAAe;IAAU,KAAK;GAAE;aAA5D;IACE,oBAAC,YAAD;KACE,OAAO,EAAE,sBAAsB;KAC/B,MAAM,oBAAC,0BAAD,CAA2B,CAAA;KACjC,SAAS;eAER,CAAC,CAAC,cAAc,UACf,oBAAC,YAAD;MACE,IAAI,EACF,OAAO,iBACT;gBAEC,cAAc;KACL,CAAA;IAEJ,CAAA;IACX,CAAC,UAAU,+BACV,oBAAC,YAAD;KACE,OAAO,EAAE,+BAA+B;KACxC,MAAM,oBAAC,QAAD,CAAS,CAAA;KACf,SAAS;eAER,CAAC,CAAC,iBAAiB,UAClB,oBAAC,YAAD;MACE,IAAI,EACF,OAAO,iBACT;gBAEC,iBAAiB;KACR,CAAA;IAEJ,CAAA;IAEd,oBAAC,YAAD;KACE,OAAO,EAAE,0BAA0B;KACnC,MAAM,oBAAC,UAAD,CAAW,CAAA;KACjB,SAAS;eAER,CAAC,CAAC,UAAU,UACX,oBAAC,YAAD;MACE,IAAI,EACF,OAAO,iBACT;gBAEC,UAAU;KACD,CAAA;IAEJ,CAAA;GACT;IAC4B;;AAEvC"}
1
+ {"version":3,"file":"SendToWalletPage.js","names":[],"sources":["../../../../src/pages/SendToWallet/SendToWalletPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet'\nimport ErrorIcon from '@mui/icons-material/Error'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Box, Tooltip, Typography } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { ChangeEvent } from 'react'\nimport { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ButtonTertiary } from '../../components/ButtonTertiary.js'\nimport { CardButton } from '../../components/Card/CardButton.js'\nimport { AccountDeployedMessage } from '../../components/Messages/AccountDeployedMessage.js'\nimport {\n AddressType,\n useAddressValidation,\n} from '../../hooks/useAddressValidation.js'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { BookmarkAddressSheet } from './BookmarkAddressSheet.js'\nimport { ConfirmAddressSheet } from './ConfirmAddressSheet.js'\nimport {\n AddressInput,\n FullHeightAdjustablePageContainer,\n SendToWalletButtonRow,\n SendToWalletCard,\n SendToWalletIconButton,\n ValidationAlert,\n} from './SendToWalletPage.style.js'\n\nexport const SendToWalletPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const bookmarkAddressSheetRef = useRef<BottomSheetBase>(null)\n const confirmAddressSheetRef = useRef<BottomSheetBase>(null)\n const { bookmarks, recentWallets } = useBookmarks()\n const {\n addBookmark,\n getBookmark,\n setSelectedBookmark,\n getSelectedBookmark,\n addRecentWallet,\n } = useBookmarkActions()\n const { setFieldValue } = useFieldActions()\n const [inputAddressValue, setInputAddressValue] = useState(\n () => getSelectedBookmark()?.address ?? ''\n )\n const [validatedWallet, setValidatedWallet] = useState<Bookmark>()\n const [errorMessage, setErrorMessage] = useState('')\n const { validateAddress, isValidating } = useAddressValidation()\n const { requiredToChainType } = useToAddressRequirements()\n const [toChainId] = useFieldValues('toChain')\n const { chain: toChain } = useChain(toChainId)\n const [isDoneButtonLoading, setIsDoneButtonLoading] = useState(false)\n const [isBookmarkButtonLoading, setIsBookmarkButtonLoading] = useState(false)\n const { variant, hiddenUI, requiredUI } = useWidgetConfig()\n\n const { accounts } = useAccount()\n const connectedWallets = accounts.filter((account) => account.isConnected)\n\n useHeader(t('header.sendToWallet'))\n\n const handleInputChange = (e: ChangeEvent) => {\n if (errorMessage) {\n setErrorMessage('')\n }\n if (getSelectedBookmark()) {\n setFieldValue('toAddress', '', { isTouched: true })\n setSelectedBookmark()\n }\n setInputAddressValue((e.target as HTMLInputElement).value.trim())\n }\n\n const handleDone = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n setIsDoneButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n chainType: requiredToChainType,\n chain: toChain,\n })\n setIsDoneButtonLoading(false)\n if (!validationResult.isValid) {\n setErrorMessage(validationResult.error)\n return\n }\n\n if (\n requiredToChainType &&\n requiredToChainType !== validationResult.chainType\n ) {\n setErrorMessage(\n t('error.title.walletChainTypeInvalid', {\n chainName: toChain?.name,\n })\n )\n return\n }\n\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n })\n confirmAddressSheetRef.current?.open()\n }\n\n const handleBookmarkAddress = async () => {\n if (isValidating) {\n return\n }\n if (!inputAddressValue) {\n setErrorMessage(t('error.title.walletAddressRequired'))\n return\n }\n\n const existingBookmarkWallet = getBookmark(inputAddressValue)\n if (existingBookmarkWallet) {\n setErrorMessage(\n t('error.title.bookmarkAlreadyExists', {\n name: existingBookmarkWallet.name,\n })\n )\n return\n }\n setIsBookmarkButtonLoading(true)\n const validationResult = await validateAddress({\n value: inputAddressValue,\n })\n setIsBookmarkButtonLoading(false)\n\n if (validationResult.isValid) {\n setValidatedWallet({\n name:\n validationResult.addressType === AddressType.NameService\n ? inputAddressValue\n : undefined,\n address: validationResult.address,\n chainType: validationResult.chainType,\n })\n bookmarkAddressSheetRef.current?.open()\n } else {\n setErrorMessage(validationResult.error)\n }\n }\n\n const handleRecentWalletsClick = () => {\n navigate({ to: navigationRoutes.recentWallets })\n }\n\n const handleConnectedWalletsClick = () => {\n navigate({ to: navigationRoutes.connectedWallets })\n }\n const handleBookmarkedWalletsClick = () => {\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleAddBookmark = (bookmark: Bookmark) => {\n addBookmark(bookmark)\n navigate({ to: navigationRoutes.bookmarks })\n }\n\n const handleOnConfirm = (confirmedWallet: Bookmark) => {\n setSelectedBookmark(confirmedWallet)\n addRecentWallet(confirmedWallet)\n }\n\n const placeholder = t('sendToWallet.enterAddress', {\n context: 'long',\n })\n\n return (\n <FullHeightAdjustablePageContainer\n topGutters\n bottomGutters\n enableFullHeight={variant !== 'drawer'}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginBottom: 6,\n }}\n >\n <SendToWalletCard type={errorMessage ? 'error' : 'default'}>\n <AddressInput\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleInputChange}\n value={inputAddressValue}\n placeholder={placeholder}\n aria-label={placeholder}\n maxRows={2}\n inputProps={{ maxLength: 128 }}\n multiline\n />\n {errorMessage ? (\n <ValidationAlert icon={<ErrorIcon />} sx={{ pb: 2, paddingX: 2 }}>\n {errorMessage}\n </ValidationAlert>\n ) : null}\n <SendToWalletButtonRow sx={{ paddingX: 2, paddingBottom: 2 }}>\n <ButtonTertiary\n variant=\"text\"\n onClick={handleDone}\n loading={isDoneButtonLoading}\n loadingPosition=\"center\"\n sx={{ flexGrow: 1 }}\n >\n {t('button.done')}\n </ButtonTertiary>\n <Tooltip title={t('button.bookmark')}>\n <SendToWalletIconButton\n onClick={handleBookmarkAddress}\n loading={isBookmarkButtonLoading}\n loadingPosition=\"center\"\n >\n <TurnedIn fontSize=\"small\" />\n </SendToWalletIconButton>\n </Tooltip>\n </SendToWalletButtonRow>\n <ConfirmAddressSheet\n ref={confirmAddressSheetRef}\n validatedBookmark={validatedWallet}\n onConfirm={handleOnConfirm}\n />\n <BookmarkAddressSheet\n ref={bookmarkAddressSheetRef}\n validatedWallet={validatedWallet}\n onAddBookmark={handleAddBookmark}\n />\n </SendToWalletCard>\n {requiredUI?.accountDeployedMessage && <AccountDeployedMessage />}\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <CardButton\n title={t('header.recentWallets')}\n icon={<AccountBalanceWalletIcon />}\n onClick={handleRecentWalletsClick}\n >\n {!!recentWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {recentWallets.length}\n </Typography>\n )}\n </CardButton>\n {!hiddenUI?.addressBookConnectedWallets && (\n <CardButton\n title={t('sendToWallet.connectedWallets')}\n icon={<Wallet />}\n onClick={handleConnectedWalletsClick}\n >\n {!!connectedWallets.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {connectedWallets.length}\n </Typography>\n )}\n </CardButton>\n )}\n <CardButton\n title={t('header.bookmarkedWallets')}\n icon={<TurnedIn />}\n onClick={handleBookmarkedWalletsClick}\n >\n {!!bookmarks.length && (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n {bookmarks.length}\n </Typography>\n )}\n </CardButton>\n </Box>\n </FullHeightAdjustablePageContainer>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SendToWalletPage.style.js","names":[],"sources":["../../../../src/pages/SendToWallet/SendToWalletPage.style.tsx"],"sourcesContent":["import {\n Alert,\n alertClasses,\n Box,\n inputBaseClasses,\n styled,\n Typography,\n} from '@mui/material'\nimport type React from 'react'\nimport { ButtonTertiary } from '../../components/ButtonTertiary.js'\nimport { InputCard } from '../../components/Card/InputCard.js'\nimport { Input } from '../../components/Input.js'\nimport type { PageContainerProps } from '../../components/PageContainer.js'\nimport { PageContainer } from '../../components/PageContainer.js'\n\nexport const AddressInput: React.FC<\n React.ComponentProps<typeof Input> & PageContainerProps\n> = styled(Input)(({ theme }) => ({\n padding: 0,\n [`.${inputBaseClasses.input}`]: {\n padding: theme.spacing(2),\n minHeight: 48,\n },\n}))\n\nexport const BookmarkInputFields: React.FC<\n React.ComponentProps<typeof Box> & PageContainerProps\n> = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n width: '100%',\n}))\n\ninterface FullHeightAdjustablePageContainerProps extends PageContainerProps {\n enableFullHeight?: boolean\n}\n\nexport const FullHeightAdjustablePageContainer: React.FC<\n React.ComponentProps<typeof PageContainer> &\n FullHeightAdjustablePageContainerProps\n> = styled(PageContainer, {\n shouldForwardProp: (prop) => prop !== 'enableFullHeight',\n})<FullHeightAdjustablePageContainerProps>(({ theme, enableFullHeight }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n justifyContent: 'space-between',\n ...(enableFullHeight && theme.container?.height === '100%'\n ? {\n height: '100%',\n }\n : {}),\n}))\n\nexport const SendToWalletCard: React.FC<\n React.ComponentProps<typeof InputCard>\n> = styled(InputCard)({\n display: 'flex',\n flexDirection: 'column',\n})\n\nexport const SendToWalletSheetContainer: React.FC<\n React.ComponentProps<typeof Box>\n> = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: theme.spacing(4, 3, 3),\n gap: theme.spacing(2),\n}))\n\nexport const SendToWalletButtonRow: React.FC<React.ComponentProps<typeof Box>> =\n styled(Box)(({ theme }) => ({\n display: 'flex',\n width: '100%',\n gap: theme.spacing(1),\n }))\n\nexport const SendToWalletIconButton: React.FC<\n React.ComponentProps<typeof ButtonTertiary>\n> = styled(ButtonTertiary)(({ theme }) => ({\n padding: theme.spacing(1.25),\n minWidth: 40,\n}))\n\nexport const IconContainer: React.FC<React.ComponentProps<typeof Box>> = styled(\n Box\n)(({ theme }) => ({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: 80,\n height: 80,\n borderRadius: '50%',\n color: theme.vars.palette.grey[800],\n background: theme.vars.palette.grey[300],\n ...theme.applyStyles('dark', {\n color: theme.vars.palette.grey[300],\n background: theme.vars.palette.grey[800],\n }),\n}))\n\nexport const SheetTitle: React.FC<React.ComponentProps<typeof Typography>> =\n styled(Typography)(() => ({\n fontSize: 18,\n fontWeight: 700,\n }))\n\nexport const SheetAddressContainer: React.FC<React.ComponentProps<typeof Box>> =\n styled(Box)(() => ({\n width: '100%',\n wordWrap: 'break-word',\n }))\n\nexport const BookmarkButtonContainer: React.FC<\n React.ComponentProps<typeof Box>\n> = styled(Box)(({ theme }) => ({\n background: theme.vars.palette.background.default,\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n padding: theme.spacing(2, 3, 3),\n width: '100%',\n}))\n\nexport const ValidationAlert: React.FC<React.ComponentProps<typeof Alert>> =\n styled(Alert)(({ theme }) => ({\n backgroundColor: 'transparent',\n padding: 0,\n color: theme.vars.palette.text.primary,\n [`.${alertClasses.icon}`]: {\n padding: 0,\n color: theme.vars.palette.error.main,\n },\n [`.${alertClasses.message}`]: { padding: theme.spacing(0.25, 0, 0, 0) },\n }))\n"],"mappings":";;;;;;AAeA,MAAa,eAET,OAAO,KAAK,GAAG,EAAE,aAAa;CAChC,SAAS;EACR,IAAI,iBAAiB,UAAU;EAC9B,SAAS,MAAM,QAAQ,CAAC;EACxB,WAAW;CACb;AACF,EAAE;AAEF,MAAa,sBAET,OAAO,GAAG,GAAG,EAAE,aAAa;CAC9B,SAAS;CACT,eAAe;CACf,KAAK,MAAM,QAAQ,CAAC;CACpB,OAAO;AACT,EAAE;AAMF,MAAa,oCAGT,OAAO,eAAe,EACxB,oBAAoB,SAAS,SAAS,mBACxC,CAAC,GAA2C,EAAE,OAAO,wBAAwB;CAC3E,SAAS;CACT,eAAe;CACf,KAAK,MAAM,QAAQ,CAAC;CACpB,gBAAgB;CAChB,GAAI,oBAAoB,MAAM,WAAW,WAAW,SAChD,EACE,QAAQ,OACV,IACA,CAAC;AACP,EAAE;AAEF,MAAa,mBAET,OAAO,SAAS,EAAE;CACpB,SAAS;CACT,eAAe;AACjB,CAAC;AAED,MAAa,6BAET,OAAO,GAAG,GAAG,EAAE,aAAa;CAC9B,SAAS;CACT,eAAe;CACf,YAAY;CACZ,SAAS,MAAM,QAAQ,GAAG,GAAG,CAAC;CAC9B,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEF,MAAa,wBACX,OAAO,GAAG,GAAG,EAAE,aAAa;CAC1B,SAAS;CACT,OAAO;CACP,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEJ,MAAa,yBAET,OAAO,cAAc,GAAG,EAAE,aAAa;CACzC,SAAS,MAAM,QAAQ,IAAI;CAC3B,UAAU;AACZ,EAAE;AAEF,MAAa,gBAA4D,OACvE,GACF,GAAG,EAAE,aAAa;CAChB,SAAS;CACT,gBAAgB;CAChB,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,cAAc;CACd,OAAO,MAAM,KAAK,QAAQ,KAAK;CAC/B,YAAY,MAAM,KAAK,QAAQ,KAAK;CACpC,GAAG,MAAM,YAAY,QAAQ;EAC3B,OAAO,MAAM,KAAK,QAAQ,KAAK;EAC/B,YAAY,MAAM,KAAK,QAAQ,KAAK;CACtC,CAAC;AACH,EAAE;AAEF,MAAa,aACX,OAAO,UAAU,SAAS;CACxB,UAAU;CACV,YAAY;AACd,EAAE;AAEJ,MAAa,wBACX,OAAO,GAAG,SAAS;CACjB,OAAO;CACP,UAAU;AACZ,EAAE;AAEJ,MAAa,0BAET,OAAO,GAAG,GAAG,EAAE,aAAa;CAC9B,YAAY,MAAM,KAAK,QAAQ,WAAW;CAC1C,SAAS;CACT,eAAe;CACf,YAAY;CACZ,SAAS,MAAM,QAAQ,GAAG,GAAG,CAAC;CAC9B,OAAO;AACT,EAAE;AAEF,MAAa,kBACX,OAAO,KAAK,GAAG,EAAE,aAAa;CAC5B,iBAAiB;CACjB,SAAS;CACT,OAAO,MAAM,KAAK,QAAQ,KAAK;EAC9B,IAAI,aAAa,SAAS;EACzB,SAAS;EACT,OAAO,MAAM,KAAK,QAAQ,MAAM;CAClC;EACC,IAAI,aAAa,YAAY,EAAE,SAAS,MAAM,QAAQ,KAAM,GAAG,GAAG,CAAC,EAAE;AACxE,EAAE"}
1
+ {"version":3,"file":"SendToWalletPage.style.js","names":[],"sources":["../../../../src/pages/SendToWallet/SendToWalletPage.style.tsx"],"sourcesContent":["import {\n Alert,\n alertClasses,\n Box,\n inputBaseClasses,\n styled,\n Typography,\n} from '@mui/material'\nimport type React from 'react'\nimport { ButtonTertiary } from '../../components/ButtonTertiary.js'\nimport { InputCard } from '../../components/Card/InputCard.js'\nimport { Input } from '../../components/Input.js'\nimport type { PageContainerProps } from '../../components/PageContainer.js'\nimport { PageContainer } from '../../components/PageContainer.js'\n\nexport const AddressInput: React.FC<\n React.ComponentProps<typeof Input> & PageContainerProps\n> = styled(Input)(({ theme }) => ({\n padding: 0,\n [`.${inputBaseClasses.input}`]: {\n padding: theme.spacing(2),\n minHeight: 48,\n },\n}))\n\nexport const BookmarkInputFields: React.FC<\n React.ComponentProps<typeof Box> & PageContainerProps\n> = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n width: '100%',\n}))\n\ninterface FullHeightAdjustablePageContainerProps extends PageContainerProps {\n enableFullHeight?: boolean\n}\n\nexport const FullHeightAdjustablePageContainer: React.FC<\n React.ComponentProps<typeof PageContainer> &\n FullHeightAdjustablePageContainerProps\n> = styled(PageContainer, {\n shouldForwardProp: (prop) => prop !== 'enableFullHeight',\n})<FullHeightAdjustablePageContainerProps>(({ theme, enableFullHeight }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n justifyContent: 'space-between',\n ...(enableFullHeight && theme.container?.height === '100%'\n ? {\n height: '100%',\n }\n : {}),\n}))\n\nexport const SendToWalletCard: React.FC<\n React.ComponentProps<typeof InputCard>\n> = styled(InputCard)({\n display: 'flex',\n flexDirection: 'column',\n})\n\nexport const SendToWalletSheetContainer: React.FC<\n React.ComponentProps<typeof Box>\n> = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: theme.spacing(4, 3, 3),\n gap: theme.spacing(2),\n}))\n\nexport const SendToWalletButtonRow: React.FC<React.ComponentProps<typeof Box>> =\n styled(Box)(({ theme }) => ({\n display: 'flex',\n width: '100%',\n gap: theme.spacing(1),\n }))\n\nexport const SendToWalletIconButton: React.FC<\n React.ComponentProps<typeof ButtonTertiary>\n> = styled(ButtonTertiary)(({ theme }) => ({\n padding: theme.spacing(1.25),\n minWidth: 40,\n}))\n\nexport const IconContainer: React.FC<React.ComponentProps<typeof Box>> = styled(\n Box\n)(({ theme }) => ({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: 80,\n height: 80,\n borderRadius: '50%',\n color: theme.vars.palette.grey[800],\n background: theme.vars.palette.grey[300],\n ...theme.applyStyles('dark', {\n color: theme.vars.palette.grey[300],\n background: theme.vars.palette.grey[800],\n }),\n}))\n\nexport const SheetTitle: React.FC<React.ComponentProps<typeof Typography>> =\n styled(Typography)(() => ({\n fontSize: 18,\n fontWeight: 700,\n }))\n\nexport const SheetAddressContainer: React.FC<React.ComponentProps<typeof Box>> =\n styled(Box)(() => ({\n width: '100%',\n wordWrap: 'break-word',\n }))\n\nexport const BookmarkButtonContainer: React.FC<\n React.ComponentProps<typeof Box>\n> = styled(Box)(({ theme }) => ({\n background: theme.vars.palette.background.default,\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n padding: theme.spacing(2, 3, 3),\n width: '100%',\n}))\n\nexport const ValidationAlert: React.FC<React.ComponentProps<typeof Alert>> =\n styled(Alert)(({ theme }) => ({\n backgroundColor: 'transparent',\n padding: 0,\n color: theme.vars.palette.text.primary,\n [`.${alertClasses.icon}`]: {\n padding: 0,\n color: theme.vars.palette.error.main,\n },\n [`.${alertClasses.message}`]: { padding: theme.spacing(0.25, 0, 0, 0) },\n }))\n"],"mappings":";;;;;;AAeA,MAAa,eAET,OAAO,KAAK,CAAC,EAAE,EAAE,aAAa;CAChC,SAAS;EACR,IAAI,iBAAiB,UAAU;EAC9B,SAAS,MAAM,QAAQ,CAAC;EACxB,WAAW;CACb;AACF,EAAE;AAEF,MAAa,sBAET,OAAO,GAAG,CAAC,EAAE,EAAE,aAAa;CAC9B,SAAS;CACT,eAAe;CACf,KAAK,MAAM,QAAQ,CAAC;CACpB,OAAO;AACT,EAAE;AAMF,MAAa,oCAGT,OAAO,eAAe,EACxB,oBAAoB,SAAS,SAAS,mBACxC,CAAC,CAAC,EAA0C,EAAE,OAAO,wBAAwB;CAC3E,SAAS;CACT,eAAe;CACf,KAAK,MAAM,QAAQ,CAAC;CACpB,gBAAgB;CAChB,GAAI,oBAAoB,MAAM,WAAW,WAAW,SAChD,EACE,QAAQ,OACV,IACA,CAAC;AACP,EAAE;AAEF,MAAa,mBAET,OAAO,SAAS,CAAC,CAAC;CACpB,SAAS;CACT,eAAe;AACjB,CAAC;AAED,MAAa,6BAET,OAAO,GAAG,CAAC,EAAE,EAAE,aAAa;CAC9B,SAAS;CACT,eAAe;CACf,YAAY;CACZ,SAAS,MAAM,QAAQ,GAAG,GAAG,CAAC;CAC9B,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEF,MAAa,wBACX,OAAO,GAAG,CAAC,EAAE,EAAE,aAAa;CAC1B,SAAS;CACT,OAAO;CACP,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEJ,MAAa,yBAET,OAAO,cAAc,CAAC,EAAE,EAAE,aAAa;CACzC,SAAS,MAAM,QAAQ,IAAI;CAC3B,UAAU;AACZ,EAAE;AAEF,MAAa,gBAA4D,OACvE,GACF,CAAC,EAAE,EAAE,aAAa;CAChB,SAAS;CACT,gBAAgB;CAChB,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,cAAc;CACd,OAAO,MAAM,KAAK,QAAQ,KAAK;CAC/B,YAAY,MAAM,KAAK,QAAQ,KAAK;CACpC,GAAG,MAAM,YAAY,QAAQ;EAC3B,OAAO,MAAM,KAAK,QAAQ,KAAK;EAC/B,YAAY,MAAM,KAAK,QAAQ,KAAK;CACtC,CAAC;AACH,EAAE;AAEF,MAAa,aACX,OAAO,UAAU,CAAC,QAAQ;CACxB,UAAU;CACV,YAAY;AACd,EAAE;AAEJ,MAAa,wBACX,OAAO,GAAG,CAAC,QAAQ;CACjB,OAAO;CACP,UAAU;AACZ,EAAE;AAEJ,MAAa,0BAET,OAAO,GAAG,CAAC,EAAE,EAAE,aAAa;CAC9B,YAAY,MAAM,KAAK,QAAQ,WAAW;CAC1C,SAAS;CACT,eAAe;CACf,YAAY;CACZ,SAAS,MAAM,QAAQ,GAAG,GAAG,CAAC;CAC9B,OAAO;AACT,EAAE;AAEF,MAAa,kBACX,OAAO,KAAK,CAAC,EAAE,EAAE,aAAa;CAC5B,iBAAiB;CACjB,SAAS;CACT,OAAO,MAAM,KAAK,QAAQ,KAAK;EAC9B,IAAI,aAAa,SAAS;EACzB,SAAS;EACT,OAAO,MAAM,KAAK,QAAQ,MAAM;CAClC;EACC,IAAI,aAAa,YAAY,EAAE,SAAS,MAAM,QAAQ,KAAM,GAAG,GAAG,CAAC,EAAE;AACxE,EAAE"}
@@ -7,12 +7,12 @@ import { BadgedValue } from "./SettingsCard/BadgedValue.js";
7
7
  import { useNavigate } from "@tanstack/react-router";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
  import { useTranslation } from "react-i18next";
10
+ import SwapHorizIcon from "@mui/icons-material/SwapHoriz";
10
11
  import AirlineStops from "@mui/icons-material/AirlineStops";
11
- import SwapHoriz from "@mui/icons-material/SwapHoriz";
12
12
  //#region src/pages/SettingsPage/BridgeAndExchangeSettings.tsx
13
13
  const supportedIcons = {
14
14
  Bridges: AirlineStops,
15
- Exchanges: SwapHoriz
15
+ Exchanges: SwapHorizIcon
16
16
  };
17
17
  const BridgeAndExchangeSettings = ({ type }) => {
18
18
  const { isBridgesChanged, isExchangesChanged } = useSettingMonitor();
@@ -1 +1 @@
1
- {"version":3,"file":"BridgeAndExchangeSettings.js","names":[],"sources":["../../../../src/pages/SettingsPage/BridgeAndExchangeSettings.tsx"],"sourcesContent":["import AirlineStops from '@mui/icons-material/AirlineStops'\nimport SwapHoriz from '@mui/icons-material/SwapHoriz'\nimport { useNavigate } from '@tanstack/react-router'\nimport { useTranslation } from 'react-i18next'\nimport { CardButton } from '../../components/Card/CardButton.js'\nimport { useSettingMonitor } from '../../hooks/useSettingMonitor.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useSettingsStore } from '../../stores/settings/SettingsStore.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { BadgedValue } from './SettingsCard/BadgedValue.js'\n\nconst supportedIcons = {\n Bridges: AirlineStops,\n Exchanges: SwapHoriz,\n}\n\nexport const BridgeAndExchangeSettings: React.FC<{\n type: 'Bridges' | 'Exchanges'\n}> = ({ type }) => {\n const { isBridgesChanged, isExchangesChanged } = useSettingMonitor()\n const { t } = useTranslation()\n const navigate = useNavigate()\n const [enabledTools, tools] = useSettingsStore((state) => {\n const enabledTools = Object.values(state[`_enabled${type}`])\n return [enabledTools.filter(Boolean).length, enabledTools.length]\n })\n\n const { hiddenUI } = useWidgetConfig()\n\n if (type === 'Bridges' && hiddenUI?.bridgesSettings) {\n return null\n }\n\n const customisationLookUp = {\n Bridges: isBridgesChanged,\n Exchanges: isExchangesChanged,\n }\n\n const handleClick = () => {\n navigate({\n to: navigationRoutes[type.toLowerCase() as 'bridges' | 'exchanges'],\n })\n }\n\n const Icon = supportedIcons[type]\n\n return (\n <CardButton\n onClick={handleClick}\n icon={<Icon />}\n title={t(`settings.enabled${type}`)}\n >\n <BadgedValue\n badgeColor=\"info\"\n showBadge={customisationLookUp[type]}\n >{`${enabledTools}/${tools}`}</BadgedValue>\n </CardButton>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,iBAAiB;CACrB,SAAS;CACT,WAAW;AACb;AAEA,MAAa,6BAEP,EAAE,WAAW;CACjB,MAAM,EAAE,kBAAkB,uBAAuB,kBAAkB;CACnE,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,CAAC,cAAc,SAAS,kBAAkB,UAAU;EACxD,MAAM,eAAe,OAAO,OAAO,MAAM,WAAW,OAAO;EAC3D,OAAO,CAAC,aAAa,OAAO,OAAO,EAAE,QAAQ,aAAa,MAAM;CAClE,CAAC;CAED,MAAM,EAAE,aAAa,gBAAgB;CAErC,IAAI,SAAS,aAAa,UAAU,iBAClC,OAAO;CAGT,MAAM,sBAAsB;EAC1B,SAAS;EACT,WAAW;CACb;CAEA,MAAM,oBAAoB;EACxB,SAAS,EACP,IAAI,iBAAiB,KAAK,YAAY,GACxC,CAAC;CACH;CAEA,MAAM,OAAO,eAAe;CAE5B,OACE,oBAAC,YAAD;EACE,SAAS;EACT,MAAM,oBAAC,MAAD,CAAO,CAAA;EACb,OAAO,EAAE,mBAAmB,MAAM;YAElC,oBAAC,aAAD;GACE,YAAW;GACX,WAAW,oBAAoB;aAC/B,GAAG,aAAa,GAAG;EAAqB,CAAA;CAChC,CAAA;AAEhB"}
1
+ {"version":3,"file":"BridgeAndExchangeSettings.js","names":["SwapHoriz"],"sources":["../../../../src/pages/SettingsPage/BridgeAndExchangeSettings.tsx"],"sourcesContent":["import AirlineStops from '@mui/icons-material/AirlineStops'\nimport SwapHoriz from '@mui/icons-material/SwapHoriz'\nimport { useNavigate } from '@tanstack/react-router'\nimport { useTranslation } from 'react-i18next'\nimport { CardButton } from '../../components/Card/CardButton.js'\nimport { useSettingMonitor } from '../../hooks/useSettingMonitor.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useSettingsStore } from '../../stores/settings/SettingsStore.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { BadgedValue } from './SettingsCard/BadgedValue.js'\n\nconst supportedIcons = {\n Bridges: AirlineStops,\n Exchanges: SwapHoriz,\n}\n\nexport const BridgeAndExchangeSettings: React.FC<{\n type: 'Bridges' | 'Exchanges'\n}> = ({ type }) => {\n const { isBridgesChanged, isExchangesChanged } = useSettingMonitor()\n const { t } = useTranslation()\n const navigate = useNavigate()\n const [enabledTools, tools] = useSettingsStore((state) => {\n const enabledTools = Object.values(state[`_enabled${type}`])\n return [enabledTools.filter(Boolean).length, enabledTools.length]\n })\n\n const { hiddenUI } = useWidgetConfig()\n\n if (type === 'Bridges' && hiddenUI?.bridgesSettings) {\n return null\n }\n\n const customisationLookUp = {\n Bridges: isBridgesChanged,\n Exchanges: isExchangesChanged,\n }\n\n const handleClick = () => {\n navigate({\n to: navigationRoutes[type.toLowerCase() as 'bridges' | 'exchanges'],\n })\n }\n\n const Icon = supportedIcons[type]\n\n return (\n <CardButton\n onClick={handleClick}\n icon={<Icon />}\n title={t(`settings.enabled${type}`)}\n >\n <BadgedValue\n badgeColor=\"info\"\n showBadge={customisationLookUp[type]}\n >{`${enabledTools}/${tools}`}</BadgedValue>\n </CardButton>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,iBAAiB;CACrB,SAAS;CACT,WAAWA;AACb;AAEA,MAAa,6BAEP,EAAE,WAAW;CACjB,MAAM,EAAE,kBAAkB,uBAAuB,kBAAkB;CACnE,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,CAAC,cAAc,SAAS,kBAAkB,UAAU;EACxD,MAAM,eAAe,OAAO,OAAO,MAAM,WAAW,OAAO;EAC3D,OAAO,CAAC,aAAa,OAAO,OAAO,CAAC,CAAC,QAAQ,aAAa,MAAM;CAClE,CAAC;CAED,MAAM,EAAE,aAAa,gBAAgB;CAErC,IAAI,SAAS,aAAa,UAAU,iBAClC,OAAO;CAGT,MAAM,sBAAsB;EAC1B,SAAS;EACT,WAAW;CACb;CAEA,MAAM,oBAAoB;EACxB,SAAS,EACP,IAAI,iBAAiB,KAAK,YAAY,GACxC,CAAC;CACH;CAEA,MAAM,OAAO,eAAe;CAE5B,OACE,oBAAC,YAAD;EACE,SAAS;EACT,MAAM,oBAAC,MAAD,CAAO,CAAA;EACb,OAAO,EAAE,mBAAmB,MAAM;YAElC,oBAAC,aAAD;GACE,YAAW;GACX,WAAW,oBAAoB;aAC/B,GAAG,aAAa,GAAG;EAAqB,CAAA;CAChC,CAAA;AAEhB"}
@@ -1,7 +1,7 @@
1
1
  import { useSettingsActions } from "../../stores/settings/useSettingsActions.js";
2
2
  import { useSettings } from "../../stores/settings/useSettings.js";
3
- import { useSettingMonitor } from "../../hooks/useSettingMonitor.js";
4
3
  import { CardTabs, Tab } from "../../components/Tabs/Tabs.style.js";
4
+ import { useSettingMonitor } from "../../hooks/useSettingMonitor.js";
5
5
  import { BadgedValue } from "./SettingsCard/BadgedValue.js";
6
6
  import { SettingCardExpandable } from "./SettingsCard/SettingCardExpandable.js";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"ResetSettingsButton.style.js","names":[],"sources":["../../../../src/pages/SettingsPage/ResetSettingsButton.style.tsx"],"sourcesContent":["import { Box, styled } from '@mui/material'\nimport type React from 'react'\n\nexport const ResetButtonContainer: React.FC<React.ComponentProps<typeof Box>> =\n styled(Box)(({ theme }) => ({\n background: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n borderRadius: '16px',\n padding: '16px',\n svg: {\n fill: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 40%, transparent)`,\n },\n }))\n"],"mappings":";;AAGA,MAAa,uBACX,OAAO,GAAG,GAAG,EAAE,aAAa;CAC1B,YAAY,sBAAsB,MAAM,KAAK,QAAQ,OAAO,aAAa;CACzE,cAAc;CACd,SAAS;CACT,KAAK,EACH,MAAM,sBAAsB,MAAM,KAAK,QAAQ,OAAO,aAAa,oBACrE;AACF,EAAE"}
1
+ {"version":3,"file":"ResetSettingsButton.style.js","names":[],"sources":["../../../../src/pages/SettingsPage/ResetSettingsButton.style.tsx"],"sourcesContent":["import { Box, styled } from '@mui/material'\nimport type React from 'react'\n\nexport const ResetButtonContainer: React.FC<React.ComponentProps<typeof Box>> =\n styled(Box)(({ theme }) => ({\n background: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n borderRadius: '16px',\n padding: '16px',\n svg: {\n fill: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 40%, transparent)`,\n },\n }))\n"],"mappings":";;AAGA,MAAa,uBACX,OAAO,GAAG,CAAC,EAAE,EAAE,aAAa;CAC1B,YAAY,sBAAsB,MAAM,KAAK,QAAQ,OAAO,aAAa;CACzE,cAAc;CACd,SAAS;CACT,KAAK,EACH,MAAM,sBAAsB,MAAM,KAAK,QAAQ,OAAO,aAAa,oBACrE;AACF,EAAE"}
@@ -1,44 +1,29 @@
1
- import { useSettingsActions } from "../../stores/settings/useSettingsActions.js";
1
+ import { navigationRoutes } from "../../utils/navigationRoutes.js";
2
2
  import { useSettings } from "../../stores/settings/useSettings.js";
3
3
  import { useSettingMonitor } from "../../hooks/useSettingMonitor.js";
4
- import { CardTabs, Tab } from "../../components/Tabs/Tabs.style.js";
4
+ import { CardButton } from "../../components/Card/CardButton.js";
5
5
  import { BadgedValue } from "./SettingsCard/BadgedValue.js";
6
- import { SettingCardExpandable } from "./SettingsCard/SettingCardExpandable.js";
6
+ import { useNavigate } from "@tanstack/react-router";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { useTranslation } from "react-i18next";
9
9
  import Route from "@mui/icons-material/Route";
10
10
  //#region src/pages/SettingsPage/RoutePrioritySettings.tsx
11
- const Priorities = ["CHEAPEST", "FASTEST"];
12
11
  const RoutePrioritySettings = () => {
13
12
  const { t } = useTranslation();
14
- const { setValue } = useSettingsActions();
13
+ const navigate = useNavigate();
15
14
  const { isRoutePriorityChanged } = useSettingMonitor();
16
15
  const { routePriority } = useSettings(["routePriority"]);
17
- const currentRoutePriority = routePriority ?? "";
18
- const handleRoutePriorityChange = (_, routePriority) => {
19
- setValue("routePriority", routePriority);
16
+ const handleClick = () => {
17
+ navigate({ to: navigationRoutes.routePriority });
20
18
  };
21
- return /* @__PURE__ */ jsx(SettingCardExpandable, {
22
- value: /* @__PURE__ */ jsx(BadgedValue, {
23
- badgeColor: "info",
24
- showBadge: isRoutePriorityChanged,
25
- children: t(`main.tags.${currentRoutePriority.toLowerCase()}`)
26
- }),
19
+ return /* @__PURE__ */ jsx(CardButton, {
20
+ onClick: handleClick,
27
21
  icon: /* @__PURE__ */ jsx(Route, {}),
28
22
  title: t("settings.routePriority"),
29
- children: /* @__PURE__ */ jsx(CardTabs, {
30
- value: currentRoutePriority,
31
- "aria-label": "tabs",
32
- indicatorColor: "primary",
33
- onChange: handleRoutePriorityChange,
34
- sx: { mt: 1.5 },
35
- children: Priorities.map((priority) => {
36
- return /* @__PURE__ */ jsx(Tab, {
37
- label: t(`main.tags.${priority.toLowerCase()}`),
38
- value: priority,
39
- disableRipple: true
40
- }, priority);
41
- })
23
+ children: /* @__PURE__ */ jsx(BadgedValue, {
24
+ badgeColor: "info",
25
+ showBadge: isRoutePriorityChanged,
26
+ children: routePriority === "FASTEST" ? t("settings.routePriorityOptions.fastest.title") : t("settings.routePriorityOptions.cheapest.title")
42
27
  })
43
28
  });
44
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RoutePrioritySettings.js","names":[],"sources":["../../../../src/pages/SettingsPage/RoutePrioritySettings.tsx"],"sourcesContent":["import type { Order } from '@lifi/sdk'\nimport Route from '@mui/icons-material/Route'\nimport { useTranslation } from 'react-i18next'\nimport { CardTabs, Tab } from '../../components/Tabs/Tabs.style.js'\nimport { useSettingMonitor } from '../../hooks/useSettingMonitor.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport { BadgedValue } from './SettingsCard/BadgedValue.js'\nimport { SettingCardExpandable } from './SettingsCard/SettingCardExpandable.js'\n\nconst Priorities: Order[] = ['CHEAPEST', 'FASTEST']\n\nexport const RoutePrioritySettings: React.FC = () => {\n const { t } = useTranslation()\n const { setValue } = useSettingsActions()\n const { isRoutePriorityChanged } = useSettingMonitor()\n const { routePriority } = useSettings(['routePriority'])\n const currentRoutePriority = routePriority ?? ''\n\n const handleRoutePriorityChange = (\n _: React.SyntheticEvent,\n routePriority: Order\n ) => {\n setValue('routePriority', routePriority)\n }\n\n return (\n <SettingCardExpandable\n value={\n <BadgedValue badgeColor=\"info\" showBadge={isRoutePriorityChanged}>\n {t(`main.tags.${currentRoutePriority.toLowerCase()}` as any)}\n </BadgedValue>\n }\n icon={<Route />}\n title={t('settings.routePriority')}\n >\n <CardTabs\n value={currentRoutePriority}\n aria-label=\"tabs\"\n indicatorColor=\"primary\"\n onChange={handleRoutePriorityChange}\n sx={{ mt: 1.5 }}\n >\n {Priorities.map((priority) => {\n return (\n <Tab\n key={priority}\n label={t(`main.tags.${priority.toLowerCase()}` as any)}\n value={priority}\n disableRipple\n />\n )\n })}\n </CardTabs>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAM,aAAsB,CAAC,YAAY,SAAS;AAElD,MAAa,8BAAwC;CACnD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,aAAa,mBAAmB;CACxC,MAAM,EAAE,2BAA2B,kBAAkB;CACrD,MAAM,EAAE,kBAAkB,YAAY,CAAC,eAAe,CAAC;CACvD,MAAM,uBAAuB,iBAAiB;CAE9C,MAAM,6BACJ,GACA,kBACG;EACH,SAAS,iBAAiB,aAAa;CACzC;CAEA,OACE,oBAAC,uBAAD;EACE,OACE,oBAAC,aAAD;GAAa,YAAW;GAAO,WAAW;aACvC,EAAE,aAAa,qBAAqB,YAAY,GAAU;EAChD,CAAA;EAEf,MAAM,oBAAC,OAAD,CAAQ,CAAA;EACd,OAAO,EAAE,wBAAwB;YAEjC,oBAAC,UAAD;GACE,OAAO;GACP,cAAW;GACX,gBAAe;GACf,UAAU;GACV,IAAI,EAAE,IAAI,IAAI;aAEb,WAAW,KAAK,aAAa;IAC5B,OACE,oBAAC,KAAD;KAEE,OAAO,EAAE,aAAa,SAAS,YAAY,GAAU;KACrD,OAAO;KACP,eAAA;IACD,GAJM,QAIN;GAEL,CAAC;EACO,CAAA;CACW,CAAA;AAE3B"}
1
+ {"version":3,"file":"RoutePrioritySettings.js","names":[],"sources":["../../../../src/pages/SettingsPage/RoutePrioritySettings.tsx"],"sourcesContent":["import Route from '@mui/icons-material/Route'\nimport { useNavigate } from '@tanstack/react-router'\nimport { useTranslation } from 'react-i18next'\nimport { CardButton } from '../../components/Card/CardButton.js'\nimport { useSettingMonitor } from '../../hooks/useSettingMonitor.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { BadgedValue } from './SettingsCard/BadgedValue.js'\n\nexport const RoutePrioritySettings: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { isRoutePriorityChanged } = useSettingMonitor()\n const { routePriority } = useSettings(['routePriority'])\n\n const handleClick = () => {\n navigate({ to: navigationRoutes.routePriority })\n }\n\n return (\n <CardButton\n onClick={handleClick}\n icon={<Route />}\n title={t('settings.routePriority')}\n >\n <BadgedValue badgeColor=\"info\" showBadge={isRoutePriorityChanged}>\n {routePriority === 'FASTEST'\n ? t('settings.routePriorityOptions.fastest.title')\n : t('settings.routePriorityOptions.cheapest.title')}\n </BadgedValue>\n </CardButton>\n )\n}\n"],"mappings":";;;;;;;;;;AASA,MAAa,8BAAwC;CACnD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,2BAA2B,kBAAkB;CACrD,MAAM,EAAE,kBAAkB,YAAY,CAAC,eAAe,CAAC;CAEvD,MAAM,oBAAoB;EACxB,SAAS,EAAE,IAAI,iBAAiB,cAAc,CAAC;CACjD;CAEA,OACE,oBAAC,YAAD;EACE,SAAS;EACT,MAAM,oBAAC,OAAD,CAAQ,CAAA;EACd,OAAO,EAAE,wBAAwB;YAEjC,oBAAC,aAAD;GAAa,YAAW;GAAO,WAAW;aACvC,kBAAkB,YACf,EAAE,6CAA6C,IAC/C,EAAE,8CAA8C;EACzC,CAAA;CACH,CAAA;AAEhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SettingCard.style.js","names":["Badge","MuiBadge"],"sources":["../../../../../src/pages/SettingsPage/SettingsCard/SettingCard.style.tsx"],"sourcesContent":["import { Box, badgeClasses, Badge as MuiBadge, styled } from '@mui/material'\nimport type React from 'react'\n\nexport const SettingsList: React.FC<React.ComponentProps<typeof Box>> = styled(\n Box\n)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n}))\n\nexport const Badge: React.FC<React.ComponentProps<typeof MuiBadge>> = styled(\n MuiBadge\n)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.25),\n [`.${badgeClasses.badge}`]: {\n width: 10,\n height: 10,\n // the following removes MUI styling so we can position the badge with flex\n position: 'relative',\n transform: 'translateX(0)',\n borderRadius: '50%',\n },\n}))\n"],"mappings":";;AAGA,MAAa,eAA2D,OACtE,GACF,GAAG,EAAE,aAAa;CAChB,SAAS;CACT,eAAe;CACf,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEF,MAAaA,UAAyD,OACpEC,KACF,GAAG,EAAE,aAAa;CAChB,SAAS;CACT,YAAY;CACZ,KAAK,MAAM,QAAQ,IAAI;EACtB,IAAI,aAAa,UAAU;EAC1B,OAAO;EACP,QAAQ;EAER,UAAU;EACV,WAAW;EACX,cAAc;CAChB;AACF,EAAE"}
1
+ {"version":3,"file":"SettingCard.style.js","names":["Badge","MuiBadge"],"sources":["../../../../../src/pages/SettingsPage/SettingsCard/SettingCard.style.tsx"],"sourcesContent":["import { Box, badgeClasses, Badge as MuiBadge, styled } from '@mui/material'\nimport type React from 'react'\n\nexport const SettingsList: React.FC<React.ComponentProps<typeof Box>> = styled(\n Box\n)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n}))\n\nexport const Badge: React.FC<React.ComponentProps<typeof MuiBadge>> = styled(\n MuiBadge\n)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.25),\n [`.${badgeClasses.badge}`]: {\n width: 10,\n height: 10,\n // the following removes MUI styling so we can position the badge with flex\n position: 'relative',\n transform: 'translateX(0)',\n borderRadius: '50%',\n },\n}))\n"],"mappings":";;AAGA,MAAa,eAA2D,OACtE,GACF,CAAC,EAAE,EAAE,aAAa;CAChB,SAAS;CACT,eAAe;CACf,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEF,MAAaA,UAAyD,OACpEC,KACF,CAAC,EAAE,EAAE,aAAa;CAChB,SAAS;CACT,YAAY;CACZ,KAAK,MAAM,QAAQ,IAAI;EACtB,IAAI,aAAa,UAAU;EAC1B,OAAO;EACP,QAAQ;EAER,UAAU;EACV,WAAW;EACX,cAAc;CAChB;AACF,EAAE"}
@@ -1,11 +1,11 @@
1
1
  import { Card as Card$1 } from "../../../components/Card/Card.js";
2
2
  import { CardRowButton, CardTitleContainer, CardValue } from "../../../components/Card/CardButton.style.js";
3
3
  import { useSettingsCardExpandable } from "./SettingsAccordian.js";
4
- import { forwardRef, useId, useImperativeHandle, useRef } from "react";
4
+ import { useId, useImperativeHandle, useRef } from "react";
5
5
  import { Collapse } from "@mui/material";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx
8
- const SettingCardExpandable = forwardRef(({ icon, title, value, children, disabled, keepValueVisible, onEntered }, ref) => {
8
+ const SettingCardExpandable = ({ icon, title, value, children, disabled, keepValueVisible, onEntered, ref }) => {
9
9
  const { expanded, toggleExpanded } = useSettingsCardExpandable();
10
10
  const buttonId = useId();
11
11
  const collapseId = useId();
@@ -40,7 +40,7 @@ const SettingCardExpandable = forwardRef(({ icon, title, value, children, disabl
40
40
  children
41
41
  })]
42
42
  });
43
- });
43
+ };
44
44
  //#endregion
45
45
  export { SettingCardExpandable };
46
46
 
@@ -1 +1 @@
1
- {"version":3,"file":"SettingCardExpandable.js","names":["Card"],"sources":["../../../../../src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx"],"sourcesContent":["import { Collapse } from '@mui/material'\nimport type { PropsWithChildren, ReactNode } from 'react'\nimport {\n type ForwardRefExoticComponent,\n forwardRef,\n type RefAttributes,\n useId,\n useImperativeHandle,\n useRef,\n} from 'react'\nimport { Card } from '../../../components/Card/Card.js'\nimport {\n CardRowButton,\n CardTitleContainer,\n CardValue,\n} from '../../../components/Card/CardButton.style.js'\nimport { useSettingsCardExpandable } from './SettingsAccordian.js'\nimport type { SettingCardTitle } from './types.js'\n\ninterface SettingCardExpandableProps extends SettingCardTitle {\n value: ReactNode\n disabled?: boolean\n keepValueVisible?: boolean\n onEntered?: () => void\n}\n\nexport interface SettingCardExpandableRef {\n element: HTMLButtonElement | null\n isExpanded: boolean\n toggleExpanded: (forceExpanded?: boolean) => void\n}\n\nexport const SettingCardExpandable: ForwardRefExoticComponent<\n PropsWithChildren<SettingCardExpandableProps> &\n RefAttributes<SettingCardExpandableRef>\n> = forwardRef<\n SettingCardExpandableRef,\n PropsWithChildren<SettingCardExpandableProps>\n>(\n (\n { icon, title, value, children, disabled, keepValueVisible, onEntered },\n ref\n ) => {\n const { expanded, toggleExpanded } = useSettingsCardExpandable()\n const buttonId = useId()\n const collapseId = useId()\n const buttonRef = useRef<HTMLButtonElement>(null)\n\n useImperativeHandle(\n ref,\n () => ({\n element: buttonRef.current,\n isExpanded: expanded,\n toggleExpanded,\n }),\n [expanded, toggleExpanded]\n )\n\n return (\n <Card sx={{ p: 1 }}>\n <CardRowButton\n ref={buttonRef}\n id={buttonId}\n aria-expanded={expanded}\n aria-controls={collapseId}\n onClick={disabled ? undefined : () => toggleExpanded()}\n disableRipple\n sx={{ p: 1, cursor: disabled ? 'default' : 'pointer' }}\n >\n <CardTitleContainer>\n {icon}\n <CardValue>{title}</CardValue>\n </CardTitleContainer>\n {(!expanded || keepValueVisible) && value}\n </CardRowButton>\n <Collapse\n id={collapseId}\n role=\"region\"\n aria-labelledby={buttonId}\n in={expanded}\n mountOnEnter\n unmountOnExit\n onEntered={onEntered}\n >\n {children}\n </Collapse>\n </Card>\n )\n }\n)\n"],"mappings":";;;;;;;AAgCA,MAAa,wBAGT,YAKA,EAAE,MAAM,OAAO,OAAO,UAAU,UAAU,kBAAkB,aAC5D,QACG;CACH,MAAM,EAAE,UAAU,mBAAmB,0BAA0B;CAC/D,MAAM,WAAW,MAAM;CACvB,MAAM,aAAa,MAAM;CACzB,MAAM,YAAY,OAA0B,IAAI;CAEhD,oBACE,YACO;EACL,SAAS,UAAU;EACnB,YAAY;EACZ;CACF,IACA,CAAC,UAAU,cAAc,CAC3B;CAEA,OACE,qBAACA,QAAD;EAAM,IAAI,EAAE,GAAG,EAAE;YAAjB,CACE,qBAAC,eAAD;GACE,KAAK;GACL,IAAI;GACJ,iBAAe;GACf,iBAAe;GACf,SAAS,WAAW,KAAA,UAAkB,eAAe;GACrD,eAAA;GACA,IAAI;IAAE,GAAG;IAAG,QAAQ,WAAW,YAAY;GAAU;aAPvD,CASE,qBAAC,oBAAD,EAAA,UAAA,CACG,MACD,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,CACX,EAAA,CAAA,IAClB,CAAC,YAAY,qBAAqB,KACvB;MACf,oBAAC,UAAD;GACE,IAAI;GACJ,MAAK;GACL,mBAAiB;GACjB,IAAI;GACJ,cAAA;GACA,eAAA;GACW;GAEV;EACO,CAAA,CACN;;AAEV,CACF"}
1
+ {"version":3,"file":"SettingCardExpandable.js","names":["Card"],"sources":["../../../../../src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx"],"sourcesContent":["import { Collapse } from '@mui/material'\nimport type { JSX, PropsWithChildren, ReactNode, Ref } from 'react'\nimport { useId, useImperativeHandle, useRef } from 'react'\nimport { Card } from '../../../components/Card/Card.js'\nimport {\n CardRowButton,\n CardTitleContainer,\n CardValue,\n} from '../../../components/Card/CardButton.style.js'\nimport { useSettingsCardExpandable } from './SettingsAccordian.js'\nimport type { SettingCardTitle } from './types.js'\n\ninterface SettingCardExpandableProps extends SettingCardTitle {\n value: ReactNode\n disabled?: boolean\n keepValueVisible?: boolean\n onEntered?: () => void\n}\n\nexport interface SettingCardExpandableRef {\n element: HTMLButtonElement | null\n isExpanded: boolean\n toggleExpanded: (forceExpanded?: boolean) => void\n}\n\nexport const SettingCardExpandable = ({\n icon,\n title,\n value,\n children,\n disabled,\n keepValueVisible,\n onEntered,\n ref,\n}: PropsWithChildren<SettingCardExpandableProps> & {\n ref?: Ref<SettingCardExpandableRef>\n}): JSX.Element => {\n const { expanded, toggleExpanded } = useSettingsCardExpandable()\n const buttonId = useId()\n const collapseId = useId()\n const buttonRef = useRef<HTMLButtonElement>(null)\n\n useImperativeHandle(\n ref,\n () => ({\n element: buttonRef.current,\n isExpanded: expanded,\n toggleExpanded,\n }),\n [expanded, toggleExpanded]\n )\n\n return (\n <Card sx={{ p: 1 }}>\n <CardRowButton\n ref={buttonRef}\n id={buttonId}\n aria-expanded={expanded}\n aria-controls={collapseId}\n onClick={disabled ? undefined : () => toggleExpanded()}\n disableRipple\n sx={{ p: 1, cursor: disabled ? 'default' : 'pointer' }}\n >\n <CardTitleContainer>\n {icon}\n <CardValue>{title}</CardValue>\n </CardTitleContainer>\n {(!expanded || keepValueVisible) && value}\n </CardRowButton>\n <Collapse\n id={collapseId}\n role=\"region\"\n aria-labelledby={buttonId}\n in={expanded}\n mountOnEnter\n unmountOnExit\n onEntered={onEntered}\n >\n {children}\n </Collapse>\n </Card>\n )\n}\n"],"mappings":";;;;;;;AAyBA,MAAa,yBAAyB,EACpC,MACA,OACA,OACA,UACA,UACA,kBACA,WACA,UAGiB;CACjB,MAAM,EAAE,UAAU,mBAAmB,0BAA0B;CAC/D,MAAM,WAAW,MAAM;CACvB,MAAM,aAAa,MAAM;CACzB,MAAM,YAAY,OAA0B,IAAI;CAEhD,oBACE,YACO;EACL,SAAS,UAAU;EACnB,YAAY;EACZ;CACF,IACA,CAAC,UAAU,cAAc,CAC3B;CAEA,OACE,qBAACA,QAAD;EAAM,IAAI,EAAE,GAAG,EAAE;YAAjB,CACE,qBAAC,eAAD;GACE,KAAK;GACL,IAAI;GACJ,iBAAe;GACf,iBAAe;GACf,SAAS,WAAW,KAAA,UAAkB,eAAe;GACrD,eAAA;GACA,IAAI;IAAE,GAAG;IAAG,QAAQ,WAAW,YAAY;GAAU;aAPvD,CASE,qBAAC,oBAAD,EAAA,UAAA,CACG,MACD,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,CACX,EAAA,CAAA,IAClB,CAAC,YAAY,qBAAqB,KACvB;MACf,oBAAC,UAAD;GACE,IAAI;GACJ,MAAK;GACL,mBAAiB;GACjB,IAAI;GACJ,cAAA;GACA,eAAA;GACW;GAEV;EACO,CAAA,CACN;;AAEV"}
@@ -1,4 +1,4 @@
1
- import { createContext, useContext, useEffect, useId, useState } from "react";
1
+ import { createContext, use, useEffect, useId, useState } from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/pages/SettingsPage/SettingsCard/SettingsAccordian.tsx
4
4
  const SettingsAccordionContext = createContext({
@@ -7,7 +7,7 @@ const SettingsAccordionContext = createContext({
7
7
  });
8
8
  const SettingsCardAccordion = ({ children }) => {
9
9
  const [openCard, setOpenCard] = useState("");
10
- return /* @__PURE__ */ jsx(SettingsAccordionContext.Provider, {
10
+ return /* @__PURE__ */ jsx(SettingsAccordionContext, {
11
11
  value: {
12
12
  openCard,
13
13
  setOpenCard
@@ -18,7 +18,7 @@ const SettingsCardAccordion = ({ children }) => {
18
18
  const useSettingsCardExpandable = () => {
19
19
  const settingCardExpandableId = useId();
20
20
  const [expanded, setExpanded] = useState(false);
21
- const { openCard, setOpenCard } = useContext(SettingsAccordionContext);
21
+ const { openCard, setOpenCard } = use(SettingsAccordionContext);
22
22
  const toggleExpanded = (forceExpanded) => {
23
23
  const newExpanded = forceExpanded ?? !expanded;
24
24
  setExpanded(newExpanded);
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsAccordian.js","names":[],"sources":["../../../../../src/pages/SettingsPage/SettingsCard/SettingsAccordian.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react'\nimport { createContext, useContext, useEffect, useId, useState } from 'react'\n\nconst SettingsAccordionContext = createContext({\n setOpenCard: (_id: string) => {},\n openCard: '',\n})\n\nexport const SettingsCardAccordion: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [openCard, setOpenCard] = useState('')\n\n return (\n <SettingsAccordionContext.Provider value={{ openCard, setOpenCard }}>\n {children}\n </SettingsAccordionContext.Provider>\n )\n}\n\nexport const useSettingsCardExpandable = (): {\n expanded: boolean\n toggleExpanded: (forceExpanded?: boolean) => void\n} => {\n const settingCardExpandableId = useId()\n const [expanded, setExpanded] = useState(false)\n const { openCard, setOpenCard } = useContext(SettingsAccordionContext)\n\n const toggleExpanded = (forceExpanded?: boolean) => {\n const newExpanded = forceExpanded ?? !expanded\n setExpanded(newExpanded)\n\n if (newExpanded && openCard !== settingCardExpandableId) {\n setOpenCard(settingCardExpandableId)\n }\n }\n\n useEffect(() => {\n if (openCard !== settingCardExpandableId) {\n setExpanded(false)\n }\n }, [settingCardExpandableId, openCard])\n\n return {\n expanded: expanded,\n toggleExpanded: toggleExpanded,\n }\n}\n"],"mappings":";;;AAGA,MAAM,2BAA2B,cAAc;CAC7C,cAAc,QAAgB,CAAC;CAC/B,UAAU;AACZ,CAAC;AAED,MAAa,yBAAsD,EACjE,eACI;CACJ,MAAM,CAAC,UAAU,eAAe,SAAS,EAAE;CAE3C,OACE,oBAAC,yBAAyB,UAA1B;EAAmC,OAAO;GAAE;GAAU;EAAY;EAC/D;CACgC,CAAA;AAEvC;AAEA,MAAa,kCAGR;CACH,MAAM,0BAA0B,MAAM;CACtC,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,EAAE,UAAU,gBAAgB,WAAW,wBAAwB;CAErE,MAAM,kBAAkB,kBAA4B;EAClD,MAAM,cAAc,iBAAiB,CAAC;EACtC,YAAY,WAAW;EAEvB,IAAI,eAAe,aAAa,yBAC9B,YAAY,uBAAuB;CAEvC;CAEA,gBAAgB;EACd,IAAI,aAAa,yBACf,YAAY,KAAK;CAErB,GAAG,CAAC,yBAAyB,QAAQ,CAAC;CAEtC,OAAO;EACK;EACM;CAClB;AACF"}
1
+ {"version":3,"file":"SettingsAccordian.js","names":[],"sources":["../../../../../src/pages/SettingsPage/SettingsCard/SettingsAccordian.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react'\nimport { createContext, use, useEffect, useId, useState } from 'react'\n\nconst SettingsAccordionContext = createContext({\n setOpenCard: (_id: string) => {},\n openCard: '',\n})\n\nexport const SettingsCardAccordion: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [openCard, setOpenCard] = useState('')\n\n return (\n <SettingsAccordionContext value={{ openCard, setOpenCard }}>\n {children}\n </SettingsAccordionContext>\n )\n}\n\nexport const useSettingsCardExpandable = (): {\n expanded: boolean\n toggleExpanded: (forceExpanded?: boolean) => void\n} => {\n const settingCardExpandableId = useId()\n const [expanded, setExpanded] = useState(false)\n const { openCard, setOpenCard } = use(SettingsAccordionContext)\n\n const toggleExpanded = (forceExpanded?: boolean) => {\n const newExpanded = forceExpanded ?? !expanded\n setExpanded(newExpanded)\n\n if (newExpanded && openCard !== settingCardExpandableId) {\n setOpenCard(settingCardExpandableId)\n }\n }\n\n useEffect(() => {\n if (openCard !== settingCardExpandableId) {\n setExpanded(false)\n }\n }, [settingCardExpandableId, openCard])\n\n return {\n expanded: expanded,\n toggleExpanded: toggleExpanded,\n }\n}\n"],"mappings":";;;AAGA,MAAM,2BAA2B,cAAc;CAC7C,cAAc,QAAgB,CAAC;CAC/B,UAAU;AACZ,CAAC;AAED,MAAa,yBAAsD,EACjE,eACI;CACJ,MAAM,CAAC,UAAU,eAAe,SAAS,EAAE;CAE3C,OACE,oBAAC,0BAAD;EAA0B,OAAO;GAAE;GAAU;EAAY;EACtD;CACuB,CAAA;AAE9B;AAEA,MAAa,kCAGR;CACH,MAAM,0BAA0B,MAAM;CACtC,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,EAAE,UAAU,gBAAgB,IAAI,wBAAwB;CAE9D,MAAM,kBAAkB,kBAA4B;EAClD,MAAM,cAAc,iBAAiB,CAAC;EACtC,YAAY,WAAW;EAEvB,IAAI,eAAe,aAAa,yBAC9B,YAAY,uBAAuB;CAEvC;CAEA,gBAAgB;EACd,IAAI,aAAa,yBACf,YAAY,KAAK;CAErB,GAAG,CAAC,yBAAyB,QAAQ,CAAC;CAEtC,OAAO;EACK;EACM;CAClB;AACF"}
@@ -0,0 +1,133 @@
1
+ import { useSettingsActions } from "../../../stores/settings/useSettingsActions.js";
2
+ import { formatInputAmount, formatSlippage } from "../../../utils/format.js";
3
+ import { PageContainer } from "../../../components/PageContainer.js";
4
+ import { useSettings } from "../../../stores/settings/useSettings.js";
5
+ import { useSettingMonitor } from "../../../hooks/useSettingMonitor.js";
6
+ import { useHeader } from "../../../hooks/useHeader.js";
7
+ import { useListHeight } from "../../../hooks/useListHeight.js";
8
+ import { ListItemText as ListItemText$1 } from "../../../components/ListItemText.js";
9
+ import { SettingsListItemButton } from "../../../components/SettingsListItemButton.js";
10
+ import { SlippageClearButton, SlippageInput, SlippageLimitsWarningContainer } from "./SlippageSettings.style.js";
11
+ import { useRef, useState } from "react";
12
+ import { Box, Collapse, List, Typography } from "@mui/material";
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ import { useTranslation } from "react-i18next";
15
+ import CloseRounded from "@mui/icons-material/CloseRounded";
16
+ import WarningRounded from "@mui/icons-material/WarningRounded";
17
+ import Check from "@mui/icons-material/Check";
18
+ //#region src/pages/SettingsPage/SlippageSettings/SlippagePage.tsx
19
+ const slippagePresets = ["0.5", "1"];
20
+ const maxFractionDigits = 5;
21
+ const SlippagePage = () => {
22
+ const { t } = useTranslation();
23
+ const { isSlippageNotRecommended, isSlippageUnderRecommendedLimits, isSlippageOutsideRecommendedLimits } = useSettingMonitor();
24
+ const { slippage } = useSettings(["slippage"]);
25
+ const { setValue } = useSettingsActions();
26
+ const defaultValue = useRef(slippage);
27
+ const listParentRef = useRef(null);
28
+ const { listHeight } = useListHeight({ listParentRef });
29
+ useHeader(t("settings.slippage"));
30
+ const isAuto = !slippage || slippage === void 0;
31
+ const isPreset = !!slippage && slippagePresets.includes(slippage);
32
+ const isCustom = !isAuto && !isPreset;
33
+ const [customMode, setCustomMode] = useState(isCustom);
34
+ const [inputValue, setInputValue] = useState(isCustom ? slippage ?? "" : "");
35
+ const handleAuto = () => {
36
+ setCustomMode(false);
37
+ setInputValue("");
38
+ setValue("slippage", void 0);
39
+ };
40
+ const handlePreset = (preset) => {
41
+ setCustomMode(false);
42
+ setValue("slippage", preset);
43
+ };
44
+ const handleCustom = () => {
45
+ setCustomMode(true);
46
+ const initialValue = slippage || "";
47
+ if (initialValue) {
48
+ setInputValue(initialValue);
49
+ setValue("slippage", initialValue);
50
+ }
51
+ };
52
+ const formatAndSetSlippage = (value, returnInitial = false) => {
53
+ const formattedSlippage = formatSlippage(value, defaultValue.current, returnInitial);
54
+ const formattedValue = Number(formattedSlippage) === 0 && !returnInitial ? "0" : formatInputAmount(formattedSlippage, maxFractionDigits, returnInitial);
55
+ const maxLength = Number(formattedValue) < 10 ? 7 : 8;
56
+ const slicedValue = formattedValue.slice(0, maxLength);
57
+ setInputValue(slicedValue);
58
+ setValue("slippage", slicedValue.length ? slicedValue : void 0);
59
+ };
60
+ const handleInputUpdate = (event) => {
61
+ formatAndSetSlippage(event.target.value, true);
62
+ };
63
+ const handleInputFocus = (event) => {
64
+ formatAndSetSlippage(event.target.value);
65
+ };
66
+ const handleInputBlur = (event) => {
67
+ formatAndSetSlippage(event.target.value);
68
+ };
69
+ const slippageWarningText = isSlippageOutsideRecommendedLimits ? t("warning.message.slippageOutsideRecommendedLimits") : isSlippageUnderRecommendedLimits ? t("warning.message.slippageUnderRecommendedLimits") : "";
70
+ return /* @__PURE__ */ jsx(PageContainer, {
71
+ disableGutters: true,
72
+ children: /* @__PURE__ */ jsxs(List, {
73
+ className: "long-list",
74
+ ref: listParentRef,
75
+ style: {
76
+ height: listHeight,
77
+ overflow: "auto"
78
+ },
79
+ sx: { padding: 1.5 },
80
+ children: [
81
+ /* @__PURE__ */ jsxs(SettingsListItemButton, {
82
+ onClick: handleAuto,
83
+ children: [/* @__PURE__ */ jsx(ListItemText$1, {
84
+ primary: t("button.auto"),
85
+ secondary: t("settings.slippageAutoDescription")
86
+ }), !customMode && isAuto && /* @__PURE__ */ jsx(Check, { color: "primary" })]
87
+ }),
88
+ slippagePresets.map((preset) => /* @__PURE__ */ jsxs(SettingsListItemButton, {
89
+ onClick: () => handlePreset(preset),
90
+ children: [/* @__PURE__ */ jsx(ListItemText$1, { primary: `${preset}%` }), !customMode && slippage === preset && /* @__PURE__ */ jsx(Check, { color: "primary" })]
91
+ }, preset)),
92
+ /* @__PURE__ */ jsxs(SettingsListItemButton, {
93
+ onClick: handleCustom,
94
+ children: [/* @__PURE__ */ jsx(ListItemText$1, { primary: t("settings.custom") }), customMode && /* @__PURE__ */ jsx(Check, { color: "primary" })]
95
+ }),
96
+ /* @__PURE__ */ jsx(Collapse, {
97
+ in: customMode,
98
+ children: /* @__PURE__ */ jsxs(Box, {
99
+ sx: {
100
+ px: 1.5,
101
+ pt: 1
102
+ },
103
+ children: [/* @__PURE__ */ jsx(SlippageInput, {
104
+ placeholder: "0.5",
105
+ inputProps: { inputMode: "decimal" },
106
+ value: inputValue,
107
+ onChange: handleInputUpdate,
108
+ onFocus: handleInputFocus,
109
+ onBlur: handleInputBlur,
110
+ autoComplete: "off",
111
+ endAdornment: !isAuto && /* @__PURE__ */ jsx(SlippageClearButton, {
112
+ size: "small",
113
+ onClick: handleAuto,
114
+ "aria-label": "Clear",
115
+ children: /* @__PURE__ */ jsx(CloseRounded, { fontSize: "small" })
116
+ })
117
+ }), isSlippageNotRecommended && /* @__PURE__ */ jsxs(SlippageLimitsWarningContainer, { children: [/* @__PURE__ */ jsx(WarningRounded, { color: "warning" }), /* @__PURE__ */ jsx(Typography, {
118
+ sx: {
119
+ fontSize: 13,
120
+ fontWeight: 400
121
+ },
122
+ children: slippageWarningText
123
+ })] })]
124
+ })
125
+ })
126
+ ]
127
+ })
128
+ });
129
+ };
130
+ //#endregion
131
+ export { SlippagePage };
132
+
133
+ //# sourceMappingURL=SlippagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlippagePage.js","names":["ListItemText"],"sources":["../../../../../src/pages/SettingsPage/SlippageSettings/SlippagePage.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check'\nimport CloseRounded from '@mui/icons-material/CloseRounded'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Box, Collapse, List, Typography } from '@mui/material'\nimport type { ChangeEventHandler, FocusEventHandler } from 'react'\nimport { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ListItemText } from '../../../components/ListItemText.js'\nimport { PageContainer } from '../../../components/PageContainer.js'\nimport { SettingsListItemButton } from '../../../components/SettingsListItemButton.js'\nimport { useHeader } from '../../../hooks/useHeader.js'\nimport { useListHeight } from '../../../hooks/useListHeight.js'\nimport { useSettingMonitor } from '../../../hooks/useSettingMonitor.js'\nimport { defaultSlippage } from '../../../stores/settings/createSettingsStore.js'\nimport { useSettings } from '../../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../../stores/settings/useSettingsActions.js'\nimport { formatInputAmount, formatSlippage } from '../../../utils/format.js'\nimport {\n SlippageClearButton,\n SlippageInput,\n SlippageLimitsWarningContainer,\n} from './SlippageSettings.style.js'\n\nconst slippagePresets = ['0.5', '1']\nconst maxFractionDigits = 5\n\nexport const SlippagePage: React.FC = () => {\n const { t } = useTranslation()\n const {\n isSlippageNotRecommended,\n isSlippageUnderRecommendedLimits,\n isSlippageOutsideRecommendedLimits,\n } = useSettingMonitor()\n const { slippage } = useSettings(['slippage'])\n const { setValue } = useSettingsActions()\n const defaultValue = useRef(slippage)\n const listParentRef = useRef<HTMLUListElement | null>(null)\n const { listHeight } = useListHeight({ listParentRef })\n\n useHeader(t('settings.slippage'))\n\n const isAuto = !slippage || slippage === defaultSlippage\n const isPreset = !!slippage && slippagePresets.includes(slippage)\n const isCustom = !isAuto && !isPreset\n\n const [customMode, setCustomMode] = useState(isCustom)\n const [inputValue, setInputValue] = useState(isCustom ? (slippage ?? '') : '')\n\n const handleAuto = () => {\n setCustomMode(false)\n setInputValue('')\n setValue('slippage', defaultSlippage)\n }\n\n const handlePreset = (preset: string) => {\n setCustomMode(false)\n setValue('slippage', preset)\n }\n\n const handleCustom = () => {\n setCustomMode(true)\n const initialValue = slippage || ''\n if (initialValue) {\n setInputValue(initialValue)\n setValue('slippage', initialValue)\n }\n }\n\n const formatAndSetSlippage = (value: string, returnInitial = false) => {\n const formattedSlippage = formatSlippage(\n value,\n defaultValue.current,\n returnInitial\n )\n const formattedValue =\n Number(formattedSlippage) === 0 && !returnInitial\n ? '0'\n : formatInputAmount(formattedSlippage, maxFractionDigits, returnInitial)\n const maxLength =\n Number(formattedValue) < 10\n ? maxFractionDigits + 2\n : maxFractionDigits + 3\n const slicedValue = formattedValue.slice(0, maxLength)\n setInputValue(slicedValue)\n setValue('slippage', slicedValue.length ? slicedValue : defaultSlippage)\n }\n\n const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {\n formatAndSetSlippage(event.target.value, true)\n }\n\n const handleInputFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetSlippage(event.target.value)\n }\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetSlippage(event.target.value)\n }\n\n const slippageWarningText = isSlippageOutsideRecommendedLimits\n ? t('warning.message.slippageOutsideRecommendedLimits')\n : isSlippageUnderRecommendedLimits\n ? t('warning.message.slippageUnderRecommendedLimits')\n : ''\n\n return (\n <PageContainer disableGutters>\n <List\n className=\"long-list\"\n ref={listParentRef}\n style={{ height: listHeight, overflow: 'auto' }}\n sx={{\n padding: 1.5,\n }}\n >\n <SettingsListItemButton onClick={handleAuto}>\n <ListItemText\n primary={t('button.auto')}\n secondary={t('settings.slippageAutoDescription')}\n />\n {!customMode && isAuto && <Check color=\"primary\" />}\n </SettingsListItemButton>\n {slippagePresets.map((preset) => (\n <SettingsListItemButton\n key={preset}\n onClick={() => handlePreset(preset)}\n >\n <ListItemText primary={`${preset}%`} />\n {!customMode && slippage === preset && <Check color=\"primary\" />}\n </SettingsListItemButton>\n ))}\n <SettingsListItemButton onClick={handleCustom}>\n <ListItemText primary={t('settings.custom')} />\n {customMode && <Check color=\"primary\" />}\n </SettingsListItemButton>\n <Collapse in={customMode}>\n <Box sx={{ px: 1.5, pt: 1 }}>\n <SlippageInput\n placeholder=\"0.5\"\n inputProps={{ inputMode: 'decimal' }}\n value={inputValue}\n onChange={handleInputUpdate}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n autoComplete=\"off\"\n endAdornment={\n !isAuto && (\n <SlippageClearButton\n size=\"small\"\n onClick={handleAuto}\n aria-label=\"Clear\"\n >\n <CloseRounded fontSize=\"small\" />\n </SlippageClearButton>\n )\n }\n />\n {isSlippageNotRecommended && (\n <SlippageLimitsWarningContainer>\n <WarningRounded color=\"warning\" />\n <Typography\n sx={{\n fontSize: 13,\n fontWeight: 400,\n }}\n >\n {slippageWarningText}\n </Typography>\n </SlippageLimitsWarningContainer>\n )}\n </Box>\n </Collapse>\n </List>\n </PageContainer>\n )\n}\n"],"mappings":"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"}