@relayprotocol/relay-kit-ui 7.1.6 → 8.0.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 (479) hide show
  1. package/_cjs/src/components/common/AmountInput.js +2 -17
  2. package/_cjs/src/components/common/AmountInput.js.map +1 -1
  3. package/_cjs/src/components/common/BalanceDisplay.js +2 -2
  4. package/_cjs/src/components/common/BalanceDisplay.js.map +1 -1
  5. package/_cjs/src/components/common/CopyToClipBoard.js +3 -7
  6. package/_cjs/src/components/common/CopyToClipBoard.js.map +1 -1
  7. package/_cjs/src/components/common/CustomAddressModal.js +10 -48
  8. package/_cjs/src/components/common/CustomAddressModal.js.map +1 -1
  9. package/_cjs/src/components/common/ErrorWell.js +9 -28
  10. package/_cjs/src/components/common/ErrorWell.js.map +1 -1
  11. package/_cjs/src/components/common/LoadingSpinner.js +7 -13
  12. package/_cjs/src/components/common/LoadingSpinner.js.map +1 -1
  13. package/_cjs/src/components/common/Modal.js +4 -22
  14. package/_cjs/src/components/common/Modal.js.map +1 -1
  15. package/_cjs/src/components/common/MultiWalletDropdown.js +23 -57
  16. package/_cjs/src/components/common/MultiWalletDropdown.js.map +1 -1
  17. package/_cjs/src/components/common/PercentageButtons.js +7 -24
  18. package/_cjs/src/components/common/PercentageButtons.js.map +1 -1
  19. package/_cjs/src/components/common/SlippageToleranceConfig.js +21 -117
  20. package/_cjs/src/components/common/SlippageToleranceConfig.js.map +1 -1
  21. package/_cjs/src/components/common/StepIcon.js +1 -7
  22. package/_cjs/src/components/common/StepIcon.js.map +1 -1
  23. package/_cjs/src/components/common/TokenSelector/ChainFilter.js +19 -109
  24. package/_cjs/src/components/common/TokenSelector/ChainFilter.js.map +1 -1
  25. package/_cjs/src/components/common/TokenSelector/ChainFilterRow.js +10 -54
  26. package/_cjs/src/components/common/TokenSelector/ChainFilterRow.js.map +1 -1
  27. package/_cjs/src/components/common/TokenSelector/ChainFilterSidebar.js +15 -98
  28. package/_cjs/src/components/common/TokenSelector/ChainFilterSidebar.js.map +1 -1
  29. package/_cjs/src/components/common/TokenSelector/ChainShortcuts.js +6 -28
  30. package/_cjs/src/components/common/TokenSelector/ChainShortcuts.js.map +1 -1
  31. package/_cjs/src/components/common/TokenSelector/CompactChainFilter.js +12 -83
  32. package/_cjs/src/components/common/TokenSelector/CompactChainFilter.js.map +1 -1
  33. package/_cjs/src/components/common/TokenSelector/MobileChainSelector.js +16 -109
  34. package/_cjs/src/components/common/TokenSelector/MobileChainSelector.js.map +1 -1
  35. package/_cjs/src/components/common/TokenSelector/PaymentMethod.js +10 -101
  36. package/_cjs/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
  37. package/_cjs/src/components/common/TokenSelector/PaymentTokenList.js +8 -69
  38. package/_cjs/src/components/common/TokenSelector/PaymentTokenList.js.map +1 -1
  39. package/_cjs/src/components/common/TokenSelector/SuggestedTokens.js +2 -33
  40. package/_cjs/src/components/common/TokenSelector/SuggestedTokens.js.map +1 -1
  41. package/_cjs/src/components/common/TokenSelector/TagPill.js +1 -9
  42. package/_cjs/src/components/common/TokenSelector/TagPill.js.map +1 -1
  43. package/_cjs/src/components/common/TokenSelector/TokenList.js +8 -57
  44. package/_cjs/src/components/common/TokenSelector/TokenList.js.map +1 -1
  45. package/_cjs/src/components/common/TokenSelector/TokenSelector.js +24 -70
  46. package/_cjs/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
  47. package/_cjs/src/components/common/TokenSelector/triggers/PaymentMethodTrigger.js +2 -35
  48. package/_cjs/src/components/common/TokenSelector/triggers/PaymentMethodTrigger.js.map +1 -1
  49. package/_cjs/src/components/common/TokenSelector/triggers/TokenTrigger.js +2 -28
  50. package/_cjs/src/components/common/TokenSelector/triggers/TokenTrigger.js.map +1 -1
  51. package/_cjs/src/components/common/TransactionModal/DepositAddressModal.js +2 -10
  52. package/_cjs/src/components/common/TransactionModal/DepositAddressModal.js.map +1 -1
  53. package/_cjs/src/components/common/TransactionModal/TransactionModal.js +2 -13
  54. package/_cjs/src/components/common/TransactionModal/TransactionModal.js.map +1 -1
  55. package/_cjs/src/components/common/TransactionModal/steps/ApprovalPlusSwapStep.js +8 -45
  56. package/_cjs/src/components/common/TransactionModal/steps/ApprovalPlusSwapStep.js.map +1 -1
  57. package/_cjs/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js +1 -5
  58. package/_cjs/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  59. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js +9 -30
  60. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  61. package/_cjs/src/components/common/TransactionModal/steps/SwapConfirmationStep.js +26 -81
  62. package/_cjs/src/components/common/TransactionModal/steps/SwapConfirmationStep.js.map +1 -1
  63. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js +16 -76
  64. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  65. package/_cjs/src/components/common/TransactionModal/steps/TransactionsByChain.js +3 -8
  66. package/_cjs/src/components/common/TransactionModal/steps/TransactionsByChain.js.map +1 -1
  67. package/_cjs/src/components/common/TransactionModal/steps/WaitingForDepositStep.js +27 -63
  68. package/_cjs/src/components/common/TransactionModal/steps/WaitingForDepositStep.js.map +1 -1
  69. package/_cjs/src/components/common/UnverifiedTokenModal.js +6 -32
  70. package/_cjs/src/components/common/UnverifiedTokenModal.js.map +1 -1
  71. package/_cjs/src/components/primitives/AccessibleList.js +5 -21
  72. package/_cjs/src/components/primitives/AccessibleList.js.map +1 -1
  73. package/_cjs/src/components/primitives/Anchor.js +18 -41
  74. package/_cjs/src/components/primitives/Anchor.js.map +1 -1
  75. package/_cjs/src/components/primitives/Box.js +3 -4
  76. package/_cjs/src/components/primitives/Box.js.map +1 -1
  77. package/_cjs/src/components/primitives/Button.js +63 -124
  78. package/_cjs/src/components/primitives/Button.js.map +1 -1
  79. package/_cjs/src/components/primitives/ChainIcon.js +5 -9
  80. package/_cjs/src/components/primitives/ChainIcon.js.map +1 -1
  81. package/_cjs/src/components/primitives/ChainTokenIcon.js +7 -26
  82. package/_cjs/src/components/primitives/ChainTokenIcon.js.map +1 -1
  83. package/_cjs/src/components/primitives/Collapsible.js +7 -32
  84. package/_cjs/src/components/primitives/Collapsible.js.map +1 -1
  85. package/_cjs/src/components/primitives/Dialog.js +39 -81
  86. package/_cjs/src/components/primitives/Dialog.js.map +1 -1
  87. package/_cjs/src/components/primitives/Dropdown.js +5 -35
  88. package/_cjs/src/components/primitives/Dropdown.js.map +1 -1
  89. package/_cjs/src/components/primitives/Flex.js +23 -59
  90. package/_cjs/src/components/primitives/Flex.js.map +1 -1
  91. package/_cjs/src/components/primitives/Input.js +19 -51
  92. package/_cjs/src/components/primitives/Input.js.map +1 -1
  93. package/_cjs/src/components/primitives/Pill.js +18 -49
  94. package/_cjs/src/components/primitives/Pill.js.map +1 -1
  95. package/_cjs/src/components/primitives/Skeleton.js +3 -12
  96. package/_cjs/src/components/primitives/Skeleton.js.map +1 -1
  97. package/_cjs/src/components/primitives/SlippageButton.js +1 -13
  98. package/_cjs/src/components/primitives/SlippageButton.js.map +1 -1
  99. package/_cjs/src/components/primitives/Switch.js +5 -43
  100. package/_cjs/src/components/primitives/Switch.js.map +1 -1
  101. package/_cjs/src/components/primitives/Tabs.js +9 -39
  102. package/_cjs/src/components/primitives/Tabs.js.map +1 -1
  103. package/_cjs/src/components/primitives/Text.js +36 -94
  104. package/_cjs/src/components/primitives/Text.js.map +1 -1
  105. package/_cjs/src/components/primitives/Tooltip.js +2 -30
  106. package/_cjs/src/components/primitives/Tooltip.js.map +1 -1
  107. package/_cjs/src/components/widgets/FeeBreakdown.js +25 -82
  108. package/_cjs/src/components/widgets/FeeBreakdown.js.map +1 -1
  109. package/_cjs/src/components/widgets/FetchingQuoteLoader.js +3 -9
  110. package/_cjs/src/components/widgets/FetchingQuoteLoader.js.map +1 -1
  111. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js +1 -8
  112. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  113. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampConfirmingStep.js +2 -19
  114. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampConfirmingStep.js.map +1 -1
  115. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampMoonPayStep.js +3 -27
  116. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampMoonPayStep.js.map +1 -1
  117. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingPassthroughStep.js +2 -32
  118. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingPassthroughStep.js.map +1 -1
  119. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingStepUI.js +9 -45
  120. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingStepUI.js.map +1 -1
  121. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampSuccessStep.js +5 -26
  122. package/_cjs/src/components/widgets/OnrampWidget/modals/steps/OnrampSuccessStep.js.map +1 -1
  123. package/_cjs/src/components/widgets/OnrampWidget/widget/FiatCurrencyModal.js +7 -96
  124. package/_cjs/src/components/widgets/OnrampWidget/widget/FiatCurrencyModal.js.map +1 -1
  125. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js +18 -112
  126. package/_cjs/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  127. package/_cjs/src/components/widgets/PriceImpactTooltip.js +3 -9
  128. package/_cjs/src/components/widgets/PriceImpactTooltip.js.map +1 -1
  129. package/_cjs/src/components/widgets/SwapButton.js +3 -14
  130. package/_cjs/src/components/widgets/SwapButton.js.map +1 -1
  131. package/_cjs/src/components/widgets/SwapWidget/GasTopUpSection.js +6 -11
  132. package/_cjs/src/components/widgets/SwapWidget/GasTopUpSection.js.map +1 -1
  133. package/_cjs/src/components/widgets/SwapWidget/PriceImpact.js +2 -4
  134. package/_cjs/src/components/widgets/SwapWidget/PriceImpact.js.map +1 -1
  135. package/_cjs/src/components/widgets/SwapWidget/index.js +35 -136
  136. package/_cjs/src/components/widgets/SwapWidget/index.js.map +1 -1
  137. package/_cjs/src/components/widgets/TokenSelectorContainer.js +3 -13
  138. package/_cjs/src/components/widgets/TokenSelectorContainer.js.map +1 -1
  139. package/_cjs/src/components/widgets/WidgetErrorWell.js +10 -76
  140. package/_cjs/src/components/widgets/WidgetErrorWell.js.map +1 -1
  141. package/_cjs/src/providers/RelayKitProvider.js +1 -0
  142. package/_cjs/src/providers/RelayKitProvider.js.map +1 -1
  143. package/_cjs/src/styles.css +3 -3717
  144. package/_cjs/src/themes/RelayKitTheme.js.map +1 -1
  145. package/_cjs/src/utils/cn.js +13 -0
  146. package/_cjs/src/utils/cn.js.map +1 -0
  147. package/_cjs/src/utils/theme.js +13 -1
  148. package/_cjs/src/utils/theme.js.map +1 -1
  149. package/_cjs/src/version.js +1 -1
  150. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  151. package/_esm/src/components/common/AmountInput.js +2 -17
  152. package/_esm/src/components/common/AmountInput.js.map +1 -1
  153. package/_esm/src/components/common/BalanceDisplay.js +2 -2
  154. package/_esm/src/components/common/BalanceDisplay.js.map +1 -1
  155. package/_esm/src/components/common/CopyToClipBoard.js +3 -7
  156. package/_esm/src/components/common/CopyToClipBoard.js.map +1 -1
  157. package/_esm/src/components/common/CustomAddressModal.js +10 -48
  158. package/_esm/src/components/common/CustomAddressModal.js.map +1 -1
  159. package/_esm/src/components/common/ErrorWell.js +9 -29
  160. package/_esm/src/components/common/ErrorWell.js.map +1 -1
  161. package/_esm/src/components/common/LoadingSpinner.js +7 -13
  162. package/_esm/src/components/common/LoadingSpinner.js.map +1 -1
  163. package/_esm/src/components/common/Modal.js +4 -22
  164. package/_esm/src/components/common/Modal.js.map +1 -1
  165. package/_esm/src/components/common/MultiWalletDropdown.js +22 -56
  166. package/_esm/src/components/common/MultiWalletDropdown.js.map +1 -1
  167. package/_esm/src/components/common/PercentageButtons.js +7 -24
  168. package/_esm/src/components/common/PercentageButtons.js.map +1 -1
  169. package/_esm/src/components/common/SlippageToleranceConfig.js +21 -117
  170. package/_esm/src/components/common/SlippageToleranceConfig.js.map +1 -1
  171. package/_esm/src/components/common/StepIcon.js +1 -7
  172. package/_esm/src/components/common/StepIcon.js.map +1 -1
  173. package/_esm/src/components/common/TokenSelector/ChainFilter.js +19 -109
  174. package/_esm/src/components/common/TokenSelector/ChainFilter.js.map +1 -1
  175. package/_esm/src/components/common/TokenSelector/ChainFilterRow.js +10 -54
  176. package/_esm/src/components/common/TokenSelector/ChainFilterRow.js.map +1 -1
  177. package/_esm/src/components/common/TokenSelector/ChainFilterSidebar.js +15 -98
  178. package/_esm/src/components/common/TokenSelector/ChainFilterSidebar.js.map +1 -1
  179. package/_esm/src/components/common/TokenSelector/ChainShortcuts.js +6 -28
  180. package/_esm/src/components/common/TokenSelector/ChainShortcuts.js.map +1 -1
  181. package/_esm/src/components/common/TokenSelector/CompactChainFilter.js +12 -83
  182. package/_esm/src/components/common/TokenSelector/CompactChainFilter.js.map +1 -1
  183. package/_esm/src/components/common/TokenSelector/MobileChainSelector.js +16 -109
  184. package/_esm/src/components/common/TokenSelector/MobileChainSelector.js.map +1 -1
  185. package/_esm/src/components/common/TokenSelector/PaymentMethod.js +10 -101
  186. package/_esm/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
  187. package/_esm/src/components/common/TokenSelector/PaymentTokenList.js +8 -69
  188. package/_esm/src/components/common/TokenSelector/PaymentTokenList.js.map +1 -1
  189. package/_esm/src/components/common/TokenSelector/SuggestedTokens.js +2 -33
  190. package/_esm/src/components/common/TokenSelector/SuggestedTokens.js.map +1 -1
  191. package/_esm/src/components/common/TokenSelector/TagPill.js +1 -9
  192. package/_esm/src/components/common/TokenSelector/TagPill.js.map +1 -1
  193. package/_esm/src/components/common/TokenSelector/TokenList.js +9 -57
  194. package/_esm/src/components/common/TokenSelector/TokenList.js.map +1 -1
  195. package/_esm/src/components/common/TokenSelector/TokenSelector.js +24 -70
  196. package/_esm/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
  197. package/_esm/src/components/common/TokenSelector/triggers/PaymentMethodTrigger.js +2 -35
  198. package/_esm/src/components/common/TokenSelector/triggers/PaymentMethodTrigger.js.map +1 -1
  199. package/_esm/src/components/common/TokenSelector/triggers/TokenTrigger.js +2 -28
  200. package/_esm/src/components/common/TokenSelector/triggers/TokenTrigger.js.map +1 -1
  201. package/_esm/src/components/common/TransactionModal/DepositAddressModal.js +2 -10
  202. package/_esm/src/components/common/TransactionModal/DepositAddressModal.js.map +1 -1
  203. package/_esm/src/components/common/TransactionModal/TransactionModal.js +2 -13
  204. package/_esm/src/components/common/TransactionModal/TransactionModal.js.map +1 -1
  205. package/_esm/src/components/common/TransactionModal/steps/ApprovalPlusSwapStep.js +8 -45
  206. package/_esm/src/components/common/TransactionModal/steps/ApprovalPlusSwapStep.js.map +1 -1
  207. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js +1 -5
  208. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  209. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js +9 -30
  210. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  211. package/_esm/src/components/common/TransactionModal/steps/SwapConfirmationStep.js +26 -81
  212. package/_esm/src/components/common/TransactionModal/steps/SwapConfirmationStep.js.map +1 -1
  213. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js +16 -76
  214. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  215. package/_esm/src/components/common/TransactionModal/steps/TransactionsByChain.js +3 -8
  216. package/_esm/src/components/common/TransactionModal/steps/TransactionsByChain.js.map +1 -1
  217. package/_esm/src/components/common/TransactionModal/steps/WaitingForDepositStep.js +28 -63
  218. package/_esm/src/components/common/TransactionModal/steps/WaitingForDepositStep.js.map +1 -1
  219. package/_esm/src/components/common/UnverifiedTokenModal.js +6 -32
  220. package/_esm/src/components/common/UnverifiedTokenModal.js.map +1 -1
  221. package/_esm/src/components/primitives/AccessibleList.js +5 -21
  222. package/_esm/src/components/primitives/AccessibleList.js.map +1 -1
  223. package/_esm/src/components/primitives/Anchor.js +18 -41
  224. package/_esm/src/components/primitives/Anchor.js.map +1 -1
  225. package/_esm/src/components/primitives/Box.js +3 -4
  226. package/_esm/src/components/primitives/Box.js.map +1 -1
  227. package/_esm/src/components/primitives/Button.js +63 -124
  228. package/_esm/src/components/primitives/Button.js.map +1 -1
  229. package/_esm/src/components/primitives/ChainIcon.js +5 -9
  230. package/_esm/src/components/primitives/ChainIcon.js.map +1 -1
  231. package/_esm/src/components/primitives/ChainTokenIcon.js +7 -26
  232. package/_esm/src/components/primitives/ChainTokenIcon.js.map +1 -1
  233. package/_esm/src/components/primitives/Collapsible.js +7 -32
  234. package/_esm/src/components/primitives/Collapsible.js.map +1 -1
  235. package/_esm/src/components/primitives/Dialog.js +39 -81
  236. package/_esm/src/components/primitives/Dialog.js.map +1 -1
  237. package/_esm/src/components/primitives/Dropdown.js +5 -35
  238. package/_esm/src/components/primitives/Dropdown.js.map +1 -1
  239. package/_esm/src/components/primitives/Flex.js +22 -58
  240. package/_esm/src/components/primitives/Flex.js.map +1 -1
  241. package/_esm/src/components/primitives/Input.js +19 -50
  242. package/_esm/src/components/primitives/Input.js.map +1 -1
  243. package/_esm/src/components/primitives/Pill.js +17 -48
  244. package/_esm/src/components/primitives/Pill.js.map +1 -1
  245. package/_esm/src/components/primitives/Skeleton.js +3 -12
  246. package/_esm/src/components/primitives/Skeleton.js.map +1 -1
  247. package/_esm/src/components/primitives/SlippageButton.js +1 -13
  248. package/_esm/src/components/primitives/SlippageButton.js.map +1 -1
  249. package/_esm/src/components/primitives/Switch.js +5 -43
  250. package/_esm/src/components/primitives/Switch.js.map +1 -1
  251. package/_esm/src/components/primitives/Tabs.js +9 -39
  252. package/_esm/src/components/primitives/Tabs.js.map +1 -1
  253. package/_esm/src/components/primitives/Text.js +36 -94
  254. package/_esm/src/components/primitives/Text.js.map +1 -1
  255. package/_esm/src/components/primitives/Tooltip.js +3 -30
  256. package/_esm/src/components/primitives/Tooltip.js.map +1 -1
  257. package/_esm/src/components/widgets/FeeBreakdown.js +24 -81
  258. package/_esm/src/components/widgets/FeeBreakdown.js.map +1 -1
  259. package/_esm/src/components/widgets/FetchingQuoteLoader.js +3 -9
  260. package/_esm/src/components/widgets/FetchingQuoteLoader.js.map +1 -1
  261. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js +1 -8
  262. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  263. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampConfirmingStep.js +3 -20
  264. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampConfirmingStep.js.map +1 -1
  265. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampMoonPayStep.js +4 -28
  266. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampMoonPayStep.js.map +1 -1
  267. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingPassthroughStep.js +3 -33
  268. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingPassthroughStep.js.map +1 -1
  269. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingStepUI.js +9 -45
  270. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingStepUI.js.map +1 -1
  271. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampSuccessStep.js +5 -26
  272. package/_esm/src/components/widgets/OnrampWidget/modals/steps/OnrampSuccessStep.js.map +1 -1
  273. package/_esm/src/components/widgets/OnrampWidget/widget/FiatCurrencyModal.js +7 -96
  274. package/_esm/src/components/widgets/OnrampWidget/widget/FiatCurrencyModal.js.map +1 -1
  275. package/_esm/src/components/widgets/OnrampWidget/widget/index.js +18 -112
  276. package/_esm/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
  277. package/_esm/src/components/widgets/PriceImpactTooltip.js +4 -10
  278. package/_esm/src/components/widgets/PriceImpactTooltip.js.map +1 -1
  279. package/_esm/src/components/widgets/SwapButton.js +3 -14
  280. package/_esm/src/components/widgets/SwapButton.js.map +1 -1
  281. package/_esm/src/components/widgets/SwapWidget/GasTopUpSection.js +5 -10
  282. package/_esm/src/components/widgets/SwapWidget/GasTopUpSection.js.map +1 -1
  283. package/_esm/src/components/widgets/SwapWidget/PriceImpact.js +2 -4
  284. package/_esm/src/components/widgets/SwapWidget/PriceImpact.js.map +1 -1
  285. package/_esm/src/components/widgets/SwapWidget/index.js +35 -136
  286. package/_esm/src/components/widgets/SwapWidget/index.js.map +1 -1
  287. package/_esm/src/components/widgets/TokenSelectorContainer.js +3 -14
  288. package/_esm/src/components/widgets/TokenSelectorContainer.js.map +1 -1
  289. package/_esm/src/components/widgets/WidgetErrorWell.js +14 -80
  290. package/_esm/src/components/widgets/WidgetErrorWell.js.map +1 -1
  291. package/_esm/src/providers/RelayKitProvider.js +1 -0
  292. package/_esm/src/providers/RelayKitProvider.js.map +1 -1
  293. package/_esm/src/styles.css +3 -3717
  294. package/_esm/src/themes/RelayKitTheme.js.map +1 -1
  295. package/_esm/src/utils/cn.js +9 -0
  296. package/_esm/src/utils/cn.js.map +1 -0
  297. package/_esm/src/utils/theme.js +15 -1
  298. package/_esm/src/utils/theme.js.map +1 -1
  299. package/_esm/src/version.js +1 -1
  300. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  301. package/_types/src/components/common/AmountInput.d.ts.map +1 -1
  302. package/_types/src/components/common/CopyToClipBoard.d.ts.map +1 -1
  303. package/_types/src/components/common/CustomAddressModal.d.ts.map +1 -1
  304. package/_types/src/components/common/ErrorWell.d.ts.map +1 -1
  305. package/_types/src/components/common/LoadingSpinner.d.ts +1 -2
  306. package/_types/src/components/common/LoadingSpinner.d.ts.map +1 -1
  307. package/_types/src/components/common/Modal.d.ts +3 -3
  308. package/_types/src/components/common/Modal.d.ts.map +1 -1
  309. package/_types/src/components/common/MultiWalletDropdown.d.ts.map +1 -1
  310. package/_types/src/components/common/PercentageButtons.d.ts +1 -1
  311. package/_types/src/components/common/PercentageButtons.d.ts.map +1 -1
  312. package/_types/src/components/common/SlippageToleranceConfig.d.ts +0 -1
  313. package/_types/src/components/common/SlippageToleranceConfig.d.ts.map +1 -1
  314. package/_types/src/components/common/StepIcon.d.ts.map +1 -1
  315. package/_types/src/components/common/TokenSelector/ChainFilter.d.ts.map +1 -1
  316. package/_types/src/components/common/TokenSelector/ChainFilterRow.d.ts.map +1 -1
  317. package/_types/src/components/common/TokenSelector/ChainFilterSidebar.d.ts.map +1 -1
  318. package/_types/src/components/common/TokenSelector/ChainShortcuts.d.ts.map +1 -1
  319. package/_types/src/components/common/TokenSelector/CompactChainFilter.d.ts.map +1 -1
  320. package/_types/src/components/common/TokenSelector/MobileChainSelector.d.ts.map +1 -1
  321. package/_types/src/components/common/TokenSelector/PaymentMethod.d.ts.map +1 -1
  322. package/_types/src/components/common/TokenSelector/PaymentTokenList.d.ts.map +1 -1
  323. package/_types/src/components/common/TokenSelector/SuggestedTokens.d.ts.map +1 -1
  324. package/_types/src/components/common/TokenSelector/TagPill.d.ts.map +1 -1
  325. package/_types/src/components/common/TokenSelector/TokenList.d.ts.map +1 -1
  326. package/_types/src/components/common/TokenSelector/TokenSelector.d.ts.map +1 -1
  327. package/_types/src/components/common/TokenSelector/triggers/PaymentMethodTrigger.d.ts.map +1 -1
  328. package/_types/src/components/common/TokenSelector/triggers/TokenTrigger.d.ts.map +1 -1
  329. package/_types/src/components/common/TransactionModal/steps/ApprovalPlusSwapStep.d.ts.map +1 -1
  330. package/_types/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.d.ts.map +1 -1
  331. package/_types/src/components/common/TransactionModal/steps/ErrorStep.d.ts.map +1 -1
  332. package/_types/src/components/common/TransactionModal/steps/SwapConfirmationStep.d.ts.map +1 -1
  333. package/_types/src/components/common/TransactionModal/steps/SwapSuccessStep.d.ts.map +1 -1
  334. package/_types/src/components/common/TransactionModal/steps/TransactionsByChain.d.ts.map +1 -1
  335. package/_types/src/components/common/TransactionModal/steps/WaitingForDepositStep.d.ts.map +1 -1
  336. package/_types/src/components/common/UnverifiedTokenModal.d.ts.map +1 -1
  337. package/_types/src/components/primitives/AccessibleList.d.ts +2 -3
  338. package/_types/src/components/primitives/AccessibleList.d.ts.map +1 -1
  339. package/_types/src/components/primitives/Anchor.d.ts +10 -39
  340. package/_types/src/components/primitives/Anchor.d.ts.map +1 -1
  341. package/_types/src/components/primitives/Box.d.ts +2 -5
  342. package/_types/src/components/primitives/Box.d.ts.map +1 -1
  343. package/_types/src/components/primitives/Button.d.ts +11 -8
  344. package/_types/src/components/primitives/Button.d.ts.map +1 -1
  345. package/_types/src/components/primitives/ChainIcon.d.ts +1 -2
  346. package/_types/src/components/primitives/ChainIcon.d.ts.map +1 -1
  347. package/_types/src/components/primitives/ChainTokenIcon.d.ts +1 -2
  348. package/_types/src/components/primitives/ChainTokenIcon.d.ts.map +1 -1
  349. package/_types/src/components/primitives/Collapsible.d.ts +3 -4
  350. package/_types/src/components/primitives/Collapsible.d.ts.map +1 -1
  351. package/_types/src/components/primitives/Dialog.d.ts +2 -3
  352. package/_types/src/components/primitives/Dialog.d.ts.map +1 -1
  353. package/_types/src/components/primitives/Dropdown.d.ts +2 -3
  354. package/_types/src/components/primitives/Dropdown.d.ts.map +1 -1
  355. package/_types/src/components/primitives/Flex.d.ts +10 -65
  356. package/_types/src/components/primitives/Flex.d.ts.map +1 -1
  357. package/_types/src/components/primitives/Input.d.ts +10 -8
  358. package/_types/src/components/primitives/Input.d.ts.map +1 -1
  359. package/_types/src/components/primitives/Pill.d.ts +9 -50
  360. package/_types/src/components/primitives/Pill.d.ts.map +1 -1
  361. package/_types/src/components/primitives/Skeleton.d.ts +1 -2
  362. package/_types/src/components/primitives/Skeleton.d.ts.map +1 -1
  363. package/_types/src/components/primitives/SlippageButton.d.ts.map +1 -1
  364. package/_types/src/components/primitives/Switch.d.ts +2 -3
  365. package/_types/src/components/primitives/Switch.d.ts.map +1 -1
  366. package/_types/src/components/primitives/Tabs.d.ts +4 -5
  367. package/_types/src/components/primitives/Tabs.d.ts.map +1 -1
  368. package/_types/src/components/primitives/Text.d.ts +10 -100
  369. package/_types/src/components/primitives/Text.d.ts.map +1 -1
  370. package/_types/src/components/primitives/Tooltip.d.ts.map +1 -1
  371. package/_types/src/components/widgets/FeeBreakdown.d.ts.map +1 -1
  372. package/_types/src/components/widgets/FetchingQuoteLoader.d.ts +1 -2
  373. package/_types/src/components/widgets/FetchingQuoteLoader.d.ts.map +1 -1
  374. package/_types/src/components/widgets/OnrampWidget/modals/OnrampModal.d.ts.map +1 -1
  375. package/_types/src/components/widgets/OnrampWidget/modals/steps/OnrampConfirmingStep.d.ts.map +1 -1
  376. package/_types/src/components/widgets/OnrampWidget/modals/steps/OnrampMoonPayStep.d.ts.map +1 -1
  377. package/_types/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingPassthroughStep.d.ts.map +1 -1
  378. package/_types/src/components/widgets/OnrampWidget/modals/steps/OnrampProcessingStepUI.d.ts.map +1 -1
  379. package/_types/src/components/widgets/OnrampWidget/modals/steps/OnrampSuccessStep.d.ts.map +1 -1
  380. package/_types/src/components/widgets/OnrampWidget/widget/FiatCurrencyModal.d.ts.map +1 -1
  381. package/_types/src/components/widgets/OnrampWidget/widget/index.d.ts.map +1 -1
  382. package/_types/src/components/widgets/PriceImpactTooltip.d.ts.map +1 -1
  383. package/_types/src/components/widgets/SwapButton.d.ts.map +1 -1
  384. package/_types/src/components/widgets/SwapWidget/GasTopUpSection.d.ts.map +1 -1
  385. package/_types/src/components/widgets/SwapWidget/PriceImpact.d.ts.map +1 -1
  386. package/_types/src/components/widgets/SwapWidget/index.d.ts.map +1 -1
  387. package/_types/src/components/widgets/TokenSelectorContainer.d.ts +1 -2
  388. package/_types/src/components/widgets/TokenSelectorContainer.d.ts.map +1 -1
  389. package/_types/src/components/widgets/WidgetErrorWell.d.ts +1 -2
  390. package/_types/src/components/widgets/WidgetErrorWell.d.ts.map +1 -1
  391. package/_types/src/providers/RelayKitProvider.d.ts.map +1 -1
  392. package/_types/src/themes/RelayKitTheme.d.ts +1 -0
  393. package/_types/src/themes/RelayKitTheme.d.ts.map +1 -1
  394. package/_types/src/utils/cn.d.ts +3 -0
  395. package/_types/src/utils/cn.d.ts.map +1 -0
  396. package/_types/src/utils/theme.d.ts.map +1 -1
  397. package/_types/src/version.d.ts +1 -1
  398. package/_types/tsconfig.build.tsbuildinfo +1 -1
  399. package/dist/styles.css +3 -3717
  400. package/package.json +13 -16
  401. package/_cjs/src/components/widgets/TokenWidget/AmountModeToggle.js +0 -31
  402. package/_cjs/src/components/widgets/TokenWidget/AmountModeToggle.js.map +0 -1
  403. package/_cjs/src/components/widgets/TokenWidget/AmountSectionHeader.js +0 -8
  404. package/_cjs/src/components/widgets/TokenWidget/AmountSectionHeader.js.map +0 -1
  405. package/_cjs/src/components/widgets/TokenWidget/BuyTabContent.js +0 -214
  406. package/_cjs/src/components/widgets/TokenWidget/BuyTabContent.js.map +0 -1
  407. package/_cjs/src/components/widgets/TokenWidget/DestinationWalletSelector.js +0 -20
  408. package/_cjs/src/components/widgets/TokenWidget/DestinationWalletSelector.js.map +0 -1
  409. package/_cjs/src/components/widgets/TokenWidget/FeeBreakdownInfo.js +0 -64
  410. package/_cjs/src/components/widgets/TokenWidget/FeeBreakdownInfo.js.map +0 -1
  411. package/_cjs/src/components/widgets/TokenWidget/FeeBreakdownTooltip.js +0 -44
  412. package/_cjs/src/components/widgets/TokenWidget/FeeBreakdownTooltip.js.map +0 -1
  413. package/_cjs/src/components/widgets/TokenWidget/SectionContainer.js +0 -25
  414. package/_cjs/src/components/widgets/TokenWidget/SectionContainer.js.map +0 -1
  415. package/_cjs/src/components/widgets/TokenWidget/SellTabContent.js +0 -261
  416. package/_cjs/src/components/widgets/TokenWidget/SellTabContent.js.map +0 -1
  417. package/_cjs/src/components/widgets/TokenWidget/TransactionDetailsFooter.js +0 -42
  418. package/_cjs/src/components/widgets/TokenWidget/TransactionDetailsFooter.js.map +0 -1
  419. package/_cjs/src/components/widgets/TokenWidget/hooks/useWalletGuards.js +0 -108
  420. package/_cjs/src/components/widgets/TokenWidget/hooks/useWalletGuards.js.map +0 -1
  421. package/_cjs/src/components/widgets/TokenWidget/index.js +0 -9
  422. package/_cjs/src/components/widgets/TokenWidget/index.js.map +0 -1
  423. package/_cjs/src/components/widgets/TokenWidget/widget/TokenWidgetRenderer.js +0 -719
  424. package/_cjs/src/components/widgets/TokenWidget/widget/TokenWidgetRenderer.js.map +0 -1
  425. package/_cjs/src/components/widgets/TokenWidget/widget/index.js +0 -1034
  426. package/_cjs/src/components/widgets/TokenWidget/widget/index.js.map +0 -1
  427. package/_esm/src/components/widgets/TokenWidget/AmountModeToggle.js +0 -30
  428. package/_esm/src/components/widgets/TokenWidget/AmountModeToggle.js.map +0 -1
  429. package/_esm/src/components/widgets/TokenWidget/AmountSectionHeader.js +0 -7
  430. package/_esm/src/components/widgets/TokenWidget/AmountSectionHeader.js.map +0 -1
  431. package/_esm/src/components/widgets/TokenWidget/BuyTabContent.js +0 -211
  432. package/_esm/src/components/widgets/TokenWidget/BuyTabContent.js.map +0 -1
  433. package/_esm/src/components/widgets/TokenWidget/DestinationWalletSelector.js +0 -16
  434. package/_esm/src/components/widgets/TokenWidget/DestinationWalletSelector.js.map +0 -1
  435. package/_esm/src/components/widgets/TokenWidget/FeeBreakdownInfo.js +0 -59
  436. package/_esm/src/components/widgets/TokenWidget/FeeBreakdownInfo.js.map +0 -1
  437. package/_esm/src/components/widgets/TokenWidget/FeeBreakdownTooltip.js +0 -43
  438. package/_esm/src/components/widgets/TokenWidget/FeeBreakdownTooltip.js.map +0 -1
  439. package/_esm/src/components/widgets/TokenWidget/SectionContainer.js +0 -25
  440. package/_esm/src/components/widgets/TokenWidget/SectionContainer.js.map +0 -1
  441. package/_esm/src/components/widgets/TokenWidget/SellTabContent.js +0 -264
  442. package/_esm/src/components/widgets/TokenWidget/SellTabContent.js.map +0 -1
  443. package/_esm/src/components/widgets/TokenWidget/TransactionDetailsFooter.js +0 -41
  444. package/_esm/src/components/widgets/TokenWidget/TransactionDetailsFooter.js.map +0 -1
  445. package/_esm/src/components/widgets/TokenWidget/hooks/useWalletGuards.js +0 -104
  446. package/_esm/src/components/widgets/TokenWidget/hooks/useWalletGuards.js.map +0 -1
  447. package/_esm/src/components/widgets/TokenWidget/index.js +0 -2
  448. package/_esm/src/components/widgets/TokenWidget/index.js.map +0 -1
  449. package/_esm/src/components/widgets/TokenWidget/widget/TokenWidgetRenderer.js +0 -742
  450. package/_esm/src/components/widgets/TokenWidget/widget/TokenWidgetRenderer.js.map +0 -1
  451. package/_esm/src/components/widgets/TokenWidget/widget/index.js +0 -1100
  452. package/_esm/src/components/widgets/TokenWidget/widget/index.js.map +0 -1
  453. package/_types/src/components/widgets/TokenWidget/AmountModeToggle.d.ts +0 -12
  454. package/_types/src/components/widgets/TokenWidget/AmountModeToggle.d.ts.map +0 -1
  455. package/_types/src/components/widgets/TokenWidget/AmountSectionHeader.d.ts +0 -11
  456. package/_types/src/components/widgets/TokenWidget/AmountSectionHeader.d.ts.map +0 -1
  457. package/_types/src/components/widgets/TokenWidget/BuyTabContent.d.ts +0 -53
  458. package/_types/src/components/widgets/TokenWidget/BuyTabContent.d.ts.map +0 -1
  459. package/_types/src/components/widgets/TokenWidget/DestinationWalletSelector.d.ts +0 -17
  460. package/_types/src/components/widgets/TokenWidget/DestinationWalletSelector.d.ts.map +0 -1
  461. package/_types/src/components/widgets/TokenWidget/FeeBreakdownInfo.d.ts +0 -16
  462. package/_types/src/components/widgets/TokenWidget/FeeBreakdownInfo.d.ts.map +0 -1
  463. package/_types/src/components/widgets/TokenWidget/FeeBreakdownTooltip.d.ts +0 -15
  464. package/_types/src/components/widgets/TokenWidget/FeeBreakdownTooltip.d.ts.map +0 -1
  465. package/_types/src/components/widgets/TokenWidget/SectionContainer.d.ts +0 -11
  466. package/_types/src/components/widgets/TokenWidget/SectionContainer.d.ts.map +0 -1
  467. package/_types/src/components/widgets/TokenWidget/SellTabContent.d.ts +0 -61
  468. package/_types/src/components/widgets/TokenWidget/SellTabContent.d.ts.map +0 -1
  469. package/_types/src/components/widgets/TokenWidget/TransactionDetailsFooter.d.ts +0 -14
  470. package/_types/src/components/widgets/TokenWidget/TransactionDetailsFooter.d.ts.map +0 -1
  471. package/_types/src/components/widgets/TokenWidget/hooks/useWalletGuards.d.ts +0 -28
  472. package/_types/src/components/widgets/TokenWidget/hooks/useWalletGuards.d.ts.map +0 -1
  473. package/_types/src/components/widgets/TokenWidget/index.d.ts +0 -3
  474. package/_types/src/components/widgets/TokenWidget/index.d.ts.map +0 -1
  475. package/_types/src/components/widgets/TokenWidget/widget/TokenWidgetRenderer.d.ts +0 -117
  476. package/_types/src/components/widgets/TokenWidget/widget/TokenWidgetRenderer.d.ts.map +0 -1
  477. package/_types/src/components/widgets/TokenWidget/widget/index.d.ts +0 -58
  478. package/_types/src/components/widgets/TokenWidget/widget/index.d.ts.map +0 -1
  479. package/dist/panda.buildinfo.json +0 -676
@@ -1,1100 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Flex, Text } from '../../../primitives/index.js';
3
- import { TabsRoot, TabsList, TabsTrigger } from '../../../primitives/Tabs.js';
4
- import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
5
- import { useRelayClient } from '../../../../hooks/index.js';
6
- import useFallbackState from '../../../../hooks/useFallbackState.js';
7
- import { formatUnits } from 'viem';
8
- import { usePublicClient } from 'wagmi';
9
- import { ASSETS_RELAY_API } from '@relayprotocol/relay-sdk';
10
- import { EventNames } from '../../../../constants/events.js';
11
- import WidgetContainer from '../../WidgetContainer.js';
12
- import { ProviderOptionsContext } from '../../../../providers/RelayKitProvider.js';
13
- import { findBridgableToken } from '../../../../utils/tokens.js';
14
- import { UnverifiedTokenModal } from '../../../common/UnverifiedTokenModal.js';
15
- import { alreadyAcceptedToken } from '../../../../utils/localStorage.js';
16
- import { calculateUsdValue, getSwapEventData } from '../../../../utils/quote.js';
17
- import { getFeeBufferAmount } from '../../../../utils/nativeMaxAmount.js';
18
- import TokenWidgetRenderer, {} from './TokenWidgetRenderer.js';
19
- import BuyTabContent from '../BuyTabContent.js';
20
- import SellTabContent from '../SellTabContent.js';
21
- import { useQuote } from '@relayprotocol/relay-kit-hooks';
22
- import { useWalletGuards } from '../hooks/useWalletGuards.js';
23
- import { isChainVmTypeSupported, isWalletVmTypeCompatible } from '../../../../utils/address.js';
24
- const BASE_USDC_ADDRESS = '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913';
25
- const BASE_USDC_TOKEN = {
26
- chainId: 8453,
27
- address: BASE_USDC_ADDRESS,
28
- name: 'USD Coin',
29
- symbol: 'USDC',
30
- decimals: 6,
31
- logoURI: `${ASSETS_RELAY_API}/icons/currencies/usdc.png`,
32
- verified: true
33
- };
34
- const isBaseUsdcToken = (token) => token?.chainId === BASE_USDC_TOKEN.chainId &&
35
- token?.address?.toLowerCase() === BASE_USDC_ADDRESS;
36
- const COMPATIBLE_WALLET_VMS = [
37
- 'evm',
38
- 'suivm',
39
- 'tvm',
40
- 'hypevm',
41
- 'svm',
42
- 'bvm'
43
- ];
44
- const TokenWidget = ({ fromToken: externalFromToken, setFromToken: setExternalFromToken, toToken: externalToToken, setToToken: setExternalToToken, activeTab: externalActiveTab, setActiveTab: setExternalActiveTab, defaultToAddress, defaultAmount, defaultTradeType, slippageTolerance, onOpenSlippageConfig, lockToToken = false, lockFromToken = false, lockChainId, singleChainMode = false, wallet, multiWalletSupportEnabled = false, linkedWallets, supportedWalletVMs, disableInputAutoFocus = false, popularChainIds, disablePasteWalletAddressOption, useSecureBaseUrl, paymentMethodMinHeight = '85vh', onSetPrimaryWallet, onLinkNewWallet, onFromTokenChange, onToTokenChange, onConnectWallet, onAnalyticEvent: _onAnalyticEvent, onSwapSuccess, onSwapValidating, onSwapError, onUnverifiedTokenDecline, walletsLoading = false }) => {
45
- const onAnalyticEvent = useCallback((eventName, data) => {
46
- try {
47
- _onAnalyticEvent?.(eventName, data);
48
- }
49
- catch (e) {
50
- console.error('Error in onAnalyticEvent', eventName, data, e);
51
- }
52
- }, [_onAnalyticEvent]);
53
- const relayClient = useRelayClient();
54
- const providerOptionsContext = useContext(ProviderOptionsContext);
55
- const connectorKeyOverrides = providerOptionsContext.vmConnectorKeyOverrides;
56
- const [transactionModalOpen, setTransactionModalOpen] = useState(false);
57
- const [depositAddressModalOpen, setDepositAddressModalOpen] = useState(false);
58
- const [addressModalOpen, setAddressModalOpen] = useState(false);
59
- const [pendingSuccessFlush, setPendingSuccessFlush] = useState(false);
60
- const [unverifiedTokens, setUnverifiedTokens] = useState([]);
61
- const declinedTokensRef = useRef(new Set());
62
- const [fromToken, setFromToken] = useState(externalFromToken);
63
- const [toToken, setToToken] = useState(externalToToken);
64
- useEffect(() => {
65
- setFromToken(externalFromToken);
66
- }, [externalFromToken]);
67
- useEffect(() => {
68
- setToToken(externalToToken);
69
- }, [externalToToken]);
70
- const updateFromToken = useCallback((token) => {
71
- setFromToken(token);
72
- setExternalFromToken?.(token);
73
- }, [setExternalFromToken]);
74
- const updateToToken = useCallback((token) => {
75
- setToToken(token);
76
- setExternalToToken?.(token);
77
- }, [setExternalToToken]);
78
- const [activeTab, setActiveTab] = useFallbackState(setExternalActiveTab && externalActiveTab ? externalActiveTab : 'buy', setExternalActiveTab && externalActiveTab
79
- ? [
80
- externalActiveTab,
81
- setExternalActiveTab
82
- ]
83
- : undefined);
84
- const [isUsdInputMode, setIsUsdInputMode] = useState(activeTab === 'buy');
85
- const [usdInputValue, setUsdInputValue] = useState('');
86
- const [usdOutputValue, setUsdOutputValue] = useState('');
87
- const [tokenInputCache, setTokenInputCache] = useState('');
88
- const tabTokenStateRef = useRef({ buy: {}, sell: {} });
89
- const prevActiveTabRef = useRef(activeTab);
90
- const autoSelectedFromTokenRef = useRef(false);
91
- const tabRecipientRef = useRef({ buy: {}, sell: {} });
92
- const setTradeTypeRef = useRef(null);
93
- const tradeTypeRef = useRef(defaultTradeType ?? 'EXPECTED_OUTPUT');
94
- const hasLockedToken = lockFromToken || lockToToken;
95
- const isSingleChainLocked = singleChainMode && lockChainId !== undefined;
96
- const [localSlippageTolerance, setLocalSlippageTolerance] = useState(slippageTolerance);
97
- useEffect(() => {
98
- setLocalSlippageTolerance(slippageTolerance);
99
- }, [slippageTolerance]);
100
- useEffect(() => {
101
- const desiredTradeType = activeTab === 'buy' ? 'EXPECTED_OUTPUT' : 'EXACT_INPUT';
102
- if (tradeTypeRef.current !== desiredTradeType) {
103
- setTradeTypeRef.current?.(desiredTradeType);
104
- }
105
- }, [activeTab]);
106
- const handleOpenSlippageConfig = () => {
107
- onOpenSlippageConfig?.();
108
- };
109
- const handleSlippageToleranceChange = (value) => {
110
- setLocalSlippageTolerance(value);
111
- };
112
- const computedDefaultTradeType = defaultTradeType ??
113
- (activeTab === 'buy' ? 'EXPECTED_OUTPUT' : 'EXACT_INPUT');
114
- //Handle unverified tokens
115
- useEffect(() => {
116
- const tokensToVerify = [];
117
- const getTokenKey = (token) => `${token.chainId}:${token.address.toLowerCase()}`;
118
- if (fromToken && 'verified' in fromToken && !fromToken.verified) {
119
- if (alreadyAcceptedToken(fromToken)) {
120
- setFromToken({ ...fromToken, verified: true });
121
- }
122
- else if (!declinedTokensRef.current.has(getTokenKey(fromToken))) {
123
- tokensToVerify.push({ token: fromToken, context: 'from' });
124
- }
125
- }
126
- if (toToken && 'verified' in toToken && !toToken.verified) {
127
- if (alreadyAcceptedToken(toToken)) {
128
- setToToken({ ...toToken, verified: true });
129
- }
130
- else if (!declinedTokensRef.current.has(getTokenKey(toToken))) {
131
- tokensToVerify.push({ token: toToken, context: 'to' });
132
- }
133
- }
134
- if (tokensToVerify.length > 0) {
135
- setUnverifiedTokens((prev) => [...prev, ...tokensToVerify]);
136
- tokensToVerify.forEach(({ context }) => {
137
- if (context === 'from') {
138
- setFromToken(undefined);
139
- }
140
- else {
141
- setToToken(undefined);
142
- }
143
- });
144
- }
145
- }, [fromToken, toToken]);
146
- return (_jsx(TokenWidgetRenderer, { context: "Swap", transactionModalOpen: transactionModalOpen, setTransactionModalOpen: setTransactionModalOpen, depositAddressModalOpen: depositAddressModalOpen, defaultAmount: defaultAmount, defaultToAddress: defaultToAddress, defaultTradeType: computedDefaultTradeType, toToken: toToken, setToToken: updateToToken, fromToken: fromToken, setFromToken: updateFromToken, slippageTolerance: localSlippageTolerance, wallet: wallet, linkedWallets: linkedWallets, multiWalletSupportEnabled: multiWalletSupportEnabled, onSwapError: onSwapError, onAnalyticEvent: onAnalyticEvent, supportedWalletVMs: supportedWalletVMs, useSecureBaseUrl: useSecureBaseUrl, children: ({ quote, steps, swap, setSteps, feeBreakdown, fromToken, setFromToken, toToken, setToToken, error, toDisplayName, address, originAddressOverride: _originAddressOverride, setOriginAddressOverride, recipient, customToAddress, setCustomToAddress, destinationAddressOverride, setDestinationAddressOverride, tradeType, setTradeType, isSameCurrencySameRecipientSwap, allowUnsupportedOrigin, setAllowUnsupportedOrigin, allowUnsupportedRecipient, setAllowUnsupportedRecipient, debouncedInputAmountValue, debouncedAmountInputControls, setAmountInputValue, amountInputValue, amountOutputValue, debouncedOutputAmountValue, debouncedAmountOutputControls, setAmountOutputValue, toBalance, toBalancePending, isLoadingToBalance, isFetchingQuote, isLoadingFromBalance, fromBalance, fromBalancePending, highRelayerServiceFee, relayerFeeProportion, hasInsufficientBalance, isInsufficientLiquidityError, isCapacityExceededError, isCouldNotExecuteError, ctaCopy, isFromNative, timeEstimate, isSvmSwap, isBvmSwap, isValidFromAddress, isValidToAddress, slippageTolerance, fromChainWalletVMSupported, toChainWalletVMSupported, isRecipientLinked, swapError, recipientWalletSupportsChain, linkedWallet, quoteParameters, setSwapError, invalidateBalanceQueries, invalidateQuoteQuery, quoteInProgress, setQuoteInProgress, abortController, fromTokenPriceData, toTokenPriceData, isLoadingFromTokenPrice, isLoadingToTokenPrice }) => {
147
- setTradeTypeRef.current = setTradeType;
148
- tradeTypeRef.current = tradeType;
149
- useEffect(() => {
150
- if (prevActiveTabRef.current !== activeTab) {
151
- return;
152
- }
153
- tabTokenStateRef.current[activeTab] = {
154
- fromToken,
155
- toToken
156
- };
157
- }, [activeTab, fromToken, toToken]);
158
- useEffect(() => {
159
- tabRecipientRef.current[activeTab] = {
160
- override: typeof destinationAddressOverride === 'string'
161
- ? destinationAddressOverride
162
- : undefined,
163
- custom: typeof customToAddress === 'string' ? customToAddress : undefined
164
- };
165
- }, [activeTab, destinationAddressOverride, customToAddress]);
166
- useEffect(() => {
167
- setAllowUnsupportedOrigin(activeTab === 'buy');
168
- setAllowUnsupportedRecipient(activeTab === 'sell');
169
- }, [activeTab, setAllowUnsupportedOrigin, setAllowUnsupportedRecipient]);
170
- // Auto-select first compatible wallet in buy tab when toToken is set and no destination is selected
171
- useEffect(() => {
172
- if (activeTab === 'buy' &&
173
- toToken &&
174
- multiWalletSupportEnabled &&
175
- linkedWallets &&
176
- linkedWallets.length > 0 &&
177
- !destinationAddressOverride &&
178
- !customToAddress) {
179
- // Find the destination chain for filtering compatible wallets
180
- const toChain = relayClient?.chains?.find((c) => c.id === toToken.chainId);
181
- if (toChain) {
182
- // Filter wallets compatible with the destination chain VM type
183
- const compatibleWallets = linkedWallets.filter((wallet) => {
184
- return isWalletVmTypeCompatible(wallet.vmType, toChain.vmType);
185
- });
186
- // Auto-select the first compatible wallet (prefer the current address if compatible)
187
- const currentAddressWallet = compatibleWallets.find((w) => w.address.toLowerCase() === address?.toLowerCase());
188
- const walletToSelect = currentAddressWallet || compatibleWallets[0];
189
- if (walletToSelect) {
190
- setDestinationAddressOverride(walletToSelect.address);
191
- }
192
- }
193
- }
194
- }, [
195
- activeTab,
196
- toToken,
197
- multiWalletSupportEnabled,
198
- linkedWallets,
199
- destinationAddressOverride,
200
- customToAddress,
201
- relayClient?.chains,
202
- setDestinationAddressOverride,
203
- address
204
- ]);
205
- // Calculate the USD value of the input amount
206
- const inputAmountUsd = useMemo(() => {
207
- return (calculateUsdValue(fromTokenPriceData?.price, amountInputValue) ??
208
- null);
209
- }, [fromTokenPriceData, amountInputValue]);
210
- // Calculate the USD value of the output amount
211
- const outputAmountUsd = useMemo(() => {
212
- return (calculateUsdValue(toTokenPriceData?.price, amountOutputValue) ??
213
- null);
214
- }, [toTokenPriceData, amountOutputValue]);
215
- const percentageOptions = [20, 50];
216
- const handleMaxAmountClicked = async (amount, percent, bufferAmount) => {
217
- if (fromToken) {
218
- const formattedAmount = formatUnits(amount, fromToken?.decimals);
219
- setAmountInputValue(formattedAmount);
220
- setTradeType('EXACT_INPUT');
221
- debouncedAmountOutputControls.cancel();
222
- debouncedAmountInputControls.flush();
223
- onAnalyticEvent?.(EventNames.MAX_AMOUNT_CLICKED, {
224
- percent: percent,
225
- bufferAmount: bufferAmount ? bufferAmount.toString() : '0',
226
- chainType: fromChain?.vmType
227
- });
228
- if (isUsdInputMode && conversionRate) {
229
- const numericTokenAmount = Number(formattedAmount);
230
- if (!isNaN(numericTokenAmount)) {
231
- const usdEquivalent = numericTokenAmount * conversionRate;
232
- setUsdInputValue(usdEquivalent.toFixed(2));
233
- }
234
- }
235
- }
236
- };
237
- const fromChain = relayClient?.chains?.find((chain) => chain.id === fromToken?.chainId);
238
- const toChain = relayClient?.chains?.find((chain) => chain.id === toToken?.chainId);
239
- const handleSetToToken = useCallback((token) => {
240
- if (!token) {
241
- updateToToken(undefined);
242
- onToTokenChange?.(undefined);
243
- return;
244
- }
245
- let _token = token;
246
- if (!fromChainWalletVMSupported) {
247
- const newToChain = relayClient?.chains.find((chain) => token?.chainId == chain.id);
248
- if (newToChain) {
249
- const _toToken = findBridgableToken(newToChain, _token);
250
- if (_toToken && _toToken.address != _token?.address) {
251
- _token = _toToken;
252
- }
253
- }
254
- }
255
- updateToToken(_token);
256
- onToTokenChange?.(_token);
257
- }, [
258
- fromChainWalletVMSupported,
259
- onToTokenChange,
260
- relayClient,
261
- updateToToken
262
- ]);
263
- const handleSetFromToken = useCallback((token) => {
264
- if (!token) {
265
- updateFromToken(undefined);
266
- onFromTokenChange?.(undefined);
267
- return;
268
- }
269
- let _token = token;
270
- const newFromChain = relayClient?.chains.find((chain) => token?.chainId == chain.id);
271
- if (newFromChain?.vmType &&
272
- !isChainVmTypeSupported(newFromChain?.vmType, supportedWalletVMs)) {
273
- setTradeType('EXACT_INPUT');
274
- const _toToken = findBridgableToken(toChain, toToken);
275
- if (_toToken && _toToken?.address != toToken?.address) {
276
- handleSetToToken(_toToken);
277
- }
278
- const _fromToken = findBridgableToken(newFromChain, _token);
279
- if (_fromToken && _fromToken.address != _token?.address) {
280
- _token = _fromToken;
281
- }
282
- }
283
- updateFromToken(_token);
284
- onFromTokenChange?.(_token);
285
- }, [
286
- handleSetToToken,
287
- onFromTokenChange,
288
- relayClient,
289
- updateFromToken,
290
- setTradeType,
291
- supportedWalletVMs,
292
- toChain,
293
- toToken
294
- ]);
295
- // Get public client for the fromChain to estimate gas
296
- const publicClient = usePublicClient({ chainId: fromChain?.id });
297
- // Seed fromToken on sell tab if empty but we have a token available
298
- useEffect(() => {
299
- if (activeTab !== 'sell')
300
- return;
301
- if (fromToken)
302
- return;
303
- const candidateFromToken = tabTokenStateRef.current.sell?.fromToken ??
304
- tabTokenStateRef.current.buy?.toToken ??
305
- toToken;
306
- if (candidateFromToken) {
307
- handleSetFromToken(candidateFromToken);
308
- }
309
- }, [activeTab, fromToken, toToken, handleSetFromToken]);
310
- useWalletGuards({
311
- multiWalletSupportEnabled,
312
- allowUnsupportedOrigin,
313
- allowUnsupportedRecipient,
314
- fromChain,
315
- toChain,
316
- address,
317
- recipient,
318
- linkedWallets,
319
- connectorKeyOverrides,
320
- onSetPrimaryWallet,
321
- isValidFromAddress,
322
- isValidToAddress,
323
- setOriginAddressOverride,
324
- setCustomToAddress,
325
- disablePasteWalletAddressOption,
326
- customToAddress: customToAddress,
327
- originAddressOverride: _originAddressOverride,
328
- destinationAddressOverride: destinationAddressOverride,
329
- setDestinationAddressOverride
330
- });
331
- const isAutoSlippage = slippageTolerance === undefined;
332
- const isHighPriceImpact = Number(quote?.details?.totalImpact?.percent) < -3.5;
333
- const totalImpactUsd = quote?.details?.totalImpact?.usd;
334
- const showHighPriceImpactWarning = Boolean(isHighPriceImpact && totalImpactUsd && Number(totalImpactUsd) <= -10);
335
- // Calculate conversion rate
336
- const conversionRate = useMemo(() => {
337
- if (isUsdInputMode) {
338
- // When in USD input mode, the conversion rate is the price of the fromToken.
339
- if (fromTokenPriceData?.price && fromTokenPriceData.price > 0) {
340
- return fromTokenPriceData.price;
341
- }
342
- else {
343
- // If no price data, or price is 0, return null to avoid stale calculations.
344
- return null;
345
- }
346
- }
347
- else {
348
- // When in token input mode, calculate rate from quote if available.
349
- if (amountInputValue &&
350
- Number(amountInputValue) > 0 &&
351
- quote?.details?.currencyIn?.amountUsd) {
352
- const tokenVal = Number(amountInputValue);
353
- const usdVal = Number(quote.details.currencyIn.amountUsd);
354
- if (tokenVal > 0 && usdVal > 0) {
355
- const rate = usdVal / tokenVal;
356
- return rate;
357
- }
358
- else {
359
- return null;
360
- }
361
- }
362
- else {
363
- // If in token mode and token input is cleared or zero, return null
364
- return null;
365
- }
366
- }
367
- }, [
368
- isUsdInputMode,
369
- fromTokenPriceData?.price,
370
- quote?.details?.currencyIn?.amountUsd,
371
- amountInputValue
372
- ]);
373
- // toggle between token and usd input mode
374
- const toggleInputMode = () => {
375
- if (!isUsdInputMode) {
376
- // Switching TO USD mode
377
- let newUsdInputValue = '';
378
- let newUsdOutputValue = '';
379
- // Calculate USD input value
380
- if (quote?.details?.currencyIn?.amountUsd &&
381
- Number(quote.details.currencyIn.amountUsd) > 0) {
382
- newUsdInputValue = String(Number(quote.details.currencyIn.amountUsd));
383
- }
384
- else if (inputAmountUsd && inputAmountUsd > 0) {
385
- newUsdInputValue = inputAmountUsd.toFixed(2);
386
- }
387
- else if (amountInputValue &&
388
- Number(amountInputValue) > 0 &&
389
- conversionRate &&
390
- conversionRate > 0) {
391
- newUsdInputValue = (Number(amountInputValue) * conversionRate).toFixed(2);
392
- }
393
- // Calculate USD output value
394
- if (quote?.details?.currencyOut?.amountUsd &&
395
- Number(quote.details.currencyOut.amountUsd) > 0) {
396
- newUsdOutputValue = String(Number(quote.details.currencyOut.amountUsd));
397
- }
398
- else if (outputAmountUsd && outputAmountUsd > 0) {
399
- newUsdOutputValue = outputAmountUsd.toFixed(2);
400
- }
401
- else if (amountOutputValue &&
402
- Number(amountOutputValue) > 0 &&
403
- toTokenPriceData?.price &&
404
- toTokenPriceData.price > 0) {
405
- newUsdOutputValue = (Number(amountOutputValue) * toTokenPriceData.price).toFixed(2);
406
- }
407
- setTokenInputCache(amountInputValue);
408
- setUsdInputValue(newUsdInputValue);
409
- setUsdOutputValue(newUsdOutputValue);
410
- setIsUsdInputMode(true);
411
- // Default to EXACT_INPUT unless we're currently in EXPECTED_OUTPUT mode with a valid USD output value
412
- if (tradeType !== 'EXPECTED_OUTPUT' || !newUsdOutputValue) {
413
- setTradeType('EXACT_INPUT');
414
- }
415
- }
416
- else {
417
- // Switching FROM USD mode
418
- if (!usdInputValue && tokenInputCache) {
419
- setAmountInputValue(tokenInputCache);
420
- }
421
- setUsdInputValue('');
422
- setUsdOutputValue('');
423
- setIsUsdInputMode(false);
424
- // Maintain current trade type when switching back to token mode
425
- }
426
- };
427
- //Update token input value when USD input changes in USD mode
428
- useEffect(() => {
429
- if (isUsdInputMode) {
430
- if (conversionRate && conversionRate > 0 && usdInputValue) {
431
- const usdValue = Number(usdInputValue);
432
- if (!isNaN(usdValue) && usdValue > 0) {
433
- const tokenEquivalent = (usdValue / conversionRate).toFixed(fromToken?.decimals ?? 8);
434
- setAmountInputValue(tokenEquivalent);
435
- }
436
- }
437
- else if (usdInputValue === '' || Number(usdInputValue) === 0) {
438
- setAmountInputValue('');
439
- }
440
- }
441
- }, [
442
- isUsdInputMode,
443
- usdInputValue,
444
- conversionRate,
445
- setAmountInputValue,
446
- fromToken?.decimals
447
- ]);
448
- //Update token output value when USD output changes in USD mode
449
- useEffect(() => {
450
- if (isUsdInputMode && tradeType === 'EXPECTED_OUTPUT') {
451
- if (toTokenPriceData?.price &&
452
- toTokenPriceData.price > 0 &&
453
- usdOutputValue) {
454
- const usdValue = Number(usdOutputValue);
455
- if (!isNaN(usdValue) && usdValue > 0) {
456
- const tokenEquivalent = (usdValue / toTokenPriceData.price).toFixed(toToken?.decimals ?? 8);
457
- setAmountOutputValue(tokenEquivalent);
458
- }
459
- }
460
- else if (usdOutputValue === '' || Number(usdOutputValue) === 0) {
461
- setAmountOutputValue('');
462
- }
463
- }
464
- }, [
465
- isUsdInputMode,
466
- tradeType,
467
- usdOutputValue,
468
- toTokenPriceData?.price,
469
- setAmountOutputValue,
470
- toToken?.decimals
471
- ]);
472
- //Update USD output value when in USD mode
473
- useEffect(() => {
474
- if (isUsdInputMode) {
475
- // For EXPECTED_OUTPUT, don't override user's typed value
476
- if (tradeType === 'EXPECTED_OUTPUT') {
477
- // User is controlling the output value directly
478
- return;
479
- }
480
- // For EXACT_INPUT, update based on quote or calculations
481
- if (quote?.details?.currencyOut?.amountUsd && !isFetchingQuote) {
482
- // Use quote USD value when available
483
- const quoteUsdValue = Number(quote.details.currencyOut.amountUsd);
484
- if (!isNaN(quoteUsdValue) && quoteUsdValue >= 0) {
485
- setUsdOutputValue(quoteUsdValue.toFixed(2));
486
- }
487
- }
488
- else if (toTokenPriceData?.price &&
489
- toTokenPriceData.price > 0 &&
490
- amountOutputValue &&
491
- Number(amountOutputValue) > 0) {
492
- // Fallback to direct token price calculation
493
- const tokenAmount = Number(amountOutputValue);
494
- const usdEquivalent = tokenAmount * toTokenPriceData.price;
495
- if (!isNaN(usdEquivalent) && usdEquivalent >= 0) {
496
- setUsdOutputValue(usdEquivalent.toFixed(2));
497
- }
498
- }
499
- else if (!amountOutputValue || Number(amountOutputValue) === 0) {
500
- setUsdOutputValue('');
501
- }
502
- }
503
- }, [
504
- isUsdInputMode,
505
- tradeType,
506
- quote?.details?.currencyOut?.amountUsd,
507
- isFetchingQuote,
508
- toTokenPriceData?.price,
509
- amountOutputValue
510
- ]);
511
- //Update USD input value when in EXPECTED_OUTPUT mode
512
- useEffect(() => {
513
- if (isUsdInputMode && tradeType === 'EXPECTED_OUTPUT') {
514
- if (quote?.details?.currencyIn?.amountUsd && !isFetchingQuote) {
515
- // Use quote USD value when available
516
- const quoteUsdValue = Number(quote.details.currencyIn.amountUsd);
517
- if (!isNaN(quoteUsdValue) && quoteUsdValue >= 0) {
518
- setUsdInputValue(quoteUsdValue.toFixed(2));
519
- }
520
- }
521
- else if (!amountInputValue || Number(amountInputValue) === 0) {
522
- setUsdInputValue('');
523
- }
524
- }
525
- }, [
526
- isUsdInputMode,
527
- tradeType,
528
- quote?.details?.currencyIn?.amountUsd,
529
- isFetchingQuote,
530
- amountInputValue
531
- ]);
532
- const recipientLinkedWallet = linkedWallets?.find((wallet) => wallet.address === recipient);
533
- const handlePrimaryAction = () => {
534
- if (fromChainWalletVMSupported) {
535
- if (!isValidToAddress || !isValidFromAddress) {
536
- if (multiWalletSupportEnabled &&
537
- (isValidToAddress ||
538
- (!isValidToAddress && toChainWalletVMSupported))) {
539
- const chain = !isValidFromAddress ? fromChain : toChain;
540
- if (!address) {
541
- onConnectWallet?.();
542
- }
543
- else {
544
- onLinkNewWallet?.({
545
- chain,
546
- direction: !isValidFromAddress ? 'from' : 'to'
547
- })?.then((wallet) => {
548
- if (!isValidFromAddress) {
549
- onSetPrimaryWallet?.(wallet.address);
550
- }
551
- else {
552
- setDestinationAddressOverride(wallet.address);
553
- setCustomToAddress(undefined);
554
- }
555
- });
556
- }
557
- }
558
- else {
559
- setAddressModalOpen(true);
560
- }
561
- }
562
- else {
563
- swap();
564
- }
565
- }
566
- else {
567
- if (!isValidToAddress) {
568
- if (multiWalletSupportEnabled && toChainWalletVMSupported) {
569
- if (!address) {
570
- onConnectWallet?.();
571
- }
572
- else {
573
- onLinkNewWallet?.({
574
- chain: toChain,
575
- direction: 'to'
576
- })?.then((wallet) => {
577
- if (!wallet) {
578
- return;
579
- }
580
- setDestinationAddressOverride(wallet.address);
581
- setCustomToAddress(undefined);
582
- });
583
- }
584
- }
585
- else {
586
- setAddressModalOpen(true);
587
- }
588
- }
589
- else {
590
- const swapEventData = getSwapEventData(quote?.details, quote?.fees, quote?.steps ? quote?.steps : null, linkedWallet?.connector, quoteParameters);
591
- onAnalyticEvent?.(EventNames.SWAP_CTA_CLICKED, swapEventData);
592
- setDepositAddressModalOpen(true);
593
- }
594
- }
595
- };
596
- const linkedWalletsLoading = multiWalletSupportEnabled && linkedWallets === undefined;
597
- const walletAddressLoading = Boolean(wallet && !address);
598
- useEffect(() => {
599
- if (walletsLoading || linkedWalletsLoading || walletAddressLoading) {
600
- return;
601
- }
602
- const hasLinkedCompatibleWallet = linkedWallets?.some((wallet) => wallet?.vmType && COMPATIBLE_WALLET_VMS.includes(wallet.vmType)) ?? false;
603
- const hasCompatibleWallet = Boolean(address && isValidFromAddress) || hasLinkedCompatibleWallet;
604
- const baseSelected = isBaseUsdcToken(fromToken);
605
- if (activeTab === 'buy' && !fromToken && !hasCompatibleWallet) {
606
- handleSetFromToken(BASE_USDC_TOKEN);
607
- autoSelectedFromTokenRef.current = true;
608
- return;
609
- }
610
- if (autoSelectedFromTokenRef.current && !baseSelected) {
611
- autoSelectedFromTokenRef.current = false;
612
- }
613
- if (autoSelectedFromTokenRef.current &&
614
- (activeTab !== 'buy' || hasCompatibleWallet)) {
615
- if (baseSelected) {
616
- handleSetFromToken(undefined);
617
- }
618
- autoSelectedFromTokenRef.current = false;
619
- }
620
- }, [
621
- activeTab,
622
- address,
623
- handleSetFromToken,
624
- linkedWallets,
625
- fromToken,
626
- isValidFromAddress,
627
- linkedWalletsLoading,
628
- multiWalletSupportEnabled,
629
- walletAddressLoading,
630
- walletsLoading
631
- ]);
632
- const handleTabChange = useCallback((nextTab, updateActiveTab) => {
633
- const prevTab = prevActiveTabRef.current ?? activeTab;
634
- if (nextTab === prevTab && !updateActiveTab) {
635
- return;
636
- }
637
- setAllowUnsupportedOrigin(nextTab === 'buy');
638
- setAllowUnsupportedRecipient(nextTab === 'sell');
639
- if (nextTab !== prevTab) {
640
- const storedNextState = tabTokenStateRef.current[nextTab] ?? {};
641
- const storedNextRecipient = tabRecipientRef.current[nextTab] ?? {};
642
- const prevFromToken = fromToken;
643
- const prevToToken = toToken;
644
- tabTokenStateRef.current[prevTab] = {
645
- fromToken: prevFromToken,
646
- toToken: prevToToken
647
- };
648
- tabRecipientRef.current[prevTab] = {
649
- override: typeof destinationAddressOverride === 'string'
650
- ? destinationAddressOverride
651
- : undefined,
652
- custom: typeof customToAddress === 'string'
653
- ? customToAddress
654
- : undefined
655
- };
656
- let nextFromToken;
657
- let nextToToken;
658
- if (nextTab === 'sell') {
659
- // Selling the page token: default to previously viewed token (prevToToken)
660
- nextFromToken =
661
- storedNextState.fromToken ??
662
- prevToToken ??
663
- prevFromToken ??
664
- undefined;
665
- // Payout token should remain empty unless user explicitly selected it on sell
666
- nextToToken = storedNextState.toToken ?? undefined;
667
- }
668
- else {
669
- // Buying the page token: default output token is prev page token
670
- nextToToken =
671
- storedNextState.toToken ??
672
- prevFromToken ??
673
- prevToToken ??
674
- undefined;
675
- // Payment method stays empty unless explicitly chosen on buy
676
- nextFromToken = storedNextState.fromToken ?? undefined;
677
- }
678
- handleSetFromToken(nextFromToken);
679
- handleSetToToken(nextToToken);
680
- setDestinationAddressOverride(storedNextRecipient.override);
681
- setCustomToAddress(storedNextRecipient.custom);
682
- // Auto-select first compatible wallet in buy tab if no destination is set
683
- if (nextTab === 'buy' &&
684
- multiWalletSupportEnabled &&
685
- linkedWallets &&
686
- linkedWallets.length > 0 &&
687
- !storedNextRecipient.override &&
688
- !storedNextRecipient.custom) {
689
- const toChainForRecipient = relayClient?.chains?.find((c) => c.id === nextToToken?.chainId);
690
- if (toChainForRecipient) {
691
- const compatibleWallets = linkedWallets.filter((wallet) => isWalletVmTypeCompatible(wallet.vmType, toChainForRecipient.vmType));
692
- if (compatibleWallets.length > 0) {
693
- setDestinationAddressOverride(compatibleWallets[0].address);
694
- }
695
- }
696
- }
697
- setAmountInputValue('');
698
- setAmountOutputValue('');
699
- setUsdInputValue('');
700
- setUsdOutputValue('');
701
- setTokenInputCache('');
702
- setIsUsdInputMode(nextTab === 'buy');
703
- debouncedAmountInputControls.cancel();
704
- debouncedAmountOutputControls.cancel();
705
- setOriginAddressOverride(undefined);
706
- }
707
- if (updateActiveTab) {
708
- setActiveTab(nextTab);
709
- }
710
- const desiredTradeType = nextTab === 'buy' ? 'EXPECTED_OUTPUT' : 'EXACT_INPUT';
711
- if (tradeType !== desiredTradeType) {
712
- setTradeType(desiredTradeType);
713
- }
714
- prevActiveTabRef.current = nextTab;
715
- }, [
716
- activeTab,
717
- customToAddress,
718
- debouncedAmountInputControls,
719
- debouncedAmountOutputControls,
720
- destinationAddressOverride,
721
- fromToken,
722
- handleSetFromToken,
723
- handleSetToToken,
724
- linkedWallets,
725
- multiWalletSupportEnabled,
726
- relayClient?.chains,
727
- setActiveTab,
728
- setAllowUnsupportedOrigin,
729
- setAllowUnsupportedRecipient,
730
- setAmountInputValue,
731
- setAmountOutputValue,
732
- setCustomToAddress,
733
- setDestinationAddressOverride,
734
- setIsUsdInputMode,
735
- setOriginAddressOverride,
736
- setTokenInputCache,
737
- setTradeType,
738
- setUsdInputValue,
739
- setUsdOutputValue,
740
- toToken,
741
- tradeType
742
- ]);
743
- useEffect(() => {
744
- if (prevActiveTabRef.current === activeTab) {
745
- return;
746
- }
747
- handleTabChange(activeTab, false);
748
- }, [activeTab, handleTabChange]);
749
- return (_jsxs(_Fragment, { children: [_jsx(WidgetContainer, { steps: steps, setSteps: setSteps, quoteInProgress: quoteInProgress, setQuoteInProgress: setQuoteInProgress, transactionModalOpen: transactionModalOpen, setTransactionModalOpen: setTransactionModalOpen, depositAddressModalOpen: depositAddressModalOpen, setDepositAddressModalOpen: setDepositAddressModalOpen, addressModalOpen: addressModalOpen, setAddressModalOpen: setAddressModalOpen, fromToken: fromToken, fromChain: fromChain, toToken: toToken, toChain: toChain, address: address, recipient: recipient, amountInputValue: amountInputValue, amountOutputValue: amountOutputValue, debouncedInputAmountValue: debouncedInputAmountValue, debouncedOutputAmountValue: debouncedOutputAmountValue, tradeType: tradeType, onTransactionModalOpenChange: (open) => {
750
- if (!open) {
751
- if (pendingSuccessFlush) {
752
- setPendingSuccessFlush(false);
753
- }
754
- else if (steps) {
755
- invalidateQuoteQuery();
756
- }
757
- // Abort ongoing execution
758
- if (abortController) {
759
- abortController.abort();
760
- }
761
- setSwapError(null);
762
- setSteps(null);
763
- setQuoteInProgress(null);
764
- }
765
- else if (pendingSuccessFlush) {
766
- setPendingSuccessFlush(false);
767
- }
768
- }, onDepositAddressModalOpenChange: (open) => {
769
- if (!open) {
770
- setSwapError(null);
771
- if (pendingSuccessFlush) {
772
- setPendingSuccessFlush(false);
773
- }
774
- else {
775
- invalidateQuoteQuery();
776
- }
777
- }
778
- else if (pendingSuccessFlush) {
779
- setPendingSuccessFlush(false);
780
- }
781
- }, slippageTolerance: localSlippageTolerance, swapError: swapError, setSwapError: setSwapError, onSwapSuccess: (data) => {
782
- setPendingSuccessFlush(true);
783
- setAmountInputValue('');
784
- setAmountOutputValue('');
785
- onSwapSuccess?.(data);
786
- }, onSwapValidating: onSwapValidating, onAnalyticEvent: onAnalyticEvent, invalidateBalanceQueries: invalidateBalanceQueries, invalidateQuoteQuery: invalidateQuoteQuery, customToAddress: customToAddress, setCustomToAddress: setCustomToAddress, timeEstimate: timeEstimate, wallet: wallet, linkedWallets: linkedWallets, multiWalletSupportEnabled: multiWalletSupportEnabled, children: () => {
787
- return (_jsx(Flex, { direction: "column", css: { gap: '3', width: '100%', position: 'relative' }, children: _jsx(TabsRoot, { value: activeTab, onValueChange: (value) => {
788
- const nextTab = value;
789
- handleTabChange(nextTab, true);
790
- onAnalyticEvent?.('TAB_SWITCHED', {
791
- tab: value
792
- });
793
- }, children: _jsxs(Flex, { direction: "column", css: {
794
- width: '100%',
795
- overflow: 'hidden',
796
- border: 'widget-border',
797
- minWidth: { base: 320, md: 400 },
798
- maxWidth: 408
799
- }, children: [_jsxs(TabsList, { css: {
800
- backgroundColor: 'transparent',
801
- p: '0',
802
- mb: '2'
803
- }, children: [_jsx(TabsTrigger, { value: "buy", css: {
804
- padding: '12px',
805
- background: 'none',
806
- border: '1px solid transparent',
807
- color: 'text-subtle',
808
- '&[data-state="active"]': {
809
- background: 'widget-background',
810
- borderRadius: '12px',
811
- borderColor: 'slate.4',
812
- color: 'text-default'
813
- },
814
- '&:not([data-state="active"])': {
815
- _hover: {
816
- backgroundColor: 'transparent !important'
817
- }
818
- },
819
- _dark: {
820
- '&[data-state="active"]': {
821
- background: 'widget-background',
822
- borderColor: 'gray.4'
823
- },
824
- '&:not([data-state="active"])': {
825
- _hover: {
826
- backgroundColor: 'transparent !important'
827
- }
828
- }
829
- }
830
- }, children: _jsx(Text, { style: "subtitle1", css: { color: 'inherit' }, children: "Buy" }) }), _jsx(TabsTrigger, { value: "sell", css: {
831
- padding: '12px',
832
- background: 'none',
833
- border: '1px solid transparent',
834
- color: 'text-subtle',
835
- '&[data-state="active"]': {
836
- background: 'widget-background',
837
- borderRadius: '12px',
838
- borderColor: 'slate.4',
839
- color: 'text-default'
840
- },
841
- '&:not([data-state="active"])': {
842
- _hover: {
843
- backgroundColor: 'transparent !important'
844
- }
845
- },
846
- _dark: {
847
- '&[data-state="active"]': {
848
- background: 'widget-background',
849
- borderColor: 'gray.4'
850
- },
851
- '&:not([data-state="active"])': {
852
- _hover: {
853
- backgroundColor: 'transparent !important'
854
- }
855
- }
856
- }
857
- }, children: _jsx(Text, { style: "subtitle1", css: { color: 'inherit' }, children: "Sell" }) })] }), _jsx(BuyTabContent, {
858
- // Slippage configuration
859
- slippageTolerance: localSlippageTolerance,
860
- onOpenSlippageConfig: handleOpenSlippageConfig,
861
- onSlippageToleranceChange: handleSlippageToleranceChange,
862
- // Input/output state
863
- isUsdInputMode,
864
- usdOutputValue,
865
- tradeType,
866
- amountOutputValue,
867
- amountInputValue,
868
- outputAmountUsd,
869
- setUsdOutputValue,
870
- setTradeType,
871
- setAmountOutputValue,
872
- setAmountInputValue,
873
- setUsdInputValue,
874
- toggleInputMode,
875
- debouncedAmountOutputControls,
876
- // Tokens and pricing
877
- toToken,
878
- fromToken,
879
- quote,
880
- isFetchingQuote,
881
- isLoadingToTokenPrice,
882
- toTokenPriceData,
883
- handleSetFromToken,
884
- handleSetToToken,
885
- // Balance information
886
- feeBreakdown,
887
- isLoadingFromBalance,
888
- fromBalance,
889
- fromBalancePending,
890
- toBalance,
891
- isLoadingToBalance,
892
- toBalancePending,
893
- hasInsufficientBalance,
894
- // Wallet and address management
895
- address,
896
- multiWalletSupportEnabled,
897
- linkedWallets,
898
- onSetPrimaryWallet,
899
- setOriginAddressOverride,
900
- onConnectWallet,
901
- onLinkNewWallet,
902
- disablePasteWalletAddressOption,
903
- setAddressModalOpen,
904
- // Chain and VM support
905
- fromChain,
906
- toChain,
907
- toChainWalletVMSupported,
908
- fromChainWalletVMSupported,
909
- supportedWalletVMs,
910
- // Recipient configuration
911
- recipient,
912
- setCustomToAddress,
913
- setDestinationAddressOverride,
914
- isValidToAddress,
915
- isRecipientLinked,
916
- toDisplayName,
917
- isValidFromAddress,
918
- recipientWalletSupportsChain,
919
- recipientLinkedWallet,
920
- // Chain and token locking
921
- lockToToken,
922
- lockFromToken,
923
- isSingleChainLocked,
924
- lockChainId,
925
- popularChainIds,
926
- // Modal states
927
- transactionModalOpen,
928
- depositAddressModalOpen,
929
- // Error and validation states
930
- error,
931
- isInsufficientLiquidityError,
932
- isSameCurrencySameRecipientSwap,
933
- isCapacityExceededError,
934
- isCouldNotExecuteError,
935
- // UI state and interactions
936
- showHighPriceImpactWarning,
937
- onPrimaryAction: handlePrimaryAction,
938
- debouncedInputAmountValue,
939
- debouncedOutputAmountValue,
940
- // Fee and estimation
941
- timeEstimate,
942
- relayerFeeProportion,
943
- highRelayerServiceFee,
944
- // Event handling and misc
945
- onAnalyticEvent,
946
- toChainVmType: toChain?.vmType,
947
- ctaCopy,
948
- // Payment method configuration
949
- paymentMethodMinHeight }), _jsx(SellTabContent, {
950
- // Slippage configuration
951
- slippageTolerance: localSlippageTolerance,
952
- onOpenSlippageConfig: handleOpenSlippageConfig,
953
- onSlippageToleranceChange: handleSlippageToleranceChange,
954
- // Input/output state
955
- isUsdInputMode,
956
- usdInputValue,
957
- tradeType,
958
- amountInputValue,
959
- amountOutputValue,
960
- conversionRate,
961
- inputAmountUsd,
962
- setUsdInputValue,
963
- setTradeType,
964
- setTokenInputCache,
965
- setAmountInputValue,
966
- setAmountOutputValue,
967
- setUsdOutputValue,
968
- toggleInputMode,
969
- debouncedAmountInputControls,
970
- // Tokens and pricing
971
- fromToken,
972
- toToken,
973
- quote,
974
- isFetchingQuote,
975
- fromTokenPriceData,
976
- isLoadingFromTokenPrice,
977
- handleSetFromToken,
978
- handleSetToToken,
979
- // Balance information
980
- feeBreakdown,
981
- fromBalance,
982
- isLoadingFromBalance,
983
- toBalance,
984
- isLoadingToBalance,
985
- toBalancePending,
986
- hasInsufficientBalance,
987
- fromBalancePending,
988
- // Wallet and address management
989
- address,
990
- multiWalletSupportEnabled,
991
- linkedWallets,
992
- onSetPrimaryWallet,
993
- setOriginAddressOverride,
994
- onConnectWallet,
995
- onLinkNewWallet,
996
- disablePasteWalletAddressOption,
997
- setAddressModalOpen,
998
- // Chain and VM support
999
- fromChain,
1000
- toChain,
1001
- fromChainWalletVMSupported,
1002
- toChainWalletVMSupported,
1003
- supportedWalletVMs,
1004
- // Recipient configuration
1005
- recipient,
1006
- setCustomToAddress,
1007
- setDestinationAddressOverride,
1008
- isValidToAddress,
1009
- isRecipientLinked,
1010
- toDisplayName,
1011
- isValidFromAddress,
1012
- recipientWalletSupportsChain,
1013
- recipientLinkedWallet,
1014
- // Chain and token locking
1015
- lockToToken,
1016
- lockFromToken,
1017
- isSingleChainLocked,
1018
- lockChainId,
1019
- popularChainIds,
1020
- // Modal states
1021
- transactionModalOpen,
1022
- depositAddressModalOpen,
1023
- // Error and validation states
1024
- error,
1025
- isInsufficientLiquidityError,
1026
- isSameCurrencySameRecipientSwap,
1027
- isCapacityExceededError,
1028
- isCouldNotExecuteError,
1029
- // UI state and interactions
1030
- showHighPriceImpactWarning,
1031
- onPrimaryAction: handlePrimaryAction,
1032
- debouncedInputAmountValue,
1033
- debouncedOutputAmountValue,
1034
- percentOptions: percentageOptions,
1035
- onMaxAmountClicked: handleMaxAmountClicked,
1036
- publicClient,
1037
- isFromNative,
1038
- getFeeBufferAmount,
1039
- // Fee and estimation
1040
- timeEstimate,
1041
- relayerFeeProportion,
1042
- highRelayerServiceFee,
1043
- // Event handling and misc
1044
- onAnalyticEvent,
1045
- toChainVmType: toChain?.vmType,
1046
- ctaCopy,
1047
- // Payment method configuration
1048
- paymentMethodMinHeight })] }) }) }));
1049
- } }), _jsx(UnverifiedTokenModal, { open: unverifiedTokens.length > 0, onOpenChange: () => { }, data: unverifiedTokens.length > 0 ? unverifiedTokens[0] : undefined, onDecline: (token, context) => {
1050
- if (token) {
1051
- // Track declined tokens to prevent re-prompting
1052
- const tokenKey = `${token.chainId}:${token.address.toLowerCase()}`;
1053
- declinedTokensRef.current.add(tokenKey);
1054
- onUnverifiedTokenDecline?.(token, context);
1055
- }
1056
- setUnverifiedTokens((prev) => prev.filter((unverifiedToken) => !(unverifiedToken.context === context &&
1057
- unverifiedToken.token.address === token?.address &&
1058
- unverifiedToken.token.chainId === token?.chainId)));
1059
- }, onAcceptToken: (token, context) => {
1060
- if (token) {
1061
- if (context === 'to') {
1062
- onAnalyticEvent?.(EventNames.SWAP_TOKEN_SELECT, {
1063
- direction: 'output',
1064
- token_symbol: token.symbol
1065
- });
1066
- if (token.address === fromToken?.address &&
1067
- token.chainId === fromToken?.chainId &&
1068
- address === recipient &&
1069
- (!lockToToken || !fromToken)) {
1070
- handleSetToToken(fromToken);
1071
- handleSetFromToken(toToken);
1072
- }
1073
- else {
1074
- handleSetToToken(token);
1075
- }
1076
- }
1077
- else if (context === 'from') {
1078
- onAnalyticEvent?.(EventNames.SWAP_TOKEN_SELECT, {
1079
- direction: 'input',
1080
- token_symbol: token.symbol
1081
- });
1082
- if (token.address === toToken?.address &&
1083
- token.chainId === toToken?.chainId &&
1084
- address === recipient &&
1085
- (!lockToToken || !fromToken)) {
1086
- handleSetFromToken(toToken);
1087
- handleSetToToken(fromToken);
1088
- }
1089
- else {
1090
- handleSetFromToken(token);
1091
- }
1092
- }
1093
- }
1094
- setUnverifiedTokens((prev) => prev.filter((unverifiedToken) => !(unverifiedToken.token.address === token?.address &&
1095
- unverifiedToken.token.chainId === token?.chainId)));
1096
- } })] }));
1097
- } }));
1098
- };
1099
- export default TokenWidget;
1100
- //# sourceMappingURL=index.js.map