@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,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
- }