@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,300 +0,0 @@
1
- import { createElement, Children, cloneElement, useEffect, useRef, useState } from 'react';
2
- import { type SxProps } from '@mui/material';
3
- import isUndefined from 'lodash/isUndefined';
4
-
5
- import { mergeProps } from '../Util';
6
- import { styled } from '../Theme';
7
- import BaseScreenshot from './BaseScreenshot';
8
-
9
- import './devices.css';
10
-
11
- type DeviceStyles = {
12
- borderRadius: number;
13
- width: number;
14
- scale: number;
15
- zIndex?: number;
16
- };
17
-
18
- const types = {
19
- 'iphone-x': {
20
- borderRadius: 32,
21
- width: 342,
22
- scale: 0.78,
23
- },
24
- 'iphone-8': {
25
- borderRadius: 0,
26
- width: 336,
27
- scale: 0.78,
28
- },
29
- 'ipad-pro': {
30
- borderRadius: 0,
31
- width: 560,
32
- scale: 0.62,
33
- },
34
- 'imac-pro': {
35
- borderRadius: 0,
36
- width: 624,
37
- scale: 0.56,
38
- },
39
- macbook: {
40
- borderRadius: 0,
41
- width: 740,
42
- scale: 0.47,
43
- },
44
- 'macbook-pro': {
45
- borderRadius: 0,
46
- width: 740,
47
- scale: 0.47,
48
- },
49
- 'surface-pro': {
50
- borderRadius: 0,
51
- width: 561,
52
- scale: 0.62,
53
- },
54
- 'surface-book': {
55
- borderRadius: 0,
56
- width: 728,
57
- scale: 0.47,
58
- },
59
- 'surface-studio': {
60
- borderRadius: 0,
61
- width: 640,
62
- scale: 0.55,
63
- },
64
- 'galaxy-s8': {
65
- borderRadius: 0,
66
- width: 321,
67
- scale: 0.8,
68
- },
69
- 'google-pixel': {
70
- borderRadius: 0,
71
- width: 360,
72
- scale: 0.72,
73
- },
74
- 'google-pixel-2-xl': {
75
- borderRadius: 0,
76
- width: 360,
77
- scale: 0.72,
78
- },
79
- 'apple-watch': {
80
- borderRadius: 0,
81
- width: 200,
82
- scale: 1,
83
- },
84
- };
85
-
86
- const childProps = {
87
- img: ['alt', 'title', 'src', 'srcSet', 'sizes', 'loading', 'key', 'children'],
88
- video: ['alt', 'title', 'muted', 'autoplay', 'loop', 'key', 'children'],
89
- };
90
-
91
- const createChild = (child: React.ReactElement<any>) => [
92
- createElement(
93
- child.type,
94
- childProps[child.type as keyof typeof childProps].reduce((acc: Record<string, any>, x: string) => {
95
- acc[x] = child.props[x];
96
- return acc;
97
- }, {})
98
- ),
99
- ];
100
-
101
- const findChildren = (
102
- children: React.ReactElement<any>[],
103
- returnArgWhenNotFound = true
104
- ): React.ReactElement<any>[] | null => {
105
- for (let i = 0; i < children.length; i++) {
106
- const child = children[i];
107
-
108
- if (['img', 'video'].includes(child.type as string)) {
109
- return createChild(child);
110
- }
111
-
112
- if (child.props && child.props.children) {
113
- const subChildren = Children.toArray(child.props.children) as React.ReactElement<any>[];
114
- const result = findChildren(subChildren, false);
115
- if (result) {
116
- return result;
117
- }
118
- }
119
- }
120
-
121
- if (returnArgWhenNotFound) {
122
- return children;
123
- }
124
-
125
- return null;
126
- };
127
-
128
- export interface OldScreenshotProps extends React.ComponentProps<'div'> {
129
- type: keyof typeof types;
130
- className?: string;
131
- style?: React.CSSProperties;
132
- width?: number;
133
- height?: number;
134
- sx?: SxProps;
135
- }
136
-
137
- // This component is built upon the awesome device.css lib
138
- // By default it will find and only render img/video tags in the children
139
- // If neither of them are found, the whole child tree is rendered
140
- function OldScreenshot(rawProps: OldScreenshotProps) {
141
- const props = Object.assign({}, rawProps);
142
- // eslint-disable-next-line react/prop-types
143
- if (isUndefined(props.type)) {
144
- props.type = 'iphone-x';
145
- }
146
- // eslint-disable-next-line react/prop-types
147
- if (isUndefined(props.className)) {
148
- props.className = '';
149
- }
150
- // eslint-disable-next-line react/prop-types
151
- if (isUndefined(props.style)) {
152
- props.style = {};
153
- }
154
- // eslint-disable-next-line react/prop-types
155
- if (isUndefined(props.width)) {
156
- props.width = 0;
157
- }
158
- // eslint-disable-next-line react/prop-types
159
- if (isUndefined(props.height)) {
160
- props.height = 0;
161
- }
162
- const newProps = mergeProps(props, OldScreenshot, ['style', 'width', 'height']) as OldScreenshotProps;
163
- const { type, children, style, className, width, height, ...rest } = newProps;
164
- const { zIndex = 0, borderRadius = 0 } = (types[type!] || {}) as DeviceStyles;
165
-
166
- return (
167
- <Div
168
- {...rest}
169
- type={type!}
170
- className={`device device-${type} ${className}`.trim()}
171
- style={style}
172
- contentRadius={borderRadius}
173
- contentZIndex={zIndex}>
174
- <div className="device-frame">
175
- <div className="device-content">
176
- {/* eslint-disable-next-line react/no-array-index-key */}
177
- {findChildren(Children.toArray(children) as React.ReactElement<any>[])?.map((item: any, index: number) => {
178
- // eslint-disable-next-line react/no-array-index-key
179
- return cloneElement(item, { key: index });
180
- })}
181
- </div>
182
- </div>
183
- <div className="device-stripe" />
184
- <div className="device-header" />
185
- <div className="device-sensors" />
186
- <div className="device-btns" />
187
- <div className="device-power" />
188
- </Div>
189
- );
190
- }
191
-
192
- type DivProps = {
193
- type: keyof typeof types;
194
- contentRadius: number;
195
- contentZIndex: number;
196
- };
197
-
198
- const Div = styled('div')<DivProps>`
199
- @media (max-width: ${(props) => types[props.type].width}px) {
200
- transform-origin: 0 0;
201
- transform: scale(${(props) => types[props.type].scale});
202
- }
203
- .device-content {
204
- overflow: hidden;
205
- }
206
- .device-content video,
207
- .device-content img {
208
- border-radius: ${(props) => props.contentRadius}px;
209
- background-color: #fff;
210
- background-position: center center;
211
- background-size: cover;
212
- object-fit: cover;
213
- width: 100.1%;
214
- height: 100.1%;
215
- }
216
- `;
217
-
218
- export interface ScreenFixerProps extends OldScreenshotProps {}
219
-
220
- /**
221
- * 用于修正旧版 Screenshot 无法匹配尺寸的问题
222
- * @param {*} props params to OldScreenshot
223
- * @returns <OldScreenshot />
224
- */
225
- function ScreenFixer({ ...props }: ScreenFixerProps) {
226
- const screenEl = useRef<HTMLDivElement>(null);
227
- const [height, setHeight] = useState<number>();
228
- const [scale, setScale] = useState<number | null>(null);
229
-
230
- useEffect(() => {
231
- let resizeObs: ResizeObserver | null = null;
232
-
233
- const fixSize = () => {
234
- const { clientWidth } = screenEl.current!;
235
-
236
- // 获取内部元素的宽高
237
- const { clientWidth: targetWidth, clientHeight: targetHeight } = screenEl.current!.children[0];
238
-
239
- const realScale = clientWidth / targetWidth;
240
- if (realScale < 1) {
241
- setScale(realScale);
242
- setHeight(realScale * targetHeight);
243
- } else {
244
- setScale(null);
245
- setHeight(undefined);
246
- }
247
- };
248
-
249
- if (screenEl.current) {
250
- resizeObs = new ResizeObserver(fixSize);
251
- resizeObs.observe(screenEl.current);
252
- }
253
-
254
- return () => {
255
- if (resizeObs) {
256
- resizeObs.disconnect();
257
- }
258
- };
259
- // eslint-disable-next-line react-hooks/exhaustive-deps
260
- }, [screenEl.current]);
261
-
262
- return (
263
- <ReScreen ref={screenEl} style={{ height }}>
264
- <OldScreenshot {...props} style={{ transform: scale ? `scale(${scale})` : undefined }} />
265
- </ReScreen>
266
- );
267
- }
268
-
269
- const ReScreen = styled('div')`
270
- div[type] {
271
- transform: scale(1);
272
- transform-origin: 0 0;
273
- }
274
- `;
275
-
276
- export interface ScreenShotProps extends ScreenFixerProps {
277
- type: keyof typeof types;
278
- src?: string;
279
- }
280
-
281
- function Screenshot({ type, src = '', children, sx = {}, ...rest }: ScreenShotProps) {
282
- const _type = type.toLowerCase();
283
-
284
- // 新版采用容器采用BaseScreenshot,svg集成,更容易拓展,响应式更好
285
- if (['phone', 'macbook'].includes(_type)) {
286
- return (
287
- <BaseScreenshot type={_type} sx={sx} {...rest}>
288
- {children || (src ? <img src={src} alt="screenshot" /> : null)}
289
- </BaseScreenshot>
290
- );
291
- }
292
-
293
- // 旧版采用纯css制作,定制性欠缺,暂时保留使用
294
- return (
295
- <ScreenFixer type={type} sx={{ ...sx, margin: 'auto' }} {...rest}>
296
- {children || (src ? <img src={src} alt="screenshot" /> : null)}
297
- </ScreenFixer>
298
- );
299
- }
300
- export default Screenshot;
@@ -1,178 +0,0 @@
1
- import { useRef } from 'react';
2
- import {
3
- Box,
4
- type BoxProps,
5
- ClickAwayListener,
6
- Fade,
7
- IconButton,
8
- List,
9
- ListItem,
10
- ListItemButton,
11
- Paper,
12
- Popper,
13
- Typography,
14
- useTheme,
15
- } from '@mui/material';
16
- import { Icon } from '@iconify/react';
17
- import DashboardOutlineRoundedIcon from 'iconify-icons-material-symbols-400/dashboard-outline-rounded';
18
- import WidgetsOutlineRoundedIcon from '@iconify-icons/material-symbols/widgets-outline-rounded';
19
- import { useMemoizedFn, useReactive } from 'ahooks';
20
-
21
- import Button from '../Button';
22
- import { BLOCKLET_SERVICE_PATH_PREFIX, NAVIGATION_URL } from '../Util/constant';
23
- import SessionPermission from '../SessionPermission';
24
- import { getTranslation } from '../Util';
25
- import type { Locale } from '../type';
26
-
27
- export interface SessionBlockletProps extends Omit<BoxProps, 'onClick' | 'onMouseEnter' | 'onMouseLeave'> {
28
- session: Record<string, any>;
29
- locale?: Locale;
30
- size?: number;
31
- popperType?: 'hover' | 'click';
32
- }
33
-
34
- export default function SessionBlocklet({
35
- session,
36
- locale = 'zh',
37
- size = 24,
38
- popperType = 'click',
39
- sx,
40
- ...rest
41
- }: SessionBlockletProps) {
42
- const blocklet = window?.blocklet || {};
43
- const sessionMenuList = (blocklet.navigation || [])
44
- // HACK 过滤掉默认插入的 /sessionManager 菜单
45
- .filter((item) => item.section === 'sessionManager' && !['/sessionManager'].includes(item.id))
46
- .filter((item) => {
47
- if ((item?.role || []).includes(session?.user?.role || 'guest')) {
48
- return true;
49
- }
50
- return false;
51
- })
52
- .map((item) => {
53
- const component = (blocklet?.componentMountPoints || []).find((x) => item.component === x.name);
54
- return {
55
- ...item,
56
- component,
57
- };
58
- });
59
- const theme = useTheme();
60
- const popperAnchorRef = useRef(null);
61
- const currentState = useReactive({
62
- open: false,
63
- });
64
- const onTogglePopper = useMemoizedFn((value = !currentState.open) => {
65
- currentState.open = value;
66
- });
67
- const handleEventProps =
68
- popperType === 'hover'
69
- ? { onMouseEnter: () => onTogglePopper(true), onMouseLeave: () => onTogglePopper(false) }
70
- : { onClick: () => onTogglePopper() };
71
-
72
- if (sessionMenuList.length === 0 || !session?.user) {
73
- return null;
74
- }
75
-
76
- return (
77
- <Box
78
- sx={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', ...sx }}
79
- {...rest}
80
- {...handleEventProps}>
81
- <IconButton size="medium" ref={popperAnchorRef}>
82
- <Icon icon={DashboardOutlineRoundedIcon} fontSize={size} style={{ transform: 'scale(1.08)' }} />
83
- </IconButton>
84
- <Popper
85
- open={currentState.open}
86
- anchorEl={popperAnchorRef.current}
87
- transition
88
- placement="bottom-end"
89
- sx={{ zIndex: 1600 }}>
90
- {({ TransitionProps }) => (
91
- <ClickAwayListener
92
- onClickAway={(e) => {
93
- e.preventDefault();
94
- e.stopPropagation();
95
- onTogglePopper(false);
96
- }}>
97
- <Fade {...TransitionProps} timeout={350}>
98
- <Paper
99
- variant="outlined"
100
- sx={{
101
- borderRadius: 1.5,
102
- width: 350,
103
- maxWidth: '90vw',
104
- p: 2,
105
- }}>
106
- <List
107
- sx={{
108
- display: 'grid',
109
- gridTemplateColumns: 'repeat(auto-fill, 100px)',
110
- gridAutoRows: 'minmax(100px, max-content)',
111
- justifyContent: 'space-between',
112
- maxHeight: 350,
113
- overflowY: 'auto',
114
- p: 0,
115
- }}>
116
- {sessionMenuList.map((item) => (
117
- <ListItem key={item.id} disablePadding>
118
- <ListItemButton
119
- href={getTranslation(item.link, locale)}
120
- sx={{
121
- p: 1,
122
- display: 'flex',
123
- flexDirection: 'column',
124
- alignItems: 'center',
125
- gap: 1,
126
- width: '100%',
127
- height: '100%',
128
- borderRadius: 1,
129
- '&:hover': {
130
- backgroundColor: 'action.hover',
131
- },
132
- }}>
133
- {item?.component?.did ? (
134
- <Box
135
- component="img"
136
- src={`${BLOCKLET_SERVICE_PATH_PREFIX}/blocklet/logo-bundle/${item.component.did}`}
137
- sx={{
138
- borderRadius: 1,
139
- width: 50,
140
- height: 50,
141
- objectFit: 'contain',
142
- }}
143
- alt="SessionBlocklet component icon"
144
- />
145
- ) : (
146
- <Icon
147
- fontSize={50}
148
- icon={item.icon || WidgetsOutlineRoundedIcon}
149
- color={theme.palette.text.secondary}
150
- />
151
- )}
152
-
153
- <Typography
154
- sx={{
155
- fontSize: '12px',
156
- color: 'text.primary',
157
- textAlign: 'center',
158
- lineHeight: 'normal',
159
- }}>
160
- {getTranslation(item.title, locale)}
161
- </Typography>
162
- </ListItemButton>
163
- </ListItem>
164
- ))}
165
- </List>
166
- <SessionPermission session={session}>
167
- <Button variant="outlined" fullWidth href={NAVIGATION_URL} sx={{ mt: 1 }}>
168
- {locale === 'zh' ? '管理' : 'Manage'}
169
- </Button>
170
- </SessionPermission>
171
- </Paper>
172
- </Fade>
173
- </ClickAwayListener>
174
- )}
175
- </Popper>
176
- </Box>
177
- );
178
- }
@@ -1,9 +0,0 @@
1
- export { default as HasLogin } from './demo/has-login';
2
- export { default as NotLogin } from './demo/not-login';
3
- export { default as Callback } from './demo/callback';
4
- export { default as DarkMode } from './demo/dark-mode';
5
- export { default as Size } from './demo/size';
6
-
7
- export default {
8
- title: 'DID/SessionManager',
9
- };
@@ -1,3 +0,0 @@
1
- import SessionUser from '../SessionUser';
2
-
3
- export default SessionUser;
@@ -1,26 +0,0 @@
1
- import type { JSX } from 'react';
2
- import { useCreation } from 'ahooks';
3
-
4
- const roleList = ['owner', 'admin', 'member', 'guest'] as const;
5
-
6
- export interface SessionPermissionProps {
7
- session: Record<string, any>;
8
- roles?: (typeof roleList)[number][];
9
- children: ((props: { hasPermission: boolean }) => JSX.Element | null) | JSX.Element;
10
- }
11
-
12
- export default function SessionPermission({ session, roles = ['owner', 'admin'], children }: SessionPermissionProps) {
13
- const hasPermission = useCreation(() => {
14
- return roles.includes(session?.user?.role || 'guest');
15
- }, [session?.user?.role, roles]);
16
-
17
- if (typeof children === 'function') {
18
- return children({ hasPermission });
19
- }
20
-
21
- if (hasPermission) {
22
- return children;
23
- }
24
-
25
- return null;
26
- }
@@ -1,68 +0,0 @@
1
- import { useState } from 'react';
2
- import { useMemoizedFn } from 'ahooks';
3
- import { MenuItem, BoxProps, Divider, useTheme } from '@mui/material';
4
- import { Icon } from '@iconify/react';
5
- import LensIcon from '@iconify-icons/material-symbols/lens';
6
- import { Locale, Session } from '../../type';
7
- import { translate } from '../../Locale/util';
8
- import { translations } from '../libs/translation';
9
- import { DID_SPACE_URL } from '../../Util/constant';
10
- import { TBox } from '../../MuiWrap';
11
- import Typography from '../../Typography';
12
- import DIDLogo from '../../DIDLogo';
13
-
14
- export interface DidSpaceProps extends BoxProps {
15
- session: Session;
16
- locale?: Locale;
17
- }
18
-
19
- export default function DidSpace({ session, locale = 'en', ...rest }: DidSpaceProps) {
20
- const t = useMemoizedFn((key, data = {}) => {
21
- return translate(translations, key, locale, 'en', data);
22
- });
23
- const theme = useTheme();
24
-
25
- const didSpace = session.user?.didSpace ?? {};
26
- const [offset, setOffset] = useState(0);
27
- const onShrink = useMemoizedFn(({ fontSize, initialSize }: { fontSize: number; initialSize: number }) => {
28
- setOffset(Math.ceil((initialSize - fontSize) / 4));
29
- });
30
-
31
- return (
32
- <>
33
- <TBox component="a" href={DID_SPACE_URL} sx={{ p: 0.5, display: 'block', textDecoration: 'none' }} {...rest}>
34
- <MenuItem
35
- sx={{
36
- display: 'flex',
37
- alignItems: 'center',
38
- gap: 0.5,
39
- py: 1,
40
- }}>
41
- <div style={{ display: 'flex', alignItems: 'center' }}>
42
- <DIDLogo name="spaces" size={20} dark={theme.palette.mode === 'dark'} fontSize={40} />
43
- </div>
44
- <span style={{ color: theme.palette.text.secondary }}>:</span>
45
- <div
46
- style={{
47
- flexGrow: 1,
48
- minWidth: 0,
49
- color: didSpace.did ? theme.palette.text.primary : theme.palette.text.secondary,
50
- overflow: 'hidden',
51
- whiteSpace: 'nowrap',
52
- }}>
53
- <Typography fontSize="auto" minFontSize={1} sx={{ marginTop: `${offset}px` }} onShrink={onShrink}>
54
- {didSpace.did ? didSpace.name : t('disconnected')}
55
- </Typography>
56
- </div>
57
- <Icon
58
- style={{ marginTop: `${offset}px`, flexShrink: 0 }}
59
- icon={LensIcon}
60
- fontSize={8}
61
- color={didSpace.did ? theme.palette.success.main : theme.palette.grey[200]}
62
- />
63
- </MenuItem>
64
- </TBox>
65
- <Divider />
66
- </>
67
- );
68
- }