@arcblock/ux 3.4.15 → 3.5.1

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 (333) hide show
  1. package/lib/package.json.js +1 -1
  2. package/package.json +10 -7
  3. package/src/ActionButton/ActionButton.stories.jsx +0 -61
  4. package/src/ActionButton/index.jsx +0 -106
  5. package/src/ActivityIndicator/ActivityIndicator.stories.jsx +0 -9
  6. package/src/ActivityIndicator/index.jsx +0 -140
  7. package/src/Address/Address.stories.jsx +0 -38
  8. package/src/Address/compact-text.jsx +0 -76
  9. package/src/Address/did-address.tsx +0 -223
  10. package/src/Address/index.tsx +0 -21
  11. package/src/Address/responsive-did-address.tsx +0 -154
  12. package/src/Alert/Alert.stories.jsx +0 -100
  13. package/src/Alert/index.jsx +0 -130
  14. package/src/AnimationWaiter/AnimationWaiter.stories.jsx +0 -35
  15. package/src/AnimationWaiter/dark-animation.json +0 -1
  16. package/src/AnimationWaiter/default-animation.json +0 -1
  17. package/src/AnimationWaiter/index.jsx +0 -296
  18. package/src/Async/index.tsx +0 -44
  19. package/src/Avatar/Avatar.stories.jsx +0 -11
  20. package/src/Avatar/did-motif.jsx +0 -38
  21. package/src/Avatar/etherscan-blockies.js +0 -81
  22. package/src/Avatar/index.jsx +0 -195
  23. package/src/Badge/Badge.stories.jsx +0 -41
  24. package/src/Badge/index.jsx +0 -101
  25. package/src/Blocklet/Blocklet.stories.jsx +0 -21
  26. package/src/Blocklet/blocklet.jsx +0 -276
  27. package/src/Blocklet/index.js +0 -5
  28. package/src/Blocklet/utils.jsx +0 -58
  29. package/src/BlockletContext/index.tsx +0 -72
  30. package/src/BlockletNFT/BlockletNFT.stories.jsx +0 -21
  31. package/src/BlockletNFT/index.jsx +0 -378
  32. package/src/BlockletV2/Blocklet.stories.jsx +0 -34
  33. package/src/BlockletV2/blocklet.tsx +0 -247
  34. package/src/BlockletV2/components/icon-text.tsx +0 -47
  35. package/src/BlockletV2/components/tooltip-icon.tsx +0 -52
  36. package/src/BlockletV2/index.ts +0 -6
  37. package/src/BlockletV2/utils.js +0 -75
  38. package/src/Button/Button.stories.jsx +0 -24
  39. package/src/Button/index.js +0 -9
  40. package/src/Button/wrap.jsx +0 -126
  41. package/src/ButtonGroup/index.js +0 -16
  42. package/src/CardSelector/index.tsx +0 -136
  43. package/src/Center/Center.stories.jsx +0 -20
  44. package/src/Center/index.tsx +0 -33
  45. package/src/ClickToCopy/ClickToCopy.stories.jsx +0 -24
  46. package/src/ClickToCopy/copy-button.tsx +0 -43
  47. package/src/ClickToCopy/hook.ts +0 -42
  48. package/src/ClickToCopy/index.tsx +0 -96
  49. package/src/CloseButton/index.tsx +0 -37
  50. package/src/CodeBlock/CodeBlock.stories.jsx +0 -22
  51. package/src/CodeBlock/LightBox.tsx +0 -87
  52. package/src/CodeBlock/index.tsx +0 -217
  53. package/src/Colors/Colors.stories.jsx +0 -211
  54. package/src/Colors/index.ts +0 -4
  55. package/src/Colors/themes/default.ts +0 -8
  56. package/src/Colors/themes/did-connect.ts +0 -64
  57. package/src/Colors/themes/temp.ts +0 -52
  58. package/src/Config/Config.stories.jsx +0 -16
  59. package/src/Config/config-provider.tsx +0 -62
  60. package/src/Config/index.ts +0 -2
  61. package/src/Config/theme-mode-toggle.tsx +0 -38
  62. package/src/ContactForm/ContactForm.stories.jsx +0 -32
  63. package/src/ContactForm/index.tsx +0 -264
  64. package/src/CookieConsent/CookieConsent.stories.jsx +0 -33
  65. package/src/CookieConsent/index.tsx +0 -104
  66. package/src/CountDown/CountDown.stories.jsx +0 -15
  67. package/src/CountDown/index.tsx +0 -170
  68. package/src/DID/DID.stories.jsx +0 -37
  69. package/src/DID/index.tsx +0 -393
  70. package/src/DIDConnect/app-icon.tsx +0 -37
  71. package/src/DIDConnect/app-info-item.tsx +0 -93
  72. package/src/DIDConnect/auth-apps/auth-apps-info.tsx +0 -77
  73. package/src/DIDConnect/auth-apps/index.tsx +0 -278
  74. package/src/DIDConnect/auth-apps/switch-role.tsx +0 -47
  75. package/src/DIDConnect/did-connect-container.tsx +0 -326
  76. package/src/DIDConnect/did-connect-footer.tsx +0 -76
  77. package/src/DIDConnect/did-connect-logo.tsx +0 -8
  78. package/src/DIDConnect/icons/did-wallet-logo.tsx +0 -18
  79. package/src/DIDConnect/icons/github-logo.tsx +0 -17
  80. package/src/DIDConnect/index.ts +0 -11
  81. package/src/DIDConnect/landing-page.tsx +0 -218
  82. package/src/DIDConnect/powered-by.tsx +0 -48
  83. package/src/DIDConnect/provider-icon.tsx +0 -62
  84. package/src/DIDConnect/request-storage-access-api-dialog.tsx +0 -304
  85. package/src/DIDConnect/with-container.tsx +0 -323
  86. package/src/DIDConnect/with-ux-theme.tsx +0 -22
  87. package/src/DIDLogo/Logo.stories.jsx +0 -11
  88. package/src/DIDLogo/index.tsx +0 -168
  89. package/src/Datatable/CustomToolbar.jsx +0 -415
  90. package/src/Datatable/Datatable.stories.jsx +0 -92
  91. package/src/Datatable/DatatableContext.jsx +0 -35
  92. package/src/Datatable/TableSearch.jsx +0 -166
  93. package/src/Datatable/index.jsx +0 -652
  94. package/src/Datatable/utils.js +0 -161
  95. package/src/Dialog/Dialog.stories.jsx +0 -21
  96. package/src/Dialog/confirm.jsx +0 -143
  97. package/src/Dialog/dialog.jsx +0 -199
  98. package/src/Dialog/index.js +0 -4
  99. package/src/Dialog/types.d.ts +0 -20
  100. package/src/Dialog/use-confirm.jsx +0 -188
  101. package/src/DriftBot/index.tsx +0 -81
  102. package/src/Earth/Earth.stories.jsx +0 -39
  103. package/src/Earth/countries.json +0 -8057
  104. package/src/Earth/index.tsx +0 -515
  105. package/src/Earth/util.ts +0 -72
  106. package/src/Empty/Empty.stories.jsx +0 -23
  107. package/src/Empty/index.jsx +0 -48
  108. package/src/ErrorBoundary/ErrorBoundary.stories.jsx +0 -13
  109. package/src/ErrorBoundary/fallback.tsx +0 -85
  110. package/src/ErrorBoundary/index.ts +0 -1
  111. package/src/Footer/Footer.stories.jsx +0 -13
  112. package/src/Footer/index.tsx +0 -130
  113. package/src/Header/Header.stories.jsx +0 -30
  114. package/src/Header/addon-button.tsx +0 -41
  115. package/src/Header/auto-hidden.tsx +0 -31
  116. package/src/Header/header-addons.tsx +0 -37
  117. package/src/Header/header.tsx +0 -214
  118. package/src/Header/index.ts +0 -3
  119. package/src/Header/responsive-header.tsx +0 -145
  120. package/src/Icon/Icon.stories.jsx +0 -45
  121. package/src/Icon/image.tsx +0 -53
  122. package/src/Icon/index.tsx +0 -63
  123. package/src/Img/Img.stories.jsx +0 -17
  124. package/src/Img/index.jsx +0 -258
  125. package/src/InfoRow/InfoRow.stories.jsx +0 -14
  126. package/src/InfoRow/index.tsx +0 -91
  127. package/src/Layout/Layout.stories.jsx +0 -24
  128. package/src/Layout/dashboard/external-link.tsx +0 -59
  129. package/src/Layout/dashboard/full-page.tsx +0 -58
  130. package/src/Layout/dashboard/index.tsx +0 -260
  131. package/src/Layout/dashboard/sidebar.tsx +0 -198
  132. package/src/Layout/dashboard-legacy/header.tsx +0 -156
  133. package/src/Layout/dashboard-legacy/index.tsx +0 -127
  134. package/src/Layout/dashboard-legacy/sidebar.tsx +0 -129
  135. package/src/Layout/index.tsx +0 -310
  136. package/src/LoadingMask/index.tsx +0 -108
  137. package/src/Locale/LocaleSelector.stories.jsx +0 -44
  138. package/src/Locale/browser-lang.ts +0 -65
  139. package/src/Locale/context.tsx +0 -162
  140. package/src/Locale/languages.ts +0 -58
  141. package/src/Locale/selector.tsx +0 -174
  142. package/src/Locale/util.ts +0 -38
  143. package/src/Logo/Logo.stories.jsx +0 -23
  144. package/src/Logo/images/logo-dark-text.svg +0 -3
  145. package/src/Logo/images/logo-dark-top.svg +0 -6
  146. package/src/Logo/images/logo-light-text.svg +0 -3
  147. package/src/Logo/images/logo-light-top.svg +0 -6
  148. package/src/Logo/index.tsx +0 -58
  149. package/src/Metric/Metric.stories.jsx +0 -29
  150. package/src/Metric/index.tsx +0 -130
  151. package/src/MuiWrap/index.tsx +0 -10
  152. package/src/NFTDisplay/NFTBroken.svg +0 -34
  153. package/src/NFTDisplay/NFTDisplay.stories.jsx +0 -30
  154. package/src/NFTDisplay/README.md +0 -59
  155. package/src/NFTDisplay/aspect-ratio-container.tsx +0 -36
  156. package/src/NFTDisplay/broken.tsx +0 -51
  157. package/src/NFTDisplay/displayApi.ts +0 -43
  158. package/src/NFTDisplay/index.tsx +0 -393
  159. package/src/NFTDisplay/loading.tsx +0 -16
  160. package/src/NFTDisplay/preview.tsx +0 -84
  161. package/src/NFTDisplay/render-svg.tsx +0 -21
  162. package/src/NFTDisplay/svg-embedder/img.tsx +0 -27
  163. package/src/NFTDisplay/svg-embedder/inline-svg.tsx +0 -36
  164. package/src/NavMenu/NavMenu.stories.jsx +0 -17
  165. package/src/NavMenu/images/OCAP.svg +0 -1
  166. package/src/NavMenu/images/abt-network.svg +0 -1
  167. package/src/NavMenu/images/ai-kit.svg +0 -1
  168. package/src/NavMenu/images/aigne-image-smith.svg +0 -1
  169. package/src/NavMenu/images/aigne.svg +0 -1
  170. package/src/NavMenu/images/aistro.png +0 -0
  171. package/src/NavMenu/images/arcsphere.svg +0 -1
  172. package/src/NavMenu/images/blocklet-framework.svg +0 -1
  173. package/src/NavMenu/images/blocklet-launcher.svg +0 -1
  174. package/src/NavMenu/images/blocklet-server.svg +0 -1
  175. package/src/NavMenu/images/blocklet-store.svg +0 -1
  176. package/src/NavMenu/images/creator-studio.svg +0 -1
  177. package/src/NavMenu/images/did-wallet.svg +0 -1
  178. package/src/NavMenu/images/did.svg +0 -1
  179. package/src/NavMenu/images/nft-studio.svg +0 -1
  180. package/src/NavMenu/images/payment-kit.png +0 -0
  181. package/src/NavMenu/images/vc.svg +0 -1
  182. package/src/NavMenu/images/web3-kit.svg +0 -1
  183. package/src/NavMenu/index.ts +0 -3
  184. package/src/NavMenu/nav-menu-context.tsx +0 -30
  185. package/src/NavMenu/nav-menu.tsx +0 -441
  186. package/src/NavMenu/products.tsx +0 -830
  187. package/src/NavMenu/style.ts +0 -258
  188. package/src/NavMenu/sub-container.tsx +0 -125
  189. package/src/NavMenu/sub-item-group.tsx +0 -42
  190. package/src/OrgTransfer/index.tsx +0 -53
  191. package/src/OrgTransfer/locales.ts +0 -25
  192. package/src/OrgTransfer/selector.tsx +0 -252
  193. package/src/OrgTransfer/type.ts +0 -31
  194. package/src/PageScroller/index.tsx +0 -316
  195. package/src/PageScroller/story/FifthComponent.jsx +0 -7
  196. package/src/PageScroller/story/FirstComponent.jsx +0 -7
  197. package/src/PageScroller/story/FourthComponent.jsx +0 -7
  198. package/src/PageScroller/story/FullPage.jsx +0 -55
  199. package/src/PageScroller/story/PageContain.jsx +0 -59
  200. package/src/PageScroller/story/PageScroller.stories.jsx +0 -18
  201. package/src/PageScroller/story/SecondComponent.jsx +0 -7
  202. package/src/PageScroller/story/ThirdComponent.jsx +0 -7
  203. package/src/PageScroller/story/index.css +0 -115
  204. package/src/PageScroller/usePrevValue.ts +0 -11
  205. package/src/Passport/index.ts +0 -3
  206. package/src/Passport/passport.tsx +0 -118
  207. package/src/PhoneInput/PhoneInput.stories.jsx +0 -12
  208. package/src/PhoneInput/country-select.tsx +0 -148
  209. package/src/PhoneInput/index.tsx +0 -269
  210. package/src/PoweredByArcBlock/index.tsx +0 -27
  211. package/src/PricingTable/PricingPlan.tsx +0 -120
  212. package/src/PricingTable/PricingTable.stories.jsx +0 -38
  213. package/src/PricingTable/index.tsx +0 -59
  214. package/src/QRCode/QRCode.stories.jsx +0 -13
  215. package/src/QRCode/index.tsx +0 -66
  216. package/src/RelativeTime/RelativeTime.stories.jsx +0 -20
  217. package/src/RelativeTime/index.tsx +0 -334
  218. package/src/Result/Result.stories.jsx +0 -61
  219. package/src/Result/common.tsx +0 -119
  220. package/src/Result/index.tsx +0 -30
  221. package/src/Result/result.tsx +0 -65
  222. package/src/Result/translations.ts +0 -57
  223. package/src/Screenshot/BaseScreenshot/index.tsx +0 -73
  224. package/src/Screenshot/BaseScreenshot/shells/Macbook.tsx +0 -38
  225. package/src/Screenshot/BaseScreenshot/shells/Phone.tsx +0 -35
  226. package/src/Screenshot/Screenshot.stories.jsx +0 -44
  227. package/src/Screenshot/devices.css +0 -1366
  228. package/src/Screenshot/index.tsx +0 -300
  229. package/src/SessionBlocklet/index.tsx +0 -178
  230. package/src/SessionManager/SessionManager.stories.jsx +0 -9
  231. package/src/SessionManager/index.tsx +0 -3
  232. package/src/SessionPermission/index.tsx +0 -26
  233. package/src/SessionUser/components/did-space.tsx +0 -68
  234. package/src/SessionUser/components/logged-in.tsx +0 -338
  235. package/src/SessionUser/components/quick-login-item.tsx +0 -132
  236. package/src/SessionUser/components/session-user-item.tsx +0 -93
  237. package/src/SessionUser/components/session-user-switch.tsx +0 -240
  238. package/src/SessionUser/components/un-login.tsx +0 -257
  239. package/src/SessionUser/components/user-info.tsx +0 -201
  240. package/src/SessionUser/index.tsx +0 -68
  241. package/src/SessionUser/libs/translation.ts +0 -30
  242. package/src/SessionUser/libs/utils.ts +0 -39
  243. package/src/SharedBridge/index.tsx +0 -126
  244. package/src/SocialShare/index.tsx +0 -194
  245. package/src/Sparkline/Sparkline.stories.jsx +0 -13
  246. package/src/Sparkline/index.tsx +0 -231
  247. package/src/Spinner/Spinner.stories.jsx +0 -98
  248. package/src/Spinner/index.tsx +0 -20
  249. package/src/SplitButton/SplitButton.stories.jsx +0 -32
  250. package/src/SplitButton/index.tsx +0 -116
  251. package/src/SplitButton/useClickAway.tsx +0 -24
  252. package/src/Success/index.tsx +0 -175
  253. package/src/Switch/Switch.stories.jsx +0 -16
  254. package/src/Switch/index.jsx +0 -79
  255. package/src/Tabs/Tabs.stories.jsx +0 -18
  256. package/src/Tabs/index.tsx +0 -255
  257. package/src/Tag/Tag.stories.jsx +0 -15
  258. package/src/Tag/index.jsx +0 -106
  259. package/src/TextCollapse/TextCollapse.stories.jsx +0 -73
  260. package/src/TextCollapse/index.tsx +0 -85
  261. package/src/Theme/Theme.stories.jsx +0 -11
  262. package/src/Theme/index.ts +0 -21
  263. package/src/Theme/theme-provider.tsx +0 -374
  264. package/src/Theme/theme.ts +0 -229
  265. package/src/Toast/Toast.stories.jsx +0 -28
  266. package/src/Toast/index.tsx +0 -80
  267. package/src/Typography/index.tsx +0 -124
  268. package/src/UserCard/Cards/avatar-only.tsx +0 -27
  269. package/src/UserCard/Cards/basic-info.tsx +0 -43
  270. package/src/UserCard/Cards/index.tsx +0 -16
  271. package/src/UserCard/Cards/social-actions.tsx +0 -196
  272. package/src/UserCard/Container/card.tsx +0 -63
  273. package/src/UserCard/Container/dialog.tsx +0 -37
  274. package/src/UserCard/Content/basic.tsx +0 -330
  275. package/src/UserCard/Content/clock.tsx +0 -82
  276. package/src/UserCard/Content/minimal.tsx +0 -113
  277. package/src/UserCard/Content/shorten-label.tsx +0 -32
  278. package/src/UserCard/Content/tooltip-avatar.tsx +0 -80
  279. package/src/UserCard/UserCard.stories.jsx +0 -19
  280. package/src/UserCard/components.tsx +0 -81
  281. package/src/UserCard/index.tsx +0 -132
  282. package/src/UserCard/types.ts +0 -165
  283. package/src/UserCard/use-follow.tsx +0 -111
  284. package/src/UserCard/utils.ts +0 -155
  285. package/src/Util/WebWalletOpener.stories.jsx +0 -5
  286. package/src/Util/client.ts +0 -4
  287. package/src/Util/constant.ts +0 -70
  288. package/src/Util/deprecate.tsx +0 -29
  289. package/src/Util/federated.ts +0 -125
  290. package/src/Util/iframe.ts +0 -19
  291. package/src/Util/index.ts +0 -760
  292. package/src/Util/logger.ts +0 -44
  293. package/src/Util/passport.ts +0 -127
  294. package/src/Util/security.ts +0 -72
  295. package/src/Util/style.ts +0 -17
  296. package/src/Util/wallet.ts +0 -35
  297. package/src/VerificationCode/index.tsx +0 -83
  298. package/src/Video/Video.stories.jsx +0 -6
  299. package/src/Video/index.tsx +0 -70
  300. package/src/Wallet/Action.stories.jsx +0 -8
  301. package/src/Wallet/Action.tsx +0 -118
  302. package/src/Wallet/Download.stories.jsx +0 -9
  303. package/src/Wallet/Download.tsx +0 -157
  304. package/src/Wallet/Open.tsx +0 -47
  305. package/src/Wallet/OpenInWallet.stories.jsx +0 -5
  306. package/src/Wallet/images/abtwallet.png +0 -0
  307. package/src/Wallet/images/android_download.svg +0 -22
  308. package/src/Wallet/images/app-store.svg +0 -30
  309. package/src/Wallet/images/google-play.svg +0 -69
  310. package/src/WalletOSIcon/index.tsx +0 -47
  311. package/src/WebWalletSWKeeper/index.tsx +0 -117
  312. package/src/WechatPrompt/images/android.png +0 -0
  313. package/src/WechatPrompt/images/ios.png +0 -0
  314. package/src/WechatPrompt/index.tsx +0 -75
  315. package/src/global.d.ts +0 -28
  316. package/src/hooks/use-blocklet-logo.tsx +0 -32
  317. package/src/hooks/use-clock.tsx +0 -62
  318. package/src/hooks/use-location-state.tsx +0 -117
  319. package/src/hooks/use-mobile.tsx +0 -6
  320. package/src/index.ts +0 -79
  321. package/src/type.d.ts +0 -44
  322. package/src/withTheme/index.tsx +0 -72
  323. package/src/withTracker/README.md +0 -37
  324. package/src/withTracker/action/bind-wallet.tsx +0 -17
  325. package/src/withTracker/action/login.tsx +0 -18
  326. package/src/withTracker/action/pay.tsx +0 -14
  327. package/src/withTracker/action/switch-passport.tsx +0 -20
  328. package/src/withTracker/constant/index.tsx +0 -3
  329. package/src/withTracker/env.tsx +0 -1
  330. package/src/withTracker/error_boundary.jsx +0 -34
  331. package/src/withTracker/index.tsx +0 -50
  332. package/src/withTracker/libs/utm.ts +0 -46
  333. package/vite.config.mjs +0 -37
@@ -1,338 +0,0 @@
1
- import { ElementType, useEffect, useRef } from 'react';
2
- import { useCreation, useMemoizedFn, useReactive } from 'ahooks';
3
- import bridge from '@arcblock/bridge';
4
- import {
5
- Box,
6
- type BoxProps,
7
- ClickAwayListener,
8
- Divider,
9
- Fade,
10
- IconButton,
11
- MenuItem,
12
- MenuList,
13
- Paper,
14
- Popper,
15
- } from '@mui/material';
16
- import { Icon, type IconifyIcon } from '@iconify/react';
17
- import PersonOutlineRoundedIcon from '@iconify-icons/material-symbols/person-outline-rounded';
18
- import FilterVintageOutlineRoundedIcon from '@iconify-icons/material-symbols/filter-vintage-outline-rounded';
19
- import AccountCircleOffOutlineRoundedIcon from '@iconify-icons/material-symbols/account-circle-off-outline-rounded';
20
- import InviteIcon from '@iconify-icons/material-symbols/featured-seasonal-and-gifts-rounded';
21
- import Copy from 'copy-to-clipboard';
22
- import noop from 'lodash/noop';
23
-
24
- import Toast from '../../Toast';
25
- import DidAvatar from '../../Avatar';
26
- import { getUserAvatar } from '../../Util';
27
- import UserInfo from './user-info';
28
- import { DASHBOARD_URL, PROFILE_URL } from '../../Util/constant';
29
- import SessionPermission from '../../SessionPermission';
30
- import { translations } from '../libs/translation';
31
- import { translate } from '../../Locale/util';
32
- import type { Locale, Session } from '../../type';
33
- import DidSpace from './did-space';
34
- import { mergeSx } from '../../Util/style';
35
- import { createDebug } from '../../Util/logger';
36
- import { GA_LAST_ROLE } from '../../withTracker/constant';
37
- import type { SessionUserProps } from '..';
38
-
39
- const getInviteLink = (inviter: string) => {
40
- const url = new URL(window.location.href);
41
- url.searchParams.set('inviter', inviter);
42
- return url.toString();
43
- };
44
-
45
- const debug = createDebug('did-connect');
46
-
47
- export interface LoggedInProps extends Omit<BoxProps, 'onClick' | 'onMouseEnter' | 'onMouseLeave'> {
48
- session: Session;
49
- onBindWallet?: () => void;
50
- isBlocklet?: true | false;
51
- locale?: Locale;
52
- size?: number;
53
- popperType?: 'hover' | 'click';
54
- profileUrl?: string;
55
- mode?: 'minimal' | 'normal';
56
- renderUserButton: SessionUserProps['renderUserButton'];
57
- }
58
-
59
- export default function LoggedIn({
60
- session,
61
- onBindWallet = noop,
62
- isBlocklet = true,
63
- locale = 'en',
64
- size = 24,
65
- popperType = 'click',
66
- profileUrl = PROFILE_URL,
67
- mode = 'normal',
68
- sx,
69
- renderUserButton,
70
- ...rest
71
- }: LoggedInProps) {
72
- const t = useMemoizedFn((key, data = {}) => {
73
- return translate(translations, key, locale, 'en', data);
74
- });
75
- const isInviteEnabled = useCreation(() => {
76
- return !!globalThis?.blocklet?.settings?.invite?.enabled;
77
- }, []);
78
- const popperAnchorRef = useRef(null);
79
- const currentState = useReactive({
80
- open: false,
81
- });
82
- const onTogglePopper = useMemoizedFn((value = !currentState.open) => {
83
- currentState.open = value;
84
- });
85
- const handleEventProps =
86
- popperType === 'hover'
87
- ? { onMouseEnter: () => onTogglePopper(true), onMouseLeave: () => onTogglePopper(false) }
88
- : { onClick: () => onTogglePopper() };
89
-
90
- // base64 img maybe have some blank char, need encodeURIComponent to transform it
91
- const avatar = getUserAvatar(session.user?.avatar?.replace(/\s/g, encodeURIComponent(' ')));
92
-
93
- // FIXME: @zhanghan this should be refactored into SessionContext
94
- const oauth = session.useOAuth();
95
- const passkey = typeof session.usePasskey === 'function' ? session.usePasskey() : null;
96
- const handleSwitchPassport = useMemoizedFn(({ inArcSphere = false } = {}) => {
97
- localStorage.setItem(GA_LAST_ROLE, session?.user?.role);
98
- const extraParams: Record<string, any> = {};
99
- if (inArcSphere) {
100
- if (session?.user?.sourceAppPid) {
101
- extraParams.sourceAppPid = session.user.sourceAppPid;
102
- }
103
- }
104
- onTogglePopper(false);
105
- if (session?.user?.sourceProvider === 'passkey') {
106
- passkey.switchPassport(session.user);
107
- } else if (['google', 'apple', 'email', 'github'].includes(session?.user?.sourceProvider)) {
108
- oauth.switchOAuthPassport(session.user);
109
- } else {
110
- session.switchPassport(noop, extraParams);
111
- }
112
- });
113
-
114
- const handleSwitchAccount = useMemoizedFn(({ userSession, inArcSphere = false } = {}) => {
115
- return new Promise<void>((resolve) => {
116
- const extraParams: Record<string, any> = {};
117
- if (inArcSphere) {
118
- if (session.user.sourceAppPid) {
119
- extraParams.sourceAppPid = session.user.sourceAppPid;
120
- }
121
- }
122
- const options: Record<string, any> = {};
123
- if (!userSession) {
124
- onTogglePopper(false);
125
- options.showQuickConnect = false;
126
- } else {
127
- options.userSession = userSession;
128
- }
129
- session.switchDid(
130
- () => {
131
- onTogglePopper(false);
132
- resolve();
133
- },
134
- extraParams,
135
- options
136
- );
137
- });
138
- });
139
- const handleSwitchProfile = useMemoizedFn(({ inArcSphere = false } = {}) => {
140
- const extraParams: Record<string, any> = {};
141
- if (inArcSphere) {
142
- if (session.user.sourceAppPid) {
143
- extraParams.sourceAppPid = session.user.sourceAppPid;
144
- }
145
- }
146
- onTogglePopper(false);
147
- session.switchProfile(noop, extraParams);
148
- });
149
- const handleLogout = useMemoizedFn(() => {
150
- onTogglePopper(false);
151
- session.logout();
152
- });
153
-
154
- const handleBindWallet = useMemoizedFn(() => {
155
- onTogglePopper(false);
156
- session.bindWallet(onBindWallet);
157
- });
158
-
159
- const handleOpenInvite = useMemoizedFn(() => {
160
- onTogglePopper(false);
161
- const link = getInviteLink(session.user.did);
162
- Copy(link);
163
- Toast.success(t('inviteCopied'));
164
- });
165
-
166
- useEffect(() => {
167
- bridge.registerBlocklet('callSwitchPassport', () => {
168
- debug('bridge registerBlocklet: callSwitchPassport');
169
- handleSwitchPassport({ inArcSphere: true });
170
- });
171
- bridge.registerBlocklet('callSwitchDid', () => {
172
- debug('bridge registerBlocklet: callSwitchDid');
173
- handleSwitchAccount({ inArcSphere: true });
174
- });
175
- bridge.registerBlocklet('callSwitchProfile', () => {
176
- debug('bridge registerBlocklet: callSwitchProfile');
177
- handleSwitchProfile({ inArcSphere: true });
178
- });
179
- // eslint-disable-next-line react-hooks/exhaustive-deps
180
- }, []);
181
-
182
- if (renderUserButton) {
183
- return renderUserButton({
184
- isBlocklet,
185
- session,
186
- locale,
187
- size,
188
- popperType,
189
- profileUrl,
190
- dashboardUrl: DASHBOARD_URL,
191
- mode,
192
- avatar,
193
- isInviteEnabled,
194
- handleSwitchPassport,
195
- handleSwitchAccount,
196
- handleSwitchProfile,
197
- handleBindWallet,
198
- handleOpenInvite,
199
- handleLogout,
200
- });
201
- }
202
-
203
- return (
204
- <Box
205
- sx={mergeSx(
206
- {
207
- display: 'inline-flex',
208
- alignItems: 'center',
209
- justifyContent: 'center',
210
- },
211
- // @ts-ignore
212
- sx
213
- )}
214
- {...rest}>
215
- <IconButton
216
- ref={popperAnchorRef}
217
- size="medium"
218
- data-cy="sessionManager-logout-popup"
219
- className="arc-session-user-logged-in"
220
- aria-label="User info button"
221
- {...handleEventProps}>
222
- <DidAvatar variant="circle" did={session.user.did} src={avatar} size={size} shape="circle" />
223
- </IconButton>
224
-
225
- <Popper
226
- open={currentState.open}
227
- anchorEl={popperAnchorRef.current}
228
- transition
229
- placement="bottom-end"
230
- sx={{
231
- zIndex: 1600,
232
- }}>
233
- {({ TransitionProps }) => (
234
- <ClickAwayListener
235
- onClickAway={(e) => {
236
- e.preventDefault();
237
- e.stopPropagation();
238
- onTogglePopper(false);
239
- }}>
240
- <Fade {...TransitionProps} timeout={350}>
241
- <Paper
242
- variant="outlined"
243
- sx={{
244
- borderRadius: 1.5,
245
- width: 350,
246
- maxWidth: '90vw',
247
- }}>
248
- <UserInfo
249
- locale={locale}
250
- isBlocklet={isBlocklet}
251
- session={session}
252
- onSwitchPassport={handleSwitchPassport}
253
- onSwitchAccount={handleSwitchAccount}
254
- onSwitchProfile={handleSwitchProfile}
255
- onBindWallet={handleBindWallet}
256
- mode={mode}
257
- />
258
- <Divider sx={{ m: '0 !important' }} />
259
- <MenuList sx={{ p: 0 }}>
260
- {isBlocklet ? (
261
- <>
262
- <SessionPermission session={session}>
263
- <SessionMenuItem
264
- icon={FilterVintageOutlineRoundedIcon}
265
- title={t('dashboard')}
266
- component="a"
267
- href={DASHBOARD_URL}
268
- sx={{ display: 'block', textDecoration: 'none', color: 'inherit' }}
269
- />
270
- </SessionPermission>
271
- <SessionMenuItem
272
- icon={PersonOutlineRoundedIcon}
273
- title={t('profile')}
274
- component="a"
275
- href={profileUrl}
276
- sx={{ display: 'block', textDecoration: 'none', color: 'inherit' }}
277
- />
278
- {isInviteEnabled && (
279
- <SessionMenuItem
280
- icon={InviteIcon}
281
- title={t('invite')}
282
- component="div"
283
- onClick={handleOpenInvite}
284
- sx={{ display: 'block', color: 'inherit' }}
285
- />
286
- )}
287
- <Divider sx={{ m: '0 !important' }} />
288
- {mode === 'normal' ? <DidSpace session={session} locale={locale} /> : null}
289
- </>
290
- ) : null}
291
- <SessionMenuItem
292
- icon={AccountCircleOffOutlineRoundedIcon}
293
- title={t('logout')}
294
- component="div"
295
- sx={{ color: 'error.main' }}
296
- onClick={handleLogout}
297
- data-cy="sessionManager-logout-trigger"
298
- />
299
- </MenuList>
300
- </Paper>
301
- </Fade>
302
- </ClickAwayListener>
303
- )}
304
- </Popper>
305
- </Box>
306
- );
307
- }
308
-
309
- interface SessionMenuItemProps {
310
- icon: IconifyIcon | string;
311
- title: string;
312
- }
313
-
314
- // prop component is required
315
- function SessionMenuItem<C extends ElementType>({
316
- icon,
317
- title,
318
- ...rest
319
- }: SessionMenuItemProps & BoxProps<C, { component: C }>) {
320
- return (
321
- <Box {...rest} sx={{ p: 0.5, ...rest?.sx }}>
322
- <MenuItem
323
- sx={{
324
- display: 'flex',
325
- gap: 1,
326
- alignItems: 'center',
327
- borderRadius: 1,
328
- '&:hover': {
329
- backgroundColor: 'action.hover',
330
- },
331
- py: 1,
332
- }}>
333
- <Icon icon={icon} fontSize={24} />
334
- {title}
335
- </MenuItem>
336
- </Box>
337
- );
338
- }
@@ -1,132 +0,0 @@
1
- import { Box, Chip, Typography, useMediaQuery, useTheme } from '@mui/material';
2
- import type { Theme } from '@mui/material';
3
- import noop from 'lodash/noop';
4
-
5
- import RelativeTime from '../../RelativeTime';
6
- import WalletOSIcon from '../../WalletOSIcon';
7
- import { DID } from '../../DID';
8
- import Avatar from '../../Avatar';
9
- import { getSourceProvider } from '../libs/utils';
10
-
11
- export default function QuickLoginItem({
12
- userSession,
13
- locale = 'en',
14
- onClick = noop,
15
- }: {
16
- onClick?: () => void;
17
- locale?: string;
18
- userSession: {
19
- user: {
20
- avatar: string;
21
- did: string;
22
- fullName: string;
23
- role: string;
24
- roleTitle: string;
25
- email: string;
26
- };
27
- extra: {
28
- walletOS: string;
29
- provider: string;
30
- };
31
- updatedAt: string;
32
- };
33
- }) {
34
- const { palette } = useTheme();
35
- const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('md'));
36
- const isRawWalletAccount = getSourceProvider(userSession?.user) === 'wallet';
37
-
38
- return (
39
- <Box
40
- sx={{
41
- p: 2,
42
- transition: 'background-color 0.5s',
43
- bgcolor: 'background.paper',
44
- '&:hover, &:active': {
45
- backgroundColor: 'action.hover',
46
- },
47
- display: 'flex',
48
- justifyContent: 'space-between',
49
- alignItems: 'center',
50
- cursor: 'pointer',
51
- '&:hover': {
52
- backgroundColor: 'action.hover',
53
- },
54
- width: '100%',
55
- }}
56
- onClick={onClick}>
57
- <Box
58
- sx={{
59
- display: 'flex',
60
- alignItems: 'center',
61
- gap: 1.5,
62
- flex: 1,
63
- overflow: 'hidden',
64
- }}>
65
- <Avatar src={userSession.user.avatar} did={userSession.user.did} size={44} variant="circle" shape="circle" />
66
- <Box sx={{ flex: 1, overflow: 'hidden' }}>
67
- <Typography
68
- component={Box}
69
- sx={{
70
- fontSize: '16px',
71
- fontWeight: 500,
72
- display: 'flex',
73
- alignItems: 'center',
74
- gap: 1,
75
- color: 'text.primary',
76
- }}>
77
- {userSession.user.fullName}
78
- <Chip
79
- label={userSession.user?.roleTitle || userSession.user?.role}
80
- size="small"
81
- variant="outlined"
82
- sx={() => ({
83
- height: 'auto',
84
- fontWeight: 'bold',
85
- fontSize: '12px',
86
- borderColor: 'grey.300',
87
- color: 'text.secondary',
88
- })}
89
- />
90
- </Typography>
91
- {isRawWalletAccount ? (
92
- <Box
93
- sx={{
94
- display: 'flex',
95
- alignItems: 'center',
96
- gap: 0.5,
97
- }}>
98
- <WalletOSIcon
99
- provider={userSession?.extra?.provider}
100
- walletOS={userSession?.extra?.walletOS}
101
- color={palette.text.secondary}
102
- />
103
- <DID
104
- // @ts-ignore
105
- locale={locale}
106
- did={userSession.user.did}
107
- size={12}
108
- sx={{
109
- lineHeight: 1,
110
- fontSize: '12px',
111
- mt: 0.5,
112
- '& span.arc-avatar-did-motif': {
113
- display: 'none !important',
114
- },
115
- }}
116
- compact
117
- />
118
- </Box>
119
- ) : (
120
- <Typography sx={{ fontSize: '12px', color: 'text.secondary' }}>{userSession.user.email}</Typography>
121
- )}
122
- </Box>
123
- </Box>
124
- {userSession.updatedAt && !isMobile && (
125
- <Box component="span" sx={{ color: 'text.hint', fontSize: '12px', flexShrink: 0 }}>
126
- {/* @ts-ignore */}
127
- <RelativeTime value={userSession.updatedAt} locale={locale} />
128
- </Box>
129
- )}
130
- </Box>
131
- );
132
- }
@@ -1,93 +0,0 @@
1
- import { Box, type BoxProps, IconButton, Tooltip, Typography, useTheme } from '@mui/material';
2
- import { Icon } from '@iconify/react';
3
- import LensIcon from '@iconify-icons/material-symbols/lens';
4
-
5
- import WalletOSIcon from '../../WalletOSIcon';
6
- import Avatar from '../../Avatar';
7
- import { DID } from '../../DID';
8
- import { getSourceProvider } from '../libs/utils';
9
- import { Session } from '../../type';
10
-
11
- export interface SessionUserItemProps extends BoxProps {
12
- sessionItem: Session;
13
- statusContent?: React.ReactNode;
14
- active?: false | true;
15
- }
16
-
17
- function SessionUserItem({
18
- ref = undefined,
19
- sessionItem,
20
- statusContent = null,
21
- active = false,
22
- ...rest
23
- }: SessionUserItemProps & {
24
- ref?: React.Ref<unknown>;
25
- }) {
26
- const { palette } = useTheme();
27
- const isRawWalletAccount = getSourceProvider(sessionItem?.user) === 'wallet';
28
-
29
- return (
30
- <Box
31
- {...rest}
32
- ref={ref}
33
- sx={{
34
- display: 'flex',
35
- alignItems: 'center',
36
- justifyContent: 'space-between',
37
- py: 0.75,
38
- px: 1,
39
- width: '100%',
40
- ...rest?.sx,
41
- }}>
42
- <Box
43
- sx={{
44
- display: 'flex',
45
- alignItems: 'center',
46
- gap: 0.5,
47
- overflow: 'hidden',
48
- '& .did-address-avatar': {
49
- display: 'none !important',
50
- },
51
- }}>
52
- <Box sx={{ mr: 0.5, fontSize: 0 }}>
53
- <Avatar did={sessionItem.userDid} size={36} />
54
- </Box>
55
- <WalletOSIcon
56
- color={palette.text.secondary}
57
- loading={sessionItem.__isDefault}
58
- provider={sessionItem?.extra?.provider}
59
- walletOS={sessionItem?.extra?.walletOS}
60
- />
61
- {isRawWalletAccount ? (
62
- <DID did={sessionItem.userDid} copyable={false} size={14} responsive={false} compact sx={{ lineHeight: 1 }} />
63
- ) : (
64
- sessionItem.user.email && (
65
- <Tooltip
66
- title={sessionItem.user.email}
67
- sx={{
68
- zIndex: 1600,
69
- }}
70
- placement="top">
71
- <Typography
72
- sx={{
73
- fontSize: 14,
74
- overflow: 'hidden',
75
- textOverflow: 'ellipsis',
76
- }}>
77
- {sessionItem.user.email}
78
- </Typography>
79
- </Tooltip>
80
- )
81
- )}
82
- </Box>
83
- {statusContent ||
84
- (active && (
85
- <IconButton size="small" disableRipple>
86
- <Icon icon={LensIcon} fontSize={6} color={palette.success.main} />
87
- </IconButton>
88
- ))}
89
- </Box>
90
- );
91
- }
92
-
93
- export default SessionUserItem;