0xtrails 0.2.4 → 0.2.6

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 (212) hide show
  1. package/dist/aave.d.ts +8 -0
  2. package/dist/aave.d.ts.map +1 -1
  3. package/dist/abortController.d.ts +8 -0
  4. package/dist/abortController.d.ts.map +1 -0
  5. package/dist/{ccip-BlV1Mry3.js → ccip-Xjh9d1gb.js} +7 -7
  6. package/dist/config.d.ts +1 -1
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/constants.d.ts +3 -0
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/error.d.ts +1 -0
  11. package/dist/error.d.ts.map +1 -1
  12. package/dist/estimate.d.ts +52 -0
  13. package/dist/estimate.d.ts.map +1 -1
  14. package/dist/fees.d.ts +19 -0
  15. package/dist/fees.d.ts.map +1 -0
  16. package/dist/{index-BNWCIGfQ.js → index-BnhdZ8Ho.js} +76406 -75798
  17. package/dist/index.js +726 -520
  18. package/dist/intents.d.ts +40 -0
  19. package/dist/intents.d.ts.map +1 -1
  20. package/dist/metaTxnMonitor.d.ts +3 -3
  21. package/dist/metaTxnMonitor.d.ts.map +1 -1
  22. package/dist/metaTxns.d.ts +3 -3
  23. package/dist/metaTxns.d.ts.map +1 -1
  24. package/dist/morpho.d.ts +8 -0
  25. package/dist/morpho.d.ts.map +1 -1
  26. package/dist/prepareSend.d.ts +19 -75
  27. package/dist/prepareSend.d.ts.map +1 -1
  28. package/dist/queryParams.d.ts.map +1 -1
  29. package/dist/relayer.d.ts +6 -6
  30. package/dist/relayer.d.ts.map +1 -1
  31. package/dist/sequenceWallet.d.ts +2 -2
  32. package/dist/sequenceWallet.d.ts.map +1 -1
  33. package/dist/tokens.d.ts.map +1 -1
  34. package/dist/transactions.d.ts +4 -2
  35. package/dist/transactions.d.ts.map +1 -1
  36. package/dist/wallets.d.ts.map +1 -1
  37. package/dist/widget/components/AccountActionsDropdown.d.ts.map +1 -1
  38. package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts +4 -0
  39. package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts.map +1 -0
  40. package/dist/widget/components/AccountSettings.d.ts.map +1 -1
  41. package/dist/widget/components/ChainFilterDropdown.d.ts.map +1 -1
  42. package/dist/widget/components/ClassicSwap.d.ts +4 -2
  43. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  44. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  45. package/dist/widget/components/ConnectedWallets.d.ts +4 -0
  46. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  47. package/dist/widget/components/DynamicInputStyles.d.ts +18 -0
  48. package/dist/widget/components/DynamicInputStyles.d.ts.map +1 -0
  49. package/dist/widget/components/Earn.d.ts +2 -2
  50. package/dist/widget/components/Earn.d.ts.map +1 -1
  51. package/dist/widget/components/ErrorAnimationIcon.d.ts +2 -0
  52. package/dist/widget/components/ErrorAnimationIcon.d.ts.map +1 -0
  53. package/dist/widget/components/FeeBreakdown.d.ts +9 -0
  54. package/dist/widget/components/FeeBreakdown.d.ts.map +1 -0
  55. package/dist/widget/components/Fund.d.ts +2 -2
  56. package/dist/widget/components/Fund.d.ts.map +1 -1
  57. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  58. package/dist/widget/components/{FundSendForm.d.ts → FundSwap.d.ts} +13 -7
  59. package/dist/widget/components/FundSwap.d.ts.map +1 -0
  60. package/dist/widget/components/FundingMethodSelectorButton.d.ts +4 -0
  61. package/dist/widget/components/FundingMethodSelectorButton.d.ts.map +1 -0
  62. package/dist/widget/components/Identicon.d.ts.map +1 -1
  63. package/dist/widget/components/MeshConnectExchanges.d.ts +0 -3
  64. package/dist/widget/components/MeshConnectExchanges.d.ts.map +1 -1
  65. package/dist/widget/components/Modal.d.ts.map +1 -1
  66. package/dist/widget/components/Pay.d.ts +2 -2
  67. package/dist/widget/components/Pay.d.ts.map +1 -1
  68. package/dist/widget/components/PercentageMaxButtons.d.ts +12 -0
  69. package/dist/widget/components/PercentageMaxButtons.d.ts.map +1 -0
  70. package/dist/widget/components/{PaySendForm.d.ts → PoolDeposit.d.ts} +14 -36
  71. package/dist/widget/components/PoolDeposit.d.ts.map +1 -0
  72. package/dist/widget/components/{SimpleSwap.d.ts → PoolWithdraw.d.ts} +19 -10
  73. package/dist/widget/components/PoolWithdraw.d.ts.map +1 -0
  74. package/dist/widget/components/QuoteDetails.d.ts +1 -0
  75. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  76. package/dist/widget/components/Receipt.d.ts.map +1 -1
  77. package/dist/widget/components/Receive.d.ts.map +1 -1
  78. package/dist/widget/components/RecipientSelectorButton.d.ts +4 -0
  79. package/dist/widget/components/RecipientSelectorButton.d.ts.map +1 -0
  80. package/dist/widget/components/Recipients.d.ts.map +1 -1
  81. package/dist/widget/components/RequiredPropsError.d.ts +8 -0
  82. package/dist/widget/components/RequiredPropsError.d.ts.map +1 -0
  83. package/dist/widget/components/ScreenHeader.d.ts.map +1 -1
  84. package/dist/widget/components/SlippageToleranceSettings.d.ts.map +1 -1
  85. package/dist/widget/components/Swap.d.ts +3 -2
  86. package/dist/widget/components/Swap.d.ts.map +1 -1
  87. package/dist/widget/components/SwapSettings.d.ts.map +1 -1
  88. package/dist/widget/components/ThemeProvider.d.ts.map +1 -1
  89. package/dist/widget/components/TokenDisplayNonSelectable.d.ts +11 -0
  90. package/dist/widget/components/TokenDisplayNonSelectable.d.ts.map +1 -0
  91. package/dist/widget/components/TokenImage.d.ts +1 -0
  92. package/dist/widget/components/TokenImage.d.ts.map +1 -1
  93. package/dist/widget/components/TokenList.d.ts.map +1 -1
  94. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  95. package/dist/widget/components/TokenSelectorButton.d.ts +16 -0
  96. package/dist/widget/components/TokenSelectorButton.d.ts.map +1 -0
  97. package/dist/widget/components/Tooltip.d.ts +9 -0
  98. package/dist/widget/components/Tooltip.d.ts.map +1 -0
  99. package/dist/widget/components/UserPreferences.d.ts.map +1 -1
  100. package/dist/widget/components/WaasFeeOptions.d.ts +9 -0
  101. package/dist/widget/components/WaasFeeOptions.d.ts.map +1 -0
  102. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -1
  103. package/dist/widget/components/WalletConnect.d.ts.map +1 -1
  104. package/dist/widget/components/WalletList.d.ts.map +1 -1
  105. package/dist/widget/css/compiled.css +2 -0
  106. package/dist/widget/css/index.css +554 -0
  107. package/dist/widget/hooks/useBack.d.ts +1 -0
  108. package/dist/widget/hooks/useBack.d.ts.map +1 -1
  109. package/dist/widget/hooks/useCheckout.d.ts +1 -1
  110. package/dist/widget/hooks/useCheckout.d.ts.map +1 -1
  111. package/dist/widget/hooks/useCurrentScreen.d.ts +1 -1
  112. package/dist/widget/hooks/useCurrentScreen.d.ts.map +1 -1
  113. package/dist/widget/hooks/useDefaultTokenSelection.d.ts +3 -3
  114. package/dist/widget/hooks/useDefaultTokenSelection.d.ts.map +1 -1
  115. package/dist/widget/hooks/usePayMessage.d.ts.map +1 -1
  116. package/dist/widget/hooks/useQuote.d.ts +83 -0
  117. package/dist/widget/hooks/useQuote.d.ts.map +1 -0
  118. package/dist/widget/hooks/useSelectedFundMethod.d.ts +12 -0
  119. package/dist/widget/hooks/useSelectedFundMethod.d.ts.map +1 -0
  120. package/dist/widget/hooks/useSelectedRecipient.d.ts.map +1 -1
  121. package/dist/widget/hooks/useSendForm.d.ts +2 -2
  122. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  123. package/dist/widget/index.js +2 -2
  124. package/dist/widget/widget.d.ts +9 -4
  125. package/dist/widget/widget.d.ts.map +1 -1
  126. package/package.json +18 -12
  127. package/src/aave.ts +32 -0
  128. package/src/abortController.ts +35 -0
  129. package/src/config.ts +12 -4
  130. package/src/constants.ts +5 -0
  131. package/src/error.ts +19 -1
  132. package/src/estimate.ts +416 -5
  133. package/src/fees.ts +199 -0
  134. package/src/intents.ts +161 -11
  135. package/src/metaTxnMonitor.ts +3 -3
  136. package/src/metaTxns.ts +3 -5
  137. package/src/morpho.ts +32 -0
  138. package/src/prepareSend.ts +714 -550
  139. package/src/queryParams.ts +2 -1
  140. package/src/relayer.ts +11 -11
  141. package/src/sequenceWallet.ts +2 -2
  142. package/src/tokens.ts +7 -1
  143. package/src/trails.ts +3 -3
  144. package/src/transactions.ts +62 -18
  145. package/src/wallets.ts +8 -0
  146. package/src/widget/compiled.css +2 -2
  147. package/src/widget/components/AccountActionsDropdown.tsx +3 -13
  148. package/src/widget/components/AccountIntentTransactionHistoryButton.tsx +22 -0
  149. package/src/widget/components/AccountSettings.tsx +48 -54
  150. package/src/widget/components/ChainFilterDropdown.tsx +24 -3
  151. package/src/widget/components/ClassicSwap.tsx +131 -213
  152. package/src/widget/components/ConnectWallet.tsx +8 -38
  153. package/src/widget/components/ConnectedWallets.tsx +132 -77
  154. package/src/widget/components/DynamicInputStyles.tsx +76 -0
  155. package/src/widget/components/Earn.tsx +82 -593
  156. package/src/widget/components/ErrorAnimationIcon.tsx +130 -0
  157. package/src/widget/components/FeeBreakdown.tsx +155 -0
  158. package/src/widget/components/Fund.tsx +41 -108
  159. package/src/widget/components/FundMethods.tsx +82 -159
  160. package/src/widget/components/FundSwap.tsx +52 -0
  161. package/src/widget/components/FundingMethodSelectorButton.tsx +70 -0
  162. package/src/widget/components/Identicon.tsx +164 -95
  163. package/src/widget/components/MeshConnectExchanges.tsx +2 -15
  164. package/src/widget/components/Modal.tsx +0 -8
  165. package/src/widget/components/Pay.tsx +214 -237
  166. package/src/widget/components/PercentageMaxButtons.tsx +77 -0
  167. package/src/widget/components/PoolDeposit.tsx +569 -0
  168. package/src/widget/components/PoolWithdraw.tsx +884 -0
  169. package/src/widget/components/PriceImpactWarning.tsx +1 -1
  170. package/src/widget/components/QuoteDetails.tsx +43 -12
  171. package/src/widget/components/Receipt.tsx +16 -2
  172. package/src/widget/components/Receive.tsx +0 -2
  173. package/src/widget/components/RecipientSelectorButton.tsx +44 -0
  174. package/src/widget/components/Recipients.tsx +63 -157
  175. package/src/widget/components/RequiredPropsError.tsx +33 -0
  176. package/src/widget/components/ScreenHeader.tsx +62 -34
  177. package/src/widget/components/SlippageToleranceSettings.tsx +2 -1
  178. package/src/widget/components/Swap.tsx +4 -45
  179. package/src/widget/components/SwapSettings.tsx +2 -14
  180. package/src/widget/components/ThemeProvider.tsx +2 -1
  181. package/src/widget/components/TokenDisplayNonSelectable.tsx +40 -0
  182. package/src/widget/components/TokenImage.tsx +22 -5
  183. package/src/widget/components/TokenList.tsx +0 -1
  184. package/src/widget/components/TokenSelector.tsx +63 -53
  185. package/src/widget/components/TokenSelectorButton.tsx +98 -0
  186. package/src/widget/components/Tooltip.tsx +51 -0
  187. package/src/widget/components/TransferPendingVertical.tsx +1 -1
  188. package/src/widget/components/UserPreferences.tsx +6 -24
  189. package/src/widget/components/WaasFeeOptions.tsx +450 -0
  190. package/src/widget/components/WalletConfirmation.tsx +76 -14
  191. package/src/widget/components/WalletConnect.tsx +93 -29
  192. package/src/widget/components/WalletList.tsx +4 -2
  193. package/src/widget/hooks/useBack.tsx +2 -0
  194. package/src/widget/hooks/useCheckout.ts +36 -20
  195. package/src/widget/hooks/useCurrentScreen.tsx +1 -0
  196. package/src/widget/hooks/useDefaultTokenSelection.tsx +104 -28
  197. package/src/widget/hooks/usePayMessage.tsx +86 -11
  198. package/src/widget/hooks/useQuote.ts +413 -0
  199. package/src/widget/hooks/useSelectedFundMethod.tsx +41 -0
  200. package/src/widget/hooks/useSelectedRecipient.tsx +10 -0
  201. package/src/widget/hooks/useSendForm.ts +32 -6
  202. package/src/widget/index.css +27 -0
  203. package/src/widget/widget.tsx +326 -283
  204. package/dist/widget/components/FundSendForm.d.ts.map +0 -1
  205. package/dist/widget/components/PaySendForm.d.ts.map +0 -1
  206. package/dist/widget/components/SimpleSwap.d.ts.map +0 -1
  207. package/dist/widget/hooks/useSwapSettings.d.ts +0 -16
  208. package/dist/widget/hooks/useSwapSettings.d.ts.map +0 -1
  209. package/src/widget/components/FundSendForm.tsx +0 -903
  210. package/src/widget/components/PaySendForm.tsx +0 -869
  211. package/src/widget/components/SimpleSwap.tsx +0 -983
  212. package/src/widget/hooks/useSwapSettings.tsx +0 -100
@@ -9,6 +9,7 @@ import {
9
9
  type WalletClient,
10
10
  zeroAddress,
11
11
  } from "viem"
12
+ import { useAccount } from "wagmi"
12
13
  import { useAPIClient } from "../../apiClient.js"
13
14
  import { getChainInfo, useSupportedChains } from "../../chains.js"
14
15
  import { getFullErrorMessage, getPrettifiedErrorMessage } from "../../error.js"
@@ -83,14 +84,14 @@ export type OnCompleteProps = {
83
84
  }
84
85
 
85
86
  export type UseSendProps = {
86
- account: Account
87
+ account?: Account
87
88
  toAmount?: string
88
89
  toRecipient?: string
89
90
  toChainId?: number
90
91
  toToken?: string
91
92
  toCalldata?: string
92
93
  refundAddress?: string
93
- walletClient: WalletClient
94
+ walletClient?: WalletClient
94
95
  onTransactionStateChange: (transactionStates: TransactionState[]) => void
95
96
  onError: (error: Error | string | null) => void
96
97
  onWaitingForWalletConfirm: (quote: PrepareSendQuote) => void
@@ -207,6 +208,10 @@ export function useSendForm({
207
208
  checkoutOnHandlers,
208
209
  refetchTrigger = 0,
209
210
  }: UseSendProps): UseSendReturn {
211
+ // Get the active wallet ID from wagmi
212
+ const { connector } = useAccount()
213
+ const walletId = connector?.id
214
+
210
215
  // Auto-set quoteProvider to "lifi" if either from or to chain is etherlink
211
216
  const effectiveQuoteProvider = useMemo(() => {
212
217
  if (!quoteProvider || quoteProvider === "auto") {
@@ -682,6 +687,7 @@ export function useSendForm({
682
687
  const getQuote = useCallback(async () => {
683
688
  // Only get quote if all required inputs are present
684
689
  if (
690
+ !account ||
685
691
  !amount ||
686
692
  !destinationTokenAddress ||
687
693
  !isValidRecipient ||
@@ -804,6 +810,9 @@ export function useSendForm({
804
810
  nativeTokenPriceUsd = nativePrice?.price?.value ?? 0
805
811
  }
806
812
 
813
+ // Disable gasless for sequence-waas wallet
814
+ const effectiveGasless = walletId === "sequence-waas" ? false : gasless
815
+
807
816
  const options = {
808
817
  account,
809
818
  originTokenAddress: selectedToken.contractAddress,
@@ -840,13 +849,14 @@ export function useSendForm({
840
849
  paymasterUrls?.find(
841
850
  (p) => p.chainId.toString() === selectedToken.chainId.toString(),
842
851
  )?.url ?? undefined,
843
- gasless,
852
+ gasless: effectiveGasless,
844
853
  originNativeTokenPriceUsd: nativeTokenPriceUsd,
845
854
  quoteProvider: effectiveQuoteProvider,
846
855
  mode,
847
856
  fundMethod,
848
857
  checkoutOnHandlers,
849
858
  selectedFeeToken,
859
+ walletId,
850
860
  }
851
861
 
852
862
  logger.console.log(
@@ -901,6 +911,7 @@ export function useSendForm({
901
911
  checkoutOnHandlers,
902
912
  mode,
903
913
  selectedFeeToken,
914
+ walletId,
904
915
  ])
905
916
 
906
917
  // Auto-fetch quotes when inputs change (debounced)
@@ -935,6 +946,7 @@ export function useSendForm({
935
946
  selectedToken?.chainId,
936
947
  selectedToken?.balance,
937
948
  selectedToken?.tokenPriceUsd,
949
+ recipient, // Add recipient to trigger quote re-fetch when it changes
938
950
  // selectedFeeToken is passed to send() at execution time, not needed here
939
951
  ])
940
952
 
@@ -948,7 +960,8 @@ export function useSendForm({
948
960
  }, [prepareSendResult, toAmountFormatted])
949
961
 
950
962
  const quotedDestinationAmountDisplay = useMemo(() => {
951
- return formatAmountDisplay(quotedDestinationAmount || "0")
963
+ const formattedAmount = formatAmount(quotedDestinationAmount || 0)
964
+ return Number(formattedAmount) === 0 ? "0" : formattedAmount
952
965
  }, [quotedDestinationAmount])
953
966
 
954
967
  // Set raw fee options in the hook whenever prepareSendResult changes
@@ -1148,6 +1161,7 @@ export function useSendForm({
1148
1161
 
1149
1162
  // Get button text based on recipient and calldata
1150
1163
  const buttonText = useMemo(() => {
1164
+ if (!account?.address) return "Connect your wallet"
1151
1165
  if (!selectedToken) return "Select a token"
1152
1166
  if (!amount) return "Enter an amount"
1153
1167
  if (!selectedDestToken?.symbol) return "Select a token"
@@ -1194,7 +1208,19 @@ export function useSendForm({
1194
1208
  }
1195
1209
 
1196
1210
  if (!fundMethod || fundMethod === "wallet") {
1197
- return `Continue on wallet`
1211
+ if (mode === "pay") {
1212
+ return `Pay`
1213
+ } else if (mode === "fund") {
1214
+ return `Fund`
1215
+ } else if (mode === "swap") {
1216
+ return `Swap`
1217
+ } else if (mode === "earn") {
1218
+ return `Deposit`
1219
+ } else if (mode === "receive") {
1220
+ return `Pay`
1221
+ } else {
1222
+ return `Continue on wallet`
1223
+ }
1198
1224
  }
1199
1225
 
1200
1226
  if (mode === "swap") {
@@ -1229,7 +1255,7 @@ export function useSendForm({
1229
1255
  amount,
1230
1256
  isValidRecipient,
1231
1257
  recipient,
1232
- account.address,
1258
+ account?.address,
1233
1259
  selectedDestToken?.symbol,
1234
1260
  isWaitingForWalletConfirm,
1235
1261
  isSubmitting,
@@ -39,6 +39,11 @@
39
39
  --trails-modal-button-hover-bg: var(--trails-primary-hover, rgb(17 75 202)); /* Defaults to primary hover */
40
40
  --trails-modal-button-text: rgb(255 255 255); /* white text */
41
41
  --trails-modal-button-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); /* subtle shadow */
42
+
43
+ /* Percentage Button Colors - Customizable percentage buttons */
44
+ --trails-percentage-button-bg: rgb(228 228 231); /* #E4E4E7 - Light gray background */
45
+ --trails-percentage-button-text: rgb(113 113 123); /* #71717B - Dark gray text */
46
+ --trails-percentage-button-hover-bg: rgb(212 212 216); /* #D4D4D8 - Slightly darker on hover */
42
47
  }
43
48
 
44
49
  /* Utility Classes that use CSS Variables */
@@ -110,6 +115,18 @@
110
115
  color: var(--trails-hover-text);
111
116
  }
112
117
 
118
+ .trails-bg-percentage-button {
119
+ background-color: var(--trails-percentage-button-bg);
120
+ }
121
+
122
+ .trails-text-percentage-button {
123
+ color: var(--trails-percentage-button-text);
124
+ }
125
+
126
+ .trails-hover-percentage-button:hover {
127
+ background-color: var(--trails-percentage-button-hover-bg);
128
+ }
129
+
113
130
 
114
131
 
115
132
  /* Font Family Utility Class */
@@ -304,6 +321,11 @@
304
321
  /* Shadow */
305
322
  --trails-shadow:
306
323
  0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
324
+
325
+ /* Percentage Button Colors - Light Mode */
326
+ --trails-percentage-button-bg: rgb(228 228 231); /* #E4E4E7 - Light gray background */
327
+ --trails-percentage-button-text: rgb(113 113 123); /* #71717B - Dark gray text */
328
+ --trails-percentage-button-hover-bg: rgb(212 212 216); /* #D4D4D8 - Slightly darker on hover */
307
329
  }
308
330
 
309
331
  /* Dark Mode Theme Variables */
@@ -391,6 +413,11 @@
391
413
  /* Shadow */
392
414
  --trails-shadow:
393
415
  0 1px 3px 0 rgb(0 0 0 / 0.3), 0 1px 2px -1px rgb(0 0 0 / 0.3);
416
+
417
+ /* Percentage Button Colors - Dark Mode */
418
+ --trails-percentage-button-bg: rgb(55 65 81); /* gray-700 - Dark gray background */
419
+ --trails-percentage-button-text: rgb(209 213 219); /* gray-300 - Light gray text */
420
+ --trails-percentage-button-hover-bg: rgb(75 85 99); /* gray-600 - Slightly lighter on hover */
394
421
  }
395
422
 
396
423
  /* Custom Scrollbar Styles */