@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,156 +0,0 @@
1
- import { Menu as MenuIcon } from '@mui/icons-material';
2
- import { AppBar, type AppBarProps, Toolbar, Box, Typography, Button } from '@mui/material';
3
- import { Link } from 'react-router-dom';
4
-
5
- import Logo from '../../Logo';
6
- import { styled } from '../../Theme';
7
-
8
- const StyledAppBar = styled(AppBar)`
9
- && {
10
- z-index: ${(props) => props.theme.zIndex.drawer};
11
- background: ${(props) => props.theme.palette.background.default};
12
- box-shadow: none;
13
- top: 0;
14
- height: auto;
15
- }
16
- .header-toolbar {
17
- background: ${(props) => props.theme.palette.background.default};
18
- color: ${(props) => props.theme.palette.text.primary};
19
- margin: ${(props) => props.theme.spacing(1)}px 0;
20
- }
21
- .header-link {
22
- display: flex;
23
- text-decoration: none;
24
- flex-shrink: 1;
25
- overflow: hidden;
26
- }
27
- .header-logo {
28
- margin-right: 20px;
29
- }
30
- .header-title {
31
- display: flex;
32
- flex-direction: column;
33
- justify-content: center;
34
- align-items: flex-start;
35
- }
36
- .header-title__primary {
37
- font-size: 24px;
38
- font-weight: 800;
39
- color: ${(props) => {
40
- return props.theme.typography.color.main;
41
- }};
42
- text-transform: uppercase;
43
- display: flex;
44
- align-items: center;
45
- }
46
- .header-title__secondary {
47
- font-size: 14px;
48
- line-height: 1.71;
49
- color: ${(props) => {
50
- return props.theme.typography.color.gray;
51
- }};
52
- }
53
-
54
- .header-addons {
55
- display: flex;
56
- justify-content: center;
57
- align-items: center;
58
- flex-shrink: 9999999;
59
-
60
- .user-addon {
61
- .header-avatar {
62
- width: 32px;
63
- border-radius: 16px;
64
- height: auto;
65
- }
66
- }
67
- }
68
- .header-menu {
69
- display: none;
70
- }
71
- ${(props) => props.theme.breakpoints.down('md')} {
72
- .header-title {
73
- display: none;
74
- }
75
- .header-title__primary {
76
- font-size: 20px;
77
- }
78
- .header-menu {
79
- display: block;
80
- }
81
- }
82
- `;
83
-
84
- export interface HeaderProps extends AppBarProps {
85
- onToggleMenu: () => void;
86
- brand?: string;
87
- description?: React.ReactNode;
88
- addons?: React.ReactNode;
89
- brandAddon?: React.ReactNode;
90
- homeUrl?: string;
91
- logo?: React.ReactNode;
92
- }
93
-
94
- /*
95
- 自定义 logo 相关:
96
- 如果为 logo prop 传入一个自定义的 svg, 并且 svg 中的元素通过 id 引用了 defs 中的元素 (比如 linearGradient),
97
- 这种情况下因为 header 和 sidebar 中会各有一个相同的 svg, defs 中元素的 id 会出现冲突,
98
- 当屏幕较窄时, header 会通过设置 display:none 将 svg logo 隐藏,
99
- 这会导致 svg defs 中的元素不能被正常引用 (比如 fill 引用的 color 失效), 这会进一步导致 sidebar 中的 logo 不能正常显示.
100
- 考虑到上述问题, 目前使用 Hidden 组件控制 logo 的显示/隐藏
101
- 参考: https://blog.patw.me/archives/1820/inline-svg-same-id-and-display-none-issue/
102
- */
103
- export default function Header({
104
- onToggleMenu,
105
- brand = undefined,
106
- description = undefined,
107
- addons = undefined,
108
- brandAddon = undefined,
109
- homeUrl = '/',
110
- logo = undefined,
111
- children,
112
- ...rest
113
- }: HeaderProps) {
114
- return (
115
- <StyledAppBar position="sticky" className="header" {...rest}>
116
- <Toolbar disableGutters={false} className="header-toolbar">
117
- <Button
118
- color="inherit"
119
- aria-label="open drawer"
120
- className="header-menu"
121
- aira-label="header menu button"
122
- onClick={onToggleMenu}>
123
- <MenuIcon />
124
- </Button>
125
- <Link to={homeUrl} className="header-link">
126
- <Box
127
- sx={{
128
- display: {
129
- xs: 'none',
130
- md: 'block',
131
- },
132
- }}
133
- className="header-logo">
134
- {logo || <Logo showText={false} />}
135
- </Box>
136
- <div className="header-title">
137
- <Typography component="h2" noWrap className="header-title__primary">
138
- {brand}
139
- {brandAddon}
140
- </Typography>
141
- <Typography component="p" noWrap className="header-title__secondary">
142
- {description}
143
- </Typography>
144
- </div>
145
- </Link>
146
- <Box
147
- sx={{
148
- flexGrow: 1,
149
- }}
150
- />
151
- {!!children && <div className="header-children">{children}</div>}
152
- <div className="header-addons">{addons}</div>
153
- </Toolbar>
154
- </StyledAppBar>
155
- );
156
- }
@@ -1,127 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
- import Helmet from 'react-helmet';
3
- import { Container, Box, type SxProps, Drawer, type DrawerProps } from '@mui/material';
4
- import { useSize } from 'ahooks';
5
-
6
- import Sidebar, { type LinkItem } from './sidebar';
7
- import Header from './header';
8
- import Footer from '../../Footer';
9
- import { styled } from '../../Theme';
10
-
11
- const Wrapper = styled('div')`
12
- &.dashboard {
13
- display: flex;
14
- flex-direction: column;
15
- height: 100vh;
16
- }
17
- .dashboard__body {
18
- overflow: hidden;
19
- flex: 1;
20
- }
21
- .dashboard__main {
22
- display: flex;
23
- flex-direction: column;
24
- overflow: auto;
25
- flex: 1;
26
- }
27
- .dashboard__content {
28
- flex: 1;
29
- }
30
-
31
- .drawerPaper {
32
- position: relative;
33
- white-space: nowrap;
34
- width: 120px;
35
- background: ${(props) => props.theme.palette.background.default};
36
- box-shadow: 2px 16px 10px 0 rgba(0, 0, 0, ${(props) => (props.theme.palette.mode === 'light' ? 0.05 : 0.5)});
37
- border: 0;
38
- }
39
- `;
40
-
41
- export interface DashboardProps extends React.HTMLAttributes<HTMLDivElement> {
42
- links?: LinkItem[];
43
- brand?: string;
44
- description?: React.ReactNode;
45
- images: Record<string, string>;
46
- title?: string;
47
- brandAddon?: React.ReactNode;
48
- headerAddon?: React.ReactNode;
49
- prefix?: string;
50
- fullWidth?: false | true;
51
- contentLayout?: 'row' | 'column';
52
- homeUrl?: string;
53
- logo?: React.ReactNode;
54
- sx?: SxProps;
55
- }
56
-
57
- export default function Dashboard({
58
- links = [],
59
- brand = '',
60
- description = '',
61
- images,
62
- title = 'Home',
63
- brandAddon = undefined,
64
- headerAddon = undefined,
65
- prefix = '/images',
66
- fullWidth = false,
67
- contentLayout = 'column',
68
- className = '',
69
- homeUrl = '/',
70
- logo = undefined,
71
- children,
72
- ...rest
73
- }: DashboardProps) {
74
- const breakpoint = 960;
75
- const size = useSize(document.body);
76
- const width = size?.width || 0;
77
- const [drawerMode, setDrawerMode] = useState<DrawerProps['variant']>(width >= breakpoint ? 'permanent' : 'temporary');
78
- const [drawerOpen, setDrawerOpen] = useState(drawerMode === 'permanent');
79
-
80
- useEffect(() => {
81
- const newMode = width >= breakpoint ? 'permanent' : 'temporary';
82
- setDrawerMode(newMode);
83
- setDrawerOpen(newMode !== 'temporary');
84
- }, [width]);
85
-
86
- const onToggleDrawer = () => {
87
- setDrawerOpen(!drawerOpen);
88
- };
89
- const isFullWidth = fullWidth || contentLayout === 'row';
90
-
91
- return (
92
- <Wrapper className={`dashboard ${className}`} {...rest}>
93
- <Helmet title={`${title}-${brand}`} />
94
- <Header
95
- className="dashboard__header"
96
- onToggleMenu={onToggleDrawer}
97
- brand={brand}
98
- brandAddon={brandAddon}
99
- description={description}
100
- addons={headerAddon}
101
- homeUrl={homeUrl}
102
- logo={logo}
103
- />
104
- <Box
105
- className="dashboard__body"
106
- sx={{
107
- display: 'flex',
108
- }}>
109
- <Drawer
110
- variant={drawerMode}
111
- className="drawer"
112
- classes={{ paper: 'drawerPaper' }}
113
- open={drawerOpen}
114
- onClose={onToggleDrawer}
115
- ModalProps={{ disablePortal: true, keepMounted: true }}>
116
- <Sidebar className="dashboard__sidebar" images={images} links={links} prefix={prefix} logo={logo} />
117
- </Drawer>
118
- <Box className="dashboard__main">
119
- <Container maxWidth={isFullWidth ? false : 'lg'} className="dashboard__content">
120
- {children}
121
- </Container>
122
- <Footer />
123
- </Box>
124
- </Box>
125
- </Wrapper>
126
- );
127
- }
@@ -1,129 +0,0 @@
1
- import { memo } from 'react';
2
- import { Link, useLocation } from 'react-router-dom';
3
- import { Button, Typography, type SxProps, type ButtonProps } from '@mui/material';
4
- import { teal } from '@mui/material/colors';
5
-
6
- import ImageIcon from '../../Icon/image';
7
- import Logo from '../../Logo';
8
- import { styled, useTheme } from '../../Theme';
9
-
10
- export type LinkItem = {
11
- url: string;
12
- title: React.ReactNode;
13
- name: string;
14
- showBadge?: false | true;
15
- };
16
-
17
- // const a: LinkItem = {};
18
-
19
- export interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {
20
- images: Record<string, string>;
21
- links: LinkItem[];
22
- prefix?: string;
23
- addons?: React.ReactNode;
24
- logo?: React.ReactNode;
25
- sx?: SxProps;
26
- }
27
-
28
- export default function Sidebar({
29
- images,
30
- links,
31
- prefix = '/images',
32
- addons = undefined,
33
- logo = undefined,
34
- ...rest
35
- }: SidebarProps) {
36
- const theme = useTheme();
37
- const location = useLocation();
38
- const isSelected = (_: string, name: string) => {
39
- const pattern = new RegExp(`/${name}`);
40
- return pattern.test(location.pathname);
41
- };
42
-
43
- return (
44
- <MenuItems {...rest}>
45
- <Link to="/" className="sidebar-logo">
46
- {logo || <Logo showText={false} size={20} />}
47
- </Link>
48
- {links.map(({ url, name, title, showBadge }) => {
49
- const selected = isSelected(url, name);
50
- return (
51
- <MenuItem component={Link} key={url} selected={selected} to={url}>
52
- <ImageIcon
53
- name={images[name]}
54
- size={36}
55
- color={selected ? '#00c2c4' : theme.typography.color.main}
56
- prefix={prefix}
57
- showBadge={showBadge}
58
- />
59
- <Typography component="span" className="menu-title">
60
- {title}
61
- </Typography>
62
- </MenuItem>
63
- );
64
- })}
65
- <div style={{ flex: 1 }} />
66
- {addons}
67
- </MenuItems>
68
- );
69
- }
70
-
71
- const MenuItems = memo(styled('div')`
72
- flex: 1;
73
- display: flex;
74
- flex-direction: column;
75
-
76
- && .sidebar-logo {
77
- display: none;
78
- border-bottom: 1px solid #eee;
79
- background: ${(props) => props.theme.palette.background.default};
80
- position: sticky;
81
- top: 0;
82
- z-index: 1;
83
- padding: 10px 0;
84
- text-align: center;
85
- font-size: 0;
86
- }
87
- ${(props) => props.theme.breakpoints.down('md')} {
88
- && .sidebar-logo {
89
- display: block;
90
- }
91
- }
92
- `);
93
-
94
- const gradient = 'linear-gradient(32deg, rgba(144, 255, 230, 0.1), rgba(144, 255, 230, 0))';
95
-
96
- type MenuItemProps = {
97
- selected: boolean;
98
- };
99
-
100
- const MenuItem = styled(Button)<MenuItemProps & ButtonProps<typeof Link, { component: typeof Link }>>`
101
- && {
102
- display: flex;
103
- flex-direction: column;
104
- justify-content: center;
105
- align-items: center;
106
- width: 100%;
107
- transition: all 200ms ease-in-out;
108
- background: ${(props) => (props.selected ? gradient : '')};
109
- padding: 24px 0;
110
- border-left: 2px solid ${(props) => (props.selected ? teal.A700 : 'transparent')};
111
- border-radius: 0;
112
-
113
- &:hover {
114
- background: ${gradient};
115
- border-left-color: ${teal.A700};
116
- }
117
-
118
- .menu-title {
119
- margin-top: 8px;
120
- font-size: 12px;
121
- font-weight: 500;
122
- text-align: center;
123
- text-transform: capitalize;
124
- letter-spacing: normal;
125
- width: 80%;
126
- color: ${(props) => props.theme.palette.text.primary};
127
- }
128
- }
129
- `;
@@ -1,310 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
- import Helmet from 'react-helmet';
3
- import {
4
- AppBar,
5
- Container,
6
- Drawer,
7
- Divider,
8
- IconButton,
9
- Link,
10
- List,
11
- ListItemText,
12
- Toolbar,
13
- Typography,
14
- type SxProps,
15
- ListItemButton,
16
- } from '@mui/material';
17
- import { Menu as MenuIcon } from '@mui/icons-material';
18
-
19
- import Footer from '../Footer';
20
- import OpenInWallet from '../Wallet/Open';
21
- import Icon from '../Icon';
22
- import Logo from '../Logo';
23
- import { styled } from '../Theme';
24
- import { type LinkItem } from './dashboard/sidebar';
25
-
26
- export interface LayoutProps extends React.HTMLAttributes<HTMLDivElement> {
27
- title: string;
28
- brand: React.ReactNode;
29
- description?: React.ReactNode;
30
- links?: LinkItem[];
31
- logo?: React.ReactNode;
32
- showLogo?: false | true;
33
- addons?: React.ReactNode;
34
- footer?: React.ReactNode;
35
- baseUrl?: string;
36
- homeUrl?: string;
37
- variant?: 'shadow' | 'border';
38
- contentOnly?: false | true;
39
- sx?: SxProps;
40
- }
41
-
42
- export default function Layout({
43
- title,
44
- brand,
45
- description = undefined,
46
- links = [],
47
- logo = <Logo showText={false} style={{ width: '40px', height: '40px' }} />,
48
- showLogo = false,
49
- addons = undefined,
50
- footer = (
51
- <Container>
52
- <Footer />
53
- </Container>
54
- ),
55
- baseUrl = '',
56
- homeUrl = '/',
57
- variant = 'shadow',
58
- contentOnly = false,
59
- children,
60
- ...rest
61
- }: LayoutProps) {
62
- const [drawerOpen, setDrawerOpen] = useState(false);
63
- const onToggleDrawer = () => {
64
- setDrawerOpen(!drawerOpen);
65
- };
66
-
67
- useEffect(() => {
68
- const { searchParams } = new URL(window.location.href);
69
- const inviter = searchParams.get('inviter');
70
- if (inviter) {
71
- window.localStorage.setItem('inviter', inviter);
72
- }
73
- }, []);
74
-
75
- if (contentOnly) {
76
- return <Container>{children}</Container>;
77
- }
78
-
79
- let activeLink = '';
80
- // @ts-expect-error
81
- const { pathname: currentPath } = new URL(window.location);
82
- links.forEach((link) => {
83
- if (currentPath.startsWith(link.url) && link.url.length > activeLink.length) {
84
- activeLink = link.url;
85
- }
86
- });
87
-
88
- const drawer = (
89
- <div>
90
- <Toolbar className="toolbar toolbar--drawer">
91
- {!!showLogo && <div className="menu-logo">{logo}</div>}
92
- <div style={{ flexGrow: 1, overflow: 'hidden', textOverflow: 'ellipsis' }}>{brand}</div>
93
- </Toolbar>
94
- <Divider />
95
- <List>
96
- {links.map((x) => (
97
- <Link className="nav-link" key={x.url} href={x.url} underline="hover">
98
- <ListItemButton className={activeLink === x.url ? 'drawer-highlight-nav' : ''}>
99
- <ListItemText>
100
- {typeof x.icon === 'string' ? (
101
- <Icon name={x.icon} size={18 * (x.iconZoom || 1)} color="inherit" style={{ marginRight: '5px' }} />
102
- ) : (
103
- x.icon
104
- )}
105
- {x.title}
106
- </ListItemText>
107
- </ListItemButton>
108
- </Link>
109
- ))}
110
- </List>
111
- </div>
112
- );
113
-
114
- return (
115
- <>
116
- <Div {...rest}>
117
- <Helmet title={title} />
118
- <AppBar position="fixed" className={`appbar appbar--${variant}`} color="default" style={{ height: 56 }}>
119
- <Container disableGutters>
120
- <Toolbar className="toolbar">
121
- <IconButton
122
- color="inherit"
123
- aria-label="open drawer"
124
- edge="start"
125
- onClick={onToggleDrawer}
126
- className="menu-button"
127
- size="large">
128
- <MenuIcon />
129
- </IconButton>
130
- {!!showLogo && <div className="menu-logo">{logo}</div>}
131
- <Typography
132
- href={homeUrl}
133
- component="a"
134
- variant="h5"
135
- color="inherit"
136
- noWrap
137
- className="brand"
138
- sx={{
139
- display: 'block',
140
- }}>
141
- {brand}
142
- </Typography>
143
- {description && (
144
- <Typography component="small" variant="subtitle2" color="inherit" noWrap className="description">
145
- {description}
146
- </Typography>
147
- )}
148
- <div style={{ flexGrow: 1 }} />
149
- <div className="nav-links">
150
- {links.map((x) => (
151
- <Link
152
- key={x.url}
153
- href={x.url}
154
- className={`nav-link ${activeLink === x.url ? 'highlight-nav' : ''}`}
155
- color={x.color}
156
- underline="hover">
157
- {typeof x.icon === 'string' ? (
158
- <Icon
159
- name={x.icon}
160
- size={20 * (x.iconZoom || 1)}
161
- color="inherit"
162
- style={{ marginRight: '5px' }}
163
- />
164
- ) : (
165
- x.icon
166
- )}
167
- {x.title}
168
- </Link>
169
- ))}
170
- </div>
171
- {addons}
172
- </Toolbar>
173
- </Container>
174
- </AppBar>
175
- <div className="toolbar" />
176
- <Container style={{ marginTop: 16, flex: 1 }}>{children}</Container>
177
- {footer}
178
- {!!baseUrl && <OpenInWallet locale="zh" link={baseUrl} />}
179
- </Div>
180
- <DrawerDiv>
181
- <Drawer
182
- variant="temporary"
183
- open={drawerOpen}
184
- onClose={onToggleDrawer}
185
- classes={{
186
- paper: 'drawer-paper',
187
- }}
188
- ModalProps={{
189
- keepMounted: true, // Better open performance on mobile.
190
- disablePortal: true,
191
- }}>
192
- {drawer}
193
- </Drawer>
194
- </DrawerDiv>
195
- </>
196
- );
197
- }
198
-
199
- const Div = styled('div')`
200
- width: 100%;
201
- min-height: 100vh;
202
- display: flex;
203
- flex-direction: column;
204
- .appbar {
205
- &.appbar--border {
206
- box-shadow: none;
207
- &::before {
208
- content: '';
209
- position: absolute;
210
- left: 0;
211
- right: 0;
212
- height: 1px;
213
- bottom: -1px;
214
- display: block;
215
- background-color: rgba(0, 0, 0, 0.12);
216
- }
217
- }
218
- }
219
-
220
- .toolbar {
221
- min-height: 56px;
222
- background: inherit;
223
- white-space: nowrap;
224
- .menu-logo {
225
- font-size: 0;
226
- margin-right: 8px;
227
- }
228
-
229
- .nav-links {
230
- display: flex;
231
- align-items: center;
232
- .nav-link {
233
- margin: 8px 12px;
234
- font-size: 16px;
235
- display: flex;
236
- align-items: center;
237
- }
238
-
239
- .highlight-nav {
240
- font-weight: bolder;
241
- }
242
- }
243
- .brand {
244
- cursor: pointer;
245
- text-decoration: none;
246
- overflow: hidden;
247
- text-overflow: ellipsis;
248
- flex-shrink: 1;
249
- }
250
- .description {
251
- color: #999;
252
- font-size: 15px;
253
- margin-left: 10px;
254
- font-weight: normal;
255
- flex-shrink: 999999;
256
- }
257
- }
258
-
259
- ${(props) => props.theme.breakpoints.up('md')} {
260
- .toolbar {
261
- .menu-button {
262
- display: none;
263
- }
264
- .menu-logo {
265
- & + .brand {
266
- padding-left: 45px;
267
- margin-left: -45px;
268
- }
269
- }
270
- }
271
- }
272
-
273
- ${(props) => props.theme.breakpoints.down('md')} {
274
- .toolbar {
275
- .nav-links,
276
- .menu-logo,
277
- .description {
278
- display: none;
279
- }
280
- }
281
- }
282
- `;
283
-
284
- const DrawerDiv = styled('nav')`
285
- width: 240px;
286
- .drawer-paper {
287
- width: 240px;
288
- }
289
- .toolbar {
290
- min-height: 56px;
291
- }
292
-
293
- a:hover,
294
- a:active,
295
- a:visited,
296
- a:focus {
297
- text-decoration: none;
298
- }
299
-
300
- .drawer-highlight-nav {
301
- background-color: #eee;
302
- }
303
-
304
- .toolbar--drawer {
305
- font-size: 18px;
306
- .menu-logo {
307
- display: inline-flex;
308
- }
309
- }
310
- `;