@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
@@ -1,54 +1,74 @@
1
- import { Block, ButtonProps, useStyletron } from "@mezo-org/mezo-clay"
2
- import React, { forwardRef, ReactNode } from "react"
1
+ import { Block, Button, ButtonProps, useStyletron } from "@mezo-org/mezo-clay"
2
+ import React, { forwardRef, ReactNode, useMemo } from "react"
3
3
 
4
- type ConnectedTriggerProps = Omit<ButtonProps, "children"> & {
4
+ type ConnectedTriggerProps = Omit<ButtonProps, "children" | "size"> & {
5
5
  avatar: ReactNode
6
+ size?: "medium" | "large"
6
7
  }
7
8
 
8
9
  const ConnectedTrigger = forwardRef<HTMLButtonElement, ConnectedTriggerProps>(
9
10
  (props, ref) => {
10
- const { onClick, avatar, ...restProps } = props
11
+ const { onClick, avatar, size = "medium", ...restProps } = props
11
12
 
12
13
  const [, theme] = useStyletron()
13
14
 
15
+ const avatarSize = useMemo(() => {
16
+ const sizeMap = {
17
+ medium: theme.sizing.scale950,
18
+ large: theme.sizing.scale1400,
19
+ }
20
+
21
+ return sizeMap[size]
22
+ }, [theme, size])
23
+
24
+ const buttonPadding = useMemo(() => {
25
+ const paddingMap = {
26
+ medium: theme.sizing.scale0,
27
+ large: theme.sizing.scale100,
28
+ }
29
+
30
+ return paddingMap[size]
31
+ }, [theme, size])
32
+
14
33
  return (
15
- <Block
16
- as="button"
34
+ <Button
17
35
  overrides={{
18
- Block: {
36
+ BaseButton: {
19
37
  props: { ref, ...restProps },
20
38
  style: {
21
- border: "none",
22
- background: "none",
23
- padding: 0,
24
- margin: 0,
25
- cursor: "pointer",
39
+ borderRadius: "100%",
40
+ overflow: "hidden",
41
+ padding: buttonPadding,
26
42
  },
27
43
  },
28
44
  }}
29
45
  onClick={onClick}
30
46
  >
31
- <Block
32
- width={theme.sizing.scale950}
33
- height={theme.sizing.scale950}
34
- overrides={{
35
- Block: {
36
- style: {
37
- borderRadius: "100%",
38
- border: `2px solid ${theme.colors.contentPrimary}`,
39
- boxSizing: "border-box",
40
- overflow: "hidden",
47
+ {typeof avatar === "string" ? (
48
+ <Block
49
+ width={avatarSize}
50
+ height={avatarSize}
51
+ as="img"
52
+ src={avatar}
53
+ alt=""
54
+ />
55
+ ) : (
56
+ <Block
57
+ width={avatarSize}
58
+ height={avatarSize}
59
+ overrides={{
60
+ Block: {
61
+ style: {
62
+ borderRadius: "100%",
63
+ overflow: "hidden",
64
+ },
41
65
  },
42
- },
43
- }}
44
- >
45
- {typeof avatar === "string" ? (
46
- <Block as="img" src={avatar} alt="" />
47
- ) : (
48
- avatar
49
- )}
50
- </Block>
51
- </Block>
66
+ }}
67
+ >
68
+ {avatar}
69
+ </Block>
70
+ )}
71
+ </Button>
52
72
  )
53
73
  },
54
74
  )
@@ -1,78 +1,35 @@
1
- import {
2
- Block,
3
- Button,
4
- LogOut01,
5
- Mats,
6
- ParagraphSmall,
7
- useStyletron,
8
- } from "@mezo-org/mezo-clay"
9
- import React, { useCallback } from "react"
10
- import { useDisconnect } from "wagmi"
11
- import { useSignOut } from "../../hooks"
12
- import { DropdownData } from "../../hooks/useDropdownData"
13
- import AccountAddress from "./AccountAddress"
14
- import AccountAssets from "./AccountAssets"
15
- import AccountBalance from "./AccountBalance"
16
- import WelcomeBlock from "./WelcomeBlock"
17
-
18
- function MatsnetLabel() {
19
- const [, theme] = useStyletron()
20
- return (
21
- <ParagraphSmall color={theme.colors.contentTertiary}>
22
- <Mats
23
- color="currentColor"
24
- size={theme.sizing.scale400}
25
- overrides={{
26
- Svg: {
27
- style: {
28
- marginRight: theme.sizing.scale300,
29
- },
30
- },
31
- }}
32
- />
33
- Matsnet Assets
34
- </ParagraphSmall>
35
- )
36
- }
37
-
38
- type DropdownContentProps = {
39
- data: DropdownData
1
+ import { Block, useStyletron } from "@mezo-org/mezo-clay"
2
+ import React, { useEffect } from "react"
3
+ import useDropdownStore, { DropdownView } from "../../stores/dropdownStore"
4
+ import Root from "./Root/Root"
5
+ import Receive from "./Receive/Receive"
6
+ import TestnetTopBanner from "./TestnetTopBanner"
7
+
8
+ type ContentProps = {
40
9
  onSignOut?: () => void
10
+ onOtherAssetsClick?: () => void
41
11
  }
42
12
 
43
- export default function DropdownContent(props: DropdownContentProps) {
44
- const { data, onSignOut } = props
45
-
46
- const [, theme] = useStyletron()
13
+ function Content(props: ContentProps) {
14
+ const { onSignOut, onOtherAssetsClick } = props
47
15
 
48
- const {
49
- mezoId,
50
- address,
51
- walletType,
52
- totalBalanceInUsd,
53
- formattedNativeAssets,
54
- matsnet,
55
- } = data
16
+ const [_, theme] = useStyletron()
56
17
 
57
- const { disconnect } = useDisconnect()
58
- const { signOut } = useSignOut()
18
+ const currentView = useDropdownStore((state) => state.view)
19
+ const setView = useDropdownStore((state) => state.setView)
59
20
 
60
- const handleLogOut = useCallback(() => {
61
- if (onSignOut) {
62
- onSignOut()
63
- return
64
- }
65
-
66
- signOut()
67
- disconnect()
68
- }, [signOut, disconnect, onSignOut])
21
+ useEffect(
22
+ () => () => {
23
+ setView(DropdownView.ROOT)
24
+ },
25
+ [setView],
26
+ )
69
27
 
70
28
  return (
71
29
  <Block
72
30
  display="inline-flex"
73
31
  flexDirection="column"
74
32
  backgroundColor={theme.colors.backgroundPrimary}
75
- padding={theme.sizing.scale500}
76
33
  width="100%"
77
34
  overrides={{
78
35
  Block: {
@@ -82,67 +39,15 @@ export default function DropdownContent(props: DropdownContentProps) {
82
39
  },
83
40
  }}
84
41
  >
85
- <WelcomeBlock mezoId={mezoId} matsBalance={matsnet.mats} />
86
-
87
- <Block
88
- display="flex"
89
- flexDirection="column"
90
- backgroundColor={theme.colors.backgroundSecondary}
91
- overflow="hidden"
92
- overrides={{
93
- Block: { style: { borderRadius: theme.borders.radius300 } },
94
- }}
95
- >
96
- <AccountAddress address={address} type={walletType} />
42
+ <TestnetTopBanner />
97
43
 
98
- <AccountBalance amount={totalBalanceInUsd} />
99
-
100
- <AccountAssets label="Assets" assets={formattedNativeAssets} />
101
- </Block>
102
-
103
- {matsnet.formattedAssets.length > 0 && (
104
- <Block
105
- marginTop={theme.sizing.scale600}
106
- backgroundColor={theme.colors.backgroundSecondary}
107
- overflow="hidden"
108
- overrides={{
109
- Block: { style: { borderRadius: theme.borders.radius300 } },
110
- }}
111
- >
112
- <AccountAssets
113
- label={<MatsnetLabel />}
114
- assets={matsnet.formattedAssets}
115
- />
116
- </Block>
44
+ {currentView === DropdownView.ROOT && (
45
+ <Root onSignOut={onSignOut} onOtherAssetsClick={onOtherAssetsClick} />
117
46
  )}
118
47
 
119
- <Block
120
- marginTop={theme.sizing.scale700}
121
- padding={`0 ${theme.sizing.scale100}`}
122
- >
123
- <Button
124
- size="small"
125
- kind="tertiary"
126
- startEnhancer={<LogOut01 color="currentColor" size={12} />}
127
- onClick={() => handleLogOut()}
128
- overrides={{
129
- Root: {
130
- style: {
131
- ":hover": {
132
- backgroundColor: theme.colors.backgroundSecondary,
133
- boxShadow: "none",
134
- },
135
- ":active": {
136
- backgroundColor: theme.colors.backgroundSecondary,
137
- color: theme.colors.contentPrimary,
138
- },
139
- },
140
- },
141
- }}
142
- >
143
- Log out
144
- </Button>
145
- </Block>
48
+ {currentView === DropdownView.RECEIVE && <Receive />}
146
49
  </Block>
147
50
  )
148
51
  }
52
+
53
+ export default Content
@@ -20,12 +20,13 @@ const DisconnectedTrigger = forwardRef<
20
20
  }
21
21
  overrides={{
22
22
  Root: {
23
- props: { ref, ...restProps },
23
+ props: { ref },
24
24
  },
25
25
  }}
26
26
  size="small"
27
27
  shape="pill"
28
28
  onClick={onClick}
29
+ {...restProps}
29
30
  >
30
31
  {children}
31
32
  </Button>
@@ -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