@lifi/widget 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) 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/AppDrawer.d.ts +1 -1
  6. package/dist/esm/AppDrawer.d.ts.map +1 -1
  7. package/dist/esm/AppDrawer.js +5 -6
  8. package/dist/esm/AppDrawer.js.map +1 -1
  9. package/dist/esm/AppDrawerContext.js +2 -2
  10. package/dist/esm/AppDrawerContext.js.map +1 -1
  11. package/dist/esm/components/ActionRow/ActionRow.style.js.map +1 -1
  12. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  13. package/dist/esm/components/AmountInput/AmountInput.style.js.map +1 -1
  14. package/dist/esm/components/AmountInput/AmountInputEndAdornment.style.js.map +1 -1
  15. package/dist/esm/components/AmountInput/PriceFormHelperText.style.js.map +1 -1
  16. package/dist/esm/components/AppContainer.js.map +1 -1
  17. package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
  18. package/dist/esm/components/Avatar/Avatar.style.js.map +1 -1
  19. package/dist/esm/components/Avatar/SmallAvatar.js.map +1 -1
  20. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js +1 -0
  21. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
  22. package/dist/esm/components/BottomSheet/BottomSheet.js +3 -3
  23. package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
  24. package/dist/esm/components/ButtonTertiary.js.map +1 -1
  25. package/dist/esm/components/Card/Card.js.map +1 -1
  26. package/dist/esm/components/Card/CardButton.style.js.map +1 -1
  27. package/dist/esm/components/Card/CardHeader.js.map +1 -1
  28. package/dist/esm/components/Card/CardIconButton.js.map +1 -1
  29. package/dist/esm/components/Card/CardLabel.js.map +1 -1
  30. package/dist/esm/components/Card/CardTitle.js.map +1 -1
  31. package/dist/esm/components/Card/InputCard.js.map +1 -1
  32. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  33. package/dist/esm/components/ChainSelect/ChainSelect.style.js.map +1 -1
  34. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  35. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  36. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  37. package/dist/esm/components/Chains/ChainList.style.js.map +1 -1
  38. package/dist/esm/components/Chains/ChainsExpanded.style.js.map +1 -1
  39. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  40. package/dist/esm/components/ContextMenu.style.js.map +1 -1
  41. package/dist/esm/components/ContractComponent/NFT/NFT.style.js.map +1 -1
  42. package/dist/esm/components/Dialog/Dialog.style.js.map +1 -1
  43. package/dist/esm/components/EmptyListIndicator/EmptyListIndicator.style.js.map +1 -1
  44. package/dist/esm/components/ExecutionStatusCard/StatusIcon.js.map +1 -1
  45. package/dist/esm/components/ExecutionStatusCard/StatusIcon.style.js.map +1 -1
  46. package/dist/esm/components/ExecutionStatusCard/iconKey.js.map +1 -1
  47. package/dist/esm/components/Expansion/Expansion.style.js.map +1 -1
  48. package/dist/esm/components/Header/ActivitiesButton.style.js.map +1 -1
  49. package/dist/esm/components/Header/CloseDrawerButton.js +1 -0
  50. package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
  51. package/dist/esm/components/Header/Header.js +7 -10
  52. package/dist/esm/components/Header/Header.js.map +1 -1
  53. package/dist/esm/components/Header/Header.style.js.map +1 -1
  54. package/dist/esm/components/Header/HeaderNavigationTabs.js +26 -0
  55. package/dist/esm/components/Header/HeaderNavigationTabs.js.map +1 -0
  56. package/dist/esm/components/Header/HeaderTabs.js +33 -0
  57. package/dist/esm/components/Header/HeaderTabs.js.map +1 -0
  58. package/dist/esm/components/Header/NavigationHeader.js +7 -5
  59. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  60. package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
  61. package/dist/esm/components/Header/WalletMenu.style.js.map +1 -1
  62. package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
  63. package/dist/esm/components/IconTypography.js.map +1 -1
  64. package/dist/esm/components/Input.js.map +1 -1
  65. package/dist/esm/components/ListItem/ListItem.js.map +1 -1
  66. package/dist/esm/components/ListItem/ListItemButton.js.map +1 -1
  67. package/dist/esm/components/ListItemButton.js.map +1 -1
  68. package/dist/esm/components/ListItemText.js.map +1 -1
  69. package/dist/esm/components/Menu.js.map +1 -1
  70. package/dist/esm/components/Messages/AlertMessage.style.js.map +1 -1
  71. package/dist/esm/components/Messages/GasRefuelMessage.style.js.map +1 -1
  72. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  73. package/dist/esm/components/PageContainer.js.map +1 -1
  74. package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
  75. package/dist/esm/components/PoweredBy/PoweredBy.style.js.map +1 -1
  76. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js +1 -0
  77. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
  78. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.js.map +1 -1
  79. package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
  80. package/dist/esm/components/RouteCard/RouteDetails.style.js +2 -2
  81. package/dist/esm/components/RouteCard/RouteDetails.style.js.map +1 -1
  82. package/dist/esm/components/RouteCard/RouteToken.style.js.map +1 -1
  83. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  84. package/dist/esm/components/RouteCard/getMatchingLabels.js.map +1 -1
  85. package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
  86. package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
  87. package/dist/esm/components/Search/SearchInput.style.js.map +1 -1
  88. package/dist/esm/components/Search/SearchNotFound.style.js.map +1 -1
  89. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
  90. package/dist/esm/components/SendToWallet/SendToWalletButton.style.js.map +1 -1
  91. package/dist/esm/components/SettingsListItemButton.js.map +1 -1
  92. package/dist/esm/components/Skeleton/WidgetSkeleton.js +50 -47
  93. package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
  94. package/dist/esm/components/Skeleton/WidgetSkeleton.style.js.map +1 -1
  95. package/dist/esm/components/Step/StepActions.js.map +1 -1
  96. package/dist/esm/components/Step/StepActions.style.js.map +1 -1
  97. package/dist/esm/components/StepActions/SentToWalletRow.style.js.map +1 -1
  98. package/dist/esm/components/StepActions/StepActionRow.style.js.map +1 -1
  99. package/dist/esm/components/Switch.js.map +1 -1
  100. package/dist/esm/components/Tabs/NavigationTabs.js +3 -0
  101. package/dist/esm/components/Tabs/NavigationTabs.js.map +1 -1
  102. package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
  103. package/dist/esm/components/Timer/StepStatusTimer.style.js.map +1 -1
  104. package/dist/esm/components/Token/Token.style.js.map +1 -1
  105. package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
  106. package/dist/esm/components/TokenList/TokenDetailsSheet.js +4 -4
  107. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  108. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +4 -4
  109. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  110. package/dist/esm/components/TokenList/TokenDetailsSheetContent.style.js.map +1 -1
  111. package/dist/esm/components/TokenList/TokenList.style.js.map +1 -1
  112. package/dist/esm/components/TokenList/TokenListItem.js +2 -2
  113. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  114. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  115. package/dist/esm/components/TokenList/useTokenSelect.js +3 -3
  116. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  117. package/dist/esm/components/TokenRate/TokenRate.style.js.map +1 -1
  118. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  119. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js.map +1 -1
  120. package/dist/esm/components/TransactionCard/TransactionCard.style.js.map +1 -1
  121. package/dist/esm/config/version.d.ts +1 -1
  122. package/dist/esm/config/version.js +1 -1
  123. package/dist/esm/config/version.js.map +1 -1
  124. package/dist/esm/hooks/timer/validate.js.map +1 -1
  125. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  126. package/dist/esm/hooks/useAvailableChains.js +1 -1
  127. package/dist/esm/hooks/useChainSearch.js.map +1 -1
  128. package/dist/esm/hooks/useChains.js +1 -1
  129. package/dist/esm/hooks/useExplorer.js.map +1 -1
  130. package/dist/esm/hooks/useFilteredByTokenBalances.js +1 -1
  131. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
  132. package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
  133. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  134. package/dist/esm/hooks/useLanguages.js +2 -2
  135. package/dist/esm/hooks/useLanguages.js.map +1 -1
  136. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  137. package/dist/esm/hooks/useRouteExecutionMessage.js.map +1 -1
  138. package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -1
  139. package/dist/esm/hooks/useRoutes.js.map +1 -1
  140. package/dist/esm/hooks/useSwapOnly.js +2 -4
  141. package/dist/esm/hooks/useSwapOnly.js.map +1 -1
  142. package/dist/esm/hooks/useToAddressRequirements.js +2 -2
  143. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  144. package/dist/esm/hooks/useToken.js.map +1 -1
  145. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  146. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  147. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
  148. package/dist/esm/hooks/useTokenSearch.js +1 -1
  149. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  150. package/dist/esm/hooks/useTokens.js +1 -1
  151. package/dist/esm/hooks/useTokens.js.map +1 -1
  152. package/dist/esm/hooks/useTools.js +1 -1
  153. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  154. package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
  155. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  156. package/dist/esm/i18n/en.json +3 -0
  157. package/dist/esm/index.d.ts +2 -2
  158. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  159. package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
  160. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  161. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  162. package/dist/esm/pages/RoutesPage/RoutesPage.style.js.map +1 -1
  163. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  164. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +3 -3
  165. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  166. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js +3 -3
  167. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
  168. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  169. package/dist/esm/pages/SendToWallet/SendToWalletPage.style.js.map +1 -1
  170. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  171. package/dist/esm/pages/SettingsPage/GasPriceSettings.js +1 -1
  172. package/dist/esm/pages/SettingsPage/ResetSettingsButton.style.js.map +1 -1
  173. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js +1 -1
  174. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCard.style.js.map +1 -1
  175. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js +3 -3
  176. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
  177. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js +3 -3
  178. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
  179. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
  180. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  181. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.style.js.map +1 -1
  182. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
  183. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
  184. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +3 -3
  185. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  186. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +16 -15
  187. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  188. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.style.js.map +1 -1
  189. package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
  190. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +3 -3
  191. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  192. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.style.js.map +1 -1
  193. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +27 -31
  194. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js.map +1 -1
  195. package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
  196. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  197. package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
  198. package/dist/esm/providers/QueryClientProvider.js +2 -2
  199. package/dist/esm/providers/QueryClientProvider.js.map +1 -1
  200. package/dist/esm/providers/SDKClientProvider.js +26 -27
  201. package/dist/esm/providers/SDKClientProvider.js.map +1 -1
  202. package/dist/esm/providers/WidgetProvider/WidgetProvider.js +25 -27
  203. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  204. package/dist/esm/stores/StoreProvider.js +3 -4
  205. package/dist/esm/stores/StoreProvider.js.map +1 -1
  206. package/dist/esm/stores/bookmarks/BookmarkStore.js +3 -3
  207. package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
  208. package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
  209. package/dist/esm/stores/chains/ChainOrderStore.js +4 -4
  210. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  211. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  212. package/dist/esm/stores/form/FormStore.js +1 -1
  213. package/dist/esm/stores/form/FormStore.js.map +1 -1
  214. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  215. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  216. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
  217. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  218. package/dist/esm/stores/form/useFieldValues.js.map +1 -1
  219. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  220. package/dist/esm/stores/form/useFormStore.js +2 -2
  221. package/dist/esm/stores/form/useFormStore.js.map +1 -1
  222. package/dist/esm/stores/header/useHeaderStore.js +3 -3
  223. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  224. package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
  225. package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js +22 -0
  226. package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js.map +1 -0
  227. package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js +62 -0
  228. package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js.map +1 -0
  229. package/dist/esm/stores/navigationTabs/utils.js +92 -0
  230. package/dist/esm/stores/navigationTabs/utils.js.map +1 -0
  231. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js +3 -3
  232. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js.map +1 -1
  233. package/dist/esm/stores/pinnedTokens/createPinnedTokensStore.js.map +1 -1
  234. package/dist/esm/stores/routes/RouteExecutionStore.js +3 -3
  235. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  236. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  237. package/dist/esm/stores/routes/useIntermediateRoutesStore.js.map +1 -1
  238. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  239. package/dist/esm/stores/routes/utils.js.map +1 -1
  240. package/dist/esm/stores/settings/SettingsStore.js +3 -3
  241. package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
  242. package/dist/esm/stores/settings/createSettingsStore.js +122 -96
  243. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  244. package/dist/esm/stores/settings/types.d.ts +0 -2
  245. package/dist/esm/stores/settings/types.d.ts.map +1 -1
  246. package/dist/esm/stores/settings/types.js.map +1 -1
  247. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  248. package/dist/esm/themes/createTheme.js.map +1 -1
  249. package/dist/esm/themes/utils.js.map +1 -1
  250. package/dist/esm/types/widget.d.ts +19 -2
  251. package/dist/esm/types/widget.d.ts.map +1 -1
  252. package/dist/esm/types/widget.js.map +1 -1
  253. package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
  254. package/dist/esm/utils/converters.js.map +1 -1
  255. package/dist/esm/utils/deepEqual.js.map +1 -1
  256. package/dist/esm/utils/fees.js.map +1 -1
  257. package/dist/esm/utils/format.js.map +1 -1
  258. package/dist/esm/utils/getActionMessage.js.map +1 -1
  259. package/dist/esm/utils/getErrorMessage.js.map +1 -1
  260. package/dist/esm/utils/item.js.map +1 -1
  261. package/dist/esm/utils/{variant.js → mode.js} +2 -2
  262. package/dist/esm/utils/mode.js.map +1 -0
  263. package/dist/esm/utils/prepareActions.js +1 -1
  264. package/dist/esm/utils/prepareActions.js.map +1 -1
  265. package/dist/esm/utils/timer.js.map +1 -1
  266. package/dist/esm/utils/token.js +1 -1
  267. package/dist/esm/utils/token.js.map +1 -1
  268. package/dist/esm/utils/tokenList.js.map +1 -1
  269. package/package.json +11 -11
  270. package/src/App.tsx +7 -7
  271. package/src/AppDrawer.tsx +77 -78
  272. package/src/AppDrawerContext.ts +2 -2
  273. package/src/components/BaseTransactionButton/BaseTransactionButton.tsx +1 -0
  274. package/src/components/BottomSheet/BottomSheet.tsx +56 -52
  275. package/src/components/Header/CloseDrawerButton.tsx +5 -1
  276. package/src/components/Header/Header.tsx +20 -18
  277. package/src/components/Header/HeaderNavigationTabs.tsx +25 -0
  278. package/src/components/Header/HeaderTabs.tsx +48 -0
  279. package/src/components/Header/NavigationHeader.tsx +11 -8
  280. package/src/components/ReverseTokensButton/ReverseTokensButton.tsx +4 -1
  281. package/src/components/Skeleton/WidgetSkeleton.tsx +1 -1
  282. package/src/components/Tabs/NavigationTabs.tsx +3 -0
  283. package/src/components/TokenList/TokenDetailsSheet.tsx +9 -7
  284. package/src/components/TokenList/TokenDetailsSheetContent.tsx +176 -177
  285. package/src/components/TokenList/useTokenSelect.ts +2 -2
  286. package/src/config/version.ts +1 -1
  287. package/src/hooks/useSwapOnly.ts +2 -5
  288. package/src/hooks/useToAddressRequirements.ts +2 -2
  289. package/src/pages/MainPage/ReviewButton.tsx +2 -2
  290. package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +176 -185
  291. package/src/pages/SendToWallet/ConfirmAddressSheet.tsx +9 -6
  292. package/src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx +58 -65
  293. package/src/pages/SettingsPage/SettingsCard/SettingsAccordian.tsx +4 -4
  294. package/src/pages/TransactionPage/ConfirmToAddressSheet.tsx +9 -6
  295. package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +53 -58
  296. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +24 -21
  297. package/src/pages/TransactionPage/TransactionExecutionContent.tsx +8 -6
  298. package/src/providers/QueryClientProvider.tsx +2 -2
  299. package/src/providers/SDKClientProvider.tsx +3 -7
  300. package/src/providers/WidgetProvider/WidgetProvider.tsx +6 -7
  301. package/src/stores/StoreProvider.tsx +3 -10
  302. package/src/stores/bookmarks/BookmarkStore.tsx +4 -4
  303. package/src/stores/chains/ChainOrderStore.tsx +4 -4
  304. package/src/stores/form/FormStore.tsx +2 -2
  305. package/src/stores/form/useFormStore.ts +2 -2
  306. package/src/stores/header/useHeaderStore.tsx +3 -5
  307. package/src/stores/navigationTabs/types.ts +27 -0
  308. package/src/stores/navigationTabs/useNavigationTabLabel.ts +28 -0
  309. package/src/stores/navigationTabs/useNavigationTabsStore.tsx +108 -0
  310. package/src/stores/navigationTabs/utils.ts +134 -0
  311. package/src/stores/pinnedTokens/PinnedTokensStore.tsx +4 -4
  312. package/src/stores/routes/RouteExecutionStore.tsx +4 -4
  313. package/src/stores/settings/SettingsStore.tsx +4 -4
  314. package/src/stores/settings/createSettingsStore.ts +48 -12
  315. package/src/stores/settings/types.ts +1 -16
  316. package/src/types/widget.ts +31 -1
  317. package/dist/esm/components/Header/SplitNavigationTabs.js +0 -33
  318. package/dist/esm/components/Header/SplitNavigationTabs.js.map +0 -1
  319. package/dist/esm/stores/settings/useSplitModeStore.js +0 -36
  320. package/dist/esm/stores/settings/useSplitModeStore.js.map +0 -1
  321. package/dist/esm/utils/variant.js.map +0 -1
  322. package/src/components/Header/SplitNavigationTabs.tsx +0 -32
  323. package/src/stores/settings/useSplitModeStore.tsx +0 -58
  324. /package/src/utils/{variant.ts → mode.ts} +0 -0
package/src/AppDrawer.tsx CHANGED
@@ -1,11 +1,6 @@
1
1
  import { Drawer } from '@mui/material'
2
- import type {
3
- ForwardRefExoticComponent,
4
- PropsWithChildren,
5
- RefAttributes,
6
- } from 'react'
2
+ import type { JSX, PropsWithChildren, Ref } from 'react'
7
3
  import {
8
- forwardRef,
9
4
  useCallback,
10
5
  useImperativeHandle,
11
6
  useMemo,
@@ -23,82 +18,86 @@ export interface WidgetDrawer {
23
18
  closeDrawer(): void
24
19
  }
25
20
 
26
- export const AppDrawer: ForwardRefExoticComponent<
27
- PropsWithChildren<WidgetDrawerProps> & RefAttributes<WidgetDrawer>
28
- > = forwardRef<WidgetDrawer, PropsWithChildren<WidgetDrawerProps>>(
29
- ({ elementRef, open, onClose, children }, ref) => {
30
- const openRef = useRef(Boolean(open))
31
- const [drawerOpen, setDrawerOpen] = useState(Boolean(open))
21
+ export const AppDrawer = ({
22
+ elementRef,
23
+ open,
24
+ onClose,
25
+ children,
26
+ ref,
27
+ }: PropsWithChildren<WidgetDrawerProps> & {
28
+ ref?: Ref<WidgetDrawer>
29
+ }): JSX.Element => {
30
+ const openRef = useRef(Boolean(open))
31
+ const [drawerOpen, setDrawerOpen] = useState(Boolean(open))
32
32
 
33
- const toggleDrawer = useCallback(() => {
34
- setDrawerOpen((open) => {
35
- openRef.current = !open
36
- return openRef.current
37
- })
38
- if (!openRef.current) {
39
- onClose?.()
40
- }
41
- }, [onClose])
33
+ const toggleDrawer = useCallback(() => {
34
+ setDrawerOpen((open) => {
35
+ openRef.current = !open
36
+ return openRef.current
37
+ })
38
+ if (!openRef.current) {
39
+ onClose?.()
40
+ }
41
+ }, [onClose])
42
42
 
43
- const openDrawer = useCallback(() => {
44
- setDrawerOpen(true)
45
- openRef.current = true
46
- }, [])
43
+ const openDrawer = useCallback(() => {
44
+ setDrawerOpen(true)
45
+ openRef.current = true
46
+ }, [])
47
47
 
48
- const closeDrawer = useCallback(() => {
49
- setDrawerOpen(false)
50
- openRef.current = false
51
- onClose?.()
52
- }, [onClose])
48
+ const closeDrawer = useCallback(() => {
49
+ setDrawerOpen(false)
50
+ openRef.current = false
51
+ onClose?.()
52
+ }, [onClose])
53
53
 
54
- useImperativeHandle(
55
- ref,
56
- () => ({
57
- isOpen: () => openRef.current,
58
- toggleDrawer,
59
- openDrawer,
60
- closeDrawer,
61
- }),
62
- [closeDrawer, openDrawer, toggleDrawer]
63
- )
54
+ useImperativeHandle(
55
+ ref,
56
+ () => ({
57
+ isOpen: () => openRef.current,
58
+ toggleDrawer,
59
+ openDrawer,
60
+ closeDrawer,
61
+ }),
62
+ [closeDrawer, openDrawer, toggleDrawer]
63
+ )
64
64
 
65
- const drawerContext: WidgetDrawerContext = useMemo(
66
- () => ({
67
- closeDrawer,
68
- }),
69
- [closeDrawer]
70
- )
65
+ const drawerContext: WidgetDrawerContext = useMemo(
66
+ () => ({
67
+ closeDrawer,
68
+ }),
69
+ [closeDrawer]
70
+ )
71
71
 
72
- return (
73
- <DrawerContext.Provider value={drawerContext}>
74
- <Drawer
75
- ref={elementRef}
76
- anchor="right"
77
- open={drawerOpen}
78
- onClose={closeDrawer}
79
- slotProps={{
80
- paper: {
81
- sx: (theme) => ({
82
- background: theme.vars.palette.background.default,
83
- width: theme?.container?.width ?? '100%',
84
- minWidth:
85
- theme?.container?.minWidth ?? theme.breakpoints.values.xs,
86
- maxWidth:
87
- theme?.container?.maxWidth ?? theme.breakpoints.values.sm,
88
- }),
72
+ return (
73
+ <DrawerContext value={drawerContext}>
74
+ <Drawer
75
+ ref={elementRef}
76
+ anchor="right"
77
+ open={drawerOpen}
78
+ onClose={closeDrawer}
79
+ slotProps={{
80
+ paper: {
81
+ sx: (theme) => ({
82
+ background: theme.vars.palette.background.default,
83
+ width: theme?.container?.width ?? '100%',
84
+ minWidth:
85
+ theme?.container?.minWidth ?? theme.breakpoints.values.xs,
86
+ maxWidth:
87
+ theme?.container?.maxWidth ?? theme.breakpoints.values.sm,
88
+ }),
89
+ },
90
+ backdrop: {
91
+ sx: {
92
+ backgroundColor: 'rgb(0 0 0 / 48%)',
93
+ backdropFilter: 'blur(3px)',
89
94
  },
90
- backdrop: {
91
- sx: {
92
- backgroundColor: 'rgb(0 0 0 / 48%)',
93
- backdropFilter: 'blur(3px)',
94
- },
95
- },
96
- }}
97
- keepMounted
98
- >
99
- {children}
100
- </Drawer>
101
- </DrawerContext.Provider>
102
- )
103
- }
104
- )
95
+ },
96
+ }}
97
+ keepMounted
98
+ >
99
+ {children}
100
+ </Drawer>
101
+ </DrawerContext>
102
+ )
103
+ }
@@ -1,4 +1,4 @@
1
- import { type Context, createContext, useContext } from 'react'
1
+ import { type Context, createContext, use } from 'react'
2
2
 
3
3
  export interface WidgetDrawerContext {
4
4
  closeDrawer?(): void
@@ -7,4 +7,4 @@ export interface WidgetDrawerContext {
7
7
  export const DrawerContext: Context<WidgetDrawerContext> =
8
8
  createContext<WidgetDrawerContext>({})
9
9
 
10
- export const useDrawer = (): WidgetDrawerContext => useContext(DrawerContext)
10
+ export const useDrawer = (): WidgetDrawerContext => use(DrawerContext)
@@ -64,6 +64,7 @@ export const BaseTransactionButton: React.FC<BaseTransactionButtonProps> = ({
64
64
  loadingPosition="center"
65
65
  fullWidth
66
66
  sx={sx}
67
+ data-testid="widget-transaction-button"
67
68
  >
68
69
  {getButtonText()}
69
70
  </Button>
@@ -1,7 +1,6 @@
1
1
  import { Drawer } from '@mui/material'
2
- import type { ForwardRefExoticComponent, RefAttributes } from 'react'
2
+ import type { JSX, Ref } from 'react'
3
3
  import {
4
- forwardRef,
5
4
  startTransition,
6
5
  useCallback,
7
6
  useImperativeHandle,
@@ -12,56 +11,61 @@ import { useGetScrollableContainer } from '../../hooks/useScrollableContainer.js
12
11
  import { modalProps, slotProps } from '../Dialog/Dialog.js'
13
12
  import type { BottomSheetBase, BottomSheetProps } from './types.js'
14
13
 
15
- export const BottomSheet: ForwardRefExoticComponent<
16
- Omit<BottomSheetProps, 'ref'> & RefAttributes<BottomSheetBase>
17
- > = forwardRef<BottomSheetBase, BottomSheetProps>(
18
- ({ elementRef, children, open, onClose, keepMounted = false }, ref) => {
19
- const getContainer = useGetScrollableContainer()
20
- const openRef = useRef(open)
21
- const [drawerOpen, setDrawerOpen] = useState(open)
22
- const [isInert, setIsInert] = useState(!open)
14
+ export const BottomSheet = ({
15
+ elementRef,
16
+ children,
17
+ open,
18
+ onClose,
19
+ keepMounted = false,
20
+ ref,
21
+ }: Omit<BottomSheetProps, 'ref'> & {
22
+ ref?: Ref<BottomSheetBase>
23
+ }): JSX.Element => {
24
+ const getContainer = useGetScrollableContainer()
25
+ const openRef = useRef(open)
26
+ const [drawerOpen, setDrawerOpen] = useState(open)
27
+ const [isInert, setIsInert] = useState(!open)
23
28
 
24
- const close = useCallback(() => {
25
- // Set inert first to prevent focus issues
26
- setIsInert(true)
27
- // Push the state update to the next event loop tick
28
- // to ensure the inert is applied to before the drawer is closed
29
- startTransition(() => {
30
- setDrawerOpen(false)
31
- openRef.current = false
32
- onClose?.()
33
- })
34
- }, [onClose])
29
+ const close = useCallback(() => {
30
+ // Set inert first to prevent focus issues
31
+ setIsInert(true)
32
+ // Push the state update to the next event loop tick
33
+ // to ensure the inert is applied to before the drawer is closed
34
+ startTransition(() => {
35
+ setDrawerOpen(false)
36
+ openRef.current = false
37
+ onClose?.()
38
+ })
39
+ }, [onClose])
35
40
 
36
- useImperativeHandle(
37
- ref,
38
- () => ({
39
- isOpen: () => openRef.current,
40
- open: () => {
41
- setIsInert(false)
42
- setDrawerOpen(true)
43
- openRef.current = true
44
- },
45
- close,
46
- }),
47
- [close]
48
- )
41
+ useImperativeHandle(
42
+ ref,
43
+ () => ({
44
+ isOpen: () => openRef.current,
45
+ open: () => {
46
+ setIsInert(false)
47
+ setDrawerOpen(true)
48
+ openRef.current = true
49
+ },
50
+ close,
51
+ }),
52
+ [close]
53
+ )
49
54
 
50
- return (
51
- <Drawer
52
- container={getContainer}
53
- ref={elementRef}
54
- anchor="bottom"
55
- open={drawerOpen}
56
- onClose={close}
57
- ModalProps={modalProps}
58
- slotProps={slotProps}
59
- disableAutoFocus
60
- keepMounted={keepMounted}
61
- inert={isInert}
62
- >
63
- {children}
64
- </Drawer>
65
- )
66
- }
67
- )
55
+ return (
56
+ <Drawer
57
+ container={getContainer}
58
+ ref={elementRef}
59
+ anchor="bottom"
60
+ open={drawerOpen}
61
+ onClose={close}
62
+ ModalProps={modalProps}
63
+ slotProps={slotProps}
64
+ disableAutoFocus
65
+ keepMounted={keepMounted}
66
+ inert={isInert}
67
+ >
68
+ {children}
69
+ </Drawer>
70
+ )
71
+ }
@@ -23,7 +23,11 @@ export const CloseDrawerButton = ({
23
23
 
24
24
  return showInNavigationHeader || showInWalletHeader ? (
25
25
  <Tooltip title={t('button.close')}>
26
- <IconButton size="medium" onClick={closeDrawer}>
26
+ <IconButton
27
+ size="medium"
28
+ data-testid="widget-close-drawer-button"
29
+ onClick={closeDrawer}
30
+ >
27
31
  <CloseRounded />
28
32
  </IconButton>
29
33
  </Tooltip>
@@ -1,6 +1,6 @@
1
1
  import { useLocation } from '@tanstack/react-router'
2
2
  import type { FC, PropsWithChildren } from 'react'
3
- import { useLayoutEffect, useRef } from 'react'
3
+ import { useCallback } from 'react'
4
4
  import { useDefaultElementId } from '../../hooks/useDefaultElementId.js'
5
5
  import { useSetHeaderHeight } from '../../stores/header/useHeaderStore.js'
6
6
  import { createElementId, ElementId } from '../../utils/elements.js'
@@ -12,31 +12,33 @@ import { WalletHeader } from './WalletHeader.js'
12
12
  const HeaderContainer: FC<PropsWithChildren> = ({ children }) => {
13
13
  const { pathname } = useLocation()
14
14
  const elementId = useDefaultElementId()
15
- const headerRef = useRef<HTMLDivElement>(null)
16
15
  const { setHeaderHeight } = useSetHeaderHeight()
17
16
 
18
- useLayoutEffect(() => {
19
- const handleHeaderResize = () => {
20
- const height = headerRef.current?.getBoundingClientRect().height
21
-
22
- if (height) {
23
- setHeaderHeight(height)
17
+ // React 19 ref cleanup callback: set up the ResizeObserver when the node
18
+ // mounts and tear it down when it unmounts.
19
+ const headerRef = useCallback(
20
+ (node: HTMLDivElement | null) => {
21
+ if (!node) {
22
+ return
24
23
  }
25
- }
26
24
 
27
- let resizeObserver: ResizeObserver
25
+ const handleHeaderResize = () => {
26
+ const height = node.getBoundingClientRect().height
27
+
28
+ if (height) {
29
+ setHeaderHeight(height)
30
+ }
31
+ }
28
32
 
29
- if (headerRef.current) {
30
- resizeObserver = new ResizeObserver(handleHeaderResize)
31
- resizeObserver.observe(headerRef.current)
32
- }
33
+ const resizeObserver = new ResizeObserver(handleHeaderResize)
34
+ resizeObserver.observe(node)
33
35
 
34
- return () => {
35
- if (resizeObserver) {
36
+ return () => {
36
37
  resizeObserver.disconnect()
37
38
  }
38
- }
39
- }, [setHeaderHeight])
39
+ },
40
+ [setHeaderHeight]
41
+ )
40
42
 
41
43
  return (
42
44
  <Container
@@ -0,0 +1,25 @@
1
+ import type { JSX } from 'react'
2
+ import { useNavigationTabLabel } from '../../stores/navigationTabs/useNavigationTabLabel.js'
3
+ import { useNavigationTabsStore } from '../../stores/navigationTabs/useNavigationTabsStore.js'
4
+ import { HeaderTabs } from './HeaderTabs.js'
5
+
6
+ export const HeaderNavigationTabs = (): JSX.Element | null => {
7
+ const [tabs, activeTab, setActiveTab] = useNavigationTabsStore((store) => [
8
+ store.tabs,
9
+ store.activeTab,
10
+ store.setActiveTab,
11
+ ])
12
+ const getLabel = useNavigationTabLabel()
13
+
14
+ if (!tabs.length || !activeTab) {
15
+ return null
16
+ }
17
+
18
+ return (
19
+ <HeaderTabs
20
+ tabs={tabs.map((key) => ({ key, label: getLabel(key) }))}
21
+ value={activeTab}
22
+ onChange={(key) => setActiveTab(key)}
23
+ />
24
+ )
25
+ }
@@ -0,0 +1,48 @@
1
+ import type { JSX } from 'react'
2
+ import { useFieldActions } from '../../stores/form/useFieldActions.js'
3
+ import { NavigationTab, NavigationTabs } from '../Tabs/NavigationTabs.js'
4
+
5
+ interface HeaderTab<K extends string> {
6
+ key: K
7
+ label: string
8
+ }
9
+
10
+ interface HeaderTabsProps<K extends string> {
11
+ tabs: HeaderTab<K>[]
12
+ value: K
13
+ onChange: (key: K) => void
14
+ }
15
+
16
+ /**
17
+ * Presentational header tabs bar shared by split mode and configured
18
+ * navigation tabs.
19
+ * Clears the form fields on switch; the caller supplies the labelled tabs, the
20
+ * active key, and what selecting a key means for its store.
21
+ */
22
+ export const HeaderTabs = <K extends string>({
23
+ tabs,
24
+ value,
25
+ onChange,
26
+ }: HeaderTabsProps<K>): JSX.Element => {
27
+ const { setFieldValue } = useFieldActions()
28
+
29
+ const handleChange = (_: React.SyntheticEvent, key: K) => {
30
+ setFieldValue('fromAmount', '')
31
+ setFieldValue('fromToken', '')
32
+ setFieldValue('toToken', '')
33
+ onChange(key)
34
+ }
35
+
36
+ return (
37
+ <NavigationTabs value={value} onChange={handleChange} aria-label="tabs">
38
+ {tabs.map((tab) => (
39
+ <NavigationTab
40
+ key={tab.key}
41
+ value={tab.key}
42
+ label={tab.label}
43
+ disableRipple
44
+ />
45
+ ))}
46
+ </NavigationTabs>
47
+ )
48
+ }
@@ -3,6 +3,7 @@ import { Box, Typography } from '@mui/material'
3
3
  import { useLocation } from '@tanstack/react-router'
4
4
  import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
5
5
  import { useHeaderStore } from '../../stores/header/useHeaderStore.js'
6
+ import { useNavigationTabsStore } from '../../stores/navigationTabs/useNavigationTabsStore.js'
6
7
  import {
7
8
  backButtonRoutes,
8
9
  navigationRoutes,
@@ -12,11 +13,14 @@ import { ActivitiesButton } from './ActivitiesButton.js'
12
13
  import { BackButton } from './BackButton.js'
13
14
  import { CloseDrawerButton } from './CloseDrawerButton.js'
14
15
  import { HeaderAppBar, HeaderControlsContainer } from './Header.style.js'
16
+ import { HeaderNavigationTabs } from './HeaderNavigationTabs.js'
15
17
  import { SettingsButton } from './SettingsButton.js'
16
- import { SplitNavigationTabs } from './SplitNavigationTabs.js'
17
18
 
18
19
  export const NavigationHeader: React.FC = () => {
19
- const { mode, hiddenUI, variant, defaultUI, modeOptions } = useWidgetConfig()
20
+ const { hiddenUI, variant, defaultUI } = useWidgetConfig()
21
+ const navigationTabsCount = useNavigationTabsStore(
22
+ (state) => state.tabs.length
23
+ )
20
24
  const { account } = useAccount()
21
25
  const [element, title] = useHeaderStore((state) => [
22
26
  state.element,
@@ -29,17 +33,16 @@ export const NavigationHeader: React.FC = () => {
29
33
  const path = cleanedPathname.substring(cleanedPathname.lastIndexOf('/') + 1)
30
34
  const hasPath = navigationRoutesValues.includes(path)
31
35
 
32
- // Show tabs when split is undefined (default tabs) or an object with defaultTab
33
- // Hide tabs when split is a string ('bridge' or 'swap' - single mode)
34
- const showSplitOptions =
35
- mode === 'split' && !hasPath && typeof modeOptions?.split !== 'string'
36
+ // The store resolves which tabs to show (split Swap/Bridge or configured
37
+ // navigation tabs); the header just reflects whether there are any.
38
+ const showHeaderTabs = !hasPath && navigationTabsCount > 0
36
39
 
37
40
  return (
38
41
  <HeaderAppBar elevation={0} sx={{ paddingTop: 1, paddingBottom: 0.5 }}>
39
42
  {backButtonRoutes.includes(path) ? <BackButton /> : null}
40
- {showSplitOptions ? (
43
+ {showHeaderTabs ? (
41
44
  <Box sx={{ flex: 1, marginRight: 1 }}>
42
- <SplitNavigationTabs />
45
+ <HeaderNavigationTabs />
43
46
  </Box>
44
47
  ) : (
45
48
  <Typography
@@ -50,7 +50,10 @@ export const ReverseTokensButton = (): JSX.Element => {
50
50
  }
51
51
  return (
52
52
  <ReverseContainer>
53
- <IconCard onClick={handleClick}>
53
+ <IconCard
54
+ data-testid="widget-reverse-tokens-button"
55
+ onClick={handleClick}
56
+ >
54
57
  <ArrowForward fontSize="inherit" />
55
58
  </IconCard>
56
59
  </ReverseContainer>
@@ -89,7 +89,7 @@ export const WidgetSkeleton = ({
89
89
  colorSchemeStorageKey="li.fi-widget-color-scheme"
90
90
  disableTransitionOnChange
91
91
  >
92
- <AppExpandedContainer>
92
+ <AppExpandedContainer data-testid="widget-skeleton-container">
93
93
  <RelativeContainer sx={{ display: 'flex', flexDirection: 'column' }}>
94
94
  <SkeletonHeaderContainer>
95
95
  {!hiddenUI?.walletMenu ? (
@@ -40,6 +40,9 @@ export const NavigationTab: React.FC<React.ComponentProps<typeof Tab>> = styled(
40
40
  slot: 'root',
41
41
  }
42
42
  )(({ theme }) => ({
43
+ flex: 'none',
44
+ whiteSpace: 'nowrap',
45
+ minWidth: 'auto',
43
46
  minHeight: theme.spacing(5),
44
47
  maxHeight: theme.spacing(5),
45
48
  }))
@@ -1,13 +1,15 @@
1
- import type React from 'react'
2
- import { forwardRef, useImperativeHandle, useRef, useState } from 'react'
1
+ import type { JSX, Ref } from 'react'
2
+ import { useImperativeHandle, useRef, useState } from 'react'
3
3
  import { BottomSheet } from '../BottomSheet/BottomSheet.js'
4
4
  import type { BottomSheetBase } from '../BottomSheet/types.js'
5
5
  import { TokenDetailsSheetContent } from './TokenDetailsSheetContent.js'
6
6
  import type { TokenDetailsSheetBase } from './types.js'
7
7
 
8
- export const TokenDetailsSheet: React.ForwardRefExoticComponent<
9
- React.RefAttributes<TokenDetailsSheetBase>
10
- > = forwardRef<TokenDetailsSheetBase>((_, ref) => {
8
+ export const TokenDetailsSheet = ({
9
+ ref,
10
+ }: {
11
+ ref?: Ref<TokenDetailsSheetBase>
12
+ }): JSX.Element => {
11
13
  const bottomSheetRef = useRef<BottomSheetBase>(null)
12
14
  const [tokenAddress, setTokenAddress] = useState<string | undefined>(
13
15
  undefined
@@ -35,11 +37,11 @@ export const TokenDetailsSheet: React.ForwardRefExoticComponent<
35
37
  return (
36
38
  <BottomSheet ref={bottomSheetRef} keepMounted>
37
39
  <TokenDetailsSheetContent
38
- ref={ref}
40
+ onClose={() => bottomSheetRef.current?.close()}
39
41
  tokenAddress={tokenAddress}
40
42
  withoutContractAddress={withoutContractAddress}
41
43
  chainId={chainId}
42
44
  />
43
45
  </BottomSheet>
44
46
  )
45
- })
47
+ }