@arcblock/ux 3.4.14 → 3.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 (335) hide show
  1. package/lib/Util/constant.d.ts +6 -0
  2. package/lib/Util/constant.js +25 -16
  3. package/lib/package.json.js +1 -1
  4. package/package.json +12 -9
  5. package/src/ActionButton/ActionButton.stories.jsx +0 -61
  6. package/src/ActionButton/index.jsx +0 -106
  7. package/src/ActivityIndicator/ActivityIndicator.stories.jsx +0 -9
  8. package/src/ActivityIndicator/index.jsx +0 -140
  9. package/src/Address/Address.stories.jsx +0 -38
  10. package/src/Address/compact-text.jsx +0 -76
  11. package/src/Address/did-address.tsx +0 -223
  12. package/src/Address/index.tsx +0 -21
  13. package/src/Address/responsive-did-address.tsx +0 -154
  14. package/src/Alert/Alert.stories.jsx +0 -100
  15. package/src/Alert/index.jsx +0 -130
  16. package/src/AnimationWaiter/AnimationWaiter.stories.jsx +0 -35
  17. package/src/AnimationWaiter/dark-animation.json +0 -1
  18. package/src/AnimationWaiter/default-animation.json +0 -1
  19. package/src/AnimationWaiter/index.jsx +0 -296
  20. package/src/Async/index.tsx +0 -44
  21. package/src/Avatar/Avatar.stories.jsx +0 -11
  22. package/src/Avatar/did-motif.jsx +0 -38
  23. package/src/Avatar/etherscan-blockies.js +0 -81
  24. package/src/Avatar/index.jsx +0 -195
  25. package/src/Badge/Badge.stories.jsx +0 -41
  26. package/src/Badge/index.jsx +0 -101
  27. package/src/Blocklet/Blocklet.stories.jsx +0 -21
  28. package/src/Blocklet/blocklet.jsx +0 -276
  29. package/src/Blocklet/index.js +0 -5
  30. package/src/Blocklet/utils.jsx +0 -58
  31. package/src/BlockletContext/index.tsx +0 -72
  32. package/src/BlockletNFT/BlockletNFT.stories.jsx +0 -21
  33. package/src/BlockletNFT/index.jsx +0 -378
  34. package/src/BlockletV2/Blocklet.stories.jsx +0 -34
  35. package/src/BlockletV2/blocklet.tsx +0 -247
  36. package/src/BlockletV2/components/icon-text.tsx +0 -47
  37. package/src/BlockletV2/components/tooltip-icon.tsx +0 -52
  38. package/src/BlockletV2/index.ts +0 -6
  39. package/src/BlockletV2/utils.js +0 -75
  40. package/src/Button/Button.stories.jsx +0 -24
  41. package/src/Button/index.js +0 -9
  42. package/src/Button/wrap.jsx +0 -126
  43. package/src/ButtonGroup/index.js +0 -16
  44. package/src/CardSelector/index.tsx +0 -136
  45. package/src/Center/Center.stories.jsx +0 -20
  46. package/src/Center/index.tsx +0 -33
  47. package/src/ClickToCopy/ClickToCopy.stories.jsx +0 -24
  48. package/src/ClickToCopy/copy-button.tsx +0 -43
  49. package/src/ClickToCopy/hook.ts +0 -42
  50. package/src/ClickToCopy/index.tsx +0 -96
  51. package/src/CloseButton/index.tsx +0 -37
  52. package/src/CodeBlock/CodeBlock.stories.jsx +0 -22
  53. package/src/CodeBlock/LightBox.tsx +0 -87
  54. package/src/CodeBlock/index.tsx +0 -217
  55. package/src/Colors/Colors.stories.jsx +0 -211
  56. package/src/Colors/index.ts +0 -4
  57. package/src/Colors/themes/default.ts +0 -8
  58. package/src/Colors/themes/did-connect.ts +0 -64
  59. package/src/Colors/themes/temp.ts +0 -52
  60. package/src/Config/Config.stories.jsx +0 -16
  61. package/src/Config/config-provider.tsx +0 -62
  62. package/src/Config/index.ts +0 -2
  63. package/src/Config/theme-mode-toggle.tsx +0 -38
  64. package/src/ContactForm/ContactForm.stories.jsx +0 -32
  65. package/src/ContactForm/index.tsx +0 -264
  66. package/src/CookieConsent/CookieConsent.stories.jsx +0 -33
  67. package/src/CookieConsent/index.tsx +0 -104
  68. package/src/CountDown/CountDown.stories.jsx +0 -15
  69. package/src/CountDown/index.tsx +0 -170
  70. package/src/DID/DID.stories.jsx +0 -37
  71. package/src/DID/index.tsx +0 -393
  72. package/src/DIDConnect/app-icon.tsx +0 -37
  73. package/src/DIDConnect/app-info-item.tsx +0 -93
  74. package/src/DIDConnect/auth-apps/auth-apps-info.tsx +0 -77
  75. package/src/DIDConnect/auth-apps/index.tsx +0 -278
  76. package/src/DIDConnect/auth-apps/switch-role.tsx +0 -47
  77. package/src/DIDConnect/did-connect-container.tsx +0 -326
  78. package/src/DIDConnect/did-connect-footer.tsx +0 -76
  79. package/src/DIDConnect/did-connect-logo.tsx +0 -8
  80. package/src/DIDConnect/icons/did-wallet-logo.tsx +0 -18
  81. package/src/DIDConnect/icons/github-logo.tsx +0 -17
  82. package/src/DIDConnect/index.ts +0 -11
  83. package/src/DIDConnect/landing-page.tsx +0 -218
  84. package/src/DIDConnect/powered-by.tsx +0 -48
  85. package/src/DIDConnect/provider-icon.tsx +0 -62
  86. package/src/DIDConnect/request-storage-access-api-dialog.tsx +0 -304
  87. package/src/DIDConnect/with-container.tsx +0 -323
  88. package/src/DIDConnect/with-ux-theme.tsx +0 -22
  89. package/src/DIDLogo/Logo.stories.jsx +0 -11
  90. package/src/DIDLogo/index.tsx +0 -168
  91. package/src/Datatable/CustomToolbar.jsx +0 -415
  92. package/src/Datatable/Datatable.stories.jsx +0 -92
  93. package/src/Datatable/DatatableContext.jsx +0 -35
  94. package/src/Datatable/TableSearch.jsx +0 -166
  95. package/src/Datatable/index.jsx +0 -652
  96. package/src/Datatable/utils.js +0 -161
  97. package/src/Dialog/Dialog.stories.jsx +0 -21
  98. package/src/Dialog/confirm.jsx +0 -143
  99. package/src/Dialog/dialog.jsx +0 -199
  100. package/src/Dialog/index.js +0 -4
  101. package/src/Dialog/types.d.ts +0 -20
  102. package/src/Dialog/use-confirm.jsx +0 -188
  103. package/src/DriftBot/index.tsx +0 -81
  104. package/src/Earth/Earth.stories.jsx +0 -39
  105. package/src/Earth/countries.json +0 -8057
  106. package/src/Earth/index.tsx +0 -515
  107. package/src/Earth/util.ts +0 -72
  108. package/src/Empty/Empty.stories.jsx +0 -23
  109. package/src/Empty/index.jsx +0 -48
  110. package/src/ErrorBoundary/ErrorBoundary.stories.jsx +0 -13
  111. package/src/ErrorBoundary/fallback.tsx +0 -85
  112. package/src/ErrorBoundary/index.ts +0 -1
  113. package/src/Footer/Footer.stories.jsx +0 -13
  114. package/src/Footer/index.tsx +0 -130
  115. package/src/Header/Header.stories.jsx +0 -30
  116. package/src/Header/addon-button.tsx +0 -41
  117. package/src/Header/auto-hidden.tsx +0 -31
  118. package/src/Header/header-addons.tsx +0 -37
  119. package/src/Header/header.tsx +0 -214
  120. package/src/Header/index.ts +0 -3
  121. package/src/Header/responsive-header.tsx +0 -145
  122. package/src/Icon/Icon.stories.jsx +0 -45
  123. package/src/Icon/image.tsx +0 -53
  124. package/src/Icon/index.tsx +0 -63
  125. package/src/Img/Img.stories.jsx +0 -17
  126. package/src/Img/index.jsx +0 -258
  127. package/src/InfoRow/InfoRow.stories.jsx +0 -14
  128. package/src/InfoRow/index.tsx +0 -91
  129. package/src/Layout/Layout.stories.jsx +0 -24
  130. package/src/Layout/dashboard/external-link.tsx +0 -59
  131. package/src/Layout/dashboard/full-page.tsx +0 -58
  132. package/src/Layout/dashboard/index.tsx +0 -260
  133. package/src/Layout/dashboard/sidebar.tsx +0 -198
  134. package/src/Layout/dashboard-legacy/header.tsx +0 -156
  135. package/src/Layout/dashboard-legacy/index.tsx +0 -127
  136. package/src/Layout/dashboard-legacy/sidebar.tsx +0 -129
  137. package/src/Layout/index.tsx +0 -310
  138. package/src/LoadingMask/index.tsx +0 -108
  139. package/src/Locale/LocaleSelector.stories.jsx +0 -44
  140. package/src/Locale/browser-lang.ts +0 -65
  141. package/src/Locale/context.tsx +0 -162
  142. package/src/Locale/languages.ts +0 -58
  143. package/src/Locale/selector.tsx +0 -174
  144. package/src/Locale/util.ts +0 -38
  145. package/src/Logo/Logo.stories.jsx +0 -23
  146. package/src/Logo/images/logo-dark-text.svg +0 -3
  147. package/src/Logo/images/logo-dark-top.svg +0 -6
  148. package/src/Logo/images/logo-light-text.svg +0 -3
  149. package/src/Logo/images/logo-light-top.svg +0 -6
  150. package/src/Logo/index.tsx +0 -58
  151. package/src/Metric/Metric.stories.jsx +0 -29
  152. package/src/Metric/index.tsx +0 -130
  153. package/src/MuiWrap/index.tsx +0 -10
  154. package/src/NFTDisplay/NFTBroken.svg +0 -34
  155. package/src/NFTDisplay/NFTDisplay.stories.jsx +0 -30
  156. package/src/NFTDisplay/README.md +0 -59
  157. package/src/NFTDisplay/aspect-ratio-container.tsx +0 -36
  158. package/src/NFTDisplay/broken.tsx +0 -51
  159. package/src/NFTDisplay/displayApi.ts +0 -43
  160. package/src/NFTDisplay/index.tsx +0 -393
  161. package/src/NFTDisplay/loading.tsx +0 -16
  162. package/src/NFTDisplay/preview.tsx +0 -84
  163. package/src/NFTDisplay/render-svg.tsx +0 -21
  164. package/src/NFTDisplay/svg-embedder/img.tsx +0 -27
  165. package/src/NFTDisplay/svg-embedder/inline-svg.tsx +0 -36
  166. package/src/NavMenu/NavMenu.stories.jsx +0 -17
  167. package/src/NavMenu/images/OCAP.svg +0 -1
  168. package/src/NavMenu/images/abt-network.svg +0 -1
  169. package/src/NavMenu/images/ai-kit.svg +0 -1
  170. package/src/NavMenu/images/aigne-image-smith.svg +0 -1
  171. package/src/NavMenu/images/aigne.svg +0 -1
  172. package/src/NavMenu/images/aistro.png +0 -0
  173. package/src/NavMenu/images/arcsphere.svg +0 -1
  174. package/src/NavMenu/images/blocklet-framework.svg +0 -1
  175. package/src/NavMenu/images/blocklet-launcher.svg +0 -1
  176. package/src/NavMenu/images/blocklet-server.svg +0 -1
  177. package/src/NavMenu/images/blocklet-store.svg +0 -1
  178. package/src/NavMenu/images/creator-studio.svg +0 -1
  179. package/src/NavMenu/images/did-wallet.svg +0 -1
  180. package/src/NavMenu/images/did.svg +0 -1
  181. package/src/NavMenu/images/nft-studio.svg +0 -1
  182. package/src/NavMenu/images/payment-kit.png +0 -0
  183. package/src/NavMenu/images/vc.svg +0 -1
  184. package/src/NavMenu/images/web3-kit.svg +0 -1
  185. package/src/NavMenu/index.ts +0 -3
  186. package/src/NavMenu/nav-menu-context.tsx +0 -30
  187. package/src/NavMenu/nav-menu.tsx +0 -441
  188. package/src/NavMenu/products.tsx +0 -830
  189. package/src/NavMenu/style.ts +0 -258
  190. package/src/NavMenu/sub-container.tsx +0 -125
  191. package/src/NavMenu/sub-item-group.tsx +0 -42
  192. package/src/OrgTransfer/index.tsx +0 -53
  193. package/src/OrgTransfer/locales.ts +0 -25
  194. package/src/OrgTransfer/selector.tsx +0 -252
  195. package/src/OrgTransfer/type.ts +0 -31
  196. package/src/PageScroller/index.tsx +0 -316
  197. package/src/PageScroller/story/FifthComponent.jsx +0 -7
  198. package/src/PageScroller/story/FirstComponent.jsx +0 -7
  199. package/src/PageScroller/story/FourthComponent.jsx +0 -7
  200. package/src/PageScroller/story/FullPage.jsx +0 -55
  201. package/src/PageScroller/story/PageContain.jsx +0 -59
  202. package/src/PageScroller/story/PageScroller.stories.jsx +0 -18
  203. package/src/PageScroller/story/SecondComponent.jsx +0 -7
  204. package/src/PageScroller/story/ThirdComponent.jsx +0 -7
  205. package/src/PageScroller/story/index.css +0 -115
  206. package/src/PageScroller/usePrevValue.ts +0 -11
  207. package/src/Passport/index.ts +0 -3
  208. package/src/Passport/passport.tsx +0 -118
  209. package/src/PhoneInput/PhoneInput.stories.jsx +0 -12
  210. package/src/PhoneInput/country-select.tsx +0 -148
  211. package/src/PhoneInput/index.tsx +0 -269
  212. package/src/PoweredByArcBlock/index.tsx +0 -27
  213. package/src/PricingTable/PricingPlan.tsx +0 -120
  214. package/src/PricingTable/PricingTable.stories.jsx +0 -38
  215. package/src/PricingTable/index.tsx +0 -59
  216. package/src/QRCode/QRCode.stories.jsx +0 -13
  217. package/src/QRCode/index.tsx +0 -66
  218. package/src/RelativeTime/RelativeTime.stories.jsx +0 -20
  219. package/src/RelativeTime/index.tsx +0 -334
  220. package/src/Result/Result.stories.jsx +0 -61
  221. package/src/Result/common.tsx +0 -119
  222. package/src/Result/index.tsx +0 -30
  223. package/src/Result/result.tsx +0 -65
  224. package/src/Result/translations.ts +0 -57
  225. package/src/Screenshot/BaseScreenshot/index.tsx +0 -73
  226. package/src/Screenshot/BaseScreenshot/shells/Macbook.tsx +0 -38
  227. package/src/Screenshot/BaseScreenshot/shells/Phone.tsx +0 -35
  228. package/src/Screenshot/Screenshot.stories.jsx +0 -44
  229. package/src/Screenshot/devices.css +0 -1366
  230. package/src/Screenshot/index.tsx +0 -300
  231. package/src/SessionBlocklet/index.tsx +0 -178
  232. package/src/SessionManager/SessionManager.stories.jsx +0 -9
  233. package/src/SessionManager/index.tsx +0 -3
  234. package/src/SessionPermission/index.tsx +0 -26
  235. package/src/SessionUser/components/did-space.tsx +0 -68
  236. package/src/SessionUser/components/logged-in.tsx +0 -338
  237. package/src/SessionUser/components/quick-login-item.tsx +0 -132
  238. package/src/SessionUser/components/session-user-item.tsx +0 -93
  239. package/src/SessionUser/components/session-user-switch.tsx +0 -240
  240. package/src/SessionUser/components/un-login.tsx +0 -257
  241. package/src/SessionUser/components/user-info.tsx +0 -201
  242. package/src/SessionUser/index.tsx +0 -68
  243. package/src/SessionUser/libs/translation.ts +0 -30
  244. package/src/SessionUser/libs/utils.ts +0 -39
  245. package/src/SharedBridge/index.tsx +0 -126
  246. package/src/SocialShare/index.tsx +0 -194
  247. package/src/Sparkline/Sparkline.stories.jsx +0 -13
  248. package/src/Sparkline/index.tsx +0 -231
  249. package/src/Spinner/Spinner.stories.jsx +0 -98
  250. package/src/Spinner/index.tsx +0 -20
  251. package/src/SplitButton/SplitButton.stories.jsx +0 -32
  252. package/src/SplitButton/index.tsx +0 -116
  253. package/src/SplitButton/useClickAway.tsx +0 -24
  254. package/src/Success/index.tsx +0 -175
  255. package/src/Switch/Switch.stories.jsx +0 -16
  256. package/src/Switch/index.jsx +0 -79
  257. package/src/Tabs/Tabs.stories.jsx +0 -18
  258. package/src/Tabs/index.tsx +0 -255
  259. package/src/Tag/Tag.stories.jsx +0 -15
  260. package/src/Tag/index.jsx +0 -106
  261. package/src/TextCollapse/TextCollapse.stories.jsx +0 -73
  262. package/src/TextCollapse/index.tsx +0 -85
  263. package/src/Theme/Theme.stories.jsx +0 -11
  264. package/src/Theme/index.ts +0 -21
  265. package/src/Theme/theme-provider.tsx +0 -374
  266. package/src/Theme/theme.ts +0 -229
  267. package/src/Toast/Toast.stories.jsx +0 -28
  268. package/src/Toast/index.tsx +0 -80
  269. package/src/Typography/index.tsx +0 -124
  270. package/src/UserCard/Cards/avatar-only.tsx +0 -27
  271. package/src/UserCard/Cards/basic-info.tsx +0 -43
  272. package/src/UserCard/Cards/index.tsx +0 -16
  273. package/src/UserCard/Cards/social-actions.tsx +0 -196
  274. package/src/UserCard/Container/card.tsx +0 -63
  275. package/src/UserCard/Container/dialog.tsx +0 -37
  276. package/src/UserCard/Content/basic.tsx +0 -330
  277. package/src/UserCard/Content/clock.tsx +0 -82
  278. package/src/UserCard/Content/minimal.tsx +0 -113
  279. package/src/UserCard/Content/shorten-label.tsx +0 -32
  280. package/src/UserCard/Content/tooltip-avatar.tsx +0 -80
  281. package/src/UserCard/UserCard.stories.jsx +0 -19
  282. package/src/UserCard/components.tsx +0 -81
  283. package/src/UserCard/index.tsx +0 -132
  284. package/src/UserCard/types.ts +0 -165
  285. package/src/UserCard/use-follow.tsx +0 -111
  286. package/src/UserCard/utils.ts +0 -155
  287. package/src/Util/WebWalletOpener.stories.jsx +0 -5
  288. package/src/Util/client.ts +0 -4
  289. package/src/Util/constant.ts +0 -60
  290. package/src/Util/deprecate.tsx +0 -29
  291. package/src/Util/federated.ts +0 -125
  292. package/src/Util/iframe.ts +0 -19
  293. package/src/Util/index.ts +0 -760
  294. package/src/Util/logger.ts +0 -44
  295. package/src/Util/passport.ts +0 -127
  296. package/src/Util/security.ts +0 -72
  297. package/src/Util/style.ts +0 -17
  298. package/src/Util/wallet.ts +0 -35
  299. package/src/VerificationCode/index.tsx +0 -83
  300. package/src/Video/Video.stories.jsx +0 -6
  301. package/src/Video/index.tsx +0 -70
  302. package/src/Wallet/Action.stories.jsx +0 -8
  303. package/src/Wallet/Action.tsx +0 -118
  304. package/src/Wallet/Download.stories.jsx +0 -9
  305. package/src/Wallet/Download.tsx +0 -157
  306. package/src/Wallet/Open.tsx +0 -47
  307. package/src/Wallet/OpenInWallet.stories.jsx +0 -5
  308. package/src/Wallet/images/abtwallet.png +0 -0
  309. package/src/Wallet/images/android_download.svg +0 -22
  310. package/src/Wallet/images/app-store.svg +0 -30
  311. package/src/Wallet/images/google-play.svg +0 -69
  312. package/src/WalletOSIcon/index.tsx +0 -47
  313. package/src/WebWalletSWKeeper/index.tsx +0 -117
  314. package/src/WechatPrompt/images/android.png +0 -0
  315. package/src/WechatPrompt/images/ios.png +0 -0
  316. package/src/WechatPrompt/index.tsx +0 -75
  317. package/src/global.d.ts +0 -28
  318. package/src/hooks/use-blocklet-logo.tsx +0 -32
  319. package/src/hooks/use-clock.tsx +0 -62
  320. package/src/hooks/use-location-state.tsx +0 -117
  321. package/src/hooks/use-mobile.tsx +0 -6
  322. package/src/index.ts +0 -79
  323. package/src/type.d.ts +0 -44
  324. package/src/withTheme/index.tsx +0 -72
  325. package/src/withTracker/README.md +0 -37
  326. package/src/withTracker/action/bind-wallet.tsx +0 -17
  327. package/src/withTracker/action/login.tsx +0 -18
  328. package/src/withTracker/action/pay.tsx +0 -14
  329. package/src/withTracker/action/switch-passport.tsx +0 -20
  330. package/src/withTracker/constant/index.tsx +0 -3
  331. package/src/withTracker/env.tsx +0 -1
  332. package/src/withTracker/error_boundary.jsx +0 -34
  333. package/src/withTracker/index.tsx +0 -50
  334. package/src/withTracker/libs/utm.ts +0 -46
  335. 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;