@arcblock/ux 2.10.67 → 2.10.69
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/did-address.d.ts +6 -5
- package/lib/Address/index.d.ts +1 -1
- package/lib/Avatar/index.d.ts +10 -8
- package/lib/Avatar/index.js +6 -4
- package/lib/Blocklet/blocklet.d.ts +4 -4
- package/lib/Blocklet/blocklet.js +2 -2
- package/lib/BlockletContext/index.d.ts +3 -3
- package/lib/BlockletNFT/index.d.ts +6 -6
- package/lib/BlockletNFT/index.js +3 -3
- package/lib/BlockletV2/blocklet.d.ts +2 -2
- package/lib/Button/wrap.d.ts +4 -4
- package/lib/Button/wrap.js +2 -2
- package/lib/CardSelector/index.js +0 -1
- package/lib/Center/index.d.ts +1 -1
- package/lib/ClickToCopy/copy-button.d.ts +5 -4
- package/lib/ClickToCopy/copy-button.js +0 -1
- package/lib/ClickToCopy/hook.d.ts +3 -8
- package/lib/ClickToCopy/index.d.ts +6 -4
- package/lib/CodeBlock/index.d.ts +3 -1
- package/lib/CookieConsent/index.d.ts +8 -29
- package/lib/CookieConsent/index.js +3 -17
- package/lib/CountDown/index.d.ts +21 -25
- package/lib/CountDown/index.js +12 -11
- package/lib/DID/index.d.ts +9 -8
- package/lib/Datatable/index.d.ts +5 -5
- package/lib/Datatable/index.js +5 -5
- package/lib/Dialog/confirm.d.ts +6 -6
- package/lib/Dialog/confirm.js +3 -3
- package/lib/Dialog/types.d.ts +1 -1
- package/lib/DidLogo/index.d.ts +5 -25
- package/lib/DidLogo/index.js +4 -15
- package/lib/DriftBot/index.d.ts +13 -19
- package/lib/DriftBot/index.js +5 -6
- package/lib/Earth/index.d.ts +28 -10
- package/lib/Earth/index.js +12 -52
- package/lib/Earth/util.d.ts +10 -5
- package/lib/Earth/util.js +1 -0
- package/lib/ErrorBoundary/fallback.d.ts +12 -19
- package/lib/ErrorBoundary/fallback.js +2 -19
- package/lib/ErrorBoundary/index.d.ts +1 -1
- package/lib/Footer/index.d.ts +17 -24
- package/lib/Footer/index.js +2 -11
- package/lib/Header/header.d.ts +2 -2
- package/lib/Icon/image.d.ts +3 -2
- package/lib/Icon/index.d.ts +6 -4
- package/lib/Img/index.d.ts +1 -1
- package/lib/Img/index.js +1 -1
- package/lib/InfoRow/index.d.ts +9 -32
- package/lib/InfoRow/index.js +10 -23
- package/lib/Layout/dashboard/external-link.d.ts +13 -14
- package/lib/Layout/dashboard/external-link.js +5 -22
- package/lib/Layout/dashboard/full-page.d.ts +19 -11
- package/lib/Layout/dashboard/full-page.js +2 -6
- package/lib/Layout/dashboard/index.d.ts +20 -39
- package/lib/Layout/dashboard/index.js +10 -38
- package/lib/Layout/dashboard/sidebar.d.ts +17 -20
- package/lib/Layout/dashboard/sidebar.js +3 -16
- package/lib/Layout/dashboard-legacy/header.d.ts +10 -36
- package/lib/Layout/dashboard-legacy/header.js +5 -24
- package/lib/Layout/dashboard-legacy/index.d.ts +17 -56
- package/lib/Layout/dashboard-legacy/index.js +12 -41
- package/lib/Layout/dashboard-legacy/sidebar.d.ts +15 -26
- package/lib/Layout/dashboard-legacy/sidebar.js +5 -15
- package/lib/Layout/index.d.ts +17 -56
- package/lib/Layout/index.js +24 -50
- package/lib/LoadingMask/index.d.ts +8 -31
- package/lib/LoadingMask/index.js +3 -19
- package/lib/Locale/browser-lang.d.ts +4 -1
- package/lib/Locale/browser-lang.js +8 -3
- package/lib/Locale/context.d.ts +18 -8
- package/lib/Locale/context.js +1 -1
- package/lib/Locale/languages.d.ts +9 -55
- package/lib/Locale/selector.d.ts +10 -26
- package/lib/Locale/selector.js +8 -25
- package/lib/Locale/util.d.ts +4 -3
- package/lib/Locale/util.js +0 -1
- package/lib/Logo/index.d.ts +9 -40
- package/lib/Logo/index.js +88 -46
- package/lib/Metric/index.d.ts +9 -31
- package/lib/Metric/index.js +5 -20
- package/lib/NFTDisplay/aspect-ratio-container.d.ts +5 -12
- package/lib/NFTDisplay/aspect-ratio-container.js +0 -5
- package/lib/NFTDisplay/broken.d.ts +3 -13
- package/lib/NFTDisplay/broken.js +80 -10
- package/lib/NFTDisplay/displayApi.d.ts +1 -1
- package/lib/NFTDisplay/index.d.ts +28 -6
- package/lib/NFTDisplay/index.js +17 -51
- package/lib/NFTDisplay/svg-embedder/img.d.ts +8 -23
- package/lib/NFTDisplay/svg-embedder/img.js +3 -17
- package/lib/NFTDisplay/svg-embedder/inline-svg.d.ts +7 -13
- package/lib/NFTDisplay/svg-embedder/inline-svg.js +1 -8
- package/lib/NavMenu/nav-menu.d.ts +2 -0
- package/lib/NavMenu/nav-menu.js +0 -1
- package/lib/PageScroller/index.d.ts +14 -13
- package/lib/PageScroller/index.js +12 -37
- package/lib/PageScroller/usePrevValue.d.ts +1 -1
- package/lib/PageScroller/usePrevValue.js +1 -2
- package/lib/Passport/index.d.ts +1 -1
- package/lib/Passport/passport.d.ts +10 -30
- package/lib/Passport/passport.js +5 -19
- package/lib/PoweredByArcBlock/index.d.ts +4 -14
- package/lib/PoweredByArcBlock/index.js +1 -8
- package/lib/PricingTable/PricingPlan.d.ts +11 -9
- package/lib/PricingTable/PricingPlan.js +0 -4
- package/lib/PricingTable/index.d.ts +5 -3
- package/lib/PricingTable/index.js +1 -5
- package/lib/QRCode/index.d.ts +11 -22
- package/lib/QRCode/index.js +2 -17
- package/lib/RelativeTime/index.d.ts +12 -40
- package/lib/RelativeTime/index.js +7 -27
- package/lib/Result/common.d.ts +26 -45
- package/lib/Result/common.js +2 -4
- package/lib/Result/index.d.ts +5 -18
- package/lib/Result/index.js +1 -9
- package/lib/Result/result.d.ts +7 -29
- package/lib/Result/result.js +2 -17
- package/lib/Result/translations.d.ts +2 -54
- package/lib/Screenshot/BaseScreenshot/index.d.ts +7 -24
- package/lib/Screenshot/BaseScreenshot/index.js +2 -15
- package/lib/Screenshot/BaseScreenshot/shells/Macbook.d.ts +25 -19
- package/lib/Screenshot/BaseScreenshot/shells/Phone.d.ts +25 -19
- package/lib/Screenshot/index.d.ts +84 -28
- package/lib/Screenshot/index.js +14 -43
- package/lib/SessionBlocklet/index.d.ts +6 -19
- package/lib/SessionBlocklet/index.js +5 -15
- package/lib/SessionManager/index.d.ts +1 -1
- package/lib/SessionPermission/index.d.ts +9 -17
- package/lib/SessionPermission/index.js +3 -11
- package/lib/SessionUser/components/logged-in.d.ts +9 -31
- package/lib/SessionUser/components/logged-in.js +13 -29
- package/lib/SessionUser/components/session-user-item.d.ts +8 -1
- package/lib/SessionUser/components/session-user-item.js +2 -12
- package/lib/SessionUser/components/session-user-switch.d.ts +9 -21
- package/lib/SessionUser/components/session-user-switch.js +3 -15
- package/lib/SessionUser/components/un-login.d.ts +7 -23
- package/lib/SessionUser/components/un-login.js +4 -16
- package/lib/SessionUser/components/user-info.d.ts +12 -29
- package/lib/SessionUser/components/user-info.js +4 -19
- package/lib/SessionUser/index.d.ts +7 -30
- package/lib/SessionUser/index.js +5 -26
- package/lib/SessionUser/libs/translation.d.ts +2 -31
- package/lib/SessionUser/libs/translation.js +1 -0
- package/lib/SessionUser/libs/utils.d.ts +10 -9
- package/lib/Sparkline/index.d.ts +22 -1
- package/lib/Sparkline/index.js +25 -17
- package/lib/Spinner/index.d.ts +6 -1
- package/lib/Spinner/index.js +4 -11
- package/lib/Success/index.d.ts +5 -21
- package/lib/Success/index.js +10 -19
- package/lib/Tabs/index.d.ts +12 -26
- package/lib/Tabs/index.js +7 -37
- package/lib/TextCollapse/index.d.ts +10 -10
- package/lib/TextCollapse/index.js +4 -21
- package/lib/Theme/index.js +0 -2
- package/lib/Theme/theme-provider.d.ts +1 -1
- package/lib/Theme/theme.d.ts +4 -1
- package/lib/Theme/theme.js +1 -2
- package/lib/Typography/index.d.ts +5 -24
- package/lib/Typography/index.js +5 -17
- package/lib/Util/index.d.ts +17 -8
- package/lib/Util/index.js +22 -3
- package/lib/Video/index.d.ts +12 -16
- package/lib/Video/index.js +0 -14
- package/lib/Wallet/Action.d.ts +13 -18
- package/lib/Wallet/Action.js +0 -7
- package/lib/Wallet/Download.d.ts +24 -30
- package/lib/Wallet/Download.js +201 -18
- package/lib/Wallet/Open.d.ts +5 -15
- package/lib/Wallet/Open.js +5 -11
- package/lib/WalletOSIcon/index.d.ts +6 -25
- package/lib/WalletOSIcon/index.js +3 -16
- package/lib/WebWalletSWKeeper/index.d.ts +8 -20
- package/lib/WebWalletSWKeeper/index.js +14 -19
- package/lib/WechatPrompt/index.js +2 -0
- package/lib/global.d.ts +15 -0
- package/lib/type.d.ts +12 -3
- package/lib/withTheme/index.d.ts +8 -6
- package/lib/withTracker/index.d.ts +1 -1
- package/lib/withTracker/index.js +3 -0
- package/package.json +9 -5
- package/src/Address/did-address.tsx +7 -6
- package/src/Address/index.tsx +1 -1
- package/src/Avatar/index.jsx +6 -4
- package/src/Blocklet/blocklet.jsx +2 -2
- package/src/BlockletContext/index.tsx +3 -3
- package/src/BlockletNFT/index.jsx +3 -3
- package/src/BlockletV2/blocklet.tsx +2 -2
- package/src/Button/wrap.jsx +2 -2
- package/src/CardSelector/index.tsx +0 -1
- package/src/Center/index.tsx +1 -1
- package/src/ClickToCopy/copy-button.tsx +4 -4
- package/src/ClickToCopy/hook.ts +3 -2
- package/src/ClickToCopy/index.tsx +6 -5
- package/src/CodeBlock/index.tsx +3 -1
- package/src/CookieConsent/{index.jsx → index.tsx} +16 -19
- package/src/CountDown/{index.jsx → index.tsx} +30 -16
- package/src/DID/index.tsx +9 -8
- package/src/Datatable/index.jsx +5 -5
- package/src/Dialog/confirm.jsx +3 -3
- package/src/Dialog/types.d.ts +1 -1
- package/src/DidLogo/{index.jsx → index.tsx} +7 -14
- package/src/DriftBot/{index.jsx → index.tsx} +13 -11
- package/src/Earth/{index.jsx → index.tsx} +94 -66
- package/src/Earth/{util.js → util.ts} +20 -17
- package/src/ErrorBoundary/{fallback.jsx → fallback.tsx} +20 -21
- package/src/Footer/{index.jsx → index.tsx} +17 -14
- package/src/Header/header.tsx +2 -3
- package/src/Header/responsive-header.tsx +0 -1
- package/src/Icon/image.tsx +3 -3
- package/src/Icon/index.tsx +7 -4
- package/src/Img/index.jsx +1 -1
- package/src/InfoRow/{index.jsx → index.tsx} +32 -25
- package/src/Layout/dashboard/external-link.tsx +46 -0
- package/src/Layout/dashboard/{full-page.jsx → full-page.tsx} +20 -9
- package/src/Layout/dashboard/{index.jsx → index.tsx} +42 -44
- package/src/Layout/dashboard/{sidebar.jsx → sidebar.tsx} +23 -20
- package/src/Layout/dashboard-legacy/{header.jsx → header.tsx} +16 -26
- package/src/Layout/dashboard-legacy/{index.jsx → index.tsx} +32 -46
- package/src/Layout/dashboard-legacy/{sidebar.jsx → sidebar.tsx} +27 -19
- package/src/Layout/{index.jsx → index.tsx} +41 -47
- package/src/LoadingMask/{index.jsx → index.tsx} +18 -20
- package/src/Locale/{browser-lang.js → browser-lang.ts} +9 -7
- package/src/Locale/context.tsx +18 -11
- package/src/Locale/{languages.js → languages.ts} +1 -1
- package/src/Locale/{selector.jsx → selector.tsx} +32 -29
- package/src/Locale/{util.js → util.ts} +9 -2
- package/src/Logo/index.tsx +58 -0
- package/src/Metric/{index.jsx → index.tsx} +23 -18
- package/src/NFTDisplay/{aspect-ratio-container.jsx → aspect-ratio-container.tsx} +9 -7
- package/src/NFTDisplay/{broken.jsx → broken.tsx} +7 -12
- package/src/NFTDisplay/{displayApi.js → displayApi.ts} +4 -4
- package/src/NFTDisplay/{index.jsx → index.tsx} +59 -64
- package/src/NFTDisplay/svg-embedder/{img.jsx → img.tsx} +10 -18
- package/src/NFTDisplay/svg-embedder/{inline-svg.jsx → inline-svg.tsx} +8 -9
- package/src/NavMenu/nav-menu.tsx +2 -3
- package/src/PageScroller/{index.jsx → index.tsx} +40 -53
- package/src/PageScroller/{usePrevValue.js → usePrevValue.ts} +2 -3
- package/src/Passport/{passport.jsx → passport.tsx} +22 -19
- package/src/PoweredByArcBlock/{index.jsx → index.tsx} +6 -11
- package/src/PricingTable/{PricingPlan.jsx → PricingPlan.tsx} +15 -5
- package/src/PricingTable/{index.jsx → index.tsx} +9 -6
- package/src/QRCode/{index.jsx → index.tsx} +14 -19
- package/src/RelativeTime/{index.jsx → index.tsx} +24 -24
- package/src/Result/{common.jsx → common.tsx} +17 -13
- package/src/Result/index.tsx +30 -0
- package/src/Result/{result.jsx → result.tsx} +8 -17
- package/src/Result/{translations.js → translations.ts} +3 -1
- package/src/Screenshot/BaseScreenshot/{index.jsx → index.tsx} +9 -15
- package/src/Screenshot/BaseScreenshot/shells/{Macbook.jsx → Macbook.tsx} +3 -1
- package/src/Screenshot/BaseScreenshot/shells/{Phone.jsx → Phone.tsx} +3 -1
- package/src/Screenshot/{index.jsx → index.tsx} +60 -54
- package/src/SessionBlocklet/{index.jsx → index.tsx} +9 -14
- package/src/SessionPermission/index.tsx +25 -0
- package/src/SessionUser/components/{logged-in.jsx → logged-in.tsx} +49 -31
- package/src/SessionUser/components/session-user-item.tsx +97 -0
- package/src/SessionUser/components/{session-user-switch.jsx → session-user-switch.tsx} +16 -21
- package/src/SessionUser/components/{un-login.jsx → un-login.tsx} +10 -15
- package/src/SessionUser/components/{user-info.jsx → user-info.tsx} +16 -22
- package/src/SessionUser/index.tsx +26 -0
- package/src/SessionUser/libs/{translation.js → translation.ts} +3 -1
- package/src/SessionUser/libs/utils.ts +39 -0
- package/src/Sparkline/{index.jsx → index.tsx} +38 -22
- package/src/Spinner/index.tsx +20 -0
- package/src/Success/{index.jsx → index.tsx} +13 -16
- package/src/Tabs/{index.jsx → index.tsx} +26 -40
- package/src/TextCollapse/{index.jsx → index.tsx} +26 -21
- package/src/Theme/index.ts +0 -1
- package/src/Theme/theme-provider.tsx +1 -1
- package/src/Theme/theme.ts +6 -3
- package/src/Typography/{index.jsx → index.tsx} +19 -22
- package/src/Util/index.ts +26 -9
- package/src/Video/{index.jsx → index.tsx} +7 -10
- package/src/Wallet/{Action.jsx → Action.tsx} +16 -12
- package/src/Wallet/{Download.jsx → Download.tsx} +25 -21
- package/src/Wallet/{Open.jsx → Open.tsx} +8 -11
- package/src/WalletOSIcon/{index.jsx → index.tsx} +8 -16
- package/src/WebWalletSWKeeper/{index.jsx → index.tsx} +21 -24
- package/src/WechatPrompt/{index.jsx → index.tsx} +1 -0
- package/src/global.d.ts +15 -0
- package/src/type.d.ts +12 -3
- package/src/withTheme/{index.jsx → index.tsx} +12 -2
- package/src/withTracker/{index.jsx → index.tsx} +6 -4
- package/src/Layout/dashboard/external-link.jsx +0 -47
- package/src/Logo/index.jsx +0 -66
- package/src/Result/index.jsx +0 -33
- package/src/SessionPermission/index.jsx +0 -28
- package/src/SessionUser/components/session-user-item.jsx +0 -93
- package/src/SessionUser/index.jsx +0 -38
- package/src/SessionUser/libs/utils.js +0 -37
- package/src/Spinner/index.jsx +0 -21
- /package/src/ErrorBoundary/{index.jsx → index.ts} +0 -0
- /package/src/NFTDisplay/{loading.jsx → loading.tsx} +0 -0
- /package/src/Passport/{index.jsx → index.ts} +0 -0
- /package/src/SessionManager/{index.jsx → index.tsx} +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
import
|
1
|
+
import { type SxProps } from '@mui/material';
|
2
2
|
|
3
3
|
import phone from './shells/Phone';
|
4
4
|
import macbook from './shells/Macbook';
|
@@ -9,10 +9,16 @@ const map = {
|
|
9
9
|
macbook,
|
10
10
|
};
|
11
11
|
|
12
|
-
|
12
|
+
export interface ScreenshotProps extends React.ComponentProps<'div'> {
|
13
|
+
width?: number;
|
14
|
+
type?: string;
|
15
|
+
sx?: SxProps;
|
16
|
+
}
|
17
|
+
|
18
|
+
function Screenshot({ width = 0, children, type = 'phone', ...rest }: ScreenshotProps) {
|
13
19
|
const _type = type.toLowerCase();
|
14
20
|
|
15
|
-
const { Shell, ratio, screenData, width: defaultWidth } = map[_type || 'phone'];
|
21
|
+
const { Shell, ratio, screenData, width: defaultWidth } = map[(_type as keyof typeof map) || 'phone'];
|
16
22
|
|
17
23
|
const Root = styled('div')`
|
18
24
|
position: relative;
|
@@ -64,16 +70,4 @@ function Screenshot({ width, children, type, sx, ...rest }) {
|
|
64
70
|
);
|
65
71
|
}
|
66
72
|
|
67
|
-
Screenshot.propTypes = {
|
68
|
-
width: PropTypes.number,
|
69
|
-
type: PropTypes.string,
|
70
|
-
children: PropTypes.node.isRequired,
|
71
|
-
sx: PropTypes.object,
|
72
|
-
};
|
73
|
-
Screenshot.defaultProps = {
|
74
|
-
width: 0,
|
75
|
-
type: 'phone',
|
76
|
-
sx: {},
|
77
|
-
};
|
78
|
-
|
79
73
|
export default Screenshot;
|
@@ -1,4 +1,6 @@
|
|
1
|
-
export
|
1
|
+
export interface ShellProps extends React.ComponentProps<'svg'> {}
|
2
|
+
|
3
|
+
export function Shell({ ...rest }: ShellProps) {
|
2
4
|
return (
|
3
5
|
<svg width="909" height="517" viewBox="0 0 909 517" fill="none" xmlns="http://www.w3.org/2000/svg" {...rest}>
|
4
6
|
<path d="M48 16C48 7.16343 55.1634 0 64 0H845C853.837 0 861 7.16344 861 16V490H48V16Z" fill="black" />
|
@@ -1,7 +1,9 @@
|
|
1
1
|
export const width = 268;
|
2
2
|
export const height = 554;
|
3
3
|
|
4
|
-
export
|
4
|
+
export interface ShellProps extends React.ComponentProps<'svg'> {}
|
5
|
+
|
6
|
+
export function Shell({ ...rest }: ShellProps) {
|
5
7
|
return (
|
6
8
|
<svg width="268" height="554" viewBox="0 0 268 554" fill="none" xmlns="http://www.w3.org/2000/svg" {...rest}>
|
7
9
|
<path
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { createElement, Children, cloneElement, useEffect, useRef, useState } from 'react';
|
2
|
-
import
|
2
|
+
import { type SxProps } from '@mui/material';
|
3
3
|
|
4
4
|
import { mergeProps } from '../Util';
|
5
5
|
import { styled } from '../Theme';
|
@@ -7,6 +7,13 @@ import BaseScreenshot from './BaseScreenshot';
|
|
7
7
|
|
8
8
|
import './devices.css';
|
9
9
|
|
10
|
+
type DeviceStyles = {
|
11
|
+
borderRadius: number;
|
12
|
+
width: number;
|
13
|
+
scale: number;
|
14
|
+
zIndex?: number;
|
15
|
+
};
|
16
|
+
|
10
17
|
const types = {
|
11
18
|
'iphone-x': {
|
12
19
|
borderRadius: 32,
|
@@ -80,26 +87,26 @@ const childProps = {
|
|
80
87
|
video: ['alt', 'title', 'muted', 'autoplay', 'loop', 'key', 'children'],
|
81
88
|
};
|
82
89
|
|
83
|
-
const createChild = (child) => [
|
90
|
+
const createChild = (child: React.ReactElement) => [
|
84
91
|
createElement(
|
85
92
|
child.type,
|
86
|
-
childProps[child.type].reduce((acc, x) => {
|
93
|
+
childProps[child.type as keyof typeof childProps].reduce((acc: Record<string, any>, x: string) => {
|
87
94
|
acc[x] = child.props[x];
|
88
95
|
return acc;
|
89
96
|
}, {})
|
90
97
|
),
|
91
98
|
];
|
92
99
|
|
93
|
-
const findChildren = (children, returnArgWhenNotFound = true) => {
|
100
|
+
const findChildren = (children: React.ReactElement[], returnArgWhenNotFound = true): React.ReactElement[] | null => {
|
94
101
|
for (let i = 0; i < children.length; i++) {
|
95
102
|
const child = children[i];
|
96
103
|
|
97
|
-
if (['img', 'video'].includes(child.type)) {
|
104
|
+
if (['img', 'video'].includes(child.type as string)) {
|
98
105
|
return createChild(child);
|
99
106
|
}
|
100
107
|
|
101
108
|
if (child.props && child.props.children) {
|
102
|
-
const subChildren = Children.toArray(child.props.children);
|
109
|
+
const subChildren = Children.toArray(child.props.children) as React.ReactElement[];
|
103
110
|
const result = findChildren(subChildren, false);
|
104
111
|
if (result) {
|
105
112
|
return result;
|
@@ -114,18 +121,27 @@ const findChildren = (children, returnArgWhenNotFound = true) => {
|
|
114
121
|
return null;
|
115
122
|
};
|
116
123
|
|
124
|
+
export interface OldScreenshotProps extends React.ComponentProps<'div'> {
|
125
|
+
type?: keyof typeof types;
|
126
|
+
className?: string;
|
127
|
+
style?: React.CSSProperties;
|
128
|
+
width?: number;
|
129
|
+
height?: number;
|
130
|
+
sx?: SxProps;
|
131
|
+
}
|
132
|
+
|
117
133
|
// This component is built upon the awesome device.css lib
|
118
134
|
// By default it will find and only render img/video tags in the children
|
119
135
|
// If neither of them are found, the whole child tree is rendered
|
120
|
-
function OldScreenshot(props) {
|
121
|
-
const newProps = mergeProps(props, OldScreenshot, ['style', 'width', 'height']);
|
136
|
+
function OldScreenshot(props: OldScreenshotProps) {
|
137
|
+
const newProps = mergeProps(props, OldScreenshot, ['style', 'width', 'height']) as OldScreenshotProps;
|
122
138
|
const { type, children, style, className, width, height, ...rest } = newProps;
|
123
|
-
const { zIndex = 0, borderRadius = 0 } = types[type] || {};
|
139
|
+
const { zIndex = 0, borderRadius = 0 } = (types[type!] || {}) as DeviceStyles;
|
124
140
|
|
125
141
|
return (
|
126
142
|
<Div
|
127
143
|
{...rest}
|
128
|
-
type={type}
|
144
|
+
type={type!}
|
129
145
|
className={`device device-${type} ${className}`.trim()}
|
130
146
|
style={style}
|
131
147
|
contentRadius={borderRadius}
|
@@ -133,7 +149,9 @@ function OldScreenshot(props) {
|
|
133
149
|
<div className="device-frame">
|
134
150
|
<div className="device-content">
|
135
151
|
{/* eslint-disable-next-line react/no-array-index-key */}
|
136
|
-
{findChildren(Children.toArray(children))
|
152
|
+
{findChildren(Children.toArray(children) as React.ReactElement[])?.map((item: any, index: number) =>
|
153
|
+
cloneElement(item, { key: index })
|
154
|
+
)}
|
137
155
|
</div>
|
138
156
|
</div>
|
139
157
|
<div className="device-stripe" />
|
@@ -145,7 +163,21 @@ function OldScreenshot(props) {
|
|
145
163
|
);
|
146
164
|
}
|
147
165
|
|
148
|
-
|
166
|
+
OldScreenshot.defaultProps = {
|
167
|
+
type: 'iphone-x' as const,
|
168
|
+
className: '',
|
169
|
+
style: {},
|
170
|
+
width: 0,
|
171
|
+
height: 0,
|
172
|
+
};
|
173
|
+
|
174
|
+
type DivProps = {
|
175
|
+
type: keyof typeof types;
|
176
|
+
contentRadius: number;
|
177
|
+
contentZIndex: number;
|
178
|
+
};
|
179
|
+
|
180
|
+
const Div = styled('div')<DivProps>`
|
149
181
|
@media (max-width: ${(props) => types[props.type].width}px) {
|
150
182
|
transform-origin: 0 0;
|
151
183
|
transform: scale(${(props) => types[props.type].scale});
|
@@ -165,41 +197,26 @@ const Div = styled('div')`
|
|
165
197
|
}
|
166
198
|
`;
|
167
199
|
|
168
|
-
|
169
|
-
type: PropTypes.oneOf(Object.keys(types)),
|
170
|
-
children: PropTypes.any.isRequired,
|
171
|
-
className: PropTypes.string,
|
172
|
-
width: PropTypes.number,
|
173
|
-
height: PropTypes.number,
|
174
|
-
style: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
|
175
|
-
};
|
176
|
-
|
177
|
-
OldScreenshot.defaultProps = {
|
178
|
-
type: 'iphone-x',
|
179
|
-
className: '',
|
180
|
-
style: '{}',
|
181
|
-
width: 0,
|
182
|
-
height: 0,
|
183
|
-
};
|
200
|
+
export interface ScreenFixerProps extends OldScreenshotProps {}
|
184
201
|
|
185
202
|
/**
|
186
203
|
* 用于修正旧版 Screenshot 无法匹配尺寸的问题
|
187
204
|
* @param {*} props params to OldScreenshot
|
188
205
|
* @returns <OldScreenshot />
|
189
206
|
*/
|
190
|
-
function ScreenFixer(props) {
|
191
|
-
const screenEl = useRef(null);
|
192
|
-
const [height, setHeight] = useState(
|
193
|
-
const [scale, setScale] = useState(null);
|
207
|
+
function ScreenFixer(props: ScreenFixerProps) {
|
208
|
+
const screenEl = useRef<HTMLDivElement>(null);
|
209
|
+
const [height, setHeight] = useState<number>();
|
210
|
+
const [scale, setScale] = useState<number | null>(null);
|
194
211
|
|
195
212
|
useEffect(() => {
|
196
|
-
let resizeObs;
|
213
|
+
let resizeObs: ResizeObserver | null = null;
|
197
214
|
|
198
215
|
const fixSize = () => {
|
199
|
-
const { clientWidth } = screenEl.current
|
216
|
+
const { clientWidth } = screenEl.current!;
|
200
217
|
|
201
218
|
// 获取内部元素的宽高
|
202
|
-
const { clientWidth: targetWidth, clientHeight: targetHeight } = screenEl.current
|
219
|
+
const { clientWidth: targetWidth, clientHeight: targetHeight } = screenEl.current!.children[0];
|
203
220
|
|
204
221
|
const realScale = clientWidth / targetWidth;
|
205
222
|
if (realScale < 1) {
|
@@ -238,13 +255,18 @@ const ReScreen = styled('div')`
|
|
238
255
|
}
|
239
256
|
`;
|
240
257
|
|
241
|
-
|
258
|
+
export interface ScreenShotProps extends ScreenFixerProps {
|
259
|
+
type: keyof typeof types;
|
260
|
+
src?: string;
|
261
|
+
}
|
262
|
+
|
263
|
+
function Screenshot({ type, src = '', children, sx = {}, ...rest }: ScreenShotProps) {
|
242
264
|
const _type = type.toLowerCase();
|
243
265
|
|
244
266
|
// 新版采用容器采用BaseScreenshot,svg集成,更容易拓展,响应式更好
|
245
267
|
if (['phone', 'macbook'].includes(_type)) {
|
246
268
|
return (
|
247
|
-
<BaseScreenshot type={_type} sx={
|
269
|
+
<BaseScreenshot type={_type} sx={sx} {...rest}>
|
248
270
|
{children || (src ? <img src={src} alt="screenshot" /> : null)}
|
249
271
|
</BaseScreenshot>
|
250
272
|
);
|
@@ -252,25 +274,9 @@ function Screenshot({ type, src, children, style, sx, ...rest }) {
|
|
252
274
|
|
253
275
|
// 旧版采用纯css制作,定制性欠缺,暂时保留使用
|
254
276
|
return (
|
255
|
-
<ScreenFixer type={type}
|
277
|
+
<ScreenFixer type={type} sx={{ ...sx, margin: 'auto' }} {...rest}>
|
256
278
|
{children || (src ? <img src={src} alt="screenshot" /> : null)}
|
257
279
|
</ScreenFixer>
|
258
280
|
);
|
259
281
|
}
|
260
|
-
|
261
|
-
Screenshot.propTypes = {
|
262
|
-
type: PropTypes.string.isRequired,
|
263
|
-
src: PropTypes.string,
|
264
|
-
style: PropTypes.object,
|
265
|
-
sx: PropTypes.object,
|
266
|
-
children: PropTypes.any,
|
267
|
-
};
|
268
|
-
|
269
|
-
Screenshot.defaultProps = {
|
270
|
-
src: '',
|
271
|
-
children: null,
|
272
|
-
style: {},
|
273
|
-
sx: {},
|
274
|
-
};
|
275
|
-
|
276
282
|
export default Screenshot;
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import { useRef } from 'react';
|
2
|
-
import PropTypes from 'prop-types';
|
3
2
|
import {
|
4
3
|
Box,
|
5
4
|
ClickAwayListener,
|
@@ -22,8 +21,15 @@ import { temp as colors } from '../Colors';
|
|
22
21
|
import { AUTH_SERVICE_PREFIX, NAVIGATION_URL } from '../Util/constant';
|
23
22
|
import SessionPermission from '../SessionPermission';
|
24
23
|
import { getTranslation } from '../Util';
|
24
|
+
import type { Locale } from '../type';
|
25
25
|
|
26
|
-
export
|
26
|
+
export interface SessionBlockletProps {
|
27
|
+
session: Record<string, any>;
|
28
|
+
locale?: Locale;
|
29
|
+
size?: number;
|
30
|
+
}
|
31
|
+
|
32
|
+
export default function SessionBlocklet({ session, locale = 'zh', size = 24 }: SessionBlockletProps) {
|
27
33
|
const blocklet = window?.blocklet || {};
|
28
34
|
const sessionMenuList = (blocklet.navigation || [])
|
29
35
|
// HACK 过滤掉默认插入的 /sessionManager 菜单
|
@@ -60,7 +66,6 @@ export default function SessionBlocklet({ session, locale, size }) {
|
|
60
66
|
</IconButton>
|
61
67
|
<Popper
|
62
68
|
open={currentState.open}
|
63
|
-
onClose={() => onTogglePopper(false)}
|
64
69
|
anchorEl={popperAnchorRef.current}
|
65
70
|
transition
|
66
71
|
placement="bottom-end"
|
@@ -121,6 +126,7 @@ export default function SessionBlocklet({ session, locale, size }) {
|
|
121
126
|
height: 50,
|
122
127
|
objectFit: 'contain',
|
123
128
|
}}
|
129
|
+
alt="SessionBlocklet component icon"
|
124
130
|
/>
|
125
131
|
) : (
|
126
132
|
<Icon
|
@@ -169,14 +175,3 @@ export default function SessionBlocklet({ session, locale, size }) {
|
|
169
175
|
</>
|
170
176
|
);
|
171
177
|
}
|
172
|
-
|
173
|
-
SessionBlocklet.propTypes = {
|
174
|
-
session: PropTypes.object.isRequired,
|
175
|
-
locale: PropTypes.string,
|
176
|
-
size: PropTypes.number,
|
177
|
-
};
|
178
|
-
|
179
|
-
SessionBlocklet.defaultProps = {
|
180
|
-
locale: 'en',
|
181
|
-
size: 24,
|
182
|
-
};
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { useCreation } from 'ahooks';
|
2
|
+
|
3
|
+
const roleList = ['owner', 'admin', 'member', 'guest'] as const;
|
4
|
+
|
5
|
+
export interface SessionPermissionProps {
|
6
|
+
session: Record<string, any>;
|
7
|
+
roles?: (typeof roleList)[number][];
|
8
|
+
children: ((props: { hasPermission: boolean }) => JSX.Element | null) | JSX.Element;
|
9
|
+
}
|
10
|
+
|
11
|
+
export default function SessionPermission({ session, roles = ['owner', 'admin'], children }: SessionPermissionProps) {
|
12
|
+
const hasPermission = useCreation(() => {
|
13
|
+
return roles.includes(session?.user?.role || 'guest');
|
14
|
+
}, [session?.user?.role, roles]);
|
15
|
+
|
16
|
+
if (typeof children === 'function') {
|
17
|
+
return children({ hasPermission });
|
18
|
+
}
|
19
|
+
|
20
|
+
if (hasPermission) {
|
21
|
+
return children;
|
22
|
+
}
|
23
|
+
|
24
|
+
return null;
|
25
|
+
}
|
@@ -1,8 +1,18 @@
|
|
1
|
-
import
|
2
|
-
import { useRef } from 'react';
|
1
|
+
import { ElementType, useRef } from 'react';
|
3
2
|
import { useCreation, useMemoizedFn, useReactive } from 'ahooks';
|
4
|
-
import {
|
5
|
-
|
3
|
+
import {
|
4
|
+
Box,
|
5
|
+
type BoxProps,
|
6
|
+
ClickAwayListener,
|
7
|
+
Divider,
|
8
|
+
Fade,
|
9
|
+
IconButton,
|
10
|
+
MenuItem,
|
11
|
+
MenuList,
|
12
|
+
Paper,
|
13
|
+
Popper,
|
14
|
+
} from '@mui/material';
|
15
|
+
import { Icon, type IconifyIcon } from '@iconify/react';
|
6
16
|
import PersonOutlineRoundedIcon from '@iconify-icons/material-symbols/person-outline-rounded';
|
7
17
|
import FilterVintageOutlineRoundedIcon from '@iconify-icons/material-symbols/filter-vintage-outline-rounded';
|
8
18
|
import AccountCircleOffOutlineRoundedIcon from '@iconify-icons/material-symbols/account-circle-off-outline-rounded';
|
@@ -19,20 +29,37 @@ import { DASHBOARD_URL, PROFILE_URL } from '../../Util/constant';
|
|
19
29
|
import SessionPermission from '../../SessionPermission';
|
20
30
|
import { translations } from '../libs/translation';
|
21
31
|
import { translate } from '../../Locale/util';
|
32
|
+
import type { Locale, Session } from '../../type';
|
22
33
|
|
23
|
-
const getInviteLink = (inviter) => {
|
34
|
+
const getInviteLink = (inviter: string) => {
|
24
35
|
const url = new URL(window.location.href);
|
25
36
|
url.searchParams.set('inviter', inviter);
|
26
37
|
return url.toString();
|
27
38
|
};
|
28
39
|
|
29
|
-
export
|
40
|
+
export interface LoggedInProps {
|
41
|
+
session: Session;
|
42
|
+
dark?: false | true;
|
43
|
+
onBindWallet?: () => void;
|
44
|
+
isBlocklet?: true | false;
|
45
|
+
locale?: Locale;
|
46
|
+
size?: number;
|
47
|
+
}
|
48
|
+
|
49
|
+
export default function LoggedIn({
|
50
|
+
session,
|
51
|
+
dark = false,
|
52
|
+
onBindWallet = noop,
|
53
|
+
isBlocklet = true,
|
54
|
+
locale = 'en',
|
55
|
+
size = 24,
|
56
|
+
}: LoggedInProps) {
|
30
57
|
const t = useMemoizedFn((key, data = {}) => {
|
31
58
|
return translate(translations, key, locale, 'en', data);
|
32
59
|
});
|
33
60
|
const isInviteEnabled = useCreation(() => {
|
34
61
|
return !!globalThis?.blocklet?.settings?.invite?.enabled;
|
35
|
-
});
|
62
|
+
}, []);
|
36
63
|
const popperAnchorRef = useRef(null);
|
37
64
|
const currentState = useReactive({
|
38
65
|
open: false,
|
@@ -47,8 +74,8 @@ export default function LoggedIn({ session, dark, onBindWallet, isBlocklet, loca
|
|
47
74
|
session.switchPassport();
|
48
75
|
});
|
49
76
|
const handleSwitchAccount = useMemoizedFn(({ userSession } = {}) => {
|
50
|
-
return new Promise((resolve) => {
|
51
|
-
const options = {};
|
77
|
+
return new Promise<void>((resolve) => {
|
78
|
+
const options: Record<string, any> = {};
|
52
79
|
if (!userSession) {
|
53
80
|
onTogglePopper(false);
|
54
81
|
options.showQuickConnect = false;
|
@@ -99,8 +126,8 @@ export default function LoggedIn({ session, dark, onBindWallet, isBlocklet, loca
|
|
99
126
|
|
100
127
|
<Popper
|
101
128
|
open={currentState.open}
|
102
|
-
onClose={() => onTogglePopper(false)}
|
103
129
|
anchorEl={popperAnchorRef.current}
|
130
|
+
// @ts-expect-error
|
104
131
|
dark={dark}
|
105
132
|
transition
|
106
133
|
placement="bottom-end"
|
@@ -156,6 +183,7 @@ export default function LoggedIn({ session, dark, onBindWallet, isBlocklet, loca
|
|
156
183
|
<SessionMenuItem
|
157
184
|
icon={InviteIcon}
|
158
185
|
title={t('invite')}
|
186
|
+
component="div"
|
159
187
|
onClick={handleOpenInvite}
|
160
188
|
sx={{ display: 'block', color: 'inherit' }}
|
161
189
|
/>
|
@@ -166,6 +194,7 @@ export default function LoggedIn({ session, dark, onBindWallet, isBlocklet, loca
|
|
166
194
|
<SessionMenuItem
|
167
195
|
icon={AccountCircleOffOutlineRoundedIcon}
|
168
196
|
title={t('logout')}
|
197
|
+
component="div"
|
169
198
|
sx={{ color: 'error.main' }}
|
170
199
|
onClick={onLogout}
|
171
200
|
data-cy="sessionManager-logout-trigger"
|
@@ -180,23 +209,17 @@ export default function LoggedIn({ session, dark, onBindWallet, isBlocklet, loca
|
|
180
209
|
);
|
181
210
|
}
|
182
211
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
isBlocklet: PropTypes.bool,
|
188
|
-
locale: PropTypes.string,
|
189
|
-
size: PropTypes.number,
|
190
|
-
};
|
191
|
-
LoggedIn.defaultProps = {
|
192
|
-
dark: false,
|
193
|
-
isBlocklet: true,
|
194
|
-
onBindWallet: noop,
|
195
|
-
locale: 'en',
|
196
|
-
size: 24,
|
197
|
-
};
|
212
|
+
interface SessionMenuItemProps {
|
213
|
+
icon: IconifyIcon | string;
|
214
|
+
title: string;
|
215
|
+
}
|
198
216
|
|
199
|
-
|
217
|
+
// prop component is required
|
218
|
+
function SessionMenuItem<C extends ElementType>({
|
219
|
+
icon,
|
220
|
+
title,
|
221
|
+
...rest
|
222
|
+
}: SessionMenuItemProps & BoxProps<C, { component: C }>) {
|
200
223
|
return (
|
201
224
|
<Box {...rest} sx={{ p: 0.5, ...rest?.sx }}>
|
202
225
|
<MenuItem
|
@@ -216,8 +239,3 @@ function SessionMenuItem({ icon, title, ...rest }) {
|
|
216
239
|
</Box>
|
217
240
|
);
|
218
241
|
}
|
219
|
-
|
220
|
-
SessionMenuItem.propTypes = {
|
221
|
-
icon: PropTypes.any.isRequired,
|
222
|
-
title: PropTypes.string.isRequired,
|
223
|
-
};
|
@@ -0,0 +1,97 @@
|
|
1
|
+
import { forwardRef } from 'react';
|
2
|
+
import { Box, type BoxProps, IconButton, Tooltip, Typography } from '@mui/material';
|
3
|
+
import { Icon } from '@iconify/react';
|
4
|
+
import LensIcon from '@iconify-icons/material-symbols/lens';
|
5
|
+
|
6
|
+
import WalletOSIcon from '../../WalletOSIcon';
|
7
|
+
import Avatar from '../../Avatar';
|
8
|
+
import DID from '../../DID';
|
9
|
+
import { temp as colors } from '../../Colors';
|
10
|
+
import { getSourceProvider } from '../libs/utils';
|
11
|
+
import { Session } from '../../type';
|
12
|
+
|
13
|
+
export interface SessionUserItemProps extends BoxProps {
|
14
|
+
sessionItem: Session;
|
15
|
+
statusContent?: React.ReactNode;
|
16
|
+
active?: false | true;
|
17
|
+
}
|
18
|
+
|
19
|
+
const SessionUserItem = forwardRef<HTMLDivElement, SessionUserItemProps>(
|
20
|
+
({ sessionItem, statusContent = null, active = false, ...rest }, ref) => {
|
21
|
+
const isRawWalletAccount = getSourceProvider(sessionItem?.user) === 'wallet';
|
22
|
+
|
23
|
+
return (
|
24
|
+
<Box
|
25
|
+
{...rest}
|
26
|
+
ref={ref}
|
27
|
+
sx={{
|
28
|
+
display: 'flex',
|
29
|
+
alignItems: 'center',
|
30
|
+
justifyContent: 'space-between',
|
31
|
+
py: 0.75,
|
32
|
+
px: 1,
|
33
|
+
width: '100%',
|
34
|
+
...rest?.sx,
|
35
|
+
}}>
|
36
|
+
<Box
|
37
|
+
sx={{
|
38
|
+
display: 'flex',
|
39
|
+
alignItems: 'center',
|
40
|
+
gap: 0.5,
|
41
|
+
overflow: 'hidden',
|
42
|
+
'& .did-address-avatar': {
|
43
|
+
display: 'none !important',
|
44
|
+
},
|
45
|
+
'& .did-address-text': {
|
46
|
+
color: `${colors.textBase} !important`,
|
47
|
+
},
|
48
|
+
}}>
|
49
|
+
<Box sx={{ mr: 0.5, fontSize: 0 }}>
|
50
|
+
<Avatar did={sessionItem.userDid} size={36} />
|
51
|
+
</Box>
|
52
|
+
<WalletOSIcon
|
53
|
+
loading={sessionItem.__isDefault}
|
54
|
+
provider={sessionItem?.extra?.provider}
|
55
|
+
walletOS={sessionItem?.extra?.walletOS}
|
56
|
+
/>
|
57
|
+
{isRawWalletAccount ? (
|
58
|
+
<DID
|
59
|
+
did={sessionItem.userDid}
|
60
|
+
copyable={false}
|
61
|
+
size={14}
|
62
|
+
responsive={false}
|
63
|
+
compact
|
64
|
+
sx={{ lineHeight: 1 }}
|
65
|
+
/>
|
66
|
+
) : (
|
67
|
+
sessionItem.user.email && (
|
68
|
+
<Tooltip
|
69
|
+
title={sessionItem.user.email}
|
70
|
+
sx={{
|
71
|
+
zIndex: 1600,
|
72
|
+
}}
|
73
|
+
placement="top">
|
74
|
+
<Typography
|
75
|
+
sx={{
|
76
|
+
fontSize: 14,
|
77
|
+
overflow: 'hidden',
|
78
|
+
textOverflow: 'ellipsis',
|
79
|
+
}}>
|
80
|
+
{sessionItem.user.email}
|
81
|
+
</Typography>
|
82
|
+
</Tooltip>
|
83
|
+
)
|
84
|
+
)}
|
85
|
+
</Box>
|
86
|
+
{statusContent ||
|
87
|
+
(active && (
|
88
|
+
<IconButton size="small" disableRipple>
|
89
|
+
<Icon icon={LensIcon} fontSize={6} color={colors.surfaceSuccess} />
|
90
|
+
</IconButton>
|
91
|
+
))}
|
92
|
+
</Box>
|
93
|
+
);
|
94
|
+
}
|
95
|
+
);
|
96
|
+
|
97
|
+
export default SessionUserItem;
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import PropTypes from 'prop-types';
|
2
1
|
import {
|
3
2
|
Box,
|
4
3
|
ClickAwayListener,
|
@@ -23,8 +22,21 @@ import { temp as colors } from '../../Colors';
|
|
23
22
|
import { getVisitorId } from '../../Util';
|
24
23
|
import { translate } from '../../Locale/util';
|
25
24
|
import { translations } from '../libs/translation';
|
25
|
+
import type { Locale, Session } from '../../type';
|
26
26
|
|
27
|
-
export
|
27
|
+
export interface SessionUserSwitchProps {
|
28
|
+
session: Session;
|
29
|
+
onSwitch: (params?: { userSession: Session }) => Promise<void> | void;
|
30
|
+
isBlocklet?: true | false;
|
31
|
+
locale?: Locale;
|
32
|
+
}
|
33
|
+
|
34
|
+
export default function SessionUserSwitch({
|
35
|
+
session,
|
36
|
+
onSwitch,
|
37
|
+
isBlocklet = true,
|
38
|
+
locale = 'en',
|
39
|
+
}: SessionUserSwitchProps) {
|
28
40
|
const popperAnchorRef = useRef(null);
|
29
41
|
const t = useMemoizedFn((key, data = {}) => {
|
30
42
|
return translate(translations, key, locale, 'en', data);
|
@@ -32,7 +44,7 @@ export default function SessionUserSwitch({ session, onSwitch, isBlocklet, local
|
|
32
44
|
|
33
45
|
const currentState = useReactive({
|
34
46
|
open: false,
|
35
|
-
userSessions: [],
|
47
|
+
userSessions: [] as Session[],
|
36
48
|
loadingSessionId: null,
|
37
49
|
});
|
38
50
|
|
@@ -136,12 +148,7 @@ export default function SessionUserSwitch({ session, onSwitch, isBlocklet, local
|
|
136
148
|
onClick={() => onTogglePopper()}
|
137
149
|
ref={popperAnchorRef}
|
138
150
|
/>
|
139
|
-
<Popper
|
140
|
-
open={currentState.open}
|
141
|
-
onClose={() => onTogglePopper(false)}
|
142
|
-
anchorEl={popperAnchorRef.current}
|
143
|
-
transition
|
144
|
-
sx={{ zIndex: 1600 }}>
|
151
|
+
<Popper open={currentState.open} anchorEl={popperAnchorRef.current} transition sx={{ zIndex: 1600 }}>
|
145
152
|
{({ TransitionProps }) => (
|
146
153
|
<ClickAwayListener
|
147
154
|
onClickAway={(e) => {
|
@@ -223,15 +230,3 @@ export default function SessionUserSwitch({ session, onSwitch, isBlocklet, local
|
|
223
230
|
</>
|
224
231
|
);
|
225
232
|
}
|
226
|
-
|
227
|
-
SessionUserSwitch.propTypes = {
|
228
|
-
session: PropTypes.object.isRequired,
|
229
|
-
onSwitch: PropTypes.func.isRequired,
|
230
|
-
isBlocklet: PropTypes.bool,
|
231
|
-
locale: PropTypes.string,
|
232
|
-
};
|
233
|
-
|
234
|
-
SessionUserSwitch.defaultProps = {
|
235
|
-
isBlocklet: true,
|
236
|
-
locale: 'en',
|
237
|
-
};
|