@arcblock/ux 2.10.65 → 2.10.67
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/ActionButton/index.d.ts +1 -1
- package/lib/Alert/index.d.ts +1 -1
- package/lib/AnimationWaiter/index.d.ts +27 -15
- package/lib/AnimationWaiter/index.js +15 -14
- package/lib/Async/index.d.ts +50 -17
- package/lib/Badge/index.d.ts +1 -1
- package/lib/Badge/index.js +7 -1
- package/lib/BlockletContext/index.d.ts +12 -28
- package/lib/BlockletContext/index.js +3 -21
- package/lib/Button/wrap.d.ts +5 -3
- package/lib/Button/wrap.js +2 -1
- package/lib/ButtonGroup/index.d.ts +12 -2
- package/lib/ButtonGroup/index.js +13 -3
- package/lib/CardSelector/index.d.ts +11 -33
- package/lib/CardSelector/index.js +16 -32
- package/lib/Center/index.d.ts +6 -21
- package/lib/Center/index.js +2 -17
- package/lib/ClickToCopy/copy-button.d.ts +9 -26
- package/lib/ClickToCopy/copy-button.js +5 -17
- package/lib/ClickToCopy/hook.d.ts +11 -5
- package/lib/ClickToCopy/hook.js +3 -3
- package/lib/ClickToCopy/index.d.ts +18 -29
- package/lib/ClickToCopy/index.js +0 -13
- package/lib/CodeBlock/LightBox.d.ts +1 -1
- package/lib/CodeBlock/index.d.ts +7 -26
- package/lib/CodeBlock/index.js +4 -17
- package/lib/Colors/index.d.ts +2 -2
- package/lib/Colors/themes/default.d.ts +54 -61
- package/lib/Colors/themes/temp.d.ts +35 -35
- package/lib/ContactForm/index.d.ts +26 -30
- package/lib/ContactForm/index.js +7 -17
- package/lib/Dialog/confirm.d.ts +3 -3
- package/lib/Dialog/confirm.js +2 -2
- package/lib/Earth/index.d.ts +10 -1
- package/lib/Header/auto-hidden.d.ts +6 -11
- package/lib/Header/auto-hidden.js +0 -5
- package/lib/Header/header.d.ts +20 -51
- package/lib/Header/header.js +10 -42
- package/lib/Header/index.d.ts +2 -2
- package/lib/Header/responsive-header.d.ts +10 -22
- package/lib/Header/responsive-header.js +1 -13
- package/lib/Icon/image.d.ts +8 -36
- package/lib/Icon/image.js +6 -24
- package/lib/Icon/index.d.ts +9 -1
- package/lib/Icon/index.js +6 -25
- package/lib/NavMenu/index.d.ts +1 -1
- package/lib/NavMenu/nav-menu.d.ts +37 -51
- package/lib/NavMenu/nav-menu.js +47 -102
- package/lib/NavMenu/style.d.ts +8 -2
- package/lib/NavMenu/style.js +3 -1
- package/lib/PageScroller/index.d.ts +13 -1
- package/lib/Passport/passport.js +1 -1
- package/lib/PricingTable/index.d.ts +3 -1
- package/lib/RelativeTime/index.d.ts +1 -1
- package/lib/Screenshot/BaseScreenshot/index.js +1 -1
- package/lib/SplitButton/index.d.ts +0 -19
- package/lib/SplitButton/index.js +7 -27
- package/lib/TextCollapse/index.d.ts +10 -1
- package/lib/Theme/index.d.ts +5 -13
- package/lib/Theme/index.js +4 -11
- package/lib/Theme/theme-provider.d.ts +16 -18
- package/lib/Theme/theme.d.ts +37 -11
- package/lib/Theme/theme.js +13 -22
- package/lib/Util/constant.d.ts +31 -31
- package/lib/Util/deprecate.d.ts +7 -5
- package/lib/Util/federated.d.ts +21 -21
- package/lib/Util/federated.js +1 -1
- package/lib/Util/index.d.ts +59 -60
- package/lib/Util/index.js +16 -43
- package/lib/Util/passport.d.ts +6 -6
- package/lib/Util/wallet.d.ts +15 -3
- package/lib/WebWalletSWKeeper/index.js +1 -1
- package/lib/global.d.ts +13 -0
- package/lib/index.d.ts +4 -2
- package/lib/index.js +2 -2
- package/lib/type.d.ts +31 -1
- package/package.json +5 -5
- package/src/AnimationWaiter/index.jsx +15 -14
- package/src/Async/{index.jsx → index.tsx} +13 -4
- package/src/Badge/index.jsx +8 -1
- package/src/BlockletContext/{index.jsx → index.tsx} +17 -22
- package/src/Button/wrap.jsx +2 -1
- package/src/ButtonGroup/index.js +13 -3
- package/src/CardSelector/{index.jsx → index.tsx} +32 -33
- package/src/Center/index.tsx +33 -0
- package/src/ClickToCopy/{copy-button.jsx → copy-button.tsx} +15 -16
- package/src/ClickToCopy/{hook.js → hook.ts} +5 -5
- package/src/ClickToCopy/{index.jsx → index.tsx} +12 -17
- package/src/CodeBlock/{index.jsx → index.tsx} +15 -17
- package/src/ContactForm/{index.jsx → index.tsx} +47 -29
- package/src/Dialog/confirm.jsx +2 -2
- package/src/Header/{auto-hidden.jsx → auto-hidden.tsx} +6 -7
- package/src/Header/{header.jsx → header.tsx} +32 -46
- package/src/Header/{responsive-header.jsx → responsive-header.tsx} +9 -15
- package/src/Icon/{image.jsx → image.tsx} +19 -22
- package/src/Icon/{index.jsx → index.tsx} +22 -24
- package/src/NavMenu/{nav-menu.jsx → nav-menu.tsx} +161 -144
- package/src/NavMenu/{style.js → style.ts} +9 -1
- package/src/Passport/passport.jsx +1 -1
- package/src/Screenshot/BaseScreenshot/index.jsx +1 -1
- package/src/SplitButton/index.tsx +10 -23
- package/src/Theme/{index.js → index.ts} +6 -12
- package/src/Theme/{theme-provider.jsx → theme-provider.tsx} +10 -2
- package/src/Theme/{theme.js → theme.ts} +54 -23
- package/src/Util/{deprecate.jsx → deprecate.tsx} +8 -4
- package/src/Util/{federated.js → federated.ts} +3 -3
- package/src/Util/{index.js → index.ts} +85 -59
- package/src/Util/{passport.js → passport.ts} +2 -2
- package/src/Util/{wallet.js → wallet.ts} +1 -1
- package/src/WebWalletSWKeeper/index.jsx +1 -1
- package/src/global.d.ts +13 -0
- package/src/{index.js → index.ts} +2 -2
- package/src/type.d.ts +31 -1
- package/src/Center/index.jsx +0 -41
- /package/src/CodeBlock/{LightBox.jsx → LightBox.tsx} +0 -0
- /package/src/Colors/{index.js → index.ts} +0 -0
- /package/src/Colors/themes/{default.js → default.ts} +0 -0
- /package/src/Colors/themes/{temp.js → temp.ts} +0 -0
- /package/src/Header/{index.js → index.ts} +0 -0
- /package/src/NavMenu/{index.js → index.ts} +0 -0
- /package/src/Util/{constant.js → constant.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
1
|
+
import { ComponentType, useEffect } from 'react';
|
|
2
2
|
|
|
3
|
-
const warn = (name, alternative) => {
|
|
3
|
+
const warn = (name: string, alternative?: string) => {
|
|
4
4
|
if (process.env.NODE_ENV === 'production') {
|
|
5
5
|
return;
|
|
6
6
|
}
|
|
@@ -13,11 +13,15 @@ const warn = (name, alternative) => {
|
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
const withDeprecated =
|
|
17
|
-
|
|
16
|
+
const withDeprecated = <P extends object>(
|
|
17
|
+
Component: ComponentType<P>,
|
|
18
|
+
{ name, alternative }: { name: string; alternative?: string }
|
|
19
|
+
) => {
|
|
20
|
+
return function Deprecated(props: P) {
|
|
18
21
|
useEffect(() => {
|
|
19
22
|
warn(name, alternative);
|
|
20
23
|
}, []);
|
|
24
|
+
|
|
21
25
|
return <Component {...props} />;
|
|
22
26
|
};
|
|
23
27
|
};
|
|
@@ -58,7 +58,7 @@ export function getCurrentApp(blocklet = window.blocklet) {
|
|
|
58
58
|
provider: 'wallet',
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
// HACK: 适用于
|
|
61
|
+
// HACK: 适用于 blocklet-server
|
|
62
62
|
if (window.env) {
|
|
63
63
|
// eslint-disable-next-line no-param-reassign
|
|
64
64
|
blocklet = window.env;
|
|
@@ -78,7 +78,7 @@ export function getCurrentApp(blocklet = window.blocklet) {
|
|
|
78
78
|
return null;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
export function getApps(blocklet) {
|
|
81
|
+
export function getApps(blocklet: Blocklet) {
|
|
82
82
|
const appList = [];
|
|
83
83
|
|
|
84
84
|
const masterApp = getFederatedApp(blocklet);
|
|
@@ -95,7 +95,7 @@ export function getApps(blocklet) {
|
|
|
95
95
|
return appList.reverse();
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
export async function getBlockletData(appUrl) {
|
|
98
|
+
export async function getBlockletData(appUrl: string) {
|
|
99
99
|
try {
|
|
100
100
|
const url = new URL('__blocklet__.js', appUrl);
|
|
101
101
|
url.searchParams.set('type', 'json');
|
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
import padStart from 'lodash/padStart';
|
|
3
3
|
import { getDIDMotifInfo, colors } from '@arcblock/did-motif';
|
|
4
4
|
import { DID_PREFIX, WELLKNOWN_SERVICE_PATH_PREFIX } from './constant';
|
|
5
|
+
import type { $TSFixMe } from '../type';
|
|
5
6
|
|
|
6
|
-
let dateTool = null;
|
|
7
|
+
let dateTool: $TSFixMe | null = null;
|
|
7
8
|
|
|
8
|
-
export function parseQuery(str) {
|
|
9
|
+
export function parseQuery(str: string) {
|
|
9
10
|
return str
|
|
10
11
|
.replace(/^\?/, '')
|
|
11
12
|
.split('&')
|
|
12
13
|
.map((x) => x.split('='))
|
|
13
14
|
.filter(([key]) => !!key)
|
|
14
|
-
.reduce((memo, x) => {
|
|
15
|
+
.reduce<Record<string, string | boolean>>((memo, x) => {
|
|
15
16
|
const key = x[0];
|
|
16
17
|
const value = decodeURIComponent(x[1]) || true;
|
|
17
18
|
memo[key] = value;
|
|
@@ -23,16 +24,22 @@ export function stringifyQuery(params = {}) {
|
|
|
23
24
|
return new URLSearchParams(params).toString();
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
export function getCookieOptions(
|
|
28
|
+
expireInDays:
|
|
29
|
+
| number
|
|
30
|
+
| {
|
|
31
|
+
expireInDays: number;
|
|
32
|
+
path?: string;
|
|
33
|
+
domain?: string;
|
|
34
|
+
returnDomain?: boolean;
|
|
35
|
+
sameSite?: Cookies.CookieAttributes['sameSite'];
|
|
36
|
+
secure?: boolean;
|
|
37
|
+
} = 1
|
|
38
|
+
) {
|
|
39
|
+
let opts = expireInDays;
|
|
40
|
+
|
|
41
|
+
if (typeof opts === 'number') {
|
|
42
|
+
opts = { expireInDays: opts };
|
|
36
43
|
}
|
|
37
44
|
|
|
38
45
|
if (opts.path === undefined) {
|
|
@@ -43,7 +50,7 @@ export function getCookieOptions(expireInDays = 1) {
|
|
|
43
50
|
opts.expireInDays = 1;
|
|
44
51
|
}
|
|
45
52
|
|
|
46
|
-
const options = {
|
|
53
|
+
const options: Cookies.CookieAttributes = {
|
|
47
54
|
expires: opts.expireInDays,
|
|
48
55
|
path: opts.path,
|
|
49
56
|
domain: opts.domain || '',
|
|
@@ -61,7 +68,7 @@ export function getCookieOptions(expireInDays = 1) {
|
|
|
61
68
|
return options;
|
|
62
69
|
}
|
|
63
70
|
|
|
64
|
-
export const getColor = (props) => {
|
|
71
|
+
export const getColor = (props: $TSFixMe) => {
|
|
65
72
|
if (props.color) {
|
|
66
73
|
return props.color;
|
|
67
74
|
}
|
|
@@ -73,7 +80,7 @@ export const getColor = (props) => {
|
|
|
73
80
|
return props.theme.palette.text.primary;
|
|
74
81
|
};
|
|
75
82
|
|
|
76
|
-
export const getBackground = (props) => {
|
|
83
|
+
export const getBackground = (props: $TSFixMe) => {
|
|
77
84
|
if (props.background) {
|
|
78
85
|
return props.background;
|
|
79
86
|
}
|
|
@@ -85,11 +92,15 @@ export const getBackground = (props) => {
|
|
|
85
92
|
return props.theme.palette.common.white;
|
|
86
93
|
};
|
|
87
94
|
|
|
88
|
-
export function mergeProps
|
|
95
|
+
export function mergeProps<P extends object>(
|
|
96
|
+
props: Record<string, any>,
|
|
97
|
+
component: React.ComponentType<P>,
|
|
98
|
+
jsonAttrs: string[] = []
|
|
99
|
+
) {
|
|
89
100
|
const newProps = Object.assign({}, props);
|
|
90
101
|
Object.keys(component.defaultProps || {}).forEach((x) => {
|
|
91
102
|
if (typeof newProps[x] === 'string' && newProps[x].indexOf('::prop::') === 0) {
|
|
92
|
-
newProps[x] = component.defaultProps[x];
|
|
103
|
+
newProps[x] = component.defaultProps![x as keyof P];
|
|
93
104
|
}
|
|
94
105
|
});
|
|
95
106
|
|
|
@@ -133,7 +144,7 @@ export const getTimezone = () => {
|
|
|
133
144
|
return '';
|
|
134
145
|
};
|
|
135
146
|
|
|
136
|
-
export const str2color = (str) => {
|
|
147
|
+
export const str2color = (str: string) => {
|
|
137
148
|
let hash = 0;
|
|
138
149
|
for (let i = 0; i < str.length; i++) {
|
|
139
150
|
hash = str.charCodeAt(i) + ((hash << 5) - hash);
|
|
@@ -146,20 +157,20 @@ export const str2color = (str) => {
|
|
|
146
157
|
return colour;
|
|
147
158
|
};
|
|
148
159
|
|
|
149
|
-
export const formatUptime = (uptime) => {
|
|
160
|
+
export const formatUptime = (uptime: number) => {
|
|
150
161
|
const total = Math.round(uptime / 1000);
|
|
151
162
|
const hours = Math.floor(total / 3600);
|
|
152
163
|
const minutes = Math.floor((total - hours * 3600) / 60);
|
|
153
164
|
const seconds = total % 60;
|
|
165
|
+
// @ts-expect-error
|
|
154
166
|
return `${padStart(hours, 2, '0')}:${padStart(minutes, 2, '0')}:${padStart(seconds, 2, '0')}`;
|
|
155
167
|
};
|
|
156
168
|
|
|
157
169
|
/**
|
|
158
170
|
* Set the date tool library which support for format() and locale() functions,
|
|
159
171
|
* moment and dayjs are recommended.
|
|
160
|
-
* @param {object} the date tool library
|
|
161
172
|
*/
|
|
162
|
-
export function setDateTool(tool) {
|
|
173
|
+
export function setDateTool(tool: typeof dateTool) {
|
|
163
174
|
dateTool = tool;
|
|
164
175
|
}
|
|
165
176
|
|
|
@@ -168,8 +179,8 @@ export function getDateTool() {
|
|
|
168
179
|
}
|
|
169
180
|
|
|
170
181
|
const createDateFormatter =
|
|
171
|
-
(format) =>
|
|
172
|
-
(date, { locale, tz }) => {
|
|
182
|
+
(format: string) =>
|
|
183
|
+
(date: string, { locale, tz }: { locale?: string; tz?: string } = {}) => {
|
|
173
184
|
if (dateTool === null) {
|
|
174
185
|
throw new Error('call setDateTool to set the date tool library, such as: setDateTool(dayjs)');
|
|
175
186
|
}
|
|
@@ -194,30 +205,23 @@ const createDateFormatter =
|
|
|
194
205
|
/**
|
|
195
206
|
* Format the time string as `ll` format: MMM D, YYYY
|
|
196
207
|
* Ensure that the setDateTool() function is called first to set the time tool library.
|
|
197
|
-
* @param {string} date date string
|
|
198
|
-
* @param {object} option
|
|
199
|
-
* @param {string} option.locale, default: en
|
|
200
|
-
* @param {string} option.tz, default: timzone
|
|
201
208
|
* @returns formatted date string
|
|
202
209
|
*/
|
|
203
|
-
export function formatToDate(date, { locale, tz } = {}) {
|
|
210
|
+
export function formatToDate(date: string, { locale = 'en', tz }: { locale?: string; tz?: string } = {}) {
|
|
204
211
|
return createDateFormatter('ll')(date, { locale, tz });
|
|
205
212
|
}
|
|
206
213
|
|
|
207
214
|
/**
|
|
208
215
|
* Format the time string as `lll` format: MMM D, YYYY h:mm A
|
|
209
216
|
* Ensure that the setDateTool() function is called first to set the time tool library.
|
|
210
|
-
* @param {string} date date string
|
|
211
|
-
* @param {object} option
|
|
212
|
-
* @param {string} option.locale, default: en
|
|
213
|
-
* @param {string} option.tz, default: timzone
|
|
214
217
|
* @returns formatted date string
|
|
215
218
|
*/
|
|
216
|
-
export function formatToDatetime(date, { locale, tz } = {}) {
|
|
219
|
+
export function formatToDatetime(date: string, { locale = 'en', tz }: { locale?: string; tz?: string } = {}) {
|
|
217
220
|
return createDateFormatter('lll')(date, { locale, tz });
|
|
218
221
|
}
|
|
219
222
|
|
|
220
223
|
export function detectWalletExtension() {
|
|
224
|
+
// @ts-expect-error Property 'ABT_DEV' does not exist on type 'Window & typeof globalThis'.
|
|
221
225
|
const extension = window?.ABT_DEV || window.ABT;
|
|
222
226
|
if (extension && typeof extension.open === 'function') {
|
|
223
227
|
return extension;
|
|
@@ -226,7 +230,19 @@ export function detectWalletExtension() {
|
|
|
226
230
|
return null;
|
|
227
231
|
}
|
|
228
232
|
|
|
229
|
-
export function openWebWallet({
|
|
233
|
+
export function openWebWallet({
|
|
234
|
+
webWalletUrl,
|
|
235
|
+
action = 'login',
|
|
236
|
+
locale = 'en',
|
|
237
|
+
url,
|
|
238
|
+
windowFeatures,
|
|
239
|
+
}: {
|
|
240
|
+
webWalletUrl: string;
|
|
241
|
+
action?: string;
|
|
242
|
+
locale?: string;
|
|
243
|
+
url: string;
|
|
244
|
+
windowFeatures: $TSFixMe;
|
|
245
|
+
}) {
|
|
230
246
|
// web wallet extension
|
|
231
247
|
const extension = detectWalletExtension();
|
|
232
248
|
if (extension) {
|
|
@@ -252,7 +268,7 @@ export function openWebWallet({ webWalletUrl, action = 'login', locale = 'en', u
|
|
|
252
268
|
};
|
|
253
269
|
const windowUrl = `${webWalletUrl}?action=${action}&locale=${locale}&url=${encodeURIComponent(url)}`;
|
|
254
270
|
const mergedWindowFeatures = Object.assign({}, defaultWindowFeatures, windowFeatures);
|
|
255
|
-
const getWindowWidth = (win) => {
|
|
271
|
+
const getWindowWidth = (win: Window) => {
|
|
256
272
|
return win.innerWidth || win.document.documentElement.clientWidth || win.document.body.clientWidth;
|
|
257
273
|
};
|
|
258
274
|
// 默认在浏览器右上角弹出窗口
|
|
@@ -271,7 +287,7 @@ export function openWebWallet({ webWalletUrl, action = 'login', locale = 'en', u
|
|
|
271
287
|
window.open(windowUrl, 'targetWindow', strWindowFeatures);
|
|
272
288
|
}
|
|
273
289
|
|
|
274
|
-
export const getFontSize = (size) => {
|
|
290
|
+
export const getFontSize = (size: string) => {
|
|
275
291
|
// 12px 及以上的 size 有效, 否则返回 inherit
|
|
276
292
|
if (size && Number(size) >= 12) {
|
|
277
293
|
return `${Number(size)}px`;
|
|
@@ -280,7 +296,7 @@ export const getFontSize = (size) => {
|
|
|
280
296
|
};
|
|
281
297
|
|
|
282
298
|
// 参考: asset-chain @arcblock/did
|
|
283
|
-
export const isEthereumDid = (did) => {
|
|
299
|
+
export const isEthereumDid = (did: string) => {
|
|
284
300
|
const address = did.replace(DID_PREFIX, '');
|
|
285
301
|
// check if it has the basic requirements of an address
|
|
286
302
|
if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
|
|
@@ -289,13 +305,15 @@ export const isEthereumDid = (did) => {
|
|
|
289
305
|
return true;
|
|
290
306
|
};
|
|
291
307
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
308
|
+
export const appendParams = (
|
|
309
|
+
url: string,
|
|
310
|
+
params: {
|
|
311
|
+
imageFilter: 'crop' | 'resize';
|
|
312
|
+
w?: number;
|
|
313
|
+
h?: number;
|
|
314
|
+
r?: 0 | 90 | 180 | 270;
|
|
315
|
+
}
|
|
316
|
+
) => {
|
|
299
317
|
if (!params) {
|
|
300
318
|
return url;
|
|
301
319
|
}
|
|
@@ -303,7 +321,7 @@ export const appendParams = (url, params) => {
|
|
|
303
321
|
// HACK: 如果 url 中带有域名,则 urlInstance.origin 为 url 中的域名;否则,借用当前页面的 location.origin 作为域名来拼接一个 url
|
|
304
322
|
const urlInstance = new URL(url, window.location.origin);
|
|
305
323
|
Object.keys(params).forEach((key) => {
|
|
306
|
-
urlInstance.searchParams.set(key, params[key]);
|
|
324
|
+
urlInstance.searchParams.set(key, String(params[key as keyof typeof params]));
|
|
307
325
|
});
|
|
308
326
|
// HACK: 如果前后域名一致,代表前面已经借用了 location.origin,这个时候只需要返回 urlInstance.pathname + urlInstance.search 即可
|
|
309
327
|
if (urlInstance.origin === window.location.origin) {
|
|
@@ -315,7 +333,7 @@ export const appendParams = (url, params) => {
|
|
|
315
333
|
}
|
|
316
334
|
};
|
|
317
335
|
|
|
318
|
-
export const getUserAvatar = (avatar, size = 48) => {
|
|
336
|
+
export const getUserAvatar = (avatar: string, size = 48) => {
|
|
319
337
|
if (!avatar) {
|
|
320
338
|
return avatar;
|
|
321
339
|
}
|
|
@@ -332,14 +350,14 @@ export const getUserAvatar = (avatar, size = 48) => {
|
|
|
332
350
|
};
|
|
333
351
|
|
|
334
352
|
export const sleep = (time = 0) => {
|
|
335
|
-
return new Promise((resolve) => {
|
|
353
|
+
return new Promise<void>((resolve) => {
|
|
336
354
|
setTimeout(() => {
|
|
337
355
|
resolve();
|
|
338
356
|
}, time);
|
|
339
357
|
});
|
|
340
358
|
};
|
|
341
359
|
|
|
342
|
-
export const isUrl = (str) => {
|
|
360
|
+
export const isUrl = (str: string) => {
|
|
343
361
|
return /^https?:\/\//.test(str);
|
|
344
362
|
};
|
|
345
363
|
|
|
@@ -348,7 +366,7 @@ export const getVisitorId = () => {
|
|
|
348
366
|
return localStorage.getItem(visitorIdKey);
|
|
349
367
|
};
|
|
350
368
|
|
|
351
|
-
export const setVisitorId = (value) => {
|
|
369
|
+
export const setVisitorId = (value: string | null) => {
|
|
352
370
|
if (value === null) {
|
|
353
371
|
localStorage.removeItem(visitorIdKey);
|
|
354
372
|
} else {
|
|
@@ -356,13 +374,13 @@ export const setVisitorId = (value) => {
|
|
|
356
374
|
}
|
|
357
375
|
};
|
|
358
376
|
|
|
359
|
-
export const getDIDColor = (did) => {
|
|
377
|
+
export const getDIDColor = (did: string) => {
|
|
360
378
|
if (isEthereumDid(did)) {
|
|
361
379
|
const index =
|
|
362
380
|
Uint8Array.from(
|
|
363
381
|
did
|
|
364
382
|
.slice(2)
|
|
365
|
-
.match(/.{1,2}/g)
|
|
383
|
+
.match(/.{1,2}/g)!
|
|
366
384
|
.map((pair) => parseInt(pair, 16))
|
|
367
385
|
)
|
|
368
386
|
.slice(0, 8)
|
|
@@ -378,17 +396,25 @@ export const getDIDColor = (did) => {
|
|
|
378
396
|
}
|
|
379
397
|
};
|
|
380
398
|
|
|
399
|
+
type NestedTranslation = {
|
|
400
|
+
[key: string]: string | NestedTranslation;
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
type TranslationsObject = {
|
|
404
|
+
[locale: string]: NestedTranslation;
|
|
405
|
+
};
|
|
406
|
+
|
|
381
407
|
/**
|
|
382
408
|
* Retrieves the appropriate translation based on the locale, with fallback options.
|
|
383
|
-
*
|
|
384
|
-
* @param {Object|string} translations - The translations object or string to retrieve translation from.
|
|
385
|
-
* @param {string} locale - The locale to use for retrieving the translation.
|
|
386
|
-
* @param {Object} options - Additional options for fallbackLocale and defaultValue.
|
|
387
|
-
* @param {string} [options.fallbackLocale='en'] - The fallback locale to use if the translation for the specified locale is not found.
|
|
388
|
-
* @param {string} [options.defaultValue='unknown'] - The default value to return if no translation is found.
|
|
389
409
|
* @return {string} The translated string based on the locale, with fallback options if necessary.
|
|
390
410
|
*/
|
|
391
|
-
export const getTranslation = (
|
|
411
|
+
export const getTranslation = (
|
|
412
|
+
translations: string | TranslationsObject,
|
|
413
|
+
locale: string,
|
|
414
|
+
options: { fallbackLocale?: string; defaultValue?: string } = {}
|
|
415
|
+
) => {
|
|
416
|
+
const { fallbackLocale = 'en', defaultValue = 'unknown' } = options;
|
|
417
|
+
|
|
392
418
|
if (typeof translations === 'string') {
|
|
393
419
|
return translations;
|
|
394
420
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getNftBGColor, DEFAULT_COLORS, getNftBGColorFromDid, getSvg } from '@arcblock/nft-display';
|
|
2
2
|
|
|
3
|
-
export const getPassportColor = (preferredColor, did) => {
|
|
3
|
+
export const getPassportColor = (preferredColor: string, did: string) => {
|
|
4
4
|
let color;
|
|
5
5
|
if (preferredColor === 'default') {
|
|
6
6
|
color = DEFAULT_COLORS['app-passport'];
|
|
@@ -13,7 +13,7 @@ export const getPassportColor = (preferredColor, did) => {
|
|
|
13
13
|
return color;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export const getTextColor = (background) => {
|
|
16
|
+
export const getTextColor = (background: string) => {
|
|
17
17
|
const r = parseInt(background.slice(1, 3), 16);
|
|
18
18
|
const g = parseInt(background.slice(3, 5), 16);
|
|
19
19
|
const b = parseInt(background.slice(5, 7), 16);
|
|
@@ -23,7 +23,7 @@ export const getWebWalletUrl = () => {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
// 检查 wallet url protocol 和当前页面地址的 protocol 是否一致
|
|
26
|
-
export const checkSameProtocol = (webWalletUrl) => {
|
|
26
|
+
export const checkSameProtocol = (webWalletUrl: string) => {
|
|
27
27
|
const { protocol } = window.location;
|
|
28
28
|
let walletProtocol = '';
|
|
29
29
|
try {
|
|
@@ -3,9 +3,9 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import useIdle from 'react-use/lib/useIdle';
|
|
4
4
|
import { useLocalStorageState } from 'ahooks';
|
|
5
5
|
import useBrowser from '@arcblock/react-hooks/lib/useBrowser';
|
|
6
|
-
import { detectWalletExtension } from '@arcblock/ux/lib/Util';
|
|
7
6
|
|
|
8
7
|
import { getWebWalletUrl, checkSameProtocol } from '../Util/wallet';
|
|
8
|
+
import { detectWalletExtension } from '../Util';
|
|
9
9
|
|
|
10
10
|
// 默认最大空闲时间: 30min
|
|
11
11
|
const DEFAULT_MAX_IDLE_TIME = 1000 * 60 * 30;
|
package/src/global.d.ts
ADDED
|
@@ -24,9 +24,9 @@ import DidLogo from './DidLogo';
|
|
|
24
24
|
import Tabs from './Tabs';
|
|
25
25
|
import Tag from './Tag';
|
|
26
26
|
import TextCollapse from './TextCollapse';
|
|
27
|
-
import Theme from './Theme';
|
|
27
|
+
import * as Theme from './Theme';
|
|
28
28
|
import Toast from './Toast';
|
|
29
|
-
import Util from './Util';
|
|
29
|
+
import * as Util from './Util';
|
|
30
30
|
import Video from './Video';
|
|
31
31
|
import WebWalletSWKeeper from './WebWalletSWKeeper';
|
|
32
32
|
import WalletAction from './Wallet/Action';
|
package/src/type.d.ts
CHANGED
|
@@ -1 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
export type $TSFixMe = any;
|
|
2
|
+
|
|
3
|
+
export type Blocklet = {
|
|
4
|
+
appId: string;
|
|
5
|
+
appIds: string[];
|
|
6
|
+
appPid: string;
|
|
7
|
+
appName: string;
|
|
8
|
+
appDescription: string;
|
|
9
|
+
appLogo: string;
|
|
10
|
+
appLogoRect: string;
|
|
11
|
+
appUrl: string;
|
|
12
|
+
isComponent: boolean;
|
|
13
|
+
prefix: string;
|
|
14
|
+
groupPrefix: string;
|
|
15
|
+
pageGroup: string;
|
|
16
|
+
version: string;
|
|
17
|
+
mode: string;
|
|
18
|
+
tenantMode: 'single' | 'multiple';
|
|
19
|
+
theme: TTheme;
|
|
20
|
+
navigation: TNavigation[];
|
|
21
|
+
preferences: Record<string, any>;
|
|
22
|
+
languages: {
|
|
23
|
+
code: string;
|
|
24
|
+
name: string;
|
|
25
|
+
}[];
|
|
26
|
+
passportColor: string;
|
|
27
|
+
componentMountPoints: TComponent[];
|
|
28
|
+
alsoKnownAs: string[];
|
|
29
|
+
trustedFactories: string[];
|
|
30
|
+
[x: string]: any;
|
|
31
|
+
};
|
package/src/Center/index.jsx
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
|
-
|
|
3
|
-
import { styled } from '../Theme';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @param {Object} props 属性
|
|
7
|
-
* @param {*} props.children 子元素
|
|
8
|
-
* @param {'screen'|'parent'} [props.relative='screen'] 容器相对尺寸,默认相对屏幕(screen),可设置为父容器(parent)
|
|
9
|
-
* @returns react component element
|
|
10
|
-
*/
|
|
11
|
-
export default function Center({ children, relative }) {
|
|
12
|
-
let style = {};
|
|
13
|
-
|
|
14
|
-
if (relative === 'parent') {
|
|
15
|
-
style = {
|
|
16
|
-
width: '100%',
|
|
17
|
-
height: '100%',
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return <Div style={style}>{children}</Div>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const Div = styled('div')`
|
|
25
|
-
flex: 1;
|
|
26
|
-
width: 100vw;
|
|
27
|
-
height: 100vh;
|
|
28
|
-
|
|
29
|
-
display: flex;
|
|
30
|
-
justify-content: center;
|
|
31
|
-
align-items: center;
|
|
32
|
-
`;
|
|
33
|
-
|
|
34
|
-
Center.propTypes = {
|
|
35
|
-
children: PropTypes.any.isRequired,
|
|
36
|
-
relative: PropTypes.string,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
Center.defaultProps = {
|
|
40
|
-
relative: 'screen',
|
|
41
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|