@arcblock/ux 2.9.66 → 2.9.68

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.
package/es/Button/wrap.js CHANGED
@@ -34,7 +34,7 @@ const extendedColors = {
34
34
  * @typedef {{
35
35
  * rounded?: boolean,
36
36
  * loading?: boolean,
37
- * forwardedRef: import('react').ForwardedRef<any>,
37
+ * forwardedRef?: import('react').ForwardedRef<any>,
38
38
  * color?: 'default' | 'inherit' | 'primary' | 'secondary' | 'danger' | 'warning' | 'reverse' | 'did'
39
39
  * } & import('@mui/material').ButtonProps} ButtonProps
40
40
  */
@@ -35,6 +35,7 @@ const colors = {
35
35
  buttonsButtonNeutralHover: 'rgba(243, 244, 246, 1)',
36
36
  buttonsButtonInverted: 'rgba(3, 7, 18, 1)',
37
37
  buttonsButtonInvertedHover: 'rgba(17, 24, 39, 1)',
38
- buttonsButtonDanger: 'rgba(225, 29, 72, 1)'
38
+ buttonsButtonDanger: 'rgba(225, 29, 72, 1)',
39
+ red: '#FF6369'
39
40
  };
40
41
  export default colors;
@@ -10,5 +10,8 @@ export type OpenConfirmProps = {
10
10
  cancelButtonText: string;
11
11
  };
12
12
 
13
+ export type UpdateConfirmProps = Partial<Pick<OpenConfirmProps, 'title' | 'content'>>;
14
+
13
15
  export type OpenConfirm = (params: OpenConfirmProps) => void;
14
16
  export type CloseConfirm = () => void;
17
+ export type UpdateConfirm = (params: UpdateConfirmProps) => void;
@@ -44,6 +44,10 @@ const ConfirmHolder = /*#__PURE__*/forwardRef((props, ref) => {
44
44
  reset();
45
45
  }, 300);
46
46
  });
47
+ const update = useMemoizedFn(params => {
48
+ if (params.title) setTitle(params.title);
49
+ if (params.content) setContent(params.content);
50
+ });
47
51
  const onCancel = useMemoizedFn((e, reason) => {
48
52
  close();
49
53
  state?.onCancel(e, reason);
@@ -59,9 +63,10 @@ const ConfirmHolder = /*#__PURE__*/forwardRef((props, ref) => {
59
63
  useImperativeHandle(ref, () => {
60
64
  return {
61
65
  open,
62
- close
66
+ close,
67
+ update
63
68
  };
64
- }, [open, close]);
69
+ }, [open, close, update]);
65
70
  return /*#__PURE__*/_jsx(Confirm, {
66
71
  ...props,
67
72
  open: state.show,
@@ -99,15 +104,24 @@ export default function useConfirm(props = {}) {
99
104
  confirmRef.current?.open(...args);
100
105
  });
101
106
  /**
102
- * 挂你不一个弹窗
107
+ * 关闭一个弹窗
103
108
  * @type {import('./types').CloseConfirm}
104
109
  */
105
110
  const close = useMemoizedFn((...args) => {
106
111
  confirmRef.current?.close(...args);
107
112
  });
113
+
114
+ /**
115
+ * 更新弹窗的 title 和 content
116
+ * @type {import('./types').UpdateConfirm}
117
+ */
118
+ const update = useMemoizedFn((...args) => {
119
+ confirmRef.current?.update(...args);
120
+ });
108
121
  const confirmApi = {
109
122
  open,
110
- close
123
+ close,
124
+ update
111
125
  };
112
126
  return {
113
127
  confirmHolder: /*#__PURE__*/_jsx(ConfirmHolder, {
@@ -240,8 +240,6 @@ const Wrapper = styled('div', {
240
240
  .header-logo {
241
241
  display: flex;
242
242
  justify-content: center;
243
- /* logo 与 sidebar 中的 icon 垂直对齐, sidebarWidth - 24 * 2 */
244
- min-width: ${props => props.sidebarWidth - 24 * 2}px;
245
243
  }
246
244
  &.dashboard-dense {
247
245
  .header-logo {
@@ -1,6 +1,6 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import { forwardRef } from 'react';
3
- import { Box, IconButton, Typography } from '@mui/material';
3
+ import { Box, IconButton, Tooltip, Typography } from '@mui/material';
4
4
  import { Icon } from '@iconify/react';
5
5
  import LensIcon from '@iconify-icons/material-symbols/lens';
6
6
  import WalletOSIcon from '../../WalletOSIcon';
@@ -34,6 +34,7 @@ const SessionUserItem = /*#__PURE__*/forwardRef(({
34
34
  display: 'flex',
35
35
  alignItems: 'center',
36
36
  gap: 0.5,
37
+ overflow: 'hidden',
37
38
  '& .did-address-avatar': {
38
39
  display: 'none !important'
39
40
  },
@@ -63,11 +64,20 @@ const SessionUserItem = /*#__PURE__*/forwardRef(({
63
64
  sx: {
64
65
  lineHeight: 1
65
66
  }
66
- }) : sessionItem.user.email && /*#__PURE__*/_jsx(Typography, {
67
+ }) : sessionItem.user.email && /*#__PURE__*/_jsx(Tooltip, {
68
+ title: sessionItem.user.email,
67
69
  sx: {
68
- fontSize: 14
70
+ zIndex: 1600
69
71
  },
70
- children: sessionItem.user.email
72
+ placement: "top",
73
+ children: /*#__PURE__*/_jsx(Typography, {
74
+ sx: {
75
+ fontSize: 14,
76
+ overflow: 'hidden',
77
+ textOverflow: 'ellipsis'
78
+ },
79
+ children: sessionItem.user.email
80
+ })
71
81
  })]
72
82
  }), statusContent || active && /*#__PURE__*/_jsx(IconButton, {
73
83
  size: "small",
package/es/Tabs/index.js CHANGED
@@ -163,7 +163,7 @@ LineTabs.propTypes = {
163
163
 
164
164
  /**
165
165
  * @description
166
- * @param { TabsProps} props
166
+ * @param {TabsProps} props
167
167
  * @return {import('react').ReactNode}
168
168
  */
169
169
 
@@ -12,4 +12,30 @@ export const DID_PREFIX = 'did:abt:';
12
12
  export const PASSPORT_STATUS = {
13
13
  VALID: 'valid',
14
14
  REVOKED: 'revoked'
15
+ };
16
+ export const LOGIN_PROVIDER = {
17
+ // EMAIL: 'Email',
18
+ AUTH0: 'auth0',
19
+ APPLE: 'apple',
20
+ GITHUB: 'github',
21
+ GOOGLE: 'google',
22
+ WALLET: 'wallet',
23
+ NFT: 'nft'
24
+ };
25
+ export const LOGIN_PROVIDER_NAME = {
26
+ // [LOGIN_PROVIDER.EMAIL]: 'Email',
27
+ [LOGIN_PROVIDER.AUTH0]: 'Email',
28
+ [LOGIN_PROVIDER.APPLE]: 'Apple',
29
+ [LOGIN_PROVIDER.GITHUB]: 'Github',
30
+ [LOGIN_PROVIDER.GOOGLE]: 'Google',
31
+ [LOGIN_PROVIDER.WALLET]: 'DID Wallet',
32
+ [LOGIN_PROVIDER.NFT]: 'NFT'
33
+ };
34
+
35
+ // HACK: 目前这里的键值不能使用 [LOGIN_PROVIDER.AUTH0] 形式,否则会影响 ts 的 keyof typeof OAUTH_PROVIDER 来获取键值作为类型的判断
36
+ export const OAUTH_PROVIDER = {
37
+ auth0: 'Email',
38
+ apple: 'Apple',
39
+ github: 'Github',
40
+ google: 'Google'
15
41
  };
@@ -76,4 +76,16 @@ export function getApps(blocklet) {
76
76
  }
77
77
  // NOTICE: masterApp 应该排在前面
78
78
  return appList.reverse();
79
+ }
80
+ export async function getBlockletData(appUrl) {
81
+ try {
82
+ const url = new URL('__blocklet__.js', appUrl);
83
+ url.searchParams.set('type', 'json');
84
+ const res = await fetch(url.href);
85
+ const jsonData = await res.json();
86
+ return jsonData;
87
+ } catch (err) {
88
+ console.error(`Failed to get blocklet data: ${appUrl}`, err);
89
+ return null;
90
+ }
79
91
  }
@@ -5,7 +5,9 @@ import IOSRoundedIcon from '@iconify-icons/material-symbols/ios-rounded';
5
5
  import LanguageIcon from '@iconify-icons/material-symbols/language';
6
6
  import AndroidIcon from '@iconify-icons/material-symbols/android';
7
7
  import QuestionMarkRoundedIcon from '@iconify-icons/material-symbols/question-mark-rounded';
8
- import Auth0Icon from '@iconify-icons/logos/auth0-icon';
8
+ // import Auth0Icon from '@iconify-icons/logos/auth0-icon';
9
+ import MailOutlineRoundedIcon from '@iconify-icons/material-symbols/mail-outline-rounded';
10
+ import { LOGIN_PROVIDER } from '../../es/Util/constant';
9
11
  import { jsx as _jsx } from "react/jsx-runtime";
10
12
  export default function WalletOSIcon({
11
13
  loading,
@@ -21,9 +23,9 @@ export default function WalletOSIcon({
21
23
  }
22
24
  });
23
25
  }
24
- if (provider === 'auth0') {
26
+ if (provider === LOGIN_PROVIDER.AUTH0) {
25
27
  return /*#__PURE__*/_jsx(Icon, {
26
- icon: Auth0Icon,
28
+ icon: MailOutlineRoundedIcon,
27
29
  style: {
28
30
  color,
29
31
  transform: 'scale(0.85)'
@@ -48,7 +48,7 @@ const extendedColors = {
48
48
  * @typedef {{
49
49
  * rounded?: boolean,
50
50
  * loading?: boolean,
51
- * forwardedRef: import('react').ForwardedRef<any>,
51
+ * forwardedRef?: import('react').ForwardedRef<any>,
52
52
  * color?: 'default' | 'inherit' | 'primary' | 'secondary' | 'danger' | 'warning' | 'reverse' | 'did'
53
53
  * } & import('@mui/material').ButtonProps} ButtonProps
54
54
  */
@@ -41,6 +41,7 @@ const colors = {
41
41
  buttonsButtonNeutralHover: 'rgba(243, 244, 246, 1)',
42
42
  buttonsButtonInverted: 'rgba(3, 7, 18, 1)',
43
43
  buttonsButtonInvertedHover: 'rgba(17, 24, 39, 1)',
44
- buttonsButtonDanger: 'rgba(225, 29, 72, 1)'
44
+ buttonsButtonDanger: 'rgba(225, 29, 72, 1)',
45
+ red: '#FF6369'
45
46
  };
46
47
  var _default = exports.default = colors;
@@ -10,5 +10,8 @@ export type OpenConfirmProps = {
10
10
  cancelButtonText: string;
11
11
  };
12
12
 
13
+ export type UpdateConfirmProps = Partial<Pick<OpenConfirmProps, 'title' | 'content'>>;
14
+
13
15
  export type OpenConfirm = (params: OpenConfirmProps) => void;
14
16
  export type CloseConfirm = () => void;
17
+ export type UpdateConfirm = (params: UpdateConfirmProps) => void;
@@ -58,6 +58,10 @@ const ConfirmHolder = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
58
58
  reset();
59
59
  }, 300);
60
60
  });
61
+ const update = (0, _ahooks.useMemoizedFn)(params => {
62
+ if (params.title) setTitle(params.title);
63
+ if (params.content) setContent(params.content);
64
+ });
61
65
  const onCancel = (0, _ahooks.useMemoizedFn)((e, reason) => {
62
66
  close();
63
67
  state === null || state === void 0 ? void 0 : state.onCancel(e, reason);
@@ -73,9 +77,10 @@ const ConfirmHolder = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
73
77
  (0, _react.useImperativeHandle)(ref, () => {
74
78
  return {
75
79
  open,
76
- close
80
+ close,
81
+ update
77
82
  };
78
- }, [open, close]);
83
+ }, [open, close, update]);
79
84
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, _objectSpread(_objectSpread({}, props), {}, {
80
85
  open: state.show,
81
86
  title: title,
@@ -117,7 +122,7 @@ function useConfirm() {
117
122
  (_confirmRef$current = confirmRef.current) === null || _confirmRef$current === void 0 ? void 0 : _confirmRef$current.open(...args);
118
123
  });
119
124
  /**
120
- * 挂你不一个弹窗
125
+ * 关闭一个弹窗
121
126
  * @type {import('./types').CloseConfirm}
122
127
  */
123
128
  const close = (0, _ahooks.useMemoizedFn)(function () {
@@ -127,9 +132,22 @@ function useConfirm() {
127
132
  }
128
133
  (_confirmRef$current2 = confirmRef.current) === null || _confirmRef$current2 === void 0 ? void 0 : _confirmRef$current2.close(...args);
129
134
  });
135
+
136
+ /**
137
+ * 更新弹窗的 title 和 content
138
+ * @type {import('./types').UpdateConfirm}
139
+ */
140
+ const update = (0, _ahooks.useMemoizedFn)(function () {
141
+ var _confirmRef$current3;
142
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
143
+ args[_key3] = arguments[_key3];
144
+ }
145
+ (_confirmRef$current3 = confirmRef.current) === null || _confirmRef$current3 === void 0 ? void 0 : _confirmRef$current3.update(...args);
146
+ });
130
147
  const confirmApi = {
131
148
  open,
132
- close
149
+ close,
150
+ update
133
151
  };
134
152
  return {
135
153
  confirmHolder: /*#__PURE__*/(0, _jsxRuntime.jsx)(ConfirmHolder, _objectSpread(_objectSpread({}, props), {}, {
@@ -212,7 +212,7 @@ Dashboard.defaultProps = {
212
212
  };
213
213
  const Wrapper = (0, _Theme.styled)('div', {
214
214
  shouldForwardProp: prop => prop !== 'sidebarWidth'
215
- })(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n &.dashboard {\n display: flex;\n flex-direction: column;\n height: 100vh;\n }\n .dashboard-body {\n overflow: hidden;\n flex: 1;\n }\n .dashboard-sidebar {\n box-sizing: border-box;\n flex: 0 0 auto;\n width: ", "px;\n overflow: hidden;\n &:hover {\n overflow-y: auto;\n }\n }\n .dashboard-sidebar-container {\n width: ", "px;\n }\n .dashboard-main {\n display: flex;\n flex-direction: column;\n overflow: auto;\n flex: 1;\n position: relative;\n }\n .dashboard-content {\n flex: 1;\n }\n &.dashboard-dense {\n .dashboard-header {\n border-bottom: 1px solid #eee;\n }\n .dashboard-sidebar {\n width: 256px;\n border-right: 1px solid #eee;\n }\n }\n ", " {\n .header-logo {\n display: flex;\n justify-content: center;\n /* logo \u4E0E sidebar \u4E2D\u7684 icon \u5782\u76F4\u5BF9\u9F50, sidebarWidth - 24 * 2 */\n min-width: ", "px;\n }\n &.dashboard-dense {\n .header-logo {\n /* dense = true \u65F6 logo \u4E0E sidenav icons \u4E0D\u9700\u8981\u5BF9\u9F50 */\n width: auto;\n }\n }\n }\n"])), props => props.sidebarWidth, props => props.sidebarWidth, props => props.theme.breakpoints.up('md'), props => props.sidebarWidth - 24 * 2);
215
+ })(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n &.dashboard {\n display: flex;\n flex-direction: column;\n height: 100vh;\n }\n .dashboard-body {\n overflow: hidden;\n flex: 1;\n }\n .dashboard-sidebar {\n box-sizing: border-box;\n flex: 0 0 auto;\n width: ", "px;\n overflow: hidden;\n &:hover {\n overflow-y: auto;\n }\n }\n .dashboard-sidebar-container {\n width: ", "px;\n }\n .dashboard-main {\n display: flex;\n flex-direction: column;\n overflow: auto;\n flex: 1;\n position: relative;\n }\n .dashboard-content {\n flex: 1;\n }\n &.dashboard-dense {\n .dashboard-header {\n border-bottom: 1px solid #eee;\n }\n .dashboard-sidebar {\n width: 256px;\n border-right: 1px solid #eee;\n }\n }\n ", " {\n .header-logo {\n display: flex;\n justify-content: center;\n }\n &.dashboard-dense {\n .header-logo {\n /* dense = true \u65F6 logo \u4E0E sidenav icons \u4E0D\u9700\u8981\u5BF9\u9F50 */\n width: auto;\n }\n }\n }\n"])), props => props.sidebarWidth, props => props.sidebarWidth, props => props.theme.breakpoints.up('md'));
216
216
  const StyledUxHeader = (0, _Theme.styled)(_Header.ResponsiveHeader)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n .header-container {\n max-width: 100%;\n }\n"])));
217
217
 
218
218
  // 兼容旧版 dashboard
@@ -48,6 +48,7 @@ const SessionUserItem = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
48
48
  display: 'flex',
49
49
  alignItems: 'center',
50
50
  gap: 0.5,
51
+ overflow: 'hidden',
51
52
  '& .did-address-avatar': {
52
53
  display: 'none !important'
53
54
  },
@@ -77,11 +78,20 @@ const SessionUserItem = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
77
78
  sx: {
78
79
  lineHeight: 1
79
80
  }
80
- }) : sessionItem.user.email && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
81
+ }) : sessionItem.user.email && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Tooltip, {
82
+ title: sessionItem.user.email,
81
83
  sx: {
82
- fontSize: 14
84
+ zIndex: 1600
83
85
  },
84
- children: sessionItem.user.email
86
+ placement: "top",
87
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
88
+ sx: {
89
+ fontSize: 14,
90
+ overflow: 'hidden',
91
+ textOverflow: 'ellipsis'
92
+ },
93
+ children: sessionItem.user.email
94
+ })
85
95
  })]
86
96
  }), statusContent || active && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.IconButton, {
87
97
  size: "small",
package/lib/Tabs/index.js CHANGED
@@ -183,7 +183,7 @@ LineTabs.propTypes = {
183
183
 
184
184
  /**
185
185
  * @description
186
- * @param { TabsProps} props
186
+ * @param {TabsProps} props
187
187
  * @return {import('react').ReactNode}
188
188
  */
189
189
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SESSION_TOKEN_STORAGE_KEY = exports.RELAY_SOCKET_PREFIX = exports.REFRESH_TOKEN_STORAGE_KEY = exports.PROFILE_URL = exports.PASSPORT_STATUS = exports.NAVIGATION_URL = exports.DID_PREFIX = exports.DEFAULT_WINDOW_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.DASHBOARD_URL = exports.AUTH_SERVICE_PREFIX = exports.API_DID_PREFIX = void 0;
6
+ exports.SESSION_TOKEN_STORAGE_KEY = exports.RELAY_SOCKET_PREFIX = exports.REFRESH_TOKEN_STORAGE_KEY = exports.PROFILE_URL = exports.PASSPORT_STATUS = exports.OAUTH_PROVIDER = exports.NAVIGATION_URL = exports.LOGIN_PROVIDER_NAME = exports.LOGIN_PROVIDER = exports.DID_PREFIX = exports.DEFAULT_WINDOW_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.DASHBOARD_URL = exports.AUTH_SERVICE_PREFIX = exports.API_DID_PREFIX = void 0;
7
7
  const DEFAULT_TIMEOUT = exports.DEFAULT_TIMEOUT = 5 * 60;
8
8
  const DEFAULT_WINDOW_TIMEOUT = exports.DEFAULT_WINDOW_TIMEOUT = 30 * 60;
9
9
  const AUTH_SERVICE_PREFIX = exports.AUTH_SERVICE_PREFIX = '/.well-known/service';
@@ -18,4 +18,30 @@ const DID_PREFIX = exports.DID_PREFIX = 'did:abt:';
18
18
  const PASSPORT_STATUS = exports.PASSPORT_STATUS = {
19
19
  VALID: 'valid',
20
20
  REVOKED: 'revoked'
21
+ };
22
+ const LOGIN_PROVIDER = exports.LOGIN_PROVIDER = {
23
+ // EMAIL: 'Email',
24
+ AUTH0: 'auth0',
25
+ APPLE: 'apple',
26
+ GITHUB: 'github',
27
+ GOOGLE: 'google',
28
+ WALLET: 'wallet',
29
+ NFT: 'nft'
30
+ };
31
+ const LOGIN_PROVIDER_NAME = exports.LOGIN_PROVIDER_NAME = {
32
+ // [LOGIN_PROVIDER.EMAIL]: 'Email',
33
+ [LOGIN_PROVIDER.AUTH0]: 'Email',
34
+ [LOGIN_PROVIDER.APPLE]: 'Apple',
35
+ [LOGIN_PROVIDER.GITHUB]: 'Github',
36
+ [LOGIN_PROVIDER.GOOGLE]: 'Google',
37
+ [LOGIN_PROVIDER.WALLET]: 'DID Wallet',
38
+ [LOGIN_PROVIDER.NFT]: 'NFT'
39
+ };
40
+
41
+ // HACK: 目前这里的键值不能使用 [LOGIN_PROVIDER.AUTH0] 形式,否则会影响 ts 的 keyof typeof OAUTH_PROVIDER 来获取键值作为类型的判断
42
+ const OAUTH_PROVIDER = exports.OAUTH_PROVIDER = {
43
+ auth0: 'Email',
44
+ apple: 'Apple',
45
+ github: 'Github',
46
+ google: 'Google'
21
47
  };
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getApps = getApps;
7
+ exports.getBlockletData = getBlockletData;
7
8
  exports.getConfig = getConfig;
8
9
  exports.getCurrentApp = getCurrentApp;
9
10
  exports.getFederatedApp = getFederatedApp;
@@ -97,4 +98,16 @@ function getApps(blocklet) {
97
98
  }
98
99
  // NOTICE: masterApp 应该排在前面
99
100
  return appList.reverse();
101
+ }
102
+ async function getBlockletData(appUrl) {
103
+ try {
104
+ const url = new URL('__blocklet__.js', appUrl);
105
+ url.searchParams.set('type', 'json');
106
+ const res = await fetch(url.href);
107
+ const jsonData = await res.json();
108
+ return jsonData;
109
+ } catch (err) {
110
+ console.error("Failed to get blocklet data: ".concat(appUrl), err);
111
+ return null;
112
+ }
100
113
  }
@@ -11,9 +11,12 @@ var _iosRounded = _interopRequireDefault(require("@iconify-icons/material-symbol
11
11
  var _language = _interopRequireDefault(require("@iconify-icons/material-symbols/language"));
12
12
  var _android = _interopRequireDefault(require("@iconify-icons/material-symbols/android"));
13
13
  var _questionMarkRounded = _interopRequireDefault(require("@iconify-icons/material-symbols/question-mark-rounded"));
14
- var _auth0Icon = _interopRequireDefault(require("@iconify-icons/logos/auth0-icon"));
14
+ var _mailOutlineRounded = _interopRequireDefault(require("@iconify-icons/material-symbols/mail-outline-rounded"));
15
+ var _constant = require("../../es/Util/constant");
15
16
  var _jsxRuntime = require("react/jsx-runtime");
16
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ // import Auth0Icon from '@iconify-icons/logos/auth0-icon';
19
+
17
20
  function WalletOSIcon(_ref) {
18
21
  let {
19
22
  loading,
@@ -29,9 +32,9 @@ function WalletOSIcon(_ref) {
29
32
  }
30
33
  });
31
34
  }
32
- if (provider === 'auth0') {
35
+ if (provider === _constant.LOGIN_PROVIDER.AUTH0) {
33
36
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Icon, {
34
- icon: _auth0Icon.default,
37
+ icon: _mailOutlineRounded.default,
35
38
  style: {
36
39
  color,
37
40
  transform: 'scale(0.85)'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.9.66",
3
+ "version": "2.9.68",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -358,12 +358,12 @@
358
358
  "@mui/material": "^5.15.0",
359
359
  "react": ">=18.2.0"
360
360
  },
361
- "gitHead": "97e0dafc5e7ab2a2a25942a145f4211e3ec01a5e",
361
+ "gitHead": "854f02504df5792faf8f9683fc6292a357559ee5",
362
362
  "dependencies": {
363
363
  "@arcblock/did-motif": "^1.1.13",
364
- "@arcblock/icons": "^2.9.66",
365
- "@arcblock/nft-display": "^2.9.66",
366
- "@arcblock/react-hooks": "^2.9.66",
364
+ "@arcblock/icons": "^2.9.68",
365
+ "@arcblock/nft-display": "^2.9.68",
366
+ "@arcblock/react-hooks": "^2.9.68",
367
367
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
368
368
  "@emotion/react": "^11.10.4",
369
369
  "@emotion/styled": "^11.10.4",
@@ -22,7 +22,7 @@ const extendedColors = {
22
22
  * @typedef {{
23
23
  * rounded?: boolean,
24
24
  * loading?: boolean,
25
- * forwardedRef: import('react').ForwardedRef<any>,
25
+ * forwardedRef?: import('react').ForwardedRef<any>,
26
26
  * color?: 'default' | 'inherit' | 'primary' | 'secondary' | 'danger' | 'warning' | 'reverse' | 'did'
27
27
  * } & import('@mui/material').ButtonProps} ButtonProps
28
28
  */
@@ -41,6 +41,8 @@ const colors = {
41
41
  buttonsButtonInverted: 'rgba(3, 7, 18, 1)',
42
42
  buttonsButtonInvertedHover: 'rgba(17, 24, 39, 1)',
43
43
  buttonsButtonDanger: 'rgba(225, 29, 72, 1)',
44
+
45
+ red: '#FF6369',
44
46
  };
45
47
 
46
48
  export default colors;
@@ -10,5 +10,8 @@ export type OpenConfirmProps = {
10
10
  cancelButtonText: string;
11
11
  };
12
12
 
13
+ export type UpdateConfirmProps = Partial<Pick<OpenConfirmProps, 'title' | 'content'>>;
14
+
13
15
  export type OpenConfirm = (params: OpenConfirmProps) => void;
14
16
  export type CloseConfirm = () => void;
17
+ export type UpdateConfirm = (params: UpdateConfirmProps) => void;
@@ -46,6 +46,10 @@ const ConfirmHolder = forwardRef((props, ref) => {
46
46
  reset();
47
47
  }, 300);
48
48
  });
49
+ const update = useMemoizedFn((params) => {
50
+ if (params.title) setTitle(params.title);
51
+ if (params.content) setContent(params.content);
52
+ });
49
53
  const onCancel = useMemoizedFn((e, reason) => {
50
54
  close();
51
55
  state?.onCancel(e, reason);
@@ -64,9 +68,10 @@ const ConfirmHolder = forwardRef((props, ref) => {
64
68
  return {
65
69
  open,
66
70
  close,
71
+ update,
67
72
  };
68
73
  },
69
- [open, close]
74
+ [open, close, update]
70
75
  );
71
76
 
72
77
  return (
@@ -109,15 +114,24 @@ export default function useConfirm(props = {}) {
109
114
  confirmRef.current?.open(...args);
110
115
  });
111
116
  /**
112
- * 挂你不一个弹窗
117
+ * 关闭一个弹窗
113
118
  * @type {import('./types').CloseConfirm}
114
119
  */
115
120
  const close = useMemoizedFn((...args) => {
116
121
  confirmRef.current?.close(...args);
117
122
  });
123
+
124
+ /**
125
+ * 更新弹窗的 title 和 content
126
+ * @type {import('./types').UpdateConfirm}
127
+ */
128
+ const update = useMemoizedFn((...args) => {
129
+ confirmRef.current?.update(...args);
130
+ });
118
131
  const confirmApi = {
119
132
  open,
120
133
  close,
134
+ update,
121
135
  };
122
136
 
123
137
  return {
@@ -207,8 +207,6 @@ const Wrapper = styled('div', {
207
207
  .header-logo {
208
208
  display: flex;
209
209
  justify-content: center;
210
- /* logo 与 sidebar 中的 icon 垂直对齐, sidebarWidth - 24 * 2 */
211
- min-width: ${(props) => props.sidebarWidth - 24 * 2}px;
212
210
  }
213
211
  &.dashboard-dense {
214
212
  .header-logo {
@@ -1,6 +1,6 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import { forwardRef } from 'react';
3
- import { Box, IconButton, Typography } from '@mui/material';
3
+ import { Box, IconButton, Tooltip, Typography } from '@mui/material';
4
4
  import { Icon } from '@iconify/react';
5
5
  import LensIcon from '@iconify-icons/material-symbols/lens';
6
6
 
@@ -31,6 +31,7 @@ const SessionUserItem = forwardRef(({ sessionItem, statusContent, active, ...res
31
31
  display: 'flex',
32
32
  alignItems: 'center',
33
33
  gap: 0.5,
34
+ overflow: 'hidden',
34
35
  '& .did-address-avatar': {
35
36
  display: 'none !important',
36
37
  },
@@ -49,7 +50,23 @@ const SessionUserItem = forwardRef(({ sessionItem, statusContent, active, ...res
49
50
  {isRawWalletAccount ? (
50
51
  <DID did={sessionItem.userDid} copyable={false} size={14} responsive={false} compact sx={{ lineHeight: 1 }} />
51
52
  ) : (
52
- sessionItem.user.email && <Typography sx={{ fontSize: 14 }}>{sessionItem.user.email}</Typography>
53
+ sessionItem.user.email && (
54
+ <Tooltip
55
+ title={sessionItem.user.email}
56
+ sx={{
57
+ zIndex: 1600,
58
+ }}
59
+ placement="top">
60
+ <Typography
61
+ sx={{
62
+ fontSize: 14,
63
+ overflow: 'hidden',
64
+ textOverflow: 'ellipsis',
65
+ }}>
66
+ {sessionItem.user.email}
67
+ </Typography>
68
+ </Tooltip>
69
+ )
53
70
  )}
54
71
  </Box>
55
72
  {statusContent ||
@@ -157,7 +157,7 @@ LineTabs.propTypes = {
157
157
 
158
158
  /**
159
159
  * @description
160
- * @param { TabsProps} props
160
+ * @param {TabsProps} props
161
161
  * @return {import('react').ReactNode}
162
162
  */
163
163
 
@@ -17,3 +17,31 @@ export const PASSPORT_STATUS = {
17
17
  VALID: 'valid',
18
18
  REVOKED: 'revoked',
19
19
  };
20
+
21
+ export const LOGIN_PROVIDER = {
22
+ // EMAIL: 'Email',
23
+ AUTH0: 'auth0',
24
+ APPLE: 'apple',
25
+ GITHUB: 'github',
26
+ GOOGLE: 'google',
27
+ WALLET: 'wallet',
28
+ NFT: 'nft',
29
+ };
30
+
31
+ export const LOGIN_PROVIDER_NAME = {
32
+ // [LOGIN_PROVIDER.EMAIL]: 'Email',
33
+ [LOGIN_PROVIDER.AUTH0]: 'Email',
34
+ [LOGIN_PROVIDER.APPLE]: 'Apple',
35
+ [LOGIN_PROVIDER.GITHUB]: 'Github',
36
+ [LOGIN_PROVIDER.GOOGLE]: 'Google',
37
+ [LOGIN_PROVIDER.WALLET]: 'DID Wallet',
38
+ [LOGIN_PROVIDER.NFT]: 'NFT',
39
+ };
40
+
41
+ // HACK: 目前这里的键值不能使用 [LOGIN_PROVIDER.AUTH0] 形式,否则会影响 ts 的 keyof typeof OAUTH_PROVIDER 来获取键值作为类型的判断
42
+ export const OAUTH_PROVIDER = {
43
+ auth0: 'Email',
44
+ apple: 'Apple',
45
+ github: 'Github',
46
+ google: 'Google',
47
+ };
@@ -88,3 +88,16 @@ export function getApps(blocklet) {
88
88
  // NOTICE: masterApp 应该排在前面
89
89
  return appList.reverse();
90
90
  }
91
+
92
+ export async function getBlockletData(appUrl) {
93
+ try {
94
+ const url = new URL('__blocklet__.js', appUrl);
95
+ url.searchParams.set('type', 'json');
96
+ const res = await fetch(url.href);
97
+ const jsonData = await res.json();
98
+ return jsonData;
99
+ } catch (err) {
100
+ console.error(`Failed to get blocklet data: ${appUrl}`, err);
101
+ return null;
102
+ }
103
+ }
@@ -5,15 +5,17 @@ import IOSRoundedIcon from '@iconify-icons/material-symbols/ios-rounded';
5
5
  import LanguageIcon from '@iconify-icons/material-symbols/language';
6
6
  import AndroidIcon from '@iconify-icons/material-symbols/android';
7
7
  import QuestionMarkRoundedIcon from '@iconify-icons/material-symbols/question-mark-rounded';
8
- import Auth0Icon from '@iconify-icons/logos/auth0-icon';
8
+ // import Auth0Icon from '@iconify-icons/logos/auth0-icon';
9
+ import MailOutlineRoundedIcon from '@iconify-icons/material-symbols/mail-outline-rounded';
10
+ import { LOGIN_PROVIDER } from '../../es/Util/constant';
9
11
 
10
12
  export default function WalletOSIcon({ loading, walletOS, provider, color }) {
11
13
  if (loading) {
12
14
  return <Icon icon={QuestionMarkRoundedIcon} style={{ color: 'transparent' }} />;
13
15
  }
14
16
 
15
- if (provider === 'auth0') {
16
- return <Icon icon={Auth0Icon} style={{ color, transform: 'scale(0.85)' }} />;
17
+ if (provider === LOGIN_PROVIDER.AUTH0) {
18
+ return <Icon icon={MailOutlineRoundedIcon} style={{ color, transform: 'scale(0.85)' }} />;
17
19
  }
18
20
  if (walletOS === 'ios') {
19
21
  return <Icon icon={IOSRoundedIcon} style={{ color, transform: 'scale(1.1)' }} />;
File without changes
File without changes