@arcblock/ux 2.10.43 → 2.10.44
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/lib/Address/compact-text.d.ts +3 -1
- package/lib/Address/compact-text.js +2 -1
- package/lib/Address/did-address.d.ts +22 -3
- package/lib/Address/did-address.js +37 -59
- package/lib/Address/index.d.ts +4 -13
- package/lib/Address/index.js +10 -13
- package/lib/Address/responsive-did-address.d.ts +8 -22
- package/lib/Address/responsive-did-address.js +15 -19
- package/lib/BlockletV2/blocklet.js +1 -0
- package/lib/BlockletV2/components/icon-text.d.ts +3 -1
- package/lib/BlockletV2/components/icon-text.js +4 -3
- package/lib/DID/index.d.ts +25 -22
- package/lib/DID/index.js +56 -60
- package/lib/type.d.ts +1 -0
- package/package.json +5 -5
- package/src/Address/compact-text.jsx +2 -1
- package/src/Address/did-address.tsx +215 -0
- package/src/Address/index.tsx +18 -0
- package/src/Address/responsive-did-address.tsx +90 -0
- package/src/BlockletV2/blocklet.tsx +3 -1
- package/src/BlockletV2/components/icon-text.tsx +8 -2
- package/src/DID/{index.jsx → index.tsx} +90 -58
- package/src/type.d.ts +1 -0
- package/src/Address/did-address.jsx +0 -220
- package/src/Address/index.jsx +0 -18
- package/src/Address/responsive-did-address.jsx +0 -79
|
@@ -11,7 +11,7 @@ declare namespace CompactText {
|
|
|
11
11
|
namespace propTypes {
|
|
12
12
|
let startChars: PropTypes.Requireable<number>;
|
|
13
13
|
let endChars: PropTypes.Requireable<number>;
|
|
14
|
-
let children: PropTypes.
|
|
14
|
+
let children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
15
15
|
let showCopyButtonInTooltip: PropTypes.Requireable<boolean>;
|
|
16
16
|
}
|
|
17
17
|
namespace defaultProps {
|
|
@@ -19,6 +19,8 @@ declare namespace CompactText {
|
|
|
19
19
|
export { startChars_1 as startChars };
|
|
20
20
|
let endChars_1: number;
|
|
21
21
|
export { endChars_1 as endChars };
|
|
22
|
+
let children_1: null;
|
|
23
|
+
export { children_1 as children };
|
|
22
24
|
let showCopyButtonInTooltip_1: boolean;
|
|
23
25
|
export { showCopyButtonInTooltip_1 as showCopyButtonInTooltip };
|
|
24
26
|
}
|
|
@@ -93,12 +93,13 @@ export default function CompactText({
|
|
|
93
93
|
CompactText.propTypes = {
|
|
94
94
|
startChars: PropTypes.number,
|
|
95
95
|
endChars: PropTypes.number,
|
|
96
|
-
children: PropTypes.node
|
|
96
|
+
children: PropTypes.node,
|
|
97
97
|
// 在 tooltip 中完整地址后显示复制按钮
|
|
98
98
|
showCopyButtonInTooltip: PropTypes.bool
|
|
99
99
|
};
|
|
100
100
|
CompactText.defaultProps = {
|
|
101
101
|
startChars: 6,
|
|
102
102
|
endChars: 6,
|
|
103
|
+
children: null,
|
|
103
104
|
showCopyButtonInTooltip: false
|
|
104
105
|
};
|
|
@@ -1,4 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
import '@fontsource/ubuntu-mono/400.css';
|
|
2
|
+
import { BoxProps } from '@mui/material';
|
|
3
|
+
import React, { ReactNode } from 'react';
|
|
4
|
+
export interface HTMLDidAddressElement extends HTMLDivElement {
|
|
5
|
+
copy: () => void;
|
|
6
|
+
}
|
|
7
|
+
export interface IDidAddressProps extends BoxProps {
|
|
8
|
+
component?: React.ElementType;
|
|
9
|
+
size?: number;
|
|
10
|
+
copyable?: boolean;
|
|
11
|
+
showCopyButtonInTooltip?: boolean;
|
|
12
|
+
content?: string;
|
|
13
|
+
inline?: boolean;
|
|
14
|
+
prepend?: ReactNode;
|
|
15
|
+
append?: ReactNode;
|
|
16
|
+
compact?: boolean;
|
|
17
|
+
startChars?: number;
|
|
18
|
+
endChars?: number;
|
|
19
|
+
locale?: 'en' | 'zh';
|
|
20
|
+
}
|
|
2
21
|
/**
|
|
3
22
|
* DidAddress 组件 (新版设计)
|
|
4
23
|
*
|
|
@@ -12,5 +31,5 @@ export default DidAddress;
|
|
|
12
31
|
* - 为保证 copy 功能正常工作, 原 children 始终渲染, 但在紧凑式下会隐藏
|
|
13
32
|
* - 可配合 useMediaQuery 使用
|
|
14
33
|
*/
|
|
15
|
-
declare const DidAddress: React.ForwardRefExoticComponent<React.RefAttributes<
|
|
16
|
-
|
|
34
|
+
declare const DidAddress: React.ForwardRefExoticComponent<Omit<IDidAddressProps, "ref"> & React.RefAttributes<HTMLDidAddressElement>>;
|
|
35
|
+
export default DidAddress;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, { useRef, useState, forwardRef } from 'react';
|
|
3
|
-
import PropTypes from 'prop-types';
|
|
4
2
|
import '@fontsource/ubuntu-mono/400.css';
|
|
3
|
+
import { Check as CheckIcon, ContentCopy as CopyIcon } from '@mui/icons-material';
|
|
4
|
+
import { Box, Tooltip } from '@mui/material';
|
|
5
5
|
import { green } from '@mui/material/colors';
|
|
6
|
-
import { Tooltip, Box } from '@mui/material';
|
|
7
6
|
import copy from 'copy-to-clipboard';
|
|
8
|
-
import { ContentCopy as CopyIcon, Check as CheckIcon } from '@mui/icons-material';
|
|
9
7
|
import noop from 'lodash/noop';
|
|
8
|
+
import React, { forwardRef, useImperativeHandle, useRef, useState } from 'react';
|
|
10
9
|
import { styled } from '../Theme';
|
|
11
10
|
import { getFontSize } from '../Util';
|
|
12
11
|
import CompactText from './compact-text';
|
|
@@ -20,7 +19,6 @@ const translations = {
|
|
|
20
19
|
copied: '已复制!'
|
|
21
20
|
}
|
|
22
21
|
};
|
|
23
|
-
|
|
24
22
|
/**
|
|
25
23
|
* DidAddress 组件 (新版设计)
|
|
26
24
|
*
|
|
@@ -34,37 +32,49 @@ const translations = {
|
|
|
34
32
|
* - 为保证 copy 功能正常工作, 原 children 始终渲染, 但在紧凑式下会隐藏
|
|
35
33
|
* - 可配合 useMediaQuery 使用
|
|
36
34
|
*/
|
|
37
|
-
const DidAddress = /*#__PURE__*/forwardRef(({
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
35
|
+
const DidAddress = /*#__PURE__*/forwardRef((props, ref) => {
|
|
36
|
+
const {
|
|
37
|
+
component = 'span',
|
|
38
|
+
size = 0,
|
|
39
|
+
copyable = true,
|
|
40
|
+
showCopyButtonInTooltip = false,
|
|
41
|
+
children = null,
|
|
42
|
+
content = '',
|
|
43
|
+
prepend = null,
|
|
44
|
+
append = null,
|
|
45
|
+
compact = false,
|
|
46
|
+
startChars = 6,
|
|
47
|
+
endChars = 6,
|
|
48
|
+
locale: originalLocale = 'en',
|
|
49
|
+
...rest
|
|
50
|
+
} = props;
|
|
51
|
+
let locale = originalLocale;
|
|
52
52
|
if (!translations[locale]) {
|
|
53
|
-
// eslint-disable-next-line no-param-reassign
|
|
54
53
|
locale = 'en';
|
|
55
54
|
}
|
|
56
55
|
const [copied, setCopied] = useState(false);
|
|
57
|
-
const textRef = useRef();
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
copy(content || textRef.current.textContent);
|
|
56
|
+
const textRef = useRef(null);
|
|
57
|
+
const rootRef = useRef(null);
|
|
58
|
+
const handleCopy = () => {
|
|
59
|
+
copy(content || textRef.current?.textContent || '');
|
|
62
60
|
setCopied(true);
|
|
63
61
|
// 恢复 copied 状态
|
|
64
62
|
setTimeout(() => {
|
|
65
63
|
setCopied(false);
|
|
66
64
|
}, 1500);
|
|
67
65
|
};
|
|
66
|
+
const onCopy = e => {
|
|
67
|
+
e.stopPropagation();
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
handleCopy();
|
|
70
|
+
};
|
|
71
|
+
useImperativeHandle(ref, () => new Proxy({
|
|
72
|
+
copy: handleCopy
|
|
73
|
+
}, {
|
|
74
|
+
get(target, key) {
|
|
75
|
+
return target[key] || rootRef.current?.[key];
|
|
76
|
+
}
|
|
77
|
+
}));
|
|
68
78
|
let copyElement = null;
|
|
69
79
|
if (copyable) {
|
|
70
80
|
copyElement = /*#__PURE__*/_jsx("span", {
|
|
@@ -94,7 +104,7 @@ const DidAddress = /*#__PURE__*/forwardRef(({
|
|
|
94
104
|
as: component,
|
|
95
105
|
size: size,
|
|
96
106
|
...rest,
|
|
97
|
-
ref:
|
|
107
|
+
ref: rootRef,
|
|
98
108
|
children: [prepend, /*#__PURE__*/_jsx(Box, {
|
|
99
109
|
sx: {
|
|
100
110
|
display: 'none'
|
|
@@ -133,38 +143,6 @@ const DidAddress = /*#__PURE__*/forwardRef(({
|
|
|
133
143
|
});
|
|
134
144
|
});
|
|
135
145
|
export default DidAddress;
|
|
136
|
-
DidAddress.propTypes = {
|
|
137
|
-
component: PropTypes.string,
|
|
138
|
-
size: PropTypes.number,
|
|
139
|
-
copyable: PropTypes.bool,
|
|
140
|
-
// compact mode 下, hover 时会在 tooltip 中显示完整地址, showCopyButtonInTooltip = true 时会在完整地址后显示一个复制按钮
|
|
141
|
-
showCopyButtonInTooltip: PropTypes.bool,
|
|
142
|
-
children: PropTypes.any,
|
|
143
|
-
content: PropTypes.string,
|
|
144
|
-
inline: PropTypes.bool,
|
|
145
|
-
prepend: PropTypes.any,
|
|
146
|
-
append: PropTypes.any,
|
|
147
|
-
// 紧凑模式
|
|
148
|
-
compact: PropTypes.bool,
|
|
149
|
-
startChars: PropTypes.number,
|
|
150
|
-
endChars: PropTypes.number,
|
|
151
|
-
locale: PropTypes.oneOf(['en', 'zh'])
|
|
152
|
-
};
|
|
153
|
-
DidAddress.defaultProps = {
|
|
154
|
-
component: 'span',
|
|
155
|
-
size: 0,
|
|
156
|
-
copyable: true,
|
|
157
|
-
showCopyButtonInTooltip: false,
|
|
158
|
-
children: null,
|
|
159
|
-
content: '',
|
|
160
|
-
inline: false,
|
|
161
|
-
prepend: null,
|
|
162
|
-
append: null,
|
|
163
|
-
compact: false,
|
|
164
|
-
startChars: 6,
|
|
165
|
-
endChars: 6,
|
|
166
|
-
locale: 'en'
|
|
167
|
-
};
|
|
168
146
|
const Root = styled(Box, {
|
|
169
147
|
shouldForwardProp: prop => prop !== 'inline'
|
|
170
148
|
})`
|
package/lib/Address/index.d.ts
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
responsive
|
|
4
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
5
|
-
declare namespace DidAddressWrapper {
|
|
6
|
-
namespace propTypes {
|
|
7
|
-
let responsive: PropTypes.Requireable<boolean>;
|
|
8
|
-
}
|
|
9
|
-
namespace defaultProps {
|
|
10
|
-
let responsive_1: boolean;
|
|
11
|
-
export { responsive_1 as responsive };
|
|
12
|
-
}
|
|
1
|
+
import { HTMLDidAddressElement, IDidAddressProps } from './did-address';
|
|
2
|
+
export interface IDidAddressWrapper extends IDidAddressProps {
|
|
3
|
+
responsive?: boolean;
|
|
13
4
|
}
|
|
5
|
+
declare const DidAddressWrapper: import("react").ForwardRefExoticComponent<Omit<IDidAddressWrapper, "ref"> & import("react").RefAttributes<HTMLDidAddressElement>>;
|
|
14
6
|
export default DidAddressWrapper;
|
|
15
|
-
import PropTypes from 'prop-types';
|
package/lib/Address/index.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
3
|
import DidAddress from './did-address';
|
|
4
4
|
import ResponsiveDidAddress from './responsive-did-address';
|
|
5
|
-
|
|
6
|
-
responsive,
|
|
5
|
+
const DidAddressWrapper = /*#__PURE__*/forwardRef(({
|
|
6
|
+
responsive = true,
|
|
7
7
|
...rest
|
|
8
|
-
}) {
|
|
8
|
+
}, ref) => {
|
|
9
9
|
if (responsive) {
|
|
10
10
|
return /*#__PURE__*/_jsx(ResponsiveDidAddress, {
|
|
11
|
-
...rest
|
|
11
|
+
...rest,
|
|
12
|
+
ref: ref
|
|
12
13
|
});
|
|
13
14
|
}
|
|
14
15
|
return /*#__PURE__*/_jsx(DidAddress, {
|
|
15
|
-
...rest
|
|
16
|
+
...rest,
|
|
17
|
+
ref: ref
|
|
16
18
|
});
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
responsive: PropTypes.bool
|
|
20
|
-
};
|
|
21
|
-
DidAddressWrapper.defaultProps = {
|
|
22
|
-
responsive: true
|
|
23
|
-
};
|
|
19
|
+
});
|
|
20
|
+
export default DidAddressWrapper;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { HTMLDidAddressElement, IDidAddressProps } from './did-address';
|
|
1
3
|
/**
|
|
2
4
|
* 根据父容器宽度自动切换 compact 模式
|
|
3
5
|
*
|
|
@@ -8,26 +10,10 @@
|
|
|
8
10
|
* - 监听容器宽度变化, 当容器宽度变化时, 对比容器宽度和 did address full-width, => 切换 compact 模式
|
|
9
11
|
* - TODO: 初始化时, 在确定是否应该以 compact 模式渲染前, 隐藏显示, 避免闪烁问题
|
|
10
12
|
*/
|
|
11
|
-
declare
|
|
12
|
-
[x: string]: any;
|
|
13
|
-
style: any;
|
|
14
|
-
className: any;
|
|
15
|
-
component: any;
|
|
16
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
-
declare namespace ResponsiveDidAddress {
|
|
18
|
-
namespace propTypes {
|
|
19
|
-
let style: PropTypes.Requireable<object>;
|
|
20
|
-
let className: PropTypes.Requireable<string>;
|
|
21
|
-
let component: PropTypes.Requireable<string>;
|
|
22
|
-
}
|
|
23
|
-
namespace defaultProps {
|
|
24
|
-
let style_1: {};
|
|
25
|
-
export { style_1 as style };
|
|
26
|
-
let className_1: string;
|
|
27
|
-
export { className_1 as className };
|
|
28
|
-
let component_1: string;
|
|
29
|
-
export { component_1 as component };
|
|
30
|
-
}
|
|
31
|
-
}
|
|
13
|
+
declare const ResponsiveDidAddress: React.ForwardRefExoticComponent<Omit<IResponsiveDidAddressProps, "ref"> & React.RefAttributes<HTMLDidAddressElement>>;
|
|
32
14
|
export default ResponsiveDidAddress;
|
|
33
|
-
|
|
15
|
+
export interface IResponsiveDidAddressProps extends IDidAddressProps {
|
|
16
|
+
style?: React.CSSProperties;
|
|
17
|
+
className?: string;
|
|
18
|
+
component?: React.ElementType;
|
|
19
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState, createRef, useEffect, useRef } from 'react';
|
|
3
|
-
import PropTypes from 'prop-types';
|
|
4
2
|
import { useSize } from 'ahooks';
|
|
3
|
+
import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
5
4
|
import { styled } from '../Theme';
|
|
6
5
|
import DidAddress from './did-address';
|
|
7
6
|
|
|
@@ -15,23 +14,29 @@ import DidAddress from './did-address';
|
|
|
15
14
|
* - 监听容器宽度变化, 当容器宽度变化时, 对比容器宽度和 did address full-width, => 切换 compact 模式
|
|
16
15
|
* - TODO: 初始化时, 在确定是否应该以 compact 模式渲染前, 隐藏显示, 避免闪烁问题
|
|
17
16
|
*/
|
|
18
|
-
|
|
17
|
+
const ResponsiveDidAddress = /*#__PURE__*/forwardRef(({
|
|
19
18
|
style,
|
|
20
19
|
className,
|
|
21
|
-
component,
|
|
20
|
+
component = 'span',
|
|
22
21
|
...rest
|
|
23
|
-
}) {
|
|
22
|
+
}, ref) => {
|
|
24
23
|
const [compact, setCompact] = useState(false);
|
|
25
24
|
// did address 完整显示时的宽度
|
|
26
25
|
const [addressFullWidth, setAddressFullWidth] = useState(null);
|
|
27
26
|
const containerRef = useRef(null);
|
|
27
|
+
const innerRef = useRef(null);
|
|
28
28
|
const size = useSize(containerRef);
|
|
29
29
|
const containerWidth = size?.width || 0;
|
|
30
|
-
|
|
30
|
+
useImperativeHandle(ref, () => new Proxy({}, {
|
|
31
|
+
get(target, key) {
|
|
32
|
+
return innerRef.current?.[key];
|
|
33
|
+
}
|
|
34
|
+
}));
|
|
35
|
+
|
|
31
36
|
// 存储完整显示时 address 组件的宽度
|
|
32
37
|
useEffect(() => {
|
|
33
38
|
if (!compact && addressFullWidth === null) {
|
|
34
|
-
setAddressFullWidth(
|
|
39
|
+
setAddressFullWidth(innerRef.current?.offsetWidth);
|
|
35
40
|
}
|
|
36
41
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
42
|
}, []);
|
|
@@ -50,20 +55,11 @@ export default function ResponsiveDidAddress({
|
|
|
50
55
|
component: component,
|
|
51
56
|
inline: true,
|
|
52
57
|
compact: compact,
|
|
53
|
-
ref:
|
|
58
|
+
ref: innerRef
|
|
54
59
|
})
|
|
55
60
|
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
style: PropTypes.object,
|
|
59
|
-
className: PropTypes.string,
|
|
60
|
-
component: PropTypes.string
|
|
61
|
-
};
|
|
62
|
-
ResponsiveDidAddress.defaultProps = {
|
|
63
|
-
style: {},
|
|
64
|
-
className: '',
|
|
65
|
-
component: 'span'
|
|
66
|
-
};
|
|
61
|
+
});
|
|
62
|
+
export default ResponsiveDidAddress;
|
|
67
63
|
const Root = styled('div')`
|
|
68
64
|
display: block;
|
|
69
65
|
overflow: hidden;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { StackProps } from '@mui/material';
|
|
1
2
|
import React from 'react';
|
|
2
|
-
export default function IconText({ icon, children, maxWidth, title, }: {
|
|
3
|
+
export default function IconText({ icon, children, maxWidth, title, sx, }: {
|
|
3
4
|
icon?: React.ReactNode;
|
|
4
5
|
children?: React.ReactNode;
|
|
5
6
|
maxWidth?: number;
|
|
6
7
|
title?: string;
|
|
8
|
+
sx?: StackProps['sx'];
|
|
7
9
|
}): false | "" | 0 | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
@@ -5,16 +5,17 @@ export default function IconText({
|
|
|
5
5
|
icon,
|
|
6
6
|
children,
|
|
7
7
|
maxWidth = 100,
|
|
8
|
-
title
|
|
8
|
+
title,
|
|
9
|
+
sx
|
|
9
10
|
}) {
|
|
10
11
|
return (children === 0 || children) && /*#__PURE__*/_jsxs(Stack, {
|
|
11
12
|
direction: "row",
|
|
12
13
|
alignItems: "center",
|
|
13
14
|
gap: 1,
|
|
14
|
-
sx: {
|
|
15
|
+
sx: [{
|
|
15
16
|
maxWidth,
|
|
16
17
|
overflow: 'hidden'
|
|
17
|
-
},
|
|
18
|
+
}, ...(Array.isArray(sx) ? sx : [sx])],
|
|
18
19
|
children: [icon, /*#__PURE__*/_jsx(Typography, {
|
|
19
20
|
flex: 1,
|
|
20
21
|
variant: "body2",
|
package/lib/DID/index.d.ts
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IDidAddressWrapper } from '../Address';
|
|
3
|
+
import { HTMLDidAddressElement } from '../Address/did-address';
|
|
4
|
+
interface IDIDPropTypes extends IDidAddressWrapper {
|
|
5
|
+
did: string;
|
|
6
|
+
size?: number;
|
|
7
|
+
component?: React.ElementType;
|
|
8
|
+
copyable?: boolean;
|
|
9
|
+
responsive?: boolean;
|
|
10
|
+
showCopyButtonInTooltip?: boolean;
|
|
11
|
+
showAvatar?: boolean;
|
|
12
|
+
showQrcode?: boolean;
|
|
13
|
+
inline?: boolean;
|
|
14
|
+
append?: any;
|
|
15
|
+
compact?: boolean;
|
|
16
|
+
startChars?: number;
|
|
17
|
+
endChars?: number;
|
|
18
|
+
locale?: 'en' | 'zh';
|
|
19
|
+
chainId?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface HTMLDIDElement extends HTMLDidAddressElement {
|
|
22
|
+
openQRCode: () => void;
|
|
23
|
+
closeQRCode: () => void;
|
|
22
24
|
}
|
|
23
|
-
|
|
25
|
+
declare const DID: React.ForwardRefExoticComponent<Omit<IDIDPropTypes, "ref"> & React.RefAttributes<HTMLDIDElement>>;
|
|
26
|
+
export default DID;
|
package/lib/DID/index.js
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useState } from 'react';
|
|
3
|
-
import PropTypes from 'prop-types';
|
|
4
2
|
import { getDIDMotifInfo } from '@arcblock/did-motif';
|
|
5
|
-
import QRCode from 'qrcode.react';
|
|
6
|
-
import { Icon } from '@iconify/react';
|
|
7
3
|
import IconQrCode from '@iconify-icons/material-symbols/qr-code-rounded';
|
|
4
|
+
import { Icon } from '@iconify/react';
|
|
8
5
|
import { Box, Dialog, DialogContent, DialogTitle, Typography } from '@mui/material';
|
|
9
6
|
import { useCreation, useMemoizedFn } from 'ahooks';
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
7
|
+
import QRCode from 'qrcode.react';
|
|
8
|
+
import React, { forwardRef, useImperativeHandle, useRef, useState } from 'react';
|
|
12
9
|
import Address from '../Address';
|
|
13
10
|
import Avatar from '../Avatar';
|
|
14
|
-
import {
|
|
11
|
+
import { temp as colors } from '../Colors';
|
|
12
|
+
import { DID_PREFIX } from '../Util/constant';
|
|
15
13
|
import { translate } from '../Locale/util';
|
|
14
|
+
import { getDIDColor, getFontSize, isEthereumDid } from '../Util';
|
|
16
15
|
const translations = {
|
|
17
16
|
en: {
|
|
18
17
|
scanQrcode: 'Scan with DID Wallet to transfer token to here',
|
|
@@ -25,23 +24,6 @@ const translations = {
|
|
|
25
24
|
downloadTips: '没有 DID Wallet ?'
|
|
26
25
|
}
|
|
27
26
|
};
|
|
28
|
-
const DIDPropTypes = {
|
|
29
|
-
did: PropTypes.string.isRequired,
|
|
30
|
-
size: PropTypes.number,
|
|
31
|
-
component: PropTypes.string,
|
|
32
|
-
copyable: PropTypes.bool,
|
|
33
|
-
responsive: PropTypes.bool,
|
|
34
|
-
showCopyButtonInTooltip: PropTypes.bool,
|
|
35
|
-
showAvatar: PropTypes.bool,
|
|
36
|
-
showQrcode: PropTypes.bool,
|
|
37
|
-
inline: PropTypes.bool,
|
|
38
|
-
append: PropTypes.any,
|
|
39
|
-
compact: PropTypes.bool,
|
|
40
|
-
startChars: PropTypes.number,
|
|
41
|
-
endChars: PropTypes.number,
|
|
42
|
-
locale: PropTypes.oneOf(['en', 'zh']),
|
|
43
|
-
chainId: PropTypes.string
|
|
44
|
-
};
|
|
45
27
|
const DEFAULT_CHAIN_ID = 'xenon-2020-01-15';
|
|
46
28
|
const CHAIN_ID_MAP = {
|
|
47
29
|
'main.abtnetwork.io': DEFAULT_CHAIN_ID,
|
|
@@ -72,28 +54,46 @@ const getAvatarSize = (didMotifInfo, isEthDid, size) => {
|
|
|
72
54
|
}
|
|
73
55
|
return size;
|
|
74
56
|
};
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
57
|
+
const DID = /*#__PURE__*/forwardRef((props, ref) => {
|
|
58
|
+
const {
|
|
59
|
+
did,
|
|
60
|
+
showAvatar = true,
|
|
61
|
+
showQrcode = false,
|
|
62
|
+
locale = 'en',
|
|
63
|
+
size = 0,
|
|
64
|
+
component = 'span',
|
|
65
|
+
copyable = true,
|
|
66
|
+
responsive = true,
|
|
67
|
+
showCopyButtonInTooltip = false,
|
|
68
|
+
inline = false,
|
|
69
|
+
append = null,
|
|
70
|
+
compact = false,
|
|
71
|
+
startChars = 6,
|
|
72
|
+
endChars = 6
|
|
73
|
+
} = props;
|
|
74
|
+
const rest = {
|
|
75
|
+
size,
|
|
76
|
+
component,
|
|
77
|
+
copyable,
|
|
78
|
+
responsive,
|
|
79
|
+
showCopyButtonInTooltip,
|
|
80
|
+
inline,
|
|
81
|
+
append,
|
|
82
|
+
compact,
|
|
83
|
+
startChars,
|
|
84
|
+
endChars
|
|
85
|
+
};
|
|
86
|
+
const addressRef = useRef(null);
|
|
87
87
|
const t = useMemoizedFn((key, data = {}) => {
|
|
88
88
|
return translate(translations, key, locale, 'en', data);
|
|
89
89
|
});
|
|
90
|
+
let chainId = props.chainId || '';
|
|
90
91
|
try {
|
|
91
92
|
if (!chainId) {
|
|
92
|
-
const chainHostUrl = window
|
|
93
|
+
const chainHostUrl = window.blocklet?.CHAIN_HOST;
|
|
93
94
|
if (chainHostUrl) {
|
|
94
95
|
const chainHost = new URL(chainHostUrl).hostname;
|
|
95
96
|
if (chainHost) {
|
|
96
|
-
// eslint-disable-next-line no-param-reassign
|
|
97
97
|
chainId = CHAIN_ID_MAP[chainHost];
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -119,6 +119,7 @@ const DID = /*#__PURE__*/forwardRef(({
|
|
|
119
119
|
},
|
|
120
120
|
children: "ABT:"
|
|
121
121
|
}, "prefix-abt"), showAvatar && /*#__PURE__*/_jsx(Avatar, {
|
|
122
|
+
src: "",
|
|
122
123
|
did: did,
|
|
123
124
|
size: getAvatarSize(didMotifInfo, isEthDid, rest.size || 18),
|
|
124
125
|
style: {
|
|
@@ -138,8 +139,18 @@ const DID = /*#__PURE__*/forwardRef(({
|
|
|
138
139
|
e.preventDefault();
|
|
139
140
|
setOpen(true);
|
|
140
141
|
});
|
|
142
|
+
useImperativeHandle(ref, () => {
|
|
143
|
+
return new Proxy({
|
|
144
|
+
openQRCode: () => setOpen(true),
|
|
145
|
+
closeQRCode: () => setOpen(false)
|
|
146
|
+
}, {
|
|
147
|
+
get(target, key) {
|
|
148
|
+
return target[key] || addressRef?.current?.[key];
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
});
|
|
141
152
|
const downloadUrl = useCreation(() => {
|
|
142
|
-
if (['zh', 'en'].includes) {
|
|
153
|
+
if (['zh', 'en'].includes(locale)) {
|
|
143
154
|
return `https://www.didwallet.io/${locale}`;
|
|
144
155
|
}
|
|
145
156
|
return 'https://www.didwallet.io/en';
|
|
@@ -164,13 +175,14 @@ const DID = /*#__PURE__*/forwardRef(({
|
|
|
164
175
|
}, [downloadUrl]);
|
|
165
176
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
166
177
|
children: [/*#__PURE__*/_jsx(Address, {
|
|
167
|
-
ref: ref,
|
|
168
178
|
locale: locale,
|
|
169
179
|
content: `${DID_PREFIX}${did}`,
|
|
170
180
|
...rest,
|
|
181
|
+
ref: addressRef,
|
|
171
182
|
prepend: prepend,
|
|
172
183
|
append: /*#__PURE__*/_jsxs(_Fragment, {
|
|
173
184
|
children: [showQrcode ? /*#__PURE__*/_jsx(Box, {
|
|
185
|
+
id: "did-qrcode-button",
|
|
174
186
|
component: Icon,
|
|
175
187
|
icon: IconQrCode,
|
|
176
188
|
onClick: openQrCode,
|
|
@@ -195,7 +207,7 @@ const DID = /*#__PURE__*/forwardRef(({
|
|
|
195
207
|
children: t('scanQrcode')
|
|
196
208
|
})
|
|
197
209
|
}), /*#__PURE__*/_jsxs(DialogContent, {
|
|
198
|
-
align:
|
|
210
|
+
align: 'center',
|
|
199
211
|
children: [/*#__PURE__*/_jsx(QRCode
|
|
200
212
|
// eslint-disable-next-line max-len
|
|
201
213
|
, {
|
|
@@ -209,10 +221,11 @@ const DID = /*#__PURE__*/forwardRef(({
|
|
|
209
221
|
textAlign: 'center'
|
|
210
222
|
},
|
|
211
223
|
children: /*#__PURE__*/_jsx(Address, {
|
|
212
|
-
copyable: true,
|
|
213
224
|
locale: locale,
|
|
214
225
|
content: `${DID_PREFIX}${did}`,
|
|
215
226
|
prepend: prepend,
|
|
227
|
+
...rest,
|
|
228
|
+
copyable: true,
|
|
216
229
|
children: did
|
|
217
230
|
})
|
|
218
231
|
}), /*#__PURE__*/_jsx(Typography, {
|
|
@@ -228,21 +241,4 @@ const DID = /*#__PURE__*/forwardRef(({
|
|
|
228
241
|
})]
|
|
229
242
|
});
|
|
230
243
|
});
|
|
231
|
-
export default DID;
|
|
232
|
-
DID.propTypes = DIDPropTypes;
|
|
233
|
-
DID.defaultProps = {
|
|
234
|
-
size: 0,
|
|
235
|
-
component: 'span',
|
|
236
|
-
copyable: true,
|
|
237
|
-
responsive: true,
|
|
238
|
-
showCopyButtonInTooltip: false,
|
|
239
|
-
showAvatar: true,
|
|
240
|
-
showQrcode: false,
|
|
241
|
-
inline: false,
|
|
242
|
-
append: null,
|
|
243
|
-
compact: false,
|
|
244
|
-
startChars: 6,
|
|
245
|
-
endChars: 6,
|
|
246
|
-
locale: 'en',
|
|
247
|
-
chainId: ''
|
|
248
|
-
};
|
|
244
|
+
export default DID;
|
package/lib/type.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module '@arcblock/did-motif';
|