@mezo-org/passport 0.4.0-dev.9 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) 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 +31 -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/numbers.d.ts +15 -33
  188. package/dist/src/utils/numbers.d.ts.map +1 -1
  189. package/dist/src/utils/numbers.js +26 -70
  190. package/dist/src/utils/numbers.js.map +1 -1
  191. package/dist/src/utils/numbers.test.js +46 -42
  192. package/dist/src/utils/numbers.test.js.map +1 -1
  193. package/dist/src/utils/siww.d.ts +1 -0
  194. package/dist/src/utils/siww.d.ts.map +1 -1
  195. package/dist/src/utils/siww.js +50 -12
  196. package/dist/src/utils/siww.js.map +1 -1
  197. package/dist/src/utils/wagmi.d.ts +3 -0
  198. package/dist/src/utils/wagmi.d.ts.map +1 -0
  199. package/dist/src/utils/wagmi.js +7 -0
  200. package/dist/src/utils/wagmi.js.map +1 -0
  201. package/dist/src/wallet/index.d.ts +1 -1
  202. package/dist/src/wallet/index.d.ts.map +1 -1
  203. package/dist/src/wallet/index.js +1 -1
  204. package/dist/src/wallet/index.js.map +1 -1
  205. package/package.json +11 -8
  206. package/src/api/auth.ts +8 -4
  207. package/src/api/client.ts +11 -2
  208. package/src/api/portal.ts +11 -14
  209. package/src/components/Dropdown/ConnectedTrigger.tsx +52 -32
  210. package/src/components/Dropdown/Content.tsx +26 -121
  211. package/src/components/Dropdown/DisconnectedTrigger.tsx +2 -1
  212. package/src/components/Dropdown/Dropdown.tsx +29 -17
  213. package/src/components/Dropdown/ListingItem.tsx +176 -0
  214. package/src/components/Dropdown/NestedViewLayout.tsx +87 -0
  215. package/src/components/Dropdown/README.md +10 -18
  216. package/src/components/Dropdown/Receive/Receive.tsx +144 -0
  217. package/src/components/Dropdown/Root/AccountAddressActions.tsx +99 -0
  218. package/src/components/Dropdown/Root/AccountBalance.tsx +68 -0
  219. package/src/components/Dropdown/Root/AccountBtcListing.tsx +52 -0
  220. package/src/components/Dropdown/Root/AccountError.tsx +34 -0
  221. package/src/components/Dropdown/Root/AccountMusdListing.tsx +45 -0
  222. package/src/components/Dropdown/Root/AccountOtherAssets.tsx +85 -0
  223. package/src/components/Dropdown/Root/Root.tsx +77 -0
  224. package/src/components/Dropdown/Root/WalletAddress.tsx +123 -0
  225. package/src/components/Dropdown/Root/WelcomeBlock.tsx +173 -0
  226. package/src/components/Dropdown/SlotNumber.tsx +131 -0
  227. package/src/components/Dropdown/TestnetTopBanner.tsx +32 -0
  228. package/src/config.ts +88 -20
  229. package/src/constants.ts +12 -4
  230. package/src/hooks/index.ts +7 -0
  231. package/src/hooks/useAssetsConversionRates.ts +79 -0
  232. package/src/hooks/useAuthenticateWithWallet.ts +30 -14
  233. package/src/hooks/useBorrowData.ts +246 -0
  234. package/src/hooks/useCreateAccount.ts +29 -2
  235. package/src/hooks/useGetCurrentAccount.ts +5 -7
  236. package/src/hooks/useLinkAccount.ts +37 -4
  237. package/src/hooks/useRefreshPassport.ts +56 -0
  238. package/src/hooks/useSignInWithWallet.ts +2 -2
  239. package/src/hooks/useSignUpWithWallet.ts +2 -2
  240. package/src/hooks/useTokensBalances.ts +265 -0
  241. package/src/hooks/useValidateMezoId.ts +31 -0
  242. package/src/hooks/useWalletAccount.ts +32 -20
  243. package/src/hooks/useWatchTransferEvents.ts +74 -0
  244. package/src/index.ts +12 -1
  245. package/src/lib/contracts/index.ts +99 -0
  246. package/src/lib/contracts/priceOracle.ts +53 -0
  247. package/src/provider.ts +11 -3
  248. package/src/stores/dropdownStore.ts +20 -0
  249. package/src/utils/address.test.ts +10 -6
  250. package/src/utils/address.ts +5 -3
  251. package/src/utils/assets.test.ts +57 -0
  252. package/src/utils/assets.ts +103 -0
  253. package/src/utils/currency.test.ts +77 -1
  254. package/src/utils/currency.ts +35 -9
  255. package/src/utils/mezoId.ts +51 -0
  256. package/src/utils/numbers.test.ts +49 -42
  257. package/src/utils/numbers.ts +33 -95
  258. package/src/utils/siww.ts +71 -16
  259. package/src/utils/wagmi.ts +12 -0
  260. package/src/wallet/index.ts +3 -2
  261. package/dist/src/components/Dropdown/AccountAddress.d.ts +0 -8
  262. package/dist/src/components/Dropdown/AccountAddress.d.ts.map +0 -1
  263. package/dist/src/components/Dropdown/AccountAddress.js +0 -58
  264. package/dist/src/components/Dropdown/AccountAddress.js.map +0 -1
  265. package/dist/src/components/Dropdown/AccountAssets.d.ts +0 -14
  266. package/dist/src/components/Dropdown/AccountAssets.d.ts.map +0 -1
  267. package/dist/src/components/Dropdown/AccountAssets.js +0 -44
  268. package/dist/src/components/Dropdown/AccountAssets.js.map +0 -1
  269. package/dist/src/components/Dropdown/AccountBalance.d.ts +0 -7
  270. package/dist/src/components/Dropdown/AccountBalance.d.ts.map +0 -1
  271. package/dist/src/components/Dropdown/AccountBalance.js +0 -18
  272. package/dist/src/components/Dropdown/AccountBalance.js.map +0 -1
  273. package/dist/src/components/Dropdown/WelcomeBlock.d.ts +0 -8
  274. package/dist/src/components/Dropdown/WelcomeBlock.d.ts.map +0 -1
  275. package/dist/src/components/Dropdown/WelcomeBlock.js +0 -44
  276. package/dist/src/components/Dropdown/WelcomeBlock.js.map +0 -1
  277. package/dist/src/hooks/useAssetsUSDConversion.d.ts +0 -8
  278. package/dist/src/hooks/useAssetsUSDConversion.d.ts.map +0 -1
  279. package/dist/src/hooks/useAssetsUSDConversion.js +0 -21
  280. package/dist/src/hooks/useAssetsUSDConversion.js.map +0 -1
  281. package/dist/src/hooks/useDropdownData.d.ts +0 -44
  282. package/dist/src/hooks/useDropdownData.d.ts.map +0 -1
  283. package/dist/src/hooks/useDropdownData.js +0 -73
  284. package/dist/src/hooks/useDropdownData.js.map +0 -1
  285. package/dist/src/utils/cryptoAssets.d.ts +0 -28
  286. package/dist/src/utils/cryptoAssets.d.ts.map +0 -1
  287. package/dist/src/utils/cryptoAssets.js +0 -73
  288. package/dist/src/utils/cryptoAssets.js.map +0 -1
  289. package/dist/src/utils/cryptoAssets.test.d.ts +0 -2
  290. package/dist/src/utils/cryptoAssets.test.d.ts.map +0 -1
  291. package/dist/src/utils/cryptoAssets.test.js +0 -49
  292. package/dist/src/utils/cryptoAssets.test.js.map +0 -1
  293. package/src/components/Dropdown/AccountAddress.tsx +0 -111
  294. package/src/components/Dropdown/AccountAssets.tsx +0 -110
  295. package/src/components/Dropdown/AccountBalance.tsx +0 -38
  296. package/src/components/Dropdown/WelcomeBlock.tsx +0 -92
  297. package/src/hooks/useAssetsUSDConversion.ts +0 -31
  298. package/src/hooks/useDropdownData.ts +0 -130
  299. package/src/utils/cryptoAssets.test.ts +0 -59
  300. package/src/utils/cryptoAssets.ts +0 -93
@@ -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
+ }
@@ -0,0 +1,68 @@
1
+ import React from "react"
2
+ import { BlockProps, useStyletron } from "@mezo-org/mezo-clay"
3
+ import { formatUnits } from "viem"
4
+ import ListingItem from "../ListingItem"
5
+ import { useTokensBalances } from "../../../hooks/useTokensBalances"
6
+ import { useBorrowData } from "../../../hooks/useBorrowData"
7
+ import AccountError from "./AccountError"
8
+ import { CONVERSION_RATE_DECIMALS } from "../../../hooks/useAssetsConversionRates"
9
+ import { usePassportContext } from "../../../hooks/usePassportContext"
10
+
11
+ type AccountBalanceProps = Omit<BlockProps, "children">
12
+
13
+ export default function AccountBalance(props: AccountBalanceProps) {
14
+ const { overrides, ...restProps } = props
15
+ const [, theme] = useStyletron()
16
+ const { nativeBalanceRefetchInterval } = usePassportContext()
17
+
18
+ const {
19
+ data: tokensBalancesData,
20
+ isError: isTokensBalancesError,
21
+ isPending: isTokensBalancesDataPending,
22
+ } = useTokensBalances({
23
+ queryOptions: {
24
+ refetchInterval: nativeBalanceRefetchInterval,
25
+ },
26
+ })
27
+ const {
28
+ data: borrowData,
29
+ isError: isBorrowDataError,
30
+ isPending: isBorrowDataPending,
31
+ } = useBorrowData()
32
+
33
+ if (isTokensBalancesDataPending || isBorrowDataPending) {
34
+ return <ListingItem isLoading overrides={overrides} />
35
+ }
36
+
37
+ if (isTokensBalancesError || isBorrowDataError) {
38
+ return (
39
+ <AccountError
40
+ padding={`${theme.sizing.scale500} ${theme.sizing.scale800}`}
41
+ topic="account balance"
42
+ overrides={overrides}
43
+ />
44
+ )
45
+ }
46
+
47
+ const totalBalanceInUsd = Object.values(tokensBalancesData).reduce(
48
+ (acc, tokenBalance) => acc + tokenBalance.usd.value,
49
+ 0n,
50
+ )
51
+
52
+ const totalBalanceNumber = Number(
53
+ formatUnits(totalBalanceInUsd, CONVERSION_RATE_DECIMALS),
54
+ )
55
+
56
+ const totalDebtNumber = Number(borrowData.debtInUsd.formatted)
57
+
58
+ return (
59
+ <ListingItem
60
+ label="Total assets"
61
+ value={totalBalanceNumber}
62
+ subLabel="Total liabilities"
63
+ subValue={totalDebtNumber}
64
+ overrides={overrides}
65
+ {...restProps}
66
+ />
67
+ )
68
+ }
@@ -0,0 +1,52 @@
1
+ import React from "react"
2
+ import { BitcoinCircle, BlockProps } from "@mezo-org/mezo-clay"
3
+ import ListingItem from "../ListingItem"
4
+ import { getAsset } from "../../../utils/assets"
5
+ import { useBorrowData } from "../../../hooks/useBorrowData"
6
+ import { useTokensBalances } from "../../../hooks/useTokensBalances"
7
+ import AccountError from "./AccountError"
8
+ import { usePassportContext } from "../../../hooks/usePassportContext"
9
+
10
+ type AccountBTCListingProps = Omit<BlockProps, "children">
11
+
12
+ export default function AccountBTCListing(props: AccountBTCListingProps) {
13
+ const { nativeBalanceRefetchInterval } = usePassportContext()
14
+
15
+ const {
16
+ data: borrowData,
17
+ isError: isBorrowDataError,
18
+ isPending: isBorrowDataPending,
19
+ } = useBorrowData()
20
+
21
+ const {
22
+ data: tokensBalancesData,
23
+ isError: isTokensBalancesError,
24
+ isPending: isTokensBalancesPending,
25
+ } = useTokensBalances({
26
+ queryOptions: {
27
+ refetchInterval: nativeBalanceRefetchInterval,
28
+ },
29
+ })
30
+
31
+ if (isTokensBalancesError || isBorrowDataError) {
32
+ return <AccountError topic="Bitcoin balance" />
33
+ }
34
+
35
+ if (isTokensBalancesPending || isBorrowDataPending) {
36
+ return <ListingItem isLoading />
37
+ }
38
+
39
+ const btcBalance = Number(tokensBalancesData.BTC.usd.formatted)
40
+ const lockedCollateral = Number(borrowData.collateral.usd.formatted)
41
+
42
+ return (
43
+ <ListingItem
44
+ icon={<BitcoinCircle />}
45
+ label={getAsset("BTC").name}
46
+ value={btcBalance}
47
+ subLabel="Locked collateral"
48
+ subValue={lockedCollateral}
49
+ {...props}
50
+ />
51
+ )
52
+ }
@@ -0,0 +1,34 @@
1
+ import React from "react"
2
+ import {
3
+ BlockProps,
4
+ LabelSmall,
5
+ mergeOverrides,
6
+ useStyletron,
7
+ } from "@mezo-org/mezo-clay"
8
+
9
+ type AccountErrorProps = {
10
+ topic: string
11
+ } & BlockProps
12
+
13
+ export default function AccountError(props: AccountErrorProps) {
14
+ const { topic, overrides, ...restProps } = props
15
+
16
+ const [, theme] = useStyletron()
17
+
18
+ return (
19
+ <LabelSmall
20
+ padding={`${theme.sizing.scale600} ${theme.sizing.scale800}`}
21
+ color="negative"
22
+ overrides={mergeOverrides(overrides, {
23
+ Block: {
24
+ style: {
25
+ lineHeight: theme.sizing.scale700,
26
+ },
27
+ },
28
+ })}
29
+ {...restProps}
30
+ >
31
+ An error occured loading {topic}.
32
+ </LabelSmall>
33
+ )
34
+ }
@@ -0,0 +1,45 @@
1
+ import React from "react"
2
+ import { BlockProps, MUsdCircle02 } from "@mezo-org/mezo-clay"
3
+ import ListingItem from "../ListingItem"
4
+ import { getAsset } from "../../../utils/assets"
5
+ import { useBorrowData } from "../../../hooks/useBorrowData"
6
+ import { useTokensBalances } from "../../../hooks/useTokensBalances"
7
+ import AccountError from "./AccountError"
8
+
9
+ export default function AccountMusdListing(
10
+ props: Omit<BlockProps, "children">,
11
+ ) {
12
+ const {
13
+ data: borrowData,
14
+ isError: isBorrowDataError,
15
+ isPending: isBorrowDataPending,
16
+ } = useBorrowData()
17
+
18
+ const {
19
+ data: tokensBalancesData,
20
+ isError: isTokensBalancesError,
21
+ isPending: isTokensBalancesPending,
22
+ } = useTokensBalances()
23
+
24
+ if (isBorrowDataError || isTokensBalancesError) {
25
+ return <AccountError topic="MUSD balance" />
26
+ }
27
+
28
+ if (isBorrowDataPending || isTokensBalancesPending) {
29
+ return <ListingItem isLoading />
30
+ }
31
+
32
+ const musdBalance = Number(tokensBalancesData.MUSD.usd.formatted)
33
+ const lockedCollateral = Number(borrowData.debtInUsd.formatted)
34
+
35
+ return (
36
+ <ListingItem
37
+ icon={<MUsdCircle02 />}
38
+ label={getAsset("MUSD").name}
39
+ value={musdBalance}
40
+ subLabel="Borrowed"
41
+ subValue={lockedCollateral}
42
+ {...props}
43
+ />
44
+ )
45
+ }
@@ -0,0 +1,85 @@
1
+ import React from "react"
2
+ import {
3
+ useStyletron,
4
+ CoinsStacked02,
5
+ mergeOverrides,
6
+ BlockProps,
7
+ } from "@mezo-org/mezo-clay"
8
+ import { formatUnits } from "viem"
9
+ import ListingItem from "../ListingItem"
10
+ import { useTokensBalances } from "../../../hooks/useTokensBalances"
11
+ import AccountError from "./AccountError"
12
+ import { CONVERSION_RATE_DECIMALS } from "../../../hooks/useAssetsConversionRates"
13
+
14
+ type AccountOtherAssetsProps = {
15
+ onClick?: () => void
16
+ } & Omit<BlockProps, "children">
17
+
18
+ export default function AccountOtherAssets(props: AccountOtherAssetsProps) {
19
+ const { onClick, overrides, ...restProps } = props
20
+
21
+ const [, theme] = useStyletron()
22
+
23
+ const {
24
+ data: tokensBalancesData,
25
+ isPending: isTokensBalancesPending,
26
+ isError: isTokensBalancesError,
27
+ } = useTokensBalances()
28
+
29
+ if (isTokensBalancesError) {
30
+ return (
31
+ <AccountError
32
+ topic="other assets"
33
+ paddingTop={theme.sizing.scale100}
34
+ paddingBottom={theme.sizing.scale100}
35
+ overrides={overrides}
36
+ />
37
+ )
38
+ }
39
+
40
+ if (isTokensBalancesPending) {
41
+ return <ListingItem isLoading overrides={overrides} />
42
+ }
43
+
44
+ const otherAssets = Object.values(tokensBalancesData)
45
+ .filter((asset) => !["BTC", "MUSD"].includes(asset.symbol))
46
+ .filter((asset) => asset.value > 0n)
47
+
48
+ const assetsCount = otherAssets.length
49
+ const totalAssetsInUsd = Number(
50
+ formatUnits(
51
+ otherAssets.reduce((total, asset) => total + asset.usd.value, 0n),
52
+ CONVERSION_RATE_DECIMALS,
53
+ ),
54
+ )
55
+
56
+ let label = "No other assets"
57
+ if (assetsCount === 1) label = "1 more asset"
58
+ if (assetsCount > 1) label = `${assetsCount} more assets`
59
+
60
+ return (
61
+ <ListingItem
62
+ icon={<CoinsStacked02 color={theme.colors.contentPrimary} />}
63
+ label={label}
64
+ value={totalAssetsInUsd}
65
+ overrides={mergeOverrides(
66
+ {
67
+ Block: {
68
+ props: {
69
+ $as: "button",
70
+ onClick,
71
+ },
72
+ style: {
73
+ borderWidth: 0,
74
+ cursor: "pointer",
75
+ backgroundColor: "transparent",
76
+ minHeight: "56px",
77
+ },
78
+ },
79
+ },
80
+ overrides,
81
+ )}
82
+ {...restProps}
83
+ />
84
+ )
85
+ }
@@ -0,0 +1,77 @@
1
+ import { Block, Button, LogOut01, useStyletron } from "@mezo-org/mezo-clay"
2
+ import React, { useCallback } from "react"
3
+ import { useDisconnect } from "wagmi"
4
+ import { useSignOut } from "../../../hooks"
5
+ import WalletAddress from "./WalletAddress"
6
+ import AccountBalance from "./AccountBalance"
7
+ import WelcomeBlock from "./WelcomeBlock"
8
+ import AccountAddressActions from "./AccountAddressActions"
9
+ import AccountOtherAssets from "./AccountOtherAssets"
10
+ import AccountBtcListing from "./AccountBtcListing"
11
+ import AccountMusdListing from "./AccountMusdListing"
12
+
13
+ type RootProps = {
14
+ onSignOut?: () => void
15
+ onOtherAssetsClick?: () => void
16
+ }
17
+
18
+ export default function Root(props: RootProps) {
19
+ const { onSignOut, onOtherAssetsClick } = props
20
+
21
+ const [, theme] = useStyletron()
22
+
23
+ const { disconnect } = useDisconnect()
24
+ const { signOut } = useSignOut()
25
+
26
+ const handleLogOut = useCallback(() => {
27
+ if (onSignOut) {
28
+ onSignOut()
29
+ return
30
+ }
31
+ signOut()
32
+ disconnect()
33
+ }, [signOut, disconnect, onSignOut])
34
+
35
+ const overridesWithDivider = {
36
+ Block: {
37
+ style: {
38
+ borderBottomWidth: "1px",
39
+ borderBottomStyle: "solid",
40
+ borderBottomColor: theme.colors.borderOpaque,
41
+ },
42
+ },
43
+ }
44
+
45
+ return (
46
+ <Block display="inline-flex" flexDirection="column">
47
+ <WelcomeBlock />
48
+
49
+ <AccountAddressActions overrides={overridesWithDivider} />
50
+
51
+ <WalletAddress overrides={overridesWithDivider} />
52
+
53
+ <AccountBalance overrides={overridesWithDivider} />
54
+
55
+ <AccountBtcListing />
56
+
57
+ <AccountMusdListing />
58
+
59
+ <AccountOtherAssets
60
+ onClick={onOtherAssetsClick}
61
+ overrides={overridesWithDivider}
62
+ />
63
+
64
+ <Block padding={theme.sizing.scale300}>
65
+ <Button
66
+ size="small"
67
+ shape="pill"
68
+ kind="tertiary"
69
+ startEnhancer={<LogOut01 color="currentColor" size={16} />}
70
+ onClick={handleLogOut}
71
+ >
72
+ Sign out
73
+ </Button>
74
+ </Block>
75
+ </Block>
76
+ )
77
+ }