{"version":3,"sources":["../webpack/universalModuleDefinition","public-path.js","i18n.js","constants/index.js","utils/address.js","utils/index.js","assets/svg/ArrowUp.js","assets/svg/ChainBscLogo.js","assets/svg/ChainBtcLogo.js","assets/svg/ChainCfxLogo.js","assets/svg/ChainEthLogo.js","assets/svg/ChainOecLogo.js","assets/svg/ChainHecoLogo.js","assets/svg/CircleBg.js","assets/svg/Connected.js","assets/svg/DarkLogo.js","assets/svg/DarkMobileLogo.js","assets/svg/ErrorFilled.js","assets/svg/ErrorOutlined.js","assets/svg/InfoFilled.js","assets/svg/Logo.js","assets/svg/MetamaskLogo.js","assets/svg/MobileLogo.js","assets/svg/NoPending.js","assets/svg/NotConnected.js","assets/svg/PendingFilled.js","assets/svg/SquareBg.js","assets/svg/SuccessFilled.js","assets/svg/SuccessOutlined.js","assets/svg/TokenAlert.js","assets/svg/WarningFilled.js","assets/svg/FluentLogo.js","assets/svg/color/ArrowDownOutlined.js","assets/svg/color/ArrowJump.js","assets/svg/color/ArrowLeft.js","assets/svg/color/ArrowRight.js","assets/svg/color/BgArrowDown.js","assets/svg/color/BgArrowUp.js","assets/svg/color/BgCopy.js","assets/svg/color/BgPlus.js","assets/svg/color/BgQuestion.js","assets/svg/color/ChineseIcon.js","assets/svg/color/Close.js","assets/svg/color/Disabled.js","assets/svg/color/EnglishIcon.js","assets/svg/color/Loading.js","assets/svg/color/Moon.js","assets/svg/color/Sun.js","constants/chainConfig.js","pages/components/TokenIcon/index.js","components/Button/index.js","components/Tag/index.js","components/WrapIcon/index.js","components/Notification/index.js","components/Message/index.js","components/Alert/index.js","components/Link/index.js","components/Modal/index.js","components/Loading/index.js","components/Dropdown/index.js","components/Menu/MenuItem.js","components/Menu/index.js","components/Toast/index.js","components/Tooltip/Placements.js","components/Tooltip/index.js","components/Popover/index.js","components/Circle/index.js","utils/NetworkConnector.js","utils/web3.js","hooks/useWeb3Network.js","hooks/useAddTokenToMetamask.js","hooks/usePortal.js","hooks/useWallet.js","pages/components/TransactionReceiptionModal/index.js","pages/components/ConnectWalletModal/index.js","pages/components/ConnectWallet/index.js","hooks/index.js","state/index.js","pages/components/Account/index.js","pages/components/AccountStatus/index.js","pages/components/HeaderAccount/index.js","pages/components/Web3ReactManager/index.js","pages/components/ChainItem/index.js","hooks/useTheme.js","pages/components/Header/index.js","utils/request.js","utils/api.js","state/transaction.js","hooks/useTokenList.js","hooks/useTransaction.js","pages/components/WalletHub/index.js","pages/components/LanguageButton/index.js","pages/components/ThemeButton/index.js","pages/components/MobileFooter/index.js","pages/components/useTransactionNotification/index.js","pages/components/useClaimNotification/index.js","pages/components/ClaimAddressModal/index.js","pages/components/AccountError/index.js","pages/components/ClaimButton/index.js","pages/History/Progress.js","pages/History/HistoryItem.js","pages/History/index.js","assets/img/base-center.png","assets/img/base-left.png","assets/img/base-right.png","assets/img/shuttleflow.png","assets/img/sf-center.png","assets/img/light-center.png","assets/img/tunnel-left.png","assets/img/tunnel-right.png","assets/img/robot.png","assets/img/not-found.png","assets/img/dark-not-found.png","assets/img/base-mobile.png","assets/pdf/SF-whitepaper-en-v1.0.pdf","assets/pdf/SF-whitepaper-zh-v1.0.pdf","pages/Home/index.js","assets/img/shuttleflow-mobile.png","assets/img/token-left.png","assets/img/token-right.png","assets/img/light-left.png","assets/img/light-right.png","assets/img/light-tunnel1.png","assets/img/light-tunnel2.png","assets/img/piple-left.png","assets/img/piple-right.png","pages/Maintenance/index.js","pages/NotFound/index.js","hooks/useClaimedTx.js","utils/cfx.js","pages/App.js","hooks/useMetaMaskHostedByFluent.js","reportWebVitals.js","utils/getLibrary.js","index.js"],"names":["root","factory","exports","module","define","amd","window","__POWERED_BY_QIANKUN__","__webpack_public_path__","__INJECTED_PUBLIC_PATH_BY_QIANKUN__","resources","en","translation","zh","i18next","use","initReactI18next","init","lng","debug","fallbackLng","interpolation","escapeValue","LanguageDetector","Big","DP","NE","PE","NetworkContextName","Mainnet","Testnet","TypeConnectWallet","uninstalled","loading","error","success","ProxyUrlPrefix","shuttleflow","sponsor","IntervalTime","fetchBalance","fetchTokenList","ZeroAddrHex","TxReceiptModalType","ClaimStatus","MobileBreakpoint","TypeAccountStatus","unconnected","TypeTransaction","transaction","approve","ShuttleStatus","StatusOperation","doing","finished","ClaimButtonType","TxStatus","checkHexAddress","address","isHexAddress","checkCfxTokenAddress","type","validateBase32Address","IS_DEV","ChainIdsCfx","TESTNET","id","MAINNET","checkBtcAddress","validate","shortenAddress","chain","checkCfx","KeyOfCfx","check","arr","split","secondStr","getEllipsStr","shortenCfxAddress","KeyOfBtc","shortenBtcAddress","shortenEthAddress","location","hostname","indexOf","str","frontNum","endNum","length","substring","addHexPrefix","Error","slice","isHexPrefixed","calculateGasMargin","value","margin","addedValue","BigNumber","from","toString","mul","add","div","BN","getChainIdRight","chainId","addrType","wallet","supportedChainIds","ChainConfig","updateTx","trans","hash","data","set","get","SvgArrowUp","props","_jsxs","width","height","viewBox","fill","xmlns","children","_jsx","opacity","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","SvgChainBscLogo","fillRule","clipRule","SvgChainBtcLogo","clipPath","transform","SvgChainCfxLogo","SvgChainEthLogo","SvgChainOecLogo","SvgChainHecoLogo","SvgCircleBg","SvgConnected","cx","cy","r","fillOpacity","SvgDarkLogo","SvgDarkMobileLogo","SvgErrorFilled","maskUnits","x","y","mask","SvgErrorOutlined","SvgInfoFilled","SvgLogo","SvgMetamaskLogo","SvgMobileLogo","SvgNoPending","strokeDasharray","rx","x1","y1","x2","y2","gradientUnits","stopColor","offset","stopOpacity","SvgNotConnected","SvgPendingFilled","SvgSquareBg","SvgSuccessFilled","SvgSuccessOutlined","SvgTokenAlert","SvgWarningFilled","SvgFluent","style","maskType","SvgArrowDownOutlined","SvgArrowJump","SvgArrowLeft","SvgArrowRight","SvgBgArrowDown","SvgBgArrowUp","SvgBgCopy","SvgBgPlus","SvgBgQuestion","SvgChineseIcon","SvgClose","SvgDisabled","SvgEnglishIcon","SvgLoading","SvgMoon","SvgSun","KeyOfEth","ScanUrlEth","KeyOfBsc","ScanUrlBsc","KeyOfOec","ScanUrlOec","ScanUrlCfx","name","ScanUrlBtc","KeyOfHeco","ScanUrlHeco","KeyOfPortal","KeyOfMetaMask","WalletConfig","key","website","icon","className","WalletIcon","displayFilter","obj","supported","in_token_list","ChainIcon","fullName","shortName","tokenName","checkAddress","scanUrl","scanTxUrl","scanTokenUrl","commonTokens","remainderAmount","size","SupportedChainIdsWeb3","Object","keys","values","map","DefaultChainIconSize","ChainEthLogo","ChainBscLogo","ChainCfxLogo","ChainBtcLogo","ChainOecLogo","ChainHecoLogo","_Fragment","React","cloneElement","DefaultWalletIconSize","FluentLogo","MetamaskLogo","TokenIcon","token","showAlarm","origin","subscriptShown","useMemo","iconSize","subscriptSize","src","alt","TokenAlert","sizeStyleObj","small","medium","large","iconSizeObj","Button","onClick","color","variant","disabled","fullWidth","danger","startIcon","endIcon","disabledStyle","colorStyle","sizeStyle","iconColor","startIconComp","endIconComp","e","Tag","onClose","closeIcon","closable","iconComp","closeIconComp","stopPropagation","onCloseClick","Close","WrapIcon","clickable","CircleBg","SquareBg","notificationInstance","defaultGetContainer","defaultCloseIcon","defaultDuration","defaultTop","defaultBottom","defaultPlacement","getPlacementStyle","placement","top","bottom","left","right","typeToIcon","SuccessFilled","info","InfoFilled","ErrorFilled","warning","WarningFilled","api","open","args","callback","getContainer","prefixCls","cacheKey","cacheInstance","Promise","resolve","then","instance","closeIconToRender","Notification","newInstance","notification","getNotificationInstance","notice","duration","durationArg","content","title","actions","undefined","iconNode","role","getRCNoticeProps","close","forEach","removeNotice","config","options","destroy","messageInstance","defaultMaxCount","defaultTransitionName","target","closePromise","transitionName","maxCount","instanceConfig","getRCNotificationInstance","IconComponent","Loading","result","filled","rejected","promise","messageKey","contentStyleObj","Alert","bordered","contentStyle","Link","Modal","ref","useRef","useClickAway","LoadingSvg","Dropdown","overlay","trigger","mouseEnterDelay","mouseLeaveDelay","child","Children","only","dropdownTrigger","triggerActions","alignPoint","RcDropdown","animation","renderOverlay","overlayNode","overlayProps","selectable","focusable","expandIcon","overlayNodeExpandIcon","isValidElement","ArrowDownOutlined","mode","MenuItem","itemKey","selected","selectedIcon","selectedIconComp","Disabled","Menu","Item","Toast","autoHideDuration","useEffect","setTimeout","autoAdjustOverflowEnabled","adjustX","adjustY","autoAdjustOverflowDisabled","targetOffset","getOverflowOptions","autoAdjustOverflow","Tooltip","visible","setVisible","useMergedState","_state","defaultValue","state","setState","defaultVisible","isNoContent","getTooltipPlacements","builtinPlacements","arrowPointAtCenter","arrowWidth","horizontalArrowShift","verticalArrowShift","placementMap","points","topLeft","leftTop","topRight","rightTop","bottomRight","rightBottom","bottomLeft","leftBottom","overflow","placements","ignoreShake","getPlacements","getPopupContainer","otherProps","openClassName","getTooltipContainer","overlayClassName","overlayInnerStyle","customPrefixCls","tempVisible","element","elementType","__ANT_BUTTON","__ANT_SWITCH","__ANT_CHECKBOX","picked","omitted","splitObject","spanStyle","display","cursor","block","buttonStyle","pointerEvents","classNames","getDisabledCompatibleChildren","childProps","childCls","customOverlayClassName","formattedOverlayInnerStyle","RcTooltip","getOverlay","onVisibleChange","vis","_props$onVisibleChang","call","onPopupAlign","domNode","align","filter","rect","getBoundingClientRect","transformOrigin","arrowContent","arrowContentStyle","motion","motionName","motionDeadline","displayName","defaultProps","Popover","customizePrefixCls","overlayStyle","Circle","RequestError","constructor","message","super","MiniRpcProvider","url","batchWaitTimeMs","this","nextId","parsed","URL","host","path","pathname","batchTimeoutId","batch","clearBatch","response","json","fetch","method","headers","accept","body","JSON","stringify","item","request","reject","ok","status","statusText","byKey","reduce","memo","current","_result$error","_result$error2","_result$error3","code","sendAsync","params","jsonrpc","catch","_this$batchTimeoutId","push","NetworkConnector","AbstractConnector","urls","defaultChainId","invariant","k","Number","currentChainId","providers","accumulator","provider","activate","account","getProvider","getChainId","getAccount","deactivate","NETWORK_URL","process","network","parseInt","injected","InjectedConnector","useActiveWeb3React","context","useWeb3React","contextNetwork","active","useConnect","useAccount","useChainId","isInstalled","_window","ethereum","useInstalled","setType","useState","tryActivate","UnsupportedChainIdError","useAddTokenToMetamask","outerLibrary","library","innerLibrary","setSuccess","addToken","useCallback","isMetaMask","display_symbol","decimals","symbol","image","Boolean","useStatus","setError","conflux","autoRefreshOnNetworkChange","p","connect","err","console","useWallet","_ChainConfig$chain","connectObjPortal","useConnectPortal","connectObjWeb3","useConnectWeb3","useIsNativeToken","tokenAddress","_ChainConfig$chain3","_ChainConfig$chain3$t","toLowerCase","useAccountStatus","isChainIdRight","_ChainConfig$chain4","errorType","TransactionReceiptionModal","toChain","fromChain","fromToken","toToken","txHash","isClaim","t","useTranslation","isNativeToken","onAddToken","tokenSymbol","Trans","i18nKey","formatAmount","href","SuccessOutlined","ErrorOutlined","ConnectWalletModal","walletConfig","walletName","onInstall","onTry","ConnectWallet","setOpen","walletIcon","onConnect","useIsCfxChain","useIsBtcChain","useIsMobile","useWindowSize","Store","useShuttleState","create","toBtcAddress","fromBtcAddress","tokenFromBackend","txClaimModalShown","setFromBtcAddress","setToBtcAddress","setTokenFromBackend","setTxClaimModalShown","Account","iconClassName","showIcon","walletKey","isBtcChain","iconStyle","accountCompStyle","AccountStatus","accountType","AccountError","HeaderAccount","Web3ReactManager","networkActive","networkError","activateNetwork","triedEager","tried","setTried","isAuthorized","isMobile","useEagerConnect","suppress","on","handleChainChanged","handleAccountsChanged","accounts","removeListener","useInactiveListener","ChainItem","useTheme","initTheme","localStorage","darkMode","matchMedia","matches","useDarkMode","classNameDark","classNameLight","storageKey","Header","i18n","language","useLocation","isDarkMode","DarkMobileLogo","DarkLogo","LanguageButton","Logo","MobileLogo","rel","WalletHub","ThemeButton","timeout","jsonRpc","RPC_Method","getTokenList","searchToken","getUserWallet","getUserOperationByHash","getUserOperationList","requestAllTokenList","createStore","persist","transactions","setTransactions","fromEntries","unshiftTx","tx","isToChainCfx","timestamp","Date","now","tx_type","in_or_out","mergeData","claimedTxs","setClaimedTxs","setTx","getStorage","useTxState","mapToken","isCfxChain","ctoken","reference","reference_symbol","reference_name","others","display_name","useAllTokenList","useSWR","refreshInterval","suspense","useUpdateTxs","cfxAddress","tokenList","txNotificationShow","useTransactionNotification","claimNotificationShow","useClaimNotification","_transactions","Map","entries","update","transArr","pendingApproveTxs","pendingInApproveTxs","getTransactionReceipt","res","pendingOutApproveTxs","confluxJS","outcomeStatus","pendingCommonTxs","limit","defi","from_chain","to_chain","requestUserOperationList","list","newList","nonce_or_txid","to_addr","amount","tx_to","tx_input","user_addr","tokenInfo","parse","toAddress","convertDecimal","mapData","mappedData","_mapListToMap","index","apiData","newStatus","txs","appendTxs","finally","timeInterval","setInterval","clearInterval","useTxData","multipleOrderedStatus","transactionTypes","setArr","filteredTxs","format","hexAddress","newArr","groupedArr","sort","a","b","concat","usePendingTransactions","pendingTransactions","historyLink","document","querySelector","icons","createElement","innerHTML","insertAdjacentElement","_icons","_icons$remove","remove","pendingTransactionsIcon","connectData","ethAddress","useConnectData","arrow","setArrow","connectedData","NotConnected","Connected","BgArrowDown","BgArrowUp","Popup","onClickHandler","history","useHistory","fromTokenAddress","queryString","search","metamaskData","portalData","noPending","NoPending","displayPendingTransactions","pathWithQuery","stringifyUrl","query","ArrowRight","onChangeLanguage","changeLanguage","EnglishIcon","ChineseIcon","toggle","Moon","Sun","MobileFooter","BgQuestion","pathFromChain","pathToChain","ClaimAddressModal","onContinue","chainObject","text","notiTitle","notiContent","_WalletConfig$chainOb","networkContent","ShuttleClaimButton","setClaimStatus","toAccountAddress","onClickClaim","_ChainConfig$toChain","txData","walletAddress","txModalShow","setTxModalShow","txModalType","setTxModalType","setTxHash","claimShown","setClaimShown","claimAddressModalShown","setClaimAddressModalShown","onSubmit","async","estimateData","estimateGasAndCollateral","to","sendTransaction","gas","gasLimit","storageLimit","storageCollateralized","claimHash","sendHash","estimateGas","getSigner","toLocaleLowerCase","closeClaimAddressModal","Dot","isDone","hasLine","JumpIcon","ArrowJump","Progress","progress","_ChainConfig$fromChai","_ChainConfig$fromChai2","_ChainConfig$fromChai3","_ChainConfig$fromChai4","_ChainConfig$fromChai5","_ChainConfig$toChain2","_ChainConfig$toChain3","_ChainConfig$toChain4","_ChainConfig$toChain5","settled_tx","isFromBtcChain","isToBtcChain","progressLevel","getIsDone","fromChainId","toChainId","TokenInfo","copied","setCopied","BgPlus","CopyToClipboard","onCopy","BgCopy","Status","PendingFilled","HistoryItem","historyItemData","accountAddress","detailShow","setDetailShow","ClaimButton","ArrowUp","History","historyData","ArrowLeft","onBack","Home","useEffectOnce","classList","copyright","line","ShuttleFlow","whitePaperEN","whitePaperZH","BaseMobile","TunnelRight","dur","repeatCount","BaseCenter","BaseRight","TunnelLeft","BaseLeft","SfCenter","LightCenter","Maintenance","Robot","NotFound","DarkNotFound","NotFoundImg","useUpdateClaimedTxs","_claimedTxs","submittedTrans","mmSubmittedTrans","portalSubmittedTrans","mmArr","all","confluxArr","cfx","_window$confluxJS","version","Conflux","defaultGasPrice","defaultGas","logger","TxsUpdater","App","metaMaskProvider","Suspense","fallback","Router","basename","Switch","Route","exact","Redirect","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","getLibrary","Web3Provider","pollingInterval","Web3ProviderNetwork","createWeb3ReactRoot","render","container","ReactDOM","StrictMode","Web3ReactProvider","bootstrap","log","mount","unmount","unmountComponentAtNode"],"mappings":"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","file":"static/js/main.7e7dd70b.chunk.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"shuttle-flow\"] = factory();\n\telse\n\t\troot[\"shuttle-flow\"] = factory();\n})(window, function() {\nreturn ","if (window.__POWERED_BY_QIANKUN__) {\n __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;\n}","import i18next from 'i18next'\nimport {initReactI18next} from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport en from './assets/locales/en.json'\nimport zh from './assets/locales/zh-CN.json'\n\nconst resources = {\n en: {translation: en},\n zh: {translation: zh},\n}\n\nif (window.__POWERED_BY_QIANKUN__) {\n i18next\n .use(initReactI18next)\n .init({\n resources,\n // TODO: remove when publish\n lng: 'en',\n debug: true,\n fallbackLng: 'en',\n interpolation: {escapeValue: false},\n })\n} else {\n i18next\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources,\n // TODO: remove when publish\n debug: true,\n fallbackLng: 'en',\n interpolation: {escapeValue: false},\n })\n}\n\nexport default i18next\n","import Big from 'big.js'\n\nBig.DP = 40\nBig.NE = -40\nBig.PE = 1000\n\nexport const NetworkContextName = 'NETWORK'\n\nexport const Mainnet = 'MAINNET'\nexport const Testnet = 'TESTNET'\n\nexport const TypeConnectWallet = {\n uninstalled: 'uninstalled',\n loading: 'loading',\n error: 'error',\n success: 'success',\n}\n\nexport const ProxyUrlPrefix = {\n shuttleflow: '/rpcshuttleflow',\n sponsor: '/rpcsponsor',\n}\n\n/**\n * interval time config\n */\nexport const IntervalTime = {\n fetchBalance: 3000,\n fetchTokenList: 6000,\n}\n\nexport const BigNumZero = new Big(0)\n\nexport const ZeroAddrHex = '0x0000000000000000000000000000000000000000'\n\nexport const TxReceiptModalType = {\n ongoing: 'ongoing',\n success: 'success',\n error: 'error',\n}\n\nexport const SendStatus = {\n ongoing: 'ongoing',\n success: 'success',\n error: 'error',\n claim: 'claim',\n}\n\nexport const ClaimStatus = {\n ongoing: 'ongoing',\n success: 'success',\n error: 'error',\n}\n\nexport const MobileBreakpoint = 768\n\nexport const Decimal18 = '18'\n\nexport const TypeAccountStatus = {\n unconnected: 'unconnected',\n success: 'success',\n error: 'error',\n}\n\n/**\n * Type of cached tx type\n */\nexport const TypeTransaction = {\n transaction: 'transaction', //common transaction,for example: send for native token or transfer for erc20 token\n approve: 'approve', //approve for erc20 token\n}\n\n/**\n * Status of shuttle transaction, mainly for local environment\n */\nexport const ShuttleStatus = {\n pending: 'pending',\n waiting: 'waiting',\n success: 'success',\n error: 'error',\n skip: 'skip',\n}\n\nexport const StatusOperation = {\n doing: 'doing',\n finished: 'finished',\n}\n\nexport const Millisecond = {\n day: 24 * 60 * 60 * 1000,\n}\n\nexport const ClaimButtonType = {\n twoStep: 'twoStep',\n common: 'common',\n}\n\nexport const TxStatus = {\n submitted: 'submitted',\n success: 'success',\n error: 'error',\n}\n","import {isHexAddress} from '@fluent-wallet/account'\nimport {validateBase32Address} from '@fluent-wallet/base32-address'\nimport {validate} from 'bitcoin-address-validation'\nimport {ChainIdsCfx, KeyOfCfx, KeyOfBtc} from '../constants/chainConfig'\nimport {getEllipsStr, IS_DEV} from '../utils'\n\nexport function checkHexAddress(address) {\n return isHexAddress(address)\n}\n\nexport function checkCfxTokenAddress(address, type) {\n return validateBase32Address(\n address,\n IS_DEV ? ChainIdsCfx.TESTNET.id : ChainIdsCfx.MAINNET.id,\n type,\n )\n}\n\nexport function checkBtcAddress(address) {\n return validate(address, IS_DEV ? 'testnet' : 'mainnet')\n}\n\nexport function shortenEthAddress(address) {\n if (!checkHexAddress(address)) return ''\n return getEllipsStr(address, 6, 4)\n}\n\nexport function shortenBtcAddress(address) {\n if (!checkBtcAddress(address)) return ''\n return getEllipsStr(address, 10, 0)\n}\n\nexport function shortenCfxAddress(address, type, check = true) {\n if (check && !checkCfxTokenAddress(address, type)) return ''\n const arr = address.split(':')\n let secondStr\n if (IS_DEV) {\n secondStr = getEllipsStr(arr[1], 3, 4)\n } else {\n secondStr = getEllipsStr(arr[1], 3, 8)\n }\n return arr[0] + ':' + secondStr\n}\n\nexport function shortenAddress(chain, address, type = 'user', checkCfx = true) {\n if (chain === KeyOfCfx) return shortenCfxAddress(address, type, checkCfx)\n if (chain === KeyOfBtc) return shortenBtcAddress(address)\n return shortenEthAddress(address)\n}\n","import {ChainConfig, KeyOfCfx} from '../constants/chainConfig'\nimport {Mainnet, Testnet} from '../constants'\nimport Big from 'big.js'\nimport BN from 'bn.js'\nimport {BigNumber} from '@ethersproject/bignumber'\nimport {BigNumZero} from '../constants'\nimport {checkCfxTokenAddress} from './address'\n\nexport const IS_DEV =\n window.location.hostname === 'localhost' ||\n window.location.hostname.indexOf('test') > -1\n\nexport const getEllipsStr = (str, frontNum, endNum) => {\n if (str) {\n const length = str.length\n if (endNum === 0 && length <= frontNum) {\n return str.substring(0, frontNum)\n }\n return (\n str.substring(0, frontNum) +\n '...' +\n str.substring(length - endNum, length)\n )\n }\n return ''\n}\n\nexport function isNumber(value) {\n return /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value)\n}\n\nexport function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\n \"[is-hex-prefixed] value must be type 'string', is currently type \" +\n typeof str +\n ', while checking isHexPrefixed.',\n )\n }\n\n return str.slice(0, 2) === '0x'\n}\n\nexport const addHexPrefix = function (str) {\n if (typeof str !== 'string') {\n return str\n }\n\n return isHexPrefixed(str) ? str : '0x' + str\n}\n\nexport const getMaxAmount = (chain, amount) => {\n const remainderAmount = ChainConfig[chain]?.remainderAmount\n let amountBig = new Big(amount)\n if (amountBig.gt(remainderAmount)) {\n return amountBig.minus(remainderAmount)\n } else {\n return BigNumZero\n }\n}\n\n// add 10%\nexport function calculateGasMargin(value, margin = 0.1) {\n const addedValue = BigNumber.from(value?.toString(10))\n .mul(BigNumber.from(10000).add(BigNumber.from(10000 * margin)))\n .div(BigNumber.from(10000))\n .toString()\n return addHexPrefix(new BN(addedValue, 10).toString(16))\n}\n\nexport function getExponent(decimals) {\n return `1e${decimals}`\n}\n\nexport function getChainIdRight(chain, chainId, address, addrType = 'user') {\n const {wallet, supportedChainIds} = ChainConfig[chain] || {}\n const isCfxChain = chain === KeyOfCfx ? true : false\n\n if (isCfxChain) {\n return (\n wallet &&\n chainId == supportedChainIds?.[IS_DEV ? Testnet : Mainnet].id &&\n checkCfxTokenAddress(address, addrType)\n )\n }\n\n return wallet && chainId == supportedChainIds?.[IS_DEV ? Testnet : Mainnet].id\n}\n\n//remove duplicate object from array\nexport function uniqueArray(arr) {\n return arr.filter((item, index) => {\n const _thing = JSON.stringify(item)\n return (\n index ===\n arr.findIndex(obj => {\n return JSON.stringify(obj) === _thing\n })\n )\n })\n}\n\n//whether contains object in array\nexport function containsObj(arr, obj) {\n arr.forEach(item => {\n const _item = JSON.stringify(item)\n if (JSON.stringify(obj) === _item) {\n return true\n }\n return false\n })\n}\n\n/**\n * whether the value of each object in this array equals to the value\n * @param {*} arr\n * @param {*} key\n * @param {*} value\n */\nexport function containsValueBy(arr, key, value) {\n arr.forEach(item => {\n if (item[key] === value) {\n return true\n }\n return false\n })\n}\n\nexport function removeTxByHash(trans, hash) {\n const index = trans.findIndex(tran => tran.hash == hash)\n trans.splice(index, 1)\n return trans\n}\n\nexport function removeTxs(trans, hashs) {\n hashs.forEach(hash => {\n trans.delete(hash)\n })\n return trans\n}\n\nexport function appendTxs(trans, txs) {\n txs.forEach(tx => {\n const hash = tx?.hash\n trans.set(hash, tx)\n })\n}\n\nexport function updateTx(trans, hash, data) {\n trans.set(hash, {...trans.get(hash), ...data})\n}\n","function SvgArrowUp(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgArrowUp\n","function SvgChainBscLogo(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgChainBscLogo\n","function SvgChainBtcLogo(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgChainBtcLogo\n","function SvgChainCfxLogo(props) {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgChainCfxLogo\n","function SvgChainEthLogo(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgChainEthLogo\n","function SvgChainOecLogo(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgChainOecLogo\n","function SvgChainHecoLogo(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgChainHecoLogo\n","function SvgCircleBg(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgCircleBg\n","function SvgConnected(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgConnected\n","function SvgDarkLogo(props) {\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport default SvgDarkLogo\n","function SvgDarkMobileLogo(props) {\n return (\n \n \n \n \n \n \n )\n}\n\nexport default SvgDarkMobileLogo\n","function SvgErrorFilled(props) {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgErrorFilled\n","function SvgErrorOutlined(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgErrorOutlined\n","function SvgInfoFilled(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgInfoFilled\n","function SvgLogo(props) {\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport default SvgLogo\n","function SvgMetamaskLogo(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgMetamaskLogo\n","function SvgMobileLogo(props) {\n return (\n \n \n \n \n \n \n )\n}\n\nexport default SvgMobileLogo\n","function SvgNoPending(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgNoPending\n","function SvgNotConnected(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgNotConnected\n","function SvgPendingFilled(props) {\n return (\n \n \n \n \n \n \n )\n}\n\nexport default SvgPendingFilled\n","function SvgSquareBg(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgSquareBg\n","function SvgSuccessFilled(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgSuccessFilled\n","function SvgSuccessOutlined(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgSuccessOutlined\n","function SvgTokenAlert(props) {\n return (\n \n \n \n \n \n )\n}\n\nexport default SvgTokenAlert\n","function SvgWarningFilled(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgWarningFilled\n","import * as React from 'react'\n\nfunction SvgFluent(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgFluent\n","function SvgArrowDownOutlined(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgArrowDownOutlined\n","function SvgArrowJump(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgArrowJump\n","function SvgArrowLeft(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgArrowLeft\n","function SvgArrowRight(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgArrowRight\n","function SvgBgArrowDown(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgBgArrowDown\n","function SvgBgArrowUp(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgBgArrowUp\n","function SvgBgCopy(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgBgCopy\n","function SvgBgPlus(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgBgPlus\n","function SvgBgQuestion(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgBgQuestion\n","function SvgChineseIcon(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgChineseIcon\n","function SvgClose(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgClose\n","function SvgDisabled(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgDisabled\n","function SvgEnglishIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgEnglishIcon\n","function SvgLoading(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgLoading\n","function SvgMoon(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgMoon\n","function SvgSun(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgSun\n","// chain config constants\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport {IS_DEV} from '../utils'\nimport {\n checkHexAddress,\n checkCfxTokenAddress,\n checkBtcAddress,\n} from '../utils/address'\nimport {\n ChainBscLogo,\n ChainBtcLogo,\n ChainEthLogo,\n ChainCfxLogo,\n ChainOecLogo,\n ChainHecoLogo,\n MetamaskLogo,\n FluentLogo,\n} from '../assets/svg'\n\n/**\n * ethereum config\n */\nexport const KeyOfEth = 'eth'\nexport const ScanUrlEth = IS_DEV\n ? 'https://rinkeby.etherscan.io'\n : 'https://etherscan.io'\nexport const ChainIdsEth = {\n MAINNET: {id: 1, name: 'Mainnet'},\n TESTNET: {id: 5, name: 'Goerli'}, // shuttle use Rinkeby network as testnet\n // ROPSTEN: 3,\n // GÖRLI: 5,\n // KOVAN: 42,\n}\n\n/**\n * bsc config\n */\nexport const KeyOfBsc = 'bsc'\nexport const ScanUrlBsc = IS_DEV\n ? 'https://testnet.bscscan.com'\n : 'https://bscscan.com'\nexport const ChainIdsBsc = {\n MAINNET: {id: 56, name: 'Mainnet'},\n TESTNET: {id: 97, name: 'Testnet'},\n}\n\n/**\n * oec config\n */\n\nexport const KeyOfOec = 'oec'\nexport const ScanUrlOec = IS_DEV\n ? 'https://www.oklink.com/okexchain-test'\n : 'https://www.oklink.com/okexchain'\nexport const ChainIdsOec = {\n MAINNET: {id: 66, name: 'Mainnet'},\n TESTNET: {id: 65, name: 'Testnet'},\n}\n\n/**\n * conflux config\n */\nexport const KeyOfCfx = 'cfx'\nexport const ScanUrlCfx = IS_DEV\n ? 'https://testnet.confluxscan.io'\n : 'https://confluxscan.io'\nexport const ChainIdsCfx = {\n MAINNET: {id: 1029, name: 'Hydra'},\n TESTNET: {id: 1, name: 'Testnet'},\n}\n\n/**\n * bitcoin config\n */\nexport const KeyOfBtc = 'btc'\nexport const ScanUrlBtc = IS_DEV\n ? 'https://blockstream.info/testnet'\n : 'https://blockstream.info'\n\n/**\n * heco config\n */\n\nexport const KeyOfHeco = 'heco'\nexport const ScanUrlHeco = IS_DEV\n ? 'https://testnet.hecoinfo.com/'\n : 'https://hecoinfo.com/'\nexport const ChainIdsHeco = {\n MAINNET: {id: 128, name: 'Mainnet'},\n TESTNET: {id: 256, name: 'Testnet'},\n}\n\nexport const KeyOfPortal = 'portal'\nexport const KeyOfMetaMask = 'metamask'\nexport const WalletConfig = {\n [KeyOfPortal]: {\n key: KeyOfPortal,\n name: 'FluentWallet',\n website: 'https://fluentwallet.com',\n icon(className) {\n return \n },\n },\n [KeyOfMetaMask]: {\n key: KeyOfMetaMask,\n name: 'MetaMask',\n website: 'https://metamask.io',\n icon(className) {\n return \n },\n },\n}\n\nexport const ChainIdsBtc = {\n MAINNET: {name: 'Mainnet'},\n TESTNET: {name: 'Testnet'},\n}\n\nexport const displayFilter = obj => {\n return obj?.supported === 1 && obj?.in_token_list === 1\n}\n\n/**\n * chain config\n */\nexport const ChainConfig = {\n [KeyOfEth]: {\n key: KeyOfEth,\n icon(className) {\n return \n },\n fullName: 'Ethereum', //full name of the chain\n shortName: 'Ethereum', // short name of chain, usually used for fetching api\n tokenName: 'ETH', //the name of native token for this chain\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlEth,\n scanTxUrl: ScanUrlEth + '/tx/',\n scanTokenUrl: ScanUrlEth + '/token/',\n // commonTokens: ['ETH', 'USDT', 'eCFX'],\n commonTokens: IS_DEV\n ? [\n 'eth',\n '0x08130635368aa28b217a4dfb68e1bf8dc525621c', //AfroX\n '0x27ccd03d1eccb2cbced1efbb18554bbfd526800a', //ecfx\n ]\n : [\n 'eth',\n '0xdac17f958d2ee523a2206206994597c13d831ec7', //usdt\n '0xa1f82e14bc09a1b42710df1a8a999b62f294e592', //ecfx\n ],\n supportedChainIds: ChainIdsEth,\n wallet: KeyOfMetaMask,\n remainderAmount: 0.15, //when you shuttle in some tokens,for example: ETH-cETH,you must have reminder of this amount to pay fee\n },\n [KeyOfBsc]: {\n key: KeyOfBsc,\n icon(className) {\n return \n },\n fullName: 'Binance Smart Chain',\n shortName: 'BSC',\n tokenName: 'BNB',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlBsc,\n scanTxUrl: ScanUrlBsc + '/tx/',\n scanTokenUrl: ScanUrlBsc + '/token/',\n // commonTokens: ['BNB', 'bCFX'],\n commonTokens: IS_DEV\n ? ['bnb', '0xef3f743830078a9cb5ce39c212ec1ca807e45fe1']\n : ['bnb', '0x045c4324039da91c52c55df5d785385aab073dcf'],\n supportedChainIds: ChainIdsBsc,\n wallet: KeyOfMetaMask,\n remainderAmount: 0.002,\n },\n [KeyOfOec]: {\n key: KeyOfOec,\n icon(className, size) {\n return \n },\n fullName: 'OKExChain',\n shortName: 'OEC',\n tokenName: 'OKT',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlOec,\n scanTxUrl: ScanUrlOec + '/tx/',\n scanTokenUrl: ScanUrlOec + '/tokenAddr/',\n // commonTokens: ['okt', 'cfxk'],\n commonTokens: IS_DEV\n ? ['okt', '0xae6155367003e028b594f1139f2b6edbcb5bb297']\n : ['okt', '0xfcd4d15f09548cd90efcaf0b1d9531bba670b7b1'],\n supportedChainIds: ChainIdsOec,\n wallet: KeyOfMetaMask,\n remainderAmount: 0.001,\n },\n [KeyOfHeco]: {\n key: KeyOfHeco,\n icon(className, size) {\n return \n },\n fullName: 'Huobi ECO Chain',\n shortName: 'HECO',\n tokenName: 'HT',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlHeco,\n scanTxUrl: ScanUrlHeco + '/tx/',\n scanTokenUrl: ScanUrlHeco + '/address/',\n commonTokens: IS_DEV\n ? ['ht', '0x0D0A4732c5e3A19d912Cdbb12F57A3b185130C6D']\n : ['ht', '0x045c4324039dA91c52C55DF5D785385Aab073DcF'],\n supportedChainIds: ChainIdsHeco,\n wallet: KeyOfMetaMask,\n remainderAmount: 0.001,\n },\n [KeyOfCfx]: {\n key: KeyOfCfx,\n icon(className) {\n return \n },\n fullName: 'Conflux',\n shortName: 'Conflux',\n tokenName: 'CFX',\n checkAddress: checkCfxTokenAddress,\n displayFilter,\n scanUrl: ScanUrlCfx,\n scanTxUrl: ScanUrlCfx + '/transaction/',\n scanTokenUrl: ScanUrlCfx + '/address/',\n // commonTokens: ['CFX', 'cUSDT', 'cETH'],\n commonTokens: IS_DEV\n ? [\n 'cfx',\n 'cfxtest:acbp2sm9d1ajzthsep0nkmpm0su0n4dzmeexzdcksf',\n 'cfxtest:acceftennya582450e1g227dthfvp8zz1p370pvb6r',\n ]\n : [\n 'cfx',\n 'cfx:acf2rcsh8payyxpg6xj7b0ztswwh81ute60tsw35j7',\n 'cfx:acdrf821t59y12b4guyzckyuw2xf1gfpj2ba0x4sj6',\n ],\n supportedChainIds: ChainIdsCfx,\n wallet: KeyOfPortal,\n remainderAmount: 1,\n },\n [KeyOfBtc]: {\n key: KeyOfBtc,\n icon(className) {\n return \n },\n fullName: 'Bitcoin',\n shortName: 'Bitcoin',\n tokenName: 'BTC',\n checkAddress: checkBtcAddress,\n displayFilter() {\n return true\n },\n scanUrl: ScanUrlBtc,\n scanTxUrl: ScanUrlBtc + '/tx/',\n commonTokens: [],\n supportedChainIds: ChainIdsBtc,\n remainderAmount: 0,\n },\n}\n\nexport const SupportedChains = Object.keys(ChainConfig)\n\nexport const SupportedWallets = Object.keys(WalletConfig)\n\n// set default chain to FromChain and ToChain when shuttle\nexport const DefaultFromChain = KeyOfEth\nexport const DefaultToChain = KeyOfCfx\nexport const SupportedChainIdsWeb3 = [\n ...Object.values(ChainConfig[KeyOfEth].supportedChainIds).map(\n chain => chain.id,\n ),\n ...Object.values(ChainConfig[KeyOfBsc].supportedChainIds).map(\n chain => chain.id,\n ),\n ...Object.values(ChainConfig[KeyOfOec].supportedChainIds).map(\n chain => chain.id,\n ),\n ...Object.values(ChainConfig[KeyOfHeco].supportedChainIds).map(\n chain => chain.id,\n ),\n]\n\nconst DefaultChainIconSize = 'w-10 h-10'\nexport function ChainIcon({chain, className = ''}) {\n let icon\n switch (chain) {\n case KeyOfEth:\n icon = \n break\n case KeyOfBsc:\n icon = \n break\n case KeyOfCfx:\n icon = \n break\n case KeyOfBtc:\n icon = \n break\n case KeyOfOec:\n icon = \n break\n case KeyOfHeco:\n icon = \n break\n default:\n //TODO: maybe need to change a better default icon\n icon = <>\n break\n }\n return React.cloneElement(icon, {\n className: `${DefaultChainIconSize} ${className}`,\n })\n}\n\nconst DefaultWalletIconSize = 'w-4 h-4'\nexport function WalletIcon({type, className = ''}) {\n let icon\n switch (type) {\n case KeyOfPortal:\n icon = \n break\n case KeyOfMetaMask:\n icon = \n break\n default:\n icon = <>\n break\n }\n return React.cloneElement(icon, {\n className: `${DefaultWalletIconSize} ${className}`,\n })\n}\n\nChainIcon.propTypes = {\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n className: PropTypes.string,\n}\n\nWalletIcon.propTypes = {\n type: PropTypes.oneOf(SupportedWallets).isRequired,\n className: PropTypes.string,\n}\n","import {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {ChainIcon, SupportedChains} from '../../../constants/chainConfig'\nimport {TokenAlert} from '../../../assets/svg'\n\nfunction TokenIcon({chain, token, size = 'medium', showAlarm = false}) {\n const {icon, origin, in_token_list} = token\n const subscriptShown = useMemo(() => {\n if (origin !== chain) return true\n return false\n }, [chain, origin])\n\n const iconSize = useMemo(() => {\n if (size === 'large') return 'w-7 h-7'\n if (size === 'medium') return 'w-5 h-5'\n if (size === 'small') return 'w-4 h-4'\n }, [size])\n\n const subscriptSize = useMemo(() => {\n if (size === 'large') return '!w-3 !h-3'\n if (size === 'medium') return '!w-2.5 !h-2.5'\n if (size === 'small') return '!w-2 !h-2'\n }, [size])\n\n return (\n
\n \"token\n {in_token_list === 0 && showAlarm && (\n \n )}\n {subscriptShown && origin && (\n \n \n \n )}\n
\n )\n}\n\nTokenIcon.propTypes = {\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n token: PropTypes.object.isRequired,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n showAlarm: PropTypes.bool,\n}\n\nexport default TokenIcon\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\n\nconst sizeStyleObj = {\n small: 'text-xs h-8',\n medium: 'text-sm h-10',\n large: 'text-base h-12',\n}\n\nconst iconSizeObj = {\n small: 'w-3 h-3',\n medium: 'w-4 h-4',\n large: 'w-5 h-5',\n}\n\nfunction Button({\n onClick,\n className = '',\n children,\n size = 'medium',\n color = 'primary',\n variant = 'contained',\n disabled = false,\n fullWidth = false,\n danger = false,\n startIcon,\n endIcon,\n ...props\n}) {\n const disabledStyle = useMemo(() => {\n if (disabled) {\n if (variant === 'text')\n return 'bg-transparent text-gray-40 cursor-not-allowed'\n else return 'bg-gray-20 text-gray-40 cursor-not-allowed'\n }\n return ''\n }, [disabled, variant])\n\n const colorStyle = useMemo(() => {\n if (disabled) return ''\n if (variant === 'text') {\n if (danger) return 'text-error bg-transparent hover:bg-error-10'\n if (color === 'primary')\n return 'text-gray-80 bg-transparent hover:bg-gray-10'\n } else if (variant === 'outlined') {\n if (danger)\n return 'border border-error text-error bg-gray-0 hover:border-error-dark hover:text-error-dark'\n if (color === 'primary')\n return 'border border-primary text-primary bg-gray-0 hover:border-primary-dark hover:text-primary-dark'\n } else if (variant === 'contained') {\n if (danger) return 'text-white bg-error hover:bg-error-dark'\n if (color === 'primary')\n return 'text-white bg-primary hover:bg-primary-dark'\n }\n return ''\n }, [disabled, variant, color, danger])\n\n const sizeStyle = sizeStyleObj[size] || ''\n const iconSize = iconSizeObj[size] || ''\n\n const iconColor = useMemo(() => {\n if (disabled) return 'text-gray-40'\n if (variant === 'contained') return 'text-white'\n return 'text-primary hover:text-primary-dark'\n }, [disabled, variant])\n\n const startIconComp = startIcon\n ? React.cloneElement(startIcon, {\n className: `mr-2 ${iconColor} ${iconSize} ${\n startIcon.props.className || ''\n }`,\n })\n : null\n\n const endIconComp = endIcon\n ? React.cloneElement(endIcon, {\n className: `ml-2 ${iconColor} ${iconSize} ${\n endIcon.props.className || ''\n }`,\n })\n : null\n\n return (\n onClick && onClick(e)}\n disabled={disabled}\n className={`\n flex justify-center items-center focus:outline-none rounded ${disabledStyle} ${colorStyle} ${sizeStyle} ${\n fullWidth ? 'w-full' : 'px-4'\n } ${className}`}\n {...props}\n >\n {startIconComp}\n {children}\n {endIconComp}\n \n )\n}\n\nButton.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n color: PropTypes.string,\n variant: PropTypes.string,\n disabled: PropTypes.bool,\n fullWidth: PropTypes.bool,\n danger: PropTypes.bool,\n onClick: PropTypes.func,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n startIcon: PropTypes.node,\n endIcon: PropTypes.node,\n}\n\nexport default Button\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {Close} from '../../assets/svg'\n\nconst sizeStyleObj = {\n small: 'text-2xs h-4 px-1',\n medium: 'text-xs h-6 px-2',\n}\n\nconst iconSizeObj = {\n small: 'w-2 h-2',\n medium: 'w-3 h-3',\n}\nfunction Tag({\n onClose,\n onClick,\n className = '',\n children,\n size = 'medium',\n color = 'primary',\n icon,\n closeIcon,\n disabled = false,\n closable = false,\n ...props\n}) {\n const disabledStyle = useMemo(() => {\n if (disabled) {\n return 'bg-gray-20 text-gray-40 cursor-not-allowed'\n }\n return ''\n }, [disabled])\n\n const colorStyle = useMemo(() => {\n if (disabled) return ''\n if (color === 'primary') {\n return 'text-primary bg-primary-10 border border-transparent hover:border-primary'\n } else if (color === 'error') {\n return 'text-error bg-error-10 border border-transparent hover:border-error'\n }\n return ''\n }, [disabled, color])\n\n const sizeStyle = sizeStyleObj[size] || ''\n const iconSize = iconSizeObj[size] || ''\n\n const iconColor = useMemo(() => {\n if (disabled) return 'text-gray-40'\n if (color === 'primary') return 'text-primary'\n if (color === 'error') return 'text-error'\n }, [disabled, color])\n\n const onCloseClick = e => {\n e.stopPropagation()\n !disabled && onClose && onClose(e)\n }\n\n const iconComp = icon\n ? React.cloneElement(icon, {\n className: `mr-1 ${iconColor} ${iconSize} ${\n icon.props.className || ''\n }`,\n })\n : null\n\n const closeIconComp = closeIcon\n ? React.cloneElement(closeIcon, {\n className: `${iconColor} ${iconSize} ${\n closeIcon.props.className || ''\n }`,\n })\n : null\n\n return (\n onClick && onClick(e)}\n disabled={disabled}\n className={`\n flex justify-center items-center focus:outline-none rounded ${disabledStyle} ${colorStyle} ${sizeStyle} ${className}`}\n {...props}\n >\n {iconComp}\n {children}\n {closable && (\n onCloseClick(e)}\n className={`ml-1`}\n >\n {closeIcon ? (\n closeIconComp\n ) : (\n \n )}\n \n )}\n \n )\n}\n\nTag.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium']),\n color: PropTypes.string,\n disabled: PropTypes.bool,\n closable: PropTypes.bool,\n onClose: PropTypes.func,\n onClick: PropTypes.func,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n icon: PropTypes.node,\n closeIcon: PropTypes.node,\n}\n\nexport default Tag\n","import PropTypes from 'prop-types'\nimport {CircleBg, SquareBg} from '../../assets/svg'\n\nfunction WrapIcon({\n type,\n size = 'w-4 h-4',\n children,\n className = '',\n onClick,\n clickable = true,\n ...props\n}) {\n return (\n onClick && onClick(e)}\n aria-hidden=\"true\"\n className={`${size} relative flex justify-center items-center ${\n clickable ? 'cursor-pointer' : ''\n } ${className}`}\n {...props}\n >\n {type === 'circle' && }\n {type === 'square' && }\n \n {children}\n \n \n )\n}\n\nexport default WrapIcon\n\nWrapIcon.propTypes = {\n type: PropTypes.oneOf(['circle', 'square']).isRequired,\n size: PropTypes.string,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n className: PropTypes.string,\n onClick: PropTypes.func,\n clickable: PropTypes.bool,\n}\n","import Notification from 'rc-notification'\nimport {Close} from '../../assets/svg'\nimport {\n ErrorFilled,\n SuccessFilled,\n WarningFilled,\n InfoFilled,\n} from '../../assets/svg'\n\nexport const NotificationPlacement = [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight',\n]\n\nexport const IconTypes = ['success', 'info', 'error', 'warning']\n\nconst notificationInstance = {}\nlet defaultDuration = 4.5\nlet defaultTop = 24\nlet defaultBottom = 24\nlet defaultPlacement = 'topRight'\nlet defaultGetContainer\nlet defaultCloseIcon\n\nfunction setNotificationConfig(options) {\n const {duration, placement, bottom, top, getContainer, closeIcon} = options\n if (duration !== undefined) {\n defaultDuration = duration\n }\n if (placement !== undefined) {\n defaultPlacement = placement\n } else {\n defaultPlacement = 'topLeft'\n }\n if (bottom !== undefined) {\n defaultBottom = bottom\n }\n if (top !== undefined) {\n defaultTop = top\n }\n if (getContainer !== undefined) {\n defaultGetContainer = getContainer\n }\n if (closeIcon !== undefined) {\n defaultCloseIcon = closeIcon\n }\n}\n\nfunction getPlacementStyle(\n placement,\n top = defaultTop,\n bottom = defaultBottom,\n) {\n let style\n switch (placement) {\n case 'topLeft':\n style = {\n left: 0,\n top,\n bottom: 'auto',\n }\n break\n case 'topRight':\n style = {\n right: 0,\n top,\n bottom: 'auto',\n }\n break\n case 'bottomLeft':\n style = {\n left: 0,\n top: 'auto',\n bottom,\n }\n break\n default:\n style = {\n right: 0,\n top: 'auto',\n bottom,\n }\n break\n }\n return style\n}\n\nfunction getNotificationInstance(args, callback) {\n const {\n placement = defaultPlacement,\n top,\n bottom,\n getContainer = defaultGetContainer,\n closeIcon = defaultCloseIcon,\n } = args\n const prefixCls = 'notification'\n\n const cacheKey = `${prefixCls}-${placement}`\n const cacheInstance = notificationInstance[cacheKey]\n if (cacheInstance) {\n Promise.resolve(cacheInstance).then(instance => {\n callback({instance})\n })\n\n return\n }\n\n const closeIconToRender = (\n \n {closeIcon || }\n \n )\n\n notificationInstance[cacheKey] = new Promise(resolve => {\n Notification.newInstance(\n {\n prefixCls,\n className: `absolute`,\n style: getPlacementStyle(placement, top, bottom),\n getContainer,\n closeIcon: closeIconToRender,\n },\n notification => {\n resolve(notification)\n callback({\n instance: notification,\n })\n },\n )\n })\n}\n\nconst typeToIcon = {\n success: ,\n info: ,\n error: ,\n warning: ,\n}\n\nfunction getRCNoticeProps(args) {\n const {\n duration: durationArg,\n icon,\n type,\n content,\n title,\n actions,\n onClose,\n onClick,\n key,\n style = {},\n className = '',\n } = args\n\n const duration = durationArg === undefined ? defaultDuration : durationArg\n\n let iconNode = null\n if (icon) {\n iconNode = {args.icon}\n } else if (type) {\n iconNode = typeToIcon[type] || null\n }\n\n return {\n content: (\n
\n
\n {iconNode}\n
\n
\n {title}\n
\n
{content}
\n
\n
\n {actions ? {actions} : null}\n
\n ),\n duration,\n closable: true,\n onClose,\n onClick,\n key,\n style: style || {},\n className: `${className} p-6 shadow-2 rounded w-full md:w-100 mt-4 md:mb-4 md:mr-4 relative animate-move-left bg-gray-0`,\n }\n}\n\nfunction notice(args) {\n getNotificationInstance(args, ({instance}) => {\n instance.notice(getRCNoticeProps(args))\n })\n}\n\nconst api = {\n open: notice,\n close(key) {\n Object.keys(notificationInstance).forEach(cacheKey =>\n Promise.resolve(notificationInstance[cacheKey]).then(instance => {\n instance.removeNotice(key)\n }),\n )\n },\n config: setNotificationConfig,\n destroy() {\n Object.keys(notificationInstance).forEach(cacheKey => {\n Promise.resolve(notificationInstance[cacheKey]).then(instance => {\n instance.destroy()\n })\n delete notificationInstance[cacheKey] // lgtm[js/missing-await]\n })\n },\n}\n\nIconTypes.forEach(type => {\n api[type] = args =>\n api.open({\n ...args,\n type,\n })\n})\n\nexport default api\n","import Notification from 'rc-notification'\nimport {Loading} from '../../components'\nimport {\n ErrorFilled,\n SuccessFilled,\n WarningFilled,\n InfoFilled,\n} from '../../assets/svg'\n\nconst IconTypes = ['info', 'success', 'error', 'warning', 'loading']\n\nlet messageInstance\nlet defaultDuration = 3\nlet defaultTop = 20\nlet key = 1\nlet defaultTransitionName = 'animation-move-up'\nlet defaultGetContainer\nlet defaultMaxCount\n\nexport function getKeyThenIncreaseKey() {\n return key++\n}\n\nfunction setMessageConfig(options) {\n if (options.top !== undefined) {\n defaultTop = options.top\n // delete messageInstance for new defaultTop\n messageInstance = null\n }\n if (options.duration !== undefined) {\n defaultDuration = options.duration\n }\n if (options.getContainer !== undefined) {\n defaultGetContainer = options.getContainer\n }\n if (options.transitionName !== undefined) {\n defaultTransitionName = options.transitionName\n // delete messageInstance for new transitionName\n messageInstance = null\n }\n if (options.maxCount !== undefined) {\n defaultMaxCount = options.maxCount\n messageInstance = null\n }\n}\n\nfunction getRCNotificationInstance(args, callback) {\n const {\n getContainer = defaultGetContainer,\n transitionName = defaultTransitionName,\n maxCount = defaultMaxCount,\n } = args\n const prefixCls = 'message'\n\n if (messageInstance) {\n callback({instance: messageInstance})\n return\n }\n\n const instanceConfig = {\n prefixCls,\n transitionName,\n style: {top: defaultTop},\n getContainer,\n maxCount,\n className: 'absolute w-full flex justify-center',\n }\n\n Notification.newInstance(instanceConfig, instance => {\n if (messageInstance) {\n callback({instance})\n return\n }\n messageInstance = instance\n\n callback({instance})\n })\n}\n\nconst typeToIcon = {\n success: ,\n info: ,\n error: ,\n warning: ,\n}\n\nfunction getRCNoticeProps(args) {\n const {\n duration: durationArg,\n type,\n key,\n content,\n style = {},\n className = '',\n onClose,\n onClick,\n icon,\n } = args\n\n const duration = durationArg === undefined ? defaultDuration : durationArg\n\n const IconComponent =\n type === 'loading' ? (\n \n ) : (\n typeToIcon[type]\n )\n\n return {\n key,\n duration,\n style,\n className: `${className} px-4 py-3 text-gray-80 bg-gray-0 shadow-1 relative mb-4 animate-move-down`,\n content: (\n
\n {icon || IconComponent || null}\n {content}\n
\n ),\n onClose: onClose,\n onClick: onClick,\n }\n}\n\nfunction notice(args) {\n const target = args.key || key++\n const closePromise = new Promise(resolve => {\n const callback = () => {\n if (typeof args.onClose === 'function') {\n args.onClose()\n }\n return resolve(true)\n }\n\n getRCNotificationInstance(args, ({instance}) => {\n instance.notice(\n getRCNoticeProps({...args, key: target, onClose: callback}),\n )\n })\n })\n const result = () => {\n if (messageInstance) {\n messageInstance.removeNotice(target)\n }\n }\n result.then = (filled, rejected) => closePromise.then(filled, rejected)\n result.promise = closePromise\n return result\n}\n\nconst api = {\n open: notice,\n config: setMessageConfig,\n destroy(messageKey) {\n if (messageInstance) {\n if (messageKey) {\n const {removeNotice} = messageInstance\n removeNotice(messageKey)\n } else {\n const {destroy} = messageInstance\n destroy()\n messageInstance = null\n }\n }\n },\n}\n\nIconTypes.forEach(type => {\n api[type] = args =>\n api.open({\n ...args,\n type,\n })\n})\n\nexport default api\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {\n ErrorFilled,\n SuccessFilled,\n WarningFilled,\n InfoFilled,\n} from '../../assets/svg'\nimport {Close} from '../../assets/svg'\n\nconst typeToIcon = {\n success: ,\n info: ,\n error: ,\n warning: ,\n}\n\nconst contentStyleObj = {\n info: 'text-info-dark',\n warning: 'text-warning-dark',\n error: 'text-error-dark',\n success: 'text-success-dark',\n}\nfunction Alert({\n type = 'success',\n icon,\n className = '',\n width = 'w-100',\n open = false,\n closable = true,\n closeIcon,\n onClose,\n content,\n bordered = false,\n}) {\n const IconComponent = typeToIcon[type]\n\n const style = useMemo(() => {\n if (type === 'info')\n return `bg-info-10 border ${bordered ? 'border-info' : 'border-info-10'}`\n if (type === 'warning')\n return `bg-warning-10 border ${\n bordered ? 'border-warning' : 'border-warning-10'\n }`\n if (type === 'error')\n return `bg-error-10 border ${\n bordered ? 'border-error' : 'border-error-10'\n }`\n if (type === 'success')\n return `bg-success-10 border ${\n bordered ? 'border-success' : 'border-success-10'\n }`\n }, [bordered, type])\n\n const contentStyle = contentStyleObj[type] || ''\n\n const onCloseClick = e => {\n e.stopPropagation()\n if (closable) {\n onClose && onClose(e)\n }\n }\n\n const closeIconComp = closeIcon\n ? React.cloneElement(closeIcon, {\n className: `w-4 h-4 text-gray-40 ${closeIcon.props.className || ''}`,\n })\n : null\n\n if (!open) return null\n\n return (\n \n
\n {icon || IconComponent || null}\n {content}\n
\n {closable && (\n onCloseClick(e)}>\n {closeIcon ? (\n closeIconComp\n ) : (\n onCloseClick(e)}\n />\n )}\n \n )}\n \n )\n}\n\nexport default Alert\n\nAlert.propTypes = {\n type: PropTypes.oneOf(['info', 'success', 'error', 'warning']),\n className: PropTypes.string,\n width: PropTypes.string,\n open: PropTypes.bool,\n closable: PropTypes.bool,\n bordered: PropTypes.bool,\n onClose: PropTypes.func,\n closeIcon: PropTypes.node,\n icon: PropTypes.node,\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n}\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\n\nconst sizeStyleObj = {\n small: 'text-xs',\n medium: 'text-sm',\n large: 'text-base',\n}\n\nconst iconSizeObj = {\n small: 'w-3 h-3',\n medium: 'w-4 h-4',\n large: 'w-5 h-5',\n}\n\nfunction Link({\n onClick,\n className = '',\n children,\n size = 'medium',\n disabled = false,\n startIcon,\n endIcon,\n ...props\n}) {\n const disabledStyle = useMemo(() => {\n if (disabled) {\n return 'bg-transparent text-gray-40 cursor-not-allowed'\n }\n return ''\n }, [disabled])\n\n const colorStyle = useMemo(() => {\n if (disabled) return ''\n return 'text-primary bg-transparent hover:text-primary-dark hover:underline'\n }, [disabled])\n\n const sizeStyle = sizeStyleObj[size] || ''\n const iconSize = iconSizeObj[size] || ''\n\n const iconColor = useMemo(() => {\n if (disabled) return 'text-gray-40'\n return 'text-primary hover:text-primary-dark'\n }, [disabled])\n\n const startIconComp = startIcon\n ? React.cloneElement(startIcon, {\n className: `mr-2 ${iconColor} ${iconSize} ${\n startIcon.props.className || ''\n }`,\n })\n : null\n\n const endIconComp = endIcon\n ? React.cloneElement(endIcon, {\n className: `ml-2 ${iconColor} ${iconSize} ${\n endIcon.props.className || ''\n }`,\n })\n : null\n\n return (\n onClick && !disabled && onClick(e)}\n className={`\n flex justify-center items-center focus:outline-none rounded cursor-pointer ${disabledStyle} ${colorStyle} ${sizeStyle} ${className}`}\n {...props}\n >\n {startIconComp}\n {children}\n {endIconComp}\n \n )\n}\n\nLink.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n startIcon: PropTypes.node,\n endIcon: PropTypes.node,\n}\n\nexport default Link\n","import React, {useRef} from 'react'\nimport PropTypes from 'prop-types'\nimport {useClickAway} from 'react-use'\nimport {Close} from '../../assets/svg'\n\nfunction Modal({\n className = '',\n width,\n open = false,\n closable = true,\n closeIcon,\n icon,\n onClose,\n title,\n content,\n actions,\n size = 'small',\n ...props\n}) {\n const ref = useRef(null)\n\n const onCloseClick = e => {\n e.stopPropagation()\n if (closable) {\n onClose && onClose(e)\n }\n }\n\n useClickAway(ref, e => {\n onClose && onClose(e)\n })\n\n const iconComp = icon\n ? React.cloneElement(icon, {\n className: `w-12 h-12 mb-3 ${icon.props.className || ''}`,\n })\n : null\n\n const closeIconComp = closeIcon\n ? React.cloneElement(closeIcon, {\n className: `${size === 'medium' ? 'w-6 h-6' : 'w-4 h-4'} text-gray-40 ${\n closeIcon.props.className || ''\n }`,\n })\n : null\n\n if (!open) return null\n return (\n \n \n {closable && (\n onCloseClick(e)}\n className=\"absolute top-3 right-3\"\n >\n {closeIcon ? (\n closeIconComp\n ) : (\n \n )}\n \n )}\n {iconComp}\n {title && (\n
\n {title}\n
\n )}\n
{content}
\n {actions && (\n
{actions}
\n )}\n \n \n )\n}\n\nexport default Modal\n\nModal.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium']),\n width: PropTypes.string,\n title: PropTypes.string,\n open: PropTypes.bool,\n closable: PropTypes.bool,\n onClose: PropTypes.func,\n actions: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]),\n content: PropTypes.node.isRequired,\n icon: PropTypes.node,\n closeIcon: PropTypes.node,\n id: PropTypes.string,\n}\n","import PropTypes from 'prop-types'\nimport {Loading as LoadingSvg} from '../../assets/svg'\n\nfunction Loading({className = ''}) {\n return (\n \n )\n}\n\nexport default Loading\n\nLoading.propTypes = {\n className: PropTypes.string,\n}\n","/* eslint-disable no-unused-vars */\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport RcDropdown from 'rc-dropdown'\nimport 'rc-dropdown/assets/index.css'\nimport {ArrowDownOutlined} from '../../assets/svg'\nfunction Dropdown({\n overlay,\n trigger,\n mouseEnterDelay = 0.15,\n mouseLeaveDelay = 0.1,\n transitionName,\n disabled,\n placement,\n children,\n ...props\n}) {\n // TODO: custom animation name\n // const getTransitionName = () => {\n // if (transitionName !== undefined) {\n // return transitionName\n // }\n // if (placement && placement.indexOf('top') >= 0) {\n // return 'slide-down'\n // }\n // return 'slide-up'\n // }\n\n const renderOverlay = () => {\n // rc-dropdown already can process the function of overlay, but we have check logic here.\n // So we need render the element to check and pass back to rc-dropdown.\n\n let overlayNode\n if (typeof overlay === 'function') {\n overlayNode = overlay()\n } else {\n overlayNode = overlay\n }\n overlayNode = React.Children.only(\n typeof overlayNode === 'string' ? (\n {overlayNode}\n ) : (\n overlayNode\n ),\n )\n\n const overlayProps = overlayNode.props\n\n // menu can be selectable and focusable in dropdown defaultly\n const {selectable = true, focusable = true, expandIcon} = overlayProps\n\n const overlayNodeExpandIcon =\n typeof expandIcon !== 'undefined' && React.isValidElement(expandIcon) ? (\n expandIcon\n ) : (\n \n )\n\n const fixedModeOverlay =\n typeof overlayNode.type === 'string'\n ? overlayNode\n : React.cloneElement(overlayNode, {\n mode: 'vertical',\n className: 'shadow-2 py-2 my-0.5 bg-gray-0 relative',\n selectable,\n focusable,\n expandIcon: overlayNodeExpandIcon,\n })\n\n return fixedModeOverlay\n }\n\n const getPlacement = () => {\n if (placement !== undefined) {\n return placement\n }\n return 'bottomLeft'\n }\n\n const child = React.Children.only(children)\n\n const dropdownTrigger = React.cloneElement(child, {\n className: `trigger ${child.props.className || ''}`,\n disabled,\n })\n\n const triggerActions = disabled ? [] : trigger\n let alignPoint\n if (triggerActions && triggerActions.indexOf('contextMenu') !== -1) {\n alignPoint = true\n }\n\n return (\n renderOverlay()}\n placement={getPlacement()}\n {...props}\n >\n {dropdownTrigger}\n \n )\n}\n\nDropdown.propTypes = {\n arrow: PropTypes.bool,\n trigger: PropTypes.array,\n overlay: PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n onVisibleChange: PropTypes.func,\n visible: PropTypes.bool,\n disabled: PropTypes.bool,\n align: PropTypes.object,\n getPopupContainer: PropTypes.func,\n prefixCls: PropTypes.string,\n className: PropTypes.string,\n transitionName: PropTypes.string,\n placement: PropTypes.oneOf([\n 'topLeft',\n 'topCenter',\n 'topRight',\n 'bottomLeft',\n 'bottomCenter',\n 'bottomRight',\n ]),\n overlayClassName: PropTypes.string,\n overlayStyle: PropTypes.object,\n forceRender: PropTypes.bool,\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n openClassName: PropTypes.string,\n}\n\nexport default Dropdown\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {SuccessFilled, Disabled} from '../../assets/svg'\nfunction MenuItem({\n children,\n itemKey,\n selected,\n selectedIcon,\n icon,\n onClick,\n disabled,\n}) {\n const style = useMemo(() => {\n if (disabled) return 'text-gray-40 cursor-not-allowed'\n if (selected) return 'bg-gray-0 text-primary cursor-poiniter'\n return 'bg-gray-0 text-gray-100 cursor-poiniter hover:bg-gray-10 hover:text-primary'\n }, [disabled, selected])\n\n const iconComp = icon\n ? React.cloneElement(icon, {\n className: `mr-2 w-6 h-6 ${icon.props.className || ''}`,\n })\n : null\n\n const selectedIconComp = selectedIcon\n ? React.cloneElement(selectedIcon, {\n className: `w-4 h-4 ${selectedIcon.props.className || ''}`,\n })\n : null\n\n return (\n !disabled && onClick && onClick(itemKey)}\n className={`w-50 h-12 ${\n icon ? 'px-4' : 'pl-12 pr-4'\n } flex items-center ${style}`}\n >\n
\n {iconComp}\n {children}\n
\n {!disabled &&\n selected &&\n (selectedIcon ? (\n selectedIconComp\n ) : (\n \n ))}\n {disabled && }\n \n )\n}\n\nMenuItem.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n itemKey: PropTypes.string.isRequired,\n selected: PropTypes.bool,\n selectedIcon: PropTypes.node,\n icon: PropTypes.node,\n onClick: PropTypes.func,\n disabled: PropTypes.bool,\n}\n\nexport default MenuItem\n","import PropTypes from 'prop-types'\nimport MenuItem from './MenuItem'\n\n//TODO: extend menu with rc-menu\nfunction Menu({children, className = '', onClick}) {\n return (\n
\n {children}\n
\n )\n}\n\nMenu.Item = MenuItem\nexport default Menu\n\nMenu.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n className: PropTypes.string,\n onClick: PropTypes.func,\n}\n","import PropTypes from 'prop-types'\nimport React, {useEffect} from 'react'\n\nfunction Toast({\n className = '',\n open,\n icon,\n title,\n content,\n autoHideDuration = 2000,\n type = 'block',\n onClose,\n ...props\n}) {\n useEffect(() => {\n if (open) setTimeout(() => onClose && onClose(), autoHideDuration)\n }, [open, autoHideDuration, onClose])\n if (!open) return null\n const iconComp = icon\n ? React.cloneElement(icon, {\n className: `w-13 h-13 mb-2 ${icon.props.className || ''}`,\n })\n : null\n\n if (type === 'block') {\n return (\n \n {iconComp}\n {title && (\n
{title}
\n )}\n
{content}
\n \n )\n } else if (type === 'line' || !title) {\n return (\n \n {icon && \"status\"}\n
{content}
\n \n )\n }\n return null\n}\n\nToast.propTypes = {\n className: PropTypes.string,\n open: PropTypes.bool,\n icon: PropTypes.node,\n title: PropTypes.string,\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n autoHideDuration: PropTypes.number,\n type: PropTypes.oneOf(['block', 'line']),\n onClose: PropTypes.func,\n top: PropTypes.string,\n}\n\nexport default Toast\n","import {placements} from 'rc-tooltip/lib/placements'\n\nconst autoAdjustOverflowEnabled = {\n adjustX: 1,\n adjustY: 1,\n}\n\nconst autoAdjustOverflowDisabled = {\n adjustX: 0,\n adjustY: 0,\n}\n\nconst targetOffset = [0, 0]\n\nexport function getOverflowOptions(autoAdjustOverflow) {\n if (typeof autoAdjustOverflow === 'boolean') {\n return autoAdjustOverflow\n ? autoAdjustOverflowEnabled\n : autoAdjustOverflowDisabled\n }\n return {\n ...autoAdjustOverflowDisabled,\n ...autoAdjustOverflow,\n }\n}\n\nexport default function getPlacements(config) {\n const {\n arrowWidth = 4,\n horizontalArrowShift = 16,\n verticalArrowShift = 8,\n autoAdjustOverflow,\n } = config\n const placementMap = {\n left: {\n points: ['cr', 'cl'],\n offset: [-4, 0],\n },\n right: {\n points: ['cl', 'cr'],\n offset: [4, 0],\n },\n top: {\n points: ['bc', 'tc'],\n offset: [0, -4],\n },\n bottom: {\n points: ['tc', 'bc'],\n offset: [0, 4],\n },\n topLeft: {\n points: ['bl', 'tc'],\n offset: [-(horizontalArrowShift + arrowWidth), -4],\n },\n leftTop: {\n points: ['tr', 'cl'],\n offset: [-4, -(verticalArrowShift + arrowWidth)],\n },\n topRight: {\n points: ['br', 'tc'],\n offset: [horizontalArrowShift + arrowWidth, -4],\n },\n rightTop: {\n points: ['tl', 'cr'],\n offset: [4, -(verticalArrowShift + arrowWidth)],\n },\n bottomRight: {\n points: ['tr', 'bc'],\n offset: [horizontalArrowShift + arrowWidth, 4],\n },\n rightBottom: {\n points: ['bl', 'cr'],\n offset: [4, verticalArrowShift + arrowWidth],\n },\n bottomLeft: {\n points: ['tl', 'bc'],\n offset: [-(horizontalArrowShift + arrowWidth), 4],\n },\n leftBottom: {\n points: ['br', 'cl'],\n offset: [-4, verticalArrowShift + arrowWidth],\n },\n }\n Object.keys(placementMap).forEach(key => {\n placementMap[key] = config.arrowPointAtCenter\n ? {\n ...placementMap[key],\n overflow: getOverflowOptions(autoAdjustOverflow),\n targetOffset,\n }\n : {\n ...placements[key],\n overflow: getOverflowOptions(autoAdjustOverflow),\n }\n\n placementMap[key].ignoreShake = true\n })\n return placementMap\n}\n","import * as React from 'react'\nimport PropTypes from 'prop-types'\nimport RcTooltip from 'rc-tooltip'\nimport classNames from 'classnames'\nimport getPlacements from './Placements'\nimport './index.css'\n\nconst splitObject = (obj, keys) => {\n const picked = {}\n const omitted = {...obj}\n keys.forEach(key => {\n if (obj && key in obj) {\n picked[key] = obj[key]\n delete omitted[key]\n }\n })\n return {picked, omitted}\n}\n\n// Fix Tooltip won't hide at disabled button\n// mouse events don't trigger at disabled button in Chrome\n// https://github.com/react-component/tooltip/issues/18\nfunction getDisabledCompatibleChildren(element, prefixCls) {\n const elementType = element.type\n if (\n (elementType.__ANT_BUTTON === true ||\n elementType.__ANT_SWITCH === true ||\n elementType.__ANT_CHECKBOX === true ||\n element.type === 'button') &&\n element.props.disabled\n ) {\n // Pick some layout related style properties up to span\n // Prevent layout bugs like https://github.com/ant-design/ant-design/issues/5254\n const {picked, omitted} = splitObject(element.props.style, [\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'float',\n 'display',\n 'zIndex',\n ])\n const spanStyle = {\n display: 'inline-block', // default inline-block is important\n ...picked,\n cursor: 'not-allowed',\n width: element.props.block ? '100%' : null,\n }\n const buttonStyle = {\n ...omitted,\n pointerEvents: 'none',\n }\n const child = React.cloneElement(element, {\n style: buttonStyle,\n className: null,\n })\n return (\n \n {child}\n \n )\n }\n return element\n}\n\n\nconst useMergedState = (_state, { value, defaultValue }) => {\n const [state, setState] = React.useState(() => defaultValue ?? _state);\n\n return [value ?? state, setState];\n}\n\nconst Tooltip = React.forwardRef((props, ref) => {\n const [visible, setVisible] = useMergedState(false, {\n value: props.visible,\n defaultValue: props.defaultVisible,\n })\n\n const isNoContent = () => {\n const {content} = props\n return !content && content !== 0\n }\n\n const onVisibleChange = vis => {\n setVisible(isNoContent() ? false : vis)\n\n if (!isNoContent()) {\n props.onVisibleChange?.(vis)\n }\n }\n\n const getTooltipPlacements = () => {\n const {builtinPlacements, arrowPointAtCenter, autoAdjustOverflow} = props\n return (\n builtinPlacements ||\n getPlacements({\n arrowPointAtCenter,\n autoAdjustOverflow,\n })\n )\n }\n\n // 动态设置动画点\n const onPopupAlign = (domNode, align) => {\n const placements = getTooltipPlacements()\n // 当前返回的位置\n const placement = Object.keys(placements).filter(\n key =>\n placements[key].points[0] === align.points[0] &&\n placements[key].points[1] === align.points[1],\n )[0]\n if (!placement) {\n return\n }\n // 根据当前坐标设置动画点\n const rect = domNode.getBoundingClientRect()\n const transformOrigin = {\n top: '50%',\n left: '50%',\n }\n if (placement.indexOf('top') >= 0 || placement.indexOf('Bottom') >= 0) {\n transformOrigin.top = `${rect.height - align.offset[1]}px`\n } else if (\n placement.indexOf('Top') >= 0 ||\n placement.indexOf('bottom') >= 0\n ) {\n transformOrigin.top = `${-align.offset[1]}px`\n }\n if (placement.indexOf('left') >= 0 || placement.indexOf('Right') >= 0) {\n transformOrigin.left = `${rect.width - align.offset[0]}px`\n } else if (\n placement.indexOf('right') >= 0 ||\n placement.indexOf('Left') >= 0\n ) {\n transformOrigin.left = `${-align.offset[0]}px`\n }\n domNode.style.transformOrigin = `${transformOrigin.left} ${transformOrigin.top}`\n }\n\n const getOverlay = () => {\n const {content} = props\n if (content === 0) {\n return content\n }\n return content || ''\n }\n\n const {getPopupContainer, ...otherProps} = props\n\n const {\n openClassName,\n getTooltipContainer,\n overlayClassName,\n overlayInnerStyle,\n children,\n prefixCls: customPrefixCls,\n } = props\n const prefixCls = customPrefixCls || 'tooltip'\n\n let tempVisible = visible\n // Hide tooltip when there is no content\n if (!('visible' in props) && isNoContent()) {\n tempVisible = false\n }\n\n const child = getDisabledCompatibleChildren(\n typeof children !== 'string' ? children : {children},\n prefixCls,\n )\n const childProps = child.props\n const childCls = classNames(childProps.className, {\n [openClassName || `${prefixCls}-open`]: true,\n })\n\n const customOverlayClassName = overlayClassName\n\n let formattedOverlayInnerStyle = overlayInnerStyle\n let arrowContentStyle\n\n return (\n \n }\n motion={{\n motionName: 'zoom-big-fast',\n motionDeadline: 1000,\n }}\n >\n {tempVisible ? React.cloneElement(child, {className: childCls}) : child}\n \n )\n})\n\nTooltip.displayName = 'Tooltip'\n\nTooltip.propTypes = {\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n visible: PropTypes.bool,\n defaultVisible: PropTypes.bool,\n getPopupContainer: PropTypes.func,\n getTooltipContainer: PropTypes.func,\n onVisibleChange: PropTypes.func,\n openClassName: PropTypes.string,\n overlayClassName: PropTypes.string,\n overlayInnerStyle: PropTypes.object,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n builtinPlacements: PropTypes.string,\n arrowPointAtCenter: PropTypes.bool,\n autoAdjustOverflow: PropTypes.bool,\n prefixCls: PropTypes.string,\n}\n\nTooltip.defaultProps = {\n placement: 'top',\n mouseEnterDelay: 0.1,\n mouseLeaveDelay: 0.1,\n arrowPointAtCenter: false,\n autoAdjustOverflow: true,\n}\n\nexport default Tooltip\n","import * as React from 'react'\nimport PropTypes from 'prop-types'\nimport Tooltip from '../Tooltip'\nimport './index.css'\n\nconst Popover = React.forwardRef(\n ({prefixCls: customizePrefixCls, title, content, ...otherProps}, ref) => {\n const getOverlay = prefixCls => (\n <>\n {title &&
{title}
}\n
{content}
\n \n )\n\n const prefixCls = customizePrefixCls || 'popover'\n\n return (\n \n )\n },\n)\n\nPopover.displayName = 'Popover'\n\nPopover.propTypes = {\n prefixCls: PropTypes.string,\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n}\n\nPopover.defaultProps = {\n placement: 'top',\n trigger: 'hover',\n mouseEnterDelay: 0.1,\n mouseLeaveDelay: 0.1,\n overlayStyle: {},\n}\n\nexport default Popover\n","import PropTypes from 'prop-types'\n\nfunction Circle({\n color = 'bg-gray-80',\n size = 'w-1 h-1',\n className = '',\n containerClassName = '',\n}) {\n return (\n \n \n \n )\n}\n\nCircle.propTypes = {\n color: PropTypes.string,\n size: PropTypes.string,\n className: PropTypes.string,\n containerClassName: PropTypes.string,\n}\n\nexport default Circle\n","import {AbstractConnector} from '@web3-react/abstract-connector'\nimport invariant from 'tiny-invariant';\n\nclass RequestError extends Error {\n constructor(message) {\n super(message)\n }\n}\n\nclass MiniRpcProvider {\n constructor(chainId, url, batchWaitTimeMs) {\n this.nextId = 1\n this.chainId = chainId\n this.url = url\n const parsed = new URL(url)\n this.host = parsed.host\n this.path = parsed.pathname\n this.batchTimeoutId = null\n this.batch = []\n // how long to wait to batch calls\n this.batchWaitTimeMs = batchWaitTimeMs ?? 50\n }\n\n async clearBatch() {\n const batch = this.batch\n this.batch = []\n this.batchTimeoutId = null\n let response\n try {\n response = await fetch(this.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n accept: 'application/json',\n },\n body: JSON.stringify(batch.map(item => item.request)),\n })\n } catch (error) {\n batch &&\n batch.forEach(({reject}) =>\n reject(new Error('Failed to send batch call')),\n )\n return\n }\n\n if (!response.ok) {\n batch.forEach(({reject}) =>\n reject(\n new RequestError(\n `${response.status}: ${response.statusText}`,\n -32000,\n ),\n ),\n )\n return\n }\n\n let json\n try {\n json = await response.json()\n } catch (error) {\n batch.forEach(({reject}) =>\n reject(new Error('Failed to parse JSON response')),\n )\n return\n }\n const byKey = batch.reduce((memo, current) => {\n memo[current.request.id] = current\n return memo\n }, {})\n for (const result of json) {\n const {\n resolve,\n reject,\n request: {method},\n } = byKey[result.id]\n if (resolve && reject) {\n if ('error' in result) {\n reject(\n new RequestError(\n result?.error?.message,\n result?.error?.code,\n result?.error?.data,\n ),\n )\n } else if ('result' in result) {\n resolve(result.result)\n } else {\n reject(\n new RequestError(\n `Received unexpected JSON-RPC response to ${method} request.`,\n -32000,\n result,\n ),\n )\n }\n }\n }\n }\n\n sendAsync(request, callback) {\n this.request(request.method, request.params)\n .then(result => callback(null, {jsonrpc: '2.0', id: request.id, result}))\n .catch(error => callback(error, null))\n }\n\n async request(method, params) {\n if (typeof method !== 'string') {\n return this.request(method.method, method.params)\n }\n if (method === 'eth_chainId') {\n return `0x${this.chainId.toString(16)}`\n }\n const promise = new Promise((resolve, reject) => {\n this.batch.push({\n request: {\n jsonrpc: '2.0',\n id: this.nextId++,\n method,\n params,\n },\n resolve,\n reject,\n })\n })\n this.batchTimeoutId =\n this.batchTimeoutId ?? setTimeout(this.clearBatch, this.batchWaitTimeMs)\n return promise\n }\n}\n\nexport class NetworkConnector extends AbstractConnector {\n constructor({urls, defaultChainId}) {\n invariant(\n defaultChainId || Object.keys(urls).length === 1,\n 'defaultChainId is a required argument with >1 url',\n )\n super({supportedChainIds: Object.keys(urls).map(k => Number(k))})\n\n this.currentChainId = defaultChainId || Number(Object.keys(urls)[0])\n this.providers = Object.keys(urls).reduce((accumulator, chainId) => {\n accumulator[Number(chainId)] = new MiniRpcProvider(\n Number(chainId),\n urls[Number(chainId)],\n )\n return accumulator\n }, {})\n }\n\n get provider() {\n return this.providers[this.currentChainId]\n }\n\n async activate() {\n return {\n provider: this.providers[this.currentChainId],\n chainId: this.currentChainId,\n account: null,\n }\n }\n\n async getProvider() {\n return this.providers[this.currentChainId]\n }\n\n async getChainId() {\n return this.currentChainId\n }\n\n async getAccount() {\n return null\n }\n\n deactivate() {\n return\n }\n}\n","import {Web3Provider} from '@ethersproject/providers'\nimport {Contract} from '@ethersproject/contracts'\nimport {AddressZero} from '@ethersproject/constants'\nimport {getAddress} from '@ethersproject/address'\nimport {InjectedConnector} from '@web3-react/injected-connector'\nimport {NetworkConnector} from './NetworkConnector'\nimport {SupportedChainIdsWeb3} from '../constants/chainConfig'\n\nconst NETWORK_URL = process.env.REACT_APP_NETWORK_URL\n\nexport const NETWORK_CHAIN_ID = parseInt(process.env.REACT_APP_CHAIN_ID ?? '1')\n\nif (typeof NETWORK_URL === 'undefined') {\n throw new Error(\n `REACT_APP_NETWORK_URL must be a defined environment variable`,\n )\n}\n\nexport const network = new NetworkConnector({\n urls: {[NETWORK_CHAIN_ID]: NETWORK_URL},\n})\n\nlet networkLibrary\nexport function getNetworkLibrary() {\n return (networkLibrary = networkLibrary ?? new Web3Provider(network.provider))\n}\n\nexport const injected = new InjectedConnector({\n supportedChainIds: SupportedChainIdsWeb3,\n})\n\nexport function isAddress(value) {\n try {\n return getAddress(value)\n } catch {\n return false\n }\n}\n\n// account is not optional\nexport function getSigner(library, account) {\n return library.getSigner(account).connectUnchecked()\n}\n\n// account is optional\nexport function getProviderOrSigner(library, account) {\n return account ? getSigner(library, account) : library\n}\n\n// account is optional\nexport function getContract(address, ABI, library, account) {\n if (!isAddress(address) || address === AddressZero) {\n throw Error(`Invalid 'address' parameter '${address}'.`)\n }\n\n return new Contract(address, ABI, getProviderOrSigner(library, account))\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n/**\n * For the chain based on Ethereum: multiple connectors\n * But only support MetaMask now\n */\nimport {useEffect, useState, useMemo} from 'react'\nimport {useWeb3React, UnsupportedChainIdError} from '@web3-react/core'\nimport {useChainId, useAccount} from '@cfxjs/use-wallet/dist/ethereum'\nimport {isMobile} from 'react-device-detect'\nimport Big from 'big.js'\nimport {\n NetworkContextName,\n IntervalTime,\n BigNumZero,\n TypeConnectWallet,\n} from '../constants'\nimport {injected, getContract} from '../utils/web3'\nimport {checkHexAddress} from '../utils/address'\nimport {ERC20_ABI} from '../abi'\n\n/**\n * doc: https://github.com/NoahZinsmeister/web3-react/tree/v6/docs#useweb3react\n * @returns context object\n * object details:\n activate: (\n connector: AbstractConnectorInterface,\n onError?: (error: Error) => void,\n throwErrors?: boolean\n ) => Promise\n setError: (error: Error) => void\n deactivate: () => void\n\n connector?: AbstractConnectorInterface\n library?: T\n chainId?: number\n account?: null | string\n\n active: boolean\n error?: Error\n */\nexport function useActiveWeb3React() {\n const context = useWeb3React()\n const contextNetwork = useWeb3React(NetworkContextName)\n return context.active ? context : contextNetwork\n}\n\n/**\n * Use for network and injected - logs user in\n * and out after checking what network theyre on\n */\nexport function useInactiveListener(suppress = false) {\n const {active, error, activate} = useWeb3React() // specifically using useWeb3React because of what this hook does\n\n useEffect(() => {\n const {ethereum} = window\n\n if (ethereum && ethereum.on && !active && !error && !suppress) {\n const handleChainChanged = () => {\n // eat errors\n activate(injected, undefined, true).catch(error => {\n console.error('Failed to activate after chain changed', error)\n })\n }\n\n const handleAccountsChanged = accounts => {\n if (accounts.length > 0) {\n // eat errors\n activate(injected, undefined, true).catch(error => {\n console.error('Failed to activate after accounts changed', error)\n })\n }\n }\n\n ethereum.on('chainChanged', handleChainChanged)\n ethereum.on('accountsChanged', handleAccountsChanged)\n\n return () => {\n if (ethereum.removeListener) {\n ethereum.removeListener('chainChanged', handleChainChanged)\n ethereum.removeListener('accountsChanged', handleAccountsChanged)\n }\n }\n }\n return undefined\n }, [active, Boolean(error), suppress, activate])\n}\n\nexport function useEagerConnect() {\n const {activate, active} = useWeb3React() // specifically using useWeb3React because of what this hook does\n const [tried, setTried] = useState(false)\n\n useEffect(() => {\n injected.isAuthorized().then(isAuthorized => {\n if (isAuthorized) {\n activate(injected, undefined, true).catch(() => {\n setTried(true)\n })\n } else {\n if (window.ethereum && isMobile) {\n activate(injected, undefined, true).catch(() => {\n setTried(true)\n })\n } else {\n setTried(true)\n }\n }\n })\n }, [activate]) // intentionally only running on mount (make sure it's only mounted once :))\n\n // if the connection worked, wait until we get confirmation of that to flip the flag\n useEffect(() => {\n if (active) {\n setTried(true)\n }\n }, [active])\n\n return tried\n}\n\nexport function useInstalled() {\n const isInstalled = window?.ethereum\n return isInstalled\n}\n\nexport function useAddress() {\n const {account} = useWeb3React()\n return account\n}\n\nexport function useConnect() {\n const {error, activate} = useWeb3React()\n const account = useAccount()\n const chainId = useChainId();\n \n const isInstalled = useInstalled()\n const [type, setType] = useState(\n isInstalled ? TypeConnectWallet.success : TypeConnectWallet.uninstalled,\n )\n\n const tryActivate = () => {\n if (isInstalled) {\n setType(TypeConnectWallet.loading)\n if (!account) {\n activate(injected, undefined, true).catch(error => {\n if (error instanceof UnsupportedChainIdError) {\n activate(injected)\n } else {\n setType(TypeConnectWallet.error)\n }\n })\n }\n }\n }\n return {type, tryActivate, error, address: account, chainId}\n}\n\n/**\n * Get the balance of Native Token, etc: the ETH token on the Ethereum chain\n * doc: https://github.com/streamich/react-use/blob/master/docs/useInterval.md\n * @param {*} address token address\n * @param {*} delay interval delay milliseconds\n * @returns the balance\n */\nexport function useNativeTokenBalance(\n address,\n delay = IntervalTime.fetchBalance,\n) {\n const [balance, setBalance] = useState(null)\n const {account, library} = useWeb3React()\n\n useEffect(() => {\n const getBalance = () => {\n library &&\n library\n .getBalance(address)\n .then(newBalance => {\n if (!balance || !balance.eq(newBalance)) {\n setBalance(new Big(newBalance.toString(10)))\n }\n })\n .catch(() => {\n setBalance(BigNumZero)\n })\n }\n getBalance()\n if (delay && account) {\n const timeInterval = setInterval(() => getBalance(), delay)\n return () => clearInterval(timeInterval)\n }\n }, [delay, Boolean(account), address])\n return balance\n}\n\n// returns null when has error\nexport function useContract(address, ABI, withSignerIfPossible = true) {\n const {library, account} = useActiveWeb3React()\n return useMemo(() => {\n if (!address || !ABI || !library || !checkHexAddress(address)) return null\n try {\n return getContract(\n address,\n ABI,\n library,\n withSignerIfPossible && account ? account : undefined,\n )\n } catch (error) {\n return null\n }\n }, [address, Boolean(library), withSignerIfPossible, account])\n}\n\nexport function useTokenContract(tokenAddress, withSignerIfPossible = true) {\n return useContract(tokenAddress, ERC20_ABI, withSignerIfPossible)\n}\n\n/**\n * call some method from contract and get the value\n * @param {*} contract\n * @param {*} method\n * @param {*} params\n * @returns\n */\nexport function useContractState(tokenAddress, method, params, interval) {\n const contract = useTokenContract(tokenAddress)\n const [data, setData] = useState(null)\n\n useEffect(() => {\n const getContractData = async params => {\n try {\n const res = await contract?.[method](...params)\n setData(res)\n } catch (error) {\n setData(null)\n }\n }\n\n if (interval) {\n getContractData(params)\n const timeInterval = setInterval(() => getContractData(params), interval)\n return () => clearInterval(timeInterval)\n } else {\n getContractData(params)\n }\n }, [...params, interval, Boolean(contract)])\n\n return data\n}\n\nexport function useTokenBalance(tokenAddress, params) {\n const balance = useContractState(\n tokenAddress,\n 'balanceOf',\n params,\n IntervalTime.fetchBalance,\n )\n return balance ? new Big(balance) : null\n}\n\nexport function useBalance(address, tokenAddress) {\n const tokenBalance = useTokenBalance(tokenAddress, [address])\n const nativeTokenBalance = useNativeTokenBalance(address)\n const isNativeToken = !checkHexAddress(tokenAddress)\n return isNativeToken ? nativeTokenBalance : tokenBalance\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n/**\n * For the chain based on Ethereum: add one token to MetaMask quickly\n */\nimport {useCallback, useState} from 'react'\nimport {useActiveWeb3React} from './useWeb3Network'\n\nexport default function useAddTokenToMetamask(token, outerLibrary) {\n const {library: innerLibrary} = useActiveWeb3React()\n const library = innerLibrary || outerLibrary\n const [success, setSuccess] = useState()\n\n const addToken = useCallback(() => {\n if (\n library &&\n library.provider.isMetaMask &&\n library.provider.request &&\n token\n ) {\n const {address, display_symbol, decimals, icon} = token\n library.provider\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address,\n symbol: display_symbol,\n decimals,\n image: icon,\n },\n },\n })\n .then(success => {\n setSuccess(success)\n })\n .catch(() => setSuccess(false))\n } else {\n setSuccess(false)\n }\n }, [\n Boolean(library),\n Boolean(library.provider.isMetaMask),\n Boolean(library.provider.request),\n token.address,\n ])\n\n return {addToken, success}\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useMemo, useState, useCallback, useEffect} from 'react'\nimport {connect, useStatus, useChainId, useAccount, useBalance as useFluentBalance } from '@cfxjs/use-wallet'\nimport { useTrackERC20Balance } from '@cfxjs/use-wallet-enhance';\nimport {ERC20_ABI} from '../abi'\nimport {KeyOfCfx} from '../constants/chainConfig'\nimport {TypeConnectWallet} from '../constants'\nimport {getChainIdRight} from '../utils'\nimport {checkCfxTokenAddress} from '../utils/address'\n\nfunction useChainNetId() {\n const chainId = useChainId()\n return {chainId}\n}\n\nexport function useConnect() {\n const status = useStatus()\n const address = useAccount()\n const [error, setError] = useState(null)\n const {chainId} = useChainNetId()\n const type = useMemo(() => {\n if (status === 'not-active') return TypeConnectWallet.error\n if (status === 'active') return TypeConnectWallet.success\n if (status === 'not-installed') return TypeConnectWallet.uninstalled\n if (status === 'in-activating') return TypeConnectWallet.loading\n return TypeConnectWallet.loading\n }, [status])\n\n if (window && window.conflux && window.conflux.autoRefreshOnNetworkChange)\n window.conflux.autoRefreshOnNetworkChange = false\n\n const login = useCallback(() => {\n const p = connect()\n p.catch(err => {\n setError(err)\n if (err.code === 4001) {\n // EIP-1193 userRejectedRequest error\n // If this happens, the user rejected the connection request.\n console.error('Please connect to ConfluxPortal.')\n } else {\n console.error(err)\n }\n })\n return p\n }, [])\n\n return {\n type,\n tryActivate: login,\n error,\n address,\n chainId,\n }\n}\n\nexport function useContract(address, ABI) {\n const confluxJS = window?.confluxJS\n const {chainId} = useConnect(KeyOfCfx)\n const isChainIdRight =\n getChainIdRight(KeyOfCfx, chainId, address, 'contract') || !address\n return useMemo(\n () => {\n if (!ABI || !confluxJS || !isChainIdRight) return null\n try {\n return confluxJS.Contract({abi: ABI, address})\n } catch (error) {\n return null\n }\n },\n [address, Boolean(confluxJS)],\n isChainIdRight,\n )\n}\n\nexport function useTokenContract(tokenAddress) {\n return useContract(tokenAddress || '', ERC20_ABI)\n}\n\n/**\n * get CFX balance from Conflux Network\n * @returns balance of account\n */\n// eslint-disable-next-line no-unused-vars\nexport function useNativeTokenBalance(_) {\n const balance = useFluentBalance();\n return balance ? balance.toDecimalMinUnit() : null;\n}\n\nexport function useTokenBalance(tokenAddress) {\n // eslint-disable-next-line no-unused-vars\n const balance = useTrackERC20Balance(tokenAddress);\n return balance ? balance.toDecimalMinUnit() : null;\n}\n\nexport function useBalance(address, tokenAddress) {\n const isNativeToken = !checkCfxTokenAddress(tokenAddress, 'contract')\n const tokenBalance = useTokenBalance(tokenAddress)\n const nativeTokenBalance = useNativeTokenBalance(address)\n return isNativeToken ? nativeTokenBalance : tokenBalance\n}\n\n\n/**\n * call some method from contract and get the value\n * @param {*} contract\n * @param {*} method\n * @param {*} params\n * @returns\n */\nexport function useContractState(tokenAddress, method, params, interval) {\n const contract = useTokenContract(tokenAddress)\n const [data, setData] = useState(null)\n\n useEffect(() => {\n const getContractData = async params => {\n try {\n const res = await contract?.[method](...params)\n setData(res)\n } catch (error) {\n setData(null)\n }\n }\n\n if (interval) {\n getContractData(params)\n const timeInterval = setInterval(() => getContractData(params), interval)\n return () => clearInterval(timeInterval)\n } else {\n getContractData(params)\n }\n }, [...params, interval, Boolean(contract)])\n\n return data\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useMemo} from 'react'\nimport {UnsupportedChainIdError} from '@web3-react/core'\nimport {ChainConfig, KeyOfMetaMask, KeyOfPortal} from '../constants/chainConfig'\nimport {\n useConnect as useConnectPortal,\n useBalance as useBalancePortal,\n useContractState as useContractStatePortal,\n} from './usePortal'\nimport {\n useConnect as useConnectWeb3,\n useBalance as useBalanceWeb3,\n useContractState as useContractStateWeb3,\n} from './useWeb3Network'\nimport {TypeAccountStatus} from '../constants'\nimport {BigNumZero} from '../constants'\n\nexport function useWallet(chain) {\n const connectObjPortal = useConnectPortal()\n const connectObjWeb3 = useConnectWeb3()\n let data = {}\n switch (ChainConfig[chain]?.wallet) {\n case KeyOfMetaMask:\n data = connectObjWeb3\n break\n case KeyOfPortal:\n data = connectObjPortal\n break\n }\n return data\n}\n\n/**\n * get balance of native token(for example:eth) or token balance(for example:usdt)\n * @param {*} chain\n * @param {*} address\n * @param {*} tokenAddress\n * @param {*} params\n * @returns\n */\nexport function useBalance(chain, address, tokenAddress) {\n const balancePortal = useBalancePortal(address, tokenAddress)\n const balanceWeb3 = useBalanceWeb3(address, tokenAddress)\n if (!chain || !address) return null\n switch (ChainConfig[chain]?.wallet) {\n case KeyOfMetaMask:\n return balanceWeb3\n case KeyOfPortal:\n return balancePortal\n default:\n return null\n }\n}\n\n/**\n * whether this address is native token in this chain\n * @param {*} chain\n * @param {*} address\n * @returns\n */\nexport function useIsNativeToken(chain, tokenAddress) {\n return useMemo(\n () => ChainConfig[chain]?.tokenName?.toLowerCase() === tokenAddress,\n [chain, tokenAddress],\n )\n}\n\nexport function useAccountStatus(chain, address, error, isChainIdRight) {\n return useMemo(() => {\n const wallet = ChainConfig[chain]?.wallet\n if (wallet) {\n if (address) {\n if (isChainIdRight) {\n return {type: TypeAccountStatus.success}\n }\n //error:wrong network\n return {type: TypeAccountStatus.error, errorType: 2}\n } else {\n if (error && error.code !== 4001) {\n if (error instanceof UnsupportedChainIdError) {\n //error:wrong network\n return {type: TypeAccountStatus.error, errorType: 2}\n }\n //other error\n return {type: TypeAccountStatus.error, errorType: 1}\n }\n return {type: TypeAccountStatus.unconnected}\n }\n } else {\n //it means that this chain do not require the wallet, for example: btc\n return {type: TypeAccountStatus.success}\n }\n }, [Boolean(address), chain, Boolean(error), isChainIdRight])\n}\n\n/**\n * call some method from contract and get the value\n * @param {*} contract\n * @param {*} method\n * @param {*} params\n * @returns\n */\nexport function useContractState(\n chain,\n tokenAddress,\n method,\n params,\n interval,\n) {\n const contractDataPortal = useContractStatePortal(\n tokenAddress,\n method,\n params,\n interval,\n )\n const contractDataWeb3 = useContractStateWeb3(\n tokenAddress,\n method,\n params,\n interval,\n )\n let contractData = {}\n switch (ChainConfig[chain]?.wallet) {\n case KeyOfMetaMask:\n contractData = contractDataWeb3\n break\n case KeyOfPortal:\n contractData = contractDataPortal\n break\n }\n return contractData\n}\n\nexport function useTokenAllowance(chain, tokenAddress, params) {\n const allowance = useContractState(\n chain,\n tokenAddress,\n 'allowance',\n params,\n 2000,\n )\n return allowance || BigNumZero\n}\n","import PropTypes from 'prop-types'\nimport {useTranslation, Trans} from 'react-i18next'\nimport {formatAmount} from '@cfxjs/data-format'\nimport {Modal, Loading, Button, Link} from '../../../components'\nimport {\n SupportedChains,\n ChainConfig,\n WalletConfig,\n KeyOfMetaMask,\n} from '../../../constants/chainConfig'\nimport {ErrorOutlined, SuccessOutlined, MetamaskLogo} from '../../../assets/svg'\nimport useAddTokenToMetamask from '../../../hooks/useAddTokenToMetamask'\nimport {useIsNativeToken} from '../../../hooks/useWallet'\nimport {TxReceiptModalType} from '../../../constants'\n\nfunction TransactionReceiptionModal({\n open,\n type,\n toChain,\n fromChain,\n value,\n fromToken,\n toToken,\n txHash,\n onClose,\n isClaim = false,\n library,\n}) {\n const {t} = useTranslation()\n const {addToken} = useAddTokenToMetamask(toToken, library)\n const isNativeToken = useIsNativeToken(toChain, toToken?.address)\n let content\n const onAddToken = () => {\n addToken()\n }\n if (type === 'ongoing') {\n const tokenSymbol = fromToken && fromToken.display_symbol\n const chain = ChainConfig[toChain].fullName\n content = (\n
\n {!isClaim && (\n \n \n \n )}\n
\n {t('confirm', {\n wallet:\n WalletConfig[ChainConfig[isClaim ? toChain : fromChain].wallet]\n .name,\n })}\n
\n
\n )\n return (\n }\n title={t('waiting')}\n content={content}\n className=\"!pb-0 !px-0\"\n onClose={onClose}\n />\n )\n } else if (type === 'success') {\n content = (\n
\n \n {t('viewOnScan')}\n \n {ChainConfig[toChain].wallet === KeyOfMetaMask && !isNativeToken && (\n }\n // TODO: deal with metamask is not installed\n onClick={onAddToken}\n >\n {t('addTokenToMetaMask', {\n tokenSymbol: toToken && toToken.display_symbol,\n })}\n \n )}\n
\n )\n return (\n }\n content={content}\n onClose={onClose}\n />\n )\n } else if (type === 'error') {\n content = (\n
\n {t('rejected')}\n
\n )\n return (\n }\n content={content}\n onClose={onClose}\n />\n )\n }\n}\n\nTransactionReceiptionModal.propTypes = {\n open: PropTypes.bool,\n type: PropTypes.oneOf(Object.values(TxReceiptModalType)).isRequired,\n toChain: PropTypes.oneOf(SupportedChains),\n fromChain: PropTypes.oneOf(SupportedChains),\n value: PropTypes.string,\n fromToken: PropTypes.object,\n toToken: PropTypes.object,\n txHash: PropTypes.string,\n isClaim: PropTypes.bool,\n library: PropTypes.object,\n onClose: PropTypes.func,\n}\n\nexport default TransactionReceiptionModal\n","import PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\n\nimport {Modal, Loading, Button} from '../../../components'\nimport {\n ChainConfig,\n SupportedChains,\n WalletConfig,\n} from '../../../constants/chainConfig'\nimport {TypeConnectWallet} from '../../../constants'\nimport {ErrorOutlined} from '../../../assets/svg'\n\nfunction ConnectWalletModal({open = false, type, chain, onClose, tryActivate}) {\n const {t} = useTranslation()\n const walletConfig = WalletConfig[ChainConfig[chain].wallet]\n const walletName = walletConfig.name\n const onInstall = () => {\n window.open(walletConfig.website)\n }\n const onTry = () => {\n tryActivate()\n }\n let content\n if (type === TypeConnectWallet.uninstalled) {\n content = (\n
\n
\n {t('installWallet', {walletName})}\n
\n
\n
{t('installTipOne', {walletName})}
\n
{t('installTipTwo')}
\n
\n
\n )\n return (\n \n {t('installWallet', {walletName})}\n \n }\n />\n )\n } else if (type === TypeConnectWallet.loading) {\n content = (\n
\n \n
\n {t('connectWallet')}\n
\n
\n {t('loginAndAuth', {walletName})}\n
\n
\n )\n return \n } else if (type === TypeConnectWallet.error) {\n content = (\n
\n \n
\n {t('errorConnecting')}\n
\n
\n {t('loginAndAuth', {walletName})}\n
\n
\n )\n return (\n \n {t('tryAgain')}\n \n }\n />\n )\n }\n return null\n}\n\nConnectWalletModal.propTypes = {\n open: PropTypes.bool,\n type: PropTypes.oneOf(Object.values(TypeConnectWallet)).isRequired,\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n onClose: PropTypes.func,\n tryActivate: PropTypes.func,\n}\n\nexport default ConnectWalletModal\n","import {useState} from 'react'\nimport PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\nimport {\n ChainConfig,\n WalletConfig,\n SupportedChains,\n} from '../../../constants/chainConfig'\nimport {ConnectWalletModal} from '../../components'\nimport {Button, Tag} from '../../../components'\nimport {TypeConnectWallet} from '../../../constants'\n\nfunction ConnectWallet({\n size = 'medium',\n chain,\n className = '',\n type,\n tryActivate,\n ...props\n}) {\n const {t} = useTranslation()\n const [open, setOpen] = useState(false)\n const walletConfig = WalletConfig[ChainConfig[chain]?.wallet]\n const walletIcon = walletConfig?.icon(`${className} !w-3 !h-3`)\n const onConnect = () => {\n setOpen(true)\n tryActivate()\n }\n\n const onClose = () => {\n setOpen(false)\n }\n if (!walletConfig) return null\n return (\n <>\n {size === 'medium' && (\n \n {t('connect')}\n \n )}\n {size === 'large' && (\n \n {`${t('connect')} ${walletConfig?.name}`}\n \n )}\n {open && (\n \n )}\n \n )\n}\nConnectWallet.propTypes = {\n size: PropTypes.oneOf(['medium', 'large']).isRequired,\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n className: PropTypes.string,\n type: PropTypes.oneOf(Object.values(TypeConnectWallet)).isRequired,\n tryActivate: PropTypes.func,\n}\n\nexport default ConnectWallet\n","import {useWindowSize} from 'react-use'\nimport {useMemo} from 'react'\nimport {KeyOfCfx, KeyOfBtc, KeyOfEth} from '../constants/chainConfig'\nimport {MobileBreakpoint} from '../constants'\nimport {useWallet} from '../hooks/useWallet'\n\nexport function useIsCfxChain(chain) {\n const isCfxChain = useMemo(() => chain === KeyOfCfx, [chain])\n return isCfxChain\n}\n\nexport function useIsBtcChain(chain) {\n const isBtcChain = useMemo(() => chain === KeyOfBtc, [chain])\n return isBtcChain\n}\n\nexport function useIsMobile() {\n const {width} = useWindowSize()\n if (width < MobileBreakpoint) return true\n return false\n}\n\nexport function useConnectData() {\n const {address: cfxAddress} = useWallet(KeyOfCfx)\n const {address: ethAddress} = useWallet(KeyOfEth)\n const connectData = useMemo(\n () => [\n {address: ethAddress, chain: KeyOfEth},\n {address: cfxAddress, chain: KeyOfCfx},\n ],\n [cfxAddress, ethAddress],\n )\n\n return connectData\n}\n","import create from 'zustand'\n\nlet Store = null\n\nconst createStore = () =>\n create(set => ({\n toBtcAddress: '',\n fromBtcAddress: '',\n tokenFromBackend: {},\n error: null,\n txClaimModalShown: false,\n setFromBtcAddress: fromBtcAddress => set({fromBtcAddress}),\n setToBtcAddress: toBtcAddress => set({toBtcAddress}),\n setTokenFromBackend: tokenFromBackend => set({tokenFromBackend}),\n setError: error => set({error}),\n setTxClaimModalShown: txClaimModalShown => set({txClaimModalShown}),\n }))\n\nexport const useShuttleState = () => {\n if (!Store) Store = createStore()\n const useStore = Store\n const state = useStore()\n\n return state\n}\n","import {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {\n SupportedChains,\n WalletIcon,\n ChainConfig,\n} from '../../../constants/chainConfig'\nimport {shortenAddress} from '../../../utils/address'\nimport {useIsBtcChain} from '../../../hooks'\nimport {useShuttleState} from '../../../state'\n\nfunction Account({\n chain,\n className,\n iconClassName,\n showIcon = true,\n address,\n size = 'medium',\n ...props\n}) {\n const walletKey = ChainConfig[chain]?.wallet\n const isBtcChain = useIsBtcChain(chain)\n const {toBtcAddress} = useShuttleState()\n\n const iconStyle = useMemo(() => {\n if (size === 'medium') return 'w-4 h-4'\n if (size === 'large') return 'w-5 h-5'\n }, [size])\n\n const accountCompStyle = useMemo(() => {\n if (size === 'medium') return 'text-xs'\n if (size === 'large') return 'text-sm'\n }, [size])\n\n return (\n \n {showIcon && !isBtcChain && (\n \n )}\n {!isBtcChain && address && shortenAddress(chain, address)}\n {isBtcChain && toBtcAddress && shortenAddress(chain, toBtcAddress)}\n \n )\n}\n\nAccount.propTypes = {\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n className: PropTypes.string,\n iconClassName: PropTypes.string,\n showIcon: PropTypes.bool,\n address: PropTypes.string,\n size: PropTypes.oneOf(['medium', 'large']),\n}\nexport default Account\n","import PropTypes from 'prop-types'\nimport {SupportedChains} from '../../../constants/chainConfig'\nimport {useWallet, useAccountStatus} from '../../../hooks/useWallet'\nimport {Account, ConnectWallet, AccountError} from '../../components'\nimport {TypeAccountStatus} from '../../../constants'\nimport {getChainIdRight} from '../../../utils'\n\nfunction AccountStatus({chain, size = 'medium', className = '', id, onClose}) {\n const {address, error, chainId, type, tryActivate} = useWallet(chain)\n const isChainIdRight = getChainIdRight(chain, chainId, address)\n const {type: accountType, errorType} = useAccountStatus(\n chain,\n address,\n error,\n isChainIdRight,\n )\n\n return (\n
\n {accountType === TypeAccountStatus.success && (\n \n )}\n {accountType === TypeAccountStatus.unconnected && (\n \n )}\n {accountType === TypeAccountStatus.error && (\n \n )}\n
\n )\n}\n\nAccountStatus.propTypes = {\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n size: PropTypes.oneOf(['medium', 'large']),\n className: PropTypes.string,\n id: PropTypes.string,\n onClose: PropTypes.func,\n}\nexport default AccountStatus\n","import PropTypes from 'prop-types'\nimport {\n SupportedChains,\n WalletIcon,\n ChainConfig,\n} from '../../../constants/chainConfig'\nimport {shortenAddress} from '../../../utils/address'\nimport {useWallet, useAccountStatus} from '../../../hooks/useWallet'\nimport {getChainIdRight} from '../../../utils'\nimport {TypeAccountStatus} from '../../../constants'\nimport {ConnectWallet} from '../../components'\n\nfunction HeaderAccount({\n chain,\n className,\n iconClassName,\n showIcon = true,\n id,\n ...props\n}) {\n const walletKey = ChainConfig[chain].wallet\n const {address, error, chainId, type, tryActivate} = useWallet(chain)\n const isChainIdRight = getChainIdRight(chain, chainId, address)\n const {type: accountType} = useAccountStatus(\n chain,\n address,\n error,\n isChainIdRight,\n )\n\n return (\n
\n {showIcon && accountType !== TypeAccountStatus.unconnected && (\n \n )}\n {address && shortenAddress(chain, address, 'user', false)}\n {accountType === TypeAccountStatus.unconnected && (\n \n )}\n
\n )\n}\n\nHeaderAccount.propTypes = {\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n className: PropTypes.string,\n iconClassName: PropTypes.string,\n showIcon: PropTypes.bool,\n id: PropTypes.string,\n}\nexport default HeaderAccount\n","import {useEffect} from 'react'\nimport {useWeb3React} from '@web3-react/core'\n\n// import { injected } from '../../../utils/web3s'\nimport {\n useEagerConnect,\n useInactiveListener,\n} from '../../../hooks/useWeb3Network'\nimport {NetworkContextName} from '../../../constants'\nimport {network} from '../../../utils/web3'\n\n// eslint-disable-next-line react/prop-types\nexport default function Web3ReactManager({children}) {\n const {active} = useWeb3React()\n const {\n active: networkActive,\n error: networkError,\n activate: activateNetwork,\n } = useWeb3React(NetworkContextName)\n\n // try to eagerly connect to an injected provider, if it exists and has granted access already\n const triedEager = useEagerConnect()\n\n // after eagerly trying injected, if the network connect ever isn't active or in an error state, activate itd\n useEffect(() => {\n if (triedEager && !networkActive && !networkError && !active) {\n activateNetwork(network)\n }\n }, [triedEager, networkActive, networkError, activateNetwork, active])\n\n // when there's no account connected, react to logins (broadly speaking) on the injected provider, if it exists\n useInactiveListener(!triedEager)\n\n // handle delayed loader state\n // const [showLoader, setShowLoader] = useState(false)\n // useEffect(() => {\n // const timeout = setTimeout(() => {\n // setShowLoader(true)\n // }, 600)\n\n // return () => {\n // clearTimeout(timeout)\n // }\n // }, [])\n\n // on page load, do nothing until we've tried to connect to the injected connector\n if (!triedEager) {\n return null\n }\n\n // if the account context isn't active, and there's an error on the network context, it's an irrecoverable error\n //TODO:\n if (!active && networkError) {\n return null\n }\n\n // if neither context is active, spin\n //TODO:\n if (!active && !networkActive) {\n return null\n }\n\n return children\n}\n","import PropTypes from 'prop-types'\nimport {SupportedChains, ChainConfig} from '../../../constants/chainConfig'\n\nfunction ChainItem({chain, className = '', iconSize = ''}) {\n const chainConfig = ChainConfig[chain]\n const getIcon = () => {\n return chainConfig?.icon(iconSize)\n }\n return (\n
\n {getIcon()}\n \n {chainConfig.shortName}\n \n
\n )\n}\n\nChainItem.propTypes = {\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n className: PropTypes.string,\n iconSize: PropTypes.string,\n}\n\nexport default ChainItem\n","import useDarkMode from 'use-dark-mode'\n\nexport default function useTheme() {\n let initTheme = 'light'\n if (\n localStorage.darkMode === 'dark' ||\n (!('darkMode' in localStorage) &&\n window.matchMedia('(prefers-color-scheme: dark)').matches)\n ) {\n initTheme = 'dark'\n }\n\n const darkMode = useDarkMode(initTheme, {\n classNameDark: 'dark',\n classNameLight: 'light',\n storageKey: 'darkMode',\n })\n return darkMode\n}\n","import PropTypes from 'prop-types'\nimport {NavLink} from 'react-router-dom'\nimport {useLocation} from 'react-use'\nimport {useTranslation} from 'react-i18next'\nimport {Logo, DarkLogo, MobileLogo, DarkMobileLogo} from '../../../assets/svg'\nimport {useIsMobile} from '../../../hooks'\nimport useTheme from '../../../hooks/useTheme'\nimport {WalletHub, LanguageButton, ThemeButton} from '../../components'\nimport './header.css'\nfunction Header() {\n const {t, i18n} = useTranslation()\n const {language} = i18n\n const {pathname} = useLocation()\n // const fromChain = useSearchParam('fromChain')\n // const toChain = useSearchParam('toChain')\n // const fromTokenAddress = useSearchParam('fromTokenAddress')\n const isMobile = useIsMobile()\n const {value: isDarkMode} = useTheme()\n\n if (pathname === '/maintenance' || pathname === '/notfound') {\n return null\n }\n if (pathname === '/') {\n return (\n
\n {!isMobile ? : }\n \n
\n )\n }\n return (\n
\n
\n {!isMobile &&\n (!isDarkMode ? (\n \n ) : (\n \n ))}\n {isMobile && (!isDarkMode ? : )}\n {/* \n {t('app')}\n */}\n
\n {!isMobile && (\n
\n \n {t('tutorial')}\n \n \n \n \n
\n )}\n
\n )\n}\n\nfunction HeaderLink({to, children, disabled = false, ...props}) {\n const getStyle = () => {\n if (disabled) return 'text-gray-40'\n return 'text-gray-60'\n }\n return (\n \n {children}\n \n )\n}\n\nHeaderLink.propTypes = {\n to: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n disabled: PropTypes.bool,\n}\n\nexport default Header\n","const timeout = 6000\nimport {ProxyUrlPrefix} from '../constants'\n\n/**\n * request the remote api\n * @param {*} url\n * @param {*} method rpc method\n * @param {*} params body params\n * @returns\n */\nexport default function jsonRpc(url, method, params) {\n const data = {id: 1, jsonrpc: '2.0', method, params}\n return fetch(url, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n mode: 'cors', // no-cors, *cors, same-origin\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data), // body data type must match \"Content-Type\" header\n timeout,\n })\n .then(response => {\n if (!response.ok) {\n const error = new Error('An error occurred while fetching the data.')\n error.info = response.json()\n error.status = response.status\n throw error\n }\n return response.json()\n })\n .then(data => {\n return data.result\n })\n .catch(() => {})\n}\n\n/**\n * request the remote url based on the 'shuttleflow' prefix\n * @returns\n */\nexport function requestSf(method, params) {\n return jsonRpc(ProxyUrlPrefix.shuttleflow, method, params)\n}\n\n/**\n * request the remote url based on the 'sponsor' prefix\n * @returns\n */\nexport function requestSponsor(method, params) {\n return jsonRpc(ProxyUrlPrefix.sponsor, method, params)\n}\n","import jsonRpc from './request'\nimport {ZeroAddrHex} from '../constants'\n\nexport const RPC_Method = {\n getTokenList: 'getTokenList',\n searchToken: 'searchToken',\n getUserWallet: 'getUserWallet',\n getUserOperationByHash: 'getUserOperationByHash',\n getUserOperationList: 'getUserOperationList',\n}\n\nexport function requestAllTokenList(url) {\n return jsonRpc(url, RPC_Method.getTokenList, [])\n}\n\nexport function requestToken(url, fromChain, toChain, address) {\n return jsonRpc(url, RPC_Method.searchToken, [fromChain, toChain, address])\n}\n\n/**\n *\n * @param {*} url api url\n * @param {*} address (String) user conflux address (shuttle-in) or external chain address (shuttle-out)\n * @param {*} defi (String) conflux defi address (for shuttleflow frontend, hard code zero address)\n * @param {*} fromChain (String) source chain (\"btc\" | \"cfx\")\n * @param {*} toChain (String) target chain (\"cfx\" | \"eth\" | \"bsc\")\n * @param {*} type (String) \"in\" | \"out\"\n */\nexport function requestUserWallet(\n url,\n address,\n defi = ZeroAddrHex,\n fromChain,\n toChain,\n type,\n) {\n return jsonRpc(url, RPC_Method.getUserWallet, [\n address,\n defi,\n fromChain,\n toChain,\n type,\n ])\n}\n\n/**\n *\n * @param {*} url\n * @param {*} hash transaction hash\n * @param {*} type \"in\"(another chain to conflux) | \"out\" (conflux to another chain)\n * @param {*} fromChain\n * @param {*} toChain\n * @returns\n */\nexport function requestUserOperationByHash(\n url,\n hash,\n type,\n fromChain,\n toChain,\n) {\n return jsonRpc(url, RPC_Method.getUserOperationByHash, [\n hash,\n type,\n fromChain,\n toChain,\n ])\n}\n\n/**\n *\n * @param {*} url\n * @param {*} type \"in\" | \"out\"\n * @param {*} address user conflux address\n * @param {*} status [\"doing\", \"finished\"]\n * @param {*} fromChain\n * @param {*} toChain\n * @param {*} limit the maximum number of operations to return, <= 100\n * @param {*} defi conflux defi address (for shuttleflow frontend, hard code zero address)\n * @returns\n */\nexport function requestUserOperationList(\n url,\n type,\n address,\n status,\n fromChain,\n toChain,\n limit = 100,\n defi = ZeroAddrHex,\n) {\n return jsonRpc(url, RPC_Method.getUserOperationList, [\n {\n type,\n defi,\n address,\n status,\n from_chain: fromChain,\n to_chain: toChain,\n },\n 0,\n limit,\n ])\n}\n","import create from 'zustand'\nimport {persist} from 'zustand/middleware'\nimport fromEntries from 'object.fromentries'\nimport {TypeTransaction, ShuttleStatus} from '../constants'\nimport {KeyOfCfx} from '../constants/chainConfig'\n\nlet Store = null\n\nconst mergeData = data => {\n const isToChainCfx = data?.toChain === KeyOfCfx ? true : false\n const infoData = {\n timestamp: Date.now(),\n tx_type: TypeTransaction.transaction,\n status: ShuttleStatus.pending,\n in_or_out: isToChainCfx ? 'in' : 'out',\n }\n const mergedData = {...infoData, ...data}\n return mergedData\n}\n\nexport const createStore = () =>\n create(\n persist(\n (set, get) => ({\n transactions: {},\n setTransactions: transactions => {\n set({transactions: fromEntries(transactions)})\n },\n unshiftTx: tx => {\n let trans = get().transactions\n trans[tx.hash] = mergeData(tx)\n set({transactions: trans})\n },\n claimedTxs: {},\n setClaimedTxs: claimedTxs => {\n set({claimedTxs: fromEntries(claimedTxs)})\n },\n setTx: (hash, value) => {\n let trans = get().claimedTxs\n trans[hash] = value\n set({claimedTxs: trans})\n },\n }),\n {\n name: 'transactions', // unique name\n getStorage: () => localStorage,\n },\n ),\n )\n\nexport const useTxState = () => {\n if (!Store) Store = createStore()\n const useStore = Store\n const state = useStore()\n return state\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useMemo, useEffect} from 'react'\nimport useSWR from 'swr'\nimport {requestAllTokenList, requestToken} from '../utils/api'\nimport {ProxyUrlPrefix, IntervalTime} from '../constants'\nimport {ChainConfig} from '../constants/chainConfig'\nimport {useIsCfxChain} from '../hooks'\nimport {useShuttleState} from '../state'\n\nexport function mapToken(token, isCfxChain) {\n if (!token) return {}\n const {\n ctoken,\n symbol,\n name,\n reference,\n reference_symbol,\n reference_name,\n ...others\n } = token\n return {\n ...others,\n //display_symbol, display_name, address is only for dispalying\n // ctoken, symbol, name is conflux token info\n // reference, reference_symbol, reference_name is other chain token info\n display_symbol: isCfxChain ? symbol : reference_symbol,\n display_name: isCfxChain ? name : reference_name,\n address: isCfxChain ? ctoken : reference, // address may be string, such as 'eth', 'cfx'\n ctoken,\n symbol,\n name,\n reference,\n reference_symbol,\n reference_name,\n }\n}\n\n// only use for display\nexport function useDisplayTokenList(fromChain, toChain) {\n const tokenList = useMapTokenList(fromChain, toChain)\n return useMemo(\n () => tokenList.filter(ChainConfig[fromChain].displayFilter),\n [fromChain, tokenList.toString()],\n )\n}\n\n// filter with fromChain and toChain, then map token\nexport function useMapTokenList(fromChain, toChain) {\n const tokenList = useAllTokenList()\n const isFromCfxChain = useIsCfxChain(fromChain)\n\n return useMemo(\n () =>\n tokenList\n .filter(\n token => token?.origin === fromChain || token?.to_chain === fromChain,\n )\n .filter(\n token => token?.origin === toChain || token?.to_chain === toChain,\n )\n .map(token => mapToken(token, isFromCfxChain)),\n [tokenList.toString(), isFromCfxChain, fromChain, toChain],\n )\n}\n\n// get all token list from backend\nexport function useAllTokenList() {\n const {data, error} = useSWR(ProxyUrlPrefix.sponsor, requestAllTokenList, {\n refreshInterval: IntervalTime.fetchTokenList,\n suspense: true,\n })\n const {setError} = useShuttleState()\n if (error) setError(error)\n return data ? data : []\n}\n\n// search token address from backend\nfunction useSearchAddressFromBackend(fromChain, toChain, search) {\n const isFromCfxChain = useIsCfxChain(fromChain)\n const {setTokenFromBackend} = useShuttleState()\n const searchTokens = useSearchAddressFromList(fromChain, toChain, search)\n const {data} = useSWR(\n ChainConfig[fromChain].checkAddress(search, 'contract') &&\n searchTokens.length === 0\n ? [ProxyUrlPrefix.sponsor, fromChain, toChain, search]\n : null,\n requestToken,\n )\n const searchTokensFromBackend = useMemo(\n () =>\n data\n ? [data]\n .filter(token => token.is_valid_erc20 === true)\n .map(token => mapToken(token, isFromCfxChain))\n : [],\n [data?.reference, data?.ctoken, isFromCfxChain],\n )\n useEffect(() => {\n if (searchTokensFromBackend.length === 1) {\n setTokenFromBackend(searchTokensFromBackend[0])\n }\n }, [searchTokensFromBackend[0]?.address])\n return searchTokensFromBackend\n}\n\n// search token adddress from current list\nfunction useSearchAddressFromList(fromChain, toChain, search) {\n const tokenList = useMapTokenList(fromChain, toChain)\n const isValidAddress = ChainConfig[fromChain].checkAddress(search, 'contract')\n\n return useMemo(\n () =>\n isValidAddress\n ? tokenList.filter(obj => {\n return obj?.address === search\n })\n : [],\n [isValidAddress, tokenList.toString(), search],\n )\n}\n\n// serach token name from current list\nfunction useSearchNameFromList(fromChain, toChain, search) {\n const tokenList = useDisplayTokenList(fromChain, toChain)\n\n return useMemo(\n () =>\n tokenList.filter(obj => {\n return (\n obj?.display_symbol?.toLowerCase().indexOf(search) > -1 ||\n obj?.display_name?.toLowerCase().indexOf(search) > -1\n )\n }),\n [search, tokenList.toString()],\n )\n}\n\nexport function useTokenListBySearch(fromChain, toChain, search) {\n const lowerSearch = search?.toLowerCase()\n const tokenList = useDisplayTokenList(fromChain, toChain)\n const searchAddressFromList = useSearchAddressFromList(\n fromChain,\n toChain,\n lowerSearch,\n )\n const searchAddressFromBackend = useSearchAddressFromBackend(\n fromChain,\n toChain,\n lowerSearch,\n )\n const searchNameFromList = useSearchNameFromList(\n fromChain,\n toChain,\n lowerSearch,\n )\n\n if (!search) return tokenList\n if (searchAddressFromList.length === 1) return searchAddressFromList\n if (searchAddressFromBackend.length === 1) return searchAddressFromBackend\n if (searchNameFromList.length > 0) return searchNameFromList\n return []\n}\n\nexport function useCommonTokens(fromChain, toChain) {\n const tokenList = useDisplayTokenList(fromChain, toChain)\n const commonTokens = ChainConfig[fromChain].commonTokens\n return commonTokens.map(address => {\n return tokenList.filter(obj => address === obj?.address)[0]\n })\n}\n\nexport function useFromToken(fromChain, toChain, fromTokenAddress) {\n const tokenList = useMapTokenList(fromChain, toChain)\n\n const data = useMemo(\n () => tokenList.filter(token => token.address === fromTokenAddress),\n [tokenList.toString(), fromTokenAddress],\n )\n\n return (data && data[0]) || {}\n}\n\nexport function useToToken(fromChain, toChain, fromTokenAddress) {\n const tokenList = useMapTokenList(toChain, fromChain)\n\n const data = useMemo(\n () =>\n tokenList.filter(\n token =>\n token.address &&\n ((token.address === token.ctoken &&\n token.reference === fromTokenAddress) ||\n (token.address === token.reference &&\n token.ctoken === fromTokenAddress)),\n ),\n [tokenList.toString(), fromTokenAddress],\n )\n\n return (data && data[0]) || {}\n}\n\nexport function useTokenAddress(token, isCfxChain) {\n const {ctoken, reference} = token\n return useMemo(\n () => (!token ? '' : isCfxChain ? ctoken : reference),\n [ctoken, reference, isCfxChain, Boolean(token)],\n ) // address may be string, such as 'eth', 'cfx'\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useEffect, useState} from 'react'\nimport {convertDecimal} from '@cfxjs/data-format'\nimport {useWallet} from '../hooks/useWallet'\nimport {\n StatusOperation,\n ShuttleStatus,\n TypeTransaction,\n ProxyUrlPrefix,\n} from '../constants'\nimport {KeyOfCfx, KeyOfBtc} from '../constants/chainConfig'\nimport {requestUserOperationList} from '../utils/api'\nimport {useTxState} from '../state/transaction'\nimport {useShuttleState} from '../state'\nimport {useActiveWeb3React} from './useWeb3Network'\nimport {useAllTokenList, mapToken} from '../hooks/useTokenList'\nimport {appendTxs, updateTx} from '../utils/index'\nimport {\n useTransactionNotification,\n useClaimNotification,\n} from '../pages/components'\nimport {format} from 'js-conflux-sdk/dist/js-conflux-sdk.umd.min.js'\nimport Big from 'big.js'\n\nexport const useUpdateTxs = () => {\n const {address: cfxAddress} = useWallet(KeyOfCfx)\n const {library} = useActiveWeb3React()\n const {transactions, setTransactions} = useTxState()\n const {txClaimModalShown} = useShuttleState()\n const tokenList = useAllTokenList()\n const txNotificationShow = useTransactionNotification()\n const claimNotificationShow = useClaimNotification()\n window._transactions = new Map(Object.entries(transactions))\n useEffect(() => {\n const update = () => {\n let trans = new Map(window._transactions)\n let transArr = [...trans.values()]\n //when tx type is approve transaction\n const approveTxs = transArr.filter(\n item => item.tx_type === TypeTransaction.approve,\n )\n const pendingApproveTxs = approveTxs.filter(\n item => item.status === ShuttleStatus.pending,\n )\n const pendingInApproveTxs = pendingApproveTxs.filter(\n item => item.fromChain !== KeyOfCfx,\n )\n if (library) {\n pendingInApproveTxs.forEach(item => {\n const {hash} = item\n library.getTransactionReceipt(hash).then(res => {\n if (res?.status) {\n updateTx(trans, hash, {status: ShuttleStatus.success})\n } else {\n updateTx(trans, hash, {status: ShuttleStatus.error})\n }\n })\n })\n }\n\n const pendingOutApproveTxs = pendingApproveTxs.filter(\n item => item.fromChain === KeyOfCfx,\n )\n\n if (window?.confluxJS) {\n pendingOutApproveTxs.forEach(item => {\n const {hash} = item\n window.confluxJS.getTransactionReceipt(hash).then(res => {\n if (res?.outcomeStatus == 0) {\n updateTx(trans, hash, {status: ShuttleStatus.success})\n } else {\n updateTx(trans, hash, {status: ShuttleStatus.error})\n }\n })\n })\n }\n\n // when tx type is common transacton\n const commonTxs = transArr.filter(\n item => item.tx_type === TypeTransaction.transaction,\n )\n const pendingCommonTxs = commonTxs.filter(\n item =>\n item.status === ShuttleStatus.pending ||\n item.status === ShuttleStatus.waiting,\n )\n requestUserOperationList(\n ProxyUrlPrefix.shuttleflow,\n null,\n cfxAddress,\n Object.values(StatusOperation),\n null,\n null,\n 10000,\n )\n .then(list => {\n if (list) {\n const newList = list.map(item => mapData(item, tokenList))\n const mappedData = _mapListToMap(newList)\n pendingCommonTxs.forEach((item, index) => {\n const {hash, amount, fromChain, toChain, fromToken, status} = item\n const {display_symbol} = fromToken\n const apiData = mappedData.get(hash)\n const {status: newStatus} = apiData || {}\n if (newStatus === ShuttleStatus.success) {\n //Success Notification\n txNotificationShow({\n symbol: display_symbol,\n fromChain,\n toChain,\n value: amount,\n })\n }\n if (\n toChain !== KeyOfBtc &&\n status === ShuttleStatus.pending &&\n newStatus === ShuttleStatus.waiting &&\n !txClaimModalShown\n ) {\n //Claim Notification\n claimNotificationShow({\n key: index,\n symbol: display_symbol,\n fromChain,\n toChain,\n value: amount,\n hash,\n })\n }\n })\n appendTxs(trans, newList)\n setTransactions(trans)\n }\n })\n .finally(() => {})\n }\n if (cfxAddress) {\n update()\n }\n let timeInterval\n if (cfxAddress) {\n timeInterval = setInterval(() => update(), 30000)\n }\n return () => {\n timeInterval && clearInterval(timeInterval)\n }\n }, [cfxAddress, txClaimModalShown])\n\n function _mapListToMap(list) {\n const map = new Map()\n list.forEach(item => {\n const {hash} = item\n map.set(hash, item)\n })\n return map\n }\n}\n\n/**\n * Get tokenInfo from tokenList by token address\n * Merge api data to local data\n */\nexport function mapData(item = {}, tokenList) {\n const data = {}\n if (!item) return {}\n const {\n from_chain,\n to_chain,\n token,\n status,\n timestamp,\n in_or_out,\n nonce_or_txid,\n to_addr,\n amount,\n tx_to,\n tx_input,\n user_addr,\n } = item\n const isCfxChain = from_chain === KeyOfCfx ? true : false\n const newList = tokenList\n .filter(item => token === (isCfxChain ? item.ctoken : item.reference))\n .filter(item => item.to_chain === to_chain)\n const tokenInfo = (newList && newList[0]) || {}\n data.response = item\n data.decimals = tokenInfo?.decimals\n data.status = ShuttleStatus.pending\n if (status === 'confirming') {\n data.status = ShuttleStatus.pending\n }\n if (status === 'doing') {\n if (tx_to && tx_input) {\n data.status = ShuttleStatus.waiting\n } else {\n data.status = ShuttleStatus.pending\n }\n }\n if (status === 'finished') {\n data.status = 'success'\n }\n if (status === 'invalid') {\n data.status = 'error'\n }\n data.timestamp = timestamp\n data.in_or_out = in_or_out\n if (in_or_out === 'in') {\n if (from_chain === KeyOfCfx) {\n data.fromChain = to_chain\n data.toChain = from_chain\n } else {\n data.fromChain = from_chain\n data.toChain = to_chain\n }\n }\n if (in_or_out === 'out') {\n if (from_chain === KeyOfCfx) {\n data.fromChain = from_chain\n data.toChain = to_chain\n } else {\n data.fromChain = to_chain\n data.toChain = from_chain\n }\n }\n data.fromToken = JSON.parse(\n JSON.stringify(mapToken(tokenInfo, data.fromChain === KeyOfCfx)),\n )\n data.toToken = JSON.parse(\n JSON.stringify(mapToken(tokenInfo, data.toChain === KeyOfCfx)),\n )\n data.toAddress = to_addr\n data.tx_type = TypeTransaction.transaction\n data.hash = nonce_or_txid?.split('_')[0]\n data.amount = new Big(\n convertDecimal(amount || 0, 'divide', data.decimals),\n ).toString()\n data.tx_to = tx_to\n data.tx_input = tx_input\n data.cfxAddress = user_addr\n return data\n}\n\nexport const useTxData = (\n multipleOrderedStatus,\n transactionTypes = Object.values(TypeTransaction),\n) => {\n const {transactions} = useTxState()\n const [arr, setArr] = useState([])\n const {address} = useWallet(KeyOfCfx)\n useEffect(() => {\n if (address) {\n const transArr = Object.values(transactions)\n const filteredTypeTxs = transArr.filter(\n tx => transactionTypes.indexOf(tx?.tx_type) != -1,\n )\n const filteredTxs = filteredTypeTxs.filter(\n tx =>\n tx?.cfxAddress &&\n address &&\n format.hexAddress(tx?.cfxAddress) === format.hexAddress(address),\n )\n let newArr = []\n multipleOrderedStatus.forEach(status => {\n let groupedArr = []\n groupedArr = filteredTxs.filter(tx => tx?.status === status)\n groupedArr.sort(function (a, b) {\n return b.timestamp - a.timestamp\n })\n if (status === ShuttleStatus.success && groupedArr.length > 100) {\n groupedArr = groupedArr.slice(0, 100) //first 100 element\n }\n newArr = newArr.concat(groupedArr)\n })\n setArr(newArr)\n } else {\n setArr([])\n }\n }, [JSON.stringify(transactions), address])\n return arr\n}\n","import {useState, useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport queryString from 'query-string'\nimport {useHistory, useLocation} from 'react-router-dom'\nimport {useTranslation} from 'react-i18next'\nimport {Dropdown, WrapIcon, Link, Loading} from '../../../components'\nimport {\n NotConnected,\n Connected,\n NoPending,\n BgArrowDown,\n BgArrowUp,\n Close,\n ArrowRight,\n} from '../../../assets/svg'\nimport {\n WalletConfig,\n ChainConfig,\n KeyOfMetaMask,\n KeyOfPortal,\n} from '../../../constants/chainConfig'\nimport {shortenAddress} from '../../../utils/address'\nimport {HeaderAccount} from '../../components'\nimport {useTxData} from '../../../hooks/useTransaction'\nimport {useConnectData} from '../../../hooks'\nimport {ShuttleStatus, TypeTransaction} from '../../../constants'\n\n\nexport const usePendingTransactions = () => {\n const pendingTransactions = useTxData(\n [ShuttleStatus.pending, ShuttleStatus.waiting],\n Object.values(TypeTransaction),\n );\n\n useEffect(() => {\n if (!window.__POWERED_BY_QIANKUN__) return;\n \n const historyLink = document.querySelector('#all');\n if (!historyLink) return;\n let icons = null;\n if (pendingTransactions?.length > 0) {\n icons = document.createElement('span');\n icons.id = 'pendingTransactions';\n icons.className = \"absolute flex items-center justify-center w-4 h-4 rounded-full bg-error text-xs text-white\";\n icons.style=\"right: -12px; top: -8px;\";\n icons.innerHTML = pendingTransactions.length > 99 ? '99+' : pendingTransactions.length;\n historyLink.insertAdjacentElement('beforeend', icons)\n } \n return () => {\n if (icons) {\n icons?.remove?.();\n }\n }\n }, [pendingTransactions]);\n\n const pendingTransactionsIcon = pendingTransactions.length > 0 && (\n
\n {pendingTransactions.length > 99 ? '99+' : pendingTransactions.length}\n
\n )\n\n return [pendingTransactions, pendingTransactionsIcon];\n}\n\n\nfunction WalletHub() {\n const connectData = useConnectData()\n const [pendingTransactions, pendingTransactionsIcon] = usePendingTransactions();\n\n const [arrow, setArrow] = useState('down')\n const {t} = useTranslation()\n const connectedData = connectData.filter(data => !!data.address)\n const length = connectedData.length\n const onVisibleChange = visible => {\n if (visible) setArrow('top')\n if (!visible) setArrow('down')\n }\n\n let children\n if (length === 0) {\n children = (\n \n \n {t('connectWallet')}\n \n )\n } else if (length === 1) {\n children = (\n \n {WalletConfig[ChainConfig[connectedData[0].chain].wallet].icon()}\n
\n \n \n {shortenAddress(\n connectedData[0].chain,\n connectedData[0].address,\n 'user',\n false,\n )}\n \n \n {arrow === 'down' ? : }\n \n
\n {pendingTransactionsIcon}\n \n )\n } else if (length === 2) {\n children = (\n \n \n {WalletConfig[KeyOfPortal].icon()}\n {WalletConfig[KeyOfMetaMask].icon('ml-0.5')}\n \n {arrow === 'down' ? : }\n \n {pendingTransactionsIcon}\n \n )\n }\n\n return (\n {\n if (arrow === 'down') setArrow('up')\n if (arrow === 'top') setArrow('down')\n }}\n connectData={connectData}\n pendingTransactions={pendingTransactions}\n />\n }\n onVisibleChange={visible => onVisibleChange(visible)}\n >\n {children}\n \n )\n}\n\nexport default WalletHub\n\nconst Popup = ({onClick, connectData, pendingTransactions, onClickHandler}) => {\n const location = useLocation()\n const history = useHistory()\n const {fromChain, toChain, fromTokenAddress, ...others} = queryString.parse(\n location.search,\n )\n const {t} = useTranslation()\n const metamaskData = connectData.filter(\n data => ChainConfig[data.chain].wallet === KeyOfMetaMask,\n )[0]\n const portalData = connectData.filter(\n data => ChainConfig[data.chain].wallet === KeyOfPortal,\n )[0]\n const noPending = (\n
\n \n {t('noPendingTxs')}\n
\n )\n const displayPendingTransactions = pendingTransactions.slice(0, 5)\n const onClose = () => {\n onClick && onClick()\n onClickHandler && onClickHandler()\n }\n return (\n
\n
\n
\n {t('accounts')}\n \n
\n
\n \n \n
\n
\n
\n
\n {t('shuttleRecord')}\n {\n const pathWithQuery = queryString.stringifyUrl({\n url: '/history',\n query: {\n ...others,\n fromChain,\n toChain,\n fromTokenAddress,\n },\n })\n history.push(pathWithQuery)\n }}\n >\n {t('all')}\n \n
\n
\n
\n {displayPendingTransactions.length === 0\n ? noPending\n : displayPendingTransactions.map((data, index) => {\n const {tx_type, fromToken, fromChain, toChain} = data\n const {display_symbol} = fromToken\n return (\n
\n \n \n {tx_type === 'transaction' &&\n t('shuttleRecordItem', {\n tokenSymbol: display_symbol,\n fromChain: ChainConfig[fromChain].shortName,\n toChain: ChainConfig[toChain].shortName,\n })}\n\n {tx_type === 'approve' &&\n t('approveRecordItem', {tokenSymbol: display_symbol})}\n \n
\n )\n })}\n
\n
\n \n )\n}\n\nPopup.propTypes = {\n onClick: PropTypes.func,\n onClickHandler: PropTypes.func,\n connectData: PropTypes.array.isRequired,\n pendingTransactions: PropTypes.array,\n}\n","import {useTranslation} from 'react-i18next'\nimport {EnglishIcon, ChineseIcon} from '../../../assets/svg'\nimport {WrapIcon} from '../../../components'\nfunction LanguageButton() {\n const {i18n} = useTranslation()\n const {language} = i18n\n const onChangeLanguage = () => {\n if (language?.indexOf('en') !== -1) {\n i18n.changeLanguage('zh-CN')\n } else if (language?.indexOf('zh') !== -1) {\n i18n.changeLanguage('en')\n }\n }\n return (\n \n {language?.indexOf('en') !== -1 ? (\n \n ) : (\n \n )}\n \n )\n}\n\nexport default LanguageButton\n","import {Sun, Moon} from '../../../assets/svg'\nimport useTheme from '../../../hooks/useTheme'\nimport {WrapIcon} from '../../../components'\n\nfunction LanguageButton() {\n const {value: isDarkMode, toggle} = useTheme()\n\n return (\n \n {isDarkMode ? (\n \n ) : (\n \n )}\n \n )\n}\n\nexport default LanguageButton\n","import {useLocation} from 'react-use'\nimport {useTranslation} from 'react-i18next'\nimport {WalletHub, LanguageButton, ThemeButton} from '../../components'\nimport {WrapIcon} from '../../../components'\nimport {BgQuestion} from '../../../assets/svg'\n\nfunction MobileFooter() {\n const {pathname} = useLocation()\n const {i18n} = useTranslation()\n const {language} = i18n\n\n if (\n pathname === '/' ||\n pathname === '/maintenance' ||\n pathname === '/notfound'\n ) {\n return null\n }\n return (\n
\n \n
\n \n \n \n \n \n \n \n
\n
\n )\n}\n\nexport default MobileFooter\n","import queryString from 'query-string'\nimport {useTranslation} from 'react-i18next'\nimport {useHistory, useLocation} from 'react-router-dom'\nimport {\n ChainConfig,\n KeyOfPortal,\n KeyOfMetaMask,\n} from '../../../constants/chainConfig'\nimport {Notification, Link} from '../../../components'\nimport {useIsMobile} from '../../../hooks'\n\nconst useTransactionNotification = () => {\n const {t} = useTranslation()\n const {search, pathname} = useLocation()\n const history = useHistory()\n const isMobile = useIsMobile()\n const {\n fromChain: pathFromChain,\n toChain: pathToChain,\n fromTokenAddress,\n ...others\n } = queryString.parse(search)\n // eslint-disable-next-line react/prop-types\n return function TransactionNotification({symbol, fromChain, toChain, value}) {\n if (pathname === '/') return null\n Notification.open({\n title: t('notificationDetail', {\n value,\n symbol,\n fromChain: ChainConfig[fromChain].shortName,\n toChain: ChainConfig[toChain].shortName,\n }),\n type: 'success',\n content: (\n {\n const pathWithQuery = queryString.stringifyUrl({\n url: '/history',\n query: {\n ...others,\n fromChain: pathFromChain,\n toChain: pathToChain,\n fromTokenAddress,\n },\n })\n history.push(pathWithQuery)\n }}\n >\n {t('viewInHistory')}\n \n ),\n duration: 10,\n placement: isMobile ? 'bottomRight' : 'topRight',\n bottom: isMobile ? 0 : 24,\n className: `${\n ChainConfig[fromChain].wallet === KeyOfPortal\n ? 'bg-fluent'\n : ChainConfig[fromChain].wallet === KeyOfMetaMask\n ? 'bg-metamask'\n : ''\n } h-32`,\n })\n }\n}\n\nexport default useTransactionNotification\n","import {useTranslation} from 'react-i18next'\nimport {useLocation, useHistory} from 'react-router-dom'\nimport queryString from 'query-string'\nimport {ChainConfig} from '../../../constants/chainConfig'\nimport {Notification, Loading, Link} from '../../../components'\nimport {useIsMobile} from '../../../hooks'\n\nconst useClaimNotification = () => {\n const {t} = useTranslation()\n const {pathname, search} = useLocation()\n const history = useHistory()\n const isMobile = useIsMobile()\n const {fromTokenAddress} = queryString.parse(search)\n\n // eslint-disable-next-line react/prop-types\n return function ClaimNotification ({symbol, fromChain, toChain, value, key}) {\n if (pathname === '/') return null\n Notification.open({\n key: 'claimNotification' + key,\n title: t('claimNotificationTitle'),\n icon: ,\n content: t('notificationDetail', {\n value,\n symbol,\n fromChain: ChainConfig[fromChain].shortName,\n toChain: ChainConfig[toChain].shortName,\n }),\n duration: 10,\n placement: isMobile ? 'bottomRight' : 'topRight',\n bottom: isMobile ? 0 : 24,\n actions: (\n {\n const pathWithQuery = queryString.stringifyUrl({\n url: '/history',\n query: {\n fromChain,\n toChain,\n fromTokenAddress,\n },\n })\n history.push(pathWithQuery)\n setTimeout(() => Notification.close('claimNotification' + key), 0)\n }}\n >\n {t('claimInHistory')}\n \n ),\n })\n }\n}\n\nexport default useClaimNotification\n","import PropTypes from 'prop-types'\nimport {useTranslation, Trans} from 'react-i18next'\nimport {Modal, Button} from '../../../components'\n\nfunction ClaimAddressModal({open, onClose, onContinue}) {\n const {t} = useTranslation()\n\n return (\n onClose && onClose()}\n actions={\n \n {t('continue')}\n \n }\n content={}\n />\n )\n}\n\nClaimAddressModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n onContinue: PropTypes.func,\n}\n\nexport default ClaimAddressModal\n","import PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\nimport {SupportedChains} from '../../../constants/chainConfig'\nimport {Tag, Notification} from '../../../components'\nimport {ChainConfig, WalletConfig} from '../../../constants/chainConfig'\nimport {IS_DEV} from '../../../utils'\n\nfunction AccountError({chain, errorType, onClose}) {\n const {t} = useTranslation()\n const chainObject = ChainConfig[chain]\n const isWrongNetwork = errorType === 2\n let text = ''\n let notiTitle = ''\n let notiContent = ''\n if (isWrongNetwork) {\n //wrong network\n text = t('error.wrongNetwork')\n notiTitle = t('error.unsupportedNetwork')\n let networkContent =\n chainObject?.fullName + ' ' + t(`${!IS_DEV ? 'mainnet' : 'testnet'}`)\n notiContent = t('error.unsupportedNetworkContent', {\n network: networkContent,\n walletName: WalletConfig[chainObject?.wallet]?.name,\n })\n } else {\n text = t('error.index')\n notiTitle = t('error.connecting')\n notiContent = t('error.connectingContent')\n }\n const onClick = () => {\n onClose && onClose()\n setTimeout(() => {\n Notification.open({\n title: notiTitle,\n type: 'warning',\n content: notiContent,\n duration: 0,\n })\n }, 300)\n }\n return (\n \n {text}\n \n )\n}\nAccountError.propTypes = {\n chain: PropTypes.oneOf(SupportedChains).isRequired,\n errorType: PropTypes.number,\n onClose: PropTypes.func,\n}\nexport default AccountError\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useState, useEffect} from 'react'\nimport PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\n\nimport {Button} from '../../../components'\nimport {\n KeyOfMetaMask,\n KeyOfPortal,\n ChainConfig,\n} from '../../../constants/chainConfig'\nimport {calculateGasMargin} from '../../../utils'\nimport {useTxState} from '../../../state/transaction'\nimport {\n ClaimStatus,\n ClaimButtonType,\n TxReceiptModalType,\n TxStatus,\n} from '../../../constants'\nimport {TransactionReceiptionModal, ClaimAddressModal} from '../../components'\nimport {useWallet} from '../../../hooks/useWallet'\n\nfunction ShuttleClaimButton({\n hash,\n type,\n setClaimStatus,\n disabled,\n library,\n toAccountAddress,\n onClickClaim,\n}) {\n const {t} = useTranslation()\n const {transactions, setTx, claimedTxs} = useTxState()\n const txData = transactions?.[hash]\n const {fromChain, toChain, tx_to, tx_input, fromToken, toToken, toAddress} =\n txData || {}\n const {address: walletAddress} = useWallet(toChain)\n const address = walletAddress || toAccountAddress\n const wallet = ChainConfig[toChain]?.wallet\n const [txModalShow, setTxModalShow] = useState(false)\n const [txModalType, setTxModalType] = useState(TxReceiptModalType.ongoing)\n const [txHash, setTxHash] = useState('')\n const [claimShown, setClaimShown] = useState(false)\n const [claimAddressModalShown, setClaimAddressModalShown] = useState(false)\n\n useEffect(() => {\n const txData = claimedTxs?.[hash]\n if (txData) {\n if (txData.status === TxStatus.error) {\n setClaimShown(true)\n } else {\n setClaimShown(false)\n }\n } else {\n setClaimShown(true)\n }\n }, [claimedTxs[hash]])\n\n const onClick = () => {\n if (toAddress?.toLocaleLowerCase() !== address?.toLocaleLowerCase()) {\n setClaimAddressModalShown(true)\n return\n }\n onSubmit && onSubmit()\n }\n const onSubmit = async () => {\n if (\n txModalType === TxReceiptModalType.success ||\n txModalType === TxReceiptModalType.error\n ) {\n setTxModalType(TxReceiptModalType.ongoing)\n }\n type === ClaimButtonType.common && setTxModalShow(true)\n setClaimStatus && setClaimStatus(ClaimStatus.ongoing)\n if (wallet === KeyOfPortal && window.confluxJS) {\n //portal\n try {\n const estimateData = await window.confluxJS.estimateGasAndCollateral({\n from: address,\n data: tx_input,\n to: tx_to,\n })\n const data = await window.confluxJS.sendTransaction({\n from: address,\n data: tx_input,\n to: tx_to,\n gas: calculateGasMargin(estimateData?.gasLimit, 0.5),\n storageLimit: calculateGasMargin(\n estimateData?.storageCollateralized,\n 0.5,\n ),\n })\n setClaimStatus && setClaimStatus(ClaimStatus.success)\n type === ClaimButtonType.common &&\n setTxModalType(TxReceiptModalType.success)\n setTxHash(data)\n setTx(hash, {\n wallet: KeyOfPortal,\n status: TxStatus.submitted,\n claimHash: data,\n sendHash: hash,\n })\n } catch (error) {\n setClaimStatus && setClaimStatus(ClaimStatus.error)\n type === ClaimButtonType.common &&\n setTxModalType(TxReceiptModalType.error)\n }\n }\n if (wallet === KeyOfMetaMask && library) {\n //metamask\n try {\n const gas = await library.estimateGas({\n from: address,\n data: tx_input,\n to: tx_to,\n })\n const data = await library.getSigner().sendTransaction({\n from: address,\n data: tx_input,\n to: tx_to,\n gasLimit: gas ? calculateGasMargin(gas) : undefined,\n })\n setClaimStatus && setClaimStatus(ClaimStatus.success)\n type === ClaimButtonType.common &&\n setTxModalType(TxReceiptModalType.success)\n setTxHash(data?.hash)\n setTx(hash, {\n wallet: KeyOfMetaMask,\n status: TxStatus.submitted,\n claimHash: data?.hash,\n sendHash: hash,\n })\n } catch (error) {\n setClaimStatus && setClaimStatus(ClaimStatus.error)\n type === ClaimButtonType.common &&\n setTxModalType(TxReceiptModalType.error)\n }\n }\n }\n\n const closeClaimAddressModal = () => {\n setClaimAddressModalShown(false)\n }\n\n const onContinue = () => {\n setClaimAddressModalShown(false)\n onSubmit && onSubmit()\n }\n\n return (\n <>\n \n {t('claim')}\n \n {type === ClaimButtonType.common && txModalShow && (\n {\n setTxModalShow(false)\n if (txModalType === TxReceiptModalType.success) {\n onClickClaim && onClickClaim()\n }\n }}\n />\n )}\n \n \n )\n}\n\nShuttleClaimButton.propTypes = {\n hash: PropTypes.string.isRequired,\n setClaimStatus: PropTypes.func,\n disabled: PropTypes.bool,\n type: PropTypes.oneOf(Object.values(ClaimButtonType)).isRequired,\n library: PropTypes.object,\n toAccountAddress: PropTypes.string,\n onClickClaim: PropTypes.func,\n}\n\nexport default ShuttleClaimButton\n","/* eslint-disable no-unused-vars */\nimport {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\nimport {SupportedChains, ChainConfig} from '../../constants/chainConfig'\nimport {Mainnet, Testnet} from '../../constants'\nimport {IS_DEV} from '../../utils'\nimport {useIsBtcChain} from '../../hooks'\nimport {ArrowJump} from '../../assets/svg'\n\nfunction Dot({isDone, hasLine = true}) {\n return (\n
\n \n {hasLine &&
}\n
\n )\n}\n\nDot.propTypes = {\n isDone: PropTypes.bool.isRequired,\n hasLine: PropTypes.bool,\n}\n\nfunction JumpIcon({url}) {\n return (\n \n \n \n )\n}\n\nJumpIcon.propTypes = {\n url: PropTypes.string,\n}\n\nfunction Progress({progress, fromChain, toChain}) {\n const {t} = useTranslation()\n const {status, nonce_or_txid, settled_tx, tx_to, tx_input} = progress\n const isFromBtcChain = useIsBtcChain(fromChain)\n const isToBtcChain = useIsBtcChain(toChain)\n\n const progressLevel = useMemo(() => {\n if (status === 'confirming') return 0\n if (status === 'doing' && !tx_to && !tx_input) return 1\n if (\n status === 'doing' &&\n ((settled_tx && isToBtcChain) || (!isToBtcChain && tx_to && tx_input))\n )\n return 2\n if (status === 'finished') return 3\n }, [status, settled_tx, tx_to, tx_input, isToBtcChain])\n\n const getIsDone = index => index <= progressLevel\n\n return (\n
\n
\n \n \n \n \n
\n
\n
\n \n {t('history.progress.stepOne')}\n \n {!isFromBtcChain && getIsDone(0) && (\n \n )}\n
\n
\n \n {t('history.progress.stepTwo', {\n fromChain: ChainConfig[fromChain]?.shortName,\n fromChainId:\n ChainConfig[fromChain]?.supportedChainIds?.[\n IS_DEV ? Testnet : Mainnet\n ].name,\n })}\n \n {!isFromBtcChain && getIsDone(1) && (\n \n )}\n
\n {isToBtcChain && (\n
\n \n {t('history.progress.stepThreeToBtc')}\n \n {!isToBtcChain && getIsDone(2) && (\n \n )}\n
\n )}\n {!isToBtcChain && (\n
\n \n {t('history.progress.stepThree')}\n \n
\n )}\n
\n \n {t('history.progress.stepFour', {\n toChain: ChainConfig[toChain]?.shortName,\n toChainId:\n ChainConfig[toChain]?.supportedChainIds?.[\n IS_DEV ? Testnet : Mainnet\n ].name,\n })}\n \n {!isToBtcChain && getIsDone(3) && (\n \n )}\n
\n
\n
\n )\n}\n\nProgress.propTypes = {\n progress: PropTypes.object.isRequired,\n fromChain: PropTypes.oneOf(SupportedChains),\n toChain: PropTypes.oneOf(SupportedChains),\n}\n\nexport default Progress\n","import {useState, useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\nimport {CopyToClipboard} from 'react-copy-to-clipboard'\nimport {formatAmount} from '@cfxjs/data-format'\nimport {TokenIcon, Account} from '../components'\nimport {SupportedChains, ChainConfig} from '../../constants/chainConfig'\nimport {useIsNativeToken} from '../../hooks/useWallet'\nimport useAddTokenToMetamask from '../../hooks/useAddTokenToMetamask'\nimport {useIsCfxChain} from '../../hooks'\nimport {WrapIcon, Toast, Tooltip} from '../../components'\nimport {\n BgPlus,\n BgCopy,\n ErrorFilled,\n SuccessFilled,\n PendingFilled,\n ArrowUp,\n} from '../../assets/svg'\nimport {\n ShuttleStatus,\n ClaimButtonType,\n TypeAccountStatus,\n} from '../../constants'\nimport Progress from './Progress'\nimport {ClaimButton} from '../components'\nimport {useActiveWeb3React} from '../../hooks/useWeb3Network'\nimport {useWallet, useAccountStatus} from '../../hooks/useWallet'\nimport {getChainIdRight} from '../../utils'\nimport {AccountStatus} from '../components'\n\nfunction TokenInfo({toToken, fromChain, toChain}) {\n const {display_symbol, address} = toToken\n const isNativeToken = useIsNativeToken(toChain, address)\n const {addToken} = useAddTokenToMetamask(toToken)\n const isToChainCfx = useIsCfxChain(toChain)\n const {t} = useTranslation()\n const [copied, setCopied] = useState(false)\n const onAddToken = e => {\n e.stopPropagation()\n addToken()\n }\n\n return (\n
\n \n
\n \n {display_symbol}\n {!isNativeToken && !isToChainCfx && (\n \n onAddToken(e)}\n >\n \n \n \n )}\n {!isNativeToken && isToChainCfx && (\n \n setCopied(true)}>\n \n \n setCopied(false)}\n className=\"top-5 -right-5 w-20\"\n />\n \n )}\n \n \n {t('history.chainDescription', {\n fromChain: ChainConfig[fromChain]?.shortName,\n toChain: ChainConfig[toChain]?.shortName,\n })}\n \n
\n
\n )\n}\n\nTokenInfo.propTypes = {\n toToken: PropTypes.object,\n fromChain: PropTypes.oneOf(SupportedChains),\n toChain: PropTypes.oneOf(SupportedChains),\n}\n\nfunction Status({status}) {\n const {t} = useTranslation()\n const icon = useMemo(() => {\n let icon = null\n const iconClassName = 'w-4 h-4 mr-1'\n switch (status) {\n case 'success':\n icon = \n break\n case 'error':\n icon = \n break\n case 'pending':\n case 'waiting':\n icon = \n break\n }\n return icon\n }, [status])\n\n const colorStyle = useMemo(() => {\n let color = ''\n switch (status) {\n case 'success':\n color = 'text-success'\n break\n case 'error':\n color = 'text-error'\n break\n case 'pending':\n case 'waiting':\n color = 'text-warning'\n break\n }\n return color\n }, [status])\n\n return (\n
\n {icon}{' '}\n {t(`history.${status}`)}\n
\n )\n}\n\nStatus.propTypes = {\n status: PropTypes.oneOf(Object.keys(ShuttleStatus)),\n}\nfunction HistoryItem({historyItemData}) {\n const {\n toToken,\n fromChain,\n toChain,\n amount,\n status,\n toAddress,\n response,\n hash,\n } = historyItemData\n\n const {t} = useTranslation()\n const {library} = useActiveWeb3React()\n const {address: accountAddress, error, chainId} = useWallet(toChain)\n const isChainIdRight = getChainIdRight(toChain, chainId, accountAddress)\n const {type: accountType} = useAccountStatus(\n toChain,\n accountAddress,\n error,\n isChainIdRight,\n )\n\n const [detailShow, setDetailShow] = useState(\n status === 'pending' || status === 'waiting' ? true : false,\n )\n\n return (\n <>\n setDetailShow(true)}\n >\n \n
\n \n {formatAmount(amount)}\n \n \n
\n
\n \n
\n
\n
\n {t('destination')}\n \n
\n {accountType === TypeAccountStatus.success &&\n status === 'waiting' && (\n \n )}\n {status === 'waiting' && (\n \n )}\n
\n {response && (\n \n )}\n
\n setDetailShow(false)}\n />\n \n \n )\n}\n\nHistoryItem.propTypes = {\n historyItemData: PropTypes.object.isRequired,\n}\n\nexport default HistoryItem\n","import {useTranslation, Trans} from 'react-i18next'\nimport queryString from 'query-string'\nimport {useHistory, useLocation} from 'react-router-dom'\nimport HistoryItem from './HistoryItem'\nimport {useTxData} from '../../hooks/useTransaction'\nimport {ShuttleStatus} from '../../constants'\nimport {ArrowLeft, NoPending} from '../../assets/svg'\nimport {Alert} from '../../components'\nimport {TypeTransaction} from '../../constants'\n\nfunction History() {\n const historyData = useTxData(\n [\n ShuttleStatus.waiting,\n ShuttleStatus.pending,\n ShuttleStatus.success,\n ShuttleStatus.error,\n ],\n [TypeTransaction.transaction],\n )\n const {t} = useTranslation()\n const history = useHistory()\n const location = useLocation()\n const {fromChain, toChain, fromTokenAddress, ...others} = queryString.parse(\n location.search,\n )\n const onBack = () => {\n const pathWithQuery = queryString.stringifyUrl({\n url: window.__POWERED_BY_QIANKUN__ ? '/' : '/shuttle',\n query: {\n ...others,\n fromChain,\n toChain,\n fromTokenAddress,\n },\n })\n history.push(pathWithQuery)\n }\n return (\n \n
\n \n {t('history.title')}\n
\n \n \n
\n {historyData.length === 0 && (\n
\n \n \n \n \n
\n )}\n {historyData.map((item, index) => (\n \n ))}\n
\n \n )\n}\n\nexport default History\n","export default __webpack_public_path__ + \"static/media/base-center.119222a8.png\";","export default __webpack_public_path__ + \"static/media/base-left.7ebb9ce4.png\";","export default __webpack_public_path__ + \"static/media/base-right.40eef26f.png\";","export default __webpack_public_path__ + \"static/media/shuttleflow.a4f22696.png\";","export default __webpack_public_path__ + \"static/media/sf-center.31626910.png\";","export default __webpack_public_path__ + \"static/media/light-center.e02fad0d.png\";","export default __webpack_public_path__ + \"static/media/tunnel-left.d7492ac1.png\";","export default __webpack_public_path__ + \"static/media/tunnel-right.c03d6e4b.png\";","export default __webpack_public_path__ + \"static/media/robot.100757db.png\";","export default __webpack_public_path__ + \"static/media/not-found.9b8164af.png\";","export default __webpack_public_path__ + \"static/media/dark-not-found.f2da2c30.png\";","export default __webpack_public_path__ + \"static/media/base-mobile.333c4135.png\";","export default __webpack_public_path__ + \"static/media/SF-whitepaper-en-v1.0.bbd9b706.pdf\";","export default __webpack_public_path__ + \"static/media/SF-whitepaper-zh-v1.0.75dc3b1e.pdf\";","import {useEffectOnce} from 'react-use'\nimport {useTranslation} from 'react-i18next'\nimport {\n BaseCenter,\n BaseLeft,\n BaseRight,\n ShuttleFlow,\n TokenLeft,\n SfCenter,\n TokenRight,\n // Twitter,\n // Telegram,\n // Discord,\n // Medium,\n // GitHub,\n LightLeft,\n LightRight,\n LightCenter,\n LightTunnel1,\n LightTunnel2,\n PipleLeft,\n PipleRight,\n TunnelLeft,\n TunnelRight,\n BaseMobile,\n ShuttleFlowMobile,\n} from '../../assets/img'\nimport {Button} from '../../components'\nimport {useIsMobile} from '../../hooks'\nimport whitePaperEN from '../../assets/pdf/SF-whitepaper-en-v1.0.pdf'\nimport whitePaperZH from '../../assets/pdf/SF-whitepaper-zh-v1.0.pdf'\n\nfunction Home() {\n useEffectOnce(() => {\n const classList = document.querySelector('body').classList\n classList.remove('dark')\n classList.remove('light')\n classList.add('home')\n })\n const {i18n, t} = useTranslation()\n const {language} = i18n\n const onOpenApp = () => {\n window.open('/shuttle')\n }\n const isMobile = useIsMobile()\n const copyright = (\n \n © 2021 ShuttleFlow. All Rights Reserved.\n \n )\n // const icon = (\n //
\n // \n // \"twitter\"\n // \n // \n // \"telegram\"\n // \n // \n // \"discord\"\n // \n // \n // \"medium\"\n // \n // \n // \"github\"\n // \n //
\n // )\n const line =
\n\n return (\n
\n
\n
\n \n \n \n {t('home.subTitle')}\n \n
\n \n \n
\n
\n {isMobile && (\n \"base\"\n )}\n {!isMobile && (\n
\n
\n \"tunnel\"\n
\n \n \n \n \n\n \n \n \n\n \n \n \n \n
\n \"base\"\n
\n
\n \"base\"\n
\n
\n \"tunnel\"\n
\n\n \n \n \n \n\n \n \n \n\n \n \n \n \n
\n \"base\"\n
\n
\n \"token\"\n
\n
\n \"sf\"\n
\n
\n \"token\"\n
\n
\n \"light\"\n
\n
\n \"light\"\n
\n
\n \"light\"\n
\n
\n \"light\"\n
\n
\n \"light\"\n
\n
\n \"piple\"\n
\n
\n \"piple\"\n
\n
\n )}\n
\n {!isMobile ? (\n
\n {line}\n
\n {copyright}\n {/* {icon} */}\n
\n
\n ) : (\n
\n {/* {icon} */}\n {line}\n {copyright}\n
\n )}\n
\n )\n}\nexport default Home\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import {useTranslation} from 'react-i18next'\nimport {Robot} from '../../assets/img'\n\nfunction Maintenance() {\n const {t} = useTranslation()\n return (\n
\n
\n \"robot\"\n \n {t('maintenance.underMaint')}\n \n \n {t('maintenance.maintDesc1')}\n \n \n {t('maintenance.maintDesc2')}\n \n
\n
\n )\n}\nexport default Maintenance\n","import {useTranslation} from 'react-i18next'\nimport {NotFoundImg} from '../../assets/img'\nimport {DarkNotFound} from '../../assets/img'\nimport {Button} from '../../components'\nimport useTheme from '../../hooks/useTheme'\n\nfunction NotFound() {\n const {t} = useTranslation()\n const {value: isDarkMode} = useTheme()\n const onOpenHome = () => {\n window.location.href = './'\n }\n return (\n
\n
\n \n \n {t('notFoundPage.notFound')}\n \n \n
\n
\n )\n}\nexport default NotFound\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useEffect} from 'react'\nimport {useTxState} from '../state/transaction'\nimport {TxStatus} from '../constants'\nimport {KeyOfMetaMask, KeyOfPortal} from '../constants/chainConfig'\nimport {useActiveWeb3React} from './useWeb3Network'\nimport {updateTx} from '../utils/index'\n\nexport const useUpdateClaimedTxs = () => {\n const {claimedTxs, setClaimedTxs} = useTxState()\n const {library} = useActiveWeb3React()\n window._claimedTxs = new Map(Object.entries(claimedTxs))\n useEffect(() => {\n const update = async () => {\n let trans = new Map(window._claimedTxs)\n let transArr = [...trans.values()]\n const submittedTrans = transArr.filter(\n item => item.status === TxStatus.submitted,\n )\n const mmSubmittedTrans = submittedTrans.filter(\n item => item.wallet === KeyOfMetaMask,\n )\n const portalSubmittedTrans = submittedTrans.filter(\n item => item.wallet === KeyOfPortal,\n )\n const mmArr = []\n if (library) {\n mmSubmittedTrans.forEach(item => {\n const {claimHash} = item\n mmArr.push(library.getTransactionReceipt(claimHash))\n })\n }\n const mmResults = await Promise.all(mmArr)\n mmResults.forEach((res, index) => {\n const {sendHash} = mmSubmittedTrans[index]\n if (res) {\n if (res?.status) {\n updateTx(trans, sendHash, {status: TxStatus.success})\n } else {\n updateTx(trans, sendHash, {status: TxStatus.error})\n }\n }\n })\n const confluxArr = []\n if (window?.confluxJS) {\n portalSubmittedTrans.forEach(item => {\n const {claimHash} = item\n confluxArr.push(window.confluxJS.getTransactionReceipt(claimHash))\n })\n }\n const confluxResults = await Promise.all(confluxArr)\n confluxResults.forEach((res, index) => {\n const {sendHash} = portalSubmittedTrans[index]\n if (res) {\n if (res?.outcomeStatus == 0) {\n updateTx(trans, sendHash, {status: TxStatus.success})\n } else {\n updateTx(trans, sendHash, {status: TxStatus.error})\n }\n }\n })\n setClaimedTxs(trans)\n }\n update()\n const timeInterval = setInterval(() => update(), 5000)\n return () => {\n timeInterval && clearInterval(timeInterval)\n }\n }, [library])\n}\n","import {Conflux} from 'js-conflux-sdk/dist/js-conflux-sdk.umd.min.js'\n\nlet cfx\nif (window?.confluxJS?.version !== '2.0.3') {\n cfx = new Conflux({\n url: 'https://main.confluxrpc.com',\n defaultGasPrice: 1000000,\n defaultGas: 1000000,\n logger: console,\n })\n\n window.confluxJS = cfx\n window.confluxJS.provider = window.conflux\n}\n\nexport default cfx\n","import {Suspense} from 'react'\nimport {\n BrowserRouter as Router,\n Route,\n Switch,\n Redirect,\n} from 'react-router-dom'\n// import Shuttle from '../pages/Shuttle'\nimport History from '../pages/History'\nimport Home from '../pages/Home'\nimport Maintenance from '../pages/Maintenance'\nimport NotFound from '../pages/NotFound'\nimport {Web3ReactManager, Header, MobileFooter} from '../pages/components'\nimport {Loading} from '../components'\nimport {useIsMobile} from '../hooks'\nimport {useUpdateTxs} from '../hooks/useTransaction'\nimport {useUpdateClaimedTxs} from '../hooks/useClaimedTx'\nimport {useMetaMaskHostedByFluent} from '../hooks/useMetaMaskHostedByFluent'\nimport {usePendingTransactions} from './components/WalletHub/index'\n\n// eslint-disable-next-line no-unused-vars\nimport cfx from '../utils/cfx'\n// import * as Sentry from '@sentry/browser'\n// import {Integrations} from '@sentry/tracing'\n// import {IS_DEV} from '../utils'\n\n// Sentry.init({\n// dsn: 'https://4d2e829843a54d21b43df7b20a8e93cf@o339419.ingest.sentry.io/5880699',\n// integrations: [new Integrations.BrowserTracing()],\n\n// // Set tracesSampleRate to 1.0 to capture 100%\n// // of transactions for performance monitoring.\n// // We recommend adjusting this value in production\n// tracesSampleRate: 1.0,\n// environment: IS_DEV ? 'development' : 'production',\n// })\n\nfunction TxsUpdater() {\n useUpdateTxs()\n useUpdateClaimedTxs()\n usePendingTransactions()\n return null\n}\n\nfunction App() {\n const isMobile = useIsMobile()\n useMetaMaskHostedByFluent()\n\n return (\n \n \n
\n }\n >\n \n \n {!window.__POWERED_BY_QIANKUN__ &&
}\n \n
\n \n \n \n \n \n \n \n \n {!window.__POWERED_BY_QIANKUN__ && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n \n
\n {isMobile && !window.__POWERED_BY_QIANKUN__ && }\n \n \n \n )\n}\n\nexport default App\n","import { useEffect } from 'react';\nimport { provider as metaMaskProvider } from '@cfxjs/use-wallet/dist/ethereum';\nimport Notification from '../components/Notification'\n\nexport const useMetaMaskHostedByFluent = () => {\n useEffect(() => {\n if (window.__POWERED_BY_QIANKUN__ || !metaMaskProvider) return;\n metaMaskProvider.request({ method: `cfx_chainId` })\n .then(() => {\n Notification.open({\n title: 'ShuttleFlow does not support connecting two chains via Fluent simultaneously, recently recommend connecting Conflux eSpace and other EVM chains via MetaMask.',\n type: 'error',\n top: 60,\n duration: 0,\n });\n })\n .catch(() => {});\n }, []);\n};\n","const reportWebVitals = (onPerfEntry) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry)\n getFID(onPerfEntry)\n getFCP(onPerfEntry)\n getLCP(onPerfEntry)\n getTTFB(onPerfEntry)\n })\n }\n}\n\nexport default reportWebVitals\n","/**\n * For chain based on Ethereum and BSC\n */\nimport {Web3Provider} from '@ethersproject/providers'\n\nexport default function getLibrary(provider) {\n const library = new Web3Provider(provider, 'any')\n library.pollingInterval = 15000\n return library\n}\n","import './public-path'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport {createWeb3ReactRoot, Web3ReactProvider} from '@web3-react/core'\nimport './index.css'\nimport './i18n'\nimport App from './pages/App'\nimport reportWebVitals from './reportWebVitals'\nimport {NetworkContextName} from './constants'\nimport getLibrary from './utils/getLibrary'\nimport Notification from './components/Notification'\n\nconst Web3ProviderNetwork = createWeb3ReactRoot(NetworkContextName)\n\nfunction render(props) {\n const {container} = props\n ReactDOM.render(\n \n \n \n \n \n \n ,\n container\n ? container.querySelector('#root')\n : document.querySelector('#root'),\n )\n}\n\nif (!window.__POWERED_BY_QIANKUN__) {\n render({})\n}\n\nexport async function bootstrap() {\n console.log('react app bootstraped')\n}\n\n/**\n * 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法\n */\nexport async function mount(props) {\n console.log('[react16] props from main framework', props)\n render(props)\n}\n\n/**\n * 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例\n */\nexport async function unmount(props) {\n Notification.destroy()\n const {container} = props\n ReactDOM.unmountComponentAtNode(\n container\n ? container.querySelector('#root')\n : document.querySelector('#root'),\n )\n}\n\n/**\n * 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效\n */\nexport async function update(props) {\n console.log('update props', props)\n}\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"],"sourceRoot":""}