@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,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
- `;