@mezo-org/passport 0.4.0-dev.9 → 0.5.1-dev.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 (305) hide show
  1. package/README.md +18 -22
  2. package/dist/src/api/auth.d.ts +7 -3
  3. package/dist/src/api/auth.d.ts.map +1 -1
  4. package/dist/src/api/auth.js +3 -1
  5. package/dist/src/api/auth.js.map +1 -1
  6. package/dist/src/api/client.d.ts +4 -1
  7. package/dist/src/api/client.d.ts.map +1 -1
  8. package/dist/src/api/client.js +9 -2
  9. package/dist/src/api/client.js.map +1 -1
  10. package/dist/src/api/portal.d.ts +3 -9
  11. package/dist/src/api/portal.d.ts.map +1 -1
  12. package/dist/src/api/portal.js +8 -5
  13. package/dist/src/api/portal.js.map +1 -1
  14. package/dist/src/components/Dropdown/ConnectedTrigger.d.ts +2 -1
  15. package/dist/src/components/Dropdown/ConnectedTrigger.d.ts.map +1 -1
  16. package/dist/src/components/Dropdown/ConnectedTrigger.js +29 -20
  17. package/dist/src/components/Dropdown/ConnectedTrigger.js.map +1 -1
  18. package/dist/src/components/Dropdown/Content.d.ts +4 -5
  19. package/dist/src/components/Dropdown/Content.d.ts.map +1 -1
  20. package/dist/src/components/Dropdown/Content.js +19 -61
  21. package/dist/src/components/Dropdown/Content.js.map +1 -1
  22. package/dist/src/components/Dropdown/DisconnectedTrigger.d.ts.map +1 -1
  23. package/dist/src/components/Dropdown/DisconnectedTrigger.js +2 -2
  24. package/dist/src/components/Dropdown/DisconnectedTrigger.js.map +1 -1
  25. package/dist/src/components/Dropdown/Dropdown.d.ts +9 -6
  26. package/dist/src/components/Dropdown/Dropdown.d.ts.map +1 -1
  27. package/dist/src/components/Dropdown/Dropdown.js +10 -10
  28. package/dist/src/components/Dropdown/Dropdown.js.map +1 -1
  29. package/dist/src/components/Dropdown/ListingItem.d.ts +14 -0
  30. package/dist/src/components/Dropdown/ListingItem.d.ts.map +1 -0
  31. package/dist/src/components/Dropdown/ListingItem.js +42 -0
  32. package/dist/src/components/Dropdown/ListingItem.js.map +1 -0
  33. package/dist/src/components/Dropdown/NestedViewLayout.d.ts +8 -0
  34. package/dist/src/components/Dropdown/NestedViewLayout.d.ts.map +1 -0
  35. package/dist/src/components/Dropdown/NestedViewLayout.js +32 -0
  36. package/dist/src/components/Dropdown/NestedViewLayout.js.map +1 -0
  37. package/dist/src/components/Dropdown/Receive/Receive.d.ts +4 -0
  38. package/dist/src/components/Dropdown/Receive/Receive.d.ts.map +1 -0
  39. package/dist/src/components/Dropdown/Receive/Receive.js +64 -0
  40. package/dist/src/components/Dropdown/Receive/Receive.js.map +1 -0
  41. package/dist/src/components/Dropdown/Root/AccountAddressActions.d.ts +4 -0
  42. package/dist/src/components/Dropdown/Root/AccountAddressActions.d.ts.map +1 -0
  43. package/dist/src/components/Dropdown/Root/AccountAddressActions.js +49 -0
  44. package/dist/src/components/Dropdown/Root/AccountAddressActions.js.map +1 -0
  45. package/dist/src/components/Dropdown/Root/AccountBalance.d.ts +6 -0
  46. package/dist/src/components/Dropdown/Root/AccountBalance.d.ts.map +1 -0
  47. package/dist/src/components/Dropdown/Root/AccountBalance.js +35 -0
  48. package/dist/src/components/Dropdown/Root/AccountBalance.js.map +1 -0
  49. package/dist/src/components/Dropdown/Root/AccountBtcListing.d.ts +6 -0
  50. package/dist/src/components/Dropdown/Root/AccountBtcListing.d.ts.map +1 -0
  51. package/dist/src/components/Dropdown/Root/AccountBtcListing.js +27 -0
  52. package/dist/src/components/Dropdown/Root/AccountBtcListing.js.map +1 -0
  53. package/dist/src/components/Dropdown/Root/AccountError.d.ts +8 -0
  54. package/dist/src/components/Dropdown/Root/AccountError.d.ts.map +1 -0
  55. package/dist/src/components/Dropdown/Root/AccountError.js +17 -0
  56. package/dist/src/components/Dropdown/Root/AccountError.js.map +1 -0
  57. package/dist/src/components/Dropdown/Root/AccountMusdListing.d.ts +4 -0
  58. package/dist/src/components/Dropdown/Root/AccountMusdListing.d.ts.map +1 -0
  59. package/dist/src/components/Dropdown/Root/AccountMusdListing.js +21 -0
  60. package/dist/src/components/Dropdown/Root/AccountMusdListing.js.map +1 -0
  61. package/dist/src/components/Dropdown/Root/AccountOtherAssets.d.ts +8 -0
  62. package/dist/src/components/Dropdown/Root/AccountOtherAssets.d.ts.map +1 -0
  63. package/dist/src/components/Dropdown/Root/AccountOtherAssets.js +43 -0
  64. package/dist/src/components/Dropdown/Root/AccountOtherAssets.js.map +1 -0
  65. package/dist/src/components/Dropdown/Root/Root.d.ts +8 -0
  66. package/dist/src/components/Dropdown/Root/Root.d.ts.map +1 -0
  67. package/dist/src/components/Dropdown/Root/Root.js +45 -0
  68. package/dist/src/components/Dropdown/Root/Root.js.map +1 -0
  69. package/dist/src/components/Dropdown/Root/WalletAddress.d.ts +4 -0
  70. package/dist/src/components/Dropdown/Root/WalletAddress.d.ts.map +1 -0
  71. package/dist/src/components/Dropdown/Root/WalletAddress.js +66 -0
  72. package/dist/src/components/Dropdown/Root/WalletAddress.js.map +1 -0
  73. package/dist/src/components/Dropdown/Root/WelcomeBlock.d.ts +6 -0
  74. package/dist/src/components/Dropdown/Root/WelcomeBlock.d.ts.map +1 -0
  75. package/dist/src/components/Dropdown/Root/WelcomeBlock.js +88 -0
  76. package/dist/src/components/Dropdown/Root/WelcomeBlock.js.map +1 -0
  77. package/dist/src/components/Dropdown/SlotNumber.d.ts +19 -0
  78. package/dist/src/components/Dropdown/SlotNumber.d.ts.map +1 -0
  79. package/dist/src/components/Dropdown/SlotNumber.js +67 -0
  80. package/dist/src/components/Dropdown/SlotNumber.js.map +1 -0
  81. package/dist/src/components/Dropdown/TestnetTopBanner.d.ts +3 -0
  82. package/dist/src/components/Dropdown/TestnetTopBanner.d.ts.map +1 -0
  83. package/dist/src/components/Dropdown/TestnetTopBanner.js +14 -0
  84. package/dist/src/components/Dropdown/TestnetTopBanner.js.map +1 -0
  85. package/dist/src/config.d.ts +19 -5
  86. package/dist/src/config.d.ts.map +1 -1
  87. package/dist/src/config.js +58 -14
  88. package/dist/src/config.js.map +1 -1
  89. package/dist/src/constants.d.ts +11 -3
  90. package/dist/src/constants.d.ts.map +1 -1
  91. package/dist/src/constants.js +12 -4
  92. package/dist/src/constants.js.map +1 -1
  93. package/dist/src/hooks/index.d.ts +4 -0
  94. package/dist/src/hooks/index.d.ts.map +1 -1
  95. package/dist/src/hooks/index.js +4 -0
  96. package/dist/src/hooks/index.js.map +1 -1
  97. package/dist/src/hooks/useAssetsConversionRates.d.ts +18 -0
  98. package/dist/src/hooks/useAssetsConversionRates.d.ts.map +1 -0
  99. package/dist/src/hooks/useAssetsConversionRates.js +67 -0
  100. package/dist/src/hooks/useAssetsConversionRates.js.map +1 -0
  101. package/dist/src/hooks/useAuthenticateWithWallet.d.ts +13 -13
  102. package/dist/src/hooks/useAuthenticateWithWallet.d.ts.map +1 -1
  103. package/dist/src/hooks/useAuthenticateWithWallet.js +9 -8
  104. package/dist/src/hooks/useAuthenticateWithWallet.js.map +1 -1
  105. package/dist/src/hooks/useBorrowData.d.ts +108 -0
  106. package/dist/src/hooks/useBorrowData.d.ts.map +1 -0
  107. package/dist/src/hooks/useBorrowData.js +201 -0
  108. package/dist/src/hooks/useBorrowData.js.map +1 -0
  109. package/dist/src/hooks/useCreateAccount.d.ts.map +1 -1
  110. package/dist/src/hooks/useCreateAccount.js +22 -1
  111. package/dist/src/hooks/useCreateAccount.js.map +1 -1
  112. package/dist/src/hooks/useGetCurrentAccount.d.ts.map +1 -1
  113. package/dist/src/hooks/useGetCurrentAccount.js +4 -6
  114. package/dist/src/hooks/useGetCurrentAccount.js.map +1 -1
  115. package/dist/src/hooks/useLinkAccount.d.ts +19 -13
  116. package/dist/src/hooks/useLinkAccount.d.ts.map +1 -1
  117. package/dist/src/hooks/useLinkAccount.js +20 -1
  118. package/dist/src/hooks/useLinkAccount.js.map +1 -1
  119. package/dist/src/hooks/useRefreshPassport.d.ts +19 -0
  120. package/dist/src/hooks/useRefreshPassport.d.ts.map +1 -0
  121. package/dist/src/hooks/useRefreshPassport.js +44 -0
  122. package/dist/src/hooks/useRefreshPassport.js.map +1 -0
  123. package/dist/src/hooks/useSignInWithWallet.d.ts +13 -13
  124. package/dist/src/hooks/useSignInWithWallet.d.ts.map +1 -1
  125. package/dist/src/hooks/useSignUpWithWallet.d.ts +13 -13
  126. package/dist/src/hooks/useSignUpWithWallet.d.ts.map +1 -1
  127. package/dist/src/hooks/useTokensBalances.d.ts +75 -0
  128. package/dist/src/hooks/useTokensBalances.d.ts.map +1 -0
  129. package/dist/src/hooks/useTokensBalances.js +181 -0
  130. package/dist/src/hooks/useTokensBalances.js.map +1 -0
  131. package/dist/src/hooks/useValidateMezoId.d.ts +8 -0
  132. package/dist/src/hooks/useValidateMezoId.d.ts.map +1 -0
  133. package/dist/src/hooks/useValidateMezoId.js +24 -0
  134. package/dist/src/hooks/useValidateMezoId.js.map +1 -0
  135. package/dist/src/hooks/useWalletAccount.d.ts +2 -1
  136. package/dist/src/hooks/useWalletAccount.d.ts.map +1 -1
  137. package/dist/src/hooks/useWalletAccount.js +20 -15
  138. package/dist/src/hooks/useWalletAccount.js.map +1 -1
  139. package/dist/src/hooks/useWatchTransferEvents.d.ts +5 -0
  140. package/dist/src/hooks/useWatchTransferEvents.d.ts.map +1 -0
  141. package/dist/src/hooks/useWatchTransferEvents.js +63 -0
  142. package/dist/src/hooks/useWatchTransferEvents.js.map +1 -0
  143. package/dist/src/index.d.ts +2 -1
  144. package/dist/src/index.d.ts.map +1 -1
  145. package/dist/src/index.js +2 -1
  146. package/dist/src/index.js.map +1 -1
  147. package/dist/src/lib/contracts/index.d.ts +13 -0
  148. package/dist/src/lib/contracts/index.d.ts.map +1 -0
  149. package/dist/src/lib/contracts/index.js +66 -0
  150. package/dist/src/lib/contracts/index.js.map +1 -0
  151. package/dist/src/lib/contracts/priceOracle.d.ts +43 -0
  152. package/dist/src/lib/contracts/priceOracle.d.ts.map +1 -0
  153. package/dist/src/lib/contracts/priceOracle.js +52 -0
  154. package/dist/src/lib/contracts/priceOracle.js.map +1 -0
  155. package/dist/src/provider.d.ts +7 -1
  156. package/dist/src/provider.d.ts.map +1 -1
  157. package/dist/src/provider.js +4 -1
  158. package/dist/src/provider.js.map +1 -1
  159. package/dist/src/stores/dropdownStore.d.ts +12 -0
  160. package/dist/src/stores/dropdownStore.d.ts.map +1 -0
  161. package/dist/src/stores/dropdownStore.js +13 -0
  162. package/dist/src/stores/dropdownStore.js.map +1 -0
  163. package/dist/src/utils/address.d.ts +1 -1
  164. package/dist/src/utils/address.d.ts.map +1 -1
  165. package/dist/src/utils/address.js +2 -0
  166. package/dist/src/utils/address.js.map +1 -1
  167. package/dist/src/utils/address.test.js +8 -5
  168. package/dist/src/utils/address.test.js.map +1 -1
  169. package/dist/src/utils/assets.d.ts +145 -0
  170. package/dist/src/utils/assets.d.ts.map +1 -0
  171. package/dist/src/utils/assets.js +100 -0
  172. package/dist/src/utils/assets.js.map +1 -0
  173. package/dist/src/utils/assets.test.d.ts +2 -0
  174. package/dist/src/utils/assets.test.d.ts.map +1 -0
  175. package/dist/src/utils/assets.test.js +46 -0
  176. package/dist/src/utils/assets.test.js.map +1 -0
  177. package/dist/src/utils/currency.d.ts +13 -2
  178. package/dist/src/utils/currency.d.ts.map +1 -1
  179. package/dist/src/utils/currency.js +22 -8
  180. package/dist/src/utils/currency.js.map +1 -1
  181. package/dist/src/utils/currency.test.js +44 -1
  182. package/dist/src/utils/currency.test.js.map +1 -1
  183. package/dist/src/utils/mezoId.d.ts +7 -0
  184. package/dist/src/utils/mezoId.d.ts.map +1 -0
  185. package/dist/src/utils/mezoId.js +41 -0
  186. package/dist/src/utils/mezoId.js.map +1 -0
  187. package/dist/src/utils/number2.d.ts +106 -0
  188. package/dist/src/utils/number2.d.ts.map +1 -0
  189. package/dist/src/utils/number2.js +289 -0
  190. package/dist/src/utils/number2.js.map +1 -0
  191. package/dist/src/utils/numbers.d.ts +15 -33
  192. package/dist/src/utils/numbers.d.ts.map +1 -1
  193. package/dist/src/utils/numbers.js +26 -70
  194. package/dist/src/utils/numbers.js.map +1 -1
  195. package/dist/src/utils/numbers.test.js +46 -42
  196. package/dist/src/utils/numbers.test.js.map +1 -1
  197. package/dist/src/utils/siww.d.ts +1 -0
  198. package/dist/src/utils/siww.d.ts.map +1 -1
  199. package/dist/src/utils/siww.js +50 -12
  200. package/dist/src/utils/siww.js.map +1 -1
  201. package/dist/src/utils/wagmi.d.ts +3 -0
  202. package/dist/src/utils/wagmi.d.ts.map +1 -0
  203. package/dist/src/utils/wagmi.js +7 -0
  204. package/dist/src/utils/wagmi.js.map +1 -0
  205. package/dist/src/wallet/index.d.ts +1 -1
  206. package/dist/src/wallet/index.d.ts.map +1 -1
  207. package/dist/src/wallet/index.js +1 -1
  208. package/dist/src/wallet/index.js.map +1 -1
  209. package/package.json +11 -8
  210. package/src/api/auth.ts +8 -4
  211. package/src/api/client.ts +11 -2
  212. package/src/api/portal.ts +11 -14
  213. package/src/components/Dropdown/ConnectedTrigger.tsx +52 -32
  214. package/src/components/Dropdown/Content.tsx +26 -121
  215. package/src/components/Dropdown/DisconnectedTrigger.tsx +2 -1
  216. package/src/components/Dropdown/Dropdown.tsx +29 -17
  217. package/src/components/Dropdown/ListingItem.tsx +176 -0
  218. package/src/components/Dropdown/NestedViewLayout.tsx +87 -0
  219. package/src/components/Dropdown/README.md +10 -18
  220. package/src/components/Dropdown/Receive/Receive.tsx +144 -0
  221. package/src/components/Dropdown/Root/AccountAddressActions.tsx +99 -0
  222. package/src/components/Dropdown/Root/AccountBalance.tsx +75 -0
  223. package/src/components/Dropdown/Root/AccountBtcListing.tsx +52 -0
  224. package/src/components/Dropdown/Root/AccountError.tsx +34 -0
  225. package/src/components/Dropdown/Root/AccountMusdListing.tsx +45 -0
  226. package/src/components/Dropdown/Root/AccountOtherAssets.tsx +85 -0
  227. package/src/components/Dropdown/Root/Root.tsx +77 -0
  228. package/src/components/Dropdown/Root/WalletAddress.tsx +123 -0
  229. package/src/components/Dropdown/Root/WelcomeBlock.tsx +173 -0
  230. package/src/components/Dropdown/SlotNumber.tsx +131 -0
  231. package/src/components/Dropdown/TestnetTopBanner.tsx +32 -0
  232. package/src/config.ts +88 -20
  233. package/src/constants.ts +12 -4
  234. package/src/hooks/index.ts +7 -0
  235. package/src/hooks/useAssetsConversionRates.ts +79 -0
  236. package/src/hooks/useAuthenticateWithWallet.ts +30 -14
  237. package/src/hooks/useBorrowData.ts +246 -0
  238. package/src/hooks/useCreateAccount.ts +29 -2
  239. package/src/hooks/useGetCurrentAccount.ts +5 -7
  240. package/src/hooks/useLinkAccount.ts +37 -4
  241. package/src/hooks/useRefreshPassport.ts +56 -0
  242. package/src/hooks/useSignInWithWallet.ts +2 -2
  243. package/src/hooks/useSignUpWithWallet.ts +2 -2
  244. package/src/hooks/useTokensBalances.ts +265 -0
  245. package/src/hooks/useValidateMezoId.ts +31 -0
  246. package/src/hooks/useWalletAccount.ts +32 -20
  247. package/src/hooks/useWatchTransferEvents.ts +74 -0
  248. package/src/index.ts +12 -1
  249. package/src/lib/contracts/index.ts +99 -0
  250. package/src/lib/contracts/priceOracle.ts +53 -0
  251. package/src/provider.ts +11 -3
  252. package/src/stores/dropdownStore.ts +20 -0
  253. package/src/utils/address.test.ts +10 -6
  254. package/src/utils/address.ts +5 -3
  255. package/src/utils/assets.test.ts +57 -0
  256. package/src/utils/assets.ts +103 -0
  257. package/src/utils/currency.test.ts +77 -1
  258. package/src/utils/currency.ts +35 -9
  259. package/src/utils/mezoId.ts +51 -0
  260. package/src/utils/number2.ts +419 -0
  261. package/src/utils/numbers.test.ts +49 -42
  262. package/src/utils/numbers.ts +33 -95
  263. package/src/utils/siww.ts +71 -16
  264. package/src/utils/wagmi.ts +12 -0
  265. package/src/wallet/index.ts +3 -2
  266. package/dist/src/components/Dropdown/AccountAddress.d.ts +0 -8
  267. package/dist/src/components/Dropdown/AccountAddress.d.ts.map +0 -1
  268. package/dist/src/components/Dropdown/AccountAddress.js +0 -58
  269. package/dist/src/components/Dropdown/AccountAddress.js.map +0 -1
  270. package/dist/src/components/Dropdown/AccountAssets.d.ts +0 -14
  271. package/dist/src/components/Dropdown/AccountAssets.d.ts.map +0 -1
  272. package/dist/src/components/Dropdown/AccountAssets.js +0 -44
  273. package/dist/src/components/Dropdown/AccountAssets.js.map +0 -1
  274. package/dist/src/components/Dropdown/AccountBalance.d.ts +0 -7
  275. package/dist/src/components/Dropdown/AccountBalance.d.ts.map +0 -1
  276. package/dist/src/components/Dropdown/AccountBalance.js +0 -18
  277. package/dist/src/components/Dropdown/AccountBalance.js.map +0 -1
  278. package/dist/src/components/Dropdown/WelcomeBlock.d.ts +0 -8
  279. package/dist/src/components/Dropdown/WelcomeBlock.d.ts.map +0 -1
  280. package/dist/src/components/Dropdown/WelcomeBlock.js +0 -44
  281. package/dist/src/components/Dropdown/WelcomeBlock.js.map +0 -1
  282. package/dist/src/hooks/useAssetsUSDConversion.d.ts +0 -8
  283. package/dist/src/hooks/useAssetsUSDConversion.d.ts.map +0 -1
  284. package/dist/src/hooks/useAssetsUSDConversion.js +0 -21
  285. package/dist/src/hooks/useAssetsUSDConversion.js.map +0 -1
  286. package/dist/src/hooks/useDropdownData.d.ts +0 -44
  287. package/dist/src/hooks/useDropdownData.d.ts.map +0 -1
  288. package/dist/src/hooks/useDropdownData.js +0 -73
  289. package/dist/src/hooks/useDropdownData.js.map +0 -1
  290. package/dist/src/utils/cryptoAssets.d.ts +0 -28
  291. package/dist/src/utils/cryptoAssets.d.ts.map +0 -1
  292. package/dist/src/utils/cryptoAssets.js +0 -73
  293. package/dist/src/utils/cryptoAssets.js.map +0 -1
  294. package/dist/src/utils/cryptoAssets.test.d.ts +0 -2
  295. package/dist/src/utils/cryptoAssets.test.d.ts.map +0 -1
  296. package/dist/src/utils/cryptoAssets.test.js +0 -49
  297. package/dist/src/utils/cryptoAssets.test.js.map +0 -1
  298. package/src/components/Dropdown/AccountAddress.tsx +0 -111
  299. package/src/components/Dropdown/AccountAssets.tsx +0 -110
  300. package/src/components/Dropdown/AccountBalance.tsx +0 -38
  301. package/src/components/Dropdown/WelcomeBlock.tsx +0 -92
  302. package/src/hooks/useAssetsUSDConversion.ts +0 -31
  303. package/src/hooks/useDropdownData.ts +0 -130
  304. package/src/utils/cryptoAssets.test.ts +0 -59
  305. package/src/utils/cryptoAssets.ts +0 -93
@@ -1,4 +1,5 @@
1
1
  import {
2
+ ButtonProps,
2
3
  StatefulPopover,
3
4
  StatefulPopoverProps,
4
5
  useStyletron,
@@ -6,23 +7,25 @@ import {
6
7
  import { useConnectModal } from "@rainbow-me/rainbowkit"
7
8
  import React from "react"
8
9
  import DefaultAvatar from "../../assets/DefaultAvatar"
9
- import useDropdownData, {
10
- DropdownCryptoAsset,
11
- } from "../../hooks/useDropdownData"
12
- import useWalletAccount from "../../hooks/useWalletAccount"
13
10
  import ConnectedTrigger from "./ConnectedTrigger"
14
11
  import Content from "./Content"
15
12
  import DisconnectedTrigger from "./DisconnectedTrigger"
13
+ import useWalletAccount from "../../hooks/useWalletAccount"
14
+ import { useWatchTransferEventsForAllTokens } from "../../hooks/useWatchTransferEvents"
16
15
 
17
16
  export type DropdownProps = {
18
17
  /** The callback to be called when the user clicks the sign-out button */
19
18
  onSignOut?: () => void
20
19
  /** The callback to be called when the user clicks the button in sign-in state */
21
20
  onSignIn?: () => void
22
- /** The set of EVM native assets to be displayed in the dropdown */
23
- evmNativeAssets?: DropdownCryptoAsset<"tbtc" | "wbtc">[]
24
- /** The set of Matsnet assets to be displayed in the dropdown */
25
- matsnetAssets?: DropdownCryptoAsset<"mbtc" | "musd">[]
21
+ /** The props to be passed to the trigger button */
22
+ triggerProps?: {
23
+ signedIn?: Omit<ButtonProps, "onClick" | "size"> & {
24
+ size: "medium" | "large"
25
+ }
26
+ signedOut?: Omit<ButtonProps, "onClick">
27
+ }
28
+ onOtherAssetsClick?: () => void
26
29
  } & Omit<StatefulPopoverProps, "children" | "content">
27
30
 
28
31
  /**
@@ -36,26 +39,27 @@ export function Dropdown(props: DropdownProps) {
36
39
  animateOutTime = 120,
37
40
  onSignIn,
38
41
  onSignOut,
39
- evmNativeAssets,
40
- matsnetAssets,
41
42
  overrides,
43
+ triggerProps,
44
+ onOtherAssetsClick,
42
45
  ...restProps
43
46
  } = props
44
47
 
45
48
  const [, theme] = useStyletron()
46
49
 
47
- const dropdownData = useDropdownData({ evmNativeAssets, matsnetAssets })
50
+ const walletAccount = useWalletAccount()
48
51
 
49
- const { openConnectModal } = useConnectModal()
52
+ useWatchTransferEventsForAllTokens()
50
53
 
51
- const { isConnected } = useWalletAccount()
54
+ const { openConnectModal } = useConnectModal()
52
55
 
53
- if (!dropdownData || !isConnected) {
56
+ if (!walletAccount?.isConnected) {
54
57
  return (
55
58
  <DisconnectedTrigger
56
59
  // If connect wallet flow is not provided it fallbacks to RainbowKit's
57
60
  // connect modal
58
61
  onClick={onSignIn || openConnectModal}
62
+ {...triggerProps?.signedOut}
59
63
  >
60
64
  Sign in
61
65
  </DisconnectedTrigger>
@@ -64,7 +68,12 @@ export function Dropdown(props: DropdownProps) {
64
68
 
65
69
  return (
66
70
  <StatefulPopover
67
- content={<Content data={dropdownData} onSignOut={onSignOut} />}
71
+ content={
72
+ <Content
73
+ onSignOut={onSignOut}
74
+ onOtherAssetsClick={onOtherAssetsClick}
75
+ />
76
+ }
68
77
  placement={placement}
69
78
  animateOutTime={animateOutTime}
70
79
  overrides={{
@@ -72,7 +81,7 @@ export function Dropdown(props: DropdownProps) {
72
81
  Body: {
73
82
  ...overrides?.Body,
74
83
  style: {
75
- minWidth: "378px",
84
+ width: "402px",
76
85
  borderRadius: theme.borders.radius500,
77
86
  boxShadow: theme.lighting.shadow500,
78
87
  overflow: "hidden",
@@ -82,7 +91,10 @@ export function Dropdown(props: DropdownProps) {
82
91
  }}
83
92
  {...restProps}
84
93
  >
85
- <ConnectedTrigger avatar={<DefaultAvatar />} />
94
+ <ConnectedTrigger
95
+ avatar={<DefaultAvatar />}
96
+ {...triggerProps?.signedIn}
97
+ />
86
98
  </StatefulPopover>
87
99
  )
88
100
  }
@@ -0,0 +1,176 @@
1
+ import {
2
+ mergeOverrides,
3
+ Block,
4
+ useStyletron,
5
+ BlockProps,
6
+ Skeleton,
7
+ LabelMedium,
8
+ ParagraphSmall,
9
+ } from "@mezo-org/mezo-clay"
10
+ import React, { ReactNode } from "react"
11
+ import SlotNumber from "./SlotNumber"
12
+ import { formatUsd } from "../../utils/currency"
13
+
14
+ type ListingItemLayoutProps = Omit<BlockProps, "children"> & {
15
+ icon: ReactNode
16
+ label: ReactNode
17
+ value: ReactNode
18
+ subLabel: ReactNode
19
+ subValue: ReactNode
20
+ }
21
+
22
+ function ListingItemLayout(props: ListingItemLayoutProps) {
23
+ const { icon, label, value, subLabel, subValue, overrides, ...restProps } =
24
+ props
25
+ const [, theme] = useStyletron()
26
+
27
+ return (
28
+ <Block
29
+ display="flex"
30
+ alignItems="center"
31
+ paddingLeft={theme.sizing.scale600}
32
+ paddingRight={theme.sizing.scale600}
33
+ overrides={mergeOverrides(
34
+ {
35
+ Block: {
36
+ style: {
37
+ gap: theme.sizing.scale600,
38
+ minHeight: "72px",
39
+ },
40
+ },
41
+ },
42
+ overrides,
43
+ )}
44
+ {...restProps}
45
+ >
46
+ {icon && icon}
47
+
48
+ <Block display="flex" flexDirection="column" alignItems="flex-start">
49
+ {label && label}
50
+ {subLabel && subLabel}
51
+ </Block>
52
+
53
+ <Block
54
+ display="flex"
55
+ flexDirection="column"
56
+ alignItems="flex-end"
57
+ marginLeft="auto"
58
+ >
59
+ {value && value}
60
+ {subValue && subValue}
61
+ </Block>
62
+ </Block>
63
+ )
64
+ }
65
+
66
+ type ListingItemProps = {
67
+ icon?: ReactNode
68
+ label?: string
69
+ subLabel?: string
70
+ value?: number
71
+ subValue?: number
72
+ overrides?: BlockProps["overrides"]
73
+ isLoading?: boolean
74
+ }
75
+
76
+ export default function ListingItem(props: ListingItemProps) {
77
+ const {
78
+ icon,
79
+ label,
80
+ subLabel,
81
+ value,
82
+ subValue,
83
+ overrides,
84
+ isLoading = false,
85
+ } = props
86
+
87
+ const [, theme] = useStyletron()
88
+
89
+ if (isLoading) {
90
+ return (
91
+ <ListingItemLayout
92
+ icon={
93
+ <Skeleton
94
+ animation
95
+ width={theme.sizing.scale800}
96
+ height={theme.sizing.scale800}
97
+ />
98
+ }
99
+ label={
100
+ <Skeleton
101
+ animation
102
+ width={theme.sizing.scale2400}
103
+ height={theme.sizing.scale600}
104
+ overrides={{
105
+ Root: {
106
+ style: { marginBottom: theme.sizing.scale100 },
107
+ },
108
+ }}
109
+ />
110
+ }
111
+ subLabel={
112
+ <Skeleton
113
+ animation
114
+ width={theme.sizing.scale1600}
115
+ height={theme.sizing.scale550}
116
+ />
117
+ }
118
+ value={
119
+ <Skeleton
120
+ animation
121
+ width={theme.sizing.scale2400}
122
+ height={theme.sizing.scale600}
123
+ overrides={{
124
+ Root: {
125
+ style: { marginBottom: theme.sizing.scale100 },
126
+ },
127
+ }}
128
+ />
129
+ }
130
+ subValue={
131
+ <Skeleton
132
+ animation
133
+ width={theme.sizing.scale1600}
134
+ height={theme.sizing.scale550}
135
+ />
136
+ }
137
+ overrides={overrides}
138
+ />
139
+ )
140
+ }
141
+
142
+ return (
143
+ <ListingItemLayout
144
+ icon={icon}
145
+ label={<LabelMedium>{label}</LabelMedium>}
146
+ subLabel={
147
+ <ParagraphSmall
148
+ margin={0}
149
+ as="div"
150
+ color={theme.colors.contentSecondary}
151
+ >
152
+ {subLabel}
153
+ </ParagraphSmall>
154
+ }
155
+ value={
156
+ value !== undefined && (
157
+ <LabelMedium>
158
+ <SlotNumber formatFunction={formatUsd}>{value}</SlotNumber>
159
+ </LabelMedium>
160
+ )
161
+ }
162
+ subValue={
163
+ subValue !== undefined && (
164
+ <ParagraphSmall
165
+ margin={0}
166
+ as="div"
167
+ color={theme.colors.contentSecondary}
168
+ >
169
+ <SlotNumber formatFunction={formatUsd}>{subValue}</SlotNumber>
170
+ </ParagraphSmall>
171
+ )
172
+ }
173
+ overrides={overrides}
174
+ />
175
+ )
176
+ }
@@ -0,0 +1,87 @@
1
+ import {
2
+ ArrowLeft,
3
+ Block,
4
+ BlockProps,
5
+ ButtonIcon,
6
+ HeadingSmall,
7
+ useStyletron,
8
+ } from "@mezo-org/mezo-clay"
9
+ import React, { ReactNode, useCallback } from "react"
10
+ import useDropdownStore, { DropdownView } from "../../stores/dropdownStore"
11
+
12
+ const getHeaderTitle = (view: DropdownView) => {
13
+ const titleMap: Partial<Record<DropdownView, string>> = {
14
+ [DropdownView.RECEIVE]: "Scan to receive",
15
+ }
16
+ return titleMap[view]!
17
+ }
18
+
19
+ type NestedViewLayoutProps = {
20
+ children: ReactNode
21
+ } & BlockProps
22
+
23
+ function NestedViewLayout(props: NestedViewLayoutProps) {
24
+ const { children, ...restProps } = props
25
+
26
+ const currentView = useDropdownStore((state) => state.view)
27
+ const setView = useDropdownStore((state) => state.setView)
28
+
29
+ const [, theme] = useStyletron()
30
+
31
+ const handleOnButtonClick = useCallback(() => {
32
+ setView(DropdownView.ROOT)
33
+ }, [setView])
34
+
35
+ return (
36
+ <Block
37
+ display="flex"
38
+ flexDirection="column"
39
+ minHeight="588px"
40
+ {...restProps}
41
+ >
42
+ <Block
43
+ display="flex"
44
+ alignItems="center"
45
+ padding={theme.sizing.scale100}
46
+ paddingTop={theme.sizing.scale800}
47
+ paddingBottom={theme.sizing.scale500}
48
+ marginBottom={theme.sizing.scale300}
49
+ overrides={{
50
+ Block: {
51
+ style: {
52
+ gap: theme.sizing.scale300,
53
+ },
54
+ },
55
+ }}
56
+ >
57
+ <ButtonIcon
58
+ onClick={handleOnButtonClick}
59
+ shape="circle"
60
+ size="medium"
61
+ kind="tertiary"
62
+ >
63
+ <ArrowLeft />
64
+ </ButtonIcon>
65
+
66
+ <HeadingSmall
67
+ marginTop={theme.sizing.scale300}
68
+ marginBottom={theme.sizing.scale300}
69
+ >
70
+ {getHeaderTitle(currentView)}
71
+ </HeadingSmall>
72
+ </Block>
73
+
74
+ <Block
75
+ display="flex"
76
+ flexDirection="column"
77
+ padding={theme.sizing.scale600}
78
+ paddingTop={0}
79
+ flex={1}
80
+ >
81
+ {children}
82
+ </Block>
83
+ </Block>
84
+ )
85
+ }
86
+
87
+ export default NestedViewLayout
@@ -6,26 +6,18 @@ component. It allows to establish the session and interact with the API.
6
6
  ## Props
7
7
 
8
8
  - `onSignIn` (`() => void`) - The callback to be executed on trigger click when
9
- the state is disconnected, it's optional since by default it triggers the
10
- [Rainbow Kit's wallet connection modal](https://www.rainbowkit.com/docs/modal-hooks). -
11
- **optional**
9
+ the state is disconnected. It's optional since by default it triggers the
10
+ [Rainbow Kit's wallet connection modal](https://www.rainbowkit.com/docs/modal-hooks).
11
+ If the callback is not provided it will automatically establish the Passport
12
+ Session. If not, you have to handle it manually using `useSignInWithWallet`
13
+ hook. - **optional**
12
14
  - `onSignOut` (`() => void`) - The callback to be executed on click of the
13
- **Sign out** button, it's optional since by default it disconnects the current
15
+ **Sign out** button. It's optional since by default it disconnects the current
14
16
  wallet connector and closes the Passport session. - **optional**
15
- - `evmNativeAssets` (`Asset<"tbtc" | "wbtc">[]`) - Array of Matsnet assets. -
16
- **optional**
17
- - `matsnetAssets` (`Asset<"mbtc" | "musd">[]`) - Array of Matsnet assets. -
18
- **optional**
19
- ```ts
20
- type Asset = {
21
- type: "btc" | "tbtc" | "wbtc" | "mbtc" | "musd"
22
- decimals: number
23
- amount: {
24
- token: bigint
25
- usd: number
26
- }
27
- }
28
- ```
17
+ - `triggerProps.signedIn` (`ButtonProps`) - Props to be passed to the trigger
18
+ button in signed-in state.
19
+ - `triggerProps.signedOut` (`ButtonProps`) - Props to be passed to the trigger
20
+ button in signed-out state
29
21
 
30
22
  Besides that, component allows
31
23
  [Clay's `StatefulPopover` props](https://baseweb.design/components/popover/)
@@ -0,0 +1,144 @@
1
+ import {
2
+ Block,
3
+ Button,
4
+ LabelLarge,
5
+ MezoCircle,
6
+ MonoLabelXSmall,
7
+ ParagraphSmall,
8
+ useStyletron,
9
+ } from "@mezo-org/mezo-clay"
10
+ import React, { useState } from "react"
11
+ import { useCopyToClipboard } from "usehooks-ts"
12
+ import { QRCodeSVG } from "qrcode.react"
13
+ import NestedViewLayout from "../NestedViewLayout"
14
+ import { getAddressExplorerUrl } from "../../../utils/address"
15
+ import { usePassportContext } from "../../../hooks/usePassportContext"
16
+ import useWalletAccount from "../../../hooks/useWalletAccount"
17
+
18
+ function Receive() {
19
+ const { environment } = usePassportContext()
20
+
21
+ const walletAccount = useWalletAccount()
22
+
23
+ const [, theme] = useStyletron()
24
+
25
+ const [, copy] = useCopyToClipboard()
26
+
27
+ const [isCopiedMessageVisible, setIsCopiedMessageVisible] = useState(false)
28
+
29
+ const handleCopyAddress = () => {
30
+ copy(walletAccount.accountAddress!)
31
+ setIsCopiedMessageVisible(true)
32
+
33
+ setTimeout(() => {
34
+ setIsCopiedMessageVisible(false)
35
+ }, 2000)
36
+ }
37
+
38
+ const blockExplorerUrl = getAddressExplorerUrl(
39
+ walletAccount.accountAddress!,
40
+ "mezo",
41
+ environment === "testnet",
42
+ )
43
+
44
+ return (
45
+ <NestedViewLayout>
46
+ <LabelLarge>Your Mezo Address</LabelLarge>
47
+
48
+ <ParagraphSmall
49
+ marginTop={0}
50
+ marginBottom={theme.sizing.scale800}
51
+ color={theme.colors.contentTertiary}
52
+ >
53
+ {walletAccount.networkFamily === "bitcoin" ? (
54
+ <>
55
+ Mezo automatically created a smart account that&apos;s fully
56
+ controlled by your connected Bitcoin wallet. Use this address to
57
+ receive assets on Mezo.
58
+ </>
59
+ ) : (
60
+ <>
61
+ Your connected wallet address is your Mezo address. Use this address
62
+ to receive assets on Mezo.
63
+ </>
64
+ )}
65
+ </ParagraphSmall>
66
+
67
+ <Block
68
+ as={QRCodeSVG}
69
+ value={walletAccount.accountAddress!}
70
+ flex={1}
71
+ overrides={{
72
+ Block: {
73
+ style: {
74
+ aspectRatio: 1,
75
+ width: "fit-content",
76
+ margin: "0 auto",
77
+ },
78
+ },
79
+ }}
80
+ />
81
+
82
+ <Block
83
+ display="flex"
84
+ alignItems="center"
85
+ backgroundColor={theme.colors.backgroundSecondary}
86
+ marginTop={theme.sizing.scale800}
87
+ marginBottom={theme.sizing.scale600}
88
+ padding={theme.sizing.scale300}
89
+ overrides={{
90
+ Block: {
91
+ style: {
92
+ gap: theme.sizing.scale300,
93
+ borderRadius: theme.borders.radius400,
94
+ },
95
+ },
96
+ }}
97
+ >
98
+ <MezoCircle
99
+ size={theme.sizing.scale700}
100
+ color={theme.colors.accent}
101
+ symbolColor={theme.colors.white}
102
+ overrides={{
103
+ Svg: {
104
+ style: {
105
+ backgroundColor: theme.colors.accent,
106
+ overflow: "hidden",
107
+ borderRadius: theme.borders.radius200,
108
+ flexShrink: 0,
109
+ },
110
+ },
111
+ }}
112
+ />
113
+
114
+ <MonoLabelXSmall>{walletAccount.accountAddress}</MonoLabelXSmall>
115
+ </Block>
116
+
117
+ <Button
118
+ onClick={handleCopyAddress}
119
+ size="medium"
120
+ overrides={{
121
+ BaseButton: {
122
+ style: {
123
+ marginBottom: theme.sizing.scale500,
124
+ },
125
+ },
126
+ }}
127
+ >
128
+ {isCopiedMessageVisible ? "Copied!" : "Copy Mezo address"}
129
+ </Button>
130
+
131
+ <Button
132
+ kind="secondary"
133
+ size="medium"
134
+ $as="a"
135
+ href={blockExplorerUrl}
136
+ target="_blank"
137
+ >
138
+ View Mezo explorer
139
+ </Button>
140
+ </NestedViewLayout>
141
+ )
142
+ }
143
+
144
+ export default Receive
@@ -0,0 +1,99 @@
1
+ import {
2
+ ArrowNarrowLeft,
3
+ Block,
4
+ BlockProps,
5
+ Button,
6
+ ButtonProps,
7
+ mergeOverrides,
8
+ useStyletron,
9
+ } from "@mezo-org/mezo-clay"
10
+ import React from "react"
11
+ import { usePassportContext } from "../../../hooks/usePassportContext"
12
+ import { getAddressExplorerUrl } from "../../../utils/address"
13
+ import useDropdownStore, { DropdownView } from "../../../stores/dropdownStore"
14
+ import useWalletAccount from "../../../hooks/useWalletAccount"
15
+
16
+ const buttonStartEnhancerSize = 12
17
+
18
+ const commonButtonProps: Partial<ButtonProps> = {
19
+ kind: "secondary",
20
+ size: "small",
21
+ shape: "pill",
22
+ overrides: {
23
+ BaseButton: {
24
+ style: {
25
+ flex: 1,
26
+ },
27
+ },
28
+ StartEnhancer: {
29
+ style: {
30
+ stroke: "currentColor",
31
+ },
32
+ },
33
+ },
34
+ }
35
+
36
+ export default function AccountAddressActions(props: BlockProps) {
37
+ const { overrides, ...restProps } = props
38
+
39
+ const [, theme] = useStyletron()
40
+ const { environment } = usePassportContext()
41
+ const setDropdownView = useDropdownStore((state) => state.setView)
42
+ const handleReceiveClick = () => setDropdownView(DropdownView.RECEIVE)
43
+
44
+ const walletAccount = useWalletAccount()
45
+
46
+ const blockExplorerUrl = getAddressExplorerUrl(
47
+ walletAccount.accountAddress!,
48
+ "mezo",
49
+ environment === "testnet",
50
+ )
51
+
52
+ return (
53
+ <Block
54
+ display="flex"
55
+ alignItems="center"
56
+ backgroundColor="transparent"
57
+ padding={`0 ${theme.sizing.scale600} ${theme.sizing.scale800}`}
58
+ overrides={mergeOverrides(
59
+ {
60
+ Block: {
61
+ style: {
62
+ gap: theme.sizing.scale600,
63
+ },
64
+ },
65
+ },
66
+ overrides,
67
+ )}
68
+ {...restProps}
69
+ >
70
+ <Button
71
+ onClick={handleReceiveClick}
72
+ startEnhancer={
73
+ <ArrowNarrowLeft
74
+ size={buttonStartEnhancerSize}
75
+ overrides={{
76
+ Svg: {
77
+ style: {
78
+ transform: "rotate(-45deg)",
79
+ },
80
+ },
81
+ }}
82
+ />
83
+ }
84
+ {...commonButtonProps}
85
+ >
86
+ Receive
87
+ </Button>
88
+
89
+ <Button
90
+ $as="a"
91
+ href={blockExplorerUrl}
92
+ target="_blank"
93
+ {...commonButtonProps}
94
+ >
95
+ Block Explorer
96
+ </Button>
97
+ </Block>
98
+ )
99
+ }