@arcblock/ux 2.9.91 → 2.10.1
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.js +36 -48
- package/lib/ActivityIndicator/index.js +122 -75
- package/lib/Address/compact-text.js +48 -66
- package/lib/Address/did-address.js +114 -87
- package/lib/Address/index.js +15 -27
- package/lib/Address/responsive-did-address.js +48 -50
- package/lib/Alert/index.js +58 -52
- package/lib/AnimationWaiter/index.js +123 -69
- package/lib/Async/index.js +8 -22
- package/lib/Avatar/did-motif.js +38 -52
- package/lib/Avatar/etherscan-blockies.js +4 -10
- package/lib/Avatar/index.js +71 -77
- package/lib/Badge/index.js +49 -56
- package/lib/Blocklet/blocklet.js +181 -97
- package/lib/Blocklet/index.js +4 -24
- package/lib/Blocklet/utils.js +50 -13
- package/lib/BlockletContext/index.js +21 -31
- package/lib/BlockletNFT/index.js +255 -115
- package/lib/Button/index.js +5 -11
- package/lib/Button/wrap.js +45 -56
- package/lib/ButtonGroup/index.js +3 -9
- package/lib/CardSelector/index.js +67 -43
- package/lib/Center/index.js +19 -20
- package/lib/ClickToCopy/copy-button.js +37 -50
- package/lib/ClickToCopy/hook.js +10 -18
- package/lib/ClickToCopy/index.js +54 -66
- package/lib/CodeBlock/LightBox.js +84 -11
- package/lib/CodeBlock/index.js +175 -101
- package/lib/Colors/index.js +3 -20
- package/lib/Colors/themes/default.js +1 -7
- package/lib/Colors/themes/temp.js +1 -7
- package/lib/ContactForm/index.js +95 -60
- package/lib/CookieConsent/index.js +58 -52
- package/lib/CountDown/index.js +90 -59
- package/lib/DID/index.js +80 -96
- package/lib/Datatable/CustomToolbar.js +188 -137
- package/lib/Datatable/DatatableContext.js +14 -21
- package/lib/Datatable/TableSearch.js +99 -58
- package/lib/Datatable/index.js +312 -139
- package/lib/Datatable/utils.js +9 -17
- package/lib/Dialog/confirm.js +46 -58
- package/lib/Dialog/dialog.js +110 -66
- package/lib/Dialog/index.js +4 -27
- package/lib/Dialog/use-confirm.js +40 -65
- package/lib/DidLogo/index.js +14 -22
- package/lib/DriftBot/index.js +34 -19
- package/lib/Earth/index.js +214 -110
- package/lib/Earth/util.js +6 -19
- package/lib/Empty/index.js +33 -38
- package/lib/ErrorBoundary/fallback.js +45 -43
- package/lib/ErrorBoundary/index.js +1 -16
- package/lib/Footer/index.js +96 -48
- package/lib/Header/auto-hidden.js +28 -31
- package/lib/Header/header.js +151 -69
- package/lib/Header/index.js +2 -20
- package/lib/Header/responsive-header.js +67 -60
- package/lib/Icon/image.js +41 -45
- package/lib/Icon/index.js +51 -53
- package/lib/Img/index.js +77 -88
- package/lib/InfoRow/index.js +66 -48
- package/lib/Layout/dashboard/external-link.js +38 -53
- package/lib/Layout/dashboard/full-page.js +27 -41
- package/lib/Layout/dashboard/index.js +177 -132
- package/lib/Layout/dashboard/sidebar.js +164 -61
- package/lib/Layout/dashboard-legacy/header.js +119 -66
- package/lib/Layout/dashboard-legacy/index.js +90 -79
- package/lib/Layout/dashboard-legacy/sidebar.js +95 -62
- package/lib/Layout/index.js +200 -106
- package/lib/LoadingMask/index.js +31 -38
- package/lib/Locale/browser-lang.js +2 -8
- package/lib/Locale/context.js +46 -69
- package/lib/Locale/languages.js +6 -15
- package/lib/Locale/selector.js +116 -92
- package/lib/Locale/util.js +7 -16
- package/lib/Logo/index.js +54 -57
- package/lib/Metric/index.js +103 -40
- package/lib/NFTDisplay/aspect-ratio-container.js +33 -40
- package/lib/NFTDisplay/broken.js +68 -52
- package/lib/NFTDisplay/index.js +140 -129
- package/lib/NFTDisplay/loading.js +14 -13
- package/lib/NFTDisplay/svg-embedder/img.js +18 -33
- package/lib/NFTDisplay/svg-embedder/inline-svg.js +28 -32
- package/lib/NavMenu/index.js +2 -13
- package/lib/NavMenu/nav-menu.js +133 -148
- package/lib/NavMenu/style.js +179 -12
- package/lib/PageScroller/index.js +82 -93
- package/lib/PageScroller/story/FifthComponent.js +4 -10
- package/lib/PageScroller/story/FirstComponent.js +4 -10
- package/lib/PageScroller/story/FourthComponent.js +4 -10
- package/lib/PageScroller/story/FullPage.js +21 -28
- package/lib/PageScroller/story/PageContain.js +23 -30
- package/lib/PageScroller/story/SecondComponent.js +4 -10
- package/lib/PageScroller/story/ThirdComponent.js +4 -10
- package/lib/PageScroller/usePrevValue.js +4 -11
- package/lib/Passport/index.js +2 -9
- package/lib/Passport/passport.js +38 -51
- package/lib/PoweredByArcBlock/index.js +19 -33
- package/lib/PricingTable/PricingPlan.js +90 -34
- package/lib/PricingTable/index.js +28 -26
- package/lib/QRCode/index.js +38 -50
- package/lib/RelativeTime/index.js +44 -59
- package/lib/Result/common.js +85 -107
- package/lib/Result/index.js +22 -34
- package/lib/Result/result.js +35 -41
- package/lib/Result/translations.js +1 -7
- package/lib/Screenshot/BaseScreenshot/index.js +65 -43
- package/lib/Screenshot/BaseScreenshot/shells/Macbook.js +17 -27
- package/lib/Screenshot/BaseScreenshot/shells/Phone.js +14 -25
- package/lib/Screenshot/index.js +103 -92
- package/lib/SessionBlocklet/index.js +125 -143
- package/lib/SessionManager/index.js +2 -9
- package/lib/SessionPermission/index.js +13 -23
- package/lib/SessionUser/components/logged-in.js +139 -158
- package/lib/SessionUser/components/session-user-item.js +44 -58
- package/lib/SessionUser/components/session-user-switch.js +133 -152
- package/lib/SessionUser/components/un-login.js +27 -35
- package/lib/SessionUser/components/user-info.js +62 -74
- package/lib/SessionUser/index.js +26 -34
- package/lib/SessionUser/libs/translation.js +1 -7
- package/lib/SessionUser/libs/utils.js +13 -34
- package/lib/Sparkline/index.js +4 -10
- package/lib/Spinner/index.js +11 -17
- package/lib/SplitButton/index.js +72 -68
- package/lib/Success/index.js +28 -34
- package/lib/Switch/index.js +64 -75
- package/lib/Tabs/index.js +84 -103
- package/lib/Tag/index.js +52 -56
- package/lib/TextCollapse/index.js +57 -50
- package/lib/Theme/index.js +8 -47
- package/lib/Theme/theme-provider.js +19 -26
- package/lib/Theme/theme.js +49 -62
- package/lib/Toast/index.js +41 -73
- package/lib/Typography/index.js +44 -55
- package/lib/Util/constant.js +16 -22
- package/lib/Util/deprecate.js +14 -26
- package/lib/Util/federated.js +16 -38
- package/lib/Util/index.js +63 -113
- package/lib/Util/passport.js +23 -33
- package/lib/Util/wallet.js +5 -14
- package/lib/Video/index.js +34 -34
- package/lib/Wallet/Action.js +72 -49
- package/lib/Wallet/Download.js +132 -115
- package/lib/Wallet/Open.js +26 -25
- package/lib/WalletOSIcon/index.js +33 -42
- package/lib/WebWalletSWKeeper/index.js +42 -55
- package/lib/WechatPrompt/index.js +53 -33
- package/lib/index.js +38 -265
- package/lib/withTheme/index.js +53 -33
- package/lib/withTracker/error_boundary.js +7 -18
- package/lib/withTracker/index.js +25 -34
- package/package.json +9 -316
- package/src/WalletOSIcon/index.jsx +1 -1
- package/es/ActionButton/index.js +0 -99
- package/es/ActivityIndicator/index.js +0 -180
- package/es/Address/compact-text.js +0 -105
- package/es/Address/did-address.js +0 -222
- package/es/Address/index.js +0 -23
- package/es/Address/responsive-did-address.js +0 -87
- package/es/Alert/index.js +0 -134
- package/es/AnimationWaiter/default-animation.json +0 -1
- package/es/AnimationWaiter/index.js +0 -240
- package/es/Async/index.js +0 -38
- package/es/Avatar/did-motif.js +0 -68
- package/es/Avatar/etherscan-blockies.js +0 -83
- package/es/Avatar/index.js +0 -179
- package/es/Badge/index.js +0 -98
- package/es/Blocklet/blocklet.js +0 -298
- package/es/Blocklet/index.js +0 -4
- package/es/Blocklet/utils.js +0 -52
- package/es/BlockletContext/index.js +0 -65
- package/es/BlockletNFT/index.js +0 -412
- package/es/Button/index.js +0 -8
- package/es/Button/wrap.js +0 -140
- package/es/ButtonGroup/index.js +0 -6
- package/es/CardSelector/index.js +0 -149
- package/es/Center/index.js +0 -41
- package/es/ClickToCopy/copy-button.js +0 -72
- package/es/ClickToCopy/hook.js +0 -39
- package/es/ClickToCopy/index.js +0 -92
- package/es/CodeBlock/LightBox.js +0 -85
- package/es/CodeBlock/index.js +0 -222
- package/es/Colors/index.js +0 -3
- package/es/Colors/themes/default.js +0 -77
- package/es/Colors/themes/temp.js +0 -41
- package/es/ContactForm/index.js +0 -230
- package/es/CookieConsent/index.js +0 -113
- package/es/CountDown/index.js +0 -178
- package/es/DID/index.js +0 -249
- package/es/Datatable/CustomToolbar.js +0 -396
- package/es/Datatable/DatatableContext.js +0 -34
- package/es/Datatable/TableSearch.js +0 -166
- package/es/Datatable/index.js +0 -629
- package/es/Datatable/utils.js +0 -132
- package/es/Dialog/confirm.js +0 -123
- package/es/Dialog/dialog.js +0 -201
- package/es/Dialog/index.js +0 -4
- package/es/Dialog/types.d.ts +0 -17
- package/es/Dialog/use-confirm.js +0 -133
- package/es/DidLogo/index.js +0 -31
- package/es/DriftBot/index.js +0 -70
- package/es/Earth/countries.json +0 -8057
- package/es/Earth/index.js +0 -521
- package/es/Earth/util.js +0 -51
- package/es/Empty/index.js +0 -65
- package/es/ErrorBoundary/fallback.js +0 -73
- package/es/ErrorBoundary/index.js +0 -1
- package/es/Footer/index.js +0 -172
- package/es/Header/auto-hidden.js +0 -35
- package/es/Header/header.js +0 -223
- package/es/Header/index.js +0 -2
- package/es/Header/responsive-header.js +0 -146
- package/es/Icon/image.js +0 -65
- package/es/Icon/index.js +0 -84
- package/es/Img/index.js +0 -218
- package/es/InfoRow/index.js +0 -87
- package/es/Layout/dashboard/external-link.js +0 -58
- package/es/Layout/dashboard/full-page.js +0 -53
- package/es/Layout/dashboard/index.js +0 -282
- package/es/Layout/dashboard/sidebar.js +0 -209
- package/es/Layout/dashboard-legacy/header.js +0 -174
- package/es/Layout/dashboard-legacy/index.js +0 -148
- package/es/Layout/dashboard-legacy/sidebar.js +0 -129
- package/es/Layout/index.js +0 -335
- package/es/LoadingMask/index.js +0 -102
- package/es/Locale/browser-lang.js +0 -52
- package/es/Locale/context.js +0 -139
- package/es/Locale/languages.js +0 -60
- package/es/Locale/selector.js +0 -186
- package/es/Locale/util.js +0 -21
- package/es/Logo/images/logo-dark-text.svg +0 -3
- package/es/Logo/images/logo-dark-top.svg +0 -6
- package/es/Logo/images/logo-light-text.svg +0 -3
- package/es/Logo/images/logo-light-top.svg +0 -6
- package/es/Logo/index.js +0 -136
- package/es/Metric/index.js +0 -132
- package/es/NFTDisplay/NFTBroken.svg +0 -34
- package/es/NFTDisplay/README.md +0 -59
- package/es/NFTDisplay/aspect-ratio-container.js +0 -39
- package/es/NFTDisplay/broken.js +0 -132
- package/es/NFTDisplay/demo/data/asset-state-display-url.json +0 -7
- package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-1-1.json +0 -10
- package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-374-130.json +0 -10
- package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-with-foreign-object.json +0 -20
- package/es/NFTDisplay/demo/data/asset-state-svg.json +0 -29
- package/es/NFTDisplay/demo/data/asset-state-url.json +0 -10
- package/es/NFTDisplay/index.js +0 -328
- package/es/NFTDisplay/loading.js +0 -18
- package/es/NFTDisplay/svg-embedder/img.js +0 -45
- package/es/NFTDisplay/svg-embedder/inline-svg.js +0 -39
- package/es/NavMenu/index.js +0 -2
- package/es/NavMenu/nav-menu.js +0 -358
- package/es/NavMenu/style.js +0 -181
- package/es/PageScroller/index.js +0 -286
- package/es/PageScroller/story/FifthComponent.js +0 -9
- package/es/PageScroller/story/FirstComponent.js +0 -9
- package/es/PageScroller/story/FourthComponent.js +0 -12
- package/es/PageScroller/story/FullPage.js +0 -47
- package/es/PageScroller/story/PageContain.js +0 -59
- package/es/PageScroller/story/SecondComponent.js +0 -9
- package/es/PageScroller/story/ThirdComponent.js +0 -9
- package/es/PageScroller/story/index.css +0 -115
- package/es/PageScroller/usePrevValue.js +0 -9
- package/es/Passport/index.js +0 -2
- package/es/Passport/passport.js +0 -103
- package/es/PoweredByArcBlock/index.js +0 -31
- package/es/PricingTable/PricingPlan.js +0 -124
- package/es/PricingTable/index.js +0 -53
- package/es/QRCode/index.js +0 -73
- package/es/RelativeTime/index.js +0 -107
- package/es/Result/common.js +0 -140
- package/es/Result/demo/fixtures/result-image-404.svg +0 -1
- package/es/Result/index.js +0 -33
- package/es/Result/result.js +0 -59
- package/es/Result/translations.js +0 -54
- package/es/Screenshot/BaseScreenshot/index.js +0 -91
- package/es/Screenshot/BaseScreenshot/shells/Macbook.js +0 -51
- package/es/Screenshot/BaseScreenshot/shells/Phone.js +0 -36
- package/es/Screenshot/demo/images/bg-00.jpg +0 -0
- package/es/Screenshot/demo/images/bg-01.jpg +0 -0
- package/es/Screenshot/demo/images/bg-02.jpg +0 -0
- package/es/Screenshot/demo/images/bg-03.jpg +0 -0
- package/es/Screenshot/demo/images/bg-04.jpg +0 -0
- package/es/Screenshot/demo/images/bg-05.jpg +0 -0
- package/es/Screenshot/demo/images/bg-06.jpg +0 -0
- package/es/Screenshot/demo/images/bg-07.jpg +0 -0
- package/es/Screenshot/demo/images/bg-08.jpg +0 -0
- package/es/Screenshot/demo/images/bg-09.jpg +0 -0
- package/es/Screenshot/devices.css +0 -1366
- package/es/Screenshot/index.js +0 -299
- package/es/SessionBlocklet/index.js +0 -173
- package/es/SessionManager/index.js +0 -2
- package/es/SessionPermission/index.js +0 -28
- package/es/SessionUser/components/logged-in.js +0 -229
- package/es/SessionUser/components/session-user-item.js +0 -102
- package/es/SessionUser/components/session-user-switch.js +0 -223
- package/es/SessionUser/components/un-login.js +0 -64
- package/es/SessionUser/components/user-info.js +0 -167
- package/es/SessionUser/index.js +0 -49
- package/es/SessionUser/libs/translation.js +0 -19
- package/es/SessionUser/libs/utils.js +0 -29
- package/es/Sparkline/index.js +0 -193
- package/es/Spinner/index.js +0 -28
- package/es/SplitButton/index.js +0 -145
- package/es/Success/index.js +0 -175
- package/es/Switch/index.js +0 -96
- package/es/Tabs/index.js +0 -214
- package/es/Tag/index.js +0 -108
- package/es/TextCollapse/index.js +0 -92
- package/es/Theme/index.js +0 -16
- package/es/Theme/theme-provider.js +0 -39
- package/es/Theme/theme.js +0 -145
- package/es/Toast/index.js +0 -97
- package/es/Typography/index.js +0 -95
- package/es/Util/constant.js +0 -42
- package/es/Util/deprecate.js +0 -28
- package/es/Util/federated.js +0 -91
- package/es/Util/index.js +0 -363
- package/es/Util/passport.js +0 -62
- package/es/Util/wallet.js +0 -32
- package/es/Video/index.js +0 -89
- package/es/Wallet/Action.js +0 -119
- package/es/Wallet/Download.js +0 -331
- package/es/Wallet/Open.js +0 -45
- package/es/Wallet/images/abtwallet.png +0 -0
- package/es/Wallet/images/android_download.svg +0 -23
- package/es/Wallet/images/app-store.svg +0 -20
- package/es/Wallet/images/google-play.svg +0 -70
- package/es/WalletOSIcon/index.js +0 -82
- package/es/WebWalletSWKeeper/index.js +0 -117
- package/es/WechatPrompt/images/android.png +0 -0
- package/es/WechatPrompt/images/ios.png +0 -0
- package/es/WechatPrompt/index.js +0 -88
- package/es/index.js +0 -38
- package/es/withTheme/index.js +0 -69
- package/es/withTracker/README.md +0 -34
- package/es/withTracker/error_boundary.js +0 -34
- package/es/withTracker/index.js +0 -55
@@ -1,26 +1,15 @@
|
|
1
|
-
|
1
|
+
import { useEffect, useRef } from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import useIdle from 'react-use/lib/useIdle';
|
4
|
+
import { useLocalStorageState } from 'ahooks';
|
5
|
+
import useBrowser from '@arcblock/react-hooks/lib/useBrowser';
|
6
|
+
import { detectWalletExtension } from '@arcblock/ux/lib/Util';
|
7
|
+
import { getWebWalletUrl, checkSameProtocol } from '../Util/wallet';
|
2
8
|
|
3
|
-
|
4
|
-
|
5
|
-
}
|
6
|
-
|
7
|
-
var _react = require("react");
|
8
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
9
|
-
var _useIdle = _interopRequireDefault(require("react-use/lib/useIdle"));
|
10
|
-
var _ahooks = require("ahooks");
|
11
|
-
var _useBrowser = _interopRequireDefault(require("@arcblock/react-hooks/lib/useBrowser"));
|
12
|
-
var _Util = require("@arcblock/ux/lib/Util");
|
13
|
-
var _wallet = require("../Util/wallet");
|
14
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
15
|
-
const _excluded = ["webWalletUrl", "maxIdleTime"]; // 默认最大空闲时间: 30min
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
17
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
18
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
19
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
20
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
21
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
22
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
23
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
9
|
+
// 默认最大空闲时间: 30min
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
11
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
24
13
|
const DEFAULT_MAX_IDLE_TIME = 1000 * 60 * 30;
|
25
14
|
// 可使用 localStorage.setItem('wallet_sw_keeper_disabled', 1) 来禁用嵌入 wallet iframe
|
26
15
|
const STORAGE_KEY_DISABLED = 'wallet_sw_keeper_disabled';
|
@@ -39,7 +28,7 @@ const injectIframe = webWalletUrl => {
|
|
39
28
|
// top: 0 可能不是必须的, 但测试中发现, 如果不设置, 在某些特殊情况下似乎也会导致页面自动滚动到底部
|
40
29
|
iframe.style.position = 'absolute';
|
41
30
|
iframe.style.top = 0;
|
42
|
-
iframe.src =
|
31
|
+
iframe.src = `${webWalletUrl}?action=iframe`;
|
43
32
|
document.body.appendChild(iframe);
|
44
33
|
};
|
45
34
|
const removeIframe = () => {
|
@@ -54,20 +43,19 @@ const cleanup = () => {
|
|
54
43
|
};
|
55
44
|
const enable = webWalletUrl => {
|
56
45
|
if (!id) {
|
57
|
-
id =
|
46
|
+
id = `web_wallet_sw_keeper_${Date.now()}`;
|
58
47
|
injectIframe(webWalletUrl);
|
59
48
|
}
|
60
49
|
};
|
61
50
|
|
62
51
|
// 该组件通过嵌入一个 web wallet iframe 帮助 web wallet service worker 延最大空闲时间
|
63
|
-
function WebWalletSWKeeper(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
} = _ref;
|
52
|
+
function WebWalletSWKeeper({
|
53
|
+
webWalletUrl,
|
54
|
+
maxIdleTime
|
55
|
+
}) {
|
68
56
|
// 渲染前先记录是否已经存在一个 WebWalletSWKeeper 实例
|
69
|
-
const instanceExists =
|
70
|
-
const isIdle = (
|
57
|
+
const instanceExists = useRef(!!id);
|
58
|
+
const isIdle = useIdle(maxIdleTime);
|
71
59
|
// 如果已经存在一个 WebWalletSWKeeper 实例, cleanup 的时机应该由该实例控制
|
72
60
|
const _cleanup = () => {
|
73
61
|
if (!instanceExists.current) {
|
@@ -75,7 +63,7 @@ function WebWalletSWKeeper(_ref) {
|
|
75
63
|
}
|
76
64
|
};
|
77
65
|
// 用户操作空闲时间超过 maxIdleTime 时禁用, 活跃时启用
|
78
|
-
|
66
|
+
useEffect(() => {
|
79
67
|
if (isIdle) {
|
80
68
|
_cleanup();
|
81
69
|
} else {
|
@@ -84,47 +72,46 @@ function WebWalletSWKeeper(_ref) {
|
|
84
72
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
85
73
|
}, [isIdle]);
|
86
74
|
// 组件销毁时自动清理
|
87
|
-
|
75
|
+
useEffect(() => () => _cleanup(), []);
|
88
76
|
return null;
|
89
77
|
}
|
90
78
|
WebWalletSWKeeper.propTypes = {
|
91
|
-
webWalletUrl:
|
92
|
-
maxIdleTime:
|
79
|
+
webWalletUrl: PropTypes.string.isRequired,
|
80
|
+
maxIdleTime: PropTypes.number
|
93
81
|
};
|
94
82
|
WebWalletSWKeeper.defaultProps = {
|
95
83
|
maxIdleTime: DEFAULT_MAX_IDLE_TIME
|
96
84
|
};
|
97
|
-
|
98
|
-
const withWebWalletSWKeeper = Component => {
|
85
|
+
export default WebWalletSWKeeper;
|
86
|
+
export const withWebWalletSWKeeper = Component => {
|
99
87
|
// eslint-disable-next-line react/prop-types
|
100
|
-
return function WithWebWalletSWKeeperComponent(
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
const browser = (0, _useBrowser.default)();
|
88
|
+
return function WithWebWalletSWKeeperComponent({
|
89
|
+
webWalletUrl,
|
90
|
+
maxIdleTime,
|
91
|
+
...rest
|
92
|
+
}) {
|
93
|
+
const browser = useBrowser();
|
107
94
|
// eslint-disable-next-line no-param-reassign
|
108
|
-
webWalletUrl = webWalletUrl ||
|
109
|
-
const [disabled] =
|
95
|
+
webWalletUrl = webWalletUrl || getWebWalletUrl();
|
96
|
+
const [disabled] = useLocalStorageState(STORAGE_KEY_DISABLED, {
|
110
97
|
defaultValue: 1
|
111
98
|
});
|
112
|
-
const extension =
|
113
|
-
const isSameProtocol =
|
99
|
+
const extension = detectWalletExtension();
|
100
|
+
const isSameProtocol = checkSameProtocol(webWalletUrl);
|
114
101
|
const isWalletWebview = browser.wallet;
|
115
102
|
// 以下几种情况不会嵌入 wallet iframe :
|
116
103
|
// - 通过设置 localStorage#wallet_sw_keeper_disabled = 1 明确禁止 (开发调试过程中可以使用, 避免控制台打印一堆日志影响调试)
|
117
104
|
// - 检查到 wallet 浏览器插件
|
118
105
|
// - webWalletUrl 与当前页面 url 的 protocol 不同
|
119
106
|
// - wallet webview
|
120
|
-
return /*#__PURE__*/(
|
121
|
-
children: [!disabled && !extension && isSameProtocol && !isWalletWebview && /*#__PURE__*/(
|
107
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
108
|
+
children: [!disabled && !extension && isSameProtocol && !isWalletWebview && /*#__PURE__*/_jsx(WebWalletSWKeeper, {
|
122
109
|
webWalletUrl: webWalletUrl,
|
123
110
|
maxIdleTime: maxIdleTime
|
124
|
-
}), /*#__PURE__*/(
|
125
|
-
webWalletUrl: webWalletUrl
|
126
|
-
|
111
|
+
}), /*#__PURE__*/_jsx(Component, {
|
112
|
+
webWalletUrl: webWalletUrl,
|
113
|
+
...rest
|
114
|
+
})]
|
127
115
|
});
|
128
116
|
};
|
129
|
-
};
|
130
|
-
exports.withWebWalletSWKeeper = withWebWalletSWKeeper;
|
117
|
+
};
|
@@ -1,21 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
var _android = _interopRequireDefault(require("./images/android.png"));
|
12
|
-
var _Theme = require("../Theme");
|
13
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
14
|
-
var _templateObject;
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
16
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
17
|
-
function WechatPrompt() {
|
18
|
-
const browser = (0, _useBrowser.default)();
|
1
|
+
import Typography from '@mui/material/Typography';
|
2
|
+
import Dialog from '@mui/material/Dialog';
|
3
|
+
import useBrowser from '@arcblock/react-hooks/lib/useBrowser';
|
4
|
+
import IosImage from './images/ios.png';
|
5
|
+
import AndroidImage from './images/android.png';
|
6
|
+
import { styled } from '../Theme';
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
8
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
9
|
+
export default function WechatPrompt() {
|
10
|
+
const browser = useBrowser();
|
19
11
|
if (!browser.mobile.any) {
|
20
12
|
return null;
|
21
13
|
}
|
@@ -23,46 +15,74 @@ function WechatPrompt() {
|
|
23
15
|
return null;
|
24
16
|
}
|
25
17
|
if (browser.android) {
|
26
|
-
return /*#__PURE__*/(
|
18
|
+
return /*#__PURE__*/_jsx(Dialog, {
|
27
19
|
open: true,
|
28
20
|
fullScreen: true,
|
29
|
-
children: /*#__PURE__*/(
|
30
|
-
children: [/*#__PURE__*/(
|
21
|
+
children: /*#__PURE__*/_jsxs(Container, {
|
22
|
+
children: [/*#__PURE__*/_jsx(Typography, {
|
31
23
|
className: "wechat-title",
|
32
24
|
children: "1. \u8F7B\u89E6\u53F3\u4E0A\u65B9\u83DC\u5355"
|
33
|
-
}), /*#__PURE__*/(
|
25
|
+
}), /*#__PURE__*/_jsxs("div", {
|
34
26
|
className: "wechat-tip",
|
35
|
-
children: [/*#__PURE__*/(
|
27
|
+
children: [/*#__PURE__*/_jsx(Typography, {
|
36
28
|
className: "wechat-tip-text",
|
37
29
|
children: "2. \u70B9\u51FB\u201C\u5728\u6D4F\u89C8\u5668\u6253\u5F00\u201D\uFF0C\u624D\u80FD\u8C03\u8D77 DID \u94B1\u5305"
|
38
|
-
}), /*#__PURE__*/(
|
30
|
+
}), /*#__PURE__*/_jsx("img", {
|
39
31
|
className: "wechat-tip-img",
|
40
|
-
src:
|
32
|
+
src: AndroidImage,
|
41
33
|
alt: "Open in Android Browser"
|
42
34
|
})]
|
43
35
|
})]
|
44
36
|
})
|
45
37
|
});
|
46
38
|
}
|
47
|
-
return /*#__PURE__*/(
|
39
|
+
return /*#__PURE__*/_jsx(Dialog, {
|
48
40
|
open: true,
|
49
41
|
fullScreen: true,
|
50
|
-
children: /*#__PURE__*/(
|
51
|
-
children: [/*#__PURE__*/(
|
42
|
+
children: /*#__PURE__*/_jsxs(Container, {
|
43
|
+
children: [/*#__PURE__*/_jsx(Typography, {
|
52
44
|
className: "wechat-title",
|
53
45
|
children: "1. \u8F7B\u89E6\u53F3\u4E0A\u65B9\u83DC\u5355"
|
54
|
-
}), /*#__PURE__*/(
|
46
|
+
}), /*#__PURE__*/_jsxs("div", {
|
55
47
|
className: "wechat-tip",
|
56
|
-
children: [/*#__PURE__*/(
|
48
|
+
children: [/*#__PURE__*/_jsx(Typography, {
|
57
49
|
className: "wechat-tip-text",
|
58
50
|
children: "2. \u70B9\u51FB\u201C\u5728Safari\u4E2D\u6253\u5F00\u201D\uFF0C\u624D\u80FD\u8C03\u8D77 DID \u94B1\u5305"
|
59
|
-
}), /*#__PURE__*/(
|
51
|
+
}), /*#__PURE__*/_jsx("img", {
|
60
52
|
className: "wechat-tip-img",
|
61
|
-
src:
|
53
|
+
src: IosImage,
|
62
54
|
alt: "Open in Safari"
|
63
55
|
})]
|
64
56
|
})]
|
65
57
|
})
|
66
58
|
});
|
67
59
|
}
|
68
|
-
const Container =
|
60
|
+
const Container = styled('div')`
|
61
|
+
.wechat-title {
|
62
|
+
height: 80px;
|
63
|
+
line-height: 80px;
|
64
|
+
text-align: center;
|
65
|
+
font-size: 20px;
|
66
|
+
color: #fff;
|
67
|
+
background-color: #9cdbd8;
|
68
|
+
}
|
69
|
+
|
70
|
+
.wechat-tip {
|
71
|
+
display: flex;
|
72
|
+
flex-direction: column;
|
73
|
+
align-items: center;
|
74
|
+
|
75
|
+
.wechat-tip-text {
|
76
|
+
font-size: 20px;
|
77
|
+
padding: 10px 10px;
|
78
|
+
overflow: auto;
|
79
|
+
word-break: break-word;
|
80
|
+
text-align: center;
|
81
|
+
}
|
82
|
+
|
83
|
+
.wechat-tip-img {
|
84
|
+
width: 90%;
|
85
|
+
object-fit: cover;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
`;
|
package/lib/index.js
CHANGED
@@ -1,265 +1,38 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
return _Async.default;
|
40
|
-
}
|
41
|
-
});
|
42
|
-
Object.defineProperty(exports, "Avatar", {
|
43
|
-
enumerable: true,
|
44
|
-
get: function get() {
|
45
|
-
return _Avatar.default;
|
46
|
-
}
|
47
|
-
});
|
48
|
-
Object.defineProperty(exports, "Badge", {
|
49
|
-
enumerable: true,
|
50
|
-
get: function get() {
|
51
|
-
return _Badge.default;
|
52
|
-
}
|
53
|
-
});
|
54
|
-
Object.defineProperty(exports, "Button", {
|
55
|
-
enumerable: true,
|
56
|
-
get: function get() {
|
57
|
-
return _Button.default;
|
58
|
-
}
|
59
|
-
});
|
60
|
-
Object.defineProperty(exports, "ClickToCopy", {
|
61
|
-
enumerable: true,
|
62
|
-
get: function get() {
|
63
|
-
return _ClickToCopy.default;
|
64
|
-
}
|
65
|
-
});
|
66
|
-
Object.defineProperty(exports, "CodeBlock", {
|
67
|
-
enumerable: true,
|
68
|
-
get: function get() {
|
69
|
-
return _CodeBlock.default;
|
70
|
-
}
|
71
|
-
});
|
72
|
-
Object.defineProperty(exports, "ContactForm", {
|
73
|
-
enumerable: true,
|
74
|
-
get: function get() {
|
75
|
-
return _ContactForm.default;
|
76
|
-
}
|
77
|
-
});
|
78
|
-
Object.defineProperty(exports, "CountDown", {
|
79
|
-
enumerable: true,
|
80
|
-
get: function get() {
|
81
|
-
return _CountDown.default;
|
82
|
-
}
|
83
|
-
});
|
84
|
-
Object.defineProperty(exports, "Datatable", {
|
85
|
-
enumerable: true,
|
86
|
-
get: function get() {
|
87
|
-
return _Datatable.default;
|
88
|
-
}
|
89
|
-
});
|
90
|
-
Object.defineProperty(exports, "Dialog", {
|
91
|
-
enumerable: true,
|
92
|
-
get: function get() {
|
93
|
-
return _Dialog.default;
|
94
|
-
}
|
95
|
-
});
|
96
|
-
Object.defineProperty(exports, "DidLogo", {
|
97
|
-
enumerable: true,
|
98
|
-
get: function get() {
|
99
|
-
return _DidLogo.default;
|
100
|
-
}
|
101
|
-
});
|
102
|
-
Object.defineProperty(exports, "Earth", {
|
103
|
-
enumerable: true,
|
104
|
-
get: function get() {
|
105
|
-
return _Earth.default;
|
106
|
-
}
|
107
|
-
});
|
108
|
-
Object.defineProperty(exports, "Footer", {
|
109
|
-
enumerable: true,
|
110
|
-
get: function get() {
|
111
|
-
return _Footer.default;
|
112
|
-
}
|
113
|
-
});
|
114
|
-
Object.defineProperty(exports, "Icon", {
|
115
|
-
enumerable: true,
|
116
|
-
get: function get() {
|
117
|
-
return _Icon.default;
|
118
|
-
}
|
119
|
-
});
|
120
|
-
Object.defineProperty(exports, "Img", {
|
121
|
-
enumerable: true,
|
122
|
-
get: function get() {
|
123
|
-
return _Img.default;
|
124
|
-
}
|
125
|
-
});
|
126
|
-
Object.defineProperty(exports, "LocaleSelector", {
|
127
|
-
enumerable: true,
|
128
|
-
get: function get() {
|
129
|
-
return _selector.default;
|
130
|
-
}
|
131
|
-
});
|
132
|
-
Object.defineProperty(exports, "Logo", {
|
133
|
-
enumerable: true,
|
134
|
-
get: function get() {
|
135
|
-
return _Logo.default;
|
136
|
-
}
|
137
|
-
});
|
138
|
-
Object.defineProperty(exports, "RelativeTime", {
|
139
|
-
enumerable: true,
|
140
|
-
get: function get() {
|
141
|
-
return _RelativeTime.default;
|
142
|
-
}
|
143
|
-
});
|
144
|
-
Object.defineProperty(exports, "SessionManager", {
|
145
|
-
enumerable: true,
|
146
|
-
get: function get() {
|
147
|
-
return _SessionManager.default;
|
148
|
-
}
|
149
|
-
});
|
150
|
-
Object.defineProperty(exports, "Tabs", {
|
151
|
-
enumerable: true,
|
152
|
-
get: function get() {
|
153
|
-
return _Tabs.default;
|
154
|
-
}
|
155
|
-
});
|
156
|
-
Object.defineProperty(exports, "Tag", {
|
157
|
-
enumerable: true,
|
158
|
-
get: function get() {
|
159
|
-
return _Tag.default;
|
160
|
-
}
|
161
|
-
});
|
162
|
-
Object.defineProperty(exports, "TextCollapse", {
|
163
|
-
enumerable: true,
|
164
|
-
get: function get() {
|
165
|
-
return _TextCollapse.default;
|
166
|
-
}
|
167
|
-
});
|
168
|
-
Object.defineProperty(exports, "Theme", {
|
169
|
-
enumerable: true,
|
170
|
-
get: function get() {
|
171
|
-
return _Theme.default;
|
172
|
-
}
|
173
|
-
});
|
174
|
-
Object.defineProperty(exports, "Toast", {
|
175
|
-
enumerable: true,
|
176
|
-
get: function get() {
|
177
|
-
return _Toast.default;
|
178
|
-
}
|
179
|
-
});
|
180
|
-
Object.defineProperty(exports, "Util", {
|
181
|
-
enumerable: true,
|
182
|
-
get: function get() {
|
183
|
-
return _Util.default;
|
184
|
-
}
|
185
|
-
});
|
186
|
-
Object.defineProperty(exports, "Video", {
|
187
|
-
enumerable: true,
|
188
|
-
get: function get() {
|
189
|
-
return _Video.default;
|
190
|
-
}
|
191
|
-
});
|
192
|
-
Object.defineProperty(exports, "WalletAction", {
|
193
|
-
enumerable: true,
|
194
|
-
get: function get() {
|
195
|
-
return _Action.default;
|
196
|
-
}
|
197
|
-
});
|
198
|
-
Object.defineProperty(exports, "WalletDownload", {
|
199
|
-
enumerable: true,
|
200
|
-
get: function get() {
|
201
|
-
return _Download.default;
|
202
|
-
}
|
203
|
-
});
|
204
|
-
Object.defineProperty(exports, "WebWalletSWKeeper", {
|
205
|
-
enumerable: true,
|
206
|
-
get: function get() {
|
207
|
-
return _WebWalletSWKeeper.default;
|
208
|
-
}
|
209
|
-
});
|
210
|
-
Object.defineProperty(exports, "WechatPrompt", {
|
211
|
-
enumerable: true,
|
212
|
-
get: function get() {
|
213
|
-
return _WechatPrompt.default;
|
214
|
-
}
|
215
|
-
});
|
216
|
-
Object.defineProperty(exports, "withTheme", {
|
217
|
-
enumerable: true,
|
218
|
-
get: function get() {
|
219
|
-
return _withTheme.default;
|
220
|
-
}
|
221
|
-
});
|
222
|
-
Object.defineProperty(exports, "withTracker", {
|
223
|
-
enumerable: true,
|
224
|
-
get: function get() {
|
225
|
-
return _withTracker.default;
|
226
|
-
}
|
227
|
-
});
|
228
|
-
var _ActionButton = _interopRequireDefault(require("./ActionButton"));
|
229
|
-
var _ActivityIndicator = _interopRequireDefault(require("./ActivityIndicator"));
|
230
|
-
var _Address = _interopRequireDefault(require("./Address"));
|
231
|
-
var _Alert = _interopRequireDefault(require("./Alert"));
|
232
|
-
var _AnimationWaiter = _interopRequireDefault(require("./AnimationWaiter"));
|
233
|
-
var _Async = _interopRequireDefault(require("./Async"));
|
234
|
-
var _Avatar = _interopRequireDefault(require("./Avatar"));
|
235
|
-
var _Badge = _interopRequireDefault(require("./Badge"));
|
236
|
-
var _Button = _interopRequireDefault(require("./Button"));
|
237
|
-
var _ClickToCopy = _interopRequireDefault(require("./ClickToCopy"));
|
238
|
-
var _CodeBlock = _interopRequireDefault(require("./CodeBlock"));
|
239
|
-
var _ContactForm = _interopRequireDefault(require("./ContactForm"));
|
240
|
-
var _CountDown = _interopRequireDefault(require("./CountDown"));
|
241
|
-
var _Earth = _interopRequireDefault(require("./Earth"));
|
242
|
-
var _Footer = _interopRequireDefault(require("./Footer"));
|
243
|
-
var _Icon = _interopRequireDefault(require("./Icon"));
|
244
|
-
var _selector = _interopRequireDefault(require("./Locale/selector"));
|
245
|
-
var _Logo = _interopRequireDefault(require("./Logo"));
|
246
|
-
var _RelativeTime = _interopRequireDefault(require("./RelativeTime"));
|
247
|
-
var _SessionManager = _interopRequireDefault(require("./SessionManager"));
|
248
|
-
var _Datatable = _interopRequireDefault(require("./Datatable"));
|
249
|
-
var _Dialog = _interopRequireDefault(require("./Dialog"));
|
250
|
-
var _DidLogo = _interopRequireDefault(require("./DidLogo"));
|
251
|
-
var _Tabs = _interopRequireDefault(require("./Tabs"));
|
252
|
-
var _Tag = _interopRequireDefault(require("./Tag"));
|
253
|
-
var _TextCollapse = _interopRequireDefault(require("./TextCollapse"));
|
254
|
-
var _Theme = _interopRequireDefault(require("./Theme"));
|
255
|
-
var _Toast = _interopRequireDefault(require("./Toast"));
|
256
|
-
var _Util = _interopRequireDefault(require("./Util"));
|
257
|
-
var _Video = _interopRequireDefault(require("./Video"));
|
258
|
-
var _WebWalletSWKeeper = _interopRequireDefault(require("./WebWalletSWKeeper"));
|
259
|
-
var _Action = _interopRequireDefault(require("./Wallet/Action"));
|
260
|
-
var _Download = _interopRequireDefault(require("./Wallet/Download"));
|
261
|
-
var _WechatPrompt = _interopRequireDefault(require("./WechatPrompt"));
|
262
|
-
var _withTheme = _interopRequireDefault(require("./withTheme"));
|
263
|
-
var _withTracker = _interopRequireDefault(require("./withTracker"));
|
264
|
-
var _Img = _interopRequireDefault(require("./Img"));
|
265
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
1
|
+
import ActionButton from './ActionButton';
|
2
|
+
import ActivityIndicator from './ActivityIndicator';
|
3
|
+
import Address from './Address';
|
4
|
+
import Alert from './Alert';
|
5
|
+
import AnimationWaiter from './AnimationWaiter';
|
6
|
+
import Async from './Async';
|
7
|
+
import Avatar from './Avatar';
|
8
|
+
import Badge from './Badge';
|
9
|
+
import Button from './Button';
|
10
|
+
import ClickToCopy from './ClickToCopy';
|
11
|
+
import CodeBlock from './CodeBlock';
|
12
|
+
import ContactForm from './ContactForm';
|
13
|
+
import CountDown from './CountDown';
|
14
|
+
import Earth from './Earth';
|
15
|
+
import Footer from './Footer';
|
16
|
+
import Icon from './Icon';
|
17
|
+
import LocaleSelector from './Locale/selector';
|
18
|
+
import Logo from './Logo';
|
19
|
+
import RelativeTime from './RelativeTime';
|
20
|
+
import SessionManager from './SessionManager';
|
21
|
+
import Datatable from './Datatable';
|
22
|
+
import Dialog from './Dialog';
|
23
|
+
import DidLogo from './DidLogo';
|
24
|
+
import Tabs from './Tabs';
|
25
|
+
import Tag from './Tag';
|
26
|
+
import TextCollapse from './TextCollapse';
|
27
|
+
import Theme from './Theme';
|
28
|
+
import Toast from './Toast';
|
29
|
+
import Util from './Util';
|
30
|
+
import Video from './Video';
|
31
|
+
import WebWalletSWKeeper from './WebWalletSWKeeper';
|
32
|
+
import WalletAction from './Wallet/Action';
|
33
|
+
import WalletDownload from './Wallet/Download';
|
34
|
+
import WechatPrompt from './WechatPrompt';
|
35
|
+
import withTheme from './withTheme';
|
36
|
+
import withTracker from './withTracker';
|
37
|
+
import Img from './Img';
|
38
|
+
export { ActionButton, ActivityIndicator, Address, Alert, AnimationWaiter, Async, Avatar, Badge, Button, ClickToCopy, CodeBlock, ContactForm, CountDown, Earth, Footer, Icon, LocaleSelector, Logo, Tabs, RelativeTime, SessionManager, Datatable, Dialog, DidLogo, Tag, TextCollapse, Theme, Toast, Util, Video, WebWalletSWKeeper, WalletAction, WalletDownload, WechatPrompt, withTheme, withTracker, Img };
|