@arcblock/ux 2.8.25 → 2.9.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 (122) hide show
  1. package/es/Address/did-address.js +33 -21
  2. package/es/AnimationWaiter/index.js +2 -1
  3. package/es/Avatar/index.js +1 -1
  4. package/es/BlockletContext/index.js +1 -1
  5. package/es/CardSelector/index.js +2 -1
  6. package/es/Colors/index.js +2 -1
  7. package/es/Colors/themes/temp.js +17 -0
  8. package/es/Datatable/TableSearch.js +2 -1
  9. package/es/Header/header.js +0 -1
  10. package/es/Img/index.js +7 -6
  11. package/es/Locale/selector.js +15 -13
  12. package/es/NFTDisplay/index.js +2 -1
  13. package/es/QRCode/index.js +2 -1
  14. package/es/SessionBlocklet/index.js +169 -0
  15. package/es/SessionManager/index.js +2 -381
  16. package/es/SessionPermission/index.js +28 -0
  17. package/es/SessionUser/components/logged-in.js +224 -0
  18. package/es/SessionUser/components/session-user-item.js +148 -0
  19. package/es/SessionUser/components/session-user-switch.js +213 -0
  20. package/es/SessionUser/components/un-login.js +64 -0
  21. package/es/SessionUser/components/user-info.js +163 -0
  22. package/es/SessionUser/index.js +49 -0
  23. package/es/SessionUser/libs/translation.js +19 -0
  24. package/es/SessionUser/libs/utils.js +4 -0
  25. package/es/SplitButton/index.js +2 -1
  26. package/es/Toast/index.js +1 -1
  27. package/es/Util/constant.js +10 -0
  28. package/es/Util/index.js +11 -0
  29. package/lib/Address/did-address.js +36 -22
  30. package/lib/AnimationWaiter/index.js +2 -1
  31. package/lib/Avatar/index.js +1 -1
  32. package/lib/BlockletContext/index.js +1 -1
  33. package/lib/CardSelector/index.js +2 -1
  34. package/lib/Colors/index.js +7 -0
  35. package/lib/Colors/themes/temp.js +24 -0
  36. package/lib/Datatable/TableSearch.js +2 -1
  37. package/lib/Header/header.js +1 -1
  38. package/lib/Img/index.js +7 -6
  39. package/lib/Locale/selector.js +14 -13
  40. package/lib/NFTDisplay/index.js +2 -1
  41. package/lib/QRCode/index.js +2 -1
  42. package/lib/SessionBlocklet/index.js +187 -0
  43. package/lib/SessionManager/index.js +2 -390
  44. package/lib/SessionPermission/index.js +38 -0
  45. package/lib/SessionUser/components/logged-in.js +243 -0
  46. package/lib/SessionUser/components/session-user-item.js +163 -0
  47. package/lib/SessionUser/components/session-user-switch.js +232 -0
  48. package/lib/SessionUser/components/un-login.js +72 -0
  49. package/lib/SessionUser/components/user-info.js +175 -0
  50. package/lib/SessionUser/index.js +57 -0
  51. package/lib/SessionUser/libs/translation.js +26 -0
  52. package/lib/{SessionManager → SessionUser}/libs/utils.js +8 -1
  53. package/lib/SplitButton/index.js +2 -1
  54. package/lib/Toast/index.js +5 -5
  55. package/lib/Util/constant.js +26 -0
  56. package/lib/Util/index.js +16 -3
  57. package/package.json +19 -7
  58. package/src/Address/did-address.jsx +34 -20
  59. package/src/AnimationWaiter/index.js +2 -1
  60. package/src/Avatar/index.jsx +1 -1
  61. package/src/BlockletContext/index.jsx +1 -1
  62. package/src/CardSelector/index.jsx +2 -1
  63. package/src/Colors/index.js +1 -0
  64. package/src/Colors/themes/temp.js +18 -0
  65. package/src/Datatable/TableSearch.js +3 -1
  66. package/src/Header/header.jsx +0 -1
  67. package/src/Img/{index.js → index.jsx} +8 -6
  68. package/src/Locale/selector.jsx +11 -8
  69. package/src/NFTDisplay/index.js +2 -1
  70. package/src/QRCode/index.js +2 -1
  71. package/src/SessionBlocklet/index.jsx +181 -0
  72. package/src/SessionManager/index.jsx +2 -369
  73. package/src/SessionPermission/index.jsx +28 -0
  74. package/src/SessionUser/components/logged-in.jsx +194 -0
  75. package/src/SessionUser/components/session-user-item.jsx +96 -0
  76. package/src/SessionUser/components/session-user-switch.jsx +222 -0
  77. package/src/SessionUser/components/un-login.jsx +55 -0
  78. package/src/SessionUser/components/user-info.jsx +165 -0
  79. package/src/SessionUser/index.jsx +38 -0
  80. package/src/SessionUser/libs/translation.js +19 -0
  81. package/src/{SessionManager → SessionUser}/libs/utils.js +4 -0
  82. package/src/SplitButton/index.js +2 -1
  83. package/src/Toast/index.js +1 -1
  84. package/src/Util/constant.js +12 -0
  85. package/src/Util/index.js +13 -0
  86. package/es/SessionManager/components/account-item.js +0 -212
  87. package/es/SessionManager/components/add-account-item.js +0 -57
  88. package/es/SessionManager/components/federated-login-detecter.js +0 -183
  89. package/es/SessionManager/components/manage-accounts.js +0 -219
  90. package/es/SessionManager/components/manage-blocklet.js +0 -70
  91. package/es/SessionManager/components/menu-accordion.js +0 -103
  92. package/es/SessionManager/components/responsive-popper.js +0 -24
  93. package/es/SessionManager/components/user-drawer.js +0 -68
  94. package/es/SessionManager/components/user-info.js +0 -143
  95. package/es/SessionManager/components/user-popper.js +0 -110
  96. package/es/SessionManager/hooks/use-config.js +0 -34
  97. package/es/SessionManager/libs/translation.js +0 -52
  98. package/es/SessionManager/libs/utils.js +0 -2
  99. package/lib/SessionManager/components/account-item.js +0 -219
  100. package/lib/SessionManager/components/add-account-item.js +0 -66
  101. package/lib/SessionManager/components/federated-login-detecter.js +0 -193
  102. package/lib/SessionManager/components/manage-accounts.js +0 -232
  103. package/lib/SessionManager/components/manage-blocklet.js +0 -86
  104. package/lib/SessionManager/components/menu-accordion.js +0 -111
  105. package/lib/SessionManager/components/responsive-popper.js +0 -34
  106. package/lib/SessionManager/components/user-drawer.js +0 -75
  107. package/lib/SessionManager/components/user-info.js +0 -160
  108. package/lib/SessionManager/components/user-popper.js +0 -104
  109. package/lib/SessionManager/hooks/use-config.js +0 -41
  110. package/lib/SessionManager/libs/translation.js +0 -59
  111. package/src/SessionManager/components/account-item.jsx +0 -156
  112. package/src/SessionManager/components/add-account-item.jsx +0 -49
  113. package/src/SessionManager/components/federated-login-detecter.jsx +0 -167
  114. package/src/SessionManager/components/manage-accounts.jsx +0 -228
  115. package/src/SessionManager/components/manage-blocklet.jsx +0 -70
  116. package/src/SessionManager/components/menu-accordion.jsx +0 -93
  117. package/src/SessionManager/components/responsive-popper.jsx +0 -26
  118. package/src/SessionManager/components/user-drawer.jsx +0 -57
  119. package/src/SessionManager/components/user-info.jsx +0 -117
  120. package/src/SessionManager/components/user-popper.jsx +0 -95
  121. package/src/SessionManager/hooks/use-config.js +0 -33
  122. package/src/SessionManager/libs/translation.js +0 -52
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = SessionUser;
7
+ var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _noop = _interopRequireDefault(require("lodash/noop"));
9
+ var _ahooks = require("ahooks");
10
+ var _loggedIn = _interopRequireDefault(require("./components/logged-in"));
11
+ var _unLogin = _interopRequireDefault(require("./components/un-login"));
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function SessionUser(_ref) {
15
+ let {
16
+ session,
17
+ onBindWallet,
18
+ locale,
19
+ size
20
+ } = _ref;
21
+ const isBlocklet = (0, _ahooks.useCreation)(() => {
22
+ return !!(globalThis !== null && globalThis !== void 0 && globalThis.blocklet);
23
+ });
24
+ if (session.user) {
25
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_loggedIn.default, {
26
+ isBlocklet: isBlocklet,
27
+ session: session,
28
+ onBindWallet: onBindWallet,
29
+ locale: locale,
30
+ size: size
31
+ });
32
+ }
33
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_unLogin.default, {
34
+ session: session,
35
+ isBlocklet: isBlocklet,
36
+ locale: locale,
37
+ size: size
38
+ });
39
+ }
40
+ SessionUser.propTypes = {
41
+ session: _propTypes.default.shape({
42
+ user: _propTypes.default.shape({
43
+ did: _propTypes.default.string.isRequired,
44
+ fullName: _propTypes.default.string.isRequired,
45
+ email: _propTypes.default.string.isRequired,
46
+ avatar: _propTypes.default.string.isRequired
47
+ })
48
+ }).isRequired,
49
+ onBindWallet: _propTypes.default.func,
50
+ locale: _propTypes.default.string,
51
+ size: _propTypes.default.number
52
+ };
53
+ SessionUser.defaultProps = {
54
+ onBindWallet: _noop.default,
55
+ locale: 'en',
56
+ size: 24
57
+ };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.translations = void 0;
7
+ /* eslint-disable import/prefer-default-export */
8
+ const translations = {
9
+ en: {
10
+ connectDIDWallet: 'Connect your DID Wallet for full functionality',
11
+ switch: 'Switch',
12
+ profile: 'Profile',
13
+ dashboard: 'Dashboard',
14
+ logout: 'Sign Out',
15
+ addAnotherAccount: 'Add another account'
16
+ },
17
+ zh: {
18
+ connectDIDWallet: '连接你的 DID Wallet 获得更全的功能',
19
+ switch: '切换',
20
+ profile: '个人中心',
21
+ dashboard: '控制台',
22
+ logout: '退出登录',
23
+ addAnotherAccount: '添加账户'
24
+ }
25
+ };
26
+ exports.translations = translations;
@@ -3,12 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getSourceProvider = exports.getConnectedAccounts = void 0;
6
+ exports.getSourceProvider = exports.getSourceAppPid = exports.getCurrentAppPid = exports.getConnectedAccounts = void 0;
7
7
  const getSourceProvider = user => {
8
8
  var _user$extraConfigs;
9
9
  return (user === null || user === void 0 ? void 0 : user.sourceProvider) || (user === null || user === void 0 ? void 0 : (_user$extraConfigs = user.extraConfigs) === null || _user$extraConfigs === void 0 ? void 0 : _user$extraConfigs.sourceProvider) || 'wallet';
10
10
  };
11
11
  exports.getSourceProvider = getSourceProvider;
12
+ const getSourceAppPid = user => user === null || user === void 0 ? void 0 : user.sourceAppPid;
13
+ exports.getSourceAppPid = getSourceAppPid;
14
+ const getCurrentAppPid = user => {
15
+ var _window, _window$blocklet;
16
+ return (user === null || user === void 0 ? void 0 : user.sourceAppPid) || ((_window = window) === null || _window === void 0 ? void 0 : (_window$blocklet = _window.blocklet) === null || _window$blocklet === void 0 ? void 0 : _window$blocklet.appPid);
17
+ };
18
+ exports.getCurrentAppPid = getCurrentAppPid;
12
19
  const getConnectedAccounts = user => {
13
20
  var _user$extraConfigs2;
14
21
  return (user === null || user === void 0 ? void 0 : user.connectedAccounts) || (user === null || user === void 0 ? void 0 : (_user$extraConfigs2 = user.extraConfigs) === null || _user$extraConfigs2 === void 0 ? void 0 : _user$extraConfigs2.connectedAccounts) || [];
@@ -14,6 +14,7 @@ var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
14
14
  var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
15
15
  var _ButtonGroup = _interopRequireDefault(require("@mui/material/ButtonGroup"));
16
16
  var _Button = _interopRequireDefault(require("@mui/material/Button"));
17
+ var _noop = _interopRequireDefault(require("lodash/noop"));
17
18
  var _Theme = require("../Theme");
18
19
  var _jsxRuntime = require("react/jsx-runtime");
19
20
  var _templateObject, _templateObject2;
@@ -129,7 +130,7 @@ SplitButton.defaultProps = {
129
130
  menu: [],
130
131
  children: null,
131
132
  variant: 'contained',
132
- onClick: () => {},
133
+ onClick: _noop.default,
133
134
  menuButtonProps: {}
134
135
  };
135
136
  /**
@@ -9,6 +9,7 @@ var _react = require("react");
9
9
  var _notistack = require("notistack");
10
10
  var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
11
11
  var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
12
+ var _noop = _interopRequireDefault(require("lodash/noop"));
12
13
  var _jsxRuntime = require("react/jsx-runtime");
13
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
15
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -22,11 +23,10 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
22
23
  */ /**
23
24
  * @type {import('notistack').ProviderContext['enqueueSnackbar']}
24
25
  */
25
- const noop = () => {};
26
- let _success = noop;
27
- let _error = noop;
28
- let _warning = noop;
29
- let _info = noop;
26
+ let _success = _noop.default;
27
+ let _error = _noop.default;
28
+ let _warning = _noop.default;
29
+ let _info = _noop.default;
30
30
  /**
31
31
  * @description
32
32
  * @param {(message: import('notistack').SnackbarMessage, options?: import('notistack').OptionsObject) => import('notistack').SnackbarKey} enqueueSnackbar
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SESSION_TOKEN_STORAGE_KEY = exports.RELAY_SOCKET_PREFIX = exports.REFRESH_TOKEN_STORAGE_KEY = exports.PROFILE_URL = exports.NAVIGATION_URL = exports.DEFAULT_WINDOW_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.DASHBOARD_URL = exports.AUTH_SERVICE_PREFIX = exports.API_DID_PREFIX = void 0;
7
+ const DEFAULT_TIMEOUT = 5 * 60;
8
+ exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
9
+ const DEFAULT_WINDOW_TIMEOUT = 30 * 60;
10
+ exports.DEFAULT_WINDOW_TIMEOUT = DEFAULT_WINDOW_TIMEOUT;
11
+ const AUTH_SERVICE_PREFIX = '/.well-known/service';
12
+ exports.AUTH_SERVICE_PREFIX = AUTH_SERVICE_PREFIX;
13
+ const SESSION_TOKEN_STORAGE_KEY = 'login_token';
14
+ exports.SESSION_TOKEN_STORAGE_KEY = SESSION_TOKEN_STORAGE_KEY;
15
+ const REFRESH_TOKEN_STORAGE_KEY = 'refresh_token';
16
+ exports.REFRESH_TOKEN_STORAGE_KEY = REFRESH_TOKEN_STORAGE_KEY;
17
+ const RELAY_SOCKET_PREFIX = '/.well-known/service';
18
+ exports.RELAY_SOCKET_PREFIX = RELAY_SOCKET_PREFIX;
19
+ const API_DID_PREFIX = '/api/did';
20
+ exports.API_DID_PREFIX = API_DID_PREFIX;
21
+ const DASHBOARD_URL = "".concat(AUTH_SERVICE_PREFIX, "/admin");
22
+ exports.DASHBOARD_URL = DASHBOARD_URL;
23
+ const PROFILE_URL = "".concat(AUTH_SERVICE_PREFIX, "/user");
24
+ exports.PROFILE_URL = PROFILE_URL;
25
+ const NAVIGATION_URL = "".concat(AUTH_SERVICE_PREFIX, "/admin/navigation");
26
+ exports.NAVIGATION_URL = NAVIGATION_URL;
package/lib/Util/index.js CHANGED
@@ -11,12 +11,12 @@ exports.getColor = exports.getBackground = exports.formatUptime = void 0;
11
11
  exports.getCookieOptions = getCookieOptions;
12
12
  exports.getCopyright = getCopyright;
13
13
  exports.getDateTool = getDateTool;
14
- exports.isUrl = exports.isEthereumDid = exports.getUserAvatar = exports.getTimezone = exports.getFontSize = void 0;
14
+ exports.isUrl = exports.isEthereumDid = exports.getVisitorId = exports.getUserAvatar = exports.getTimezone = exports.getFontSize = void 0;
15
15
  exports.mergeProps = mergeProps;
16
16
  exports.openWebWallet = openWebWallet;
17
17
  exports.parseQuery = parseQuery;
18
18
  exports.setDateTool = setDateTool;
19
- exports.str2color = exports.sleep = void 0;
19
+ exports.str2color = exports.sleep = exports.setVisitorId = void 0;
20
20
  exports.stringifyQuery = stringifyQuery;
21
21
  var _padStart = _interopRequireDefault(require("lodash/padStart"));
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -352,4 +352,17 @@ exports.sleep = sleep;
352
352
  const isUrl = str => {
353
353
  return /^https?:\/\//.test(str);
354
354
  };
355
- exports.isUrl = isUrl;
355
+ exports.isUrl = isUrl;
356
+ const visitorIdKey = '__visitor_id';
357
+ const getVisitorId = () => {
358
+ return localStorage.getItem(visitorIdKey);
359
+ };
360
+ exports.getVisitorId = getVisitorId;
361
+ const setVisitorId = value => {
362
+ if (value === null) {
363
+ localStorage.removeItem(visitorIdKey);
364
+ } else {
365
+ localStorage.setItem(visitorIdKey, value);
366
+ }
367
+ };
368
+ exports.setVisitorId = setVisitorId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.8.25",
3
+ "version": "2.9.0",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -239,10 +239,22 @@
239
239
  "import": "./es/Screenshot/index.js",
240
240
  "require": "./lib/Screenshot/index.js"
241
241
  },
242
+ "./lib/SessionBlocklet": {
243
+ "import": "./es/SessionBlocklet/index.js",
244
+ "require": "./lib/SessionBlocklet/index.js"
245
+ },
242
246
  "./lib/SessionManager": {
243
247
  "import": "./es/SessionManager/index.js",
244
248
  "require": "./lib/SessionManager/index.js"
245
249
  },
250
+ "./lib/SessionPermission": {
251
+ "import": "./es/SessionPermission/index.js",
252
+ "require": "./lib/SessionPermission/index.js"
253
+ },
254
+ "./lib/SessionUser": {
255
+ "import": "./es/SessionUser/index.js",
256
+ "require": "./lib/SessionUser/index.js"
257
+ },
246
258
  "./lib/Sparkline": {
247
259
  "import": "./es/Sparkline/index.js",
248
260
  "require": "./lib/Sparkline/index.js"
@@ -324,19 +336,19 @@
324
336
  "peerDependencies": {
325
337
  "react": ">=18.1.0"
326
338
  },
327
- "gitHead": "130b4405cfaf4ed6ecb05006abe50d2611595141",
339
+ "gitHead": "a90e260c11c742d6d7f80a9c5ffe6445ea87e62f",
328
340
  "dependencies": {
329
341
  "@arcblock/did-motif": "^1.1.13",
330
- "@arcblock/icons": "^2.8.25",
331
- "@arcblock/react-hooks": "^2.8.25",
342
+ "@arcblock/icons": "^2.9.0",
343
+ "@arcblock/react-hooks": "^2.9.0",
332
344
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
333
345
  "@emotion/react": "^11.10.4",
334
346
  "@emotion/styled": "^11.10.4",
335
347
  "@fontsource/lato": "^4.5.10",
336
348
  "@fontsource/ubuntu-mono": "^4.5.11",
337
- "@iconify-icons/ion": "^1.2.10",
338
- "@iconify-icons/logos": "^1.2.35",
339
- "@iconify-icons/mdi": "^1.2.47",
349
+ "@iconify-icons/logos": "^1.2.36",
350
+ "@iconify-icons/material-symbols": "^1.2.58",
351
+ "@iconify-icons/mdi": "^1.2.48",
340
352
  "@iconify/react": "^4.1.1",
341
353
  "@mui/icons-material": "^5.14.8",
342
354
  "@mui/material": "^5.14.8",
@@ -1,11 +1,11 @@
1
1
  import React, { useRef, useState, forwardRef } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import '@fontsource/ubuntu-mono/400.css';
4
- import Tooltip from '@mui/material/Tooltip';
5
4
  import { green } from '@mui/material/colors';
5
+ import { Tooltip, Box } from '@mui/material';
6
6
  import copy from 'copy-to-clipboard';
7
- import CopyIcon from '@mui/icons-material/ContentCopy';
8
- import CheckIcon from '@mui/icons-material/Check';
7
+ import { ContentCopy as CopyIcon, Check as CheckIcon } from '@mui/icons-material';
8
+ import noop from 'lodash/noop';
9
9
 
10
10
  import { styled } from '../Theme';
11
11
  import { getFontSize } from '../Util';
@@ -93,19 +93,35 @@ const DidAddress = forwardRef(
93
93
  <Root as={component} size={size} {...rest} ref={ref}>
94
94
  {prepend}
95
95
  {/* 注意: 该元素必须渲染(可以隐藏), 以便 compact 模式下复制的文本是完整的 */}
96
- <span
97
- ref={textRef}
98
- className="did-address-text did-address-truncate"
99
- style={{ display: compact ? 'none' : 'inline' }}>
100
- {children}
101
- </span>
102
- {compact && (
103
- <span className="did-address-text">
104
- <CompactText startChars={startChars} endChars={endChars} showCopyButtonInTooltip={showCopyButtonInTooltip}>
105
- {children}
106
- </CompactText>
107
- </span>
108
- )}
96
+ <Tooltip title={copyable ? '' : translations[locale].copied} placement="bottom" arrow open={copied}>
97
+ <Box
98
+ ref={textRef}
99
+ component="span"
100
+ className="did-address-text did-address-truncate"
101
+ sx={{
102
+ display: compact ? 'none' : 'inline',
103
+ cursor: copyable ? 'text' : 'pointer',
104
+ }}
105
+ onDoubleClick={copyable ? noop : onCopy}>
106
+ {children}
107
+ </Box>
108
+ {compact && (
109
+ <Box
110
+ component="span"
111
+ className="did-address-text"
112
+ sx={{
113
+ cursor: copyable ? 'text' : 'pointer',
114
+ }}
115
+ onDoubleClick={copyable ? noop : onCopy}>
116
+ <CompactText
117
+ startChars={startChars}
118
+ endChars={endChars}
119
+ showCopyButtonInTooltip={showCopyButtonInTooltip}>
120
+ {children}
121
+ </CompactText>
122
+ </Box>
123
+ )}
124
+ </Tooltip>
109
125
  {copyElement}
110
126
  {append}
111
127
  </Root>
@@ -149,7 +165,7 @@ DidAddress.defaultProps = {
149
165
  locale: 'en',
150
166
  };
151
167
 
152
- const Root = styled('div', { shouldForwardProp: (prop) => prop !== 'inline' })`
168
+ const Root = styled(Box, { shouldForwardProp: (prop) => prop !== 'inline' })`
153
169
  font-family: 'Ubuntu Mono', monospace;
154
170
  && {
155
171
  display: ${({ inline }) => (inline ? 'inline-flex' : 'flex')};
@@ -175,9 +191,6 @@ const Root = styled('div', { shouldForwardProp: (prop) => prop !== 'inline' })`
175
191
  text-overflow: ellipsis;
176
192
  }
177
193
 
178
- .did-address-copy {
179
- flex: 0 0 auto;
180
- }
181
194
  .did-address-copy-wrapper {
182
195
  display: flex;
183
196
  justify-content: center;
@@ -187,6 +200,7 @@ const Root = styled('div', { shouldForwardProp: (prop) => prop !== 'inline' })`
187
200
  margin-left: 8px;
188
201
  }
189
202
  .did-address-copy {
203
+ flex: 0 0 auto;
190
204
  font-size: 1em;
191
205
  color: #999;
192
206
  cursor: pointer;
@@ -1,6 +1,7 @@
1
1
  import { useState, useEffect, useRef } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import Lottie from 'react-lottie-player';
4
+ import noop from 'lodash/noop';
4
5
 
5
6
  import lottieJson from './default-animation.json';
6
7
  import { styled } from '../Theme';
@@ -73,7 +74,7 @@ export default function AnimationWaiter({
73
74
  // tips
74
75
  useEffect(() => {
75
76
  if (!tips.length) {
76
- return () => {};
77
+ return noop;
77
78
  }
78
79
 
79
80
  const timer = setTimeout(() => {
@@ -115,7 +115,7 @@ Avatar.defaultProps = {
115
115
  responsive: false,
116
116
  };
117
117
 
118
- const BlockyIconContainer = styled('div')`
118
+ const BlockyIconContainer = styled(Box)`
119
119
  display: flex;
120
120
  align-items: center;
121
121
  width: ${(props) => props.$size}px;
@@ -32,7 +32,7 @@ function BlockletProvider({ children, baseUrl }) {
32
32
  setBlockletData(data);
33
33
  } catch {
34
34
  // NOTICE: 如果获取指定 blockletData 失败,则使用 window.blocklet
35
- const data = window.blocklet || window.env;
35
+ const data = globalThis.blocklet || globalThis.env;
36
36
  setBlockletData(data);
37
37
  }
38
38
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -1,6 +1,7 @@
1
1
  import { useState, useEffect, useRef } from 'react';
2
2
  import styled from '@emotion/styled';
3
3
  import PropTypes from 'prop-types';
4
+ import noop from 'lodash/noop';
4
5
 
5
6
  export default function CardSelector({ list, width, height, cardSpace, onSelect, defaultIndex }) {
6
7
  const [selectedId, setSelectedId] = useState(0);
@@ -132,6 +133,6 @@ CardSelector.defaultProps = {
132
133
  width: 300,
133
134
  height: 400,
134
135
  cardSpace: 40,
135
- onSelect: () => {},
136
+ onSelect: noop,
136
137
  defaultIndex: 0,
137
138
  };
@@ -1,2 +1,3 @@
1
1
  // eslint-disable-next-line no-restricted-exports
2
2
  export { default } from './themes/default';
3
+ export { default as temp } from './themes/temp';
@@ -0,0 +1,18 @@
1
+ const colors = {
2
+ lineStep: 'rgba(18, 22, 24, 0.06)',
3
+ lineBorderStrong: 'rgba(18, 22, 24, 0.12)',
4
+ lineBorderBase: 'rgba(18, 22, 24, 0.06)',
5
+ borderBase: 'rgba(18, 22, 24, 0.06)',
6
+ textMuted: 'rgba(18, 22, 24, 0.36)',
7
+ textSubtitle: 'rgba(18, 22, 24, 0.6)',
8
+ textBase: 'rgba(18, 22, 24, 1)',
9
+ textPrimaryBase: 'rgba(18, 22, 24, 1)',
10
+ surfaceBgSubtitle: 'rgba(18, 22, 24, 0.03)',
11
+ surfacePrimarySubtitle: 'rgba(19, 125, 250, 0.06)',
12
+ surfaceSuccess: 'rgba(13, 202, 134, 1)',
13
+ primaryBase: 'rgba(19, 125, 250, 1)',
14
+ primary100: 'rgba(19, 125, 250, 1)',
15
+ gray6: 'rgba(17, 22, 24, 0.06)',
16
+ };
17
+
18
+ export default colors;
@@ -6,6 +6,8 @@ import SearchIcon from '@mui/icons-material/Search';
6
6
  import TextField from '@mui/material/TextField';
7
7
  import ClearIcon from '@mui/icons-material/Clear';
8
8
  import clsx from 'clsx';
9
+ import noop from 'lodash/noop';
10
+
9
11
  import { useDatatableContext } from './DatatableContext';
10
12
  import { styled } from '../Theme';
11
13
 
@@ -110,7 +112,7 @@ TableSearch.propTypes = {
110
112
  TableSearch.defaultProps = {
111
113
  search: '',
112
114
  searchText: '',
113
- onSearchOpen: () => {},
115
+ onSearchOpen: noop,
114
116
  };
115
117
 
116
118
  const Container = styled('div')`
@@ -170,7 +170,6 @@ const Root = styled('div')`
170
170
  .header-addons {
171
171
  display: flex;
172
172
  align-items: center;
173
- min-width: 150px;
174
173
  }
175
174
  ${(props) => props.theme.breakpoints.down('lg')} {
176
175
  .header-brand {
@@ -1,9 +1,11 @@
1
1
  import { useEffect, useMemo, useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { useInView } from 'react-intersection-observer';
4
- import AlertIcon from '@iconify-icons/mdi/alert';
5
- import ImageIcon from '@iconify-icons/mdi/image';
4
+ import WarningRoundedIcon from '@iconify-icons/material-symbols/warning-rounded';
5
+ import ImageRoundedIcon from '@iconify-icons/material-symbols/image-rounded';
6
6
  import { Icon } from '@iconify/react';
7
+ import noop from 'lodash/noop';
8
+
7
9
  import { styled } from '../Theme';
8
10
 
9
11
  /**
@@ -160,12 +162,12 @@ function Img({
160
162
  <div className={`image ${className} ${classes.root}`} style={mergedStyle}>
161
163
  {!fallback && imgState === 'error' && (
162
164
  <div className="image--state" title="loading image">
163
- <Icon icon={AlertIcon} className="image--icon" />
165
+ <Icon icon={WarningRoundedIcon} className="image--icon" />
164
166
  </div>
165
167
  )}
166
168
  {!placeholder && imgState === 'loading' && (
167
169
  <div className="image--state" title="Image load error">
168
- <Icon icon={ImageIcon} className="image--icon" />
170
+ <Icon icon={ImageRoundedIcon} className="image--icon" />
169
171
  </div>
170
172
  )}
171
173
  {imgState === 'loaded' && <img className="image--img" src={src} alt={alt} />}
@@ -204,8 +206,8 @@ Img.defaultProps = {
204
206
  placeholder: null,
205
207
  fallback: null,
206
208
  className: '',
207
- onError: () => {},
208
- onSuccess: () => {},
209
+ onError: noop,
210
+ onSuccess: noop,
209
211
  };
210
212
 
211
213
  export default Img;
@@ -2,11 +2,13 @@
2
2
  import { useState, useContext, useRef, useMemo } from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { Button, Typography, IconButton, Popper, MenuItem, MenuList, Box, ClickAwayListener } from '@mui/material';
5
- import CheckIcon from '@mui/icons-material/Check';
6
- import GlobeIcon from '@arcblock/icons/lib/Globe';
5
+ import { Icon as IconifyIcon } from '@iconify/react';
6
+ import LanguageIcon from '@iconify-icons/material-symbols/language';
7
+ import CheckIcon from '@iconify-icons/material-symbols/check';
8
+ import noop from 'lodash/noop';
7
9
 
8
10
  import { getColor, getBackground } from '../Util';
9
-
11
+ import { temp as colors } from '../Colors';
10
12
  import { LocaleContext } from './context';
11
13
  import { styled, useTheme } from '../Theme';
12
14
 
@@ -56,7 +58,7 @@ export default function LocaleSelector(props) {
56
58
  return <Icon />;
57
59
  }
58
60
 
59
- return <GlobeIcon style={{ width: 'auto', height: size, color: theme.palette.text.secondary }} />;
61
+ return <IconifyIcon icon={LanguageIcon} fontSize={size} color={theme.palette.text.secondary} />;
60
62
  }, [Icon, theme?.palette?.text?.secondary, size]);
61
63
 
62
64
  return (
@@ -81,9 +83,9 @@ export default function LocaleSelector(props) {
81
83
  <MenuList>
82
84
  {languages.map(({ code, name }) => (
83
85
  <MenuItem key={code} className="locale-item" onClick={() => onSelect(code, name)}>
84
- <CheckIcon
86
+ <IconifyIcon
87
+ icon={CheckIcon}
85
88
  className={code === locale ? 'check-icon check-icon-visible' : 'check-icon'}
86
- fontSize="small"
87
89
  />
88
90
  {name}
89
91
  </MenuItem>
@@ -109,7 +111,7 @@ LocaleSelector.defaultProps = {
109
111
  showText: true,
110
112
  size: 24,
111
113
  popperProps: {},
112
- onChange: () => {},
114
+ onChange: noop,
113
115
  popperType: 'click',
114
116
  icon: null,
115
117
  };
@@ -135,7 +137,8 @@ const Div = styled('div', {
135
137
 
136
138
  .locales {
137
139
  background: ${(props) => getBackground(props)};
138
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.2);
140
+ box-shadow: 0px 8px 16px 0px ${colors.gray6}, 0px 0px 0px 1px ${colors.gray6};
141
+ border-radius: 8px;
139
142
  }
140
143
 
141
144
  .locale-item {
@@ -8,6 +8,7 @@ import pako from 'pako';
8
8
  import base64 from 'base64-url';
9
9
  import isSvg from 'is-svg';
10
10
  import { ReactSVG } from 'react-svg';
11
+ import noop from 'lodash/noop';
11
12
 
12
13
  import AspectRatioContainer from './aspect-ratio-container';
13
14
  import ImgSvgEmbedder from './svg-embedder/img';
@@ -254,7 +255,7 @@ NFTDisplay.defaultProps = {
254
255
  preferredSvgEmbedder: 'img',
255
256
  checkSvg: false,
256
257
  minimumLoadingTime: 0,
257
- onCompleted: () => {},
258
+ onCompleted: noop,
258
259
  };
259
260
 
260
261
  const Root = styled('div')`
@@ -1,6 +1,7 @@
1
1
  import { useRef, useEffect, useMemo, useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import QRCodeStyling from '@solana/qr-code-styling';
4
+ import { Box } from '@mui/material';
4
5
 
5
6
  const defaults = {
6
7
  margin: 0,
@@ -50,7 +51,7 @@ function QRCode({ data, size, image, config, ...rest }) {
50
51
  // eslint-disable-next-line react-hooks/exhaustive-deps
51
52
  }, [data, size, image, config]);
52
53
 
53
- return <div ref={ref} {...rest} />;
54
+ return <Box ref={ref} {...rest} />;
54
55
  }
55
56
 
56
57
  QRCode.propTypes = {