@lifi/widget 4.3.1 → 4.5.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 (511) hide show
  1. package/dist/esm/App.d.ts +0 -1
  2. package/dist/esm/App.d.ts.map +1 -1
  3. package/dist/esm/App.js.map +1 -1
  4. package/dist/esm/AppDrawer.d.ts +1 -1
  5. package/dist/esm/AppDrawer.d.ts.map +1 -1
  6. package/dist/esm/AppDrawer.js.map +1 -1
  7. package/dist/esm/AppLayout.js.map +1 -1
  8. package/dist/esm/AppProvider.js.map +1 -1
  9. package/dist/esm/components/ActionRow/ActionRow.d.ts +13 -0
  10. package/dist/esm/components/ActionRow/ActionRow.d.ts.map +1 -0
  11. package/dist/esm/components/ActionRow/ActionRow.js.map +1 -1
  12. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  13. package/dist/esm/components/AmountInput/AmountInput.style.d.ts +9 -0
  14. package/dist/esm/components/AmountInput/AmountInput.style.d.ts.map +1 -0
  15. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts +7 -0
  16. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts.map +1 -0
  17. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
  18. package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
  19. package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts +7 -0
  20. package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts.map +1 -0
  21. package/dist/esm/components/AmountInputCard/AmountInputCardPair.js.map +1 -1
  22. package/dist/esm/components/AmountInputCard/BalanceDisplay.js.map +1 -1
  23. package/dist/esm/components/AmountInputCard/FiatValueToggle.js.map +1 -1
  24. package/dist/esm/components/AmountInputCard/PercentageChips.js.map +1 -1
  25. package/dist/esm/components/AmountInputCard/ReceiveAmountCard.js.map +1 -1
  26. package/dist/esm/components/AmountInputCard/SendAmountCard.js.map +1 -1
  27. package/dist/esm/components/AppContainer.js.map +1 -1
  28. package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
  29. package/dist/esm/components/Avatar/Avatar.d.ts +12 -0
  30. package/dist/esm/components/Avatar/Avatar.d.ts.map +1 -0
  31. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  32. package/dist/esm/components/Avatar/ChainBadgeContent.js.map +1 -1
  33. package/dist/esm/components/Avatar/TokenAvatar.d.ts +14 -0
  34. package/dist/esm/components/Avatar/TokenAvatar.d.ts.map +1 -0
  35. package/dist/esm/components/Avatar/TokenAvatar.js.map +1 -1
  36. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts +6 -0
  37. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts.map +1 -0
  38. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
  39. package/dist/esm/components/BaseTransactionButton/types.d.ts +14 -0
  40. package/dist/esm/components/BaseTransactionButton/types.d.ts.map +1 -0
  41. package/dist/esm/components/BottomSheet/types.d.ts +11 -0
  42. package/dist/esm/components/BottomSheet/types.d.ts.map +1 -0
  43. package/dist/esm/components/ButtonTertiary.d.ts +7 -0
  44. package/dist/esm/components/ButtonTertiary.d.ts.map +1 -0
  45. package/dist/esm/components/Card/Card.d.ts +12 -0
  46. package/dist/esm/components/Card/Card.d.ts.map +1 -0
  47. package/dist/esm/components/Card/CardButton.js.map +1 -1
  48. package/dist/esm/components/Card/CardIconButton.d.ts +7 -0
  49. package/dist/esm/components/Card/CardIconButton.d.ts.map +1 -0
  50. package/dist/esm/components/Card/CardTitle.d.ts +9 -0
  51. package/dist/esm/components/Card/CardTitle.d.ts.map +1 -0
  52. package/dist/esm/components/Card/InputCard.d.ts +7 -0
  53. package/dist/esm/components/Card/InputCard.d.ts.map +1 -0
  54. package/dist/esm/components/ChainSelect/ChainSelect.d.ts +7 -0
  55. package/dist/esm/components/ChainSelect/ChainSelect.d.ts.map +1 -0
  56. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  57. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts +10 -0
  58. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts.map +1 -0
  59. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  60. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  61. package/dist/esm/components/Chains/ChainListItem.js.map +1 -1
  62. package/dist/esm/components/Chains/ChainsExpanded.js.map +1 -1
  63. package/dist/esm/components/Chains/PinChainButton.js.map +1 -1
  64. package/dist/esm/components/Chains/SelectChainExpansionContent.js.map +1 -1
  65. package/dist/esm/components/Chains/SelectChainPageContent.js.map +1 -1
  66. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  67. package/dist/esm/components/ContextMenu.js.map +1 -1
  68. package/dist/esm/components/ContractComponent/ContractComponent.d.ts +7 -0
  69. package/dist/esm/components/ContractComponent/ContractComponent.d.ts.map +1 -0
  70. package/dist/esm/components/ContractComponent/ItemPrice.d.ts +0 -1
  71. package/dist/esm/components/ContractComponent/ItemPrice.d.ts.map +1 -1
  72. package/dist/esm/components/ContractComponent/NFT/NFT.d.ts +0 -1
  73. package/dist/esm/components/ContractComponent/NFT/NFT.d.ts.map +1 -1
  74. package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts +0 -1
  75. package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts.map +1 -1
  76. package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
  77. package/dist/esm/components/ContractComponent/NFT/types.d.ts +0 -1
  78. package/dist/esm/components/ContractComponent/NFT/types.d.ts.map +1 -1
  79. package/dist/esm/components/ExecutionStatusCard/ExecutionChecklist.js.map +1 -1
  80. package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts +21 -0
  81. package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts.map +1 -0
  82. package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.js.map +1 -1
  83. package/dist/esm/components/ExecutionStatusCard/StaggeredRevealTypography.js.map +1 -1
  84. package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts +16 -0
  85. package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts.map +1 -0
  86. package/dist/esm/components/ExecutionStatusCard/StatusIcon.js.map +1 -1
  87. package/dist/esm/components/ExecutionStatusCard/iconKey.js +1 -0
  88. package/dist/esm/components/ExecutionStatusCard/iconKey.js.map +1 -1
  89. package/dist/esm/components/Expansion/Expansion.js.map +1 -1
  90. package/dist/esm/components/Expansion/ExpansionTransition.js.map +1 -1
  91. package/dist/esm/components/FeeBreakdownTooltip.d.ts +13 -0
  92. package/dist/esm/components/FeeBreakdownTooltip.d.ts.map +1 -0
  93. package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
  94. package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
  95. package/dist/esm/components/Header/BackButton.js.map +1 -1
  96. package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
  97. package/dist/esm/components/Header/DisconnectIconButton.js.map +1 -1
  98. package/dist/esm/components/Header/HeaderTabs.js.map +1 -1
  99. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  100. package/dist/esm/components/Header/SettingsButton.js.map +1 -1
  101. package/dist/esm/components/Header/WalletHeader.js.map +1 -1
  102. package/dist/esm/components/Header/WalletMenu.js.map +1 -1
  103. package/dist/esm/components/IconCircle/IconCircle.d.ts +11 -0
  104. package/dist/esm/components/IconCircle/IconCircle.d.ts.map +1 -0
  105. package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
  106. package/dist/esm/components/IconCircle/statusIcons.d.ts +6 -0
  107. package/dist/esm/components/IconCircle/statusIcons.d.ts.map +1 -0
  108. package/dist/esm/components/IconTypography.d.ts +7 -0
  109. package/dist/esm/components/IconTypography.d.ts.map +1 -0
  110. package/dist/esm/components/LimitOrderSettings/LimitOrderSettings.js.map +1 -1
  111. package/dist/esm/components/LimitPriceCard/LimitPriceCard.js.map +1 -1
  112. package/dist/esm/components/LimitPriceCard/LimitPricePresets.js.map +1 -1
  113. package/dist/esm/components/ListItem/ListItemButton.d.ts +7 -0
  114. package/dist/esm/components/ListItem/ListItemButton.d.ts.map +1 -0
  115. package/dist/esm/components/ListItemButton.d.ts +7 -0
  116. package/dist/esm/components/ListItemButton.d.ts.map +1 -0
  117. package/dist/esm/components/Messages/AccountDeployedMessage.js.map +1 -1
  118. package/dist/esm/components/Messages/AccountNotDeployedMessage.js.map +1 -1
  119. package/dist/esm/components/Messages/AlertMessage.js.map +1 -1
  120. package/dist/esm/components/Messages/FundsSufficiencyMessage.js.map +1 -1
  121. package/dist/esm/components/Messages/GasRefuelMessage.js.map +1 -1
  122. package/dist/esm/components/Messages/GasSufficiencyMessage.js.map +1 -1
  123. package/dist/esm/components/Messages/MinFromAmountUSDMessage.js.map +1 -1
  124. package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.js.map +1 -1
  125. package/dist/esm/components/Messages/WarningMessages.d.ts +11 -0
  126. package/dist/esm/components/Messages/WarningMessages.d.ts.map +1 -0
  127. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  128. package/dist/esm/components/NotFound.js.map +1 -1
  129. package/dist/esm/components/PageContainer.d.ts +12 -0
  130. package/dist/esm/components/PageContainer.d.ts.map +1 -0
  131. package/dist/esm/components/PoweredBy/PoweredBy.d.ts +5 -0
  132. package/dist/esm/components/PoweredBy/PoweredBy.d.ts.map +1 -0
  133. package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
  134. package/dist/esm/components/ProgressToNextUpdate.d.ts +10 -0
  135. package/dist/esm/components/ProgressToNextUpdate.d.ts.map +1 -0
  136. package/dist/esm/components/ProgressToNextUpdate.js.map +1 -1
  137. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
  138. package/dist/esm/components/RouteCard/RouteCard.d.ts +7 -0
  139. package/dist/esm/components/RouteCard/RouteCard.d.ts.map +1 -0
  140. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  141. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  142. package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts +7 -0
  143. package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts.map +1 -0
  144. package/dist/esm/components/RouteCard/RouteCardSkeleton.js.map +1 -1
  145. package/dist/esm/components/RouteCard/RouteDetails.d.ts +10 -0
  146. package/dist/esm/components/RouteCard/RouteDetails.d.ts.map +1 -0
  147. package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
  148. package/dist/esm/components/RouteCard/RouteDetails.style.d.ts +12 -0
  149. package/dist/esm/components/RouteCard/RouteDetails.style.d.ts.map +1 -0
  150. package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts +5 -0
  151. package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts.map +1 -0
  152. package/dist/esm/components/RouteCard/RouteNotFoundCard.js.map +1 -1
  153. package/dist/esm/components/RouteCard/RouteProviderCard.js.map +1 -1
  154. package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
  155. package/dist/esm/components/RouteCard/RouteTokens.d.ts +11 -0
  156. package/dist/esm/components/RouteCard/RouteTokens.d.ts.map +1 -0
  157. package/dist/esm/components/RouteCard/RouteTokens.js +2 -2
  158. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  159. package/dist/esm/components/RouteCard/types.d.ts +14 -0
  160. package/dist/esm/components/RouteCard/types.d.ts.map +1 -0
  161. package/dist/esm/components/Routes/LimitOrderRoutes.js.map +1 -1
  162. package/dist/esm/components/Routes/Routes.js.map +1 -1
  163. package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
  164. package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
  165. package/dist/esm/components/Search/SearchInput.d.ts +17 -0
  166. package/dist/esm/components/Search/SearchInput.d.ts.map +1 -0
  167. package/dist/esm/components/Search/SearchInput.js.map +1 -1
  168. package/dist/esm/components/SelectChainAndToken.js.map +1 -1
  169. package/dist/esm/components/SelectTokenButton/SelectTokenButton.js.map +1 -1
  170. package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts +10 -0
  171. package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts.map +1 -0
  172. package/dist/esm/components/SendToWallet/SendToWalletButton.js +15 -6
  173. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  174. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
  175. package/dist/esm/components/SettingsPanel/SettingsPanel.js.map +1 -1
  176. package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts +1 -4
  177. package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts.map +1 -1
  178. package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
  179. package/dist/esm/components/Step/StepActions.js.map +1 -1
  180. package/dist/esm/components/StepActions/SentToWalletRow.d.ts +9 -0
  181. package/dist/esm/components/StepActions/SentToWalletRow.d.ts.map +1 -0
  182. package/dist/esm/components/StepActions/SentToWalletRow.js.map +1 -1
  183. package/dist/esm/components/StepActions/StepActionRow.js.map +1 -1
  184. package/dist/esm/components/StepActions/StepActionRow.style.d.ts +7 -0
  185. package/dist/esm/components/StepActions/StepActionRow.style.d.ts.map +1 -0
  186. package/dist/esm/components/StepActions/StepActionsList.d.ts +12 -0
  187. package/dist/esm/components/StepActions/StepActionsList.d.ts.map +1 -0
  188. package/dist/esm/components/StepActions/StepActionsList.js.map +1 -1
  189. package/dist/esm/components/StepActions/executionRows.d.ts +26 -0
  190. package/dist/esm/components/StepActions/executionRows.d.ts.map +1 -0
  191. package/dist/esm/components/SwapButton/SwapButton.js.map +1 -1
  192. package/dist/esm/components/TextFitter/TextFitter.js.map +1 -1
  193. package/dist/esm/components/Timer/StepStatusTimer.js.map +1 -1
  194. package/dist/esm/components/Token/Token.d.ts +17 -0
  195. package/dist/esm/components/Token/Token.d.ts.map +1 -0
  196. package/dist/esm/components/Token/Token.js.map +1 -1
  197. package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
  198. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  199. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  200. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  201. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  202. package/dist/esm/components/TokenList/TokenNotFound.d.ts +6 -0
  203. package/dist/esm/components/TokenList/TokenNotFound.d.ts.map +1 -0
  204. package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts +7 -0
  205. package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts.map +1 -0
  206. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  207. package/dist/esm/components/TokenList/types.d.ts +20 -0
  208. package/dist/esm/components/TokenList/types.d.ts.map +1 -0
  209. package/dist/esm/components/TokenList/useTokenSelect.d.ts +6 -0
  210. package/dist/esm/components/TokenList/useTokenSelect.d.ts.map +1 -0
  211. package/dist/esm/components/TokenPillButton/TokenPillButton.js.map +1 -1
  212. package/dist/esm/components/TokenRate/TokenRate.d.ts +10 -0
  213. package/dist/esm/components/TokenRate/TokenRate.d.ts.map +1 -0
  214. package/dist/esm/components/TokenRate/TokenRate.js.map +1 -1
  215. package/dist/esm/components/Tools/ToolItem.js.map +1 -1
  216. package/dist/esm/components/Tools/Tools.js.map +1 -1
  217. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +1 -0
  218. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  219. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js +9 -0
  220. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js.map +1 -1
  221. package/dist/esm/components/TransactionCard/TransactionCard.js.map +1 -1
  222. package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts +8 -0
  223. package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts.map +1 -0
  224. package/dist/esm/components/TransactionCard/TransactionCardSkeleton.js.map +1 -1
  225. package/dist/esm/config/constants.d.ts.map +1 -1
  226. package/dist/esm/config/version.d.ts +1 -1
  227. package/dist/esm/config/version.d.ts.map +1 -1
  228. package/dist/esm/config/version.js +1 -1
  229. package/dist/esm/config/version.js.map +1 -1
  230. package/dist/esm/hooks/useAccountsBalancesData.js +1 -14
  231. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  232. package/dist/esm/hooks/useAddressActivity.d.ts +11 -0
  233. package/dist/esm/hooks/useAddressActivity.d.ts.map +1 -0
  234. package/dist/esm/hooks/useAddressValidation.d.ts +28 -0
  235. package/dist/esm/hooks/useAddressValidation.d.ts.map +1 -0
  236. package/dist/esm/hooks/useAddressValidation.js +6 -1
  237. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  238. package/dist/esm/hooks/useAvailableChains.d.ts +12 -0
  239. package/dist/esm/hooks/useAvailableChains.d.ts.map +1 -0
  240. package/dist/esm/hooks/useChain.d.ts +10 -0
  241. package/dist/esm/hooks/useChain.d.ts.map +1 -0
  242. package/dist/esm/hooks/useContactSupport.d.ts +5 -0
  243. package/dist/esm/hooks/useContactSupport.d.ts.map +1 -0
  244. package/dist/esm/hooks/useDebouncedWatch.d.ts +6 -0
  245. package/dist/esm/hooks/useDebouncedWatch.d.ts.map +1 -0
  246. package/dist/esm/hooks/useDisplayedTokens.js +48 -0
  247. package/dist/esm/hooks/useDisplayedTokens.js.map +1 -0
  248. package/dist/esm/hooks/useExplorer.d.ts +14 -0
  249. package/dist/esm/hooks/useExplorer.d.ts.map +1 -0
  250. package/dist/esm/hooks/useHeader.d.ts +6 -0
  251. package/dist/esm/hooks/useHeader.d.ts.map +1 -0
  252. package/dist/esm/hooks/useListHeight.d.ts +12 -0
  253. package/dist/esm/hooks/useListHeight.d.ts.map +1 -0
  254. package/dist/esm/hooks/useListHeight.js +1 -0
  255. package/dist/esm/hooks/useListHeight.js.map +1 -1
  256. package/dist/esm/hooks/useNavigateBack.d.ts +5 -0
  257. package/dist/esm/hooks/useNavigateBack.d.ts.map +1 -0
  258. package/dist/esm/hooks/usePacedRouteExecution.js +1 -0
  259. package/dist/esm/hooks/usePacedRouteExecution.js.map +1 -1
  260. package/dist/esm/hooks/useRouteExecution.d.ts +18 -0
  261. package/dist/esm/hooks/useRouteExecution.d.ts.map +1 -0
  262. package/dist/esm/hooks/useRouteExecutionMessage.d.ts +10 -0
  263. package/dist/esm/hooks/useRouteExecutionMessage.d.ts.map +1 -0
  264. package/dist/esm/hooks/useRouteExecutionMessage.js +1 -0
  265. package/dist/esm/hooks/useRouteExecutionMessage.js.map +1 -1
  266. package/dist/esm/hooks/useRoutes.d.ts +32 -0
  267. package/dist/esm/hooks/useRoutes.d.ts.map +1 -0
  268. package/dist/esm/hooks/useRoutes.js +12 -8
  269. package/dist/esm/hooks/useRoutes.js.map +1 -1
  270. package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
  271. package/dist/esm/hooks/useToAddressRequirements.d.ts +16 -0
  272. package/dist/esm/hooks/useToAddressRequirements.d.ts.map +1 -0
  273. package/dist/esm/hooks/useToken.d.ts +9 -0
  274. package/dist/esm/hooks/useToken.d.ts.map +1 -0
  275. package/dist/esm/hooks/useTokenAddressBalance.d.ts +11 -0
  276. package/dist/esm/hooks/useTokenAddressBalance.d.ts.map +1 -0
  277. package/dist/esm/hooks/useTokenBalances.d.ts +14 -0
  278. package/dist/esm/hooks/useTokenBalances.d.ts.map +1 -0
  279. package/dist/esm/hooks/useTokenBalances.js +5 -45
  280. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  281. package/dist/esm/hooks/useTokenBalancesQueries.js +5 -3
  282. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
  283. package/dist/esm/hooks/useTokenList.d.ts +16 -0
  284. package/dist/esm/hooks/useTokenList.d.ts.map +1 -0
  285. package/dist/esm/hooks/useTokenList.js +31 -0
  286. package/dist/esm/hooks/useTokenList.js.map +1 -0
  287. package/dist/esm/hooks/useTokens.js.map +1 -1
  288. package/dist/esm/hooks/useTools.d.ts +8 -0
  289. package/dist/esm/hooks/useTools.d.ts.map +1 -0
  290. package/dist/esm/hooks/useTransactionDetails.js +1 -3
  291. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  292. package/dist/esm/hooks/useTransactionList.js +1 -0
  293. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  294. package/dist/esm/hooks/useWidgetChains.d.ts +0 -1
  295. package/dist/esm/hooks/useWidgetChains.d.ts.map +1 -1
  296. package/dist/esm/hooks/useWidgetEvents.d.ts +0 -1
  297. package/dist/esm/hooks/useWidgetEvents.d.ts.map +1 -1
  298. package/dist/esm/i18n/en.json +321 -0
  299. package/dist/esm/index.d.ts +1 -0
  300. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js +1 -0
  301. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  302. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
  303. package/dist/esm/pages/LanguagesPage.js.map +1 -1
  304. package/dist/esm/pages/MainPage/LimitPageContent.js.map +1 -1
  305. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  306. package/dist/esm/pages/MainPage/MainPageActions.js.map +1 -1
  307. package/dist/esm/pages/MainPage/MainWarningMessages.d.ts +10 -0
  308. package/dist/esm/pages/MainPage/MainWarningMessages.d.ts.map +1 -0
  309. package/dist/esm/pages/RoutePriorityPage.js.map +1 -1
  310. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  311. package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts +7 -0
  312. package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts.map +1 -0
  313. package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts +6 -0
  314. package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts.map +1 -0
  315. package/dist/esm/pages/SelectChainPage/types.d.ts +8 -0
  316. package/dist/esm/pages/SelectChainPage/types.d.ts.map +1 -0
  317. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  318. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts +10 -0
  319. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts.map +1 -0
  320. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  321. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  322. package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
  323. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
  324. package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
  325. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
  326. package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
  327. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  328. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  329. package/dist/esm/pages/SettingsPage/GasPriceSettings.js.map +1 -1
  330. package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
  331. package/dist/esm/pages/SettingsPage/ResetSettingsButton.js.map +1 -1
  332. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
  333. package/dist/esm/pages/SettingsPage/SettingsCard/BadgedValue.js.map +1 -1
  334. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
  335. package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
  336. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippagePage.js.map +1 -1
  337. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
  338. package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
  339. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  340. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts +9 -0
  341. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts.map +1 -0
  342. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
  343. package/dist/esm/pages/TransactionDetailsPage/ReceiptsCard.js.map +1 -1
  344. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
  345. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
  346. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
  347. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts +14 -0
  348. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts.map +1 -0
  349. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  350. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts +19 -0
  351. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts.map +1 -0
  352. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  353. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts +12 -0
  354. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts.map +1 -0
  355. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.js +1 -0
  356. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.js.map +1 -1
  357. package/dist/esm/pages/TransactionPage/RouteTracker.d.ts +11 -0
  358. package/dist/esm/pages/TransactionPage/RouteTracker.d.ts.map +1 -0
  359. package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts +6 -0
  360. package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts.map +1 -0
  361. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts +15 -0
  362. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts.map +1 -0
  363. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  364. package/dist/esm/pages/TransactionPage/TransactionContent.js +1 -0
  365. package/dist/esm/pages/TransactionPage/TransactionContent.js.map +1 -1
  366. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts +12 -0
  367. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts.map +1 -0
  368. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.js +1 -0
  369. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.js.map +1 -1
  370. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +1 -0
  371. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js.map +1 -1
  372. package/dist/esm/pages/TransactionPage/TransactionFailedButtons.js.map +1 -1
  373. package/dist/esm/pages/TransactionPage/TransactionPage.js +1 -0
  374. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  375. package/dist/esm/pages/TransactionPage/TransactionReview.js.map +1 -1
  376. package/dist/esm/pages/TransactionPage/types.d.ts +9 -0
  377. package/dist/esm/pages/TransactionPage/types.d.ts.map +1 -0
  378. package/dist/esm/pages/TransactionPage/utils.d.ts +6 -0
  379. package/dist/esm/pages/TransactionPage/utils.d.ts.map +1 -0
  380. package/dist/esm/providers/I18nProvider/I18nProvider.d.ts +5 -0
  381. package/dist/esm/providers/I18nProvider/I18nProvider.d.ts.map +1 -0
  382. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  383. package/dist/esm/providers/I18nProvider/types.d.ts +2 -3
  384. package/dist/esm/providers/I18nProvider/types.d.ts.map +1 -1
  385. package/dist/esm/providers/QueryClientProvider.d.ts +6 -0
  386. package/dist/esm/providers/QueryClientProvider.d.ts.map +1 -0
  387. package/dist/esm/providers/SDKClientProvider.d.ts +8 -0
  388. package/dist/esm/providers/SDKClientProvider.d.ts.map +1 -0
  389. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts +10 -0
  390. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts.map +1 -0
  391. package/dist/esm/providers/WalletProvider/WalletProvider.js +8 -3
  392. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  393. package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts +8 -0
  394. package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts.map +1 -0
  395. package/dist/esm/providers/WidgetProvider/types.d.ts +11 -0
  396. package/dist/esm/providers/WidgetProvider/types.d.ts.map +1 -0
  397. package/dist/esm/shared.d.ts +107 -0
  398. package/dist/esm/shared.js +105 -0
  399. package/dist/esm/stores/StoreProvider.d.ts +7 -0
  400. package/dist/esm/stores/StoreProvider.d.ts.map +1 -0
  401. package/dist/esm/stores/StoreProvider.js.map +1 -1
  402. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts +7 -0
  403. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts.map +1 -0
  404. package/dist/esm/stores/bookmarks/types.d.ts +0 -1
  405. package/dist/esm/stores/bookmarks/types.d.ts.map +1 -1
  406. package/dist/esm/stores/chains/ChainOrderStore.d.ts +8 -0
  407. package/dist/esm/stores/chains/ChainOrderStore.d.ts.map +1 -0
  408. package/dist/esm/stores/chains/types.d.ts +27 -0
  409. package/dist/esm/stores/chains/types.d.ts.map +1 -0
  410. package/dist/esm/stores/form/FormStore.js.map +1 -1
  411. package/dist/esm/stores/form/FormUpdater.js.map +1 -1
  412. package/dist/esm/stores/form/createFormStore.js +1 -0
  413. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  414. package/dist/esm/stores/form/types.d.ts +7 -7
  415. package/dist/esm/stores/form/types.d.ts.map +1 -1
  416. package/dist/esm/stores/form/types.js.map +1 -1
  417. package/dist/esm/stores/form/useFieldActions.d.ts +0 -1
  418. package/dist/esm/stores/form/useFieldActions.d.ts.map +1 -1
  419. package/dist/esm/stores/form/useFieldValues.d.ts +0 -1
  420. package/dist/esm/stores/form/useFieldValues.d.ts.map +1 -1
  421. package/dist/esm/stores/header/types.d.ts +20 -0
  422. package/dist/esm/stores/header/types.d.ts.map +1 -0
  423. package/dist/esm/stores/header/useHeaderStore.d.ts +8 -0
  424. package/dist/esm/stores/header/useHeaderStore.d.ts.map +1 -0
  425. package/dist/esm/stores/inputMode/useInputModeStore.d.ts +13 -0
  426. package/dist/esm/stores/inputMode/useInputModeStore.d.ts.map +1 -0
  427. package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js.map +1 -1
  428. package/dist/esm/stores/routes/RouteExecutionStore.d.ts +9 -0
  429. package/dist/esm/stores/routes/RouteExecutionStore.d.ts.map +1 -0
  430. package/dist/esm/stores/routes/createRouteExecutionStore.js +1 -0
  431. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  432. package/dist/esm/stores/routes/types.d.ts +24 -0
  433. package/dist/esm/stores/routes/types.d.ts.map +1 -0
  434. package/dist/esm/stores/routes/types.js +14 -0
  435. package/dist/esm/stores/routes/types.js.map +1 -0
  436. package/dist/esm/stores/routes/useRouteExecutionIndicator.js +1 -0
  437. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  438. package/dist/esm/stores/routes/utils.d.ts +9 -0
  439. package/dist/esm/stores/routes/utils.d.ts.map +1 -0
  440. package/dist/esm/stores/settings/SettingsStore.d.ts +8 -0
  441. package/dist/esm/stores/settings/SettingsStore.d.ts.map +1 -0
  442. package/dist/esm/stores/settings/types.d.ts +5 -2
  443. package/dist/esm/stores/settings/types.d.ts.map +1 -1
  444. package/dist/esm/stores/types.d.ts +9 -0
  445. package/dist/esm/stores/types.d.ts.map +1 -0
  446. package/dist/esm/themes/azureLight.d.ts +0 -1
  447. package/dist/esm/themes/azureLight.d.ts.map +1 -1
  448. package/dist/esm/themes/createTheme.d.ts +0 -1
  449. package/dist/esm/themes/createTheme.d.ts.map +1 -1
  450. package/dist/esm/themes/jumper.d.ts +0 -1
  451. package/dist/esm/themes/jumper.d.ts.map +1 -1
  452. package/dist/esm/themes/palettes.d.ts.map +1 -1
  453. package/dist/esm/themes/types.d.ts +0 -1
  454. package/dist/esm/themes/types.d.ts.map +1 -1
  455. package/dist/esm/themes/watermelonLight.d.ts +0 -1
  456. package/dist/esm/themes/watermelonLight.d.ts.map +1 -1
  457. package/dist/esm/themes/windows95.d.ts +0 -1
  458. package/dist/esm/themes/windows95.d.ts.map +1 -1
  459. package/dist/esm/types/events.d.ts +4 -3
  460. package/dist/esm/types/events.d.ts.map +1 -1
  461. package/dist/esm/types/token.d.ts +1 -2
  462. package/dist/esm/types/token.d.ts.map +1 -1
  463. package/dist/esm/types/widget.d.ts +72 -73
  464. package/dist/esm/types/widget.d.ts.map +1 -1
  465. package/dist/esm/utils/compactNumberFormatter.d.ts +8 -8
  466. package/dist/esm/utils/compactNumberFormatter.d.ts.map +1 -1
  467. package/dist/esm/utils/converters.d.ts +7 -0
  468. package/dist/esm/utils/converters.d.ts.map +1 -0
  469. package/dist/esm/utils/currencyExtendedFormatter.d.ts.map +1 -1
  470. package/dist/esm/utils/elements.d.ts +11 -0
  471. package/dist/esm/utils/elements.d.ts.map +1 -0
  472. package/dist/esm/utils/elements.js +8 -1
  473. package/dist/esm/utils/elements.js.map +1 -1
  474. package/dist/esm/utils/enum.d.ts +5 -0
  475. package/dist/esm/utils/enum.d.ts.map +1 -0
  476. package/dist/esm/utils/fees.d.ts +17 -0
  477. package/dist/esm/utils/fees.d.ts.map +1 -0
  478. package/dist/esm/utils/format.d.ts +14 -14
  479. package/dist/esm/utils/format.d.ts.map +1 -1
  480. package/dist/esm/utils/getPriceImpact.d.ts +1 -7
  481. package/dist/esm/utils/getPriceImpact.d.ts.map +1 -1
  482. package/dist/esm/utils/input.d.ts +5 -0
  483. package/dist/esm/utils/input.d.ts.map +1 -0
  484. package/dist/esm/utils/navigationRoutes.d.ts.map +1 -1
  485. package/dist/esm/utils/percentFormatter.d.ts +5 -5
  486. package/dist/esm/utils/percentFormatter.d.ts.map +1 -1
  487. package/dist/esm/utils/tokenList.js +3 -6
  488. package/dist/esm/utils/tokenList.js.map +1 -1
  489. package/dist/esm/utils/wallet.d.ts +5 -0
  490. package/dist/esm/utils/wallet.d.ts.map +1 -0
  491. package/package.json +29 -21
  492. package/src/components/RouteCard/RouteTokens.tsx +3 -2
  493. package/src/components/SendToWallet/SendToWalletButton.tsx +27 -5
  494. package/src/components/TransactionCard/ActiveTransactionCard.style.tsx +11 -0
  495. package/src/config/version.ts +1 -1
  496. package/src/hooks/useAccountsBalancesData.ts +4 -31
  497. package/src/hooks/useDisplayedTokens.ts +70 -0
  498. package/src/hooks/useListHeight.ts +4 -0
  499. package/src/hooks/useRoutes.ts +360 -325
  500. package/src/hooks/useTokenBalances.ts +8 -53
  501. package/src/hooks/useTokenBalancesQueries.ts +12 -4
  502. package/src/hooks/useTokenList.ts +59 -0
  503. package/src/hooks/useTransactionDetails.ts +1 -3
  504. package/src/providers/WalletProvider/WalletProvider.tsx +15 -3
  505. package/src/shared.ts +191 -0
  506. package/src/stores/form/createFormStore.ts +1 -0
  507. package/src/stores/form/types.ts +1 -0
  508. package/src/utils/tokenList.ts +4 -12
  509. package/dist/esm/hooks/useFilteredByTokenBalances.js +0 -74
  510. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +0 -1
  511. package/src/hooks/useFilteredByTokenBalances.ts +0 -145
@@ -0,0 +1,21 @@
1
+ import { ExecutionRow } from "../StepActions/executionRows.js";
2
+ import { JSX, ReactNode } from "react";
3
+ //#region src/components/ExecutionStatusCard/ExecutionStatusCard.d.ts
4
+ interface ExecutionStatusCardProps {
5
+ /** Title for the current phase. `undefined` until an action has a message. */
6
+ title: string | undefined;
7
+ /** Subtitle under the title. `undefined` when the action has no description. */
8
+ description: string | undefined;
9
+ /** Completed step rows for the animated checklist. */
10
+ rows: ExecutionRow[];
11
+ /** The top icon: a `StatusIcon`, or a contract component for the custom variant. */
12
+ iconSlot: ReactNode;
13
+ /** Footer card: `ExecutionDoneCard` when done, otherwise `RouteTokens`. */
14
+ footerSlot: ReactNode;
15
+ /** Partner/VC component, shown after the icon/title when done. */
16
+ vcSlot?: ReactNode;
17
+ }
18
+ declare function ExecutionStatusCard({ title, description, rows, iconSlot, footerSlot, vcSlot }: ExecutionStatusCardProps): JSX.Element;
19
+ //#endregion
20
+ export { ExecutionStatusCard };
21
+ //# sourceMappingURL=ExecutionStatusCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionStatusCard.d.ts","names":[],"sources":["../../../../src/components/ExecutionStatusCard/ExecutionStatusCard.tsx"],"mappings":";;;UAWU;;EAER;;EAEA;;EAEA,MAAM;;EAEN,UAAU;;EAEV,YAAY;;EAEZ,SAAS;;iBA6EK,sBACd,OACA,aACA,MACA,UACA,YACA,UACC,2BAA2B,IAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionStatusCard.js","names":["Card"],"sources":["../../../../src/components/ExecutionStatusCard/ExecutionStatusCard.tsx"],"sourcesContent":["import { Box, Typography } from '@mui/material'\nimport { stagger } from 'motion'\nimport type { Transition, Variants } from 'motion/react'\nimport { AnimatePresence } from 'motion/react'\nimport * as m from 'motion/react-m'\nimport type { JSX, ReactNode } from 'react'\nimport { Card } from '../Card/Card.js'\nimport type { ExecutionRow } from '../StepActions/executionRows.js'\nimport { ExecutionChecklist } from './ExecutionChecklist.js'\nimport { StaggeredRevealTypography } from './StaggeredRevealTypography.js'\n\ninterface ExecutionStatusCardProps {\n /** Title for the current phase. `undefined` until an action has a message. */\n title: string | undefined\n /** Subtitle under the title. `undefined` when the action has no description. */\n description: string | undefined\n /** Completed step rows for the animated checklist. */\n rows: ExecutionRow[]\n /** The top icon: a `StatusIcon`, or a contract component for the custom variant. */\n iconSlot: ReactNode\n /** Footer card: `ExecutionDoneCard` when done, otherwise `RouteTokens`. */\n footerSlot: ReactNode\n /** Partner/VC component, shown after the icon/title when done. */\n vcSlot?: ReactNode\n}\n\nconst containerVariants: Variants = {\n hidden: { opacity: 0, scale: 0.97 },\n visible: {\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.3,\n ease: [0.22, 1, 0.36, 1],\n delayChildren: stagger(0.06),\n },\n },\n}\n\nconst heroColumnVariants: Variants = {\n hidden: {},\n visible: { transition: { delayChildren: stagger(0.04) } },\n}\n\nconst heroItemVariants: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: { duration: 0.3, ease: [0.22, 1, 0.36, 1] },\n },\n}\n\nconst titleVariants: Variants = {\n hidden: { opacity: 0, y: 10, filter: 'blur(2px)' },\n visible: {\n opacity: 1,\n y: 0,\n filter: 'blur(0px)',\n transition: { duration: 0.3, ease: [0.19, 1, 0.22, 1] },\n },\n exit: {\n opacity: 0,\n y: -10,\n filter: 'blur(2px)',\n transition: { duration: 0.05, ease: [0.19, 1, 0.22, 1] },\n },\n}\n\n/** No enter animation — the per-word stagger reveals it. Exit timing matches the title. */\nconst textContainerVariants: Variants = {\n hidden: {\n opacity: 0,\n transition: { duration: 0.05, ease: [0.215, 0.61, 0.355, 1] },\n },\n visible: { opacity: 1, transition: { duration: 0 } },\n}\n\n/**\n * Animate height explicitly. A plain `layout` animation sets `height: auto`\n * immediately, so the card background would jump to full height before the\n * content appears. `layout` stays only to animate the checklist's position\n * when the hero column above it resizes.\n */\nconst checklistVariants: Variants = {\n hidden: {\n height: 0,\n opacity: 0,\n transition: { duration: 0.3, ease: [0.22, 1, 0.36, 1] },\n },\n visible: {\n height: 'auto',\n opacity: 1,\n transition: { duration: 0.3, ease: [0.22, 1, 0.36, 1] },\n },\n}\n\nconst layoutTransition: Transition = { duration: 0.3, ease: [0.19, 1, 0.22, 1] }\n\nconst WORD_STAGGER_DELAY = 0.08\n\nexport function ExecutionStatusCard({\n title,\n description,\n rows,\n iconSlot,\n footerSlot,\n vcSlot,\n}: ExecutionStatusCardProps): JSX.Element {\n const hasRows = rows.length > 0\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {/*\n * Keep Card non-animated. Animating its layout would combine with the\n * rows' layout animations and make the rows jump. Its height follows\n * the checklist through normal layout instead.\n */}\n <Card type=\"default\" indented>\n <m.div\n variants={containerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n style={{ width: '100%', transformOrigin: 'top center' }}\n >\n <Box\n component={m.div}\n layout\n transition={{ layout: layoutTransition }}\n variants={heroColumnVariants}\n sx={{\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n boxSizing: 'border-box',\n }}\n >\n <m.div\n layout\n variants={heroItemVariants}\n style={{\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {iconSlot}\n </m.div>\n\n {title && (\n <m.div\n layout\n variants={heroItemVariants}\n style={{ width: '100%', paddingTop: 12 }}\n >\n <AnimatePresence initial={false} mode=\"wait\">\n <m.div\n key={title}\n variants={titleVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n style={{ width: '100%' }}\n >\n <Typography\n sx={{\n fontSize: 16,\n fontWeight: 600,\n lineHeight: 1.4,\n textAlign: 'center',\n }}\n >\n {title}\n </Typography>\n </m.div>\n </AnimatePresence>\n </m.div>\n )}\n\n {/* mode=\"popLayout\": old description leaves layout at once so the column reflows */}\n <AnimatePresence initial={false} mode=\"popLayout\">\n {description && (\n <m.div\n key={description}\n variants={textContainerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n style={{ width: '100%', paddingTop: 4 }}\n >\n <StaggeredRevealTypography\n text={description}\n delay={WORD_STAGGER_DELAY}\n sx={{\n fontSize: 14,\n fontWeight: 500,\n color: 'text.secondary',\n textAlign: 'center',\n }}\n />\n </m.div>\n )}\n </AnimatePresence>\n\n {vcSlot && (\n <m.div\n layout\n variants={heroItemVariants}\n style={{ width: '100%' }}\n >\n {vcSlot}\n </m.div>\n )}\n </Box>\n\n <AnimatePresence initial={false}>\n {hasRows && (\n <m.div\n key=\"checklist\"\n layout\n transition={{ layout: layoutTransition }}\n variants={checklistVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n style={{ width: '100%' }}\n >\n <ExecutionChecklist rows={rows} />\n </m.div>\n )}\n </AnimatePresence>\n </m.div>\n </Card>\n\n {/* layout makes the footer shift smoothly when the card above grows */}\n <m.div layout transition={{ layout: layoutTransition }}>\n {footerSlot}\n </m.div>\n </Box>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ExecutionStatusCard.js","names":["Card"],"sources":["../../../../src/components/ExecutionStatusCard/ExecutionStatusCard.tsx"],"sourcesContent":["import { Box, Typography } from '@mui/material'\nimport { stagger } from 'motion'\nimport type { Transition, Variants } from 'motion/react'\nimport { AnimatePresence } from 'motion/react'\nimport * as m from 'motion/react-m'\nimport type { JSX, ReactNode } from 'react'\nimport { Card } from '../Card/Card.js'\nimport type { ExecutionRow } from '../StepActions/executionRows.js'\nimport { ExecutionChecklist } from './ExecutionChecklist.js'\nimport { StaggeredRevealTypography } from './StaggeredRevealTypography.js'\n\ninterface ExecutionStatusCardProps {\n /** Title for the current phase. `undefined` until an action has a message. */\n title: string | undefined\n /** Subtitle under the title. `undefined` when the action has no description. */\n description: string | undefined\n /** Completed step rows for the animated checklist. */\n rows: ExecutionRow[]\n /** The top icon: a `StatusIcon`, or a contract component for the custom variant. */\n iconSlot: ReactNode\n /** Footer card: `ExecutionDoneCard` when done, otherwise `RouteTokens`. */\n footerSlot: ReactNode\n /** Partner/VC component, shown after the icon/title when done. */\n vcSlot?: ReactNode\n}\n\nconst containerVariants: Variants = {\n hidden: { opacity: 0, scale: 0.97 },\n visible: {\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.3,\n ease: [0.22, 1, 0.36, 1],\n delayChildren: stagger(0.06),\n },\n },\n}\n\nconst heroColumnVariants: Variants = {\n hidden: {},\n visible: { transition: { delayChildren: stagger(0.04) } },\n}\n\nconst heroItemVariants: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: { duration: 0.3, ease: [0.22, 1, 0.36, 1] },\n },\n}\n\nconst titleVariants: Variants = {\n hidden: { opacity: 0, y: 10, filter: 'blur(2px)' },\n visible: {\n opacity: 1,\n y: 0,\n filter: 'blur(0px)',\n transition: { duration: 0.3, ease: [0.19, 1, 0.22, 1] },\n },\n exit: {\n opacity: 0,\n y: -10,\n filter: 'blur(2px)',\n transition: { duration: 0.05, ease: [0.19, 1, 0.22, 1] },\n },\n}\n\n/** No enter animation — the per-word stagger reveals it. Exit timing matches the title. */\nconst textContainerVariants: Variants = {\n hidden: {\n opacity: 0,\n transition: { duration: 0.05, ease: [0.215, 0.61, 0.355, 1] },\n },\n visible: { opacity: 1, transition: { duration: 0 } },\n}\n\n/**\n * Animate height explicitly. A plain `layout` animation sets `height: auto`\n * immediately, so the card background would jump to full height before the\n * content appears. `layout` stays only to animate the checklist's position\n * when the hero column above it resizes.\n */\nconst checklistVariants: Variants = {\n hidden: {\n height: 0,\n opacity: 0,\n transition: { duration: 0.3, ease: [0.22, 1, 0.36, 1] },\n },\n visible: {\n height: 'auto',\n opacity: 1,\n transition: { duration: 0.3, ease: [0.22, 1, 0.36, 1] },\n },\n}\n\nconst layoutTransition: Transition = { duration: 0.3, ease: [0.19, 1, 0.22, 1] }\n\nconst WORD_STAGGER_DELAY = 0.08\n\nexport function ExecutionStatusCard({\n title,\n description,\n rows,\n iconSlot,\n footerSlot,\n vcSlot,\n}: ExecutionStatusCardProps): JSX.Element {\n const hasRows = rows.length > 0\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {/*\n * Keep Card non-animated. Animating its layout would combine with the\n * rows' layout animations and make the rows jump. Its height follows\n * the checklist through normal layout instead.\n */}\n <Card type=\"default\" indented>\n <m.div\n variants={containerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n style={{ width: '100%', transformOrigin: 'top center' }}\n >\n <Box\n component={m.div}\n layout\n transition={{ layout: layoutTransition }}\n variants={heroColumnVariants}\n sx={{\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n boxSizing: 'border-box',\n }}\n >\n <m.div\n layout\n variants={heroItemVariants}\n style={{\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {iconSlot}\n </m.div>\n\n {title && (\n <m.div\n layout\n variants={heroItemVariants}\n style={{ width: '100%', paddingTop: 12 }}\n >\n <AnimatePresence initial={false} mode=\"wait\">\n <m.div\n key={title}\n variants={titleVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n style={{ width: '100%' }}\n >\n <Typography\n sx={{\n fontSize: 16,\n fontWeight: 600,\n lineHeight: 1.4,\n textAlign: 'center',\n }}\n >\n {title}\n </Typography>\n </m.div>\n </AnimatePresence>\n </m.div>\n )}\n\n {/* mode=\"popLayout\": old description leaves layout at once so the column reflows */}\n <AnimatePresence initial={false} mode=\"popLayout\">\n {description && (\n <m.div\n key={description}\n variants={textContainerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n style={{ width: '100%', paddingTop: 4 }}\n >\n <StaggeredRevealTypography\n text={description}\n delay={WORD_STAGGER_DELAY}\n sx={{\n fontSize: 14,\n fontWeight: 500,\n color: 'text.secondary',\n textAlign: 'center',\n }}\n />\n </m.div>\n )}\n </AnimatePresence>\n\n {vcSlot && (\n <m.div\n layout\n variants={heroItemVariants}\n style={{ width: '100%' }}\n >\n {vcSlot}\n </m.div>\n )}\n </Box>\n\n <AnimatePresence initial={false}>\n {hasRows && (\n <m.div\n key=\"checklist\"\n layout\n transition={{ layout: layoutTransition }}\n variants={checklistVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n style={{ width: '100%' }}\n >\n <ExecutionChecklist rows={rows} />\n </m.div>\n )}\n </AnimatePresence>\n </m.div>\n </Card>\n\n {/* layout makes the footer shift smoothly when the card above grows */}\n <m.div layout transition={{ layout: layoutTransition }}>\n {footerSlot}\n </m.div>\n </Box>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StaggeredRevealTypography.js","names":[],"sources":["../../../../src/components/ExecutionStatusCard/StaggeredRevealTypography.tsx"],"sourcesContent":["import { Typography, type TypographyProps } from '@mui/material'\nimport { useReducedMotion } from 'motion/react'\nimport * as m from 'motion/react-m'\nimport type { JSX } from 'react'\nimport { Fragment } from 'react'\n\nconst WORD_DURATION = 0.3\nconst WORD_BOUNCE = 0\nconst WORD_ENTER_Y = 4\n\nexport type StaggeredRevealTypographyProps = {\n text: string\n /** Seconds before the first word begins animating. */\n delay?: number\n} & Omit<TypographyProps, 'children'>\n\n/**\n * Reveals text with a word-level stagger animation on mount.\n * Callers should remount via `key={text}` when the text changes.\n */\nexport function StaggeredRevealTypography({\n text,\n delay,\n ...props\n}: StaggeredRevealTypographyProps): JSX.Element {\n const reduceMotion = useReducedMotion()\n\n if (reduceMotion) {\n return <Typography {...props}>{text}</Typography>\n }\n\n const words = text.split(' ')\n const perWordDuration = words.length > 1 ? WORD_DURATION * 0.6 : WORD_DURATION\n const staggerInterval =\n (WORD_DURATION - perWordDuration) / Math.max(1, words.length - 1)\n\n return (\n <Typography {...props}>\n {words.map((word, i) => (\n <Fragment key={i}>\n {i > 0 && ' '}\n <m.span\n initial={{ opacity: 0, y: WORD_ENTER_Y }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n type: 'spring',\n visualDuration: perWordDuration,\n bounce: WORD_BOUNCE,\n delay: (delay ?? 0) + i * staggerInterval,\n }}\n style={{ display: 'inline-block' }}\n >\n {word}\n </m.span>\n </Fragment>\n ))}\n </Typography>\n )\n}\n"],"mappings":";;;;;;AAMA,MAAM,gBAAgB;AACtB,MAAM,cAAc;AACpB,MAAM,eAAe;;;;;AAYrB,SAAgB,0BAA0B,EACxC,MACA,OACA,GAAG,SAC2C;CAG9C,IAFqB,iBAEN,GACb,OAAO,oBAAC,YAAD;EAAY,GAAI;YAAQ;CAAiB,CAAA;CAGlD,MAAM,QAAQ,KAAK,MAAM,GAAG;CAC5B,MAAM,kBAAkB,MAAM,SAAS,IAAI,gBAAgB,KAAM;CACjE,MAAM,mBACH,gBAAgB,mBAAmB,KAAK,IAAI,GAAG,MAAM,SAAS,CAAC;CAElE,OACE,oBAAC,YAAD;EAAY,GAAI;YACb,MAAM,KAAK,MAAM,MAChB,qBAAC,UAAD,EAAA,UAAA,CACG,IAAI,KAAK,KACV,oBAAC,EAAE,MAAH;GACE,SAAS;IAAE,SAAS;IAAG,GAAG;GAAa;GACvC,SAAS;IAAE,SAAS;IAAG,GAAG;GAAE;GAC5B,YAAY;IACV,MAAM;IACN,gBAAgB;IAChB,QAAQ;IACR,QAAQ,SAAS,KAAK,IAAI;GAC5B;GACA,OAAO,EAAE,SAAS,eAAe;aAEhC;EACK,CAAA,CACA,EAAA,GAfK,CAeL,CACX;CACS,CAAA;AAEhB"}
1
+ {"version":3,"file":"StaggeredRevealTypography.js","names":[],"sources":["../../../../src/components/ExecutionStatusCard/StaggeredRevealTypography.tsx"],"sourcesContent":["import { Typography, type TypographyProps } from '@mui/material'\nimport { useReducedMotion } from 'motion/react'\nimport * as m from 'motion/react-m'\nimport type { JSX } from 'react'\nimport { Fragment } from 'react'\n\nconst WORD_DURATION = 0.3\nconst WORD_BOUNCE = 0\nconst WORD_ENTER_Y = 4\n\nexport type StaggeredRevealTypographyProps = {\n text: string\n /** Seconds before the first word begins animating. */\n delay?: number\n} & Omit<TypographyProps, 'children'>\n\n/**\n * Reveals text with a word-level stagger animation on mount.\n * Callers should remount via `key={text}` when the text changes.\n */\nexport function StaggeredRevealTypography({\n text,\n delay,\n ...props\n}: StaggeredRevealTypographyProps): JSX.Element {\n const reduceMotion = useReducedMotion()\n\n if (reduceMotion) {\n return <Typography {...props}>{text}</Typography>\n }\n\n const words = text.split(' ')\n const perWordDuration = words.length > 1 ? WORD_DURATION * 0.6 : WORD_DURATION\n const staggerInterval =\n (WORD_DURATION - perWordDuration) / Math.max(1, words.length - 1)\n\n return (\n <Typography {...props}>\n {words.map((word, i) => (\n <Fragment key={i}>\n {i > 0 && ' '}\n <m.span\n initial={{ opacity: 0, y: WORD_ENTER_Y }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n type: 'spring',\n visualDuration: perWordDuration,\n bounce: WORD_BOUNCE,\n delay: (delay ?? 0) + i * staggerInterval,\n }}\n style={{ display: 'inline-block' }}\n >\n {word}\n </m.span>\n </Fragment>\n ))}\n </Typography>\n )\n}\n"],"mappings":";;;;;;AAMA,MAAM,gBAAgB;AACtB,MAAM,cAAc;AACpB,MAAM,eAAe;;;;;AAYrB,SAAgB,0BAA0B,EACxC,MACA,OACA,GAAG,SAC2C;CAG9C,IAFqB,iBAEN,GACb,OAAO,oBAAC,YAAD;EAAY,GAAI;EAAQ,UAAA;CAAiB,CAAA;CAGlD,MAAM,QAAQ,KAAK,MAAM,GAAG;CAC5B,MAAM,kBAAkB,MAAM,SAAS,IAAI,gBAAgB,KAAM;CACjE,MAAM,mBACH,gBAAgB,mBAAmB,KAAK,IAAI,GAAG,MAAM,SAAS,CAAC;CAElE,OACE,oBAAC,YAAD;EAAY,GAAI;EACb,UAAA,MAAM,KAAK,MAAM,MAChB,qBAAC,UAAD,EAAA,UAAA,CACG,IAAI,KAAK,KACV,oBAAC,EAAE,MAAH;GACE,SAAS;IAAE,SAAS;IAAG,GAAG;GAAa;GACvC,SAAS;IAAE,SAAS;IAAG,GAAG;GAAE;GAC5B,YAAY;IACV,MAAM;IACN,gBAAgB;IAChB,QAAQ;IACR,QAAQ,SAAS,KAAK,IAAI;GAC5B;GACA,OAAO,EAAE,SAAS,eAAe;GAEhC,UAAA;EACK,CAAA,CACA,EAAA,GAfK,CAeL,CACX;CACS,CAAA;AAEhB"}
@@ -0,0 +1,16 @@
1
+ import { RouteExecutionStatus } from "../../stores/routes/types.js";
2
+ import { RouteExtended } from "@lifi/sdk";
3
+ import { JSX } from "react";
4
+ //#region src/components/ExecutionStatusCard/StatusIcon.d.ts
5
+ interface StatusIconProps {
6
+ route: RouteExtended;
7
+ status: RouteExecutionStatus;
8
+ }
9
+ /**
10
+ * The animated status icon. Each state animates in its own way; they all
11
+ * animate out the same way.
12
+ */
13
+ declare function StatusIcon({ route, status }: StatusIconProps): JSX.Element;
14
+ //#endregion
15
+ export { StatusIcon };
16
+ //# sourceMappingURL=StatusIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusIcon.d.ts","names":[],"sources":["../../../../src/components/ExecutionStatusCard/StatusIcon.tsx"],"mappings":";;;;UA0DU;EACR,OAAO;EACP,QAAQ;;;;;;iBAOM,aAAa,OAAO,UAAU,kBAAkB,IAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"StatusIcon.js","names":[],"sources":["../../../../src/components/ExecutionStatusCard/StatusIcon.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport type { Transition, Variants } from 'motion/react'\nimport { AnimatePresence } from 'motion/react'\nimport * as m from 'motion/react-m'\nimport type { JSX } from 'react'\nimport type { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { IconCircle } from '../IconCircle/IconCircle.js'\nimport { TimerRing } from '../Timer/StepStatusTimer.js'\nimport type { ExecutionIconKey } from './iconKey.js'\nimport { resolveExecutionIconKey } from './iconKey.js'\nimport { StatusIconContainer } from './StatusIcon.style.js'\n\nconst ICON_EXIT = { duration: 0.08, ease: [0.22, 1, 0.36, 1] as const }\n\nconst iconEnterConfig: Record<\n ExecutionIconKey,\n { initialScale: number; transition: Transition }\n> = {\n success: {\n initialScale: 0.6,\n transition: { type: 'spring', visualDuration: 0.3, bounce: 0.18 },\n },\n warning: {\n initialScale: 0.75,\n transition: { type: 'spring', visualDuration: 0.27, bounce: 0.1 },\n },\n error: {\n initialScale: 0.75,\n transition: { duration: 0.18, ease: [0.22, 1, 0.36, 1] },\n },\n info: {\n initialScale: 0.8,\n transition: { duration: 0.2, ease: [0.22, 1, 0.36, 1] },\n },\n timer: {\n initialScale: 0.85,\n transition: { duration: 0.22, ease: [0.22, 1, 0.36, 1] },\n },\n}\n\nconst iconVariants: Variants = {\n hidden: (key: ExecutionIconKey) => ({\n opacity: 0,\n scale: iconEnterConfig[key].initialScale,\n }),\n visible: (key: ExecutionIconKey) => ({\n opacity: 1,\n scale: 1,\n transition: iconEnterConfig[key].transition,\n }),\n exit: {\n opacity: 0,\n scale: 0.8,\n filter: 'blur(4px)',\n transition: { duration: ICON_EXIT.duration, ease: ICON_EXIT.ease },\n },\n}\n\ninterface StatusIconProps {\n route: RouteExtended\n status: RouteExecutionStatus\n}\n\n/**\n * The animated status icon. Each state animates in its own way; they all\n * animate out the same way.\n */\nexport function StatusIcon({ route, status }: StatusIconProps): JSX.Element {\n const iconKey = resolveExecutionIconKey(route, status)\n const step = route.steps.at(-1)\n\n return (\n <StatusIconContainer>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <m.div\n key={iconKey}\n custom={iconKey}\n variants={iconVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {iconKey === 'timer' ? (\n <TimerRing step={step} />\n ) : (\n <IconCircle status={iconKey} />\n )}\n </m.div>\n </AnimatePresence>\n </StatusIconContainer>\n )\n}\n"],"mappings":";;;;;;;;AAYA,MAAM,YAAY;CAAE,UAAU;CAAM,MAAM;EAAC;EAAM;EAAG;EAAM;CAAC;AAAW;AAEtE,MAAM,kBAGF;CACF,SAAS;EACP,cAAc;EACd,YAAY;GAAE,MAAM;GAAU,gBAAgB;GAAK,QAAQ;EAAK;CAClE;CACA,SAAS;EACP,cAAc;EACd,YAAY;GAAE,MAAM;GAAU,gBAAgB;GAAM,QAAQ;EAAI;CAClE;CACA,OAAO;EACL,cAAc;EACd,YAAY;GAAE,UAAU;GAAM,MAAM;IAAC;IAAM;IAAG;IAAM;GAAC;EAAE;CACzD;CACA,MAAM;EACJ,cAAc;EACd,YAAY;GAAE,UAAU;GAAK,MAAM;IAAC;IAAM;IAAG;IAAM;GAAC;EAAE;CACxD;CACA,OAAO;EACL,cAAc;EACd,YAAY;GAAE,UAAU;GAAM,MAAM;IAAC;IAAM;IAAG;IAAM;GAAC;EAAE;CACzD;AACF;AAEA,MAAM,eAAyB;CAC7B,SAAS,SAA2B;EAClC,SAAS;EACT,OAAO,gBAAgB,IAAI,CAAC;CAC9B;CACA,UAAU,SAA2B;EACnC,SAAS;EACT,OAAO;EACP,YAAY,gBAAgB,IAAI,CAAC;CACnC;CACA,MAAM;EACJ,SAAS;EACT,OAAO;EACP,QAAQ;EACR,YAAY;GAAE,UAAU,UAAU;GAAU,MAAM,UAAU;EAAK;CACnE;AACF;;;;;AAWA,SAAgB,WAAW,EAAE,OAAO,UAAwC;CAC1E,MAAM,UAAU,wBAAwB,OAAO,MAAM;CACrD,MAAM,OAAO,MAAM,MAAM,GAAG,EAAE;CAE9B,OACE,oBAAC,qBAAD,EAAA,UACE,oBAAC,iBAAD;EAAiB,MAAK;EAAY,SAAS;YACzC,oBAAC,EAAE,KAAH;GAEE,QAAQ;GACR,UAAU;GACV,SAAQ;GACR,SAAQ;GACR,MAAK;GACL,OAAO;IACL,UAAU;IACV,OAAO;IACP,SAAS;IACT,YAAY;IACZ,gBAAgB;GAClB;aAEC,YAAY,UACX,oBAAC,WAAD,EAAiB,KAAO,CAAA,IAExB,oBAAC,YAAD,EAAY,QAAQ,QAAU,CAAA;EAE3B,GAnBA,OAmBA;CACQ,CAAA,EACE,CAAA;AAEzB"}
1
+ {"version":3,"file":"StatusIcon.js","names":[],"sources":["../../../../src/components/ExecutionStatusCard/StatusIcon.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport type { Transition, Variants } from 'motion/react'\nimport { AnimatePresence } from 'motion/react'\nimport * as m from 'motion/react-m'\nimport type { JSX } from 'react'\nimport type { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { IconCircle } from '../IconCircle/IconCircle.js'\nimport { TimerRing } from '../Timer/StepStatusTimer.js'\nimport type { ExecutionIconKey } from './iconKey.js'\nimport { resolveExecutionIconKey } from './iconKey.js'\nimport { StatusIconContainer } from './StatusIcon.style.js'\n\nconst ICON_EXIT = { duration: 0.08, ease: [0.22, 1, 0.36, 1] as const }\n\nconst iconEnterConfig: Record<\n ExecutionIconKey,\n { initialScale: number; transition: Transition }\n> = {\n success: {\n initialScale: 0.6,\n transition: { type: 'spring', visualDuration: 0.3, bounce: 0.18 },\n },\n warning: {\n initialScale: 0.75,\n transition: { type: 'spring', visualDuration: 0.27, bounce: 0.1 },\n },\n error: {\n initialScale: 0.75,\n transition: { duration: 0.18, ease: [0.22, 1, 0.36, 1] },\n },\n info: {\n initialScale: 0.8,\n transition: { duration: 0.2, ease: [0.22, 1, 0.36, 1] },\n },\n timer: {\n initialScale: 0.85,\n transition: { duration: 0.22, ease: [0.22, 1, 0.36, 1] },\n },\n}\n\nconst iconVariants: Variants = {\n hidden: (key: ExecutionIconKey) => ({\n opacity: 0,\n scale: iconEnterConfig[key].initialScale,\n }),\n visible: (key: ExecutionIconKey) => ({\n opacity: 1,\n scale: 1,\n transition: iconEnterConfig[key].transition,\n }),\n exit: {\n opacity: 0,\n scale: 0.8,\n filter: 'blur(4px)',\n transition: { duration: ICON_EXIT.duration, ease: ICON_EXIT.ease },\n },\n}\n\ninterface StatusIconProps {\n route: RouteExtended\n status: RouteExecutionStatus\n}\n\n/**\n * The animated status icon. Each state animates in its own way; they all\n * animate out the same way.\n */\nexport function StatusIcon({ route, status }: StatusIconProps): JSX.Element {\n const iconKey = resolveExecutionIconKey(route, status)\n const step = route.steps.at(-1)\n\n return (\n <StatusIconContainer>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <m.div\n key={iconKey}\n custom={iconKey}\n variants={iconVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {iconKey === 'timer' ? (\n <TimerRing step={step} />\n ) : (\n <IconCircle status={iconKey} />\n )}\n </m.div>\n </AnimatePresence>\n </StatusIconContainer>\n )\n}\n"],"mappings":";;;;;;;;AAYA,MAAM,YAAY;CAAE,UAAU;CAAM,MAAM;EAAC;EAAM;EAAG;EAAM;CAAC;AAAW;AAEtE,MAAM,kBAGF;CACF,SAAS;EACP,cAAc;EACd,YAAY;GAAE,MAAM;GAAU,gBAAgB;GAAK,QAAQ;EAAK;CAClE;CACA,SAAS;EACP,cAAc;EACd,YAAY;GAAE,MAAM;GAAU,gBAAgB;GAAM,QAAQ;EAAI;CAClE;CACA,OAAO;EACL,cAAc;EACd,YAAY;GAAE,UAAU;GAAM,MAAM;IAAC;IAAM;IAAG;IAAM;GAAC;EAAE;CACzD;CACA,MAAM;EACJ,cAAc;EACd,YAAY;GAAE,UAAU;GAAK,MAAM;IAAC;IAAM;IAAG;IAAM;GAAC;EAAE;CACxD;CACA,OAAO;EACL,cAAc;EACd,YAAY;GAAE,UAAU;GAAM,MAAM;IAAC;IAAM;IAAG;IAAM;GAAC;EAAE;CACzD;AACF;AAEA,MAAM,eAAyB;CAC7B,SAAS,SAA2B;EAClC,SAAS;EACT,OAAO,gBAAgB,IAAI,CAAC;CAC9B;CACA,UAAU,SAA2B;EACnC,SAAS;EACT,OAAO;EACP,YAAY,gBAAgB,IAAI,CAAC;CACnC;CACA,MAAM;EACJ,SAAS;EACT,OAAO;EACP,QAAQ;EACR,YAAY;GAAE,UAAU,UAAU;GAAU,MAAM,UAAU;EAAK;CACnE;AACF;;;;;AAWA,SAAgB,WAAW,EAAE,OAAO,UAAwC;CAC1E,MAAM,UAAU,wBAAwB,OAAO,MAAM;CACrD,MAAM,OAAO,MAAM,MAAM,GAAG,EAAE;CAE9B,OACE,oBAAC,qBAAD,EAAA,UACE,oBAAC,iBAAD;EAAiB,MAAK;EAAY,SAAS;EACzC,UAAA,oBAAC,EAAE,KAAH;GAEE,QAAQ;GACR,UAAU;GACV,SAAQ;GACR,SAAQ;GACR,MAAK;GACL,OAAO;IACL,UAAU;IACV,OAAO;IACP,SAAS;IACT,YAAY;IACZ,gBAAgB;GAClB;GAEC,UAAA,YAAY,UACX,oBAAC,WAAD,EAAiB,KAAO,CAAA,IAExB,oBAAC,YAAD,EAAY,QAAQ,QAAU,CAAA;EAE3B,GAnBA,OAmBA;CACQ,CAAA,EACE,CAAA;AAEzB"}
@@ -1,4 +1,5 @@
1
1
  import { hasEnumFlag } from "../../utils/enum.js";
2
+ import "../../stores/routes/types.js";
2
3
  //#region src/components/ExecutionStatusCard/iconKey.ts
3
4
  /** Maps route execution state to an {@link ExecutionIconKey}. Pure function. */
4
5
  function resolveExecutionIconKey(route, status) {
@@ -1 +1 @@
1
- {"version":3,"file":"iconKey.js","names":[],"sources":["../../../../src/components/ExecutionStatusCard/iconKey.ts"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { hasEnumFlag } from '../../utils/enum.js'\n\n/** Visual state of the execution status indicator. */\nexport type ExecutionIconKey =\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'timer'\n\n/** Maps route execution state to an {@link ExecutionIconKey}. Pure function. */\nexport function resolveExecutionIconKey(\n route: RouteExtended,\n status: RouteExecutionStatus\n): ExecutionIconKey {\n if (hasEnumFlag(status, RouteExecutionStatus.Done)) {\n return hasEnumFlag(status, RouteExecutionStatus.Partial) ||\n hasEnumFlag(status, RouteExecutionStatus.Refunded)\n ? 'warning'\n : 'success'\n }\n if (hasEnumFlag(status, RouteExecutionStatus.Failed)) {\n return 'error'\n }\n const activeStep =\n route.steps.find(\n (step) =>\n step.execution?.status === 'PENDING' ||\n step.execution?.status === 'ACTION_REQUIRED'\n ) ?? route.steps.at(-1)\n if (activeStep?.execution?.status === 'ACTION_REQUIRED') {\n return 'info'\n }\n return 'timer'\n}\n"],"mappings":";;;AAaA,SAAgB,wBACd,OACA,QACkB;CAClB,IAAI,YAAY,QAAA,CAAiC,GAC/C,OAAO,YAAY,QAAA,EAAoC,KACrD,YAAY,QAAA,EAAqC,IAC/C,YACA;CAEN,IAAI,YAAY,QAAA,CAAmC,GACjD,OAAO;CAQT,KALE,MAAM,MAAM,MACT,SACC,KAAK,WAAW,WAAW,aAC3B,KAAK,WAAW,WAAW,iBAC/B,KAAK,MAAM,MAAM,GAAG,EAAE,EAAA,EACR,WAAW,WAAW,mBACpC,OAAO;CAET,OAAO;AACT"}
1
+ {"version":3,"file":"iconKey.js","names":[],"sources":["../../../../src/components/ExecutionStatusCard/iconKey.ts"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { hasEnumFlag } from '../../utils/enum.js'\n\n/** Visual state of the execution status indicator. */\nexport type ExecutionIconKey =\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'timer'\n\n/** Maps route execution state to an {@link ExecutionIconKey}. Pure function. */\nexport function resolveExecutionIconKey(\n route: RouteExtended,\n status: RouteExecutionStatus\n): ExecutionIconKey {\n if (hasEnumFlag(status, RouteExecutionStatus.Done)) {\n return hasEnumFlag(status, RouteExecutionStatus.Partial) ||\n hasEnumFlag(status, RouteExecutionStatus.Refunded)\n ? 'warning'\n : 'success'\n }\n if (hasEnumFlag(status, RouteExecutionStatus.Failed)) {\n return 'error'\n }\n const activeStep =\n route.steps.find(\n (step) =>\n step.execution?.status === 'PENDING' ||\n step.execution?.status === 'ACTION_REQUIRED'\n ) ?? route.steps.at(-1)\n if (activeStep?.execution?.status === 'ACTION_REQUIRED') {\n return 'info'\n }\n return 'timer'\n}\n"],"mappings":";;;;AAaA,SAAgB,wBACd,OACA,QACkB;CAClB,IAAI,YAAY,QAAA,CAAiC,GAC/C,OAAO,YAAY,QAAA,EAAoC,KACrD,YAAY,QAAA,EAAqC,IAC/C,YACA;CAEN,IAAI,YAAY,QAAA,CAAmC,GACjD,OAAO;CAQT,KALE,MAAM,MAAM,MACT,SACC,KAAK,WAAW,WAAW,aAC3B,KAAK,WAAW,WAAW,iBAC/B,KAAK,MAAM,MAAM,GAAG,EAAE,EAAA,EACR,WAAW,WAAW,mBACpC,OAAO;CAET,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"Expansion.js","names":[],"sources":["../../../../src/components/Expansion/Expansion.tsx"],"sourcesContent":["import { type JSX, useMemo, useRef, useState } from 'react'\nimport { useHasChainExpansion } from '../../hooks/useHasChainExpansion.js'\nimport { ExpansionType } from '../../types/widget.js'\nimport { ChainsExpanded } from '../Chains/ChainsExpanded.js'\nimport { chainExpansionWidth } from '../Chains/ChainsExpanded.style.js'\nimport { RoutesExpanded } from '../Routes/RoutesExpanded.js'\nimport { routesExpansionWidth } from '../Routes/RoutesExpanded.style.js'\nimport { ExpansionContainer } from './Expansion.style.js'\n\nexport function Expansion(): JSX.Element {\n const [withChainExpansion, expansionType] = useHasChainExpansion()\n const chainExpansionTypeRef = useRef<ExpansionType>(expansionType)\n const [routesOpen, setRoutesOpen] = useState(false)\n\n // Track the previous chain expansion type to avoid re-renders when transitioning to Routes\n if (\n expansionType === ExpansionType.FromChain ||\n expansionType === ExpansionType.ToChain\n ) {\n chainExpansionTypeRef.current = expansionType\n }\n\n const containerWidth = useMemo(() => {\n return routesOpen\n ? routesExpansionWidth\n : withChainExpansion\n ? chainExpansionWidth\n : 0\n }, [routesOpen, withChainExpansion])\n\n return (\n <ExpansionContainer width={containerWidth}>\n <RoutesExpanded\n canOpen={expansionType === ExpansionType.Routes}\n setOpenExpansion={setRoutesOpen}\n />\n <ChainsExpanded\n formType={\n chainExpansionTypeRef.current === ExpansionType.FromChain\n ? 'from'\n : 'to'\n }\n open={withChainExpansion}\n />\n </ExpansionContainer>\n )\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,YAAyB;CACvC,MAAM,CAAC,oBAAoB,iBAAiB,qBAAqB;CACjE,MAAM,wBAAwB,OAAsB,aAAa;CACjE,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAGlD,IACE,kBAAA,eACA,kBAAA,WAEA,sBAAsB,UAAU;CAWlC,OACE,qBAAC,oBAAD;EAAoB,OATC,cAAc;GACnC,OAAO,aACH,uBACA,qBACE,sBACA;EACR,GAAG,CAAC,YAAY,kBAAkB,CAGQ;YAAxC,CACE,oBAAC,gBAAD;GACE,SAAS,kBAAA;GACT,kBAAkB;EACnB,CAAA,GACD,oBAAC,gBAAD;GACE,UACE,sBAAsB,YAAA,cAClB,SACA;GAEN,MAAM;EACP,CAAA,CACiB;;AAExB"}
1
+ {"version":3,"file":"Expansion.js","names":[],"sources":["../../../../src/components/Expansion/Expansion.tsx"],"sourcesContent":["import { type JSX, useMemo, useRef, useState } from 'react'\nimport { useHasChainExpansion } from '../../hooks/useHasChainExpansion.js'\nimport { ExpansionType } from '../../types/widget.js'\nimport { ChainsExpanded } from '../Chains/ChainsExpanded.js'\nimport { chainExpansionWidth } from '../Chains/ChainsExpanded.style.js'\nimport { RoutesExpanded } from '../Routes/RoutesExpanded.js'\nimport { routesExpansionWidth } from '../Routes/RoutesExpanded.style.js'\nimport { ExpansionContainer } from './Expansion.style.js'\n\nexport function Expansion(): JSX.Element {\n const [withChainExpansion, expansionType] = useHasChainExpansion()\n const chainExpansionTypeRef = useRef<ExpansionType>(expansionType)\n const [routesOpen, setRoutesOpen] = useState(false)\n\n // Track the previous chain expansion type to avoid re-renders when transitioning to Routes\n if (\n expansionType === ExpansionType.FromChain ||\n expansionType === ExpansionType.ToChain\n ) {\n chainExpansionTypeRef.current = expansionType\n }\n\n const containerWidth = useMemo(() => {\n return routesOpen\n ? routesExpansionWidth\n : withChainExpansion\n ? chainExpansionWidth\n : 0\n }, [routesOpen, withChainExpansion])\n\n return (\n <ExpansionContainer width={containerWidth}>\n <RoutesExpanded\n canOpen={expansionType === ExpansionType.Routes}\n setOpenExpansion={setRoutesOpen}\n />\n <ChainsExpanded\n formType={\n chainExpansionTypeRef.current === ExpansionType.FromChain\n ? 'from'\n : 'to'\n }\n open={withChainExpansion}\n />\n </ExpansionContainer>\n )\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,YAAyB;CACvC,MAAM,CAAC,oBAAoB,iBAAiB,qBAAqB;CACjE,MAAM,wBAAwB,OAAsB,aAAa;CACjE,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAGlD,IACE,kBAAA,eACA,kBAAA,WAEA,sBAAsB,UAAU;CAWlC,OACE,qBAAC,oBAAD;EAAoB,OATC,cAAc;GACnC,OAAO,aACH,uBACA,qBACE,sBACA;EACR,GAAG,CAAC,YAAY,kBAAkB,CAGQ;EAAxC,UAAA,CACE,oBAAC,gBAAD;GACE,SAAS,kBAAA;GACT,kBAAkB;EACnB,CAAA,GACD,oBAAC,gBAAD;GACE,UACE,sBAAsB,YAAA,cAClB,SACA;GAEN,MAAM;EACP,CAAA,CACiB;;AAExB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpansionTransition.js","names":[],"sources":["../../../../src/components/Expansion/ExpansionTransition.tsx"],"sourcesContent":["import { Box } from '@mui/material'\nimport { type JSX, type PropsWithChildren, useRef } from 'react'\nimport { Transition } from 'react-transition-group'\nimport {\n animationDuration,\n defaultStyle,\n transitionStyles,\n} from './Expansion.style.js'\n\ninterface ExpansionTransitionProps {\n in: boolean\n width: string\n onExited?: () => void\n}\n\nexport function ExpansionTransition({\n in: inProp,\n children,\n width,\n onExited,\n}: PropsWithChildren<ExpansionTransitionProps>): JSX.Element {\n const nodeRef = useRef(null)\n return (\n <Transition\n nodeRef={nodeRef}\n in={inProp}\n timeout={animationDuration}\n onExited={onExited}\n mountOnEnter\n unmountOnExit\n >\n {(state) => {\n return (\n <Box\n ref={nodeRef}\n style={{\n ...defaultStyle,\n ...transitionStyles[state as keyof typeof transitionStyles],\n width,\n }}\n >\n {children}\n </Box>\n )\n }}\n </Transition>\n )\n}\n"],"mappings":";;;;;;AAeA,SAAgB,oBAAoB,EAClC,IAAI,QACJ,UACA,OACA,YAC2D;CAC3D,MAAM,UAAU,OAAO,IAAI;CAC3B,OACE,oBAAC,YAAD;EACW;EACT,IAAI;EACJ,SAAA;EACU;EACV,cAAA;EACA,eAAA;aAEE,UAAU;GACV,OACE,oBAAC,KAAD;IACE,KAAK;IACL,OAAO;KACL,GAAG;KACH,GAAG,iBAAiB;KACpB;IACF;IAEC;GACE,CAAA;EAET;CACU,CAAA;AAEhB"}
1
+ {"version":3,"file":"ExpansionTransition.js","names":[],"sources":["../../../../src/components/Expansion/ExpansionTransition.tsx"],"sourcesContent":["import { Box } from '@mui/material'\nimport { type JSX, type PropsWithChildren, useRef } from 'react'\nimport { Transition } from 'react-transition-group'\nimport {\n animationDuration,\n defaultStyle,\n transitionStyles,\n} from './Expansion.style.js'\n\ninterface ExpansionTransitionProps {\n in: boolean\n width: string\n onExited?: () => void\n}\n\nexport function ExpansionTransition({\n in: inProp,\n children,\n width,\n onExited,\n}: PropsWithChildren<ExpansionTransitionProps>): JSX.Element {\n const nodeRef = useRef(null)\n return (\n <Transition\n nodeRef={nodeRef}\n in={inProp}\n timeout={animationDuration}\n onExited={onExited}\n mountOnEnter\n unmountOnExit\n >\n {(state) => {\n return (\n <Box\n ref={nodeRef}\n style={{\n ...defaultStyle,\n ...transitionStyles[state as keyof typeof transitionStyles],\n width,\n }}\n >\n {children}\n </Box>\n )\n }}\n </Transition>\n )\n}\n"],"mappings":";;;;;;AAeA,SAAgB,oBAAoB,EAClC,IAAI,QACJ,UACA,OACA,YAC2D;CAC3D,MAAM,UAAU,OAAO,IAAI;CAC3B,OACE,oBAAC,YAAD;EACW;EACT,IAAI;EACJ,SAAA;EACU;EACV,cAAA;EACA,eAAA;EAEE,WAAA,UAAU;GACV,OACE,oBAAC,KAAD;IACE,KAAK;IACL,OAAO;KACL,GAAG;KACH,GAAG,iBAAiB;KACpB;IACF;IAEC;GACE,CAAA;EAET;CACU,CAAA;AAEhB"}
@@ -0,0 +1,13 @@
1
+ import { FeesBreakdown } from "../utils/fees.js";
2
+ import { ReactElement } from "react";
3
+ //#region src/components/FeeBreakdownTooltip.d.ts
4
+ interface FeeBreakdownTooltipProps {
5
+ gasCosts?: FeesBreakdown[];
6
+ feeCosts?: FeesBreakdown[];
7
+ gasless?: boolean;
8
+ children: ReactElement<any, any>;
9
+ }
10
+ declare const FeeBreakdownTooltip: React.FC<FeeBreakdownTooltipProps>;
11
+ //#endregion
12
+ export { FeeBreakdownTooltip };
13
+ //# sourceMappingURL=FeeBreakdownTooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeeBreakdownTooltip.d.ts","names":[],"sources":["../../../src/components/FeeBreakdownTooltip.tsx"],"mappings":";;;UAOU;EACR,WAAW;EACX,WAAW;EACX;EACA,UAAU;;cAGC,qBAAqB,MAAM,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeeBreakdownTooltip.js","names":[],"sources":["../../../src/components/FeeBreakdownTooltip.tsx"],"sourcesContent":["import { Box, Tooltip, Typography } from '@mui/material'\nimport type { TFunction } from 'i18next'\nimport type { ReactElement } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { FeesBreakdown } from '../utils/fees.js'\nimport { formatTokenAmount } from '../utils/format.js'\n\ninterface FeeBreakdownTooltipProps {\n gasCosts?: FeesBreakdown[]\n feeCosts?: FeesBreakdown[]\n gasless?: boolean\n children: ReactElement<any, any>\n}\n\nexport const FeeBreakdownTooltip: React.FC<FeeBreakdownTooltipProps> = ({\n gasCosts,\n feeCosts,\n gasless,\n children,\n}) => {\n const { t } = useTranslation()\n return (\n <Tooltip\n title={\n <Box>\n {gasless ? <Box>{t('tooltip.gasless')}</Box> : null}\n {gasCosts?.length && !gasless ? (\n <Box>\n {t('main.fees.network')}\n {getFeeBreakdownTypography(gasCosts, t)}\n </Box>\n ) : null}\n {feeCosts?.length && !gasless ? (\n <Box\n sx={{\n mt: 0.5,\n }}\n >\n {t('main.fees.provider')}\n {getFeeBreakdownTypography(feeCosts, t)}\n </Box>\n ) : null}\n </Box>\n }\n sx={{ cursor: 'help' }}\n >\n {children}\n </Tooltip>\n )\n}\n\nconst getFeeBreakdownTypography = (fees: FeesBreakdown[], t: TFunction) =>\n fees.map((fee, index) => (\n <Typography\n color=\"inherit\"\n key={`${fee.token.address}${index}`}\n sx={{\n fontSize: 12,\n fontWeight: '500',\n }}\n >\n {t('format.currency', { value: fee.amountUSD })} (\n {t('format.tokenAmount', {\n value: formatTokenAmount(fee.amount, fee.token.decimals),\n })}{' '}\n {fee.token.symbol})\n </Typography>\n ))\n"],"mappings":";;;;;AAcA,MAAa,uBAA2D,EACtE,UACA,UACA,SACA,eACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,OACE,oBAAC,SAAD;EACE,OACE,qBAAC,KAAD,EAAA,UAAA;GACG,UAAU,oBAAC,KAAD,EAAA,UAAM,EAAE,iBAAiB,EAAO,CAAA,IAAI;GAC9C,UAAU,UAAU,CAAC,UACpB,qBAAC,KAAD,EAAA,UAAA,CACG,EAAE,mBAAmB,GACrB,0BAA0B,UAAU,CAAC,CACnC,EAAA,CAAA,IACH;GACH,UAAU,UAAU,CAAC,UACpB,qBAAC,KAAD;IACE,IAAI,EACF,IAAI,GACN;cAHF,CAKG,EAAE,oBAAoB,GACtB,0BAA0B,UAAU,CAAC,CACnC;QACH;EACD,EAAA,CAAA;EAEP,IAAI,EAAE,QAAQ,OAAO;EAEpB;CACM,CAAA;AAEb;AAEA,MAAM,6BAA6B,MAAuB,MACxD,KAAK,KAAK,KAAK,UACb,qBAAC,YAAD;CACE,OAAM;CAEN,IAAI;EACF,UAAU;EACV,YAAY;CACd;WANF;EAQG,EAAE,mBAAmB,EAAE,OAAO,IAAI,UAAU,CAAC;EAAE;EAC/C,EAAE,sBAAsB,EACvB,OAAO,kBAAkB,IAAI,QAAQ,IAAI,MAAM,QAAQ,EACzD,CAAC;EAAG;EACH,IAAI,MAAM;EAAO;CACR;GAXL,GAAG,IAAI,MAAM,UAAU,OAWlB,CACb"}
1
+ {"version":3,"file":"FeeBreakdownTooltip.js","names":[],"sources":["../../../src/components/FeeBreakdownTooltip.tsx"],"sourcesContent":["import { Box, Tooltip, Typography } from '@mui/material'\nimport type { TFunction } from 'i18next'\nimport type { ReactElement } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { FeesBreakdown } from '../utils/fees.js'\nimport { formatTokenAmount } from '../utils/format.js'\n\ninterface FeeBreakdownTooltipProps {\n gasCosts?: FeesBreakdown[]\n feeCosts?: FeesBreakdown[]\n gasless?: boolean\n children: ReactElement<any, any>\n}\n\nexport const FeeBreakdownTooltip: React.FC<FeeBreakdownTooltipProps> = ({\n gasCosts,\n feeCosts,\n gasless,\n children,\n}) => {\n const { t } = useTranslation()\n return (\n <Tooltip\n title={\n <Box>\n {gasless ? <Box>{t('tooltip.gasless')}</Box> : null}\n {gasCosts?.length && !gasless ? (\n <Box>\n {t('main.fees.network')}\n {getFeeBreakdownTypography(gasCosts, t)}\n </Box>\n ) : null}\n {feeCosts?.length && !gasless ? (\n <Box\n sx={{\n mt: 0.5,\n }}\n >\n {t('main.fees.provider')}\n {getFeeBreakdownTypography(feeCosts, t)}\n </Box>\n ) : null}\n </Box>\n }\n sx={{ cursor: 'help' }}\n >\n {children}\n </Tooltip>\n )\n}\n\nconst getFeeBreakdownTypography = (fees: FeesBreakdown[], t: TFunction) =>\n fees.map((fee, index) => (\n <Typography\n color=\"inherit\"\n key={`${fee.token.address}${index}`}\n sx={{\n fontSize: 12,\n fontWeight: '500',\n }}\n >\n {t('format.currency', { value: fee.amountUSD })} (\n {t('format.tokenAmount', {\n value: formatTokenAmount(fee.amount, fee.token.decimals),\n })}{' '}\n {fee.token.symbol})\n </Typography>\n ))\n"],"mappings":";;;;;AAcA,MAAa,uBAA2D,EACtE,UACA,UACA,SACA,eACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,OACE,oBAAC,SAAD;EACE,OACE,qBAAC,KAAD,EAAA,UAAA;GACG,UAAU,oBAAC,KAAD,EAAA,UAAM,EAAE,iBAAiB,EAAO,CAAA,IAAI;GAC9C,UAAU,UAAU,CAAC,UACpB,qBAAC,KAAD,EAAA,UAAA,CACG,EAAE,mBAAmB,GACrB,0BAA0B,UAAU,CAAC,CACnC,EAAA,CAAA,IACH;GACH,UAAU,UAAU,CAAC,UACpB,qBAAC,KAAD;IACE,IAAI,EACF,IAAI,GACN;IAHF,UAAA,CAKG,EAAE,oBAAoB,GACtB,0BAA0B,UAAU,CAAC,CACnC;GACH,CAAA,IAAA;EACD,EAAA,CAAA;EAEP,IAAI,EAAE,QAAQ,OAAO;EAEpB;CACM,CAAA;AAEb;AAEA,MAAM,6BAA6B,MAAuB,MACxD,KAAK,KAAK,KAAK,UACb,qBAAC,YAAD;CACE,OAAM;CAEN,IAAI;EACF,UAAU;EACV,YAAY;CACd;CANF,UAAA;EAQG,EAAE,mBAAmB,EAAE,OAAO,IAAI,UAAU,CAAC;EAAE;EAC/C,EAAE,sBAAsB,EACvB,OAAO,kBAAkB,IAAI,QAAQ,IAAI,MAAM,QAAQ,EACzD,CAAC;EAAG;EACH,IAAI,MAAM;EAAO;CACR;AAXL,GAAA,GAAG,IAAI,MAAM,UAAU,OAWlB,CACb"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActivitiesButton.js","names":[],"sources":["../../../../src/components/Header/ActivitiesButton.tsx"],"sourcesContent":["import ErrorRounded from '@mui/icons-material/ErrorRounded'\nimport HistoryIcon from '@mui/icons-material/History'\nimport { Tooltip } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useRouteExecutionIndicator } from '../../stores/routes/useRouteExecutionIndicator.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { CircularProgressPending } from '../Timer/StepStatusTimer.style.js'\nimport {\n ActivitiesIconButton,\n ErrorBadge,\n IconContainer,\n ProgressTrack,\n} from './ActivitiesButton.style.js'\n\nexport const ActivitiesButton = (): JSX.Element => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const indicator = useRouteExecutionIndicator()\n\n return (\n <Tooltip title={t('header.activities')}>\n <ActivitiesIconButton\n active={indicator.active || indicator.failed}\n size=\"medium\"\n onClick={() => navigate({ to: navigationRoutes.activities })}\n disableRipple={indicator.active || indicator.failed}\n >\n <ErrorBadge\n invisible={!indicator.failed}\n badgeContent={\n <ErrorRounded color=\"error\" sx={{ width: 20, height: 20 }} />\n }\n overlap=\"circular\"\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <IconContainer>\n {(indicator.active || indicator.failed) && (\n <ProgressTrack\n variant=\"determinate\"\n value={100}\n size={40}\n thickness={3}\n />\n )}\n {indicator.active && (\n <CircularProgressPending\n size={40}\n sx={{ position: 'absolute', top: -8, left: -8 }}\n />\n )}\n <HistoryIcon />\n </IconContainer>\n </ErrorBadge>\n </ActivitiesIconButton>\n </Tooltip>\n )\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAa,yBAAsC;CACjD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,YAAY,2BAA2B;CAE7C,OACE,oBAAC,SAAD;EAAS,OAAO,EAAE,mBAAmB;YACnC,oBAAC,sBAAD;GACE,QAAQ,UAAU,UAAU,UAAU;GACtC,MAAK;GACL,eAAe,SAAS,EAAE,IAAI,iBAAiB,WAAW,CAAC;GAC3D,eAAe,UAAU,UAAU,UAAU;aAE7C,oBAAC,YAAD;IACE,WAAW,CAAC,UAAU;IACtB,cACE,oBAAC,cAAD;KAAc,OAAM;KAAQ,IAAI;MAAE,OAAO;MAAI,QAAQ;KAAG;IAAI,CAAA;IAE9D,SAAQ;IACR,cAAc;KAAE,UAAU;KAAO,YAAY;IAAQ;cAErD,qBAAC,eAAD,EAAA,UAAA;MACI,UAAU,UAAU,UAAU,WAC9B,oBAAC,eAAD;MACE,SAAQ;MACR,OAAO;MACP,MAAM;MACN,WAAW;KACZ,CAAA;KAEF,UAAU,UACT,oBAAC,yBAAD;MACE,MAAM;MACN,IAAI;OAAE,UAAU;OAAY,KAAK;OAAI,MAAM;MAAG;KAC/C,CAAA;KAEH,oBAAC,aAAD,CAAc,CAAA;IACD,EAAA,CAAA;GACL,CAAA;EACQ,CAAA;CACf,CAAA;AAEb"}
1
+ {"version":3,"file":"ActivitiesButton.js","names":[],"sources":["../../../../src/components/Header/ActivitiesButton.tsx"],"sourcesContent":["import ErrorRounded from '@mui/icons-material/ErrorRounded'\nimport HistoryIcon from '@mui/icons-material/History'\nimport { Tooltip } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useRouteExecutionIndicator } from '../../stores/routes/useRouteExecutionIndicator.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { CircularProgressPending } from '../Timer/StepStatusTimer.style.js'\nimport {\n ActivitiesIconButton,\n ErrorBadge,\n IconContainer,\n ProgressTrack,\n} from './ActivitiesButton.style.js'\n\nexport const ActivitiesButton = (): JSX.Element => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const indicator = useRouteExecutionIndicator()\n\n return (\n <Tooltip title={t('header.activities')}>\n <ActivitiesIconButton\n active={indicator.active || indicator.failed}\n size=\"medium\"\n onClick={() => navigate({ to: navigationRoutes.activities })}\n disableRipple={indicator.active || indicator.failed}\n >\n <ErrorBadge\n invisible={!indicator.failed}\n badgeContent={\n <ErrorRounded color=\"error\" sx={{ width: 20, height: 20 }} />\n }\n overlap=\"circular\"\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <IconContainer>\n {(indicator.active || indicator.failed) && (\n <ProgressTrack\n variant=\"determinate\"\n value={100}\n size={40}\n thickness={3}\n />\n )}\n {indicator.active && (\n <CircularProgressPending\n size={40}\n sx={{ position: 'absolute', top: -8, left: -8 }}\n />\n )}\n <HistoryIcon />\n </IconContainer>\n </ErrorBadge>\n </ActivitiesIconButton>\n </Tooltip>\n )\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAa,yBAAsC;CACjD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,YAAY,2BAA2B;CAE7C,OACE,oBAAC,SAAD;EAAS,OAAO,EAAE,mBAAmB;EACnC,UAAA,oBAAC,sBAAD;GACE,QAAQ,UAAU,UAAU,UAAU;GACtC,MAAK;GACL,eAAe,SAAS,EAAE,IAAI,iBAAiB,WAAW,CAAC;GAC3D,eAAe,UAAU,UAAU,UAAU;GAE7C,UAAA,oBAAC,YAAD;IACE,WAAW,CAAC,UAAU;IACtB,cACE,oBAAC,cAAD;KAAc,OAAM;KAAQ,IAAI;MAAE,OAAO;MAAI,QAAQ;KAAG;IAAI,CAAA;IAE9D,SAAQ;IACR,cAAc;KAAE,UAAU;KAAO,YAAY;IAAQ;IAErD,UAAA,qBAAC,eAAD,EAAA,UAAA;MACI,UAAU,UAAU,UAAU,WAC9B,oBAAC,eAAD;MACE,SAAQ;MACR,OAAO;MACP,MAAM;MACN,WAAW;KACZ,CAAA;KAEF,UAAU,UACT,oBAAC,yBAAD;MACE,MAAM;MACN,IAAI;OAAE,UAAU;OAAY,KAAK;OAAI,MAAM;MAAG;KAC/C,CAAA;KAEH,oBAAC,aAAD,CAAc,CAAA;IACD,EAAA,CAAA;GACL,CAAA;EACQ,CAAA;CACf,CAAA;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackButton.js","names":[],"sources":["../../../../src/components/Header/BackButton.tsx"],"sourcesContent":["import ArrowBack from '@mui/icons-material/ArrowBack'\nimport { IconButton, useTheme } from '@mui/material'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\n\nexport const BackButton: React.FC = () => {\n const theme = useTheme()\n const navigateBack = useNavigateBack()\n const [backAction, executeBackAction] = useHeaderStore((state) => [\n state.backAction,\n state.executeBackAction,\n ])\n\n return (\n <IconButton\n size=\"medium\"\n edge={theme?.navigation?.edge ? 'start' : false}\n onClick={() => {\n if (backAction) {\n executeBackAction()\n } else {\n navigateBack()\n }\n }}\n >\n <ArrowBack />\n </IconButton>\n )\n}\n"],"mappings":";;;;;;AAKA,MAAa,mBAA6B;CACxC,MAAM,QAAQ,SAAS;CACvB,MAAM,eAAe,gBAAgB;CACrC,MAAM,CAAC,YAAY,qBAAqB,gBAAgB,UAAU,CAChE,MAAM,YACN,MAAM,iBACR,CAAC;CAED,OACE,oBAAC,YAAD;EACE,MAAK;EACL,MAAM,OAAO,YAAY,OAAO,UAAU;EAC1C,eAAe;GACb,IAAI,YACF,kBAAkB;QAElB,aAAa;EAEjB;YAEA,oBAAC,WAAD,CAAY,CAAA;CACF,CAAA;AAEhB"}
1
+ {"version":3,"file":"BackButton.js","names":[],"sources":["../../../../src/components/Header/BackButton.tsx"],"sourcesContent":["import ArrowBack from '@mui/icons-material/ArrowBack'\nimport { IconButton, useTheme } from '@mui/material'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\n\nexport const BackButton: React.FC = () => {\n const theme = useTheme()\n const navigateBack = useNavigateBack()\n const [backAction, executeBackAction] = useHeaderStore((state) => [\n state.backAction,\n state.executeBackAction,\n ])\n\n return (\n <IconButton\n size=\"medium\"\n edge={theme?.navigation?.edge ? 'start' : false}\n onClick={() => {\n if (backAction) {\n executeBackAction()\n } else {\n navigateBack()\n }\n }}\n >\n <ArrowBack />\n </IconButton>\n )\n}\n"],"mappings":";;;;;;AAKA,MAAa,mBAA6B;CACxC,MAAM,QAAQ,SAAS;CACvB,MAAM,eAAe,gBAAgB;CACrC,MAAM,CAAC,YAAY,qBAAqB,gBAAgB,UAAU,CAChE,MAAM,YACN,MAAM,iBACR,CAAC;CAED,OACE,oBAAC,YAAD;EACE,MAAK;EACL,MAAM,OAAO,YAAY,OAAO,UAAU;EAC1C,eAAe;GACb,IAAI,YACF,kBAAkB;QAElB,aAAa;EAEjB;EAEA,UAAA,oBAAC,WAAD,CAAY,CAAA;CACF,CAAA;AAEhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"CloseDrawerButton.js","names":[],"sources":["../../../../src/components/Header/CloseDrawerButton.tsx"],"sourcesContent":["import CloseRounded from '@mui/icons-material/CloseRounded'\nimport { IconButton, Tooltip } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useDrawer } from '../../AppDrawerContext.js'\nimport { useExternalWalletProvider } from '../../providers/WalletProvider/useExternalWalletProvider.js'\n\ninterface CloseDrawerButtonProps {\n header?: 'navigation' | 'wallet'\n}\n\nexport const CloseDrawerButton = ({\n header,\n}: CloseDrawerButtonProps): JSX.Element | null => {\n const { t } = useTranslation()\n const { closeDrawer } = useDrawer()\n const { useExternalWalletProvidersOnly } = useExternalWalletProvider()\n\n const showInNavigationHeader =\n header === 'navigation' && useExternalWalletProvidersOnly\n\n const showInWalletHeader = header === 'wallet'\n\n return showInNavigationHeader || showInWalletHeader ? (\n <Tooltip title={t('button.close')}>\n <IconButton\n size=\"medium\"\n data-testid=\"widget-close-drawer-button\"\n onClick={closeDrawer}\n >\n <CloseRounded />\n </IconButton>\n </Tooltip>\n ) : null\n}\n"],"mappings":";;;;;;;AAWA,MAAa,qBAAqB,EAChC,aACgD;CAChD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,gBAAgB,UAAU;CAClC,MAAM,EAAE,mCAAmC,0BAA0B;CAOrE,OAJE,WAAW,gBAAgB,kCAEF,WAAW,WAGpC,oBAAC,SAAD;EAAS,OAAO,EAAE,cAAc;YAC9B,oBAAC,YAAD;GACE,MAAK;GACL,eAAY;GACZ,SAAS;aAET,oBAAC,cAAD,CAAe,CAAA;EACL,CAAA;CACL,CAAA,IACP;AACN"}
1
+ {"version":3,"file":"CloseDrawerButton.js","names":[],"sources":["../../../../src/components/Header/CloseDrawerButton.tsx"],"sourcesContent":["import CloseRounded from '@mui/icons-material/CloseRounded'\nimport { IconButton, Tooltip } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useDrawer } from '../../AppDrawerContext.js'\nimport { useExternalWalletProvider } from '../../providers/WalletProvider/useExternalWalletProvider.js'\n\ninterface CloseDrawerButtonProps {\n header?: 'navigation' | 'wallet'\n}\n\nexport const CloseDrawerButton = ({\n header,\n}: CloseDrawerButtonProps): JSX.Element | null => {\n const { t } = useTranslation()\n const { closeDrawer } = useDrawer()\n const { useExternalWalletProvidersOnly } = useExternalWalletProvider()\n\n const showInNavigationHeader =\n header === 'navigation' && useExternalWalletProvidersOnly\n\n const showInWalletHeader = header === 'wallet'\n\n return showInNavigationHeader || showInWalletHeader ? (\n <Tooltip title={t('button.close')}>\n <IconButton\n size=\"medium\"\n data-testid=\"widget-close-drawer-button\"\n onClick={closeDrawer}\n >\n <CloseRounded />\n </IconButton>\n </Tooltip>\n ) : null\n}\n"],"mappings":";;;;;;;AAWA,MAAa,qBAAqB,EAChC,aACgD;CAChD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,gBAAgB,UAAU;CAClC,MAAM,EAAE,mCAAmC,0BAA0B;CAOrE,OAJE,WAAW,gBAAgB,kCAEF,WAAW,WAGpC,oBAAC,SAAD;EAAS,OAAO,EAAE,cAAc;EAC9B,UAAA,oBAAC,YAAD;GACE,MAAK;GACL,eAAY;GACZ,SAAS;GAET,UAAA,oBAAC,cAAD,CAAe,CAAA;EACL,CAAA;CACL,CAAA,IACP;AACN"}
@@ -1 +1 @@
1
- {"version":3,"file":"DisconnectIconButton.js","names":[],"sources":["../../../../src/components/Header/DisconnectIconButton.tsx"],"sourcesContent":["import { useAccountDisconnect } from '@lifi/wallet-management'\nimport type { Account } from '@lifi/widget-provider'\nimport PowerSettingsNewRounded from '@mui/icons-material/PowerSettingsNewRounded'\nimport { IconButton } from '@mui/material'\nimport type { JSX } from 'react'\n\nexport const DisconnectIconButton = ({\n account,\n}: {\n account: Account\n}): JSX.Element => {\n const disconnect = useAccountDisconnect()\n return (\n <IconButton\n size=\"medium\"\n onClick={async (e) => {\n e.stopPropagation()\n await disconnect(account)\n }}\n >\n <PowerSettingsNewRounded />\n </IconButton>\n )\n}\n"],"mappings":";;;;;AAMA,MAAa,wBAAwB,EACnC,cAGiB;CACjB,MAAM,aAAa,qBAAqB;CACxC,OACE,oBAAC,YAAD;EACE,MAAK;EACL,SAAS,OAAO,MAAM;GACpB,EAAE,gBAAgB;GAClB,MAAM,WAAW,OAAO;EAC1B;YAEA,oBAAC,yBAAD,CAA0B,CAAA;CAChB,CAAA;AAEhB"}
1
+ {"version":3,"file":"DisconnectIconButton.js","names":[],"sources":["../../../../src/components/Header/DisconnectIconButton.tsx"],"sourcesContent":["import { useAccountDisconnect } from '@lifi/wallet-management'\nimport type { Account } from '@lifi/widget-provider'\nimport PowerSettingsNewRounded from '@mui/icons-material/PowerSettingsNewRounded'\nimport { IconButton } from '@mui/material'\nimport type { JSX } from 'react'\n\nexport const DisconnectIconButton = ({\n account,\n}: {\n account: Account\n}): JSX.Element => {\n const disconnect = useAccountDisconnect()\n return (\n <IconButton\n size=\"medium\"\n onClick={async (e) => {\n e.stopPropagation()\n await disconnect(account)\n }}\n >\n <PowerSettingsNewRounded />\n </IconButton>\n )\n}\n"],"mappings":";;;;;AAMA,MAAa,wBAAwB,EACnC,cAGiB;CACjB,MAAM,aAAa,qBAAqB;CACxC,OACE,oBAAC,YAAD;EACE,MAAK;EACL,SAAS,OAAO,MAAM;GACpB,EAAE,gBAAgB;GAClB,MAAM,WAAW,OAAO;EAC1B;EAEA,UAAA,oBAAC,yBAAD,CAA0B,CAAA;CAChB,CAAA;AAEhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderTabs.js","names":[],"sources":["../../../../src/components/Header/HeaderTabs.tsx"],"sourcesContent":["import type { JSX } from 'react'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { NavigationTab, NavigationTabs } from '../Tabs/NavigationTabs.js'\n\ninterface HeaderTab<K extends string> {\n key: K\n label: string\n}\n\ninterface HeaderTabsProps<K extends string> {\n tabs: HeaderTab<K>[]\n value: K\n onChange: (key: K) => void\n}\n\n/**\n * Presentational header tabs bar shared by split mode and configured\n * navigation tabs.\n * Clears the form fields on switch; the caller supplies the labelled tabs, the\n * active key, and what selecting a key means for its store.\n */\nexport const HeaderTabs = <K extends string>({\n tabs,\n value,\n onChange,\n}: HeaderTabsProps<K>): JSX.Element => {\n const { setFieldValue } = useFieldActions()\n\n const handleChange = (_: React.SyntheticEvent, key: K) => {\n setFieldValue('fromAmount', '')\n setFieldValue('fromToken', '')\n setFieldValue('toToken', '')\n onChange(key)\n }\n\n return (\n <NavigationTabs value={value} onChange={handleChange} aria-label=\"tabs\">\n {tabs.map((tab) => (\n <NavigationTab\n key={tab.key}\n value={tab.key}\n label={tab.label}\n disableRipple\n />\n ))}\n </NavigationTabs>\n )\n}\n"],"mappings":";;;;;;;;;;AAqBA,MAAa,cAAgC,EAC3C,MACA,OACA,eACqC;CACrC,MAAM,EAAE,kBAAkB,gBAAgB;CAE1C,MAAM,gBAAgB,GAAyB,QAAW;EACxD,cAAc,cAAc,EAAE;EAC9B,cAAc,aAAa,EAAE;EAC7B,cAAc,WAAW,EAAE;EAC3B,SAAS,GAAG;CACd;CAEA,OACE,oBAAC,gBAAD;EAAuB;EAAO,UAAU;EAAc,cAAW;YAC9D,KAAK,KAAK,QACT,oBAAC,eAAD;GAEE,OAAO,IAAI;GACX,OAAO,IAAI;GACX,eAAA;EACD,GAJM,IAAI,GAIV,CACF;CACa,CAAA;AAEpB"}
1
+ {"version":3,"file":"HeaderTabs.js","names":[],"sources":["../../../../src/components/Header/HeaderTabs.tsx"],"sourcesContent":["import type { JSX } from 'react'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { NavigationTab, NavigationTabs } from '../Tabs/NavigationTabs.js'\n\ninterface HeaderTab<K extends string> {\n key: K\n label: string\n}\n\ninterface HeaderTabsProps<K extends string> {\n tabs: HeaderTab<K>[]\n value: K\n onChange: (key: K) => void\n}\n\n/**\n * Presentational header tabs bar shared by split mode and configured\n * navigation tabs.\n * Clears the form fields on switch; the caller supplies the labelled tabs, the\n * active key, and what selecting a key means for its store.\n */\nexport const HeaderTabs = <K extends string>({\n tabs,\n value,\n onChange,\n}: HeaderTabsProps<K>): JSX.Element => {\n const { setFieldValue } = useFieldActions()\n\n const handleChange = (_: React.SyntheticEvent, key: K) => {\n setFieldValue('fromAmount', '')\n setFieldValue('fromToken', '')\n setFieldValue('toToken', '')\n onChange(key)\n }\n\n return (\n <NavigationTabs value={value} onChange={handleChange} aria-label=\"tabs\">\n {tabs.map((tab) => (\n <NavigationTab\n key={tab.key}\n value={tab.key}\n label={tab.label}\n disableRipple\n />\n ))}\n </NavigationTabs>\n )\n}\n"],"mappings":";;;;;;;;;;AAqBA,MAAa,cAAgC,EAC3C,MACA,OACA,eACqC;CACrC,MAAM,EAAE,kBAAkB,gBAAgB;CAE1C,MAAM,gBAAgB,GAAyB,QAAW;EACxD,cAAc,cAAc,EAAE;EAC9B,cAAc,aAAa,EAAE;EAC7B,cAAc,WAAW,EAAE;EAC3B,SAAS,GAAG;CACd;CAEA,OACE,oBAAC,gBAAD;EAAuB;EAAO,UAAU;EAAc,cAAW;EAC9D,UAAA,KAAK,KAAK,QACT,oBAAC,eAAD;GAEE,OAAO,IAAI;GACX,OAAO,IAAI;GACX,eAAA;EACD,GAJM,IAAI,GAIV,CACF;CACa,CAAA;AAEpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationHeader.js","names":[],"sources":["../../../../src/components/Header/NavigationHeader.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { Box, Typography } from '@mui/material'\nimport { useLocation } from '@tanstack/react-router'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\nimport { useNavigationTabsStore } from '../../stores/navigationTabs/useNavigationTabsStore.js'\nimport {\n backButtonRoutes,\n navigationRoutes,\n navigationRoutesValues,\n} from '../../utils/navigationRoutes.js'\nimport { ActivitiesButton } from './ActivitiesButton.js'\nimport { BackButton } from './BackButton.js'\nimport { CloseDrawerButton } from './CloseDrawerButton.js'\nimport { HeaderAppBar, HeaderControlsContainer } from './Header.style.js'\nimport { HeaderNavigationTabs } from './HeaderNavigationTabs.js'\nimport { SettingsButton } from './SettingsButton.js'\n\nexport const NavigationHeader: React.FC = () => {\n const { hiddenUI, variant, defaultUI } = useWidgetConfig()\n const navigationTabsCount = useNavigationTabsStore(\n (state) => state.tabs.length\n )\n const { account } = useAccount()\n const [element, title] = useHeaderStore((state) => [\n state.element,\n state.title,\n ])\n const { pathname } = useLocation()\n const cleanedPathname = pathname.endsWith('/')\n ? pathname.slice(0, -1)\n : pathname\n const path = cleanedPathname.substring(cleanedPathname.lastIndexOf('/') + 1)\n const hasPath = navigationRoutesValues.includes(path)\n\n // The store resolves which tabs to show (split Swap/Bridge or configured\n // navigation tabs); the header just reflects whether there are any.\n const showHeaderTabs = !hasPath && navigationTabsCount > 0\n\n return (\n <HeaderAppBar elevation={0} sx={{ paddingTop: 1, paddingBottom: 0.5 }}>\n {backButtonRoutes.includes(path) ? <BackButton /> : null}\n {showHeaderTabs ? (\n <Box sx={{ flex: 1, marginRight: 1 }}>\n <HeaderNavigationTabs />\n </Box>\n ) : (\n <Typography\n align={hasPath ? 'center' : 'left'}\n noWrap={defaultUI?.navigationHeaderTitleNoWrap ?? true}\n sx={{\n fontSize: hasPath ? 18 : 24,\n fontWeight: '700',\n flex: 1,\n }}\n >\n {title}\n </Typography>\n )}\n {pathname === navigationRoutes.home ? (\n <HeaderControlsContainer>\n {account.isConnected && !hiddenUI?.history && <ActivitiesButton />}\n <SettingsButton />\n {variant === 'drawer' && !hiddenUI?.drawerCloseButton ? (\n <CloseDrawerButton header=\"navigation\" />\n ) : null}\n </HeaderControlsContainer>\n ) : (\n element || (\n <Box\n sx={{\n width: 28,\n height: 40,\n }}\n />\n )\n )}\n </HeaderAppBar>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAa,yBAAmC;CAC9C,MAAM,EAAE,UAAU,SAAS,cAAc,gBAAgB;CACzD,MAAM,sBAAsB,wBACzB,UAAU,MAAM,KAAK,MACxB;CACA,MAAM,EAAE,YAAY,WAAW;CAC/B,MAAM,CAAC,SAAS,SAAS,gBAAgB,UAAU,CACjD,MAAM,SACN,MAAM,KACR,CAAC;CACD,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,kBAAkB,SAAS,SAAS,GAAG,IACzC,SAAS,MAAM,GAAG,EAAE,IACpB;CACJ,MAAM,OAAO,gBAAgB,UAAU,gBAAgB,YAAY,GAAG,IAAI,CAAC;CAC3E,MAAM,UAAU,uBAAuB,SAAS,IAAI;CAIpD,MAAM,iBAAiB,CAAC,WAAW,sBAAsB;CAEzD,OACE,qBAAC,cAAD;EAAc,WAAW;EAAG,IAAI;GAAE,YAAY;GAAG,eAAe;EAAI;YAApE;GACG,iBAAiB,SAAS,IAAI,IAAI,oBAAC,YAAD,CAAa,CAAA,IAAI;GACnD,iBACC,oBAAC,KAAD;IAAK,IAAI;KAAE,MAAM;KAAG,aAAa;IAAE;cACjC,oBAAC,sBAAD,CAAuB,CAAA;GACpB,CAAA,IAEL,oBAAC,YAAD;IACE,OAAO,UAAU,WAAW;IAC5B,QAAQ,WAAW,+BAA+B;IAClD,IAAI;KACF,UAAU,UAAU,KAAK;KACzB,YAAY;KACZ,MAAM;IACR;cAEC;GACS,CAAA;GAEb,aAAa,iBAAiB,OAC7B,qBAAC,yBAAD,EAAA,UAAA;IACG,QAAQ,eAAe,CAAC,UAAU,WAAW,oBAAC,kBAAD,CAAmB,CAAA;IACjE,oBAAC,gBAAD,CAAiB,CAAA;IAChB,YAAY,YAAY,CAAC,UAAU,oBAClC,oBAAC,mBAAD,EAAmB,QAAO,aAAc,CAAA,IACtC;GACmB,EAAA,CAAA,IAEzB,WACE,oBAAC,KAAD,EACE,IAAI;IACF,OAAO;IACP,QAAQ;GACV,EACD,CAAA;EAGO;;AAElB"}
1
+ {"version":3,"file":"NavigationHeader.js","names":[],"sources":["../../../../src/components/Header/NavigationHeader.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { Box, Typography } from '@mui/material'\nimport { useLocation } from '@tanstack/react-router'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\nimport { useNavigationTabsStore } from '../../stores/navigationTabs/useNavigationTabsStore.js'\nimport {\n backButtonRoutes,\n navigationRoutes,\n navigationRoutesValues,\n} from '../../utils/navigationRoutes.js'\nimport { ActivitiesButton } from './ActivitiesButton.js'\nimport { BackButton } from './BackButton.js'\nimport { CloseDrawerButton } from './CloseDrawerButton.js'\nimport { HeaderAppBar, HeaderControlsContainer } from './Header.style.js'\nimport { HeaderNavigationTabs } from './HeaderNavigationTabs.js'\nimport { SettingsButton } from './SettingsButton.js'\n\nexport const NavigationHeader: React.FC = () => {\n const { hiddenUI, variant, defaultUI } = useWidgetConfig()\n const navigationTabsCount = useNavigationTabsStore(\n (state) => state.tabs.length\n )\n const { account } = useAccount()\n const [element, title] = useHeaderStore((state) => [\n state.element,\n state.title,\n ])\n const { pathname } = useLocation()\n const cleanedPathname = pathname.endsWith('/')\n ? pathname.slice(0, -1)\n : pathname\n const path = cleanedPathname.substring(cleanedPathname.lastIndexOf('/') + 1)\n const hasPath = navigationRoutesValues.includes(path)\n\n // The store resolves which tabs to show (split Swap/Bridge or configured\n // navigation tabs); the header just reflects whether there are any.\n const showHeaderTabs = !hasPath && navigationTabsCount > 0\n\n return (\n <HeaderAppBar elevation={0} sx={{ paddingTop: 1, paddingBottom: 0.5 }}>\n {backButtonRoutes.includes(path) ? <BackButton /> : null}\n {showHeaderTabs ? (\n <Box sx={{ flex: 1, marginRight: 1 }}>\n <HeaderNavigationTabs />\n </Box>\n ) : (\n <Typography\n align={hasPath ? 'center' : 'left'}\n noWrap={defaultUI?.navigationHeaderTitleNoWrap ?? true}\n sx={{\n fontSize: hasPath ? 18 : 24,\n fontWeight: '700',\n flex: 1,\n }}\n >\n {title}\n </Typography>\n )}\n {pathname === navigationRoutes.home ? (\n <HeaderControlsContainer>\n {account.isConnected && !hiddenUI?.history && <ActivitiesButton />}\n <SettingsButton />\n {variant === 'drawer' && !hiddenUI?.drawerCloseButton ? (\n <CloseDrawerButton header=\"navigation\" />\n ) : null}\n </HeaderControlsContainer>\n ) : (\n element || (\n <Box\n sx={{\n width: 28,\n height: 40,\n }}\n />\n )\n )}\n </HeaderAppBar>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAa,yBAAmC;CAC9C,MAAM,EAAE,UAAU,SAAS,cAAc,gBAAgB;CACzD,MAAM,sBAAsB,wBACzB,UAAU,MAAM,KAAK,MACxB;CACA,MAAM,EAAE,YAAY,WAAW;CAC/B,MAAM,CAAC,SAAS,SAAS,gBAAgB,UAAU,CACjD,MAAM,SACN,MAAM,KACR,CAAC;CACD,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,kBAAkB,SAAS,SAAS,GAAG,IACzC,SAAS,MAAM,GAAG,EAAE,IACpB;CACJ,MAAM,OAAO,gBAAgB,UAAU,gBAAgB,YAAY,GAAG,IAAI,CAAC;CAC3E,MAAM,UAAU,uBAAuB,SAAS,IAAI;CAIpD,MAAM,iBAAiB,CAAC,WAAW,sBAAsB;CAEzD,OACE,qBAAC,cAAD;EAAc,WAAW;EAAG,IAAI;GAAE,YAAY;GAAG,eAAe;EAAI;EAApE,UAAA;GACG,iBAAiB,SAAS,IAAI,IAAI,oBAAC,YAAD,CAAa,CAAA,IAAI;GACnD,iBACC,oBAAC,KAAD;IAAK,IAAI;KAAE,MAAM;KAAG,aAAa;IAAE;IACjC,UAAA,oBAAC,sBAAD,CAAuB,CAAA;GACpB,CAAA,IAEL,oBAAC,YAAD;IACE,OAAO,UAAU,WAAW;IAC5B,QAAQ,WAAW,+BAA+B;IAClD,IAAI;KACF,UAAU,UAAU,KAAK;KACzB,YAAY;KACZ,MAAM;IACR;IAEC,UAAA;GACS,CAAA;GAEb,aAAa,iBAAiB,OAC7B,qBAAC,yBAAD,EAAA,UAAA;IACG,QAAQ,eAAe,CAAC,UAAU,WAAW,oBAAC,kBAAD,CAAmB,CAAA;IACjE,oBAAC,gBAAD,CAAiB,CAAA;IAChB,YAAY,YAAY,CAAC,UAAU,oBAClC,oBAAC,mBAAD,EAAmB,QAAO,aAAc,CAAA,IACtC;GACmB,EAAA,CAAA,IAEzB,WACE,oBAAC,KAAD,EACE,IAAI;IACF,OAAO;IACP,QAAQ;GACV,EACD,CAAA;EAGO;;AAElB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsButton.js","names":[],"sources":["../../../../src/components/Header/SettingsButton.tsx"],"sourcesContent":["import Settings from '@mui/icons-material/Settings'\nimport { Tooltip } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useSettingMonitor } from '../../hooks/useSettingMonitor.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport {\n SettingsIconBadge,\n SettingsIconButton,\n} from './SettingsButton.style.js'\n\nexport const SettingsButton = (): JSX.Element => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n\n const { isCustomRouteSettings, isRouteSettingsWithWarnings } =\n useSettingMonitor()\n\n const variant = isRouteSettingsWithWarnings\n ? 'warning'\n : isCustomRouteSettings\n ? 'info'\n : undefined\n\n const tooltipMessage = variant\n ? t('tooltip.settingsModified')\n : t('header.settings')\n\n return (\n <Tooltip title={tooltipMessage}>\n <SettingsIconButton\n size=\"medium\"\n onClick={() => navigate({ to: navigationRoutes.settings })}\n variant={variant}\n >\n {variant ? (\n <SettingsIconBadge variant=\"dot\" color={variant}>\n <Settings />\n </SettingsIconBadge>\n ) : (\n <Settings />\n )}\n </SettingsIconButton>\n </Tooltip>\n )\n}\n"],"mappings":";;;;;;;;;AAYA,MAAa,uBAAoC;CAC/C,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAE7B,MAAM,EAAE,uBAAuB,gCAC7B,kBAAkB;CAEpB,MAAM,UAAU,8BACZ,YACA,wBACE,SACA,KAAA;CAMN,OACE,oBAAC,SAAD;EAAS,OALY,UACnB,EAAE,0BAA0B,IAC5B,EAAE,iBAAiB;YAInB,oBAAC,oBAAD;GACE,MAAK;GACL,eAAe,SAAS,EAAE,IAAI,iBAAiB,SAAS,CAAC;GAChD;aAER,UACC,oBAAC,mBAAD;IAAmB,SAAQ;IAAM,OAAO;cACtC,oBAAC,UAAD,CAAW,CAAA;GACM,CAAA,IAEnB,oBAAC,UAAD,CAAW,CAAA;EAEK,CAAA;CACb,CAAA;AAEb"}
1
+ {"version":3,"file":"SettingsButton.js","names":[],"sources":["../../../../src/components/Header/SettingsButton.tsx"],"sourcesContent":["import Settings from '@mui/icons-material/Settings'\nimport { Tooltip } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useSettingMonitor } from '../../hooks/useSettingMonitor.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport {\n SettingsIconBadge,\n SettingsIconButton,\n} from './SettingsButton.style.js'\n\nexport const SettingsButton = (): JSX.Element => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n\n const { isCustomRouteSettings, isRouteSettingsWithWarnings } =\n useSettingMonitor()\n\n const variant = isRouteSettingsWithWarnings\n ? 'warning'\n : isCustomRouteSettings\n ? 'info'\n : undefined\n\n const tooltipMessage = variant\n ? t('tooltip.settingsModified')\n : t('header.settings')\n\n return (\n <Tooltip title={tooltipMessage}>\n <SettingsIconButton\n size=\"medium\"\n onClick={() => navigate({ to: navigationRoutes.settings })}\n variant={variant}\n >\n {variant ? (\n <SettingsIconBadge variant=\"dot\" color={variant}>\n <Settings />\n </SettingsIconBadge>\n ) : (\n <Settings />\n )}\n </SettingsIconButton>\n </Tooltip>\n )\n}\n"],"mappings":";;;;;;;;;AAYA,MAAa,uBAAoC;CAC/C,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAE7B,MAAM,EAAE,uBAAuB,gCAC7B,kBAAkB;CAEpB,MAAM,UAAU,8BACZ,YACA,wBACE,SACA,KAAA;CAMN,OACE,oBAAC,SAAD;EAAS,OALY,UACnB,EAAE,0BAA0B,IAC5B,EAAE,iBAAiB;EAInB,UAAA,oBAAC,oBAAD;GACE,MAAK;GACL,eAAe,SAAS,EAAE,IAAI,iBAAiB,SAAS,CAAC;GAChD;GAER,UAAA,UACC,oBAAC,mBAAD;IAAmB,SAAQ;IAAM,OAAO;IACtC,UAAA,oBAAC,UAAD,CAAW,CAAA;GACM,CAAA,IAEnB,oBAAC,UAAD,CAAW,CAAA;EAEK,CAAA;CACb,CAAA;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"WalletHeader.js","names":[],"sources":["../../../../src/components/Header/WalletHeader.tsx"],"sourcesContent":["import {\n getConnectorIcon,\n useAccount,\n useWalletMenu,\n} from '@lifi/wallet-management'\nimport type { Account } from '@lifi/widget-provider'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Avatar, Badge } from '@mui/material'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useExternalWalletProvider } from '../../providers/WalletProvider/useExternalWalletProvider.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { SmallAvatar } from '../Avatar/SmallAvatar.js'\nimport { CloseDrawerButton } from './CloseDrawerButton.js'\nimport {\n DrawerWalletContainer,\n HeaderAppBar,\n WalletAvatar,\n WalletButton,\n} from './Header.style.js'\nimport { WalletMenu } from './WalletMenu.js'\nimport { WalletMenuContainer } from './WalletMenu.style.js'\n\nconst useInternalWalletManagement = () => {\n const { hiddenUI } = useWidgetConfig()\n const { useExternalWalletProvidersOnly } = useExternalWalletProvider()\n\n const isWalletMenuHidden = hiddenUI?.walletMenu\n\n const shouldShowWalletMenu =\n !useExternalWalletProvidersOnly && !isWalletMenuHidden\n\n return {\n shouldShowWalletMenu,\n }\n}\n\nexport const WalletHeader: React.FC = () => {\n const { shouldShowWalletMenu } = useInternalWalletManagement()\n\n return shouldShowWalletMenu ? (\n <HeaderAppBar elevation={0} sx={{ justifyContent: 'flex-end' }}>\n <WalletMenuButton />\n </HeaderAppBar>\n ) : null\n}\n\nconst WalletMenuButton: React.FC = () => {\n const { variant, hiddenUI } = useWidgetConfig()\n const { account, accounts } = useAccount()\n\n const [fromChainId] = useFieldValues('fromChain')\n const { chain: fromChain } = useChain(fromChainId)\n\n const activeAccount =\n (fromChain\n ? accounts.find((account) => account.chainType === fromChain.chainType)\n : undefined) || account\n\n if (variant === 'drawer') {\n return (\n <DrawerWalletContainer>\n {activeAccount.isConnected ? (\n <ConnectedButton account={activeAccount} />\n ) : (\n <ConnectButton />\n )}\n {!hiddenUI?.drawerCloseButton ? (\n <CloseDrawerButton header=\"wallet\" />\n ) : null}\n </DrawerWalletContainer>\n )\n }\n return activeAccount.isConnected ? (\n <ConnectedButton account={activeAccount} />\n ) : (\n <ConnectButton />\n )\n}\n\nconst ConnectButton = () => {\n const { t } = useTranslation()\n const { walletConfig, variant } = useWidgetConfig()\n const { openWalletMenu } = useWalletMenu()\n const connect = async (event: React.MouseEvent<HTMLElement>) => {\n if (\n !walletConfig?.usePartialWalletManagement &&\n !walletConfig?.forceInternalWalletManagement &&\n walletConfig?.onConnect\n ) {\n walletConfig.onConnect()\n return\n }\n openWalletMenu()\n event.currentTarget.blur() // Remove focus to prevent accessibility issues when opening drawer\n }\n\n const walletPosition = variant === 'drawer' ? 'start' : 'end'\n\n return (\n <WalletButton\n withOffset={walletPosition === 'end'}\n endIcon={walletPosition === 'end' ? <Wallet /> : undefined}\n startIcon={\n walletPosition === 'start' ? (\n <Wallet sx={{ marginLeft: -0.25 }} />\n ) : undefined\n }\n onClick={connect}\n >\n {t('button.connectWallet')}\n </WalletButton>\n )\n}\n\nconst ConnectedButton = ({ account }: { account: Account }) => {\n const { chain } = useChain(account.chainId)\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const walletAddress = shortenAddress(account.address)\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n event.currentTarget.blur() // Remove focus to prevent accessibility issues when opening drawer\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n return (\n <>\n <WalletButton\n withOffset\n endIcon={<ExpandMore />}\n startIcon={\n chain?.logoURI ? (\n <Badge\n overlap=\"circular\"\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n badgeContent={\n <SmallAvatar\n src={chain?.logoURI}\n alt={chain?.name}\n sx={{ width: 12, height: 12 }}\n >\n {chain?.name[0]}\n </SmallAvatar>\n }\n >\n <WalletAvatar\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n >\n {account.connector?.name[0]}\n </WalletAvatar>\n </Badge>\n ) : (\n <Avatar\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n sx={{ width: 24, height: 24 }}\n >\n {account.connector?.name[0]}\n </Avatar>\n )\n }\n onClick={handleClick}\n >\n {walletAddress}\n </WalletButton>\n <WalletMenuContainer\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <WalletMenu onClose={handleClose} />\n </WalletMenuContainer>\n </>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"WalletHeader.js","names":[],"sources":["../../../../src/components/Header/WalletHeader.tsx"],"sourcesContent":["import {\n getConnectorIcon,\n useAccount,\n useWalletMenu,\n} from '@lifi/wallet-management'\nimport type { Account } from '@lifi/widget-provider'\nimport ExpandMore from '@mui/icons-material/ExpandMore'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Avatar, Badge } from '@mui/material'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useExternalWalletProvider } from '../../providers/WalletProvider/useExternalWalletProvider.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { SmallAvatar } from '../Avatar/SmallAvatar.js'\nimport { CloseDrawerButton } from './CloseDrawerButton.js'\nimport {\n DrawerWalletContainer,\n HeaderAppBar,\n WalletAvatar,\n WalletButton,\n} from './Header.style.js'\nimport { WalletMenu } from './WalletMenu.js'\nimport { WalletMenuContainer } from './WalletMenu.style.js'\n\nconst useInternalWalletManagement = () => {\n const { hiddenUI } = useWidgetConfig()\n const { useExternalWalletProvidersOnly } = useExternalWalletProvider()\n\n const isWalletMenuHidden = hiddenUI?.walletMenu\n\n const shouldShowWalletMenu =\n !useExternalWalletProvidersOnly && !isWalletMenuHidden\n\n return {\n shouldShowWalletMenu,\n }\n}\n\nexport const WalletHeader: React.FC = () => {\n const { shouldShowWalletMenu } = useInternalWalletManagement()\n\n return shouldShowWalletMenu ? (\n <HeaderAppBar elevation={0} sx={{ justifyContent: 'flex-end' }}>\n <WalletMenuButton />\n </HeaderAppBar>\n ) : null\n}\n\nconst WalletMenuButton: React.FC = () => {\n const { variant, hiddenUI } = useWidgetConfig()\n const { account, accounts } = useAccount()\n\n const [fromChainId] = useFieldValues('fromChain')\n const { chain: fromChain } = useChain(fromChainId)\n\n const activeAccount =\n (fromChain\n ? accounts.find((account) => account.chainType === fromChain.chainType)\n : undefined) || account\n\n if (variant === 'drawer') {\n return (\n <DrawerWalletContainer>\n {activeAccount.isConnected ? (\n <ConnectedButton account={activeAccount} />\n ) : (\n <ConnectButton />\n )}\n {!hiddenUI?.drawerCloseButton ? (\n <CloseDrawerButton header=\"wallet\" />\n ) : null}\n </DrawerWalletContainer>\n )\n }\n return activeAccount.isConnected ? (\n <ConnectedButton account={activeAccount} />\n ) : (\n <ConnectButton />\n )\n}\n\nconst ConnectButton = () => {\n const { t } = useTranslation()\n const { walletConfig, variant } = useWidgetConfig()\n const { openWalletMenu } = useWalletMenu()\n const connect = async (event: React.MouseEvent<HTMLElement>) => {\n if (\n !walletConfig?.usePartialWalletManagement &&\n !walletConfig?.forceInternalWalletManagement &&\n walletConfig?.onConnect\n ) {\n walletConfig.onConnect()\n return\n }\n openWalletMenu()\n event.currentTarget.blur() // Remove focus to prevent accessibility issues when opening drawer\n }\n\n const walletPosition = variant === 'drawer' ? 'start' : 'end'\n\n return (\n <WalletButton\n withOffset={walletPosition === 'end'}\n endIcon={walletPosition === 'end' ? <Wallet /> : undefined}\n startIcon={\n walletPosition === 'start' ? (\n <Wallet sx={{ marginLeft: -0.25 }} />\n ) : undefined\n }\n onClick={connect}\n >\n {t('button.connectWallet')}\n </WalletButton>\n )\n}\n\nconst ConnectedButton = ({ account }: { account: Account }) => {\n const { chain } = useChain(account.chainId)\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const walletAddress = shortenAddress(account.address)\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n event.currentTarget.blur() // Remove focus to prevent accessibility issues when opening drawer\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n return (\n <>\n <WalletButton\n withOffset\n endIcon={<ExpandMore />}\n startIcon={\n chain?.logoURI ? (\n <Badge\n overlap=\"circular\"\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n badgeContent={\n <SmallAvatar\n src={chain?.logoURI}\n alt={chain?.name}\n sx={{ width: 12, height: 12 }}\n >\n {chain?.name[0]}\n </SmallAvatar>\n }\n >\n <WalletAvatar\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n >\n {account.connector?.name[0]}\n </WalletAvatar>\n </Badge>\n ) : (\n <Avatar\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n sx={{ width: 24, height: 24 }}\n >\n {account.connector?.name[0]}\n </Avatar>\n )\n }\n onClick={handleClick}\n >\n {walletAddress}\n </WalletButton>\n <WalletMenuContainer\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <WalletMenu onClose={handleClose} />\n </WalletMenuContainer>\n </>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WalletMenu.js","names":[],"sources":["../../../../src/components/Header/WalletMenu.tsx"],"sourcesContent":["import {\n getConnectorIcon,\n useAccount,\n useWalletMenu,\n} from '@lifi/wallet-management'\nimport ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNewRounded from '@mui/icons-material/OpenInNewRounded'\nimport PowerSettingsNewRounded from '@mui/icons-material/PowerSettingsNewRounded'\nimport { Avatar, Badge, Box, Button, IconButton, MenuItem } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAvailableChains } from '../../hooks/useAvailableChains.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { AvatarMasked } from '../Avatar/Avatar.style.js'\nimport { SmallAvatar } from '../Avatar/SmallAvatar.js'\nimport { DisconnectIconButton } from './DisconnectIconButton.js'\n\nexport const WalletMenu = ({\n onClose,\n}: {\n onClose: () => void\n}): JSX.Element => {\n const { t } = useTranslation()\n const { accounts } = useAccount()\n const { getChainById } = useAvailableChains()\n const { openWalletMenu } = useWalletMenu()\n const connect = async () => {\n openWalletMenu()\n onClose()\n }\n const { getAddressLink } = useExplorer()\n\n return (\n <>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {accounts.map((account) => {\n const chain = getChainById(account.chainId)\n const walletAddress = shortenAddress(account.address)\n const handleCopyAddress = async () => {\n await navigator.clipboard.writeText(account.address ?? '')\n onClose()\n }\n\n return (\n <MenuItem key={account.address} disableTouchRipple>\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {chain?.logoURI ? (\n <Badge\n overlap=\"circular\"\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n badgeContent={\n <SmallAvatar src={chain?.logoURI} alt={chain?.name}>\n {chain?.name[0]}\n </SmallAvatar>\n }\n sx={{ marginRight: 1.5 }}\n >\n <AvatarMasked\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n >\n {account.connector?.name[0]}\n </AvatarMasked>\n </Badge>\n ) : (\n <Avatar\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n sx={{\n marginRight: 1.5,\n }}\n >\n {account.connector?.name[0]}\n </Avatar>\n )}\n {walletAddress}\n </Box>\n <Box\n sx={{\n ml: 2,\n }}\n >\n <IconButton size=\"medium\" onClick={handleCopyAddress}>\n <ContentCopyRounded />\n </IconButton>\n <IconButton\n size=\"medium\"\n component=\"a\"\n onClick={onClose}\n href={\n account.address\n ? getAddressLink(account.address, chain)\n : undefined\n }\n target=\"_blank\"\n >\n <OpenInNewRounded />\n </IconButton>\n <DisconnectIconButton account={account} />\n </Box>\n </MenuItem>\n )\n })}\n </Box>\n <Button\n onClick={connect}\n fullWidth\n startIcon={<PowerSettingsNewRounded />}\n sx={{\n marginTop: 1,\n }}\n >\n {t('button.connectAnotherWallet')}\n </Button>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,MAAa,cAAc,EACzB,cAGiB;CACjB,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,EAAE,iBAAiB,mBAAmB;CAC5C,MAAM,EAAE,mBAAmB,cAAc;CACzC,MAAM,UAAU,YAAY;EAC1B,eAAe;EACf,QAAQ;CACV;CACA,MAAM,EAAE,mBAAmB,YAAY;CAEvC,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,KAAD;EACE,IAAI;GACF,SAAS;GACT,eAAe;EACjB;YAEC,SAAS,KAAK,YAAY;GACzB,MAAM,QAAQ,aAAa,QAAQ,OAAO;GAC1C,MAAM,gBAAgB,eAAe,QAAQ,OAAO;GACpD,MAAM,oBAAoB,YAAY;IACpC,MAAM,UAAU,UAAU,UAAU,QAAQ,WAAW,EAAE;IACzD,QAAQ;GACV;GAEA,OACE,qBAAC,UAAD;IAAgC,oBAAA;cAAhC,CACE,qBAAC,KAAD;KACE,IAAI;MACF,MAAM;MACN,SAAS;MACT,YAAY;KACd;eALF,CAOG,OAAO,UACN,oBAAC,OAAD;MACE,SAAQ;MACR,cAAc;OAAE,UAAU;OAAU,YAAY;MAAQ;MACxD,cACE,oBAAC,aAAD;OAAa,KAAK,OAAO;OAAS,KAAK,OAAO;iBAC3C,OAAO,KAAK;MACF,CAAA;MAEf,IAAI,EAAE,aAAa,IAAI;gBAEvB,oBAAC,cAAD;OACE,KAAK,iBAAiB,QAAQ,SAAS;OACvC,KAAK,QAAQ,WAAW;iBAEvB,QAAQ,WAAW,KAAK;MACb,CAAA;KACT,CAAA,IAEP,oBAAC,QAAD;MACE,KAAK,iBAAiB,QAAQ,SAAS;MACvC,KAAK,QAAQ,WAAW;MACxB,IAAI,EACF,aAAa,IACf;gBAEC,QAAQ,WAAW,KAAK;KACnB,CAAA,GAET,aACE;QACL,qBAAC,KAAD;KACE,IAAI,EACF,IAAI,EACN;eAHF;MAKE,oBAAC,YAAD;OAAY,MAAK;OAAS,SAAS;iBACjC,oBAAC,oBAAD,CAAqB,CAAA;MACX,CAAA;MACZ,oBAAC,YAAD;OACE,MAAK;OACL,WAAU;OACV,SAAS;OACT,MACE,QAAQ,UACJ,eAAe,QAAQ,SAAS,KAAK,IACrC,KAAA;OAEN,QAAO;iBAEP,oBAAC,kBAAD,CAAmB,CAAA;MACT,CAAA;MACZ,oBAAC,sBAAD,EAA+B,QAAU,CAAA;KACtC;MACG;MA9DK,QAAQ,OA8Db;EAEd,CAAC;CACE,CAAA,GACL,oBAAC,QAAD;EACE,SAAS;EACT,WAAA;EACA,WAAW,oBAAC,yBAAD,CAA0B,CAAA;EACrC,IAAI,EACF,WAAW,EACb;YAEC,EAAE,6BAA6B;CAC1B,CAAA,CACR,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"WalletMenu.js","names":[],"sources":["../../../../src/components/Header/WalletMenu.tsx"],"sourcesContent":["import {\n getConnectorIcon,\n useAccount,\n useWalletMenu,\n} from '@lifi/wallet-management'\nimport ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNewRounded from '@mui/icons-material/OpenInNewRounded'\nimport PowerSettingsNewRounded from '@mui/icons-material/PowerSettingsNewRounded'\nimport { Avatar, Badge, Box, Button, IconButton, MenuItem } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAvailableChains } from '../../hooks/useAvailableChains.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { AvatarMasked } from '../Avatar/Avatar.style.js'\nimport { SmallAvatar } from '../Avatar/SmallAvatar.js'\nimport { DisconnectIconButton } from './DisconnectIconButton.js'\n\nexport const WalletMenu = ({\n onClose,\n}: {\n onClose: () => void\n}): JSX.Element => {\n const { t } = useTranslation()\n const { accounts } = useAccount()\n const { getChainById } = useAvailableChains()\n const { openWalletMenu } = useWalletMenu()\n const connect = async () => {\n openWalletMenu()\n onClose()\n }\n const { getAddressLink } = useExplorer()\n\n return (\n <>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {accounts.map((account) => {\n const chain = getChainById(account.chainId)\n const walletAddress = shortenAddress(account.address)\n const handleCopyAddress = async () => {\n await navigator.clipboard.writeText(account.address ?? '')\n onClose()\n }\n\n return (\n <MenuItem key={account.address} disableTouchRipple>\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {chain?.logoURI ? (\n <Badge\n overlap=\"circular\"\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n badgeContent={\n <SmallAvatar src={chain?.logoURI} alt={chain?.name}>\n {chain?.name[0]}\n </SmallAvatar>\n }\n sx={{ marginRight: 1.5 }}\n >\n <AvatarMasked\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n >\n {account.connector?.name[0]}\n </AvatarMasked>\n </Badge>\n ) : (\n <Avatar\n src={getConnectorIcon(account.connector)}\n alt={account.connector?.name}\n sx={{\n marginRight: 1.5,\n }}\n >\n {account.connector?.name[0]}\n </Avatar>\n )}\n {walletAddress}\n </Box>\n <Box\n sx={{\n ml: 2,\n }}\n >\n <IconButton size=\"medium\" onClick={handleCopyAddress}>\n <ContentCopyRounded />\n </IconButton>\n <IconButton\n size=\"medium\"\n component=\"a\"\n onClick={onClose}\n href={\n account.address\n ? getAddressLink(account.address, chain)\n : undefined\n }\n target=\"_blank\"\n >\n <OpenInNewRounded />\n </IconButton>\n <DisconnectIconButton account={account} />\n </Box>\n </MenuItem>\n )\n })}\n </Box>\n <Button\n onClick={connect}\n fullWidth\n startIcon={<PowerSettingsNewRounded />}\n sx={{\n marginTop: 1,\n }}\n >\n {t('button.connectAnotherWallet')}\n </Button>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,MAAa,cAAc,EACzB,cAGiB;CACjB,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,EAAE,iBAAiB,mBAAmB;CAC5C,MAAM,EAAE,mBAAmB,cAAc;CACzC,MAAM,UAAU,YAAY;EAC1B,eAAe;EACf,QAAQ;CACV;CACA,MAAM,EAAE,mBAAmB,YAAY;CAEvC,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,KAAD;EACE,IAAI;GACF,SAAS;GACT,eAAe;EACjB;EAEC,UAAA,SAAS,KAAK,YAAY;GACzB,MAAM,QAAQ,aAAa,QAAQ,OAAO;GAC1C,MAAM,gBAAgB,eAAe,QAAQ,OAAO;GACpD,MAAM,oBAAoB,YAAY;IACpC,MAAM,UAAU,UAAU,UAAU,QAAQ,WAAW,EAAE;IACzD,QAAQ;GACV;GAEA,OACE,qBAAC,UAAD;IAAgC,oBAAA;IAAhC,UAAA,CACE,qBAAC,KAAD;KACE,IAAI;MACF,MAAM;MACN,SAAS;MACT,YAAY;KACd;KALF,UAAA,CAOG,OAAO,UACN,oBAAC,OAAD;MACE,SAAQ;MACR,cAAc;OAAE,UAAU;OAAU,YAAY;MAAQ;MACxD,cACE,oBAAC,aAAD;OAAa,KAAK,OAAO;OAAS,KAAK,OAAO;OAC3C,UAAA,OAAO,KAAK;MACF,CAAA;MAEf,IAAI,EAAE,aAAa,IAAI;MAEvB,UAAA,oBAAC,cAAD;OACE,KAAK,iBAAiB,QAAQ,SAAS;OACvC,KAAK,QAAQ,WAAW;OAEvB,UAAA,QAAQ,WAAW,KAAK;MACb,CAAA;KACT,CAAA,IAEP,oBAAC,QAAD;MACE,KAAK,iBAAiB,QAAQ,SAAS;MACvC,KAAK,QAAQ,WAAW;MACxB,IAAI,EACF,aAAa,IACf;MAEC,UAAA,QAAQ,WAAW,KAAK;KACnB,CAAA,GAET,aACE;IACL,CAAA,GAAA,qBAAC,KAAD;KACE,IAAI,EACF,IAAI,EACN;KAHF,UAAA;MAKE,oBAAC,YAAD;OAAY,MAAK;OAAS,SAAS;OACjC,UAAA,oBAAC,oBAAD,CAAqB,CAAA;MACX,CAAA;MACZ,oBAAC,YAAD;OACE,MAAK;OACL,WAAU;OACV,SAAS;OACT,MACE,QAAQ,UACJ,eAAe,QAAQ,SAAS,KAAK,IACrC,KAAA;OAEN,QAAO;OAEP,UAAA,oBAAC,kBAAD,CAAmB,CAAA;MACT,CAAA;MACZ,oBAAC,sBAAD,EAA+B,QAAU,CAAA;KACtC;IACG,CAAA,CAAA;GA9DK,GAAA,QAAQ,OA8Db;EAEd,CAAC;CACE,CAAA,GACL,oBAAC,QAAD;EACE,SAAS;EACT,WAAA;EACA,WAAW,oBAAC,yBAAD,CAA0B,CAAA;EACrC,IAAI,EACF,WAAW,EACb;EAEC,UAAA,EAAE,6BAA6B;CAC1B,CAAA,CACR,EAAA,CAAA;AAEN"}
@@ -0,0 +1,11 @@
1
+ import { StatusIcon } from "./statusIcons.js";
2
+ import { BoxProps } from "@mui/material";
3
+ //#region src/components/IconCircle/IconCircle.d.ts
4
+ interface IconCircleProps extends Omit<BoxProps, "color"> {
5
+ status: StatusIcon;
6
+ size?: number;
7
+ }
8
+ declare const IconCircle: React.FC<IconCircleProps>;
9
+ //#endregion
10
+ export { IconCircle };
11
+ //# sourceMappingURL=IconCircle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconCircle.d.ts","names":[],"sources":["../../../../src/components/IconCircle/IconCircle.tsx"],"mappings":";;;UASU,wBAAwB,KAAK;EACrC,QAAQ;EACR;;cAGW,YAAY,MAAM,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"IconCircle.js","names":[],"sources":["../../../../src/components/IconCircle/IconCircle.tsx"],"sourcesContent":["import type { BoxProps } from '@mui/material'\nimport { useTheme } from '@mui/material'\nimport {\n getStatusColor,\n IconCircleRoot,\n iconCircleSize,\n} from './IconCircle.style.js'\nimport { type StatusIcon, statusIcons } from './statusIcons.js'\n\ninterface IconCircleProps extends Omit<BoxProps, 'color'> {\n status: StatusIcon\n size?: number\n}\n\nexport const IconCircle: React.FC<IconCircleProps> = ({\n status,\n size = iconCircleSize,\n ...rest\n}) => {\n const theme = useTheme()\n const colorConfig = getStatusColor(status, theme)\n const Icon = statusIcons[status]\n\n return (\n <IconCircleRoot colorConfig={colorConfig} circleSize={size} {...rest}>\n <Icon />\n </IconCircleRoot>\n )\n}\n"],"mappings":";;;;;AAcA,MAAa,cAAyC,EACpD,QACA,OAAA,IACA,GAAG,WACC;CAEJ,MAAM,cAAc,eAAe,QADrB,SACiC,CAAC;CAChD,MAAM,OAAO,YAAY;CAEzB,OACE,oBAAC,gBAAD;EAA6B;EAAa,YAAY;EAAM,GAAI;YAC9D,oBAAC,MAAD,CAAO,CAAA;CACO,CAAA;AAEpB"}
1
+ {"version":3,"file":"IconCircle.js","names":[],"sources":["../../../../src/components/IconCircle/IconCircle.tsx"],"sourcesContent":["import type { BoxProps } from '@mui/material'\nimport { useTheme } from '@mui/material'\nimport {\n getStatusColor,\n IconCircleRoot,\n iconCircleSize,\n} from './IconCircle.style.js'\nimport { type StatusIcon, statusIcons } from './statusIcons.js'\n\ninterface IconCircleProps extends Omit<BoxProps, 'color'> {\n status: StatusIcon\n size?: number\n}\n\nexport const IconCircle: React.FC<IconCircleProps> = ({\n status,\n size = iconCircleSize,\n ...rest\n}) => {\n const theme = useTheme()\n const colorConfig = getStatusColor(status, theme)\n const Icon = statusIcons[status]\n\n return (\n <IconCircleRoot colorConfig={colorConfig} circleSize={size} {...rest}>\n <Icon />\n </IconCircleRoot>\n )\n}\n"],"mappings":";;;;;AAcA,MAAa,cAAyC,EACpD,QACA,OAAA,IACA,GAAG,WACC;CAEJ,MAAM,cAAc,eAAe,QADrB,SACiC,CAAC;CAChD,MAAM,OAAO,YAAY;CAEzB,OACE,oBAAC,gBAAD;EAA6B;EAAa,YAAY;EAAM,GAAI;EAC9D,UAAA,oBAAC,MAAD,CAAO,CAAA;CACO,CAAA;AAEpB"}
@@ -0,0 +1,6 @@
1
+ import "@mui/material";
2
+ //#region src/components/IconCircle/statusIcons.d.ts
3
+ type StatusIcon = "success" | "error" | "warning" | "info";
4
+ //#endregion
5
+ export { StatusIcon };
6
+ //# sourceMappingURL=statusIcons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusIcons.d.ts","names":[],"sources":["../../../../src/components/IconCircle/statusIcons.ts"],"mappings":";;KAMY"}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import { BoxProps } from "@mui/material";
3
+ //#region src/components/IconTypography.d.ts
4
+ declare const IconTypography: React.FC<BoxProps>;
5
+ //#endregion
6
+ export { IconTypography };
7
+ //# sourceMappingURL=IconTypography.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconTypography.d.ts","names":[],"sources":["../../../src/components/IconTypography.ts"],"mappings":";;;cAIa,gBAAgB,MAAM,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"LimitOrderSettings.js","names":["Container","Card","Switch"],"sources":["../../../../src/components/LimitOrderSettings/LimitOrderSettings.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check'\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'\nimport type { BoxProps } from '@mui/material'\nimport { Menu, MenuItem } from '@mui/material'\nimport { type ChangeEvent, type JSX, type MouseEvent, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { formatDuration } from '../../utils/format.js'\nimport { Card } from '../Card/Card.js'\nimport { Switch } from '../Switch.js'\nimport {\n Container,\n ExpiryValue,\n SettingItemButton,\n SettingItemTitle,\n SettingItemValue,\n SettingsRow,\n ToggleLabel,\n} from './LimitOrderSettings.style.js'\n\n/** Selectable order-validity durations, in seconds. */\nconst DURATIONS = [3600, 86400, 604800, 2592000, 31536000]\n\nexport const LimitOrderSettings: React.FC<BoxProps> = (props): JSX.Element => {\n const { t, i18n } = useTranslation()\n const [validUntil, partiallyFillable] = useFieldValues(\n 'validUntil',\n 'partiallyFillable'\n )\n const { setFieldValue } = useFieldActions()\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const open = Boolean(anchorEl)\n\n const handleOpen = (event: MouseEvent<HTMLElement>): void => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = (): void => {\n setAnchorEl(null)\n }\n\n const handleSelect = (duration: number): void => {\n setFieldValue('validUntil', duration)\n setAnchorEl(null)\n }\n\n const handlePartiallyFillableChange = (\n event: ChangeEvent<HTMLInputElement>\n ): void => {\n setFieldValue('partiallyFillable', event.target.checked)\n }\n\n return (\n <Container {...props}>\n <Card>\n <SettingItemButton\n onClick={handleOpen}\n disableRipple\n aria-haspopup=\"menu\"\n aria-expanded={open}\n >\n <SettingItemTitle>{t('limitOrder.expiresIn')}</SettingItemTitle>\n <ExpiryValue>\n <SettingItemValue>\n {formatDuration(validUntil, i18n.language, 'long')}\n </SettingItemValue>\n <KeyboardArrowDownIcon\n sx={{ fontSize: 20, height: '18px', marginTop: '2px' }}\n />\n </ExpiryValue>\n </SettingItemButton>\n </Card>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: (theme) => ({\n border: `1px solid ${theme.vars.palette.grey[300]}`,\n boxShadow: 'none',\n ...theme.applyStyles('dark', {\n borderColor: theme.vars.palette.grey[800],\n }),\n }),\n },\n }}\n >\n {DURATIONS.map((duration) => (\n <MenuItem\n key={duration}\n onClick={() => handleSelect(duration)}\n sx={(theme) => ({\n justifyContent: 'space-between',\n gap: 4,\n fontSize: 14,\n fontWeight: 700,\n lineHeight: '18px',\n color: theme.vars.palette.text.primary,\n })}\n >\n {formatDuration(duration, i18n.language, 'long')}\n {duration === validUntil ? (\n <Check color=\"primary\" fontSize=\"small\" />\n ) : null}\n </MenuItem>\n ))}\n </Menu>\n <Card>\n <SettingsRow>\n <ToggleLabel>{t('limitOrder.partiallyFillable')}</ToggleLabel>\n <Switch\n checked={partiallyFillable}\n onChange={handlePartiallyFillableChange}\n aria-label={t('limitOrder.partiallyFillable')}\n />\n </SettingsRow>\n </Card>\n </Container>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAsBA,MAAM,YAAY;CAAC;CAAM;CAAO;CAAQ;CAAS;AAAQ;AAEzD,MAAa,sBAA0C,UAAuB;CAC5E,MAAM,EAAE,GAAG,SAAS,eAAe;CACnC,MAAM,CAAC,YAAY,qBAAqB,eACtC,cACA,mBACF;CACA,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,CAAC,UAAU,eAAe,SAA6B,IAAI;CACjE,MAAM,OAAO,QAAQ,QAAQ;CAE7B,MAAM,cAAc,UAAyC;EAC3D,YAAY,MAAM,aAAa;CACjC;CAEA,MAAM,oBAA0B;EAC9B,YAAY,IAAI;CAClB;CAEA,MAAM,gBAAgB,aAA2B;EAC/C,cAAc,cAAc,QAAQ;EACpC,YAAY,IAAI;CAClB;CAEA,MAAM,iCACJ,UACS;EACT,cAAc,qBAAqB,MAAM,OAAO,OAAO;CACzD;CAEA,OACE,qBAACA,aAAD;EAAW,GAAI;YAAf;GACE,oBAACC,QAAD,EAAA,UACE,qBAAC,mBAAD;IACE,SAAS;IACT,eAAA;IACA,iBAAc;IACd,iBAAe;cAJjB,CAME,oBAAC,kBAAD,EAAA,UAAmB,EAAE,sBAAsB,EAAoB,CAAA,GAC/D,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,kBAAD,EAAA,UACG,eAAe,YAAY,KAAK,UAAU,MAAM,EACjC,CAAA,GAClB,oBAAC,uBAAD,EACE,IAAI;KAAE,UAAU;KAAI,QAAQ;KAAQ,WAAW;IAAM,EACtD,CAAA,CACU,EAAA,CAAA,CACI;MACf,CAAA;GACN,oBAAC,MAAD;IACY;IACJ;IACN,SAAS;IACT,cAAc;KAAE,UAAU;KAAU,YAAY;IAAQ;IACxD,iBAAiB;KAAE,UAAU;KAAO,YAAY;IAAQ;IACxD,WAAW,EACT,OAAO,EACL,KAAK,WAAW;KACd,QAAQ,aAAa,MAAM,KAAK,QAAQ,KAAK;KAC7C,WAAW;KACX,GAAG,MAAM,YAAY,QAAQ,EAC3B,aAAa,MAAM,KAAK,QAAQ,KAAK,KACvC,CAAC;IACH,GACF,EACF;cAEC,UAAU,KAAK,aACd,qBAAC,UAAD;KAEE,eAAe,aAAa,QAAQ;KACpC,KAAK,WAAW;MACd,gBAAgB;MAChB,KAAK;MACL,UAAU;MACV,YAAY;MACZ,YAAY;MACZ,OAAO,MAAM,KAAK,QAAQ,KAAK;KACjC;eAVF,CAYG,eAAe,UAAU,KAAK,UAAU,MAAM,GAC9C,aAAa,aACZ,oBAAC,OAAD;MAAO,OAAM;MAAU,UAAS;KAAS,CAAA,IACvC,IACI;OAfH,QAeG,CACX;GACG,CAAA;GACN,oBAACA,QAAD,EAAA,UACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,aAAD,EAAA,UAAc,EAAE,8BAA8B,EAAe,CAAA,GAC7D,oBAACC,UAAD;IACE,SAAS;IACT,UAAU;IACV,cAAY,EAAE,8BAA8B;GAC7C,CAAA,CACU,EAAA,CAAA,EACT,CAAA;EACG;;AAEf"}
1
+ {"version":3,"file":"LimitOrderSettings.js","names":["Container","Card","Switch"],"sources":["../../../../src/components/LimitOrderSettings/LimitOrderSettings.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check'\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'\nimport type { BoxProps } from '@mui/material'\nimport { Menu, MenuItem } from '@mui/material'\nimport { type ChangeEvent, type JSX, type MouseEvent, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { formatDuration } from '../../utils/format.js'\nimport { Card } from '../Card/Card.js'\nimport { Switch } from '../Switch.js'\nimport {\n Container,\n ExpiryValue,\n SettingItemButton,\n SettingItemTitle,\n SettingItemValue,\n SettingsRow,\n ToggleLabel,\n} from './LimitOrderSettings.style.js'\n\n/** Selectable order-validity durations, in seconds. */\nconst DURATIONS = [3600, 86400, 604800, 2592000, 31536000]\n\nexport const LimitOrderSettings: React.FC<BoxProps> = (props): JSX.Element => {\n const { t, i18n } = useTranslation()\n const [validUntil, partiallyFillable] = useFieldValues(\n 'validUntil',\n 'partiallyFillable'\n )\n const { setFieldValue } = useFieldActions()\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const open = Boolean(anchorEl)\n\n const handleOpen = (event: MouseEvent<HTMLElement>): void => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = (): void => {\n setAnchorEl(null)\n }\n\n const handleSelect = (duration: number): void => {\n setFieldValue('validUntil', duration)\n setAnchorEl(null)\n }\n\n const handlePartiallyFillableChange = (\n event: ChangeEvent<HTMLInputElement>\n ): void => {\n setFieldValue('partiallyFillable', event.target.checked)\n }\n\n return (\n <Container {...props}>\n <Card>\n <SettingItemButton\n onClick={handleOpen}\n disableRipple\n aria-haspopup=\"menu\"\n aria-expanded={open}\n >\n <SettingItemTitle>{t('limitOrder.expiresIn')}</SettingItemTitle>\n <ExpiryValue>\n <SettingItemValue>\n {formatDuration(validUntil, i18n.language, 'long')}\n </SettingItemValue>\n <KeyboardArrowDownIcon\n sx={{ fontSize: 20, height: '18px', marginTop: '2px' }}\n />\n </ExpiryValue>\n </SettingItemButton>\n </Card>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: (theme) => ({\n border: `1px solid ${theme.vars.palette.grey[300]}`,\n boxShadow: 'none',\n ...theme.applyStyles('dark', {\n borderColor: theme.vars.palette.grey[800],\n }),\n }),\n },\n }}\n >\n {DURATIONS.map((duration) => (\n <MenuItem\n key={duration}\n onClick={() => handleSelect(duration)}\n sx={(theme) => ({\n justifyContent: 'space-between',\n gap: 4,\n fontSize: 14,\n fontWeight: 700,\n lineHeight: '18px',\n color: theme.vars.palette.text.primary,\n })}\n >\n {formatDuration(duration, i18n.language, 'long')}\n {duration === validUntil ? (\n <Check color=\"primary\" fontSize=\"small\" />\n ) : null}\n </MenuItem>\n ))}\n </Menu>\n <Card>\n <SettingsRow>\n <ToggleLabel>{t('limitOrder.partiallyFillable')}</ToggleLabel>\n <Switch\n checked={partiallyFillable}\n onChange={handlePartiallyFillableChange}\n aria-label={t('limitOrder.partiallyFillable')}\n />\n </SettingsRow>\n </Card>\n </Container>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAsBA,MAAM,YAAY;CAAC;CAAM;CAAO;CAAQ;CAAS;AAAQ;AAEzD,MAAa,sBAA0C,UAAuB;CAC5E,MAAM,EAAE,GAAG,SAAS,eAAe;CACnC,MAAM,CAAC,YAAY,qBAAqB,eACtC,cACA,mBACF;CACA,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,CAAC,UAAU,eAAe,SAA6B,IAAI;CACjE,MAAM,OAAO,QAAQ,QAAQ;CAE7B,MAAM,cAAc,UAAyC;EAC3D,YAAY,MAAM,aAAa;CACjC;CAEA,MAAM,oBAA0B;EAC9B,YAAY,IAAI;CAClB;CAEA,MAAM,gBAAgB,aAA2B;EAC/C,cAAc,cAAc,QAAQ;EACpC,YAAY,IAAI;CAClB;CAEA,MAAM,iCACJ,UACS;EACT,cAAc,qBAAqB,MAAM,OAAO,OAAO;CACzD;CAEA,OACE,qBAACA,aAAD;EAAW,GAAI;EAAf,UAAA;GACE,oBAACC,QAAD,EAAA,UACE,qBAAC,mBAAD;IACE,SAAS;IACT,eAAA;IACA,iBAAc;IACd,iBAAe;IAJjB,UAAA,CAME,oBAAC,kBAAD,EAAA,UAAmB,EAAE,sBAAsB,EAAoB,CAAA,GAC/D,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,kBAAD,EAAA,UACG,eAAe,YAAY,KAAK,UAAU,MAAM,EACjC,CAAA,GAClB,oBAAC,uBAAD,EACE,IAAI;KAAE,UAAU;KAAI,QAAQ;KAAQ,WAAW;IAAM,EACtD,CAAA,CACU,EAAA,CAAA,CACI;GACf,CAAA,EAAA,CAAA;GACN,oBAAC,MAAD;IACY;IACJ;IACN,SAAS;IACT,cAAc;KAAE,UAAU;KAAU,YAAY;IAAQ;IACxD,iBAAiB;KAAE,UAAU;KAAO,YAAY;IAAQ;IACxD,WAAW,EACT,OAAO,EACL,KAAK,WAAW;KACd,QAAQ,aAAa,MAAM,KAAK,QAAQ,KAAK;KAC7C,WAAW;KACX,GAAG,MAAM,YAAY,QAAQ,EAC3B,aAAa,MAAM,KAAK,QAAQ,KAAK,KACvC,CAAC;IACH,GACF,EACF;IAEC,UAAA,UAAU,KAAK,aACd,qBAAC,UAAD;KAEE,eAAe,aAAa,QAAQ;KACpC,KAAK,WAAW;MACd,gBAAgB;MAChB,KAAK;MACL,UAAU;MACV,YAAY;MACZ,YAAY;MACZ,OAAO,MAAM,KAAK,QAAQ,KAAK;KACjC;KAVF,UAAA,CAYG,eAAe,UAAU,KAAK,UAAU,MAAM,GAC9C,aAAa,aACZ,oBAAC,OAAD;MAAO,OAAM;MAAU,UAAS;KAAS,CAAA,IACvC,IACI;IAfH,GAAA,QAeG,CACX;GACG,CAAA;GACN,oBAACA,QAAD,EAAA,UACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,aAAD,EAAA,UAAc,EAAE,8BAA8B,EAAe,CAAA,GAC7D,oBAACC,UAAD;IACE,SAAS;IACT,UAAU;IACV,cAAY,EAAE,8BAA8B;GAC7C,CAAA,CACU,EAAA,CAAA,EACT,CAAA;EACG;;AAEf"}
@@ -1 +1 @@
1
- {"version":3,"file":"LimitPriceCard.js","names":[],"sources":["../../../../src/components/LimitPriceCard/LimitPriceCard.tsx"],"sourcesContent":["import SwapHorizIcon from '@mui/icons-material/SwapHoriz'\nimport type { CardProps } from '@mui/material'\nimport { Skeleton } from '@mui/material'\nimport { type ChangeEvent, type JSX, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useLimitMarketRate } from '../../hooks/useLimitMarketRate.js'\nimport { useLinkedLimitFields } from '../../hooks/useLinkedLimitFields.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useToken } from '../../hooks/useToken.js'\nimport { FormKeyHelper } from '../../stores/form/types.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { formatInputAmount } from '../../utils/format.js'\nimport { applyPriceOffset, invertPrice } from '../../utils/limitOrder.js'\nimport {\n AmountCard,\n amountHeight,\n CardBodyRow,\n CardHeaderRow,\n LargeInput,\n} from '../AmountInputCard/AmountInputCard.style.js'\nimport { CardTitle } from '../Card/CardTitle.js'\nimport { InvertChip } from './LimitPriceCard.style.js'\nimport { LimitPricePresets } from './LimitPricePresets.js'\n\nconst cleanDisplay = (value: string): string =>\n value ? formatInputAmount(value, 8) : ''\n\nexport const LimitPriceCard: React.FC<CardProps> = (props): JSX.Element => {\n const { t } = useTranslation()\n const isEditingRef = useRef(false)\n const [inputValue, setInputValue] = useState('')\n\n const [\n fromChainId,\n fromTokenAddress,\n toChainId,\n toTokenAddress,\n priceInverted,\n ] = useFieldValues(\n FormKeyHelper.getChainKey('from'),\n FormKeyHelper.getTokenKey('from'),\n FormKeyHelper.getChainKey('to'),\n FormKeyHelper.getTokenKey('to'),\n 'priceInverted'\n )\n const { token: fromToken } = useToken(fromChainId, fromTokenAddress)\n const { token: toToken } = useToken(toChainId, toTokenAddress)\n\n const { isFetching } = useRoutes()\n\n // limitPrice is derived from the from/to amount fields, not stored.\n const { limitPrice, setLimitPrice } = useLinkedLimitFields()\n const { setFieldValue } = useFieldActions()\n\n const hasTokens = Boolean(fromToken && toToken)\n const showSkeleton = isFetching && !limitPrice\n const leadToken = priceInverted ? toToken : fromToken\n const unitToken = priceInverted ? fromToken : toToken\n\n const marketCanonical = useLimitMarketRate()\n\n // Canonical price is orientation-independent; flip only for display.\n const displayPrice = priceInverted ? invertPrice(limitPrice) : limitPrice\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: pair fields are intentional re-run triggers, not read in the body\n useEffect(() => {\n setFieldValue('toAmount', '', { isDirty: false, isTouched: false })\n setFieldValue('selectedRouteId', undefined)\n }, [fromChainId, fromTokenAddress, toChainId, toTokenAddress])\n\n // Keep the input in sync with derived/preset/invert updates, but never yank\n // the value out from under an actively-typing user.\n useEffect(() => {\n if (!isEditingRef.current) {\n setInputValue(cleanDisplay(displayPrice))\n }\n }, [displayPrice])\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ): void => {\n isEditingRef.current = true\n const formatted = formatInputAmount(event.target.value, 18, true)\n setInputValue(formatted)\n const numeric = Number(formatted)\n if (!formatted || Number.isNaN(numeric) || numeric <= 0) {\n setLimitPrice('')\n return\n }\n // Canonical price is orientation-independent; un-flip the displayed value.\n const canonical = priceInverted ? 1 / numeric : numeric\n setLimitPrice(String(canonical))\n }\n\n const handleBlur = (): void => {\n isEditingRef.current = false\n setInputValue(cleanDisplay(displayPrice))\n }\n\n const handleInvert = (): void => {\n isEditingRef.current = false\n setFieldValue('priceInverted', !priceInverted)\n }\n\n // Apply a percentage offset to the canonical market rate (0 = at market).\n const handlePreset = (pct: number): void => {\n if (marketCanonical === undefined) {\n return\n }\n isEditingRef.current = false\n setLimitPrice(applyPriceOffset(String(marketCanonical), pct))\n }\n\n const label = hasTokens\n ? t('limitOrder.priceLabel', { symbol: leadToken?.symbol })\n : t('limitOrder.price')\n\n return (\n <AmountCard {...props} mask={false}>\n <CardHeaderRow>\n <CardTitle sx={{ padding: 0 }}>{label}</CardTitle>\n {hasTokens ? (\n <InvertChip onClick={handleInvert} aria-label=\"invert price\">\n {unitToken?.symbol}\n <SwapHorizIcon sx={{ fontSize: 16 }} />\n </InvertChip>\n ) : null}\n </CardHeaderRow>\n <CardBodyRow>\n {showSkeleton ? (\n <Skeleton variant=\"rounded\" height={amountHeight} sx={{ flex: 1 }} />\n ) : (\n <LargeInput\n size=\"small\"\n autoComplete=\"off\"\n placeholder=\"0\"\n inputProps={{ inputMode: 'decimal' }}\n onChange={handleChange}\n onBlur={handleBlur}\n value={inputValue}\n name=\"limitPrice\"\n disabled={!hasTokens}\n />\n )}\n </CardBodyRow>\n <LimitPricePresets\n onSelect={handlePreset}\n disabled={!hasTokens || marketCanonical === undefined}\n />\n </AmountCard>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LimitPriceCard.js","names":[],"sources":["../../../../src/components/LimitPriceCard/LimitPriceCard.tsx"],"sourcesContent":["import SwapHorizIcon from '@mui/icons-material/SwapHoriz'\nimport type { CardProps } from '@mui/material'\nimport { Skeleton } from '@mui/material'\nimport { type ChangeEvent, type JSX, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useLimitMarketRate } from '../../hooks/useLimitMarketRate.js'\nimport { useLinkedLimitFields } from '../../hooks/useLinkedLimitFields.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useToken } from '../../hooks/useToken.js'\nimport { FormKeyHelper } from '../../stores/form/types.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useFieldValues } from '../../stores/form/useFieldValues.js'\nimport { formatInputAmount } from '../../utils/format.js'\nimport { applyPriceOffset, invertPrice } from '../../utils/limitOrder.js'\nimport {\n AmountCard,\n amountHeight,\n CardBodyRow,\n CardHeaderRow,\n LargeInput,\n} from '../AmountInputCard/AmountInputCard.style.js'\nimport { CardTitle } from '../Card/CardTitle.js'\nimport { InvertChip } from './LimitPriceCard.style.js'\nimport { LimitPricePresets } from './LimitPricePresets.js'\n\nconst cleanDisplay = (value: string): string =>\n value ? formatInputAmount(value, 8) : ''\n\nexport const LimitPriceCard: React.FC<CardProps> = (props): JSX.Element => {\n const { t } = useTranslation()\n const isEditingRef = useRef(false)\n const [inputValue, setInputValue] = useState('')\n\n const [\n fromChainId,\n fromTokenAddress,\n toChainId,\n toTokenAddress,\n priceInverted,\n ] = useFieldValues(\n FormKeyHelper.getChainKey('from'),\n FormKeyHelper.getTokenKey('from'),\n FormKeyHelper.getChainKey('to'),\n FormKeyHelper.getTokenKey('to'),\n 'priceInverted'\n )\n const { token: fromToken } = useToken(fromChainId, fromTokenAddress)\n const { token: toToken } = useToken(toChainId, toTokenAddress)\n\n const { isFetching } = useRoutes()\n\n // limitPrice is derived from the from/to amount fields, not stored.\n const { limitPrice, setLimitPrice } = useLinkedLimitFields()\n const { setFieldValue } = useFieldActions()\n\n const hasTokens = Boolean(fromToken && toToken)\n const showSkeleton = isFetching && !limitPrice\n const leadToken = priceInverted ? toToken : fromToken\n const unitToken = priceInverted ? fromToken : toToken\n\n const marketCanonical = useLimitMarketRate()\n\n // Canonical price is orientation-independent; flip only for display.\n const displayPrice = priceInverted ? invertPrice(limitPrice) : limitPrice\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: pair fields are intentional re-run triggers, not read in the body\n useEffect(() => {\n setFieldValue('toAmount', '', { isDirty: false, isTouched: false })\n setFieldValue('selectedRouteId', undefined)\n }, [fromChainId, fromTokenAddress, toChainId, toTokenAddress])\n\n // Keep the input in sync with derived/preset/invert updates, but never yank\n // the value out from under an actively-typing user.\n useEffect(() => {\n if (!isEditingRef.current) {\n setInputValue(cleanDisplay(displayPrice))\n }\n }, [displayPrice])\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ): void => {\n isEditingRef.current = true\n const formatted = formatInputAmount(event.target.value, 18, true)\n setInputValue(formatted)\n const numeric = Number(formatted)\n if (!formatted || Number.isNaN(numeric) || numeric <= 0) {\n setLimitPrice('')\n return\n }\n // Canonical price is orientation-independent; un-flip the displayed value.\n const canonical = priceInverted ? 1 / numeric : numeric\n setLimitPrice(String(canonical))\n }\n\n const handleBlur = (): void => {\n isEditingRef.current = false\n setInputValue(cleanDisplay(displayPrice))\n }\n\n const handleInvert = (): void => {\n isEditingRef.current = false\n setFieldValue('priceInverted', !priceInverted)\n }\n\n // Apply a percentage offset to the canonical market rate (0 = at market).\n const handlePreset = (pct: number): void => {\n if (marketCanonical === undefined) {\n return\n }\n isEditingRef.current = false\n setLimitPrice(applyPriceOffset(String(marketCanonical), pct))\n }\n\n const label = hasTokens\n ? t('limitOrder.priceLabel', { symbol: leadToken?.symbol })\n : t('limitOrder.price')\n\n return (\n <AmountCard {...props} mask={false}>\n <CardHeaderRow>\n <CardTitle sx={{ padding: 0 }}>{label}</CardTitle>\n {hasTokens ? (\n <InvertChip onClick={handleInvert} aria-label=\"invert price\">\n {unitToken?.symbol}\n <SwapHorizIcon sx={{ fontSize: 16 }} />\n </InvertChip>\n ) : null}\n </CardHeaderRow>\n <CardBodyRow>\n {showSkeleton ? (\n <Skeleton variant=\"rounded\" height={amountHeight} sx={{ flex: 1 }} />\n ) : (\n <LargeInput\n size=\"small\"\n autoComplete=\"off\"\n placeholder=\"0\"\n inputProps={{ inputMode: 'decimal' }}\n onChange={handleChange}\n onBlur={handleBlur}\n value={inputValue}\n name=\"limitPrice\"\n disabled={!hasTokens}\n />\n )}\n </CardBodyRow>\n <LimitPricePresets\n onSelect={handlePreset}\n disabled={!hasTokens || marketCanonical === undefined}\n />\n </AmountCard>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LimitPricePresets.js","names":[],"sources":["../../../../src/components/LimitPriceCard/LimitPricePresets.tsx"],"sourcesContent":["import { type ChangeEvent, type JSX, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ChipContainer } from '../AmountInputCard/PercentageChips.style.js'\nimport {\n EditablePriceChip,\n PriceChip,\n PriceChipInput,\n} from './LimitPriceCard.style.js'\n\n/** Quick-set presets, as percentage offsets from market (0 = at market). */\nconst PRESETS = [0, 1, 5, 10] as const\n\ninterface LimitPricePresetsProps {\n /** Apply a percentage offset from the market rate (0 = at market). */\n onSelect: (pct: number) => void\n /** Disables the free-form custom pill (no tokens / no market rate yet). */\n disabled: boolean\n}\n\n/**\n * Row of quick-set price controls: fixed percentage presets plus a free-form\n * \"custom %\" pill that collapses to a button until engaged. Owns its own\n * custom-input state so the card only deals with applying an offset.\n */\nexport const LimitPricePresets = ({\n onSelect,\n disabled,\n}: LimitPricePresetsProps): JSX.Element => {\n const { t } = useTranslation()\n const customInputRef = useRef<HTMLInputElement>(null)\n const [customPct, setCustomPct] = useState('')\n const [customFocused, setCustomFocused] = useState(false)\n\n // The custom pill renders as a plain button until engaged; when it flips into\n // edit mode (focused), move the caret into the freshly-mounted input.\n useEffect(() => {\n if (customFocused) {\n customInputRef.current?.focus()\n }\n }, [customFocused])\n\n // Picking a fixed preset clears any custom value so the custom pill collapses\n // back to its \"Custom\" button instead of showing a stale, no-longer-applied %.\n const handlePresetClick = (pct: number): void => {\n setCustomPct('')\n setCustomFocused(false)\n onSelect(pct)\n }\n\n // Free-form offset pill: apply the typed percentage live so the price input\n // tracks the offset as the user types. Accepts an optional leading +/- sign\n // so the price can be set above (premium) or below (discount) market.\n const handleCustomChange = (event: ChangeEvent<HTMLInputElement>): void => {\n const raw = event.target.value\n if (raw && !/^[+-]?\\d*\\.?\\d*$/.test(raw)) {\n return\n }\n setCustomPct(raw)\n const numeric = Number(raw)\n // Bare '', '+', '-', '.' etc. aren't applicable numbers yet — Number() maps\n // the signs/dot to NaN, and '' to 0, so guard both.\n if (raw === '' || Number.isNaN(numeric)) {\n return\n }\n onSelect(numeric)\n }\n\n const handleCustomKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ): void => {\n if (event.key === 'Enter') {\n event.currentTarget.blur()\n }\n }\n\n // On blur, surface an explicit sign: a bare positive entry like \"10\" reads as\n // \"+10\" so the direction (above/below market) is unambiguous once collapsed.\n const handleCustomBlur = (): void => {\n setCustomFocused(false)\n setCustomPct((prev) => {\n if (!prev || prev.startsWith('+') || prev.startsWith('-')) {\n return prev\n }\n return Number.isNaN(Number(prev)) ? prev : `+${prev}`\n })\n }\n\n // Collapse to a plain \"Custom\" label only while empty and unfocused; once the\n // user engages (focus) or has typed a value, reveal the `+__%` affixes.\n const showCustomLabel = customPct === '' && !customFocused\n\n return (\n <ChipContainer sx={{ marginTop: 0.5, flexWrap: 'wrap' }}>\n {PRESETS.map((pct) => (\n <PriceChip key={pct} onClick={() => handlePresetClick(pct)}>\n {pct === 0 ? t('limitOrder.market') : `+${pct}%`}\n </PriceChip>\n ))}\n {showCustomLabel ? (\n <PriceChip disabled={disabled} onClick={() => setCustomFocused(true)}>\n {t('limitOrder.custom')}\n </PriceChip>\n ) : (\n <EditablePriceChip\n aria-disabled={disabled}\n onClick={(event) => {\n // `aria-disabled` only announces the state; enforce it so a\n // programmatic click can't apply an offset while disabled.\n if (disabled) {\n return\n }\n const input = event.currentTarget.querySelector('input')\n input?.focus()\n const numeric = Number(customPct)\n if (customPct && !Number.isNaN(numeric)) {\n onSelect(numeric)\n }\n }}\n >\n <PriceChipInput\n ref={customInputRef}\n inputMode=\"decimal\"\n autoComplete=\"off\"\n placeholder=\"0\"\n aria-label={t('limitOrder.custom')}\n value={customPct}\n onChange={handleCustomChange}\n onKeyDown={handleCustomKeyDown}\n onFocus={() => setCustomFocused(true)}\n onBlur={handleCustomBlur}\n disabled={disabled}\n style={{ width: `${Math.max(customPct.length, 1)}ch` }}\n />\n %\n </EditablePriceChip>\n )}\n </ChipContainer>\n )\n}\n"],"mappings":";;;;;;;AAUA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;AAAE;;;;;;AAc5B,MAAa,qBAAqB,EAChC,UACA,eACyC;CACzC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,iBAAiB,OAAyB,IAAI;CACpD,MAAM,CAAC,WAAW,gBAAgB,SAAS,EAAE;CAC7C,MAAM,CAAC,eAAe,oBAAoB,SAAS,KAAK;CAIxD,gBAAgB;EACd,IAAI,eACF,eAAe,SAAS,MAAM;CAElC,GAAG,CAAC,aAAa,CAAC;CAIlB,MAAM,qBAAqB,QAAsB;EAC/C,aAAa,EAAE;EACf,iBAAiB,KAAK;EACtB,SAAS,GAAG;CACd;CAKA,MAAM,sBAAsB,UAA+C;EACzE,MAAM,MAAM,MAAM,OAAO;EACzB,IAAI,OAAO,CAAC,mBAAmB,KAAK,GAAG,GACrC;EAEF,aAAa,GAAG;EAChB,MAAM,UAAU,OAAO,GAAG;EAG1B,IAAI,QAAQ,MAAM,OAAO,MAAM,OAAO,GACpC;EAEF,SAAS,OAAO;CAClB;CAEA,MAAM,uBACJ,UACS;EACT,IAAI,MAAM,QAAQ,SAChB,MAAM,cAAc,KAAK;CAE7B;CAIA,MAAM,yBAA+B;EACnC,iBAAiB,KAAK;EACtB,cAAc,SAAS;GACrB,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,GACtD,OAAO;GAET,OAAO,OAAO,MAAM,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI;EACjD,CAAC;CACH;CAIA,MAAM,kBAAkB,cAAc,MAAM,CAAC;CAE7C,OACE,qBAAC,eAAD;EAAe,IAAI;GAAE,WAAW;GAAK,UAAU;EAAO;YAAtD,CACG,QAAQ,KAAK,QACZ,oBAAC,WAAD;GAAqB,eAAe,kBAAkB,GAAG;aACtD,QAAQ,IAAI,EAAE,mBAAmB,IAAI,IAAI,IAAI;EACrC,GAFK,GAEL,CACZ,GACA,kBACC,oBAAC,WAAD;GAAqB;GAAU,eAAe,iBAAiB,IAAI;aAChE,EAAE,mBAAmB;EACb,CAAA,IAEX,qBAAC,mBAAD;GACE,iBAAe;GACf,UAAU,UAAU;IAGlB,IAAI,UACF;IAGF,MADoB,cAAc,cAAc,OAC5C,CAAC,EAAE,MAAM;IACb,MAAM,UAAU,OAAO,SAAS;IAChC,IAAI,aAAa,CAAC,OAAO,MAAM,OAAO,GACpC,SAAS,OAAO;GAEpB;aAdF,CAgBE,oBAAC,gBAAD;IACE,KAAK;IACL,WAAU;IACV,cAAa;IACb,aAAY;IACZ,cAAY,EAAE,mBAAmB;IACjC,OAAO;IACP,UAAU;IACV,WAAW;IACX,eAAe,iBAAiB,IAAI;IACpC,QAAQ;IACE;IACV,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,QAAQ,CAAC,EAAE,IAAI;GACtD,CAAA,GAAC,GAEe;IAER;;AAEnB"}
1
+ {"version":3,"file":"LimitPricePresets.js","names":[],"sources":["../../../../src/components/LimitPriceCard/LimitPricePresets.tsx"],"sourcesContent":["import { type ChangeEvent, type JSX, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ChipContainer } from '../AmountInputCard/PercentageChips.style.js'\nimport {\n EditablePriceChip,\n PriceChip,\n PriceChipInput,\n} from './LimitPriceCard.style.js'\n\n/** Quick-set presets, as percentage offsets from market (0 = at market). */\nconst PRESETS = [0, 1, 5, 10] as const\n\ninterface LimitPricePresetsProps {\n /** Apply a percentage offset from the market rate (0 = at market). */\n onSelect: (pct: number) => void\n /** Disables the free-form custom pill (no tokens / no market rate yet). */\n disabled: boolean\n}\n\n/**\n * Row of quick-set price controls: fixed percentage presets plus a free-form\n * \"custom %\" pill that collapses to a button until engaged. Owns its own\n * custom-input state so the card only deals with applying an offset.\n */\nexport const LimitPricePresets = ({\n onSelect,\n disabled,\n}: LimitPricePresetsProps): JSX.Element => {\n const { t } = useTranslation()\n const customInputRef = useRef<HTMLInputElement>(null)\n const [customPct, setCustomPct] = useState('')\n const [customFocused, setCustomFocused] = useState(false)\n\n // The custom pill renders as a plain button until engaged; when it flips into\n // edit mode (focused), move the caret into the freshly-mounted input.\n useEffect(() => {\n if (customFocused) {\n customInputRef.current?.focus()\n }\n }, [customFocused])\n\n // Picking a fixed preset clears any custom value so the custom pill collapses\n // back to its \"Custom\" button instead of showing a stale, no-longer-applied %.\n const handlePresetClick = (pct: number): void => {\n setCustomPct('')\n setCustomFocused(false)\n onSelect(pct)\n }\n\n // Free-form offset pill: apply the typed percentage live so the price input\n // tracks the offset as the user types. Accepts an optional leading +/- sign\n // so the price can be set above (premium) or below (discount) market.\n const handleCustomChange = (event: ChangeEvent<HTMLInputElement>): void => {\n const raw = event.target.value\n if (raw && !/^[+-]?\\d*\\.?\\d*$/.test(raw)) {\n return\n }\n setCustomPct(raw)\n const numeric = Number(raw)\n // Bare '', '+', '-', '.' etc. aren't applicable numbers yet — Number() maps\n // the signs/dot to NaN, and '' to 0, so guard both.\n if (raw === '' || Number.isNaN(numeric)) {\n return\n }\n onSelect(numeric)\n }\n\n const handleCustomKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>\n ): void => {\n if (event.key === 'Enter') {\n event.currentTarget.blur()\n }\n }\n\n // On blur, surface an explicit sign: a bare positive entry like \"10\" reads as\n // \"+10\" so the direction (above/below market) is unambiguous once collapsed.\n const handleCustomBlur = (): void => {\n setCustomFocused(false)\n setCustomPct((prev) => {\n if (!prev || prev.startsWith('+') || prev.startsWith('-')) {\n return prev\n }\n return Number.isNaN(Number(prev)) ? prev : `+${prev}`\n })\n }\n\n // Collapse to a plain \"Custom\" label only while empty and unfocused; once the\n // user engages (focus) or has typed a value, reveal the `+__%` affixes.\n const showCustomLabel = customPct === '' && !customFocused\n\n return (\n <ChipContainer sx={{ marginTop: 0.5, flexWrap: 'wrap' }}>\n {PRESETS.map((pct) => (\n <PriceChip key={pct} onClick={() => handlePresetClick(pct)}>\n {pct === 0 ? t('limitOrder.market') : `+${pct}%`}\n </PriceChip>\n ))}\n {showCustomLabel ? (\n <PriceChip disabled={disabled} onClick={() => setCustomFocused(true)}>\n {t('limitOrder.custom')}\n </PriceChip>\n ) : (\n <EditablePriceChip\n aria-disabled={disabled}\n onClick={(event) => {\n // `aria-disabled` only announces the state; enforce it so a\n // programmatic click can't apply an offset while disabled.\n if (disabled) {\n return\n }\n const input = event.currentTarget.querySelector('input')\n input?.focus()\n const numeric = Number(customPct)\n if (customPct && !Number.isNaN(numeric)) {\n onSelect(numeric)\n }\n }}\n >\n <PriceChipInput\n ref={customInputRef}\n inputMode=\"decimal\"\n autoComplete=\"off\"\n placeholder=\"0\"\n aria-label={t('limitOrder.custom')}\n value={customPct}\n onChange={handleCustomChange}\n onKeyDown={handleCustomKeyDown}\n onFocus={() => setCustomFocused(true)}\n onBlur={handleCustomBlur}\n disabled={disabled}\n style={{ width: `${Math.max(customPct.length, 1)}ch` }}\n />\n %\n </EditablePriceChip>\n )}\n </ChipContainer>\n )\n}\n"],"mappings":";;;;;;;AAUA,MAAM,UAAU;CAAC;CAAG;CAAG;CAAG;AAAE;;;;;;AAc5B,MAAa,qBAAqB,EAChC,UACA,eACyC;CACzC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,iBAAiB,OAAyB,IAAI;CACpD,MAAM,CAAC,WAAW,gBAAgB,SAAS,EAAE;CAC7C,MAAM,CAAC,eAAe,oBAAoB,SAAS,KAAK;CAIxD,gBAAgB;EACd,IAAI,eACF,eAAe,SAAS,MAAM;CAElC,GAAG,CAAC,aAAa,CAAC;CAIlB,MAAM,qBAAqB,QAAsB;EAC/C,aAAa,EAAE;EACf,iBAAiB,KAAK;EACtB,SAAS,GAAG;CACd;CAKA,MAAM,sBAAsB,UAA+C;EACzE,MAAM,MAAM,MAAM,OAAO;EACzB,IAAI,OAAO,CAAC,mBAAmB,KAAK,GAAG,GACrC;EAEF,aAAa,GAAG;EAChB,MAAM,UAAU,OAAO,GAAG;EAG1B,IAAI,QAAQ,MAAM,OAAO,MAAM,OAAO,GACpC;EAEF,SAAS,OAAO;CAClB;CAEA,MAAM,uBACJ,UACS;EACT,IAAI,MAAM,QAAQ,SAChB,MAAM,cAAc,KAAK;CAE7B;CAIA,MAAM,yBAA+B;EACnC,iBAAiB,KAAK;EACtB,cAAc,SAAS;GACrB,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,GACtD,OAAO;GAET,OAAO,OAAO,MAAM,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI;EACjD,CAAC;CACH;CAIA,MAAM,kBAAkB,cAAc,MAAM,CAAC;CAE7C,OACE,qBAAC,eAAD;EAAe,IAAI;GAAE,WAAW;GAAK,UAAU;EAAO;EAAtD,UAAA,CACG,QAAQ,KAAK,QACZ,oBAAC,WAAD;GAAqB,eAAe,kBAAkB,GAAG;GACtD,UAAA,QAAQ,IAAI,EAAE,mBAAmB,IAAI,IAAI,IAAI;EACrC,GAFK,GAEL,CACZ,GACA,kBACC,oBAAC,WAAD;GAAqB;GAAU,eAAe,iBAAiB,IAAI;GAChE,UAAA,EAAE,mBAAmB;EACb,CAAA,IAEX,qBAAC,mBAAD;GACE,iBAAe;GACf,UAAU,UAAU;IAGlB,IAAI,UACF;IAGF,MADoB,cAAc,cAAc,OAC5C,CAAC,EAAE,MAAM;IACb,MAAM,UAAU,OAAO,SAAS;IAChC,IAAI,aAAa,CAAC,OAAO,MAAM,OAAO,GACpC,SAAS,OAAO;GAEpB;GAdF,UAAA,CAgBE,oBAAC,gBAAD;IACE,KAAK;IACL,WAAU;IACV,cAAa;IACb,aAAY;IACZ,cAAY,EAAE,mBAAmB;IACjC,OAAO;IACP,UAAU;IACV,WAAW;IACX,eAAe,iBAAiB,IAAI;IACpC,QAAQ;IACE;IACV,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,QAAQ,CAAC,EAAE,IAAI;GACtD,CAAA,GAAC,GAEe;EAER,CAAA,CAAA;;AAEnB"}