@arcblock/ux 2.13.12 → 2.13.14
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/ActivityIndicator/index.js +9 -5
- package/lib/Address/did-address.js +14 -7
- package/lib/Address/responsive-did-address.js +3 -1
- package/lib/BlockletV2/blocklet.js +1 -1
- package/lib/CloseButton/index.js +1 -2
- package/lib/Colors/index.d.ts +1 -3
- package/lib/Colors/index.js +2 -4
- package/lib/Colors/themes/default.d.ts +3 -66
- package/lib/Colors/themes/default.js +4 -74
- package/lib/Colors/themes/did-connect.d.ts +11 -6
- package/lib/Colors/themes/did-connect.js +17 -12
- package/lib/Colors/themes/temp.d.ts +3 -0
- package/lib/Colors/themes/temp.js +3 -0
- package/lib/Config/config-provider.d.ts +4 -5
- package/lib/Config/config-provider.js +7 -26
- package/lib/Config/theme-mode-toggle.js +0 -1
- package/lib/DID/index.js +3 -4
- package/lib/DIDConnect/app-icon.d.ts +8 -0
- package/lib/DIDConnect/app-icon.js +31 -0
- package/lib/DIDConnect/app-info-item.d.ts +7 -0
- package/lib/DIDConnect/app-info-item.js +73 -0
- package/lib/DIDConnect/did-connect-footer.d.ts +4 -0
- package/lib/DIDConnect/did-connect-footer.js +54 -0
- package/lib/DIDConnect/did-connect-logo.d.ts +1 -0
- package/lib/DIDConnect/did-connect-logo.js +11 -0
- package/lib/DIDConnect/index.d.ts +7 -0
- package/lib/DIDConnect/index.js +7 -0
- package/lib/DIDConnect/powered-by.d.ts +3 -0
- package/lib/DIDConnect/powered-by.js +46 -0
- package/lib/DIDConnect/with-container.d.ts +11 -0
- package/lib/DIDConnect/with-container.js +273 -0
- package/lib/DIDConnect/with-ux-theme.d.ts +1 -0
- package/lib/DIDConnect/with-ux-theme.js +23 -0
- package/lib/Datatable/CustomToolbar.js +3 -0
- package/lib/Datatable/index.js +105 -71
- package/lib/Dialog/confirm.d.ts +6 -1
- package/lib/Dialog/confirm.js +7 -3
- package/lib/Dialog/use-confirm.js +6 -0
- package/lib/Footer/index.js +2 -5
- package/lib/Header/header.js +3 -1
- package/lib/Header/responsive-header.js +3 -1
- package/lib/Layout/dashboard/index.js +14 -2
- package/lib/Layout/dashboard/sidebar.js +1 -2
- package/lib/LoadingMask/index.js +4 -3
- package/lib/Locale/selector.js +3 -3
- package/lib/Locale/util.d.ts +3 -3
- package/lib/Locale/util.js +6 -1
- package/lib/LoginButton/index.d.ts +12 -0
- package/lib/LoginButton/index.js +74 -0
- package/lib/NavMenu/nav-menu.js +14 -9
- package/lib/NavMenu/products.js +3 -1
- package/lib/NavMenu/style.js +7 -3
- package/lib/NavMenu/sub-item-group.js +1 -1
- package/lib/PhoneInput/country-select.js +2 -3
- package/lib/SessionBlocklet/index.js +3 -3
- package/lib/SessionUser/components/did-space.js +14 -28
- package/lib/SessionUser/components/logged-in.js +2 -2
- package/lib/SessionUser/components/quick-login-item.js +13 -11
- package/lib/SessionUser/components/session-user-item.js +5 -6
- package/lib/SessionUser/components/session-user-switch.js +15 -13
- package/lib/SessionUser/components/un-login.js +51 -38
- package/lib/SessionUser/components/user-info.js +9 -8
- package/lib/SessionUser/images/did-spaces.svg +7 -13
- package/lib/SharedBridge/index.d.ts +16 -0
- package/lib/SharedBridge/index.js +109 -0
- package/lib/SharedBridge/need-storage-access-api-dialog.d.ts +7 -0
- package/lib/SharedBridge/need-storage-access-api-dialog.js +212 -0
- package/lib/Success/index.js +8 -4
- package/lib/Switch/index.js +3 -3
- package/lib/Tabs/index.js +8 -9
- package/lib/Theme/index.d.ts +2 -2
- package/lib/Theme/index.js +1 -1
- package/lib/Theme/theme-provider.d.ts +5 -1
- package/lib/Theme/theme-provider.js +60 -5
- package/lib/Theme/theme.d.ts +6 -3
- package/lib/Theme/theme.js +55 -19
- package/lib/UserCard/Container/card.js +1 -1
- package/lib/UserCard/Container/dialog.js +1 -1
- package/lib/Util/iframe.d.ts +5 -0
- package/lib/Util/iframe.js +24 -0
- package/lib/Util/index.d.ts +18 -1
- package/lib/Util/index.js +90 -5
- package/lib/type.d.ts +5 -1
- package/package.json +8 -6
- package/src/ActivityIndicator/index.jsx +4 -4
- package/src/Address/did-address.tsx +5 -5
- package/src/Address/responsive-did-address.tsx +11 -1
- package/src/BlockletV2/blocklet.tsx +1 -1
- package/src/CloseButton/index.tsx +1 -2
- package/src/Colors/index.ts +2 -7
- package/src/Colors/themes/default.ts +4 -50
- package/src/Colors/themes/did-connect.ts +13 -6
- package/src/Colors/themes/temp.ts +3 -0
- package/src/Config/config-provider.tsx +17 -30
- package/src/Config/theme-mode-toggle.tsx +1 -1
- package/src/DID/index.tsx +3 -4
- package/src/DIDConnect/app-icon.tsx +36 -0
- package/src/DIDConnect/app-info-item.tsx +82 -0
- package/src/DIDConnect/did-connect-footer.tsx +51 -0
- package/src/DIDConnect/did-connect-logo.tsx +8 -0
- package/src/DIDConnect/index.ts +7 -0
- package/src/DIDConnect/powered-by.tsx +48 -0
- package/src/DIDConnect/with-container.tsx +307 -0
- package/src/DIDConnect/with-ux-theme.tsx +22 -0
- package/src/Datatable/CustomToolbar.jsx +1 -0
- package/src/Datatable/index.jsx +107 -70
- package/src/Dialog/confirm.jsx +31 -23
- package/src/Dialog/use-confirm.jsx +6 -0
- package/src/Footer/index.tsx +2 -2
- package/src/Header/header.tsx +1 -1
- package/src/Header/responsive-header.tsx +2 -0
- package/src/Layout/dashboard/index.tsx +8 -4
- package/src/Layout/dashboard/sidebar.tsx +1 -2
- package/src/LoadingMask/index.tsx +3 -4
- package/src/Locale/selector.tsx +3 -4
- package/src/Locale/util.ts +7 -2
- package/src/LoginButton/index.tsx +73 -0
- package/src/NavMenu/nav-menu.tsx +15 -10
- package/src/NavMenu/products.tsx +1 -1
- package/src/NavMenu/style.ts +5 -2
- package/src/NavMenu/sub-item-group.tsx +1 -1
- package/src/PhoneInput/country-select.tsx +2 -3
- package/src/SessionBlocklet/index.tsx +3 -3
- package/src/SessionUser/components/did-space.tsx +14 -10
- package/src/SessionUser/components/logged-in.tsx +2 -2
- package/src/SessionUser/components/quick-login-item.tsx +11 -12
- package/src/SessionUser/components/session-user-item.tsx +3 -6
- package/src/SessionUser/components/session-user-switch.tsx +13 -12
- package/src/SessionUser/components/un-login.tsx +41 -33
- package/src/SessionUser/components/user-info.tsx +7 -8
- package/src/SessionUser/images/did-spaces.svg +7 -13
- package/src/SharedBridge/index.tsx +123 -0
- package/src/SharedBridge/need-storage-access-api-dialog.tsx +171 -0
- package/src/Success/index.tsx +6 -4
- package/src/Switch/index.jsx +3 -3
- package/src/Tabs/index.tsx +8 -9
- package/src/Theme/index.ts +2 -2
- package/src/Theme/theme-provider.tsx +73 -2
- package/src/Theme/theme.ts +73 -22
- package/src/UserCard/Container/card.tsx +1 -1
- package/src/UserCard/Container/dialog.tsx +1 -1
- package/src/Util/iframe.ts +19 -0
- package/src/Util/index.ts +102 -4
- package/src/type.d.ts +5 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, IconButton, Tooltip, useMediaQuery } from '@mui/material';
|
|
3
|
+
import CheckIcon from '@iconify-icons/material-symbols/check';
|
|
4
|
+
import { Icon } from '@iconify/react';
|
|
5
|
+
import DID from '../DID';
|
|
6
|
+
import { mergeSx } from '../Util/style';
|
|
7
|
+
import AppIcon from './app-icon';
|
|
8
|
+
export default function AppInfoItem({
|
|
9
|
+
appInfo,
|
|
10
|
+
active = false,
|
|
11
|
+
appLogo = null,
|
|
12
|
+
sx
|
|
13
|
+
}) {
|
|
14
|
+
const isTinyView = useMediaQuery('(max-width:400px)');
|
|
15
|
+
return /*#__PURE__*/_jsxs(Box, {
|
|
16
|
+
sx: mergeSx({
|
|
17
|
+
display: 'flex',
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
fontWeight: 600,
|
|
20
|
+
color: 'text.primary',
|
|
21
|
+
'& .app-info-content': {
|
|
22
|
+
paddingLeft: '8px',
|
|
23
|
+
overflow: 'hidden'
|
|
24
|
+
},
|
|
25
|
+
'& .app-info-name': {
|
|
26
|
+
maxWidth: '100%',
|
|
27
|
+
lineHeight: 'normal',
|
|
28
|
+
whiteSpace: 'nowrap',
|
|
29
|
+
overflow: 'hidden',
|
|
30
|
+
textOverflow: 'ellipsis',
|
|
31
|
+
fontSize: '12px',
|
|
32
|
+
color: 'text.primary'
|
|
33
|
+
}
|
|
34
|
+
}, sx),
|
|
35
|
+
children: [appLogo || /*#__PURE__*/_jsx(Box, {
|
|
36
|
+
sx: {
|
|
37
|
+
borderRadius: 1,
|
|
38
|
+
overflow: 'hidden',
|
|
39
|
+
fontSize: 0
|
|
40
|
+
},
|
|
41
|
+
children: /*#__PURE__*/_jsx(AppIcon, {
|
|
42
|
+
appInfo: appInfo
|
|
43
|
+
})
|
|
44
|
+
}), /*#__PURE__*/_jsxs(Box, {
|
|
45
|
+
className: "app-info-content",
|
|
46
|
+
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
47
|
+
title: appInfo.appName,
|
|
48
|
+
placement: "top",
|
|
49
|
+
children: /*#__PURE__*/_jsx(Box, {
|
|
50
|
+
className: "app-info-name",
|
|
51
|
+
children: appInfo.appName
|
|
52
|
+
})
|
|
53
|
+
}), appInfo.appPid && /*#__PURE__*/_jsx(DID, {
|
|
54
|
+
className: "app-info-did",
|
|
55
|
+
did: appInfo.appPid,
|
|
56
|
+
sx: {
|
|
57
|
+
fontSize: '10px !important'
|
|
58
|
+
},
|
|
59
|
+
copyable: false,
|
|
60
|
+
startChars: isTinyView ? 6 : 8,
|
|
61
|
+
endChars: isTinyView ? 6 : 8,
|
|
62
|
+
size: 12
|
|
63
|
+
})]
|
|
64
|
+
}), active ? /*#__PURE__*/_jsx(IconButton, {
|
|
65
|
+
size: "small",
|
|
66
|
+
color: "success",
|
|
67
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
68
|
+
icon: CheckIcon,
|
|
69
|
+
color: "success"
|
|
70
|
+
})
|
|
71
|
+
}) : null]
|
|
72
|
+
});
|
|
73
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, useMediaQuery } from '@mui/material';
|
|
3
|
+
import PoweredBy from './powered-by';
|
|
4
|
+
import AppInfoItem from './app-info-item';
|
|
5
|
+
import AppIcon from './app-icon';
|
|
6
|
+
import { getDIDColor, hexToRgba } from '../Util';
|
|
7
|
+
export default function DIDConnectFooter({
|
|
8
|
+
currentAppInfo = globalThis.blocklet,
|
|
9
|
+
currentAppColor = globalThis.blocklet?.appPid ? getDIDColor(globalThis.blocklet?.appPid) : '#fff'
|
|
10
|
+
}) {
|
|
11
|
+
const isSmallView = useMediaQuery('(max-width:640px)');
|
|
12
|
+
return /*#__PURE__*/_jsxs(Box, {
|
|
13
|
+
sx: {
|
|
14
|
+
display: 'flex',
|
|
15
|
+
justifyContent: 'space-between',
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
gap: 1,
|
|
18
|
+
fontSize: 12,
|
|
19
|
+
backgroundColor: hexToRgba(currentAppColor, 0.08),
|
|
20
|
+
// 需要保持跟 .did-connect__root 的规则一样
|
|
21
|
+
mx: isSmallView ? -2 : -3,
|
|
22
|
+
px: isSmallView ? 2 : 3,
|
|
23
|
+
py: 1.5,
|
|
24
|
+
// HACK: 极限条件下,footer 会溢出,使用隐藏的滚动条来处理这种情况(屏幕宽度小于 360 时会出现)
|
|
25
|
+
overflow: 'auto',
|
|
26
|
+
'&::-webkit-scrollbar': {
|
|
27
|
+
display: 'none' // 隐藏滚动条 (Webkit 浏览器)
|
|
28
|
+
},
|
|
29
|
+
'-ms-overflow-style': 'none',
|
|
30
|
+
// 隐藏滚动条 (IE 浏览器)
|
|
31
|
+
'scrollbar-width': 'none' // 隐藏滚动条 (Firefox)
|
|
32
|
+
},
|
|
33
|
+
className: "did-connect__footer",
|
|
34
|
+
children: [/*#__PURE__*/_jsx(AppInfoItem, {
|
|
35
|
+
appInfo: currentAppInfo,
|
|
36
|
+
appLogo: /*#__PURE__*/_jsx(AppIcon, {
|
|
37
|
+
appInfo: currentAppInfo,
|
|
38
|
+
size: 24,
|
|
39
|
+
sx: {
|
|
40
|
+
flexShrink: 0
|
|
41
|
+
}
|
|
42
|
+
}),
|
|
43
|
+
sx: {
|
|
44
|
+
flex: 1,
|
|
45
|
+
overflow: 'hidden'
|
|
46
|
+
}
|
|
47
|
+
}), /*#__PURE__*/_jsx(PoweredBy, {
|
|
48
|
+
sx: {
|
|
49
|
+
maxWidth: '100%',
|
|
50
|
+
justifyContent: 'end'
|
|
51
|
+
}
|
|
52
|
+
})]
|
|
53
|
+
});
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function DidConnectLogo(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import DidBrandConnect from '@arcblock/icons/lib/DidBrandConnect';
|
|
3
|
+
import { useTheme } from '@mui/material';
|
|
4
|
+
export default function DidConnectLogo() {
|
|
5
|
+
const theme = useTheme();
|
|
6
|
+
return /*#__PURE__*/_jsx(DidBrandConnect, {
|
|
7
|
+
style: {
|
|
8
|
+
filter: theme.palette.mode === 'dark' ? 'invert(1)' : 'none'
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as DIDConnectFooter } from './did-connect-footer';
|
|
2
|
+
export { default as AppInfoItem } from './app-info-item';
|
|
3
|
+
export { default as AppIcon } from './app-icon';
|
|
4
|
+
export { default as PoweredBy } from './powered-by';
|
|
5
|
+
export { default as withContainer } from './with-container';
|
|
6
|
+
export { default as withUxTheme } from './with-ux-theme';
|
|
7
|
+
export { default as DIDConnectLogo } from './did-connect-logo';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as DIDConnectFooter } from './did-connect-footer';
|
|
2
|
+
export { default as AppInfoItem } from './app-info-item';
|
|
3
|
+
export { default as AppIcon } from './app-icon';
|
|
4
|
+
export { default as PoweredBy } from './powered-by';
|
|
5
|
+
export { default as withContainer } from './with-container';
|
|
6
|
+
export { default as withUxTheme } from './with-ux-theme';
|
|
7
|
+
export { default as DIDConnectLogo } from './did-connect-logo';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, useTheme } from '@mui/material';
|
|
3
|
+
import { Icon } from '@iconify/react';
|
|
4
|
+
import shieldCheckIcon from '@iconify-icons/mdi/shield-check';
|
|
5
|
+
import DidConnectLogo from './did-connect-logo';
|
|
6
|
+
import { mergeSx } from '../Util/style';
|
|
7
|
+
export default function PoweredBy({
|
|
8
|
+
...rest
|
|
9
|
+
}) {
|
|
10
|
+
const {
|
|
11
|
+
palette
|
|
12
|
+
} = useTheme();
|
|
13
|
+
return /*#__PURE__*/_jsxs(Box, {
|
|
14
|
+
...rest,
|
|
15
|
+
sx: mergeSx({
|
|
16
|
+
display: 'flex',
|
|
17
|
+
alignItems: 'center',
|
|
18
|
+
justifyContent: 'center',
|
|
19
|
+
color: 'text.secondary',
|
|
20
|
+
gap: 0.5,
|
|
21
|
+
fontSize: 12,
|
|
22
|
+
fontFamily: 'Lexend',
|
|
23
|
+
whiteSpace: 'nowrap'
|
|
24
|
+
}, rest?.sx),
|
|
25
|
+
children: [/*#__PURE__*/_jsx(Icon, {
|
|
26
|
+
icon: shieldCheckIcon,
|
|
27
|
+
color: palette.success.main
|
|
28
|
+
}), "Secured by", /*#__PURE__*/_jsx(Box, {
|
|
29
|
+
component: "a",
|
|
30
|
+
href: "https://www.didconnect.io/",
|
|
31
|
+
target: "_blank",
|
|
32
|
+
rel: "noopener",
|
|
33
|
+
sx: {
|
|
34
|
+
color: 'initial',
|
|
35
|
+
display: 'flex',
|
|
36
|
+
alignItems: 'center',
|
|
37
|
+
gap: 0.5,
|
|
38
|
+
textDecoration: 'none',
|
|
39
|
+
'&:hover': {
|
|
40
|
+
textDecoration: 'underline'
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
children: /*#__PURE__*/_jsx(DidConnectLogo, {})
|
|
44
|
+
})]
|
|
45
|
+
});
|
|
46
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Locale } from '../type';
|
|
2
|
+
export default function withContainer(Component: React.ComponentType<any>): ({ popup, open, hideCloseButton, ...rest }: {
|
|
3
|
+
popup?: boolean;
|
|
4
|
+
open?: boolean;
|
|
5
|
+
hideCloseButton?: boolean;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
blocklet?: any;
|
|
8
|
+
origin?: string;
|
|
9
|
+
host?: string;
|
|
10
|
+
locale?: Locale;
|
|
11
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, memo, useRef, useState, createElement as _createElement } from 'react';
|
|
3
|
+
import { Dialog, DialogContent, useMediaQuery, Box, Backdrop, SwipeableDrawer, Drawer } from '@mui/material';
|
|
4
|
+
import { useDebounce, useMemoizedFn } from 'ahooks';
|
|
5
|
+
import { useBrowser } from '@arcblock/react-hooks';
|
|
6
|
+
import colorConvert from 'color-convert';
|
|
7
|
+
import { useTheme } from '../Theme';
|
|
8
|
+
import { mergeSx } from '../Util/style';
|
|
9
|
+
import { hexToRgba } from '../Util';
|
|
10
|
+
const BackdropWrap = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((backdropProps, ref) => {
|
|
11
|
+
return /*#__PURE__*/_createElement(Backdrop, {
|
|
12
|
+
open: true,
|
|
13
|
+
ref: ref,
|
|
14
|
+
style: {
|
|
15
|
+
backgroundColor: 'rgba(0, 0, 0, 0.6)',
|
|
16
|
+
backdropFilter: 'blur(3px)',
|
|
17
|
+
touchAction: 'none'
|
|
18
|
+
},
|
|
19
|
+
...backdropProps,
|
|
20
|
+
key: "background"
|
|
21
|
+
});
|
|
22
|
+
}));
|
|
23
|
+
export default function withContainer(Component) {
|
|
24
|
+
function WithContainerComponent({
|
|
25
|
+
popup = false,
|
|
26
|
+
open = false,
|
|
27
|
+
hideCloseButton = false,
|
|
28
|
+
...rest
|
|
29
|
+
}) {
|
|
30
|
+
const [color, setColor] = useState('#fff');
|
|
31
|
+
const drawerDragger = useRef(null);
|
|
32
|
+
const browser = useBrowser();
|
|
33
|
+
// 屏宽小于 sm 且在 mobile 设备中全屏显示 dialog (PC 端屏宽小于 sm 的情况正常弹窗, 不全屏显示)
|
|
34
|
+
const matchSm = useMediaQuery('(max-width:640px)');
|
|
35
|
+
let openVariant = 'page';
|
|
36
|
+
if (popup) {
|
|
37
|
+
openVariant = 'dialog';
|
|
38
|
+
if (matchSm && browser.mobile.any) {
|
|
39
|
+
openVariant = 'drawer';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const theme = useTheme();
|
|
43
|
+
|
|
44
|
+
// 兼容 did-react 版本中存在的 responsive prop, responsive=true 则让 dialog 始终保持 open 状态, 否则遵循外部传入的 open prop
|
|
45
|
+
const isOpen = open;
|
|
46
|
+
const leavingScreenDelay = theme?.transitions?.duration?.leavingScreen || 500; // 默认值是 195
|
|
47
|
+
const debouncedShow = useDebounce(isOpen, {
|
|
48
|
+
wait: leavingScreenDelay
|
|
49
|
+
});
|
|
50
|
+
const removeMagicToken = useMemoizedFn(() => {
|
|
51
|
+
const searchParams = new URLSearchParams(window.location.search);
|
|
52
|
+
if (searchParams.get('magicToken')) {
|
|
53
|
+
searchParams.delete('magicToken');
|
|
54
|
+
}
|
|
55
|
+
window.history.replaceState({}, '', `${window.location.pathname}?${searchParams.toString()}`);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// eslint-disable-next-line no-unused-vars
|
|
59
|
+
const handleOnClose = (e, reason) => {
|
|
60
|
+
if (['backdropClick', 'escapeKeyDown'].includes(reason)) return;
|
|
61
|
+
removeMagicToken();
|
|
62
|
+
rest?.onClose();
|
|
63
|
+
};
|
|
64
|
+
const showModal = debouncedShow || isOpen;
|
|
65
|
+
const DrawerComponent = hideCloseButton ? Drawer : SwipeableDrawer;
|
|
66
|
+
const hslColor = colorConvert.hex.hsl(color);
|
|
67
|
+
const [h, s, l] = hslColor;
|
|
68
|
+
const percentageList = [0, 30, 60, 30, 0, 30, 60, 30];
|
|
69
|
+
const maxPercentage = Math.max(...percentageList);
|
|
70
|
+
const minPercentage = Math.min(...percentageList);
|
|
71
|
+
let useAlpha = false;
|
|
72
|
+
if (l * (100 + maxPercentage) / 100 > 100 || l * (100 + minPercentage) / 100 < 0) {
|
|
73
|
+
// 超出范围,使用 alpha 通道变化
|
|
74
|
+
useAlpha = true;
|
|
75
|
+
}
|
|
76
|
+
const colorList = percentageList.map(percentageItem => {
|
|
77
|
+
let finalL = l * (100 + percentageItem) / 100;
|
|
78
|
+
let finalAlpha = 0.6;
|
|
79
|
+
if (useAlpha) {
|
|
80
|
+
finalAlpha = 0.5 * (100 + percentageItem) / 100;
|
|
81
|
+
} else {
|
|
82
|
+
finalL = l * (100 + percentageItem) / 100;
|
|
83
|
+
}
|
|
84
|
+
return `hsla(${h}, ${s}%, ${finalL}%, ${finalAlpha})`;
|
|
85
|
+
});
|
|
86
|
+
const background = `linear-gradient(45deg, ${colorList.join(', ')})`;
|
|
87
|
+
const colorListGlow = percentageList.map(percentageItem => {
|
|
88
|
+
let finalL = l * (100 + percentageItem) / 100;
|
|
89
|
+
let finalAlpha = 0.2;
|
|
90
|
+
if (useAlpha) {
|
|
91
|
+
finalAlpha = 0.3 * (100 + percentageItem) / 100;
|
|
92
|
+
} else {
|
|
93
|
+
finalL = l * (100 + percentageItem) / 100;
|
|
94
|
+
}
|
|
95
|
+
return `hsla(${h}, ${s}%, ${finalL}%, ${finalAlpha})`;
|
|
96
|
+
});
|
|
97
|
+
const backgroundGlow = `linear-gradient(45deg, ${colorListGlow.join(', ')})`;
|
|
98
|
+
const glowStyle = {
|
|
99
|
+
overflow: 'visible',
|
|
100
|
+
'&::before, &::after': {
|
|
101
|
+
content: '""',
|
|
102
|
+
position: 'absolute',
|
|
103
|
+
top: '-3px',
|
|
104
|
+
right: '-3px',
|
|
105
|
+
bottom: '-3px',
|
|
106
|
+
left: '-3px',
|
|
107
|
+
background,
|
|
108
|
+
backgroundSize: '300% 300%',
|
|
109
|
+
backgroundRepeat: 'no-repeat',
|
|
110
|
+
animation: 'glowRotate 10s linear infinite',
|
|
111
|
+
borderRadius: '14px !important',
|
|
112
|
+
zIndex: 0
|
|
113
|
+
},
|
|
114
|
+
'&::after': {
|
|
115
|
+
background: backgroundGlow,
|
|
116
|
+
filter: 'blur(15px)'
|
|
117
|
+
},
|
|
118
|
+
'@keyframes glowRotate': {
|
|
119
|
+
'0%': {
|
|
120
|
+
backgroundPosition: '0 0'
|
|
121
|
+
},
|
|
122
|
+
'50%': {
|
|
123
|
+
backgroundPosition: '100% 0'
|
|
124
|
+
},
|
|
125
|
+
'100%': {
|
|
126
|
+
backgroundPosition: '0 0'
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const wrapOnClose = useMemoizedFn(() => {
|
|
131
|
+
removeMagicToken();
|
|
132
|
+
rest?.onClose();
|
|
133
|
+
});
|
|
134
|
+
if (openVariant === 'page') {
|
|
135
|
+
return /*#__PURE__*/_jsx(Box, {
|
|
136
|
+
className: "did-connect__container-page",
|
|
137
|
+
sx: mergeSx(glowStyle, {
|
|
138
|
+
borderRadius: 1,
|
|
139
|
+
position: 'relative',
|
|
140
|
+
zIndex: 1
|
|
141
|
+
}),
|
|
142
|
+
children: /*#__PURE__*/_jsx(Box, {
|
|
143
|
+
sx: {
|
|
144
|
+
border: `1px solid ${hexToRgba(color, 0.1)}`,
|
|
145
|
+
m: '-1px',
|
|
146
|
+
position: 'relative',
|
|
147
|
+
borderRadius: '12px',
|
|
148
|
+
zIndex: 2,
|
|
149
|
+
overflow: 'hidden'
|
|
150
|
+
},
|
|
151
|
+
children: /*#__PURE__*/_jsx(Component, {
|
|
152
|
+
...rest,
|
|
153
|
+
onClose: wrapOnClose,
|
|
154
|
+
setColor: setColor,
|
|
155
|
+
hideCloseButton: true,
|
|
156
|
+
mode: openVariant
|
|
157
|
+
})
|
|
158
|
+
})
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (openVariant === 'drawer') {
|
|
162
|
+
return /*#__PURE__*/_jsxs(DrawerComponent, {
|
|
163
|
+
className: "did-connect__container-drawer",
|
|
164
|
+
disableSwipeToOpen: true,
|
|
165
|
+
open: isOpen,
|
|
166
|
+
anchor: "bottom",
|
|
167
|
+
drawerDragger: drawerDragger.current
|
|
168
|
+
// @ts-ignore
|
|
169
|
+
,
|
|
170
|
+
onClose: handleOnClose,
|
|
171
|
+
slots: {
|
|
172
|
+
backdrop: BackdropWrap
|
|
173
|
+
},
|
|
174
|
+
PaperProps: {
|
|
175
|
+
sx: {
|
|
176
|
+
borderRadius: 3,
|
|
177
|
+
// 保持跟 DID Wallet 一致
|
|
178
|
+
borderBottomLeftRadius: 0,
|
|
179
|
+
borderBottomRightRadius: 0,
|
|
180
|
+
p: '2px',
|
|
181
|
+
animation: 'glowBreathe 7s linear infinite',
|
|
182
|
+
'.did-connect__root': {
|
|
183
|
+
backgroundColor: 'transparent'
|
|
184
|
+
},
|
|
185
|
+
overflow: 'hidden',
|
|
186
|
+
'@keyframes glowBreathe': {
|
|
187
|
+
'0%, 100%': {
|
|
188
|
+
boxShadow: `
|
|
189
|
+
inset 0 0 7px ${hexToRgba(color, 0.3)},
|
|
190
|
+
inset 0 0 12px ${hexToRgba(color, 0.3)}`
|
|
191
|
+
},
|
|
192
|
+
'50%': {
|
|
193
|
+
boxShadow: `
|
|
194
|
+
inset 0 0 18px ${hexToRgba(color, 0.7)},
|
|
195
|
+
inset 0 0 24px ${hexToRgba(color, 0.5)}`
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
children: [hideCloseButton ? null : /*#__PURE__*/_jsx(Box, {
|
|
201
|
+
ref: drawerDragger,
|
|
202
|
+
sx: {
|
|
203
|
+
px: 1,
|
|
204
|
+
pt: 2,
|
|
205
|
+
m: 'auto',
|
|
206
|
+
mt: -1,
|
|
207
|
+
mb: -2,
|
|
208
|
+
zIndex: 2
|
|
209
|
+
},
|
|
210
|
+
children: /*#__PURE__*/_jsx(Box, {
|
|
211
|
+
sx: {
|
|
212
|
+
width: '48px',
|
|
213
|
+
height: '4px',
|
|
214
|
+
borderRadius: '100vw',
|
|
215
|
+
backgroundColor: 'rgba(0, 0, 0, 0.2)'
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
}), /*#__PURE__*/_jsx(Box, {
|
|
219
|
+
sx: {
|
|
220
|
+
touchAction: 'none',
|
|
221
|
+
maxWidth: '100%',
|
|
222
|
+
width: 500,
|
|
223
|
+
height: 'auto'
|
|
224
|
+
},
|
|
225
|
+
children: showModal ? /*#__PURE__*/_jsx(Component, {
|
|
226
|
+
...rest,
|
|
227
|
+
onClose: wrapOnClose,
|
|
228
|
+
setColor: setColor,
|
|
229
|
+
hideCloseButton: true,
|
|
230
|
+
mode: openVariant
|
|
231
|
+
}) : null
|
|
232
|
+
})]
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
return /*#__PURE__*/_jsx(Dialog, {
|
|
236
|
+
open: isOpen,
|
|
237
|
+
slots: {
|
|
238
|
+
backdrop: BackdropWrap
|
|
239
|
+
},
|
|
240
|
+
className: "did-connect__container-dialog",
|
|
241
|
+
onClose: handleOnClose,
|
|
242
|
+
PaperProps: {
|
|
243
|
+
sx: {
|
|
244
|
+
// 避免样式被 server 中的定义覆盖
|
|
245
|
+
'&.MuiPaper-rounded': {
|
|
246
|
+
borderRadius: '12px !important'
|
|
247
|
+
},
|
|
248
|
+
position: 'relative',
|
|
249
|
+
...glowStyle
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
children: /*#__PURE__*/_jsx(DialogContent, {
|
|
253
|
+
sx: {
|
|
254
|
+
maxWidth: 'calc(100vw - 18px)',
|
|
255
|
+
maxHeight: 'calc(100vh - 18px)',
|
|
256
|
+
p: '0px !important',
|
|
257
|
+
height: 'auto',
|
|
258
|
+
backgroundColor: 'background.default',
|
|
259
|
+
borderRadius: '12px !important',
|
|
260
|
+
zIndex: 1
|
|
261
|
+
},
|
|
262
|
+
children: showModal ? /*#__PURE__*/_jsx(Component, {
|
|
263
|
+
...rest,
|
|
264
|
+
onClose: wrapOnClose,
|
|
265
|
+
setColor: setColor,
|
|
266
|
+
hideCloseButton: hideCloseButton,
|
|
267
|
+
mode: openVariant
|
|
268
|
+
}) : null
|
|
269
|
+
})
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return WithContainerComponent;
|
|
273
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function withUxTheme(Component: React.ComponentType<any>): (props: any) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createTheme, useTheme } from '@mui/material';
|
|
3
|
+
import { DID_CONNECT_THEME_LIGHT, DID_CONNECT_THEME_DARK } from '@blocklet/theme';
|
|
4
|
+
import { ThemeProvider } from '../Theme';
|
|
5
|
+
|
|
6
|
+
// DID Connect 使用自己的 Theme 配置,不受 Blocklet theme 影响
|
|
7
|
+
const themeLight = createTheme(DID_CONNECT_THEME_LIGHT);
|
|
8
|
+
const themeDark = createTheme(DID_CONNECT_THEME_DARK);
|
|
9
|
+
export default function withUxTheme(Component) {
|
|
10
|
+
function WithUxThemeComponent(props) {
|
|
11
|
+
const {
|
|
12
|
+
palette
|
|
13
|
+
} = useTheme();
|
|
14
|
+
const theme = palette.mode === 'dark' ? themeDark : themeLight;
|
|
15
|
+
return /*#__PURE__*/_jsx(ThemeProvider, {
|
|
16
|
+
theme: theme,
|
|
17
|
+
children: /*#__PURE__*/_jsx(Component, {
|
|
18
|
+
...props
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return WithUxThemeComponent;
|
|
23
|
+
}
|