0xtrails 0.2.4 → 0.2.5

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 (161) hide show
  1. package/dist/aave.d.ts +8 -0
  2. package/dist/aave.d.ts.map +1 -1
  3. package/dist/{ccip-BlV1Mry3.js → ccip-CXlshvBY.js} +1 -1
  4. package/dist/config.d.ts +1 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/constants.d.ts +1 -0
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/error.d.ts +1 -0
  9. package/dist/error.d.ts.map +1 -1
  10. package/dist/estimate.d.ts +52 -0
  11. package/dist/estimate.d.ts.map +1 -1
  12. package/dist/{index-BNWCIGfQ.js → index-_QuyGrjU.js} +72332 -72246
  13. package/dist/index.js +2 -2
  14. package/dist/intents.d.ts +40 -0
  15. package/dist/intents.d.ts.map +1 -1
  16. package/dist/metaTxnMonitor.d.ts +3 -3
  17. package/dist/metaTxnMonitor.d.ts.map +1 -1
  18. package/dist/metaTxns.d.ts +3 -3
  19. package/dist/metaTxns.d.ts.map +1 -1
  20. package/dist/morpho.d.ts +8 -0
  21. package/dist/morpho.d.ts.map +1 -1
  22. package/dist/prepareSend.d.ts +16 -6
  23. package/dist/prepareSend.d.ts.map +1 -1
  24. package/dist/queryParams.d.ts.map +1 -1
  25. package/dist/relayer.d.ts +6 -6
  26. package/dist/relayer.d.ts.map +1 -1
  27. package/dist/sequenceWallet.d.ts +2 -2
  28. package/dist/sequenceWallet.d.ts.map +1 -1
  29. package/dist/tokens.d.ts.map +1 -1
  30. package/dist/wallets.d.ts.map +1 -1
  31. package/dist/widget/components/AccountActionsDropdown.d.ts.map +1 -1
  32. package/dist/widget/components/AccountSettings.d.ts.map +1 -1
  33. package/dist/widget/components/ClassicSwap.d.ts +2 -0
  34. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  35. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  36. package/dist/widget/components/ConnectedWallets.d.ts +4 -0
  37. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  38. package/dist/widget/components/Earn.d.ts.map +1 -1
  39. package/dist/widget/components/Fund.d.ts.map +1 -1
  40. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  41. package/dist/widget/components/{FundSendForm.d.ts → FundSwap.d.ts} +11 -5
  42. package/dist/widget/components/FundSwap.d.ts.map +1 -0
  43. package/dist/widget/components/FundingMethodSelectorButton.d.ts +4 -0
  44. package/dist/widget/components/FundingMethodSelectorButton.d.ts.map +1 -0
  45. package/dist/widget/components/Modal.d.ts.map +1 -1
  46. package/dist/widget/components/Pay.d.ts.map +1 -1
  47. package/dist/widget/components/PercentageMaxButtons.d.ts +12 -0
  48. package/dist/widget/components/PercentageMaxButtons.d.ts.map +1 -0
  49. package/dist/widget/components/{PaySendForm.d.ts → PoolDeposit.d.ts} +11 -34
  50. package/dist/widget/components/PoolDeposit.d.ts.map +1 -0
  51. package/dist/widget/components/{SimpleSwap.d.ts → PoolWithdraw.d.ts} +16 -8
  52. package/dist/widget/components/PoolWithdraw.d.ts.map +1 -0
  53. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  54. package/dist/widget/components/Receive.d.ts.map +1 -1
  55. package/dist/widget/components/RecipientSelectorButton.d.ts +4 -0
  56. package/dist/widget/components/RecipientSelectorButton.d.ts.map +1 -0
  57. package/dist/widget/components/Recipients.d.ts.map +1 -1
  58. package/dist/widget/components/RequiredPropsError.d.ts +8 -0
  59. package/dist/widget/components/RequiredPropsError.d.ts.map +1 -0
  60. package/dist/widget/components/ScreenHeader.d.ts.map +1 -1
  61. package/dist/widget/components/SlippageToleranceSettings.d.ts.map +1 -1
  62. package/dist/widget/components/Swap.d.ts +1 -0
  63. package/dist/widget/components/Swap.d.ts.map +1 -1
  64. package/dist/widget/components/SwapSettings.d.ts.map +1 -1
  65. package/dist/widget/components/TokenImage.d.ts +1 -0
  66. package/dist/widget/components/TokenImage.d.ts.map +1 -1
  67. package/dist/widget/components/TokenList.d.ts.map +1 -1
  68. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  69. package/dist/widget/components/TokenSelectorButton.d.ts +16 -0
  70. package/dist/widget/components/TokenSelectorButton.d.ts.map +1 -0
  71. package/dist/widget/components/UserPreferences.d.ts.map +1 -1
  72. package/dist/widget/components/WaasFeeOptions.d.ts +8 -0
  73. package/dist/widget/components/WaasFeeOptions.d.ts.map +1 -0
  74. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -1
  75. package/dist/widget/components/WalletList.d.ts.map +1 -1
  76. package/dist/widget/css/compiled.css +2 -0
  77. package/dist/widget/css/index.css +554 -0
  78. package/dist/widget/hooks/useBack.d.ts +1 -0
  79. package/dist/widget/hooks/useBack.d.ts.map +1 -1
  80. package/dist/widget/hooks/useCheckout.d.ts +1 -1
  81. package/dist/widget/hooks/useCheckout.d.ts.map +1 -1
  82. package/dist/widget/hooks/useCurrentScreen.d.ts +1 -1
  83. package/dist/widget/hooks/useCurrentScreen.d.ts.map +1 -1
  84. package/dist/widget/hooks/useDefaultTokenSelection.d.ts +3 -3
  85. package/dist/widget/hooks/useDefaultTokenSelection.d.ts.map +1 -1
  86. package/dist/widget/hooks/usePayMessage.d.ts.map +1 -1
  87. package/dist/widget/hooks/useSelectedFundMethod.d.ts +12 -0
  88. package/dist/widget/hooks/useSelectedFundMethod.d.ts.map +1 -0
  89. package/dist/widget/hooks/useSelectedRecipient.d.ts.map +1 -1
  90. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  91. package/dist/widget/index.js +1 -1
  92. package/dist/widget/widget.d.ts +4 -4
  93. package/dist/widget/widget.d.ts.map +1 -1
  94. package/package.json +18 -12
  95. package/src/aave.ts +32 -0
  96. package/src/config.ts +12 -4
  97. package/src/constants.ts +2 -0
  98. package/src/error.ts +19 -1
  99. package/src/estimate.ts +416 -5
  100. package/src/intents.ts +161 -11
  101. package/src/metaTxnMonitor.ts +3 -3
  102. package/src/metaTxns.ts +3 -5
  103. package/src/morpho.ts +32 -0
  104. package/src/prepareSend.ts +503 -166
  105. package/src/queryParams.ts +2 -1
  106. package/src/relayer.ts +11 -11
  107. package/src/sequenceWallet.ts +2 -2
  108. package/src/tokens.ts +7 -1
  109. package/src/wallets.ts +8 -0
  110. package/src/widget/compiled.css +2 -2
  111. package/src/widget/components/AccountActionsDropdown.tsx +3 -13
  112. package/src/widget/components/AccountSettings.tsx +6 -24
  113. package/src/widget/components/ClassicSwap.tsx +111 -155
  114. package/src/widget/components/ConnectWallet.tsx +4 -37
  115. package/src/widget/components/ConnectedWallets.tsx +113 -58
  116. package/src/widget/components/Earn.tsx +73 -589
  117. package/src/widget/components/Fund.tsx +31 -82
  118. package/src/widget/components/FundMethods.tsx +82 -159
  119. package/src/widget/components/FundSwap.tsx +52 -0
  120. package/src/widget/components/FundingMethodSelectorButton.tsx +60 -0
  121. package/src/widget/components/Modal.tsx +6 -2
  122. package/src/widget/components/Pay.tsx +183 -208
  123. package/src/widget/components/PercentageMaxButtons.tsx +77 -0
  124. package/src/widget/components/PoolDeposit.tsx +593 -0
  125. package/src/widget/components/PoolWithdraw.tsx +903 -0
  126. package/src/widget/components/QuoteDetails.tsx +22 -8
  127. package/src/widget/components/Receive.tsx +0 -2
  128. package/src/widget/components/RecipientSelectorButton.tsx +42 -0
  129. package/src/widget/components/Recipients.tsx +62 -156
  130. package/src/widget/components/RequiredPropsError.tsx +33 -0
  131. package/src/widget/components/ScreenHeader.tsx +5 -1
  132. package/src/widget/components/SlippageToleranceSettings.tsx +2 -1
  133. package/src/widget/components/Swap.tsx +2 -43
  134. package/src/widget/components/SwapSettings.tsx +2 -14
  135. package/src/widget/components/TokenImage.tsx +21 -4
  136. package/src/widget/components/TokenList.tsx +0 -1
  137. package/src/widget/components/TokenSelector.tsx +1 -0
  138. package/src/widget/components/TokenSelectorButton.tsx +75 -0
  139. package/src/widget/components/UserPreferences.tsx +6 -24
  140. package/src/widget/components/WaasFeeOptions.tsx +331 -0
  141. package/src/widget/components/WalletConfirmation.tsx +55 -3
  142. package/src/widget/components/WalletList.tsx +4 -2
  143. package/src/widget/hooks/useBack.tsx +2 -0
  144. package/src/widget/hooks/useCheckout.ts +36 -20
  145. package/src/widget/hooks/useCurrentScreen.tsx +1 -0
  146. package/src/widget/hooks/useDefaultTokenSelection.tsx +104 -28
  147. package/src/widget/hooks/usePayMessage.tsx +86 -11
  148. package/src/widget/hooks/useSelectedFundMethod.tsx +41 -0
  149. package/src/widget/hooks/useSelectedRecipient.tsx +10 -0
  150. package/src/widget/hooks/useSendForm.ts +24 -2
  151. package/src/widget/index.css +27 -0
  152. package/src/widget/widget.tsx +169 -111
  153. package/dist/widget/components/FundSendForm.d.ts.map +0 -1
  154. package/dist/widget/components/PaySendForm.d.ts.map +0 -1
  155. package/dist/widget/components/SimpleSwap.d.ts.map +0 -1
  156. package/dist/widget/hooks/useSwapSettings.d.ts +0 -16
  157. package/dist/widget/hooks/useSwapSettings.d.ts.map +0 -1
  158. package/src/widget/components/FundSendForm.tsx +0 -903
  159. package/src/widget/components/PaySendForm.tsx +0 -869
  160. package/src/widget/components/SimpleSwap.tsx +0 -983
  161. package/src/widget/hooks/useSwapSettings.tsx +0 -100
@@ -1,6 +1,6 @@
1
1
  import { useState } from "react"
2
2
  import type React from "react"
3
- import { Wallet, Copy, X } from "lucide-react"
3
+ import { Wallet, Copy, X, ChevronRight } from "lucide-react"
4
4
  import {
5
5
  useAccount,
6
6
  useConnections,
@@ -12,11 +12,17 @@ import { logger } from "../../logger.js"
12
12
  import { truncateAddress } from "../../utils.js"
13
13
  import { useAccountTotalBalanceUsd } from "../../tokenBalances.js"
14
14
  import { Identicon } from "./Identicon.js"
15
+ import { useBack } from "../hooks/useBack.js"
16
+ import type { Screen } from "../hooks/useCurrentScreen.js"
15
17
 
16
18
  export interface ConnectedWalletsProps {
17
19
  onWalletSwitch?: (address: string) => void
20
+ onWalletSelect?: (address: string, connector: any) => void
18
21
  showActiveWallet?: boolean
22
+ showConnectNewWallet?: boolean
23
+ showDisconnect?: boolean
19
24
  className?: string
25
+ backScreen?: string
20
26
  }
21
27
 
22
28
  interface WalletItemProps {
@@ -28,17 +34,21 @@ interface WalletItemProps {
28
34
  isActive: boolean
29
35
  }
30
36
  onWalletSwitch: (address: string, connector: any) => void
37
+ onWalletSelect?: (address: string, connector: any) => void
31
38
  onDisconnect: (connector: any, e: React.MouseEvent) => void
32
39
  onCopyAddress: (address: string, e: React.MouseEvent) => void
33
40
  copiedAddress: string | null
41
+ showDisconnect?: boolean
34
42
  }
35
43
 
36
44
  const WalletItem: React.FC<WalletItemProps> = ({
37
45
  wallet,
38
46
  onWalletSwitch,
47
+ onWalletSelect,
39
48
  onDisconnect,
40
49
  onCopyAddress,
41
50
  copiedAddress,
51
+ showDisconnect = false,
42
52
  }) => {
43
53
  const { totalBalanceUsdFormatted, isLoadingTotalBalanceUsd } =
44
54
  useAccountTotalBalanceUsd(wallet.address)
@@ -46,22 +56,29 @@ const WalletItem: React.FC<WalletItemProps> = ({
46
56
  return (
47
57
  <div className="space-y-1">
48
58
  {/* Wallet Button */}
49
- <div
59
+ <button
60
+ type="button"
50
61
  onClick={() => {
51
- if (!wallet.isActive) {
62
+ if (onWalletSelect) {
63
+ onWalletSelect(wallet.address, wallet.connector)
64
+ } else if (!wallet.isActive) {
52
65
  onWalletSwitch(wallet.address, wallet.connector)
53
66
  }
54
67
  }}
55
68
  onKeyDown={(e) => {
56
- if ((e.key === "Enter" || e.key === " ") && !wallet.isActive) {
69
+ if (e.key === "Enter" || e.key === " ") {
57
70
  e.preventDefault()
58
- onWalletSwitch(wallet.address, wallet.connector)
71
+ if (onWalletSelect) {
72
+ onWalletSelect(wallet.address, wallet.connector)
73
+ } else if (!wallet.isActive) {
74
+ onWalletSwitch(wallet.address, wallet.connector)
75
+ }
59
76
  }
60
77
  }}
61
78
  tabIndex={wallet.isActive ? -1 : 0}
62
- className={`group w-full flex items-center justify-between font-medium py-2 px-3 rounded-lg transition-all duration-200 ${
79
+ className={`group w-full flex items-center justify-between font-medium py-2 px-3 transition-all duration-200 ${
63
80
  wallet.isActive
64
- ? "bg-blue-50 dark:bg-blue-900/20 text-gray-700 dark:text-gray-300 cursor-default"
81
+ ? "bg-blue-50 dark:bg-blue-900/20 text-gray-700 dark:text-gray-300 cursor-pointer"
65
82
  : "bg-gray-50 dark:bg-gray-700 text-gray-700 dark:text-gray-300 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600"
66
83
  }`}
67
84
  >
@@ -80,23 +97,17 @@ const WalletItem: React.FC<WalletItemProps> = ({
80
97
  ) : (
81
98
  <Wallet className="h-4 w-4 text-gray-600 dark:text-gray-400" />
82
99
  )}
83
- <span className="text-sm">
100
+ <span className="text-sm font-bold text-gray-900 dark:text-gray-100">
84
101
  {wallet.walletConfig?.name ||
85
102
  wallet.connector?.name ||
86
103
  "Wallet"}
87
104
  </span>
88
- {!isLoadingTotalBalanceUsd && totalBalanceUsdFormatted && (
89
- <span className="text-xs text-gray-400 dark:text-gray-500">
90
- {totalBalanceUsdFormatted}
91
- </span>
92
- )}
93
105
  </div>
94
106
  <div className="flex items-center space-x-1">
95
107
  <span className="text-xs text-gray-500 dark:text-gray-400 font-mono">
96
108
  {truncateAddress(wallet.address)}
97
109
  </span>
98
- <button
99
- type="button"
110
+ <div
100
111
  onClick={(e) => {
101
112
  e.preventDefault()
102
113
  e.stopPropagation()
@@ -134,7 +145,7 @@ const WalletItem: React.FC<WalletItemProps> = ({
134
145
  ) : (
135
146
  <Copy className="w-3 h-3 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300" />
136
147
  )}
137
- </button>
148
+ </div>
138
149
  </div>
139
150
  </div>
140
151
  </div>
@@ -144,38 +155,49 @@ const WalletItem: React.FC<WalletItemProps> = ({
144
155
  <span className="text-xs px-2 py-1 rounded font-medium bg-blue-500 text-white">
145
156
  Active
146
157
  </span>
147
- ) : (
158
+ ) : !onWalletSelect ? (
148
159
  <span className="text-xs px-2 py-1 rounded font-medium bg-gray-200 text-gray-700 dark:bg-gray-600 dark:text-gray-300 opacity-0 group-hover:opacity-100 transition-opacity duration-200">
149
160
  Set as active
150
161
  </span>
162
+ ) : null}
163
+ {!isLoadingTotalBalanceUsd && totalBalanceUsdFormatted && (
164
+ <span className="text-sm font-medium text-gray-700 dark:text-gray-300">
165
+ {totalBalanceUsdFormatted}
166
+ </span>
167
+ )}
168
+ {showDisconnect && (
169
+ <div
170
+ onClick={(e) => onDisconnect(wallet.connector, e)}
171
+ onMouseDown={(e) => e.stopPropagation()}
172
+ onMouseUp={(e) => e.stopPropagation()}
173
+ className="p-1 rounded-full hover:bg-gray-200 dark:hover:bg-gray-600 opacity-0 group-hover:opacity-100 transition-all duration-200 cursor-pointer"
174
+ title="Disconnect wallet"
175
+ >
176
+ <X className="w-4 h-4 text-gray-500 dark:text-gray-400" />
177
+ </div>
151
178
  )}
152
- <button
153
- type="button"
154
- onClick={(e) => onDisconnect(wallet.connector, e)}
155
- onMouseDown={(e) => e.stopPropagation()}
156
- onMouseUp={(e) => e.stopPropagation()}
157
- className="p-1 rounded-full hover:bg-gray-200 dark:hover:bg-gray-600 opacity-0 group-hover:opacity-100 transition-all duration-200 cursor-pointer"
158
- title="Disconnect wallet"
159
- aria-label="Disconnect wallet"
160
- >
161
- <X className="w-4 h-4 text-gray-500 dark:text-gray-400" />
162
- </button>
179
+ {onWalletSelect && <ChevronRight className="w-5 h-5 text-gray-400" />}
163
180
  </div>
164
- </div>
181
+ </button>
165
182
  </div>
166
183
  )
167
184
  }
168
185
 
169
186
  export const ConnectedWallets: React.FC<ConnectedWalletsProps> = ({
170
187
  onWalletSwitch,
188
+ onWalletSelect,
171
189
  showActiveWallet = true,
190
+ showConnectNewWallet = false,
191
+ showDisconnect = false,
172
192
  className = "",
193
+ backScreen = "connect",
173
194
  }) => {
174
195
  const { address, connector } = useAccount()
175
196
  const connections = useConnections()
176
197
  const { switchAccount } = useSwitchAccount()
177
198
  const { disconnect } = useDisconnect()
178
199
  const { wallets: allWallets } = useWallets()
200
+ const { setCurrentScreenWithBack } = useBack()
179
201
  const [error, setError] = useState<string | null>(null)
180
202
  const [copiedAddress, setCopiedAddress] = useState<string | null>(null)
181
203
 
@@ -302,39 +324,72 @@ export const ConnectedWallets: React.FC<ConnectedWalletsProps> = ({
302
324
  return (
303
325
  <div className={`space-y-2 ${className}`}>
304
326
  {/* Header */}
305
- <div className="flex items-center gap-2 mb-3">
306
- <Wallet className="h-4 w-4 text-gray-400 dark:text-gray-500" />
307
- <span className="text-sm font-medium text-gray-500 dark:text-gray-400">
308
- Connected Wallets
309
- </span>
327
+ <div className="text-sm font-medium text-gray-700 dark:text-gray-300 text-left mb-3">
328
+ Connected Wallets
310
329
  </div>
311
330
 
312
- {error && (
313
- <div className="border rounded-lg p-4 bg-red-50 border-red-200 dark:bg-red-900/20 dark:border-red-800">
314
- <p className="text-sm break-words text-red-600 dark:text-red-200">
315
- {error}
316
- </p>
317
- </div>
318
- )}
331
+ {/* Connected Wallets Container with Border */}
332
+ <div className="trails-border-radius-container border trails-border-primary">
333
+ {error && (
334
+ <div className="border rounded-lg p-4 bg-red-50 border-red-200 dark:bg-red-900/20 dark:border-red-800 m-3">
335
+ <p className="text-sm break-words text-red-600 dark:text-red-200">
336
+ {error}
337
+ </p>
338
+ </div>
339
+ )}
319
340
 
320
- {/* Connected Wallets List */}
321
- {connectedWallets.map((wallet) => {
322
- // Skip active wallet if showActiveWallet is false
323
- if (!showActiveWallet && wallet.isActive) {
324
- return null
325
- }
341
+ {/* Connected Wallets List */}
342
+ {connectedWallets.map((wallet, index) => {
343
+ // Skip active wallet if showActiveWallet is false
344
+ if (!showActiveWallet && wallet.isActive) {
345
+ return null
346
+ }
326
347
 
327
- return (
328
- <WalletItem
329
- key={wallet.address}
330
- wallet={wallet}
331
- onWalletSwitch={handleWalletSwitch}
332
- onDisconnect={handleDisconnect}
333
- onCopyAddress={handleCopyAddress}
334
- copiedAddress={copiedAddress}
335
- />
336
- )
337
- })}
348
+ return (
349
+ <div key={wallet.address}>
350
+ <WalletItem
351
+ wallet={wallet}
352
+ onWalletSwitch={handleWalletSwitch}
353
+ onWalletSelect={onWalletSelect}
354
+ onDisconnect={handleDisconnect}
355
+ onCopyAddress={handleCopyAddress}
356
+ copiedAddress={copiedAddress}
357
+ showDisconnect={showDisconnect}
358
+ />
359
+ {/* Add divider between wallet items */}
360
+ {index < connectedWallets.length - 1 && (
361
+ <div className="border-b border-gray-200 dark:border-gray-700"></div>
362
+ )}
363
+ </div>
364
+ )
365
+ })}
366
+
367
+ {/* Connect new wallet Button - inside the same container */}
368
+ {showConnectNewWallet && (
369
+ <>
370
+ {/* Add divider before the connect button */}
371
+ {connectedWallets.length > 0 && (
372
+ <div className="border-b border-gray-200 dark:border-gray-700"></div>
373
+ )}
374
+ <button
375
+ type="button"
376
+ onClick={() => {
377
+ logger.console.log(
378
+ "[trails-sdk] Navigating from connected-wallets to wallet-list",
379
+ )
380
+ setCurrentScreenWithBack("wallet-list", backScreen as Screen)
381
+ }}
382
+ className="w-full text-left px-3 py-4 text-sm flex items-center justify-between cursor-pointer transition-colors trails-text-primary hover:trails-hover-bg"
383
+ >
384
+ <div className="flex items-center gap-3">
385
+ <Wallet className="w-4 h-4" />
386
+ <span className="text-sm font-bold">Connect new wallet</span>
387
+ </div>
388
+ <ChevronRight className="w-5 h-5 text-gray-400" />
389
+ </button>
390
+ </>
391
+ )}
392
+ </div>
338
393
  </div>
339
394
  )
340
395
  }