@orderly.network/ui-transfer 2.8.0 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/depositForm/depositForm.ui.tsx","../src/components/LTV/ltv.script.tsx","../src/components/LTV/ltv.ui.tsx","../src/components/LTV/ltv.widget.tsx","../src/components/actionButton/index.tsx","../src/types.ts","../src/components/availableQuantity/index.tsx","../src/components/brokerWallet/index.tsx","../src/components/chainSelect/index.tsx","../src/icons.tsx","../src/components/collateralContribution/index.tsx","../src/components/collateralRatio/collateralRatio.ui.tsx","../src/components/collateralRatio/collateralRatio.widget.tsx","../src/components/exchangeDivider/index.tsx","../src/components/fee/index.tsx","../src/components/minimumReceived/index.tsx","../src/components/quantityInput/index.tsx","../src/components/quantityInput/tokenOption.tsx","../src/components/quantityInput/useBalance.ts","../src/components/slippage/index.tsx","../src/components/swap/components/notice.tsx","../src/components/swap/components/swapFee.tsx","../src/components/swapCoin/index.tsx","../src/components/swapIndicator/index.tsx","../src/components/swap/icons.tsx","../src/components/web3Wallet/index.tsx","../src/components/depositForm/depositForm.script.tsx","../src/components/swap/hooks/useNeedSwapAndCross.ts","../src/components/swap/hooks/useSwapDeposit.tsx","../src/components/swap/components/swapDialog.tsx","../src/components/swap/components/crossSwap.tsx","../src/components/swap/hooks/useCrossSwap.ts","../src/components/swap/constants.ts","../src/components/swap/components/processStatus.tsx","../src/components/swap/components/swapDetail.tsx","../src/utils.ts","../src/components/swap/components/viewFAQs.tsx","../src/components/swap/components/singleSwap.tsx","../src/components/swap/hooks/useSwap.ts","../src/components/swap/components/swap.tsx","../src/components/swap/hooks/useSwapEnquiry.ts","../src/components/swap/hooks/useCrossSwapQuery.ts","../src/components/swap/hooks/useSwapQuery.ts","../src/components/swap/hooks/useSwapFee.ts","../src/components/depositForm/hooks/useActionType.ts","../src/components/depositForm/hooks/useChainSelect.ts","../src/components/depositForm/hooks/useDepositAction.tsx","../src/components/depositForm/hooks/useInputStatus.ts","../src/components/depositForm/hooks/useToken.ts","../src/components/depositForm/depositForm.widget.tsx","../src/components/withdrawForm/withdrawForm.ui.tsx","../src/components/accountIdInput/index.tsx","../src/components/unsettlePnlInfo/index.tsx","../src/components/withdrawAction/index.tsx","../src/components/crossWithdrawConfirm/index.tsx","../src/components/withdrawAction/SwitchChainButton.tsx","../src/components/withdrawWarningMessage/index.tsx","../src/components/withdrawForm/withdrawForm.script.tsx","../src/components/unsettlePnlInfo/useSettlePnl.tsx","../src/components/withdrawForm/hooks/useInternalWithdraw.ts","../src/components/withdrawForm/hooks/useWithdrawFee.ts","../src/components/withdrawForm/hooks/useWithdrawLTV.tsx","../src/components/withdrawForm/withdrawForm.widget.tsx","../src/components/depositAndWithdraw/index.tsx","../src/components/depositAndWithdraw/depositSlot.tsx","../src/components/depositAndWithdraw/withdrawSlot.tsx","../src/components/swap/swapDepositForm/swapDepositForm.ui.tsx","../src/components/swap/swapDepositForm/swapDepositForm.script.tsx","../src/components/swap/hooks/useToken.ts","../src/components/swap/swapDepositForm/swapDepositForm.widget.tsx","../src/components/transferForm/transferForm.ui.tsx","../src/components/accountSelect/index.tsx","../src/components/transferForm/transferForm.script.tsx","../src/components/transferForm/transferForm.widget.tsx","../src/components/convertForm/convertForm.ui.tsx","../src/components/convertAction/index.tsx","../src/components/convertForm/convertForm.script.tsx","../src/components/convertForm/hooks/useToken.ts","../src/components/convertForm/convertForm.widget.tsx","../src/components/depostiStatus/depostiStatus.ui.tsx","../src/components/depostiStatus/depostiStatus.script.ts","../src/contract/useTransactionTime.ts","../src/contract/getBlockTime.ts","../src/contract/getEvmBlockTime.ts","../src/contract/getSolanaBlockTime.ts","../src/contract/getChainConfirmations.ts","../src/contract/abi/getAppUlnConfigAbi.json","../src/contract/endpointId.ts","../src/components/depostiStatus/depostiStatus.widget.tsx"],"names":["useTranslation","Box","Flex","textVariants","Text","useMemo","useQuery","Decimal","useLtvScript","data","error","isLoading","React","cn","Tooltip","jsx","jsxs","TooltipIcon","props","ref","calculateTextColor","val","TooltipContent","ltv_threshold","t","LtvUI","currentLtv","nextLTV","showDiff","LtvWidget","state","AccountStatusEnum","Button","AuthGuard","DepositAction","WithdrawTo","ActionButton","disabled","loading","actionType","symbol","onDeposit","onApprove","onApproveAndDeposit","networkId","buttonParams","buttonSize","useIndexPricesStream","Spinner","AvailableQuantity","amount","maxQuantity","token","getIndexPrice","name","dp","notional","useAppConfig","useConfig","Fragment","BrokerWallet","appIcons","brokerName","icon","secondary","useState","ChainIcon","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","ScrollArea","ExchangeIcon","ArrowDownIcon","RefreshIcon","TransferVerticalIcon","ChainSelect","chains","value","wrongNetwork","open","setOpen","selectable","chainIcon","chainName","renderRightIcon","trigger","content","chain","index","isActive","e","CollateralContribution","precision","CollateralRatioUI","CollateralRatioWidget","ExchangeDivider","modal","Fee","dstGasFee","feeQty","feeAmount","nativeSymbol","onShowFee","showFeeQty","MinimumReceived","useEffect","useRef","Input","Select","inputFormatter","Badge","TokenIcon","retryInterval","useBalance","fetchBalance","balance","setBalance","balanceRef","setLoading","timeoutRef","loopGetTokenBalance","timeout","err","TokenOption","displayType","onTokenChange","insufficientBalance","showBalance","renderValue","QuantityInput","tokens","classNames","label","status","hintMessage","onValueChange","placeholder","formatters","vaultBalanceList","checkVaultBalance","rest","inputRef","width","setWidth","tokenOptions","currentToken","item","rect","_onTokenChange","find","selectOpen","optionRenderer","prefix","suffix","event","message","AlertDialog","EditIcon","options","Slippage","min","max","setValue","customValue","setCustomValue","showSlippage","hideSlippage","onClick","d","getValue","onConfirm","SlippageItem","Trans","ChainSelectorDialogId","Notice","needSwap","needCrossSwap","showChainSelect","Divider","SwapFee","feeQtys","feeDetails","isEnd","renderFeeQty","len","list","SwapCoin","sourceSymbol","targetSymbol","indexPrice","ArrowRightIcon","GasFeeIcon","TopRightArrowIcon","WoofiIcon","SwapIndicator","sourceToken","targetToken","className","useAccount","useWalletConnector","ABSTRACT_CHAIN_ID_MAP","WalletIcon","Web3Wallet","wallet","connectedChain","accountState","account","address","useCallback","useComputedLTV","useDeposit","useIndexPrice","useTokenInfo","accountPerp","useAppContext","ChainNamespace","useNeedSwapAndCross","srcToken","dstToken","srcChainId","dstChainId","setNeedSwap","setNeedCrossSwap","isCrossChain","useLocalStorage","SimpleDialog","SimpleSheet","useModal","useScreen","useEventEmitter","WS_WalletStatusEnum","toast","createClient","pick","utils","useAccountInstance","useBoolean","woofiDexCrossSwapChainRouterAbi","woofiDexSwapDepositorAbi","nativeTokenAddress","isNativeTokenChecker","swapSupportApiUrl","useCrossSwap","start","stop","layerStatus","setLayerStatus","ee","bridgeMessage","setBridgeMessage","setStatus","txHashFromBridge","checkLayerStatusListener","config","brokerId","client","timer","handler","side","transStatus","trxId","checkLayerStatus","txHash","messages","dstValutDeposit","inputs","src","dst","crossChainRouteAddress","quotoLZFee","result","CheckedCircleFillIcon","CloseCircleFillIcon","createElement","ProcessStatus","mode","statusUrl","processList","bridgeStatus","getBridgeStatus","depositStatus","getDepositStatus","onOk","isFailed","showDashLine","ProcessItem","title","description","StatusIndicator","Icon","i18n","getTokenByTokenList","tokenObj","acc","feeDecimalsOffset","origin","checkIsAccountId","accountId","getTransferErrorMessage","errorCode","depositErrorCodeMap","getDepositKnownErrorMessage","key","SwapDetail","info","nativePrice","markPrice","nativeToken","viewMode","header","SwapSymbol","divider","listData","listView","ListItem","swapButton","SwapTime","ViewFAQs","CrossSwap","transaction","slippage","chainInfo","depositFee","view","setView","tx","setTx","doCrossSwap","swapStatus","swapInfo","doSwap","res","useSwap","woofiDexDepositorAdress","txPayload","SingleSwap","doSingleSwap","Swap","SwapDialog","isMobile","visible","hide","resolve","reject","onOpenChange","onComplete","isSuccss","onCancel","commonProps","useDebouncedCallback","useWooCrossSwapQuery","queryDestinationFee","params","queryString","useWooSwapQuery","useSwapEnquiry","quantity","queryParams","wooSwapQuery","wooCrossSwapQuery","queryParamsRef","setAmount","warningMessage","setWarningMessage","querying","queryStart","queryStop","transactionInfo","setTransactionInfo","enquiry","enquirySuccessHandle","swapFee","bridgeFee","fee","amountValue","cleanTransactionInfo","enquiryErrorHandle","debouncedEnquiry","qty","toNonExponential","useSwapFee","isNativeToken","srcSymbol","destinationGasFee","markPrices","nativeMarkPrice","symbolPrice","nativeDp","srcDp","totalFeeQty","ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY","useSwapDeposit","currentChain","setQuantity","setSlippage","swapAmount","swapRevalidating","cleanData","onSwapDeposit","swapPrice","swapQuantity","useActionType","allowance","allowanceNum","maxQty","useChains","int2hex","praseChainIdToNumber","useChainSelect","linkDeviceStorage","settingChain","setChain","findByChainId","chainId","onChainChange","switched","useDepositAction","approve","deposit","enableCustomDeposit","customDeposit","onSuccess","submitting","setSubmitting","doDeposit","knownErrorMessage","num","useInputStatus","inputStatus","setInputStatus","setHintMessage","useToken","filter","setSourceToken","setTargetToken","sourceTokens","setSourceTokens","targetTokens","setTargetTokens","onChainInited","a","b","usdcToken","usdc","collateralRatio","collateralContribution","calcMinimumReceived","SWAP_USDC_PRECISION","useDepositFormScript","feeWarningMessage","setFeeWarningMessage","onSourceTokenChange","onTargetTokenChange","indexPrices","depositFeeRevalidating","balanceRevalidating","swapWarningMessage","onSlippageChange","userMaxQtyMessage","useDepositFee","collateralContributionQuantity","currentLTV","useCollateralValue","negative_usdc_threshold","isConvertThresholdLoading","useConvertThreshold","gasFeeMessage","targetQuantity","minimumReceived","tokenInfo","memoizedCollateralRatio","DepositForm","onQuantityChange","targetQuantityLoading","renderContent","DepositFormWidget","Tabs","TabPanel","TextAreaInput","onChange","textareaRef","handleChange","textarea","ExclamationFillIcon","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlePnl","tooltipContent","dialogContent","settlePnlDialog","CrossWithdrawConfirm","networkName","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","checkIsBridgeless","onTransfer","preWithdraw","renderButton","WithdrawWarningMessage","chainVaultBalance","crossChainTrans","tokenName","qtyGreaterThanMaxAmount","qtyGreaterThanVault","WithdrawForm","tokenChains","withdrawTo","internalWithdrawPanel","useAssetsHistory","useMemoizedFn","useWalletTopic","useWithdraw","AssetHistorySideEnum","AssetHistoryStatusEnum","usePositionStream","useSettlePnl","positionData","useInternalTransfer","useInternalWithdraw","close","decimals","setWithdrawTo","toAccountId","setToAccountId","transfer","errorMsg","useWithdrawFee","useWithdrawLTV","ltvWarningMessage","threshold","useWithdrawFormScript","setCrossChainTrans","assetHistory","walletName","withdraw","maxAmount","unsettledPnL","internalWithdrawState","vaultBalance","qtyNum","minAmountWarningMessage","minAmount","showQty","handleWalletTopic","txId","WithdrawFormWidget","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","registerSimpleDialog","registerSimpleSheet","ExtensionPositionEnum","ExtensionSlot","DepositSlot","WithdrawSlot","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","DepositAndWithdraw","activeTab","setActiveTab","SwapDepositForm","tokensFilter","setToken","setTokens","newToken","useSwapDepositFormScript","SwapDepositFormWidget","AccountSelect","subAccounts","subAccount","asset","TransferForm","toAccountAsset","fromAccounts","toAccounts","fromAccount","onFromAccountChange","toAccount","onToAccountChange","onExchange","useSubAccountDataObserver","useSubAccountMaxWithdrawal","useTransfer","useTokensInfo","zero","DEFAULT_TOKEN","useTransferFormScript","setFromAccount","setToAccount","mainAccount","setMainAccount","holdingMap","setHoldingMap","isMainAccount","tokensInfo","currentMaxAmount","currentUnsettledPnL","mainAccountId","observerAccountId","currentHasPositions","portfolio","positions","subAccountMaxAmount","formHasPositions","_mainAccount","firstSubAccount","selectAccount","TransferDialogId","TransferSheetId","TransferFormWidget","TransferWidget","ConvertAction","onConvert","useConvert","useOdosQuote","nativeETHAddress","Arbitrum","splitTokenBySymbol","items","defaultValue","newTokensInfo","findToken","others","defaultToken","ORDERLY_CONVERT_SLIPPAGE_KEY","normalizeAmount","unnormalizeAmount","useConvertFormScript","_token","convert","postQuote","quoteData","isQuoteLoading","memoizedOutAmounts","memoizedConvertRate","memoizedMinimumReceived","ConvertFormUI","convertRate","outAmounts","ConvertDialogId","ConvertSheetId","ConvertFormWidget","CloseIcon","DepositStatus","canTrade","pendingCount","completedCount","DepositStatusContent","count","estimatedTime","clickable","Dot","useBalanceTopic","useTransferHistory","isSolana","ethers","blockCount","getEvmBlockTime","provider","latest","timestamps","_","i","sum","diff","DefaultSolanaWalletAdapter","getSolanaBlockTime","walletAdapter","samples","totalBlockTime","validSamples","sample","blockTime","getBlockTime","getAppUlnConfigAbi_default","CHAIN_ID_TO_ENDPOINT_ID","getEndpointId","getChainConfirmations","isMainnet","publicRpcUrl","contractAddress","endpointId","useTransactionTime","setBlockTime","confirmations","setConfirmations","timeMap","confirmationsMap","id","time","getTimeRange","endTime","useDepositStatusScript","depositDataRange","setDepositDataRange","transferDataRange","setTransferDataRange","depositPending","setDepositPending","depositCompleted","setDepositCompleted","transferCompleted","setTransferCompleted","pendingList","setPendingList","hideNotificationTimeMap","setHideNotificationTimeMap","transactionTime","seconds","formatEstimatedTime","transferHistory","updateDepositTimeRange","updateTransferTimeRange","hidePendingNotificationTime","hideCompletedNotificationTime","completedList","onClose","totalSeconds","sec","minutes","DepositStatusWidget"],"mappings":"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M,UACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,kBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,KAAM,OACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,qBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,wBACN,QAAS,CACP,CACE,aAAc,YACd,KAAM,GACN,KAAM,WACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,8BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,kBACd,KAAM,KACN,KAAM,SACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,kBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,oBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,aAAc,mDACd,KAAM,kBACN,KAAM,OACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,SACd,KAAM,kBACN,KAAM,QACR,CACF,EACA,KAAM,aACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,eACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,mBACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,oBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,aAAc,mDACd,KAAM,kBACN,KAAM,OACR,CACF,EACA,KAAM,oBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,0BACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,kBACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,uBACN,KAAM,SACR,CACF,EACA,KAAM,yBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,qBACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,CACF,EACA,KAAM,kBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,OACd,KAAM,oBACN,KAAM,MACR,CACF,EACA,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,kBACN,KAAM,QACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,2BACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,CACF,EACA,KAAM,mBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,iBACN,QAAS,CACP,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,aAAc,QACd,KAAM,GACN,KAAM,OACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,aAAc,QACd,KAAM,UACN,KAAM,OACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,WACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,UACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,OACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,KAAM,4BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,gBAAiB,UACjB,KAAM,SACR,CACF,EAEaC,GAA2B,CACtC,CAAE,OAAQ,CAAC,EAAG,gBAAiB,aAAc,KAAM,aAAc,EACjE,CACE,UAAW,GACX,OAAQ,CACN,CAAE,QAAS,GAAO,aAAc,QAAS,KAAM,UAAW,KAAM,OAAQ,CAC1E,EACA,KAAM,cACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,SACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CAAE,QAAS,GAAM,aAAc,UAAW,KAAM,KAAM,KAAM,SAAU,EACtE,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,CACF,EACA,KAAM,eACN,KAAM,OACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,qBACN,QAAS,CAAC,CAAE,aAAc,UAAW,KAAM,GAAI,KAAM,SAAU,CAAC,EAChE,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,CAAE,aAAc,UAAW,KAAM,aAAc,KAAM,SAAU,CAAC,EACzE,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,CAAE,aAAc,UAAW,KAAM,aAAc,KAAM,SAAU,CAAC,EACzE,KAAM,aACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UA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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, textVariants, Text } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { ActionButton } from \"../actionButton\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { CollateralContribution } from \"../collateralContribution\";\nimport { CollateralRatioWidget } from \"../collateralRatio\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { Notice } from \"../swap/components/notice\";\nimport { SwapFee } from \"../swap/components/swapFee\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { SwapIndicator } from \"../swapIndicator\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport {\n SWAP_USDC_PRECISION,\n type DepositFormScriptReturn,\n} from \"./depositForm.script\";\n\nexport const DepositForm: FC<DepositFormScriptReturn> = (props) => {\n const {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n amount,\n quantity,\n collateralContributionQuantity,\n maxQuantity,\n onQuantityChange,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n fetchBalance,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n fee,\n collateralRatio,\n currentLTV,\n nextLTV,\n slippage,\n onSlippageChange,\n minimumReceived,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapFee,\n warningMessage,\n usdcToken,\n targetQuantity,\n targetQuantityLoading,\n } = props;\n\n const { t } = useTranslation();\n\n const renderContent = () => {\n if (needSwap || needCrossSwap) {\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={1} gapY={1}>\n <Flex width={\"100%\"} itemAlign=\"center\" justify=\"between\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.convertRate\")}\n </Text>\n <SwapCoin\n sourceSymbol={sourceToken?.display_name || sourceToken?.symbol}\n targetSymbol={targetToken?.display_name || targetToken?.symbol}\n precision={SWAP_USDC_PRECISION}\n indexPrice={swapPrice}\n />\n </Flex>\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n value={minimumReceived}\n symbol={targetToken?.symbol ?? \"\"}\n precision={SWAP_USDC_PRECISION}\n />\n <SwapFee {...swapFee} />\n </Flex>\n );\n }\n\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <CollateralRatioWidget value={collateralRatio} />\n <CollateralContribution\n // it need to use USDC precision\n precision={usdcToken?.precision ?? 6}\n value={collateralContributionQuantity}\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n <Fee {...fee} />\n </Flex>\n );\n };\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Web3Wallet />\n <Box mt={3} mb={1}>\n <ChainSelect\n chains={chains}\n value={currentChain!}\n onValueChange={onChainChange}\n wrongNetwork={wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n token={sourceToken}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n status={inputStatus}\n hintMessage={hintMessage}\n fetchBalance={fetchBalance}\n data-testId=\"oui-testid-deposit-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={sourceToken}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity);\n }}\n />\n\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={targetToken}\n tokens={targetTokens}\n onTokenChange={onTargetTokenChange}\n value={targetQuantity}\n loading={targetQuantityLoading}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n {renderContent()}\n </Box>\n\n <SwapIndicator\n sourceToken={sourceToken?.symbol}\n targetToken={targetToken?.symbol}\n className=\"oui-mb-3\"\n />\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={sourceToken?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n onApproveAndDeposit={onApproveAndDeposit}\n networkId={networkId}\n />\n </Flex>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"@orderly.network/hooks\";\nimport type { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const useLtvScript = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n revalidateOnFocus: false,\n },\n );\n const ltvThreshold = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.ltv_threshold).mul(100).toNumber()}%`;\n }, []);\n return {\n ltv_threshold: ltvThreshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nexport type LtvScriptReturns = ReturnType<typeof useLtvScript>;\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Tooltip, Text, Box } from \"@orderly.network/ui\";\nimport type { LtvScriptReturns } from \"./ltv.script\";\n\nconst TooltipIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGProps<SVGSVGElement>\n>((props, ref) => {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n});\n\nconst calculateTextColor = (val: number): string => {\n if (val >= 0 && val < 50) {\n return \"oui-text-success\";\n } else if (val >= 50 && val < 80) {\n return \"oui-text-warning\";\n } else if (val >= 80) {\n return \"oui-text-danger\";\n } else {\n return \"\";\n }\n};\n\nconst TooltipContent: React.FC<{\n isLoading: boolean;\n ltv_threshold: string;\n}> = (props) => {\n const { isLoading, ltv_threshold } = props;\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-72 oui-max-w-72\">\n <Text size=\"2xs\" intensity={80}>\n {t(\"transfer.LTV.description\", {\n threshold: isLoading ? \"-\" : ltv_threshold,\n })}\n </Text>{\" \"}\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className={\n \"oui-border-b oui-border-dashed oui-border-line-12 oui-text-2xs oui-text-primary\"\n }\n >\n {t(\"tradingLeaderboard.learnMore\")}\n </a>\n </Box>\n );\n};\n\nexport const LtvUI: React.FC<\n Readonly<\n LtvScriptReturns & {\n currentLtv: number;\n nextLTV: number;\n showDiff?: boolean;\n }\n >\n> = (props) => {\n const { t } = useTranslation();\n const { currentLtv, nextLTV, showDiff, ltv_threshold, isLoading } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.LTV\")}\n </Text>\n <Tooltip\n className=\"oui-p-2\"\n content={\n <TooltipContent\n isLoading={isLoading}\n ltv_threshold={ltv_threshold}\n />\n }\n >\n <TooltipIcon className=\"oui-ml-[2px] oui-cursor-pointer oui-text-base-contrast-36\" />\n </Tooltip>\n </Flex>\n {showDiff ? (\n <Flex itemAlign=\"center\" justify=\"between\" gap={1}>\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n →\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(nextLTV))}\n >\n {nextLTV}%\n </Text>\n </Flex>\n ) : (\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n )}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useLtvScript } from \"./ltv.script\";\nimport { LtvUI } from \"./ltv.ui\";\n\nexport const LtvWidget: React.FC<\n Readonly<{\n currentLtv: number;\n nextLTV: number;\n showDiff?: boolean;\n }>\n> = (props) => {\n const state = useLtvScript();\n return <LtvUI {...props} {...state} />;\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, ButtonProps } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { DepositAction } from \"../../types\";\n\nexport type ActionButtonProps = {\n disabled?: boolean;\n loading?: boolean;\n actionType: DepositAction;\n symbol?: string;\n onDeposit?: () => void;\n onApprove?: () => void;\n onApproveAndDeposit?: () => void;\n networkId?: NetworkId;\n};\n\nexport const ActionButton: React.FC<ActionButtonProps> = (props) => {\n const {\n disabled,\n loading,\n actionType,\n symbol = \"USDC\",\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n networkId,\n } = props;\n const { t } = useTranslation();\n\n const buttonParams = useMemo(() => {\n const params: Partial<Record<DepositAction, ButtonProps>> = {\n // [DepositAction.Approve]: {\n // // Approve & Deposit\n // children: t(\"transfer.deposit.approve\"),\n // onClick: onApprove,\n // // approve not disabled button\n // disabled: false,\n // \"data-testid\": \"oui-testid-deposit-dialog-approve-btn\",\n // },\n [DepositAction.ApproveAndDeposit]: {\n children: `${t(\"transfer.deposit.approve\")} & ${t(\"common.deposit\")}`,\n onClick: onApproveAndDeposit,\n // approve not disabled button\n // disabled: false,\n },\n // [DepositAction.Increase]: {\n // children: t(\"transfer.deposit.increase.symbol\", { symbol }),\n // onClick: onApprove,\n // \"data-testid\": \"oui-testid-deposit-dialog-increase-btn\",\n // },\n [DepositAction.Deposit]: {\n children: t(\"common.deposit\"),\n onClick: onDeposit,\n \"data-testid\": \"oui-testid-deposit-dialog-deposit-btn\",\n },\n };\n\n return params[actionType];\n }, [onApprove, onDeposit, actionType, symbol, t]);\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={buttonSize}\n {...buttonParams}\n />\n </AuthGuard>\n </Box>\n );\n};\n","export type DST = {\n symbol: string;\n address?: string;\n decimals?: number;\n chainId?: number;\n network?: string;\n};\n\nexport enum DepositAction {\n Deposit,\n Approve,\n ApproveAndDeposit,\n // Increase,\n}\n\nexport enum WithdrawTo {\n /** withdraw to web3 wallet */\n Wallet = \"wallet\",\n /** withdraw to other account id */\n Account = \"accountId\",\n}\n\nexport type InputStatus = \"error\" | \"warning\" | \"success\" | \"default\";\n","import { FC, useMemo } from \"react\";\nimport { useIndexPricesStream } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Spinner, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type AvailableQuantityProps = {\n token?: Partial<API.TokenInfo>;\n amount?: number | string;\n maxQuantity?: number | string;\n onClick?: () => void;\n loading?: boolean;\n};\n\nexport const AvailableQuantity: FC<AvailableQuantityProps> = (props) => {\n const { amount, maxQuantity, token, loading } = props;\n const { t } = useTranslation();\n\n const { getIndexPrice } = useIndexPricesStream();\n\n const name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n const notional = useMemo(() => {\n if (amount && token?.symbol && getIndexPrice(token?.symbol)) {\n return new Decimal(amount)\n .mul(getIndexPrice(token?.symbol) || 1)\n .toNumber();\n }\n return 0;\n }, [amount, token?.symbol]);\n\n return (\n <Flex px={2}>\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {notional}\n </Text.numeral>\n </Text>\n\n <Flex gapX={2} itemAlign=\"center\" className=\"oui-ml-auto\">\n <Flex gapX={1} itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"common.available\")}: `}\n </Text>\n\n {loading ? (\n <Spinner size=\"sm\" />\n ) : (\n <Text.numeral\n size=\"2xs\"\n intensity={36}\n rm={Decimal.ROUND_DOWN}\n dp={dp}\n padding={false}\n data-testid=\"oui-testid-withdraw_deposit-dialog-available-value\"\n >\n {maxQuantity!}\n </Text.numeral>\n )}\n\n <Text size=\"2xs\" intensity={36}>\n {` ${name}`}\n </Text>\n </Flex>\n\n <Text\n size=\"2xs\"\n color=\"primary\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={props.onClick}\n >\n {t(\"common.max\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { useAppConfig } from \"@orderly.network/react-app\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const BrokerWallet: FC = () => {\n const { t } = useTranslation();\n const { appIcons } = useAppConfig();\n const brokerName = useConfig(\"brokerName\");\n\n const icon = useMemo(() => {\n const { secondary } = appIcons || {};\n\n if (!secondary?.img && secondary?.component) return null;\n\n if (secondary?.img) {\n return <img src={secondary?.img} className=\"oui-w-5 oui-h-5\" />;\n }\n\n if (secondary?.component) {\n return <>{secondary.component}</>;\n }\n }, [appIcons]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.brokerAccount\", { brokerName })}\n </Text>\n {icon}\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n ChainIcon,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\nimport { CurrentChain } from \"../depositForm/hooks\";\n\ntype ChainSelectProps = {\n chains: API.NetworkInfos[];\n value: CurrentChain;\n onValueChange: (chain: API.NetworkInfos) => Promise<void>;\n wrongNetwork: boolean;\n loading?: boolean;\n};\n\nexport const ChainSelect: React.FC<ChainSelectProps> = (props) => {\n const { chains, value, wrongNetwork, loading } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n const selectable = wrongNetwork || chains?.length > 1;\n\n const chainIcon = wrongNetwork ? (\n <Flex\n width={18}\n height={18}\n intensity={100}\n r=\"full\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Text size=\"2xs\" intensity={80}>\n U\n </Text>\n </Flex>\n ) : (\n <ChainIcon className=\"oui-size-[18px]\" chainId={value?.id} />\n );\n\n const chainName = wrongNetwork ? \"Unknown\" : value?.info?.network_infos?.name;\n\n const renderRightIcon = () => {\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n if (selectable) {\n return <ExchangeIcon className=\"oui-text-base-contrast-54\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-t-xl oui-rounded-b-sm oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <div>\n <Flex>\n <Text size=\"2xs\" intensity={54}>\n {t(\"transfer.network\")}\n </Text>\n </Flex>\n <Flex gapX={1}>\n {chainIcon}\n <Text size=\"sm\" intensity={80}>\n {chainName}\n </Text>\n </Flex>\n </div>\n {renderRightIcon()}\n </Flex>\n );\n\n const content = chains.map((chain, index) => {\n const isActive = chain.chain_id === value?.id;\n return (\n <Flex\n key={chain.chain_id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-deposit-network-select-item\",\n \"hover:oui-bg-base-5 oui-h-[30px] oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n await props.onValueChange(chain);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <ChainIcon className=\"oui-size-[18px]\" chainId={chain.chain_id} />\n <Text size=\"2xs\" intensity={54}>\n {chain.name}\n </Text>\n </Flex>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-deposit-network-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-deposit-token-select-dropdown-menu-content\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-rounded-md oui-select-none\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content}</div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import React, { FC, SVGProps } from \"react\";\n\nexport const ExchangeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10.997 8.004a.5.5 0 0 0-.14-.36l-1.86-1.843-.703.703.984 1h-7.28a.5.5 0 0 0 0 1h7.28l-.984 1 .703.703 1.86-1.844a.5.5 0 0 0 .14-.36m-.5-4a.5.5 0 0 0-.5-.5H2.716l.984-1-.703-.703-1.859 1.843a.515.515 0 0 0 0 .719l1.86 1.844.702-.703-.984-1h7.281a.5.5 0 0 0 .5-.5\" />\n </svg>\n);\n\nexport const ArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M9.994 5.51a.83.83 0 0 0-.832.833v6.295l-2.498-2.471-1.17 1.17 3.902 3.929a.84.84 0 0 0 .599.244.84.84 0 0 0 .597-.244l3.903-3.928-1.171-1.171-2.498 2.471V6.343a.83.83 0 0 0-.832-.833\" />\n </svg>\n);\n\nexport const SelectArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2.503 3.332a.412.412 0 0 0-.326.664l2.5 3.333a.414.414 0 0 0 .664 0l2.5-3.333a.417.417 0 0 0-.338-.664z\" />\n </svg>\n);\n\nexport const RefreshIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.00342 1.49561C4.97642 1.49561 3.99542 1.84011 3.20642 2.46461C2.98992 2.63561 2.95692 2.9511 3.12842 3.1676C3.29992 3.3841 3.61492 3.4171 3.83142 3.2456C4.44492 2.7601 5.20392 2.4956 6.00342 2.4956C7.93642 2.4956 9.50342 4.0626 9.50342 5.9956H8.50342L10.0034 7.9956L11.5034 5.9956H10.5034C10.5034 3.5101 8.48892 1.49561 6.00342 1.49561ZM2.00342 3.9956L0.503418 5.9956H1.50342C1.50342 8.4811 3.51792 10.4956 6.00342 10.4956C7.03092 10.4956 8.01142 10.1516 8.80042 9.52659C9.01692 9.35559 9.04992 9.0401 8.87842 8.8236C8.70692 8.6071 8.39191 8.5741 8.17542 8.7456C7.56142 9.2316 6.80342 9.4956 6.00342 9.4956C4.07042 9.4956 2.50342 7.9286 2.50342 5.9956H3.50342L2.00342 3.9956Z\" />\n </svg>\n);\n\nexport const TransferVerticalIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M12.385 4.565a.6.6 0 0 0-.427.167L9.764 6.944l.837.837 1.19-1.17v8.66a.595.595 0 0 0 1.19 0v-8.66l1.189 1.17.836-.837-2.193-2.212a.6.6 0 0 0-.428-.167m-4.758.595a.595.595 0 0 0-.595.595v8.661l-1.19-1.17-.836.836L7.2 16.294a.61.61 0 0 0 .855 0l2.194-2.212-.837-.836-1.19 1.17V5.755a.595.595 0 0 0-.594-.595\" />\n </svg>\n);\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const CollateralContribution: React.FC<{\n value: number;\n precision: number;\n}> = (props) => {\n const { t } = useTranslation();\n const { value, precision } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.collateralContribution\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n rm={Decimal.ROUND_DOWN}\n className={cn(\"oui-font-semibold\")}\n padding={false}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36} className=\"oui-select-none\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\n// import type { CollateralRatioReturns } from \"./collateralRatio.script\";\n\nconst TooltipIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGProps<SVGSVGElement>\n>((props, ref) => {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n});\n\nconst TooltipContent: React.FC = () => {\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-72 oui-max-w-72\">\n <Text size=\"2xs\" intensity={80}>\n {t(\"portfolio.overview.column.collateralRatio.explain\")}\n </Text>{\" \"}\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className={\n \"oui-border-b oui-border-dashed oui-border-line-12 oui-text-2xs oui-text-primary\"\n }\n >\n {t(\"tradingLeaderboard.learnMore\")}\n </a>\n </Box>\n );\n};\n\nexport const CollateralRatioUI: React.FC<{ value: number }> = (props) => {\n const { t } = useTranslation();\n const { value } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"portfolio.overview.column.collateralRatio\")}\n </Text>\n <Tooltip className=\"oui-p-2\" content={<TooltipContent />}>\n <TooltipIcon className=\"oui-ml-[2px] oui-cursor-pointer oui-text-base-contrast-36\" />\n </Tooltip>\n </Flex>\n <Text.numeral\n dp={2}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n rule=\"percentages\"\n >\n {value}\n </Text.numeral>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { CollateralRatioUI } from \"./collateralRatio.ui\";\n\nexport const CollateralRatioWidget: React.FC<{ value: number }> = (props) => {\n return <CollateralRatioUI {...props} />;\n};\n","import { FC, ReactNode } from \"react\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../../icons\";\n\ntype ExchangeDividerProps = {\n icon?: ReactNode;\n};\n\nexport const ExchangeDivider: FC<ExchangeDividerProps> = ({ icon }) => {\n return (\n <Flex height={40} gapX={3}>\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n {icon || <ArrowDownIcon className=\"oui-text-primary-light\" />}\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { type UseDepositFeeReturn } from \"../depositForm/depositForm.script\";\n\nexport const Fee: FC<Partial<UseDepositFeeReturn>> = (props) => {\n const { dstGasFee, feeQty, feeAmount, dp, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={1}>\n <Text size=\"2xs\" intensity={54}>\n {`${t(\"transfer.deposit.destinationGasFee\")}: `}\n </Text>\n <Text.numeral\n intensity={80}\n dp={dp}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {feeQty!}\n </Text.numeral>\n <Text intensity={54}>{nativeSymbol}</Text>\n </Flex>\n <Box mt={2}>\n <Text intensity={36}>\n {t(\"transfer.deposit.destinationGasFee.description\")}\n </Text>\n </Box>\n </div>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const showFeeQty = !!dstGasFee && dstGasFee !== \"0\";\n\n return (\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\"\n onClick={onShowFee}\n >\n {`${t(\"transfer.deposit.estGasFee\")} ≈ `}\n <Text size=\"2xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount!}\n </Text.numeral>{\" \"}\n </Text>\n {showFeeQty && (\n <span>\n (\n <Text intensity={54}>\n <Text.numeral dp={dp} padding={false} rm={Decimal.ROUND_UP}>\n {feeQty!}\n </Text.numeral>\n {nativeSymbol}\n </Text>\n )\n </span>\n )}\n </Text>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const MinimumReceived: React.FC<\n Readonly<{ symbol: string; value: number | string; precision: number }>\n> = (props) => {\n const { t } = useTranslation();\n const { value, symbol, precision = 6 } = props;\n\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.swapDeposit.minimumReceived\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n className=\"oui-select-none\"\n intensity={80}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" className=\"oui-select-none\" intensity={36}>\n {symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Input,\n Select,\n InputProps,\n cn,\n Box,\n Text,\n Flex,\n inputFormatter,\n Spinner,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { TokenOption } from \"./tokenOption\";\n\nexport type QuantityInputProps = {\n token?: API.TokenInfo;\n tokens?: API.TokenInfo[];\n label?: string;\n status?: InputStatus;\n hintMessage?: string;\n onValueChange?: (value: string) => void;\n onTokenChange?: (token: any) => void;\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n loading?: boolean;\n testId?: string;\n formatters?: InputFormatter[];\n vaultBalanceList?: API.VaultBalance[];\n displayType?: \"balance\" | \"vaultBalance\";\n checkVaultBalance?: boolean;\n} & Omit<InputProps, \"onClear\" | \"suffix\" | \"onValueChange\">;\n\nexport const QuantityInput: FC<QuantityInputProps> = (props) => {\n const {\n token,\n tokens = [],\n classNames,\n label,\n status,\n hintMessage,\n value,\n onValueChange,\n fetchBalance,\n onTokenChange,\n loading,\n placeholder,\n formatters,\n vaultBalanceList,\n displayType,\n checkVaultBalance = true,\n ...rest\n } = props;\n\n const { t } = useTranslation();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n\n const tokenOptions = useMemo(() => {\n return tokens.map((token) => {\n const currentToken = vaultBalanceList?.find(\n (item) => item.token === token.symbol,\n );\n const insufficientBalance = checkVaultBalance\n ? new Decimal(currentToken?.balance ?? 0).lt(value ? Number(value) : 0)\n : false;\n return {\n ...token,\n name: token.display_name || token.symbol!,\n insufficientBalance: insufficientBalance,\n };\n });\n }, [tokens, value, vaultBalanceList, checkVaultBalance]);\n\n useEffect(() => {\n const rect = inputRef?.current?.getBoundingClientRect();\n setWidth(rect?.width || 0);\n }, [inputRef]);\n\n const _onTokenChange = (value: string) => {\n const find = tokens.find((item) => item.symbol === value);\n if (find) {\n onTokenChange?.(find);\n }\n };\n\n const selectable = tokens.length > 1;\n const selectOpen = selectable ? open : false;\n\n const optionRenderer = (item: any) => {\n const isActive = item.symbol === token?.symbol;\n return (\n <TokenOption\n token={item}\n isActive={isActive}\n fetchBalance={fetchBalance}\n displayType={displayType}\n onTokenChange={(item) => {\n onTokenChange?.(item);\n setOpen(false);\n }}\n open={selectOpen}\n />\n );\n };\n\n const prefix = (\n <Box>\n <Box className=\"oui-absolute oui-top-0\">\n <Text size=\"2xs\" intensity={36}>\n {label || t(\"common.quantity\")}\n </Text>\n </Box>\n {loading && (\n <Box className=\"oui-absolute oui-bottom-1\">\n <Spinner size=\"sm\" />\n </Box>\n )}\n </Box>\n );\n\n const suffix = (\n <div className=\"oui-absolute oui-right-0\">\n <Select.tokens\n open={selectOpen}\n onOpenChange={setOpen}\n disabled={rest.disabled}\n variant=\"text\"\n tokens={tokenOptions}\n value={token?.display_name || token?.symbol}\n size={rest.size}\n onValueChange={_onTokenChange}\n showIcon\n optionRenderer={optionRenderer}\n contentProps={{\n onCloseAutoFocus: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n onClick: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n style: { width },\n align: \"end\",\n sideOffset: 5,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n </div>\n );\n\n const message = (\n <Flex mt={1} gapX={1} px={1}>\n <Box\n width={4}\n height={4}\n r=\"full\"\n className={cn(\n status === \"error\" && \"oui-bg-danger-light\",\n status === \"warning\" && \"oui-bg-warning-light\",\n )}\n ></Box>\n <Text\n size=\"2xs\"\n className={cn(\n status === \"error\" && \"oui-text-danger-light\",\n status === \"warning\" && \"oui-text-warning-light\",\n )}\n >\n {hintMessage}\n </Text>\n </Flex>\n );\n\n const _placeholder = placeholder ?? (loading ? \"\" : \"0\");\n\n return (\n <>\n <Input\n ref={inputRef}\n autoComplete=\"off\"\n placeholder={_placeholder}\n prefix={prefix}\n suffix={suffix}\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value);\n }}\n formatters={\n formatters || [\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(token?.precision ?? 2),\n inputFormatter.currencyFormatter,\n ]\n }\n {...rest}\n classNames={{\n ...classNames,\n root: cn(\n \"oui-relative oui-h-[54px] oui-px-3\",\n \"oui-rounded-lg oui-border oui-border-line\",\n status === \"error\" &&\n \"oui-outline-danger-light focus-within:oui-outline-danger-light\",\n status === \"warning\" &&\n \"oui-outline-warning-light focus-within:oui-outline-warning-light\",\n props.readOnly\n ? \"oui-border-none oui-bg-base-6 focus-within:oui-outline-0\"\n : \"oui-bg-base-5\",\n classNames?.root,\n ),\n input: cn(\"oui-absolute oui-bottom-0\", classNames?.input),\n }}\n />\n {hintMessage && message}\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Badge, cn, Flex, Spinner, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useBalance } from \"./useBalance\";\n\ninterface TokenOptionProps {\n token: API.TokenInfo & {\n label: string;\n value: string;\n insufficientBalance?: boolean;\n };\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n onTokenChange?: (token: API.TokenInfo) => void;\n isActive: boolean;\n index?: number;\n displayType?: \"balance\" | \"vaultBalance\";\n open?: boolean;\n}\n\nexport const TokenOption: React.FC<TokenOptionProps> = (props) => {\n const { token, isActive, displayType, onTokenChange, fetchBalance, open } =\n props;\n const { symbol, precision, insufficientBalance } = token;\n const { balance, loading } = useBalance(token, fetchBalance, open);\n\n const showBalance = typeof fetchBalance === \"function\";\n\n const { t } = useTranslation();\n\n if (displayType === \"vaultBalance\" && insufficientBalance) {\n return (\n <Flex\n key={symbol}\n itemAlign={\"center\"}\n justify=\"between\"\n px={2}\n r=\"base\"\n className={cn(\n \"group\",\n \"oui-h-[30px]\",\n \"oui-text-2xs oui-font-semibold\",\n isActive && \"oui-bg-base-5\",\n props.index !== 0 && \"oui-mt-[2px]\",\n \"oui-cursor-not-allowed\",\n )}\n >\n <Flex itemAlign=\"center\" gapX={1}>\n <TokenIcon name={symbol} className=\"oui-size-[16px] oui-opacity-50\" />\n <Text intensity={36}>{token.label}</Text>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"transfer.withdraw.InsufficientVaultBalance\")}\n </Badge>\n </Flex>\n </Flex>\n );\n }\n\n const renderValue = () => {\n if (!showBalance) {\n return null;\n }\n\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n\n return (\n <Text.numeral\n rule=\"price\"\n dp={precision ?? 2}\n rm={Decimal.ROUND_DOWN}\n className={cn(\n \"oui-text-base-contrast-80 group-hover:oui-text-base-contrast-54\",\n isActive && \"oui-text-base-contrast-54\",\n )}\n >\n {balance}\n </Text.numeral>\n );\n };\n\n return (\n <Flex\n key={symbol}\n justify=\"between\"\n px={2}\n r=\"base\"\n className={cn(\n \"group\",\n \"oui-h-[30px] hover:oui-bg-base-5\",\n \"oui-text-2xs oui-font-semibold\",\n \"oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n props.index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={() => {\n onTokenChange?.(token);\n }}\n >\n <Flex gapX={1}>\n <TokenIcon name={symbol} className=\"oui-size-[16px]\" />\n <Text\n className={cn(\n \"oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80\",\n isActive && \"oui-text-base-contrast-80\",\n )}\n >\n {token.label}\n </Text>\n </Flex>\n {renderValue()}\n </Flex>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nconst retryInterval = 1000;\n\nexport function useBalance(\n token: API.TokenInfo,\n fetchBalance?: (token: string, decimals: number) => Promise<any>,\n open?: boolean,\n) {\n const [balance, setBalance] = useState<string>(\"\");\n const balanceRef = useRef<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n const loopGetTokenBalance = async (timeout = 0) => {\n if (loading || typeof fetchBalance !== \"function\" || !token.address) {\n return;\n }\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (balanceRef.current === \"\") {\n // when balance is empty, set loading to true\n setLoading(true);\n }\n\n timeoutRef.current = setTimeout(async () => {\n try {\n const balance = await fetchBalance(token.address!, token.decimals!);\n setBalance(balance);\n balanceRef.current = balance;\n console.log(\"balance\", token.symbol, token.address, balance);\n } catch (err) {\n console.error(\"get balance error\", token.symbol, token.address, err);\n // when fetch balance failed, retry\n loopGetTokenBalance(retryInterval);\n } finally {\n if (balanceRef.current !== \"\") {\n setLoading(false);\n }\n }\n }, timeout);\n };\n\n useEffect(() => {\n if (open) {\n // get balance first, no timeout\n loopGetTokenBalance(0);\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [token, open]);\n\n return { balance, loading };\n}\n","import { FC, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlertDialog,\n Box,\n cn,\n EditIcon,\n Flex,\n Input,\n inputFormatter,\n Text,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ninterface SlippageProps {\n value?: number;\n onValueChange?: (value: number) => void;\n max?: number;\n min?: number;\n}\n\nconst options = [0.5, 1, 2];\n\nexport const Slippage: FC<SlippageProps> = (props) => {\n const { min = 0.2, max = 10 } = props;\n const [value, setValue] = useState<number>();\n const [customValue, setCustomValue] = useState(\"\");\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.value && !options.includes(props.value!)) {\n setCustomValue(props.value!.toString());\n } else {\n setValue(props.value);\n }\n }, [props.value, open]);\n\n const showSlippage = () => {\n setOpen(true);\n };\n\n const hideSlippage = () => {\n setOpen(false);\n };\n\n const onClick = (val: number) => {\n setValue(val);\n setCustomValue(\"\");\n };\n\n const onValueChange = (val: string) => {\n if (!val || Number(val) === 0) {\n setCustomValue(val);\n return;\n }\n\n const d = new Decimal(val);\n setValue(undefined);\n if (d.lt(min)) {\n setCustomValue(min.toString());\n } else if (d.gt(max)) {\n setCustomValue(max.toString());\n } else {\n setCustomValue(val);\n }\n };\n\n const getValue = () =>\n customValue ? new Decimal(customValue)?.toNumber() : value;\n\n const onConfirm = () => {\n const val = getValue();\n if (!val) return Promise.resolve(true);\n props.onValueChange?.(val);\n hideSlippage();\n // if custom value in options, then clear custom value\n if (options.includes(val)) {\n setCustomValue(\"\");\n }\n return Promise.resolve(true);\n };\n\n const disabled = !getValue();\n\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={2}>\n {options.map((item) => {\n const isActive = value === item;\n return (\n <SlippageItem\n key={item}\n value={item}\n isActive={isActive}\n onClick={() => {\n onClick(item);\n }}\n />\n );\n })}\n\n <Input\n suffix=\"%\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n ]}\n value={customValue}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-rounded-md oui-bg-base-6\",\n \"oui-h-[40px] oui-w-[74px]\",\n ),\n input: \"oui-text-base-contrast\",\n additional: \"oui-pl-1\",\n }}\n />\n </Flex>\n\n <Box mt={5}>\n <Text intensity={54}>\n {t(\"transfer.slippage.slippageTolerance.description\")}\n </Text>\n </Box>\n </div>\n );\n\n return (\n <>\n <AlertDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"transfer.slippage.slippageTolerance\")}\n okLabel={t(\"common.confirm\")}\n message={content}\n onOk={onConfirm}\n actions={{ primary: { disabled } }}\n />\n <Flex\n width=\"100%\"\n justify=\"between\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={showSlippage}\n >\n <Text intensity={36} size=\"2xs\">\n {t(\"transfer.slippage\")}\n </Text>\n <Flex gapX={1}>\n <Text size=\"2xs\" color=\"primaryLight\">\n {props.value}%\n </Text>\n <EditIcon className=\"oui-size-3 oui-text-primary-light\" />\n </Flex>\n </Flex>\n </>\n );\n};\n\ntype SlippageItemProps = {\n value: number;\n isActive: boolean;\n onClick: () => void;\n};\n\nconst SlippageItem: FC<SlippageItemProps> = ({ value, isActive, onClick }) => {\n return (\n <Flex\n intensity={600}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"md\"\n width={74}\n height={40}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive && \"oui-bg-primary-light\",\n )}\n onClick={onClick}\n >\n <Text size=\"sm\" intensity={80}>\n {value}%\n </Text>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { Box, Text } from \"@orderly.network/ui\";\nimport { modal } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\n\ntype NoticeProps = {\n message?: string;\n needSwap?: boolean;\n needCrossSwap?: boolean;\n wrongNetwork?: boolean;\n networkId?: NetworkId;\n};\n\nexport const Notice: FC<NoticeProps> = (props) => {\n const { message, needSwap, needCrossSwap, wrongNetwork, networkId } = props;\n const { t } = useTranslation();\n\n const showChainSelect = () => {\n modal.show(ChainSelectorDialogId, { networkId });\n };\n\n const content = useMemo(() => {\n if (wrongNetwork) {\n return t(\"connector.wrongNetwork.tooltip\");\n }\n\n if (message) {\n return message;\n }\n\n if (needCrossSwap) {\n return (\n <Text>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.crossSwap.notice\"\n components={[\n <Text\n key=\"0\"\n className=\"oui-cursor-pointer\"\n color=\"primaryLight\"\n onClick={showChainSelect}\n />,\n ]}\n />\n </Text>\n );\n }\n\n if (needSwap) {\n return t(\"transfer.swapDeposit.swap.notice\");\n }\n }, [message, needSwap, needCrossSwap, wrongNetwork, t]);\n\n if (content) {\n return (\n <Box\n mb={3}\n className=\"oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Box>\n );\n }\n\n return null;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Divider, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { UseSwapFee } from \"../hooks/useSwapFee\";\n\ntype SwapFeeProps = UseSwapFee;\n\nexport const SwapFee: FC<SwapFeeProps> = (props) => {\n const { feeQtys, feeAmount, feeDetails, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <Box className=\"oui-text-2xs\">\n {feeDetails?.map((item, index) => {\n const isEnd = index === feeDetails?.length - 1;\n return (\n <Box key={index}>\n <Flex gapX={1}>\n <Text intensity={54}>{item.title}:</Text>\n {/* TODO: format price in data */}\n <Text\n intensity={80}\n // dp={item.dp}\n // rm={Decimal.ROUND_UP}\n // padding={false}\n >\n {item.value}\n </Text>\n <Text intensity={54}>{item.symbol}</Text>\n </Flex>\n\n <Box mt={2}>\n <Text intensity={36}>{item.description}</Text>\n </Box>\n\n {!isEnd && (\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const renderFeeQty = () => {\n const len = feeQtys?.length;\n if (!len) return;\n\n const list = feeQtys.map((item, index) => {\n return (\n <Text intensity={54} key={index}>\n <Text.numeral dp={item.dp} padding={false} rm={Decimal.ROUND_UP}>\n {item.value}\n </Text.numeral>\n {` ${item.symbol || nativeSymbol}`}\n </Text>\n );\n });\n\n if (len === 1) {\n return <span>({list})</span>;\n }\n\n if (len === 2) {\n return (\n <span>\n ({list[0]} + {list[1]})\n </span>\n );\n }\n };\n\n return (\n <Text\n size=\"xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n onClick={onShowFee}\n >\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount}\n </Text.numeral>\n {` `}\n </Text>\n\n {renderFeeQty()}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\n\ninterface SwapCoinProps {\n className?: string;\n sourceSymbol?: string;\n targetSymbol?: string;\n indexPrice: number | string;\n precision?: number;\n}\n\nexport const SwapCoin: FC<SwapCoinProps> = (props) => {\n const { sourceSymbol, targetSymbol, indexPrice, precision = 6 } = props;\n return (\n <Flex\n itemAlign=\"center\"\n gap={1}\n className={cn(props.className, \"oui-text-2xs\")}\n >\n <Text size=\"2xs\" intensity={80}>\n 1\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {sourceSymbol}\n </Text>\n =\n <Text.numeral size=\"2xs\" intensity={80} dp={precision} padding={false}>\n {indexPrice}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36}>\n {targetSymbol}\n </Text>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { ArrowRightIcon } from \"../swap/icons\";\n\nexport const SwapIndicator: React.FC<{\n sourceToken?: string;\n targetToken?: string;\n className?: string;\n}> = (props) => {\n const { sourceToken, targetToken, className } = props;\n\n if (sourceToken === targetToken) {\n return null;\n }\n\n return (\n <Flex\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={className}\n >\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={sourceToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {sourceToken}\n </Text>\n </Flex>\n <ArrowRightIcon className=\"oui-size-4\" />\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={targetToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {targetToken}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n","import { FC, SVGProps } from \"react\";\n\nexport const EditIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.498.977a.5.5 0 0 0-.36.14l-1.5 1.501-4.503 4.503-.5.5a.5.5 0 0 0-.125.266l-.5 2.501c-.07.35.228.648.578.579l2.501-.5a.5.5 0 0 0 .266-.126l.5-.5 4.503-4.503 1.5-1.5a.5.5 0 0 0 .141-.36c0-.818-.208-1.403-.64-1.845-.437-.445-1.02-.656-1.861-.656m.197 1.01c.451.026.744.13.944.334.205.21.335.5.363.942-.274.273-.675.668-1.004.997L7.716 2.978c.33-.329.705-.718.979-.992m-1.698 1.71L8.28 4.979 4.496 8.762 3.214 7.48zM2.495 8.199l1.282 1.282-.047.047c-.33.066-.997.206-1.61.329l.328-1.61z\" />\n </svg>\n);\n\nexport const ArrowRightIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"25\"\n viewBox=\"0 0 24 25\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 12.493a1 1 0 0 1 .999-1h7.555L11.6 8.498l1.405-1.405 4.714 4.683c.196.195.293.457.293.719 0 .26-.098.522-.293.717l-4.714 4.683L11.6 16.49l2.966-2.997H7.011a1 1 0 0 1-.999-1\" />\n </svg>\n);\n\nexport const GasFeeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 2.67v10.663h4.667V2.667H4zm6-.003v2.666h1c.218 0 .53.06.806.26.31.223.527.59.527 1.074V12h1V6.667c0-.045 0-.154-.027-.277a.5.5 0 0 0-.11-.252l-1.668-1.667a.667.667 0 0 1 .943-.942l1.667 1.666c.294.294.417.658.472.915.057.264.057.486.057.555V12c0 .484-.217.85-.527 1.074-.277.2-.589.26-.807.26h-1c-.484 0-.85-.217-1.074-.528a1.4 1.4 0 0 1-.26-.806V6.667H10v6.666h.667a.667.667 0 0 1 0 1.334H2a.667.667 0 0 1 0-1.334h.667V2.667c0-.218.06-.53.259-.807.223-.31.59-.527 1.074-.527h4.667c.217 0 .53.06.806.26.31.223.527.59.527 1.074m-4.667 2a.667.667 0 0 0 0 1.333h2a.667.667 0 0 0 0-1.333z\"\n />\n </svg>\n);\n\nexport const TopRightArrowIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"13\"\n height=\"12\"\n viewBox=\"0 0 13 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.996 10.496a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2zm-4-2.5a.5.5 0 0 1-.36-.14.515.515 0 0 1 0-.72l2-2-1.14-1.14h3v3l-1.14-1.14-2 2a.5.5 0 0 1-.36.14\" />\n </svg>\n);\n\nexport const WoofiIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#07080A\" />\n <path\n d=\"M5.077 7.385h2.269l1.604 5.28c.106.348.196.73.196.73s.138-.413.28-.742l.885-2.052a1.8 1.8 0 0 1 .66-.782 1.81 1.81 0 0 1 1.974 0c.293.191.523.463.662.782l2.143 4.91v1.095h-1.402c-.235 0-.464-.07-.66-.2a1.17 1.17 0 0 1-.434-.53l-1.303-3.16-1.243 3.152a1.19 1.19 0 0 1-1.105.747h-.848c-.235 0-.465-.075-.654-.214a1.1 1.1 0 0 1-.4-.556z\"\n fill=\"#FEFEFE\"\n />\n <path d=\"m18.146 10.846 1.066-3.461h-2.396l-1.066 3.461z\" fill=\"url(#a)\" />\n <path\n d=\"m15.371 12-1.208 3.865v.009c-.073.216-.194.529-.514.51a.33.33 0 0 1-.207-.058c.211.186.482.29.763.29h1.428a1.065 1.065 0 0 0 .928-.75L17.769 12z\"\n fill=\"url(#b)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"14.618\"\n y1=\"16.592\"\n x2=\"17.597\"\n y2=\"7.455\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n <linearGradient\n id=\"b\"\n x1=\"16.192\"\n y1=\"16.587\"\n x2=\"18.206\"\n y2=\"7.458\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { FC, useMemo } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@orderly.network/types\";\nimport { Flex, Text, WalletIcon } from \"@orderly.network/ui\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const address = useMemo(() => {\n let address = accountState.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, accountState, account, connectedChain]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.web3Wallet.your\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"xs\"} name={wallet?.label ?? \"\"} />\n <Text.formatted size=\"sm\" intensity={54} rule=\"address\">\n {address}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useConfig,\n useComputedLTV,\n useDeposit,\n useIndexPrice,\n useIndexPricesStream,\n useQuery,\n useTokenInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account as accountPerp } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId, ChainNamespace } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useNeedSwapAndCross } from \"../swap/hooks/useNeedSwapAndCross\";\nimport { useSwapDeposit } from \"../swap/hooks/useSwapDeposit\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"./hooks\";\nimport { useToken } from \"./hooks/useToken\";\n\nconst { collateralRatio, collateralContribution, calcMinimumReceived } =\n accountPerp;\n\nexport type DepositFormScriptReturn = ReturnType<typeof useDepositFormScript>;\n\nexport type DepositFormScriptOptions = {\n close?: () => void;\n};\n// swap to usdc precision is 3\nexport const SWAP_USDC_PRECISION = 3;\n\nexport const useDepositFormScript = (options: DepositFormScriptOptions) => {\n const { wrongNetwork } = useAppContext();\n const { t } = useTranslation();\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const [feeWarningMessage, setFeeWarningMessage] = useState(\"\");\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n } = useToken(currentChain);\n\n const { data: indexPrices, getIndexPrice } = useIndexPricesStream();\n\n const indexPrice = useMemo(() => {\n return getIndexPrice(sourceToken?.symbol ?? \"\") ?? 0;\n }, [sourceToken?.symbol, indexPrices]);\n\n const usdcToken = useMemo(() => {\n return sourceTokens?.find((item) => item.symbol === \"USDC\");\n }, [sourceTokens]);\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n } = useDeposit({\n address: sourceToken?.address,\n decimals: sourceToken?.decimals,\n srcChainId: currentChain?.id,\n srcToken: sourceToken?.symbol,\n dstToken: targetToken?.symbol,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n depositorAddress: currentChain?.info?.network_infos?.depositor,\n });\n\n const maxQuantity = useMemo(\n () =>\n new Decimal(balance || 0)\n .todp(sourceToken?.precision ?? 2, Decimal.ROUND_DOWN)\n .toString(),\n [balance, sourceToken?.precision],\n );\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n });\n\n const { needSwap, needCrossSwap } = useNeedSwapAndCross({\n srcToken: sourceToken,\n dstToken: targetToken,\n srcChainId: currentChain?.id,\n dstChainId: dst?.chainId,\n });\n\n const {\n cleanTransactionInfo,\n onSwapDeposit,\n swapRevalidating,\n\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n warningMessage: swapWarningMessage,\n slippage,\n onSlippageChange,\n } = useSwapDeposit({\n srcToken: sourceToken!,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.close?.();\n }, [cleanData, options.close]);\n\n const { submitting, onApprove, onDeposit, onApproveAndDeposit } =\n useDepositAction({\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit: needSwap || needCrossSwap,\n customDeposit: onSwapDeposit,\n onSuccess,\n });\n\n const userMaxQtyMessage = useMemo(() => {\n if (\n sourceToken?.symbol === \"USDC\" ||\n sourceToken?.symbol !== targetToken?.symbol ||\n !sourceToken?.is_collateral ||\n !quantity ||\n isNaN(Number(quantity))\n ) {\n return \"\";\n }\n\n if (new Decimal(quantity).gt(sourceToken?.user_max_qty)) {\n return t(\"transfer.deposit.userMaxQty.error\", {\n maxQty: sourceToken?.user_max_qty,\n token: sourceToken?.symbol,\n });\n }\n return \"\";\n }, [sourceToken, targetToken, quantity, t]);\n\n const loading = submitting || depositFeeRevalidating!;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n !sourceToken ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating ||\n // if exceed collateral cap, disable deposit\n !!userMaxQtyMessage ||\n !!feeWarningMessage;\n\n const amount = useMemo(() => {\n const markPrice = 1;\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity]);\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useDepositFee({\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n });\n\n const {\n collateralRatio,\n collateralContributionQuantity,\n currentLTV,\n nextLTV,\n } = useCollateralValue({\n tokens: sourceTokens,\n sourceToken,\n targetToken,\n qty: quantity,\n indexPrice,\n });\n\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isLoading: isConvertThresholdLoading,\n } = useConvertThreshold();\n\n useEffect(() => {\n cleanData();\n }, [sourceToken, currentChain?.id]);\n\n const gasFeeMessage = useMemo(() => {\n if (isNativeToken && maxQuantity === quantity) {\n return t(\"transfer.deposit.gasFee.error\", {\n token: sourceToken?.symbol,\n });\n }\n }, [maxQuantity, quantity, sourceToken?.symbol, t]);\n\n useEffect(() => {\n if (\n quantity &&\n Number(quantity) > 0 &&\n depositFee === 0n &&\n !depositFeeRevalidating\n ) {\n setFeeWarningMessage(t(\"transfer.deposit.failed.fee\"));\n } else {\n setFeeWarningMessage(\"\");\n }\n }, [quantity, depositFee, depositFeeRevalidating, t]);\n\n const warningMessage =\n swapWarningMessage ||\n userMaxQtyMessage ||\n gasFeeMessage ||\n feeWarningMessage;\n\n // const isCollateralNativeToken = useMemo(() => {\n // return (\n // sourceToken?.is_collateral &&\n // sourceToken?.symbol === targetToken?.symbol &&\n // isNativeToken &&\n // !needSwap &&\n // !needCrossSwap\n // );\n // }, [sourceToken, targetToken, isNativeToken, needSwap, needCrossSwap]);\n\n const targetQuantity = useMemo(() => {\n if (needSwap) {\n return swapQuantity\n ? new Decimal(swapQuantity)\n ?.todp(SWAP_USDC_PRECISION, Decimal.ROUND_DOWN)\n .toString()\n : swapQuantity;\n }\n return quantity;\n }, [needSwap, swapQuantity, quantity]);\n\n // only swap deposit show minimum received\n const minimumReceived = useMemo(() => {\n if (!swapQuantity) {\n return \"-\";\n }\n return calcMinimumReceived({\n amount: Number(swapQuantity),\n slippage,\n });\n }, [swapQuantity, slippage]);\n\n const targetQuantityLoading = swapRevalidating;\n\n return {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n\n amount,\n isNativeToken,\n quantity,\n collateralContributionQuantity,\n maxQuantity,\n indexPrice,\n onQuantityChange: setQuantity,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n fee,\n collateralRatio,\n currentLTV,\n nextLTV,\n ltv_threshold,\n negative_usdc_threshold,\n isConvertThresholdLoading,\n slippage,\n onSlippageChange,\n minimumReceived,\n usdcToken,\n\n needSwap,\n needCrossSwap,\n swapPrice,\n markPrice,\n swapFee,\n warningMessage,\n targetQuantity,\n targetQuantityLoading,\n };\n};\n\nexport type UseDepositFeeReturn = ReturnType<typeof useDepositFee>;\n\nfunction useDepositFee(options: {\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n}) {\n const { nativeToken, depositFee = 0 } = options;\n const { account } = useAccount();\n\n const nativeSymbol = nativeToken?.symbol;\n const tokenInfo = useTokenInfo(nativeSymbol!);\n\n const { data: indexPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const feeProps = useMemo(() => {\n // deposit fee is native token, so decimals is 18\n const dstGasFee = new Decimal(depositFee.toString())\n // todo solana is 9, evm is 18\n .div(\n new Decimal(10).pow(\n account.walletAdapter?.chainNamespace === ChainNamespace.solana\n ? 9\n : 18,\n ),\n )\n .toString();\n\n const feeAmount = new Decimal(dstGasFee).mul(indexPrice || 0).toString();\n\n return {\n dstGasFee,\n feeQty: dstGasFee,\n feeAmount,\n // dp: feeDecimalsOffset(4),\n dp: tokenInfo?.decimals || 8,\n };\n }, [depositFee, indexPrice]);\n\n return { ...feeProps, nativeSymbol };\n}\n\nconst useCollateralValue = (params: {\n tokens: API.TokenInfo[];\n sourceToken?: API.TokenInfo;\n targetToken?: API.TokenInfo;\n qty: string;\n indexPrice: number;\n}) => {\n const { sourceToken, targetToken, indexPrice } = params;\n\n const quantity = Number(params.qty);\n\n const memoizedCollateralRatio = useMemo(() => {\n return collateralRatio({\n baseWeight: targetToken?.base_weight ?? 0,\n discountFactor: targetToken?.discount_factor ?? 0,\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n indexPrice,\n });\n }, [targetToken, quantity, sourceToken?.user_max_qty, indexPrice]);\n\n const collateralContributionQuantity = collateralContribution({\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n collateralRatio: memoizedCollateralRatio.toNumber(),\n indexPrice,\n });\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity,\n token: sourceToken?.symbol,\n });\n\n return {\n collateralRatio: memoizedCollateralRatio.toNumber(),\n collateralContributionQuantity,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n indexPrice,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n },\n );\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n","import { useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport function useNeedSwapAndCross(options: {\n srcToken?: API.TokenInfo;\n dstToken?: API.TokenInfo;\n srcChainId?: number;\n dstChainId?: number;\n}) {\n const { srcToken, dstToken, srcChainId, dstChainId } = options;\n const [needSwap, setNeedSwap] = useState(false);\n const [needCrossSwap, setNeedCrossSwap] = useState(false);\n\n useEffect(() => {\n if (!srcChainId || !dstChainId || !srcToken || !dstToken) return;\n const isCrossChain = srcChainId !== dstChainId;\n\n if (\n (srcToken?.symbol === \"USDC\" && !isCrossChain) ||\n // if srcToken is collateral and srcToken.symbol is the same as dstToken.symbol, it will not need swap\n (srcToken.is_collateral && srcToken.symbol === dstToken?.symbol)\n ) {\n setNeedSwap(false);\n setNeedCrossSwap(false);\n return;\n }\n\n setNeedSwap(srcToken?.symbol !== \"USDC\");\n\n if (isCrossChain) {\n setNeedCrossSwap(true);\n setNeedSwap(true);\n } else {\n setNeedCrossSwap(false);\n }\n }, [srcToken, dstToken, srcChainId, dstChainId]);\n\n return { needSwap, needCrossSwap };\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useConfig, useLocalStorage } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { DST, SwapMode } from \"../types\";\nimport { useSwapEnquiry } from \"./useSwapEnquiry\";\nimport { useSwapFee } from \"./useSwapFee\";\n\ntype SwapDepositOptions = {\n srcToken: API.TokenInfo;\n currentChain?: CurrentChain | null;\n dst: DST;\n quantity: string;\n isNativeToken: boolean;\n depositFee: bigint;\n setQuantity: (quantity: string) => void;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nconst ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY = \"orderly_swap_deposit_slippage\";\n\nexport const useSwapDeposit = (options: SwapDepositOptions) => {\n const {\n srcToken,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n } = options;\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY,\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n srcToken: srcToken?.address,\n dstToken: dst.address,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (srcToken?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: srcToken!.symbol,\n // swap precision\n displayDecimals: srcToken?.precision,\n amount: quantity,\n decimals: srcToken!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const swapFee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: srcToken,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n return {\n cleanTransactionInfo,\n onSwapDeposit,\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n swapRevalidating,\n warningMessage,\n needSwap,\n needCrossSwap,\n slippage,\n onSlippageChange: setSlippage,\n };\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport {\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { Swap, SwapProps } from \"./swap\";\n\nexport const SwapDialog = modal.create<SwapProps>((props) => {\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n const onComplete = (isSuccss: boolean) => {\n resolve(isSuccss);\n hide();\n };\n\n const onCancel = () => {\n reject();\n hide();\n };\n\n const commonProps = {\n title: t(\"transfer.swapDeposit.swapDialog.title\"),\n open: visible,\n onOpenChange,\n classNames: {\n content: \"oui-font-semibold\",\n },\n children: <Swap {...props} onComplete={onComplete} onCancel={onCancel} />,\n };\n\n if (isMobile) {\n return <SimpleSheet {...commonProps} />;\n }\n\n return <SimpleDialog {...commonProps} size=\"md\" />;\n});\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { useCrossSwap } from \"../hooks/useCrossSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const CrossSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain: chainInfo,\n nativeToken,\n depositFee,\n } = props;\n\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const {\n swap: doCrossSwap,\n bridgeStatus,\n message,\n status: swapStatus,\n } = useCrossSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chainInfo?.est_txn_mins,\n received: dst.amount,\n bridgeFee: transaction.fees_from.stargate,\n swapFee: transaction.fees_from.woofi,\n dstGasFee: transaction.dst_infos.gas_fee,\n };\n\n return info;\n }, [transaction, chainInfo?.est_txn_mins, mode, dst]);\n\n useEffect(() => {\n if (bridgeStatus === \"DELIVERED\") {\n setStatus(SwapProcessStatus.Depositing);\n }\n\n if (bridgeStatus === \"FAILED\") {\n setStatus(SwapProcessStatus.BridgeFialed);\n }\n\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [bridgeStatus, swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n setStatus(SwapProcessStatus.Bridging);\n\n return doCrossSwap({\n address: \"\",\n crossChainRouteAddress: chainInfo?.cross_chain_router!,\n src: {\n fromToken: transaction.src_infos.from_token,\n fromAmount: BigInt(transaction.src_infos.from_amount),\n bridgeToken: transaction.src_infos.bridge_token,\n minBridgeAmount: BigInt(transaction.src_infos.min_bridge_amount),\n },\n dst: {\n chainId: transaction.dst_infos.chain_id,\n bridgedToken: transaction.dst_infos.bridged_token,\n toToken: transaction.dst_infos.to_token,\n minToAmount: BigInt(transaction.dst_infos.min_to_amount),\n // @ts-ignore\n orderlyNativeFees: depositFee,\n },\n })\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.BridgeFialed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !message) {\n return;\n }\n return `https://layerzeroscan.com/tx/${message.srcTxHash}`;\n // return `https://layerzeroscan.com/${message.srcChainId}/address/${message.srcUaAddress}/message/${message.dstChainId}/address/${message.dstUaAddress}/nonce/${message.srcUaNonce}`;\n }, [status, message]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Cross}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Environment, createClient } from \"@layerzerolabs/scan-client\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport {\n isNativeTokenChecker,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport enum MessageStatus {\n INITIALIZING = \"WAITTING\",\n INFLIGHT = \"INFLIGHT\",\n CONFIRMING = \"CONFIRMING\",\n DELIVERED = \"DELIVERED\",\n FAILED = \"FAILED\",\n}\n\nexport const useCrossSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n const [layerStatus, setLayerStatus] = useState<MessageStatus>(\n MessageStatus.INITIALIZING,\n );\n\n const ee = useEventEmitter();\n\n const [bridgeMessage, setBridgeMessage] = useState<any | undefined>();\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n const txHashFromBridge = useRef<string | undefined>();\n\n const checkLayerStatusListener = useRef<ReturnType<typeof setTimeout>>();\n\n const account = useAccountInstance();\n\n const config = useConfig();\n const brokerId = config.get(\"brokerId\");\n const networkId = config.get(\"networkId\");\n\n const client = useRef(createClient(networkId as Environment)).current;\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHashFromBridge.current]);\n\n const checkLayerStatus = useCallback((txHash: string) => {\n if (checkLayerStatusListener.current) {\n clearTimeout(checkLayerStatusListener.current);\n }\n\n checkLayerStatusListener.current = setTimeout(async () => {\n try {\n const { messages } = await client.getMessagesBySrcTxHash(txHash);\n\n if (messages.length > 0) {\n const { status } = messages[0];\n\n setLayerStatus(status as MessageStatus);\n\n if (status === MessageStatus.DELIVERED) {\n setBridgeMessage(messages[0]);\n txHashFromBridge.current = messages[0].dstTxHash;\n } else if (status === MessageStatus.FAILED) {\n setBridgeMessage(messages[0]);\n } else {\n checkLayerStatus(txHash);\n }\n } else {\n checkLayerStatus(txHash);\n }\n } catch (e) {\n // setLayerStatus(MessageStatus.FAILED);\n checkLayerStatus(txHash);\n }\n }, 1000);\n }, []);\n\n // swap => src tx hash, cross swap => dst tx hash\n // const checkDeposit\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = async (inputs: {\n address: string;\n crossChainRouteAddress: string;\n src: {\n fromToken: string;\n fromAmount: bigint;\n bridgeToken: string;\n minBridgeAmount: bigint;\n };\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n airdropNativeAmount: bigint;\n };\n }) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (!inputs.crossChainRouteAddress) {\n throw new Error(\"crossChainRouteAddress is undefined\");\n }\n\n const { address, src, dst, crossChainRouteAddress } = inputs;\n if (loading) return;\n start();\n\n try {\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n const result = await account.walletAdapter.sendTransaction(\n crossChainRouteAddress,\n \"crossSwap\",\n {\n from: account.address!,\n to: crossChainRouteAddress,\n data: [account.address, src, dst, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.src.fromToken)\n ? BigInt(inputs.src.fromAmount) + quotoLZFee[0]\n : quotoLZFee[0],\n },\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n stop();\n\n checkLayerStatus(result.hash);\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n console.error(\"crossSwap error\", e);\n stop();\n throw new Error(e.errorCode);\n }\n };\n\n return {\n swap,\n loading,\n bridgeStatus: layerStatus,\n status,\n message: bridgeMessage,\n };\n};\n","export const woofiDexCrossSwapChainRouterAbi = [\n {\n inputs: [],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint8\",\n name: \"version\",\n type: \"uint8\",\n },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"realToToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"realToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnDstChain\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"dstChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnSrcChain\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MAX_BRIDGE_SLIPPAGE\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"addDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokens\",\n outputs: [\n {\n internalType: \"address[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokensLength\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bridgeSlippage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address payable\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.SrcInfos\",\n name: \"srcInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"crossSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForNoSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"stuckToken\",\n type: \"address\",\n },\n ],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_weth\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nonceCounter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"quoteLayerZeroFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"nativeAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"zroAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"removeDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_bridgeSlippage\",\n type: \"uint256\",\n },\n ],\n name: \"setBridgeSlippage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForNoSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForNoSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n ],\n name: \"setNonceCounter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_orderlyFeeToggle\",\n type: \"bool\",\n },\n ],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"setSgChainIdLocal\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"setSgETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"poolId\",\n type: \"uint256\",\n },\n ],\n name: \"setSgPoolId\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n ],\n name: \"setSgRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexCrossChainRouter\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexCrossChainRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexVault\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n ],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgChainIdLocal\",\n outputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"sgETHs\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"sgPoolIds\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"payload\",\n type: \"bytes\",\n },\n ],\n name: \"sgReceive\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"weth\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"woofiDexCrossChainRouters\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"woofiDexVaults\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n];\n\nexport const woofiDexSwapDepositorAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint8\", name: \"version\", type: \"uint8\" },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"toAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexSwap\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"stuckToken\", type: \"address\" }],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bool\", name: \"_orderlyFeeToggle\", type: \"bool\" }],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n { internalType: \"address\", name: \"woofiDexVault\", type: \"address\" },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"fromToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"fromAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"toToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"minToAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexDepositor.Infos\",\n name: \"infos\",\n type: \"tuple\",\n },\n {\n components: [\n { internalType: \"bytes32\", name: \"accountId\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"brokerHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"tokenHash\", type: \"bytes32\" },\n ],\n internalType: \"struct IWOOFiDexDepositor.VaultDeposit\",\n name: \"vaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"woofiDexVaults\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n];\n\nexport const nativeTokenAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\nexport const isNativeTokenChecker = (address: string) =>\n address === nativeTokenAddress;\n\nexport const swapSupportApiUrl = \"https://fi-api.woo.org\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n CheckedCircleFillIcon,\n CloseCircleFillIcon,\n cn,\n Divider,\n Flex,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\nimport { TopRightArrowIcon } from \"../icons\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\n\ntype ProcessStatusProps = {\n status?: SwapProcessStatus;\n mode: SwapMode;\n statusUrl?: string;\n onComplete?: (isSuccss: boolean) => void;\n brokerName?: string;\n};\n\nenum SwapState {\n Pending = \"pending\",\n Failed = \"failed\",\n Success = \"success\",\n}\n\ntype TProcessItem = {\n title: string;\n description: string;\n state?: SwapState;\n};\n\nexport const ProcessStatus: FC<ProcessStatusProps> = (props) => {\n const { status, mode, statusUrl, brokerName } = props;\n const { t } = useTranslation();\n\n const processList = useMemo(() => {\n const bridgeStatus = getBridgeStatus(status!);\n const depositStatus = getDepositStatus(status!);\n const list: TProcessItem[] = [\n {\n title:\n bridgeStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.bridging\")\n : t(\"transfer.swapDeposit.bridge\"),\n description: t(\"transfer.swapDeposit.bridge.description\"),\n state: bridgeStatus,\n },\n {\n title:\n depositStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.depositing\")\n : t(\"transfer.swapDeposit.deposit\"),\n description: t(\"transfer.swapDeposit.deposit.description\", {\n brokerName,\n }),\n state: depositStatus,\n },\n ];\n\n if (mode === SwapMode.Single) {\n return list.slice(1, 2);\n }\n\n return list;\n }, [mode, brokerName, status, t]);\n\n const onOk = () => {\n props.onComplete?.(status === SwapProcessStatus.Done);\n };\n\n const isFailed =\n status === SwapProcessStatus.DepositFailed ||\n status === SwapProcessStatus.BridgeFialed;\n\n const disabled =\n status === SwapProcessStatus.Bridging ||\n status === SwapProcessStatus.Depositing;\n\n const showDashLine = processList.length > 1;\n\n return (\n <div className=\"oui-font-semibold\">\n <Box intensity={600} p={4} r=\"lg\">\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n gapY={4}\n className=\"oui-relative\"\n >\n {processList.map((item) => (\n <ProcessItem {...item} key={item.title} />\n ))}\n {showDashLine && (\n <div\n className={cn(\n \"oui-absolute oui-left-[10px] oui-top-[20px] oui-bottom-[38px]\",\n \"oui-w-[1px] oui-h-[34px]\",\n \"oui-border-r oui-border-dashed oui-border-r-line-16\",\n )}\n />\n )}\n </Flex>\n\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n\n <Flex\n gapX={1}\n justify=\"center\"\n itemAlign=\"center\"\n className={cn(\n statusUrl ? \"oui-text-primary-light\" : \"oui-text-base-contrast-20\",\n statusUrl ? \"oui-cursor-pointer\" : \"oui-cursor-not-allowed\",\n )}\n onClick={() => {\n statusUrl && window.open(statusUrl);\n }}\n >\n <Text size=\"2xs\">{t(\"transfer.swapDeposit.viewStatus\")}</Text>\n <TopRightArrowIcon />\n </Flex>\n </Box>\n\n <Flex\n direction=\"column\"\n justify=\"center\"\n itemAlign=\"center\"\n mt={8}\n gapY={3}\n >\n {isFailed && (\n <Text size=\"xs\" className=\"oui-text-danger-light\">\n {t(\"transfer.swapDeposit.depositFailed\")}\n </Text>\n )}\n\n <Button\n className=\"oui-w-full lg:oui-w-[184px]\"\n disabled={disabled}\n onClick={onOk}\n >\n {t(\"common.ok\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nconst ProcessItem: FC<TProcessItem> = ({ title, description, state }) => {\n return (\n <Flex itemAlign=\"start\" gapX={2} key={title}>\n <Flex width={20} height={20} justify=\"center\">\n <StatusIndicator state={state} />\n </Flex>\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text\n size=\"sm\"\n className={cn(\n state === \"pending\" || state === \"failed\"\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-54\",\n )}\n >\n {title}\n </Text>\n <Text\n size=\"2xs\"\n className={cn(\n state === \"pending\"\n ? \"oui-text-base-contrast-54\"\n : \"oui-text-base-contrast-20\",\n )}\n >\n {description}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst StatusIndicator: FC<{ state?: SwapState }> = ({ state }) => {\n if (state === SwapState.Pending) {\n return <Spinner size=\"sm\" />;\n }\n\n if (state === SwapState.Failed) {\n return (\n <CloseCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-danger-light\"\n />\n );\n }\n\n if (state === SwapState.Success) {\n return (\n <CheckedCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-primary-light\"\n />\n );\n }\n\n return <Box r=\"full\" width={10} height={10} intensity={200}></Box>;\n};\n\nfunction getBridgeStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Bridging) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.BridgeFialed) {\n return SwapState.Failed;\n }\n\n if (\n status === SwapProcessStatus.Done ||\n status === SwapProcessStatus.Depositing\n ) {\n return SwapState.Success;\n }\n}\n\nfunction getDepositStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Depositing) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.DepositFailed) {\n return SwapState.Failed;\n }\n\n if (status === SwapProcessStatus.Done) {\n return SwapState.Success;\n }\n}\n","import { FC, ReactNode } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n Flex,\n Text,\n TokenIcon,\n Icon,\n Divider,\n Button,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { ArrowRightIcon, GasFeeIcon, WoofiIcon } from \"../icons\";\nimport { SwapMode, SymbolInfo } from \"../types\";\n\nexport interface SwapInfo {\n // gasFee: string;\n // tradingFee: string;\n dstGasFee: string;\n swapFee: string;\n bridgeFee: string;\n price: number;\n slippage: number;\n received: string;\n time: number;\n}\n\ntype SwapDetailProps = {\n onConfirm: () => void;\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n info: SwapInfo;\n markPrice: number;\n nativePrice: number;\n nativeToken?: API.TokenInfo;\n viewMode: \"processing\" | \"details\";\n // transactionData: any;\n};\n\nexport const SwapDetail: FC<SwapDetailProps> = (props) => {\n const {\n info,\n mode,\n nativePrice,\n markPrice,\n src,\n dst,\n nativeToken,\n viewMode,\n } = props;\n\n const { t } = useTranslation();\n\n const header = (\n <Flex justify=\"between\">\n <SwapSymbol\n primary={src?.token}\n chainId={src.chain}\n amount={src?.amount}\n dp={src?.displayDecimals}\n symbol={src?.token}\n />\n <ArrowRightIcon className=\"oui-text-primary-light\" />\n <SwapSymbol\n primary={dst?.token}\n component={<WoofiIcon className=\"oui-size-4\" />}\n amount={dst?.amount}\n dp={dst?.displayDecimals}\n symbol={dst?.token}\n reverse\n />\n </Flex>\n );\n\n const divider = (\n <Box my={5}>\n <Divider intensity={12} />\n </Box>\n );\n\n const listData = [\n {\n label: t(\"transfer.deposit.destinationGasFee\"),\n value: (\n <Flex gapX={1}>\n <GasFeeIcon className=\"oui-text-primary-light\" />\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n // swap precision\n dp={feeDecimalsOffset(nativeToken?.precision)}\n >\n {info.dstGasFee!}\n </Text.numeral>\n <Text color=\"primaryLight\">{nativeToken?.symbol}</Text>\n <Text className=\"oui-text-primary-light/60\">\n ($\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n dp={2}\n >\n {new Decimal(info.dstGasFee?.toString())\n .mul(nativePrice || 0)\n .toString()}\n </Text.numeral>\n )\n </Text>\n </Flex>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.swapFee\"),\n value: (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.swapFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.swapFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.bridgeFee\"),\n value: mode === SwapMode.Cross && (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.bridgeFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.bridgeFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.minimumReceived\"),\n value: (\n <>\n <Text.numeral\n dp={dst?.displayDecimals}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n >\n {info.received}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"common.price\"),\n value: (\n <>\n {`1 ${src?.token} = `}\n <Text.numeral dp={3} padding={false}>\n {info.price}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"transfer.slippage\"),\n value: `${info.slippage}%`,\n },\n ];\n\n const listView = (\n <Flex direction=\"column\" itemAlign=\"start\" gapY={3}>\n {listData?.map((item) => {\n if (item.value) {\n return <ListItem {...item} key={item.label} />;\n }\n })}\n </Flex>\n );\n\n const swapButton = (\n <Flex justify=\"center\" mt={8}>\n <Button className=\"oui-w-full lg:oui-w-[184px]\" onClick={props.onConfirm}>\n {t(\"transfer.swapDeposit.confirmSwap\")}\n </Button>\n </Flex>\n );\n\n return (\n <Box intensity={800}>\n {header}\n <SwapTime time={info.time ?? 0} />\n {divider}\n\n {viewMode === \"details\" && (\n <>\n {listView}\n {swapButton}\n </>\n )}\n </Box>\n );\n};\n\ntype ListItemProps = {\n label?: string;\n value?: ReactNode;\n};\n\nconst ListItem: FC<ListItemProps> = (props) => {\n return (\n <Flex gapX={2} justify=\"between\" width=\"100%\">\n <Text size=\"sm\" intensity={54}>\n {props.label}\n </Text>\n <Text size=\"sm\" intensity={98} as=\"div\">\n {props.value}\n </Text>\n </Flex>\n );\n};\n\ntype SwapSymbolProps = {\n primary: string;\n chainId?: number;\n component?: ReactNode;\n amount: string;\n dp?: number;\n symbol: string;\n reverse?: boolean;\n};\n\nconst SwapSymbol: FC<SwapSymbolProps> = (props) => {\n return (\n <Flex gapX={2} direction={props.reverse ? \"rowReverse\" : \"row\"}>\n <Icon.combine\n secondary={{\n chainId: props.chainId,\n component: props.component,\n className: \"oui-w-4 oui-h-4 oui-outline-base-8 oui-rounded-full\",\n }}\n >\n <TokenIcon name={props.primary} size=\"md\" />\n </Icon.combine>\n\n <Flex direction=\"column\" itemAlign={props.reverse ? \"end\" : \"start\"}>\n <Text.numeral intensity={98} size=\"lg\" dp={props.dp}>\n {props.amount}\n </Text.numeral>\n <Text intensity={54} size=\"xs\">\n {props.symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst SwapTime: FC<{ time: number }> = (props) => {\n return (\n <Flex justify=\"center\">\n <Flex\n intensity={600}\n r=\"full\"\n gapX={2}\n justify=\"center\"\n py={1}\n mt={2}\n width={210}\n >\n <Text size=\"sm\" intensity={54}>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.averageSwapTime\"\n values={{ time: props.time }}\n components={[<Text color=\"primaryLight\" key=\"0\" />]}\n />\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const getTokenByTokenList = (tokens: API.TokenInfo[] = []) => {\n const tokenObj = tokens.reduce<Record<string, API.TokenInfo>>((acc, item) => {\n acc[item.symbol!] = item;\n return acc;\n }, {});\n return tokenObj[\"USDC\"] || tokenObj[\"USDbC\"] || tokens[0];\n};\n\nexport const feeDecimalsOffset = (origin?: number): number => {\n return (origin ?? 2) + 3;\n};\n\n// export const priceDecimalsOffset = (origin?: number): number => {\n// return Math.abs((origin ?? 2) - 5);\n// };\n\nexport function checkIsAccountId(accountId: string) {\n const regex = /^0x[a-fA-F0-9]{64}$/;\n return regex.test(accountId);\n}\n\nexport function getTransferErrorMessage(errorCode: number) {\n if (errorCode === 34) {\n return i18n.t(\"transfer.internalTransfer.error.transferInProgress\");\n }\n\n if (errorCode === 17) {\n return i18n.t(\"transfer.internalTransfer.error.withdrawalInProgress\");\n }\n\n if (errorCode === 35) {\n return i18n.t(\"transfer.internalTransfer.error.accountIdNotExist\");\n }\n\n if (errorCode === 37) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSelf\");\n }\n\n if (errorCode === 46) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSubAccount\");\n }\n\n // TODO: when api return 500 status, not throw error code\n // if (errorCode === -1000) {\n // return i18n.t(\"transfer.internalTransfer.error.scopeInsufficient\");\n // }\n\n return i18n.t(\"transfer.internalTransfer.error.default\");\n}\n\nconst depositErrorCodeMap = {\n \"0x6697b232\": \"AccessControlBadConfirmation\",\n \"0xe2517d3f\": \"AccessControlUnauthorizedAccount\",\n \"0xc7ee9ce6\": \"AccountIdInvalid\",\n \"0x9fabe1c1\": \"AddressZero\",\n \"0x4b3815a6\": \"BalanceNotEnough\",\n \"0x59d9b863\": \"BrokerNotAllowed\",\n \"0xf67c6d78\": \"CeffuAddressMismatch\",\n \"0xd969df24\": \"DepositExceedLimit\",\n \"0xa65b249b\": \"EnumerableSetError\",\n \"0x06a0cf4a\": \"InvalidSwapSignature\",\n \"0x1eb00b06\": \"InvalidTokenAddress\",\n \"0xfa7c7537\": \"NativeTokenDepositAmountMismatch\",\n \"0xad674ae6\": \"NotRebalanceEnableToken\",\n \"0x623793c9\": \"NotZeroCodeLength\",\n \"0x833d33e7\": \"OnlyCrossChainManagerCanCall\",\n \"0x3ee5aeb5\": \"ReentrancyGuardReentrantCall\",\n \"0x0b693144\": \"SwapAlreadySubmitted\",\n \"0xa29c4986\": \"TokenNotAllowed\",\n \"0x30773dbb\": \"ZeroCodeLength\",\n \"0x56316e87\": \"ZeroDeposit\",\n \"0x93d3bb4d\": \"ZeroDepositFee\",\n};\n\nexport function getDepositKnownErrorMessage(message: string) {\n if (!message) {\n return \"\";\n }\n\n for (const key of Object.keys(depositErrorCodeMap)) {\n if (message.includes(key)) {\n const value =\n depositErrorCodeMap[key as keyof typeof depositErrorCodeMap];\n return `${value} (${key})`;\n }\n }\n}\n","import { FC } from \"react\";\nimport { Trans } from \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const ViewFAQs: FC = () => {\n return (\n <Flex justify=\"center\" gapX={1} mt={3}>\n <Trans\n i18nKey=\"transfer.swapDeposit.viewFAQs\"\n components={[\n <Text\n size=\"xs\"\n color=\"primaryLight\"\n onClick={() => {\n window.open(\"https://learn.woo.org/woofi/faqs/woofi-pro\");\n }}\n className=\"oui-cursor-pointer\"\n key=\"0\"\n />,\n ]}\n />\n </Flex>\n );\n};\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSwap } from \"../hooks/useSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const SingleSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain,\n nativeToken,\n depositFee,\n } = props;\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const { swap: doSingleSwap, status: swapStatus } = useSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chain?.est_txn_mins,\n received: dst.amount,\n dstGasFee: new Decimal(depositFee!.toString())\n ?.div(new Decimal(10).pow(18))\n ?.toString(),\n swapFee: transaction.fees_from,\n };\n\n return info;\n }, [transaction, chain?.est_txn_mins, mode, dst, depositFee]);\n\n useEffect(() => {\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n if (!chain || !chain.depositor) return Promise.reject(\"No chain data\");\n\n setStatus(SwapProcessStatus.Depositing);\n\n return doSingleSwap(\n chain.depositor,\n {\n fromToken: transaction.infos.from_token,\n fromAmount: transaction.infos.from_amount,\n toToken: transaction.infos.to_token,\n minToAmount: transaction.infos.min_to_amount,\n orderlyNativeFees: depositFee,\n },\n { dst, src },\n )\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.DepositFailed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !tx) {\n return;\n }\n return `${chain?.explorer_base_url}/tx/${tx.hash}`;\n }, [status, tx, chain]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Single}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { isNativeTokenChecker, woofiDexSwapDepositorAbi } from \"../constants\";\n\n/**\n * 1. fee precision swap_support.woofi_dex_precision+3,round off\n * 2. price precision = abs(woofi_dex_precision - 5),cut off\n * 3. orderly deposit fee = $0\n * 4. deposit pop-ups: don't show token when fee is 0.\n * e.g. dst gas fee = 0 ETH, swap fee = 0.04 USDC, it will show $0.04 ( 0.04 USDC )\n */\nexport const useSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n const brokerId = useConfig(\"brokerId\");\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n\n const txHash = useRef<string | undefined>();\n const ee = useEventEmitter();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHash.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHash.current]);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = useCallback(\n async (\n woofiDexDepositorAdress: string,\n inputs: {\n fromToken: string;\n fromAmount: string;\n toToken: string;\n minToAmount: string;\n orderlyNativeFees: bigint;\n },\n config: { dst: any; src: any },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (loading) return;\n start();\n\n const txPayload = {\n from: account.address,\n to: woofiDexDepositorAdress,\n data: [account.address, inputs, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.fromToken)\n ? BigInt(inputs.fromAmount) + inputs.orderlyNativeFees\n : inputs.orderlyNativeFees,\n };\n\n try {\n const result = await account.walletAdapter.sendTransaction(\n woofiDexDepositorAdress,\n \"swap\",\n txPayload,\n {\n abi: woofiDexSwapDepositorAbi,\n },\n );\n\n stop();\n\n txHash.current = result.hash;\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n throw new Error(e.errorCode);\n }\n },\n [loading, account],\n );\n\n return {\n swap,\n loading,\n status,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { SwapMode, SymbolInfo } from \"../types\";\nimport { CrossSwap } from \"./crossSwap\";\nimport { SingleSwap } from \"./singleSwap\";\n\nexport interface SwapProps {\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n chain?: API.NetworkInfos;\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n transactionData: any;\n slippage: number;\n brokerName?: string;\n onComplete?: (isSuccss: boolean) => void;\n onCancel?: () => void;\n onFail?: () => void;\n}\n\nexport const Swap: FC<SwapProps> = (props) => {\n const { mode } = props;\n\n if (mode === SwapMode.Cross) {\n return <CrossSwap {...props} />;\n }\n\n return <SingleSwap {...props} />;\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useBoolean, useDebouncedCallback } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DST, MarkPrices } from \"../types\";\nimport { useWooCrossSwapQuery } from \"./useCrossSwapQuery\";\nimport { useWooSwapQuery } from \"./useSwapQuery\";\n\nexport type TransactionInfo = {\n price: number;\n markPrices: MarkPrices;\n dstGasFee?: string;\n swapFee?: string;\n bridgeFee?: string;\n fee: string;\n};\n\ntype useSwapEnquiryProps = {\n quantity: string;\n dst: DST;\n queryParams: any;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nexport function useSwapEnquiry(props: useSwapEnquiryProps) {\n const { quantity, dst, queryParams, needSwap, needCrossSwap } = props;\n const { t } = useTranslation();\n const { query: wooSwapQuery } = useWooSwapQuery();\n const { query: wooCrossSwapQuery } = useWooCrossSwapQuery();\n\n const queryParamsRef = useRef(queryParams);\n queryParamsRef.current = queryParams;\n\n const [amount, setAmount] = useState<string>(\"\");\n const [warningMessage, setWarningMessage] = useState<string>(\"\");\n const [querying, { setTrue: queryStart, setFalse: queryStop }] =\n useBoolean(false);\n\n const [transactionInfo, setTransactionInfo] = useState<TransactionInfo>({\n price: 0,\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n fee: \"\",\n // dstGasFee: \"\",\n // swapFee: \"\",\n // bridgeFee: \"\",\n });\n\n const enquiry = useCallback(() => {\n if (needCrossSwap) {\n return wooCrossSwapQuery(queryParamsRef.current);\n }\n\n if (needSwap) {\n return wooSwapQuery(queryParamsRef.current);\n }\n\n return Promise.reject(\"no need to enquiry\");\n }, [needSwap, needCrossSwap]);\n\n const enquirySuccessHandle = (res: any) => {\n if (res.mark_prices) {\n const dstGasFee = needCrossSwap ? res.dst_infos.gas_fee : \"0\";\n const swapFee = needCrossSwap ? res.fees_from.woofi : res.fees_from;\n const bridgeFee = needCrossSwap ? res.fees_from.stargate : undefined;\n const fee = needCrossSwap ? res.fees_from.total : res.fees_from;\n\n setTransactionInfo({\n price: res.price,\n markPrices: res.mark_prices,\n dstGasFee,\n swapFee,\n bridgeFee,\n fee: fee,\n });\n }\n\n // set amount\n if (res.route_infos) {\n const amountValue = needCrossSwap\n ? res.route_infos.dst.amounts[1]\n : res.route_infos.amounts[1];\n\n setAmount(\n new Decimal(amountValue).div(Math.pow(10, dst.decimals!)).toString(),\n );\n }\n\n setWarningMessage(\"\");\n return res;\n };\n\n const cleanTransactionInfo = (data?: any) => {\n setTransactionInfo({\n fee: \"0\",\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n price: 0,\n swapFee: \"0\",\n bridgeFee: \"0\",\n dstGasFee: \"0\",\n ...data,\n });\n\n setAmount(\"\");\n };\n\n const enquiryErrorHandle = (error: Error) => {\n if (error.message === \"contract call failed\") {\n // Not enough liquidity on the cross-chain bridge.\n setWarningMessage(t(\"transfer.swapDeposit.notEnoughLiquidity\"));\n // clean previous data\n cleanTransactionInfo();\n } else {\n setWarningMessage(\"\");\n if (error?.message) {\n toast.error(error.message);\n }\n }\n };\n\n const debouncedEnquiry = useDebouncedCallback(() => {\n queryStart();\n return enquiry()\n .then(enquirySuccessHandle, enquiryErrorHandle)\n .finally(() => {\n queryStop();\n });\n }, 300);\n\n useEffect(() => {\n // if not need swap and cross swap\n if (!needSwap && !needCrossSwap) {\n cleanTransactionInfo({\n price: 1,\n });\n setAmount(quantity);\n return;\n }\n\n const qty = Number(quantity);\n\n if (isNaN(qty) || qty <= 0) {\n cleanTransactionInfo();\n return;\n }\n\n debouncedEnquiry();\n }, [needSwap, needCrossSwap, quantity]);\n\n return {\n enquiry,\n querying,\n warningMessage,\n transactionInfo,\n amount,\n cleanTransactionInfo,\n };\n}\n","import { useCallback } from \"react\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n} from \"@orderly.network/hooks\";\nimport {\n swapSupportApiUrl,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport const useWooCrossSwapQuery = () => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const brokerId = useConfig(\"brokerId\");\n\n const account = useAccountInstance();\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const queryDestinationFee = useCallback(\n async (\n crossChainRouteAddress: string,\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n orderlyNativeFees: bigint;\n },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is not ready\");\n }\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n return utils.formatByUnits(quotoLZFee[0]);\n },\n [],\n );\n\n /// swap enquiry\n const query = useCallback(\n (inputs: {\n srcNetwork: string;\n srcToken: string;\n amount: bigint;\n slippage: number;\n dstToken: string;\n crossChainRouteAddress: string;\n }) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n // src_network: inputs.srcNetwork,\n src_network: inputs.srcNetwork,\n dst_network: \"arbitrum\",\n src_token: inputs.srcToken,\n dst_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n src_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${swapSupportApiUrl}/woofi_dex/cross_chain_swap?${queryString}`,\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .then((swapInfo) => {\n return queryDestinationFee(inputs.crossChainRouteAddress, {\n chainId: swapInfo.dst_infos.chain_id,\n bridgedToken: swapInfo.dst_infos.bridged_token,\n toToken: swapInfo.dst_infos.to_token,\n minToAmount: BigInt(swapInfo.dst_infos.min_to_amount),\n orderlyNativeFees: 0n,\n })\n .then((data) => {\n return {\n ...swapInfo,\n dst_infos: {\n ...swapInfo.dst_infos,\n gas_fee: data,\n },\n };\n })\n .catch((e) => {\n console.error(\"queryDestinationFee error\", e);\n });\n })\n .finally(() => stop());\n },\n\n [loading, account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useCallback } from \"react\";\nimport { useAccountInstance, useBoolean } from \"@orderly.network/hooks\";\nimport { swapSupportApiUrl } from \"../constants\";\n\nexport const useWooSwapQuery = () => {\n const account = useAccountInstance();\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n /// swap 询价\n const query = useCallback(\n (inputs: any) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n network: inputs.srcNetwork,\n // network: \"arbitrum\",\n from_token: inputs.srcToken,\n to_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n from_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(`${swapSupportApiUrl}/woofi_dex/swap?${queryString}`)\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .finally(() => stop());\n },\n [account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useMemo } from \"react\";\nimport { useIndexPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, toNonExponential } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { TransactionInfo } from \"./useSwapEnquiry\";\n\nexport type UseSwapFee = ReturnType<typeof useSwapFee>;\n\ntype FeeQty = {\n value: string | number;\n dp: number;\n symbol?: string;\n};\n\nexport function useSwapFee(options: {\n nativeToken?: API.TokenInfo;\n isNativeToken?: boolean;\n src?: API.TokenInfo;\n depositFee?: bigint;\n transactionInfo: TransactionInfo;\n needSwap: boolean;\n needCrossSwap: boolean;\n}) {\n const {\n nativeToken,\n isNativeToken,\n src,\n depositFee = 0,\n transactionInfo,\n needSwap,\n needCrossSwap,\n } = options;\n\n const nativeSymbol = nativeToken?.symbol;\n const srcSymbol = src?.symbol;\n\n const {\n fee = \"0\",\n swapFee = \"0\",\n bridgeFee = \"0\",\n dstGasFee: destinationGasFee = \"0\",\n markPrices,\n } = transactionInfo;\n\n const { from_token: markPrice, native_token: nativeMarkPrice } = markPrices;\n\n const { data: symbolPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const { t } = useTranslation();\n\n const feeInfo = useMemo(() => {\n let feeAmount = \"\";\n let feeQtys: FeeQty[] = [];\n\n const nativeDp = feeDecimalsOffset(\n // swap precision\n nativeToken?.precision,\n );\n\n // swap precision\n const srcDp = feeDecimalsOffset(src?.precision);\n\n const dstGasFee = needCrossSwap\n ? destinationGasFee\n : new Decimal(depositFee.toString())\n .div(new Decimal(10).pow(18))\n .toString();\n\n if (!needSwap && !needCrossSwap) {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee).mul(symbolPrice || 0).toString();\n }\n\n if (needSwap || needCrossSwap) {\n // if native token, Destination gas fee、fee (Swap fee + Bridge fee ) will use a same symbol unit\n if (isNativeToken) {\n const totalFeeQty = new Decimal(dstGasFee).plus(fee);\n\n feeQtys = [\n {\n value: totalFeeQty.toString(),\n dp: nativeDp,\n },\n ];\n\n feeAmount = totalFeeQty.mul(nativeMarkPrice ?? 1).toString();\n } else {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n value: fee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee)\n .mul(nativeMarkPrice ?? 1)\n .plus(new Decimal(fee).mul(markPrice ?? 1))\n .toString();\n }\n }\n\n feeQtys = feeQtys.filter(\n (item) => !!item.value && Number(item.value) !== 0,\n );\n\n const feeDetails = [\n {\n title: t(\"transfer.deposit.destinationGasFee\"),\n description: t(\"transfer.deposit.destinationGasFee.description\"),\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.swapFee\"),\n description: t(\"transfer.swapDeposit.swapFee.description\"),\n value: swapFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.bridgeFee\"),\n description: t(\"transfer.swapDeposit.bridgeFee.description\"),\n value: bridgeFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ]\n .filter(\n // alway show Destination gas fee\n (item, index) =>\n index === 0 || (!!item.value && Number(item.value) !== 0),\n )\n .map((item) => {\n const value = new Decimal(item.value || 0).todp(item.dp).toNumber();\n return {\n ...item,\n value: toNonExponential(value),\n };\n });\n\n return {\n feeAmount,\n feeQtys,\n feeDetails,\n };\n }, [\n depositFee,\n symbolPrice,\n nativeSymbol,\n srcSymbol,\n transactionInfo,\n needSwap,\n needCrossSwap,\n ]);\n\n return {\n ...feeInfo,\n nativeSymbol,\n };\n}\n","import { useMemo } from \"react\";\nimport { DepositAction } from \"../../../types\";\n\ntype Options = {\n isNativeToken: boolean;\n allowance: string;\n quantity: string;\n maxQuantity: string;\n};\n\nexport function useActionType(options: Options) {\n const { isNativeToken, allowance, quantity, maxQuantity } = options;\n\n const actionType = useMemo(() => {\n const allowanceNum = isNativeToken ? Number.MAX_VALUE : Number(allowance);\n\n if (allowanceNum <= 0) {\n return DepositAction.ApproveAndDeposit;\n }\n\n const qty = Number(quantity);\n const maxQty = Number(maxQuantity);\n\n if (allowanceNum < qty && qty <= maxQty) {\n // return DepositAction.Increase;\n return DepositAction.ApproveAndDeposit;\n }\n\n return DepositAction.Deposit;\n }, [isNativeToken, allowance, quantity, maxQuantity]);\n\n return actionType;\n}\n","import { useCallback, useMemo } from \"react\";\nimport {\n Chain,\n ConnectedChain,\n useChains,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\n\nexport type CurrentChain = Pick<ConnectedChain, \"namespace\"> & {\n id: number;\n info?: Chain;\n};\n\nexport function useChainSelect() {\n const { t } = useTranslation();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { connectedChain, settingChain, setChain } = useWalletConnector();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const currentChain = useMemo(() => {\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) return null;\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (!connectedChain) {\n return;\n }\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return setChain({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n if (error && error.message) {\n toast.error(\n `${t(\"connector.switchChain.failed\")}: ${error.message}`,\n );\n }\n });\n },\n [currentChain, setChain, findByChainId],\n );\n\n return {\n chains,\n currentChain,\n settingChain,\n onChainChange,\n };\n}\n","import { useCallback, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { getDepositKnownErrorMessage } from \"../../../utils\";\n\ntype Options = {\n quantity: string;\n allowance?: string;\n approve: (quantity?: string) => Promise<any>;\n deposit: () => Promise<any>;\n onSuccess?: () => void;\n customDeposit?: () => Promise<any>;\n enableCustomDeposit?: boolean;\n};\n\nexport function useDepositAction(options: Options) {\n const {\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit,\n customDeposit,\n onSuccess,\n } = options;\n const [submitting, setSubmitting] = useState(false);\n const ee = useEventEmitter();\n const { t } = useTranslation();\n\n const doDeposit = useCallback(async () => {\n try {\n await deposit();\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n } catch (err: any) {\n console.error(\"deposit error\", err);\n\n const knownErrorMessage = getDepositKnownErrorMessage(err.message);\n if (knownErrorMessage) {\n toast.error(\n <div>\n {t(\"common.somethingWentWrong\")}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {t(\"common.details\")}: {knownErrorMessage}\n </div>\n </div>,\n );\n } else {\n toast.error(err.message || t(\"common.somethingWentWrong\"));\n }\n }\n }, [deposit, onSuccess, t]);\n\n const onDeposit = useCallback(async () => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting) return;\n\n setSubmitting(true);\n\n const execDeposit = enableCustomDeposit ? customDeposit : doDeposit;\n\n await execDeposit?.()?.finally(() => {\n setSubmitting(false);\n });\n }, [quantity, submitting, doDeposit, enableCustomDeposit, customDeposit, t]);\n\n const onApprove = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await approve(quantity);\n toast.success(t(\"transfer.deposit.approve.success\"));\n } catch (err: any) {\n console.error(\"approve error\", err);\n toast.error(\n err.message || err?.errorCode || t(\"transfer.deposit.approve.failed\"),\n );\n throw err;\n } finally {\n setSubmitting(false);\n }\n }, [approve, submitting, quantity, allowance, t]);\n\n const onApproveAndDeposit = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await onApprove();\n await onDeposit();\n } catch (err) {\n console.error(\"approve and deposit error\", err);\n } finally {\n setSubmitting(false);\n }\n }, [submitting, onApprove, onDeposit]);\n\n return { submitting, onApprove, onDeposit, onApproveAndDeposit };\n}\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../../types\";\n\ntype Options = { quantity: string; maxQuantity: string | number };\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { NetworkId, type API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport type { CurrentChain } from \"./useChainSelect\";\n\nexport const useToken = (\n currentChain?: CurrentChain | null,\n filter: (token: API.TokenInfo) => boolean = () => true,\n) => {\n const [sourceToken, setSourceToken] = useState<API.TokenInfo>();\n const [targetToken, setTargetToken] = useState<API.TokenInfo>();\n\n const [sourceTokens, setSourceTokens] = useState<API.TokenInfo[]>([]);\n const [targetTokens, setTargetTokens] = useState<API.TokenInfo[]>([]);\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n // when chain changed and chain data ready then call this function init tokens\n const onChainInited = useCallback((chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n // const tokens = chainInfo.token_infos.filter((i) => i.is_collateral);\n // all tokens available in the chain, include swap tokens\n const tokens = chainInfo.token_infos?.filter(filter);\n\n if (tokens?.length) {\n // sort tokens, USDC should be the first\n tokens.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n }\n\n const usdcToken = getTokenByTokenList(tokens);\n if (!usdcToken) {\n return;\n }\n setSourceToken(usdcToken);\n setTargetToken(usdcToken);\n\n setSourceTokens(tokens);\n setTargetTokens([usdcToken]);\n }\n }, []);\n\n useEffect(() => {\n onChainInited(currentChain?.info);\n // if settingChain is true, the currentChain will change, so use currentChain.id\n // TODO: confirm currentChain data is correct\n }, [currentChain, onChainInited]);\n\n useEffect(() => {\n if (!sourceToken || !sourceTokens.length) {\n return;\n }\n\n // USDC => USDC\n if (sourceToken.symbol === \"USDC\") {\n setTargetToken(sourceToken);\n setTargetTokens([sourceToken]);\n return;\n }\n\n const usdc = sourceTokens.find((t) => t.symbol === \"USDC\")!;\n\n // if is_collateral\n if (sourceToken.is_collateral) {\n // mainnet and swap_enable: [token] => [USDC,token]\n if (networkId === \"mainnet\" && sourceToken.swap_enable) {\n setTargetToken(sourceToken);\n setTargetTokens([sourceToken, usdc]);\n } else {\n // testnet: [token] => [token]\n setTargetToken(sourceToken);\n setTargetTokens([sourceToken]);\n }\n return;\n }\n\n // if swap token: [token] => [USDC]\n setTargetToken(usdc);\n setTargetTokens([usdc]);\n }, [networkId, sourceToken, sourceTokens]);\n\n return {\n sourceToken,\n targetToken,\n\n sourceTokens,\n targetTokens,\n\n onSourceTokenChange: setSourceToken,\n onTargetTokenChange: setTargetToken,\n };\n};\n","import { FC } from \"react\";\nimport {\n useDepositFormScript,\n DepositFormScriptOptions,\n} from \"./depositForm.script\";\nimport { DepositForm } from \"./depositForm.ui\";\n\nexport type DepositFormWidgetProps = DepositFormScriptOptions;\n\nexport const DepositFormWidget: FC<DepositFormWidgetProps> = (props) => {\n const state = useDepositFormScript(props);\n return <DepositForm {...state} />;\n};\n","import React from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n textVariants,\n Tabs,\n TabPanel,\n WalletIcon,\n} from \"@orderly.network/ui\";\nimport { WithdrawTo } from \"../../types\";\nimport { LtvWidget } from \"../LTV\";\nimport { TextAreaInput } from \"../accountIdInput\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { WithdrawAction } from \"../withdrawAction\";\nimport { WithdrawWarningMessage } from \"../withdrawWarningMessage\";\nimport { WithdrawFormScriptReturn } from \"./withdrawForm.script\";\n\nexport type WithdrawFormProps = WithdrawFormScriptReturn;\n\nexport const WithdrawForm: React.FC<WithdrawFormProps> = (props) => {\n const {\n address,\n loading,\n disabled,\n quantity,\n onQuantityChange,\n sourceToken,\n amount,\n maxQuantity,\n tokenChains,\n currentChain,\n fee,\n settingChain,\n chainVaultBalance,\n crossChainTrans,\n checkIsBridgeless,\n withdrawTo,\n sourceTokens,\n onSourceTokenChange,\n vaultBalanceList,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n } = props;\n\n const { t } = useTranslation();\n\n const internalWithdrawPanel = (\n <TabPanel\n title={t(\"transfer.withdraw.otherAccount\", {\n brokerName: props.brokerName,\n })}\n value={WithdrawTo.Account}\n >\n <TextAreaInput\n label={t(\"common.accountId\")}\n value={props.toAccountId}\n onChange={props.setToAccountId}\n status={props.toAccountIdInputStatus}\n hintMessage={props.toAccountIdHintMessage}\n />\n <Box my={2}>\n <Text size=\"xs\" intensity={54}>\n {t(\"transfer.withdraw.accountId.tips\")}\n </Text>\n </Box>\n </TabPanel>\n );\n\n return (\n <Box\n id=\"oui-withdraw-form\"\n className={textVariants({ weight: \"semibold\" })}\n >\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={sourceToken}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n status={props.inputStatus}\n hintMessage={props.hintMessage}\n vaultBalanceList={vaultBalanceList}\n testId=\"oui-testid-withdraw-dialog-quantity-input\"\n displayType=\"vaultBalance\"\n checkVaultBalance={withdrawTo === WithdrawTo.Wallet}\n />\n </Box>\n <AvailableQuantity\n token={sourceToken}\n amount={amount}\n maxQuantity={maxQuantity.toString()}\n loading={props.balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={props.unsettledPnL}\n hasPositions={props.hasPositions}\n onSettlePnl={props.onSettlePnl}\n tooltipContent={t(\"settle.unsettled.tooltip\")}\n dialogContent={<Trans i18nKey=\"settle.settlePnl.description\" />}\n />\n </Box>\n <ExchangeDivider />\n <Tabs\n value={withdrawTo}\n onValueChange={props.setWithdrawTo as (tab: string) => void}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-3\",\n }}\n >\n <TabPanel\n title={t(\"transfer.web3Wallet.my\")}\n icon={<WalletIcon size={\"xs\"} name={props.walletName ?? \"\"} />}\n value={WithdrawTo.Wallet}\n >\n <ChainSelect\n chains={tokenChains}\n value={currentChain!}\n onValueChange={props.onChainChange}\n wrongNetwork={props.wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n token={sourceToken}\n value={props.showQty}\n readOnly\n />\n </TabPanel>\n {internalWithdrawPanel}\n </Tabs>\n <Box mt={2}>\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={props.currentLTV}\n nextLTV={props.nextLTV}\n />\n </Box>\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <Text size=\"xs\" intensity={36}>\n {t(\"common.fee\")}\n {withdrawTo === WithdrawTo.Wallet ? (\n <>\n {\" ≈ \"}\n <Text size=\"xs\" intensity={80}>\n {fee}\n </Text>\n </>\n ) : (\n <>\n {\" = \"}\n <Text size=\"xs\" intensity={80}>\n 0\n </Text>\n </>\n )}\n </Text>\n </Flex>\n </Box>\n <WithdrawWarningMessage\n checkIsBridgeless={checkIsBridgeless}\n chainVaultBalance={chainVaultBalance as number}\n currentChain={currentChain}\n crossChainTrans={crossChainTrans}\n tokenName={sourceToken?.symbol as string}\n qtyGreaterThanVault={qtyGreaterThanVault}\n qtyGreaterThanMaxAmount={qtyGreaterThanMaxAmount}\n message={props.warningMessage}\n />\n <Flex justify=\"center\">\n <WithdrawAction\n checkIsBridgeless={checkIsBridgeless}\n networkId={props.networkId}\n disabled={disabled}\n loading={loading}\n onWithdraw={props.onWithdraw}\n crossChainWithdraw={props.crossChainWithdraw}\n currentChain={currentChain}\n address={address}\n quantity={quantity}\n fee={fee}\n withdrawTo={withdrawTo}\n onTransfer={props.onTransfer}\n />\n </Flex>\n </Box>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport { InputStatus } from \"../../types\";\n\nexport type TextAreaInputProps = {\n value: string;\n onChange: (value: string) => void;\n status?: InputStatus;\n hintMessage?: string;\n placeholder?: string;\n className?: string;\n label: string;\n};\n\nexport const TextAreaInput = (props: TextAreaInputProps) => {\n const { value, onChange, status, hintMessage, placeholder, label } = props;\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e.target.value);\n\n // auto adjust height\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n };\n\n useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [value]);\n\n const prefix = (\n <div className=\"oui-absolute oui-left-3 oui-top-0.5 oui-z-[1]\">\n <Text size=\"2xs\" intensity={36}>\n {label}\n </Text>\n </div>\n );\n\n const message = (\n <Flex mt={1} gapX={1} px={1}>\n <Box\n width={4}\n height={4}\n r=\"full\"\n className={cn(\n status === \"error\" && \"oui-bg-danger-light\",\n status === \"warning\" && \"oui-bg-warning-light\",\n )}\n ></Box>\n <Text\n size=\"2xs\"\n className={cn(\n status === \"error\" && \"oui-text-danger-light\",\n status === \"warning\" && \"oui-text-warning-light\",\n )}\n >\n {hintMessage}\n </Text>\n </Flex>\n );\n return (\n <div className=\"oui-relative\">\n {prefix}\n <textarea\n ref={textareaRef}\n placeholder={placeholder}\n className={cn(\n // hide resize height control and scrollbar\n \"oui-resize-none oui-overflow-y-hidden\",\n \"oui-relative oui-min-h-[54px] oui-px-3 oui-pb-2 oui-pt-5\",\n \"oui-w-full oui-bg-base-5 oui-text-sm oui-text-base-contrast\",\n \"oui-rounded-lg oui-outline-none\",\n \"oui-border oui-border-line focus:oui-border-primary-light\",\n status === \"error\" &&\n \"oui-border-danger-light focus-within:oui-border-danger-light focus:oui-border-danger-light\",\n status === \"warning\" &&\n \"oui-border-warning-light focus-within:oui-border-warning-light focus:oui-border-warning-light\",\n props.className,\n )}\n rows={1}\n value={value}\n onChange={handleChange}\n />\n {hintMessage && message}\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { RefreshIcon } from \"../../icons\";\n\ntype UnsettlePnlInfoProps = {\n hasPositions: boolean;\n unsettledPnl?: number;\n onSettlePnl: () => Promise<any>;\n tooltipContent?: ReactNode;\n dialogContent?: ReactNode;\n};\n\nexport const UnsettlePnlInfo = (props: UnsettlePnlInfoProps) => {\n const {\n hasPositions,\n unsettledPnl,\n onSettlePnl,\n tooltipContent,\n dialogContent,\n } = props;\n const { t } = useTranslation();\n\n if (unsettledPnl === 0 && !hasPositions) {\n return <></>;\n }\n\n const settlePnlDialog = () => {\n modal.confirm({\n title: t(\"settle.settlePnl\"),\n content: dialogContent,\n onOk: () => {\n return onSettlePnl();\n },\n });\n };\n\n return (\n <Flex justify=\"between\" className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <Tooltip\n className=\"oui-max-w-[274px] oui-font-semibold\"\n content={tooltipContent as any}\n >\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <ExclamationFillIcon\n size={14}\n className=\"oui-text-warning-darken\"\n />\n <Text className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\">\n {`${t(\"settle.unsettled\")}:`}\n </Text>\n </Flex>\n </Tooltip>\n <Text.numeral\n showIdentifier\n coloring\n weight=\"semibold\"\n dp={6}\n data-testid=\"oui-testid-withdraw-dialog-unsettledPnl-value\"\n >\n {unsettledPnl}\n </Text.numeral>\n <Text>USDC</Text>\n </Flex>\n <Flex itemAlign=\"center\" gap={1} className=\"oui-cursor-pointer\">\n <RefreshIcon className=\"oui-text-primary\" />\n <Text\n data-testid=\"oui-testid-withdraw-dialog-settle-text\"\n size=\"2xs\"\n color=\"primary\"\n className=\" oui-select-none\"\n onClick={settlePnlDialog}\n >\n {t(\"common.settle\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, modal } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { WithdrawTo } from \"../../types\";\nimport { CrossWithdrawConfirm } from \"../crossWithdrawConfirm\";\nimport SwitchChainButton from \"./SwitchChainButton\";\n\ninterface IProps {\n disabled?: boolean;\n loading?: boolean;\n onWithdraw: () => Promise<void>;\n networkId?: NetworkId;\n crossChainWithdraw: boolean;\n address?: string;\n currentChain?: any;\n quantity: string;\n fee: number;\n checkIsBridgeless: boolean;\n withdrawTo: WithdrawTo;\n onTransfer: () => void;\n}\n\nexport const WithdrawAction = (props: IProps) => {\n const {\n disabled,\n loading,\n onWithdraw,\n networkId,\n crossChainWithdraw,\n address,\n currentChain,\n quantity,\n fee,\n checkIsBridgeless,\n onTransfer,\n } = props;\n const { t } = useTranslation();\n\n const amount = useMemo(() => {\n if (!quantity) {\n return 0;\n }\n return new Decimal(quantity).minus(fee ?? 0).toNumber();\n }, [quantity, fee]);\n\n const preWithdraw = () => {\n if (crossChainWithdraw) {\n modal.confirm({\n title: t(\"transfer.withdraw.crossChain.confirmWithdraw\"),\n content: (\n <CrossWithdrawConfirm\n address={address!}\n amount={amount}\n currentChain={currentChain}\n />\n ),\n classNames: {\n content: \"oui-font-semibold\",\n body: \"!oui-pb-0\",\n footer: \"!oui-pt-0\",\n },\n\n onOk: async () => {\n onWithdraw();\n },\n });\n return;\n }\n onWithdraw();\n };\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n const renderButton = () => {\n if (props.withdrawTo === WithdrawTo.Account) {\n return (\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={onTransfer}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n\n if (checkIsBridgeless) {\n return (\n <Button\n data-testid=\"oui-testid-withdraw-dialog-withdraw-btn\"\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={preWithdraw}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n return <SwitchChainButton networkId={networkId} size={buttonSize} />;\n };\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n bridgeLessOnly\n buttonProps={{ fullWidth: true, size: buttonSize }}\n >\n {renderButton()}\n </AuthGuard>\n </Box>\n );\n};\n","import { Box, ChainIcon, Flex, Text } from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n currentChain: any;\n amount: number;\n address: string;\n}\n\nexport const CrossWithdrawConfirm = ({\n address,\n amount,\n currentChain,\n}: IProps) => {\n const { t } = useTranslation();\n\n const networkName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return undefined;\n }, [currentChain]);\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"start\"\n className=\"oui-gap-1 lg:oui-gap-3\"\n >\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n mb={5}\n className=\"oui-gap-3 lg:oui-gap-4\"\n >\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientAddress\")}\n </Text>\n <Text size=\"sm\" intensity={98} className=\"oui-break-all\">\n {address}\n </Text>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientNetwork\")}\n </Text>\n <Flex gap={1}>\n <ChainIcon\n className=\"oui-h-[18px] oui-w-[18px]\"\n size={\"sm\"}\n chainId={currentChain.id}\n />\n\n <Text size=\"sm\" intensity={98}>\n {networkName}\n </Text>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"transfer.withdraw.crossChain.withdrawAmount\")} (USDC)`}\n </Text>\n <Text.numeral size=\"sm\" intensity={98} dp={2}>\n {amount}\n </Text.numeral>\n </Flex>\n </Flex>\n <Flex\n justify=\"center\"\n className=\"oui-text-warning-darken oui-text-2xs lg:oui-text-xs oui-text-center\"\n mb={3}\n >\n {t(\"transfer.withdraw.crossChain.warning\")}\n </Flex>\n </Flex>\n );\n};\n","import { Button, ButtonProps, Flex, modal, toast } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n networkId?: NetworkId;\n size: ButtonProps[\"size\"];\n}\n\nexport default function SwitchChainButton(props: IProps) {\n const { t } = useTranslation();\n\n const switchChain = () => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorDialogId, {\n networkId: props.networkId,\n bridgeLessOnly: true,\n })\n .then(\n (r) => {\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n return (\n <Flex direction={\"column\"}>\n <Button\n color=\"warning\"\n size={props.size}\n fullWidth\n onClick={() => {\n switchChain();\n }}\n >\n {t(\"connector.switchNetwork\")}\n </Button>\n </Flex>\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Flex } from \"@orderly.network/ui\";\n\ninterface WarningMessageProps {\n chainVaultBalance: number;\n currentChain: any;\n crossChainTrans: boolean;\n checkIsBridgeless: boolean;\n tokenName: string;\n qtyGreaterThanMaxAmount: boolean;\n qtyGreaterThanVault: boolean;\n message?: string;\n}\n\nexport const WithdrawWarningMessage: React.FC<WarningMessageProps> = (\n props,\n) => {\n const {\n chainVaultBalance,\n currentChain,\n crossChainTrans,\n tokenName,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n } = props;\n const { t } = useTranslation();\n const { state } = useAccount();\n\n const chainName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return undefined;\n }, [currentChain]);\n\n const renderContent = () => {\n if (state.status === AccountStatusEnum.NotConnected) {\n return null;\n }\n if (crossChainTrans) {\n return t(\"transfer.withdraw.crossChain.process\");\n }\n if (qtyGreaterThanMaxAmount) {\n return t(\"transfer.insufficientBalance\");\n }\n if (qtyGreaterThanVault) {\n return t(\"transfer.withdraw.vaultWarning\", {\n tokenName: tokenName,\n chainName: chainName,\n balance: chainVaultBalance,\n });\n }\n\n return props.message;\n };\n\n const content = renderContent();\n\n if (!content) {\n return null;\n }\n\n return (\n <Flex\n my={4}\n className=\"oui-justify-center oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useChains,\n useConfig,\n useEventEmitter,\n useLocalStorage,\n useMemoizedFn,\n useQuery,\n useWalletConnector,\n useWalletTopic,\n useWithdraw,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n NetworkId,\n} from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport {\n Decimal,\n int2hex,\n praseChainIdToNumber,\n toNonExponential,\n} from \"@orderly.network/utils\";\nimport { InputStatus, WithdrawTo } from \"../../types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useToken } from \"../depositForm/hooks/useToken\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useInternalWithdraw } from \"./hooks/useInternalWithdraw\";\nimport { useWithdrawFee } from \"./hooks/useWithdrawFee\";\nimport { useWithdrawLTV } from \"./hooks/useWithdrawLTV\";\n\nexport type WithdrawFormScriptReturn = ReturnType<typeof useWithdrawFormScript>;\n\nconst markPrice = 1;\n\nexport type WithdrawFormScriptOptions = {\n close?: () => void;\n};\n\nexport const useWithdrawFormScript = (options: WithdrawFormScriptOptions) => {\n const { t } = useTranslation();\n const [crossChainTrans, setCrossChainTrans] = useState<boolean>(false);\n const [loading, setLoading] = useState(false);\n const [assetHistory] = useAssetsHistory(\n {\n page: 1,\n pageSize: 1,\n side: AssetHistorySideEnum.WITHDRAW,\n status: AssetHistoryStatusEnum.PENDING_REBALANCE,\n },\n // update when withdraw status changed\n {\n shouldUpdateOnWalletChanged: (data) =>\n data.side === AssetHistorySideEnum.WITHDRAW,\n },\n );\n\n const config = useConfig();\n\n const brokerName = config.get(\"brokerName\");\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const ee = useEventEmitter();\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { data: vaultBalanceList } = useQuery<API.VaultBalance[]>(\n `/v1/public/vault_balance`,\n {\n revalidateOnMount: true,\n errorRetryCount: 3,\n },\n );\n\n const {\n connectedChain,\n wallet,\n setChain: switchChain,\n settingChain,\n } = useWalletConnector();\n\n const currentChain = useMemo(() => {\n // if (!connectedChain) return null;\n\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : Number.parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) {\n return null;\n }\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useToken(\n currentChain,\n (token) => token.symbol === \"USDC\" || token.is_collateral,\n );\n\n const tokenChains = useMemo(() => {\n return chains\n .filter((chain) =>\n chain.token_infos?.some(\n (token) => token.symbol === sourceToken?.symbol,\n ),\n )\n .map((chain) => chain.network_infos);\n }, [chains, networkId, sourceToken]);\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const { withdraw, maxAmount, unsettledPnL } = useWithdraw({\n token: sourceToken?.symbol,\n decimals: sourceToken?.token_decimal,\n });\n\n const internalWithdrawState = useInternalWithdraw({\n token: sourceToken?.symbol!,\n decimals: sourceToken?.token_decimal!,\n quantity,\n setQuantity,\n close: options.close,\n setLoading,\n });\n\n const { withdrawTo, toAccountId } = internalWithdrawState;\n\n const checkIsBridgeless = useMemo(() => {\n if (wrongNetwork) {\n return false;\n }\n if (!currentChain) {\n return false;\n }\n if (networkId === \"testnet\") {\n return true;\n }\n if (!currentChain.info) {\n return false;\n }\n if (\n !currentChain.info.network_infos ||\n !currentChain.info.network_infos.bridgeless\n ) {\n return false;\n }\n return true;\n }, [currentChain, wrongNetwork]);\n\n const cleanData = () => {\n setQuantity(\"\");\n };\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return switchChain?.({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n // clean input value\n cleanData();\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n toast.error(`${t(\"connector.switchChain.failed\")}: ${error.message}`);\n });\n },\n [currentChain, switchChain, findByChainId, t],\n );\n\n const chainVaultBalance = useMemo(() => {\n if (!Array.isArray(vaultBalanceList) || !currentChain) {\n return null;\n }\n // chain.id\n const vaultBalance = vaultBalanceList.find(\n (item) =>\n Number.parseInt(item.chain_id) === currentChain?.id &&\n item.token === sourceToken?.symbol,\n );\n if (vaultBalance) {\n return vaultBalance.balance;\n }\n return null;\n }, [chains, currentChain, vaultBalanceList, sourceToken?.symbol]);\n\n const qtyGreaterThanMaxAmount = useMemo<boolean>(() => {\n if (!quantity || Number.isNaN(quantity)) {\n return false;\n }\n if (!maxAmount || Number.isNaN(maxAmount)) {\n return true;\n }\n return new Decimal(quantity).gt(maxAmount);\n }, [quantity, maxAmount]);\n\n const qtyGreaterThanVault = useMemo<boolean>(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return false;\n }\n if (!quantity || Number.isNaN(quantity)) {\n return false;\n }\n if (!chainVaultBalance || Number.isNaN(chainVaultBalance)) {\n return true;\n }\n return new Decimal(quantity).gt(chainVaultBalance);\n }, [quantity, chainVaultBalance, withdrawTo]);\n\n const crossChainWithdraw = useMemo(() => {\n if (chainVaultBalance !== null) {\n const qtyNum = Number.parseFloat(quantity);\n const value = qtyNum > chainVaultBalance && qtyNum <= maxAmount;\n return value;\n }\n return false;\n }, [quantity, maxAmount, chainVaultBalance]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n\n setLoading(true);\n return withdraw({\n amount: quantity,\n token: sourceToken?.symbol!,\n chainId: currentChain?.id!,\n allowCrossChainWithdraw: crossChainWithdraw,\n })\n .then((res) => {\n toast.success(t(\"transfer.withdraw.requested\"));\n ee.emit(\"withdraw:requested\");\n options.close?.();\n setQuantity(\"\");\n })\n .catch((e) => {\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n return;\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(e.message);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const fee = useWithdrawFee({\n crossChainWithdraw,\n currentChain,\n token: sourceToken?.symbol!,\n });\n\n const minAmountWarningMessage = useMemo(() => {\n const minAmount = new Decimal(\n sourceToken?.minimum_withdraw_amount ?? 0,\n ).add(fee);\n\n if (quantity && new Decimal(quantity).lt(minAmount)) {\n return t(\"transfer.withdraw.minAmount.error\", {\n minAmount: minAmount.toString(),\n });\n }\n }, [quantity, sourceToken?.minimum_withdraw_amount, fee, t]);\n\n const showQty = useMemo(() => {\n if (!quantity) {\n return \"\";\n }\n\n const value = new Decimal(quantity).sub(fee ?? 0);\n if (value.isNegative()) {\n return \"\";\n }\n return toNonExponential(value.toNumber());\n }, [fee, quantity]);\n\n useEffect(() => {\n if (!quantity) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n const qty = new Decimal(quantity ?? 0);\n if (unsettledPnL < 0) {\n if (qty.gt(maxAmount)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxAmount, unsettledPnL, crossChainTrans]);\n\n const disabled =\n crossChainTrans ||\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus) ||\n (withdrawTo === WithdrawTo.Account && !toAccountId) ||\n qtyGreaterThanMaxAmount ||\n qtyGreaterThanVault ||\n !!minAmountWarningMessage;\n\n useEffect(() => {\n setCrossChainTrans(!!assetHistory?.length);\n }, [assetHistory?.length]);\n\n // it need to use useMemoizedFn wrap ,otherwise crossChainTrans and assetHistory will be first render data\n const handleWalletTopic = useMemoizedFn((data: any) => {\n if (!crossChainTrans) {\n return;\n }\n const txId = assetHistory?.[0]?.tx_id;\n const { trxId, transStatus } = data;\n if (trxId === txId && transStatus === \"COMPLETED\") {\n setCrossChainTrans(false);\n }\n });\n\n useWalletTopic({\n onMessage: handleWalletTopic,\n });\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n const { currentLTV, nextLTV, ltvWarningMessage } = useWithdrawLTV({\n token: sourceToken?.symbol!,\n quantity,\n });\n\n const warningMessage = ltvWarningMessage || minAmountWarningMessage;\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n sourceToken,\n onSourceTokenChange,\n sourceTokens,\n inputStatus,\n hintMessage,\n amount,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n unsettledPnL,\n wrongNetwork,\n settingChain,\n tokenChains,\n currentChain,\n onChainChange,\n onWithdraw,\n chainVaultBalance,\n fee,\n crossChainWithdraw,\n crossChainTrans,\n showQty,\n networkId,\n checkIsBridgeless,\n hasPositions,\n onSettlePnl,\n brokerName,\n qtyGreaterThanMaxAmount: qtyGreaterThanMaxAmount,\n qtyGreaterThanVault: qtyGreaterThanVault,\n vaultBalanceList: vaultBalanceList?.filter(\n (item) => Number.parseInt(item.chain_id) === currentChain?.id,\n ),\n ...internalWithdrawState,\n currentLTV,\n nextLTV,\n warningMessage,\n };\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n usePositionStream,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport type SettlePnlOptions = {\n accountId?: string;\n};\n\nexport const useSettlePnl = (options?: SettlePnlOptions) => {\n const { accountId } = options || {};\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { account, state } = useAccount();\n const [positionData] = usePositionStream();\n\n const hasPositions = useMemo(\n () => !!positionData?.rows?.length,\n [positionData],\n );\n\n const onSettlePnl = async () => {\n const isSubAccount = accountId && state.mainAccountId !== accountId;\n const settleFn = isSubAccount\n ? account.settleSubAccount({ subAccountId: accountId })\n : account.settle({ accountId });\n return settleFn\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n })\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\n } else if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n } else if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n } else {\n toast.error(e.message);\n return Promise.reject(e);\n }\n });\n };\n\n return {\n hasPositions,\n onSettlePnl,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useInternalTransfer } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { InputStatus, WithdrawTo } from \"../../../types\";\nimport { checkIsAccountId, getTransferErrorMessage } from \"../../../utils\";\n\ntype InternalWithdrawOptions = {\n token: string;\n decimals: number;\n quantity: string;\n setQuantity: (quantity: string) => void;\n close?: () => void;\n setLoading: (loading: boolean) => void;\n};\n\nexport function useInternalWithdraw(options: InternalWithdrawOptions) {\n const { token, quantity, setQuantity, close, setLoading, decimals } = options;\n const { t } = useTranslation();\n const [withdrawTo, setWithdrawTo] = useState<WithdrawTo>(WithdrawTo.Wallet);\n const [toAccountId, setToAccountId] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { transfer, submitting } = useInternalTransfer();\n\n const onTransfer = useCallback(() => {\n const num = Number(quantity);\n\n if (Number.isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting || !toAccountId) {\n return;\n }\n setLoading(true);\n\n transfer({\n token,\n receiver: toAccountId,\n amount: quantity,\n decimals,\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n close?.();\n })\n .catch((err) => {\n console.log(\"transfer error\", err);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [t, quantity, token, submitting, toAccountId, transfer]);\n\n useEffect(() => {\n if (!toAccountId) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n if (checkIsAccountId(toAccountId)) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n } else {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.withdraw.accountId.invalid\"));\n }\n }, [toAccountId]);\n\n return {\n withdrawTo,\n setWithdrawTo,\n toAccountId,\n setToAccountId,\n onTransfer,\n internalWithdrawSubmitting: submitting,\n toAccountIdInputStatus: inputStatus,\n toAccountIdHintMessage: hintMessage,\n };\n}\n","import { useMemo } from \"react\";\nimport { useTokenInfo } from \"@orderly.network/hooks\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\n\nexport function useWithdrawFee(options: {\n token: string;\n currentChain?: CurrentChain | null;\n crossChainWithdraw: boolean;\n}) {\n const { crossChainWithdraw, currentChain, token } = options;\n\n const tokenInfo = useTokenInfo(token);\n\n const fee = useMemo(() => {\n if (!currentChain) {\n return 0;\n }\n\n const item = tokenInfo?.chain_details?.find(\n (chain) => Number.parseInt(chain.chain_id) === currentChain.id,\n );\n\n if (!item) {\n return 0;\n }\n\n if (crossChainWithdraw) {\n return (\n (item.withdrawal_fee || 0) + (item.cross_chain_withdrawal_fee || 0)\n );\n }\n\n return item.withdrawal_fee || 0;\n }, [tokenInfo, token, currentChain, crossChainWithdraw]);\n\n return fee;\n}\n","import { useMemo } from \"react\";\nimport { useComputedLTV, useQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useWithdrawLTV = (params: { token: string; quantity: string }) => {\n const { token, quantity } = params;\n const { ltv_threshold } = useConvertThreshold();\n const { t } = useTranslation();\n\n const currentLTV = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity ? -Number(quantity) : 0,\n token,\n });\n\n const ltvWarningMessage = useMemo(() => {\n if (ltv_threshold && nextLTV) {\n const threshold = ltv_threshold * 100;\n if (nextLTV > threshold) {\n return t(\"transfer.withdraw.LTV.error\", {\n threshold,\n });\n }\n }\n return \"\";\n }, [nextLTV, ltv_threshold]);\n\n return {\n currentLTV,\n nextLTV,\n ltvWarningMessage,\n t,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n revalidateOnFocus: false,\n },\n );\n\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n };\n};\n","import { FC } from \"react\";\nimport {\n useWithdrawFormScript,\n WithdrawFormScriptOptions,\n} from \"./withdrawForm.script\";\nimport { WithdrawForm } from \"./withdrawForm.ui\";\n\nexport type WithdrawFormWidgetProps = WithdrawFormScriptOptions;\n\nexport const WithdrawFormWidget: FC<WithdrawFormWidgetProps> = (props) => {\n const state = useWithdrawFormScript(props);\n return <WithdrawForm {...state} />;\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { DepositSlot } from \"./depositSlot\";\nimport { WithdrawSlot } from \"./withdrawSlot\";\n\nexport const DepositAndWithdrawWithDialogId = \"DepositAndWithdrawWithDialogId\";\nexport const DepositAndWithdrawWithSheetId = \"DepositAndWithdrawWithSheetId\";\n\nexport type DepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n};\n\nexport const DepositAndWithdraw: FC<DepositAndWithdrawProps> = (props) => {\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\",\n );\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel\n title={t(\"common.deposit\")}\n icon={<ArrowDownSquareFillIcon />}\n value=\"deposit\"\n >\n <DepositSlot close={props.close} />\n {/* <DepositFormWidget close={props.close} /> */}\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <WithdrawSlot close={props.close} />\n {/* <WithdrawFormWidget close={props.close} /> */}\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(DepositAndWithdrawWithDialogId, DepositAndWithdraw, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n});\n\nregisterSimpleSheet(DepositAndWithdrawWithSheetId, DepositAndWithdraw);\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { DepositFormWidget } from \"../depositForm\";\nimport { DepositFormWidgetProps } from \"../depositForm/depositForm.widget\";\n\nexport const DepositSlot = (props: DepositFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.DepositForm}\n defaultWidget={DepositFormWidget}\n {...props}\n />\n );\n};\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { WithdrawFormWidget } from \"../withdrawForm\";\nimport { WithdrawFormWidgetProps } from \"../withdrawForm/withdrawForm.widget\";\n\nexport const WithdrawSlot = (props: WithdrawFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.WithdrawForm}\n defaultWidget={WithdrawFormWidget}\n {...props}\n />\n );\n};\n","import { FC } from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { ActionButton } from \"../../actionButton\";\nimport { AvailableQuantity } from \"../../availableQuantity\";\nimport { BrokerWallet } from \"../../brokerWallet\";\nimport { ChainSelect } from \"../../chainSelect\";\nimport { ExchangeDivider } from \"../../exchangeDivider\";\nimport { QuantityInput } from \"../../quantityInput\";\nimport { Slippage } from \"../../slippage\";\nimport { SwapCoin } from \"../../swapCoin\";\nimport { Web3Wallet } from \"../../web3Wallet\";\nimport { Notice } from \"../components/notice\";\nimport { SwapFee } from \"../components/swapFee\";\nimport { UseSwapDepositFormScriptReturn } from \"./swapDepositForm.script\";\n\nexport const SwapDepositForm: FC<UseSwapDepositFormScriptReturn> = (props) => {\n const {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n } = props;\n\n return (\n <Box\n id=\"oui-swap-deposit-form\"\n className={textVariants({ weight: \"semibold\" })}\n >\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Web3Wallet />\n\n <Box mt={3} mb={1}>\n <ChainSelect\n chains={chains}\n value={currentChain!}\n onValueChange={onChainChange}\n wrongNetwork={wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n status={inputStatus}\n hintMessage={hintMessage}\n fetchBalance={fetchBalance}\n data-testid=\"oui-testid-swap-deposit-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity);\n }}\n />\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={dst as any}\n value={swapQuantity}\n loading={swapRevalidating}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n\n <Flex direction=\"column\" itemAlign=\"start\" mt={1} gapY={1}>\n <Flex justify=\"between\" width=\"100%\">\n {/* <SwapCoin token={token as any} dst={dst} price={swapPrice} /> */}\n {/* <SwapCoin\n sourceSymbol={token as any}\n targetSymbol={dst.symbol}\n indexPrice={swapPrice}\n /> */}\n {(needSwap || needCrossSwap) && (\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n )}\n </Flex>\n\n <SwapFee {...fee} />\n </Flex>\n </Box>\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={token?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n networkId={networkId}\n />\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useConfig, useDeposit, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"../../depositForm/hooks\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { useNeedSwapAndCross } from \"../hooks/useNeedSwapAndCross\";\nimport { useSwapEnquiry } from \"../hooks/useSwapEnquiry\";\nimport { useSwapFee } from \"../hooks/useSwapFee\";\nimport { useToken } from \"../hooks/useToken\";\nimport { SwapMode } from \"../types\";\n\nexport type UseSwapDepositFormScriptReturn = ReturnType<\n typeof useSwapDepositFormScript\n>;\n\nexport type UseSwapDepositFormScriptOptions = {\n onClose?: () => void;\n};\n\nexport const useSwapDepositFormScript = (\n options: UseSwapDepositFormScriptOptions,\n) => {\n const [slippage, setSlippage] = useLocalStorage(\n \"orderly_swap_deposit_slippage\",\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const { wrongNetwork } = useAppContext();\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const tokensFilter = useCallback((chainInfo: API.Chain) => {\n return (\n chainInfo.token_infos.filter((token) => {\n if (chainInfo.network_infos.bridgeless && token.symbol === \"USDC\") {\n return true;\n }\n return !!(token as API.TokenInfo).swap_enable;\n }) ?? []\n );\n }, []);\n\n const { token, tokens, onTokenChange } = useToken({\n currentChain,\n tokensFilter,\n });\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n } = useDeposit({\n address: token?.address,\n decimals: token?.decimals,\n srcChainId: currentChain?.id,\n srcToken: token?.symbol,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n depositorAddress: (currentChain?.info?.network_infos as API.NetworkInfos)\n ?.depositor,\n });\n\n const maxQuantity = useMemo(\n () =>\n new Decimal(balance || 0)\n .todp(token?.precision ?? 2, Decimal.ROUND_DOWN)\n .toString(),\n [balance, token],\n );\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n });\n\n const { needSwap, needCrossSwap } = useNeedSwapAndCross({\n srcToken: token,\n srcChainId: currentChain?.id,\n dstChainId: dst?.chainId,\n });\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcToken: token?.address,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n dstToken: dst.address,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (token?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = () => {\n cleanTransactionInfo();\n setQuantity(\"\");\n };\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.onClose?.();\n }, [options.onClose]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: token!.symbol,\n // swap precision\n displayDecimals: token?.precision,\n amount: quantity,\n decimals: token!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const { submitting, onApprove, onDeposit } = useDepositAction({\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit: needSwap || needCrossSwap,\n customDeposit: onSwapDeposit,\n onSuccess,\n });\n\n const loading = submitting || depositFeeRevalidating! || swapRevalidating;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating;\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: token,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n useEffect(() => {\n cleanData();\n }, [token, currentChain?.id]);\n\n return {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange: setQuantity,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\n\ntype Options = {\n currentChain: CurrentChain | null;\n tokensFilter?: (chainInfo: API.Chain) => API.TokenInfo[];\n};\n\nexport function useToken(options: Options) {\n const { currentChain, tokensFilter } = options;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n // when chain changed and chain data ready then call this function\n const onChainInited = useCallback(\n (chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n const tokens =\n typeof tokensFilter === \"function\"\n ? tokensFilter(chainInfo)\n : chainInfo.token_infos;\n\n setTokens(tokens);\n\n const newToken = getTokenByTokenList(tokens);\n\n if (!newToken) return;\n\n setToken(newToken);\n }\n },\n [tokensFilter],\n );\n\n useEffect(() => {\n onChainInited(currentChain?.info);\n // if settingChain is true, the currentChain will change, so use currentChain.id\n }, [currentChain?.id, onChainInited]);\n\n return { token, tokens, onTokenChange: setToken };\n}\n","import { FC } from \"react\";\nimport {\n useSwapDepositFormScript,\n UseSwapDepositFormScriptOptions,\n} from \"./swapDepositForm.script\";\nimport { SwapDepositForm } from \"./swapDepositForm.ui\";\n\nexport type SwapDepositFormWidgetProps = UseSwapDepositFormScriptOptions;\n\nexport const SwapDepositFormWidget: FC<SwapDepositFormWidgetProps> = (\n props,\n) => {\n const state = useSwapDepositFormScript(props);\n return <SwapDepositForm {...state} />;\n};\n","import { FC } from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Button, Flex, textVariants, Text, cn } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { TransferVerticalIcon } from \"../../icons\";\nimport { AccountSelect } from \"../accountSelect\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { TransferFormScriptReturn } from \"./transferForm.script\";\n\nexport type TransferFormProps = TransferFormScriptReturn;\n\nexport const TransferForm: FC<TransferFormProps> = (props) => {\n const {\n networkId,\n disabled,\n onTransfer,\n quantity,\n onQuantityChange,\n amount,\n tokens,\n token,\n onTokenChange,\n maxQuantity,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccounts,\n toAccounts,\n fromAccount,\n onFromAccountChange,\n toAccount,\n onToAccountChange,\n onExchange,\n } = props;\n\n const { t } = useTranslation();\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.from\")}\n </Text>\n <Box mt={1} mb={1}>\n <AccountSelect\n subAccounts={fromAccounts}\n value={fromAccount}\n onValueChange={onFromAccountChange}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n hintMessage={hintMessage}\n status={inputStatus}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={unsettledPnL}\n hasPositions={hasPositions}\n onSettlePnl={onSettlePnl}\n tooltipContent={t(\"transfer.internalTransfer.unsettled.tooltip\")}\n dialogContent={\n // @ts-ignore\n <Trans i18nKey=\"transfer.internalTransfer.settlePnl.description\" />\n }\n />\n </Box>\n\n <ExchangeDivider\n icon={\n <TransferVerticalIcon\n // TODO: determines if the current orderly key is the main account\n // className={cn(\n // isMainAccount\n // ? \"oui-cursor-pointer oui-text-primary\"\n // : \" oui-cursor-not-allowed oui-text-base-contrast-20\",\n // )}\n // onClick={isMainAccount ? onExchange : undefined}\n className=\"oui-cursor-pointer oui-text-primary\"\n onClick={onExchange}\n />\n }\n />\n\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.to\")}\n </Text>\n <Box mt={1}>\n <AccountSelect\n subAccounts={toAccounts}\n value={toAccount}\n onValueChange={onToAccountChange}\n />\n <Flex\n className={cn(\n \"oui-mt-[2px] oui-h-[31px] oui-text-base-contrast-54\",\n \"oui-rounded-b-xl oui-rounded-t-sm\",\n )}\n justify=\"between\"\n itemAlign=\"center\"\n px={3}\n intensity={600}\n >\n <Text size=\"2xs\">\n {t(\"transfer.internalTransfer.currentAssetValue\")}\n </Text>\n <Text.numeral\n size=\"2xs\"\n intensity={54}\n unit={` ${token.symbol}`}\n dp={token?.precision}\n padding={false}\n >\n {toAccountAsset}\n </Text.numeral>\n </Flex>\n </Box>\n </Box>\n\n <Flex justify=\"center\">\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={submitting}\n size={buttonSize}\n onClick={onTransfer}\n >\n {t(\"common.transfer\")}\n </Button>\n </AuthGuard>\n </Box>\n </Flex>\n </Box>\n );\n};\n","import { useState } from \"react\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\n\ntype AccountSelectProps = {\n subAccounts?: SubAccount[];\n value?: SubAccount;\n onValueChange?: (subAccount: SubAccount) => void;\n};\n\nexport const AccountSelect: React.FC<AccountSelectProps> = (props) => {\n const { subAccounts = [], value } = props;\n const [open, setOpen] = useState(false);\n\n const selectable = subAccounts.length > 1;\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-b-sm oui-rounded-t-xl oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto oui-bg-base-6\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n size=\"xs\"\n intensity={80}\n rule={value?.description ? undefined : \"address\"}\n >\n {value?.description || value?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{value?.id}</Text.formatted>\n </Text>\n </Flex>\n {selectable && <ExchangeIcon className=\"oui-text-base-contrast-54\" />}\n </Flex>\n );\n\n const content = subAccounts.map((subAccount, index) => {\n const isActive = subAccount.id === value?.id;\n\n const asset = subAccount?.holding?.find(\n (item) => item.token === \"USDC\",\n )?.holding;\n\n return (\n <Flex\n key={subAccount.id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-transfer-form-account-select-item\",\n \"oui-cursor-pointer oui-py-[6px] hover:oui-bg-base-5\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n props.onValueChange?.(subAccount);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <Flex direction=\"column\" itemAlign=\"start\" className=\"oui-text-2xs\">\n <Text.formatted\n rule={subAccount?.description ? undefined : \"address\"}\n intensity={80}\n >\n {subAccount?.description || subAccount?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{subAccount?.id}</Text.formatted>\n </Text>\n </Flex>\n </Flex>\n <Flex gapX={3}>\n <Text.numeral size=\"2xs\" intensity={54} unit=\" USDC\">\n {asset || 0}\n </Text.numeral>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-transfer-form-account-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-transfer-form-account-select-dropdown-menu-content\",\n \"oui-font-semibold\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content} </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n SubAccount,\n useAccount,\n useConfig,\n useSubAccountDataObserver,\n useSubAccountMaxWithdrawal,\n useTransfer,\n} from \"@orderly.network/hooks\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { getTransferErrorMessage } from \"../../utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\n\nexport type TransferFormScriptReturn = ReturnType<typeof useTransferFormScript>;\n\nexport type TransferFormScriptOptions = {\n /** target sub account id */\n toAccountId?: string;\n token?: string;\n close?: () => void;\n};\n\nconst DEFAULT_TOKEN = {\n symbol: \"USDC\",\n} as API.TokenInfo;\n\nexport const useTransferFormScript = (options: TransferFormScriptOptions) => {\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\"\");\n const [fromAccount, setFromAccount] = useState<SubAccount>();\n const [toAccount, setToAccount] = useState<SubAccount>();\n const [mainAccount, setMainAccount] = useState<SubAccount>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([DEFAULT_TOKEN]);\n const [token, setToken] = useState<API.TokenInfo>(DEFAULT_TOKEN);\n const [holdingMap, setHoldingMap] = useState<Record<string, API.Holding[]>>(\n {},\n );\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { state, isMainAccount, subAccount } = useAccount();\n\n const tokensInfo = useTokensInfo();\n\n const {\n transfer,\n submitting,\n maxAmount: currentMaxAmount,\n unsettledPnL: currentUnsettledPnL,\n } = useTransfer({ fromAccountId: fromAccount?.id, token: token.symbol });\n\n const subAccounts = state.subAccounts;\n const mainAccountId = state.mainAccountId;\n const accountId = state.accountId;\n\n // when current account is main account, and fromAccount is not main account, set observerAccountId to fromAccountId\n // current sub account use main account orderly key to transfer, so fromAccount can be main account or current sub account\n const observerAccountId = isMainAccount\n ? fromAccount?.id !== mainAccountId\n ? fromAccount?.id\n : undefined\n : fromAccount?.id;\n\n const { hasPositions: currentHasPositions, onSettlePnl } = useSettlePnl({\n accountId: fromAccount?.id,\n });\n\n // when select sub account, open the private websocket\n const { portfolio, positions } = useSubAccountDataObserver(observerAccountId);\n const subAccountMaxAmount = useSubAccountMaxWithdrawal({\n token: token.symbol,\n unsettledPnL: portfolio?.unsettledPnL,\n freeCollateral: portfolio?.freeCollateral ?? zero,\n holdings: portfolio?.holding,\n });\n\n const formHasPositions = useMemo(\n () => !!positions?.rows?.length,\n [positions],\n );\n\n const hasPositions = useMemo(() => {\n return observerAccountId ? formHasPositions : currentHasPositions;\n }, [observerAccountId, formHasPositions, currentHasPositions]);\n\n const { unsettledPnL, maxQuantity } = useMemo(() => {\n if (observerAccountId) {\n return {\n unsettledPnL: portfolio?.unsettledPnL,\n maxQuantity: subAccountMaxAmount,\n };\n }\n return {\n unsettledPnL: currentUnsettledPnL,\n maxQuantity: currentMaxAmount,\n };\n }, [\n observerAccountId,\n currentUnsettledPnL,\n currentMaxAmount,\n portfolio?.unsettledPnL,\n subAccountMaxAmount,\n ]);\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n unsettledPnL,\n });\n\n const onTransfer = useCallback(() => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting || !toAccount) return;\n\n transfer(token.symbol!, {\n account_id: toAccount.id,\n amount: new Decimal(quantity).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n options.close?.();\n })\n .catch((err) => {\n console.error(\"transfer error: \", err);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n });\n }, [t, token, quantity, submitting, transfer, toAccount]);\n\n const disabled = submitting || !quantity || inputStatus === \"error\";\n\n const amount = useMemo(() => {\n const markPrice = 1;\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity]);\n\n const toAccountAsset = useMemo(() => {\n if (!toAccount?.id) {\n return 0;\n }\n const holdings = holdingMap[toAccount.id];\n const asset = holdings?.find((item) => item.token === token.symbol);\n return asset?.holding || 0;\n }, [toAccount, token, holdingMap]);\n\n const { fromAccounts, toAccounts } = useMemo(() => {\n if (isMainAccount) {\n return {\n fromAccounts: mainAccount ? [mainAccount, ...(subAccounts || [])] : [],\n toAccounts:\n // only from account is main account, can transfer to other sub accounts\n fromAccount?.id === mainAccountId ? subAccounts : [],\n };\n }\n\n return {\n fromAccounts: [],\n toAccounts: [],\n };\n }, [isMainAccount, mainAccountId, mainAccount, subAccounts, fromAccount]);\n\n // init and update main account holding\n useEffect(() => {\n if (!mainAccountId) return;\n\n const _mainAccount = {\n id: mainAccountId!,\n description: t(\"common.mainAccount\"),\n holding: [],\n };\n\n setMainAccount(_mainAccount);\n\n subAccount.refresh().then((res) => {\n setHoldingMap(res);\n setMainAccount({\n ..._mainAccount,\n holding: res[mainAccountId],\n });\n });\n }, [t, mainAccountId]);\n\n // init fromAccount\n useEffect(() => {\n // if current account is main account, set fromAccount to main account\n // if current account is sub account, set fromAccount to current sub account\n setFromAccount(\n isMainAccount\n ? mainAccount\n : subAccounts?.find((item) => item.id === accountId),\n );\n }, [isMainAccount, mainAccount, subAccounts, accountId]);\n\n // init toAccount\n useEffect(() => {\n // if current account is main account\n if (isMainAccount) {\n const firstSubAccount = subAccounts?.[0];\n\n // if toAccount is not set, set toAccount to first sub account\n const selectAccount = options.toAccountId\n ? subAccounts?.find((item) => item.id === options.toAccountId) ||\n firstSubAccount\n : firstSubAccount;\n\n if (selectAccount) {\n setToAccount(selectAccount);\n }\n } else {\n // if current account is sub account, set toAccount to main account\n setToAccount(mainAccount);\n }\n }, [options?.toAccountId, isMainAccount, mainAccount, subAccounts]);\n\n useEffect(() => {\n const tokens = tokensInfo?.map((item) => ({\n symbol: item.token,\n precision: item.decimals,\n })) as API.TokenInfo[];\n\n if (tokens?.length) {\n // sort tokens, USDC should be the first\n tokens.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n\n const targetToken = tokens?.find((item) => item.symbol === options.token);\n\n setTokens(tokens);\n setToken(targetToken || tokens?.[0] || DEFAULT_TOKEN);\n }\n }, [tokensInfo, options.token]);\n\n const onFromAccountChange = useCallback(\n (account: SubAccount) => {\n setFromAccount(account);\n\n const firstSubAccount = subAccounts?.[0];\n // if fromAccount is main account, set toAccount to first sub account\n if (account?.id === mainAccountId) {\n setToAccount(firstSubAccount);\n return;\n }\n\n // if fromAccount is not main account, set toAccount to main account\n // sub account only can transfer to main account\n if (account?.id && account?.id !== mainAccountId) {\n setToAccount(mainAccount);\n return;\n }\n },\n [mainAccountId, mainAccount, subAccounts],\n );\n\n const onToAccountChange = useCallback((account: SubAccount) => {\n setToAccount(account);\n }, []);\n\n const onExchange = useCallback(() => {\n setFromAccount(toAccount);\n setToAccount(fromAccount);\n }, [fromAccount, toAccount]);\n\n return {\n networkId,\n onTransfer,\n quantity,\n amount,\n onQuantityChange: setQuantity,\n maxQuantity,\n tokens,\n token,\n onTokenChange: setToken,\n disabled,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccount,\n toAccount,\n fromAccounts,\n onFromAccountChange,\n toAccounts,\n onToAccountChange,\n onExchange,\n isMainAccount,\n };\n};\n\ntype Options = {\n quantity: string;\n maxQuantity: string | number;\n unsettledPnL?: number;\n};\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity, unsettledPnL = 0 } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (unsettledPnL < 0) {\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n } else {\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else if (\n qty.gt(new Decimal(maxQuantity).minus(unsettledPnL)) &&\n qty.lessThanOrEqualTo(maxQuantity)\n ) {\n setInputStatus(\"warning\");\n setHintMessage(t(\"settle.settlePnl.warning\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { FC } from \"react\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { registerSimpleSheet } from \"@orderly.network/ui\";\nimport {\n TransferFormScriptOptions,\n useTransferFormScript,\n} from \"./transferForm.script\";\nimport { TransferForm } from \"./transferForm.ui\";\n\nexport const TransferDialogId = \"TransferDialogId\";\nexport const TransferSheetId = \"TransferSheetId\";\n\nexport type TransferFormWidgetProps = TransferFormScriptOptions;\n\nexport const TransferFormWidget = (props: TransferFormWidgetProps) => {\n const state = useTransferFormScript({\n toAccountId: props.toAccountId,\n token: props.token,\n close: props.close,\n });\n return <TransferForm {...state} />;\n};\n\nexport const TransferWidget: FC<TransferFormWidgetProps> = (props) => {\n return (\n <TransferFormWidget\n close={props.close}\n toAccountId={props.toAccountId}\n token={props.token}\n />\n );\n};\n\nregisterSimpleDialog(TransferDialogId, TransferWidget, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n title: () => i18n.t(\"common.transfer\"),\n});\n\nregisterSimpleSheet(TransferSheetId, TransferWidget, {\n title: () => i18n.t(\"common.transfer\"),\n});\n","import React from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ConvertAction } from \"../convertAction\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { SwapCoin } from \"../swapCoin\";\nimport {\n unnormalizeAmount,\n type ConvertFormScriptReturn,\n} from \"./convertForm.script\";\n\nexport type ConvertFormProps = ConvertFormScriptReturn;\n\nexport const ConvertFormUI: React.FC<ConvertFormProps> = (props) => {\n const {\n loading,\n disabled,\n quantity,\n onQuantityChange,\n maxQuantity,\n token,\n targetToken,\n sourceTokens,\n onSourceTokenChange,\n onConvert,\n slippage,\n onSlippageChange,\n convertRate,\n outAmounts,\n minimumReceived,\n isQuoteLoading,\n currentLTV,\n nextLTV,\n networkId,\n balanceRevalidating,\n } = props;\n\n return (\n <Box className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={token}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={quantity}\n maxQuantity={maxQuantity.toString()}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <ExchangeDivider />\n <QuantityInput\n readOnly\n loading={isQuoteLoading}\n token={targetToken}\n value={\n isQuoteLoading || !quantity || Number.isNaN(Number(outAmounts))\n ? \"\"\n : unnormalizeAmount(outAmounts, targetToken?.decimals ?? 6)\n }\n />\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <SwapCoin\n indexPrice={\n isQuoteLoading || !quantity || Number.isNaN(Number(convertRate))\n ? \"-\"\n : convertRate\n }\n sourceSymbol={token?.token}\n targetSymbol={targetToken?.token}\n />\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n symbol={targetToken?.token || \"\"}\n precision={targetToken?.decimals ?? 6}\n value={\n isQuoteLoading ||\n !quantity ||\n Number.isNaN(Number(minimumReceived))\n ? \"-\"\n : unnormalizeAmount(\n minimumReceived.toString(),\n targetToken?.decimals ?? 6,\n )\n }\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n <Fee dstGasFee={\"0\"} />\n </Flex>\n </Box>\n <Flex itemAlign={\"center\"} justify=\"center\">\n <ConvertAction\n networkId={networkId}\n disabled={disabled}\n loading={loading}\n onConvert={onConvert}\n />\n </Flex>\n </Box>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\n\nexport interface ConvertActionButtonProps {\n disabled?: boolean;\n loading?: boolean;\n symbol?: string;\n networkId?: NetworkId;\n onConvert?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const ConvertAction: React.FC<ConvertActionButtonProps> = (props) => {\n const { disabled, loading, networkId, onConvert } = props;\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{ fullWidth: true, size: { initial: \"md\", lg: \"lg\" } }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={{ initial: \"md\", lg: \"lg\" }}\n onClick={onConvert}\n >\n {t(\"transfer.convert\")}\n </Button>\n </AuthGuard>\n </Box>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useConfig,\n useConvert,\n useComputedLTV,\n useLocalStorage,\n useOdosQuote,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { nativeETHAddress, nativeTokenAddress } from \"@orderly.network/types\";\nimport type { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useToken } from \"./hooks/useToken\";\n\nconst { calcMinimumReceived } = account;\n\nexport type ConvertFormScriptReturn = ReturnType<typeof useConvertFormScript>;\n\nconst ORDERLY_CONVERT_SLIPPAGE_KEY = \"orderly_convert_slippage\";\n\nexport interface ConvertFormScriptOptions {\n token?: string;\n close?: () => void;\n}\n\nexport const normalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).mul(new Decimal(10).pow(decimals)).toFixed(0);\n};\n\nexport const unnormalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).div(new Decimal(10).pow(decimals)).toString();\n};\n\nexport const useConvertFormScript = (options: ConvertFormScriptOptions) => {\n const { token: defaultToken, close } = options;\n\n const { t } = useTranslation();\n const [loading, setLoading] = useState<boolean>(false);\n\n const config = useConfig();\n\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const [quantity, setQuantity] = useState<string>(\"\");\n\n const { wrongNetwork } = useAppContext();\n\n const { wallet } = useWalletConnector();\n\n const {\n sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n chainId,\n } = useToken({ defaultValue: defaultToken });\n\n const token = useMemo<API.Chain>(() => {\n const _token = {\n ...sourceToken!,\n precision: sourceToken?.decimals ?? 6,\n };\n if (\n _token.token === \"ETH\" &&\n (!_token.address || _token.address === nativeTokenAddress)\n ) {\n _token.address = nativeETHAddress;\n }\n return _token;\n }, [sourceToken]);\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_CONVERT_SLIPPAGE_KEY,\n 1,\n );\n\n const { maxAmount, convert } = useConvert({ token: token.token });\n\n const onConvert = async () => {\n if (loading) {\n return;\n }\n setLoading(true);\n return convert({\n amount: Number(quantity),\n slippage: new Decimal(slippage).div(100).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.convert.completed\"));\n close?.();\n setQuantity(\"\");\n })\n .catch((err: Error) => {\n toast.error(\n err.message?.includes(\"user rejected\")\n ? t(\"transfer.convert.failed\")\n : err.message,\n );\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const [postQuote, { data: quoteData, isMutating: isQuoteLoading }] =\n useOdosQuote();\n\n useEffect(() => {\n if (quantity && chainId && token.address && targetToken?.address) {\n postQuote({\n chainId: chainId,\n inputTokens: [\n {\n amount: normalizeAmount(quantity, token.decimals),\n tokenAddress: token.address,\n },\n ],\n outputTokens: [\n {\n proportion: 1,\n tokenAddress: targetToken.address,\n },\n ],\n });\n }\n }, [quantity, token, targetToken, chainId, postQuote]);\n\n const memoizedOutAmounts = useMemo<string>(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n return quoteData?.outAmounts[0];\n }, [quoteData, isQuoteLoading]);\n\n const memoizedConvertRate = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n const rate = new Decimal(\n unnormalizeAmount(quoteData.outAmounts[0], targetToken?.decimals ?? 6),\n )\n .div(unnormalizeAmount(quoteData.inAmounts[0], token.decimals))\n .toString();\n return rate;\n }, [isQuoteLoading, quoteData, targetToken?.decimals, token?.decimals]);\n\n const memoizedMinimumReceived = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return 0;\n }\n return calcMinimumReceived({\n amount: quoteData?.outAmounts[0],\n slippage: Number(slippage),\n });\n }, [quoteData, isQuoteLoading, slippage]);\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: Number(quantity),\n token: sourceToken?.token,\n });\n\n const disabled = !quantity || Number(quantity) === 0;\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n token: token,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n wrongNetwork,\n onConvert,\n hasPositions,\n onSettlePnl,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n convertRate: memoizedConvertRate,\n minimumReceived: memoizedMinimumReceived,\n outAmounts: memoizedOutAmounts,\n isQuoteLoading,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useChains, useConfig, useTokensInfo } from \"@orderly.network/hooks\";\nimport { Arbitrum, type API, type NetworkId } from \"@orderly.network/types\";\n\nconst splitTokenBySymbol = <T extends API.Chain>(items: T[]) => {\n return items.reduce<Record<\"usdc\" | \"others\", T[]>>(\n (result, item) => {\n if (item.token?.toUpperCase() === \"USDC\") {\n result.usdc.push(item);\n } else {\n result.others.push(item);\n }\n return result;\n },\n { usdc: [], others: [] },\n );\n};\n\ninterface Options {\n defaultValue?: string;\n}\n\nexport const useToken = (options: Options) => {\n const { defaultValue } = options;\n\n const config = useConfig();\n\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const [, { findByChainId }] = useChains(networkId, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const [sourceToken, setSourceToken] = useState<API.Chain>();\n const [targetToken, setTargetToken] = useState<API.Chain>();\n const [sourceTokens, setSourceTokens] = useState<API.Chain[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const chain = findByChainId(Arbitrum.id);\n\n const chainId = chain?.network_infos?.chain_id;\n\n const newTokensInfo = useMemo(() => {\n return tokensInfo\n .filter((item) => item.on_chain_swap)\n .map<API.Chain>((item) => {\n const findToken = chain?.token_infos?.find(\n ({ symbol }) => symbol === item.token,\n );\n return {\n ...item,\n symbol: item.token,\n address: findToken?.address,\n decimals: item.chain_details[0]?.decimals,\n precision: item.decimals,\n };\n });\n }, [chain?.token_infos, tokensInfo]);\n\n useEffect(() => {\n const { usdc, others } = splitTokenBySymbol(newTokensInfo);\n setSourceToken(() => {\n if (defaultValue) {\n const defaultToken = others.find(({ token }) => token === defaultValue);\n return defaultToken ? defaultToken : others[0];\n }\n return others[0];\n });\n setSourceTokens(others);\n setTargetToken(usdc[0]);\n }, [defaultValue, newTokensInfo]);\n\n return {\n chainId,\n sourceToken,\n sourceTokens,\n onSourceTokenChange: setSourceToken,\n targetToken,\n };\n};\n","import React from \"react\";\n// import pick from \"ramda/es/pick\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport type { ConvertFormScriptOptions } from \"./convertForm.script\";\nimport { useConvertFormScript } from \"./convertForm.script\";\nimport { ConvertFormUI } from \"./convertForm.ui\";\n\nexport const ConvertDialogId = \"ConvertDialogId\";\nexport const ConvertSheetId = \"ConvertSheetId\";\n\nexport const ConvertFormWidget: React.FC<ConvertFormScriptOptions> = (\n props,\n) => {\n const state = useConvertFormScript(props);\n return <ConvertFormUI {...state} />;\n};\n\nregisterSimpleDialog(ConvertDialogId, ConvertFormWidget, {\n size: \"md\",\n classNames: { content: \"oui-border oui-border-line-6\" },\n title: () => i18n.t(\"transfer.convert\"),\n});\n\nregisterSimpleSheet(ConvertSheetId, ConvertFormWidget, {\n title: () => i18n.t(\"transfer.convert\"),\n});\n","import React, { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport { Flex, cn, Text, CloseIcon } from \"@orderly.network/ui\";\nimport { DepositStatusScriptReturn } from \"./depostiStatus.script\";\n\nexport type DepositStatusProps = {\n className?: string;\n classNames?: {\n root?: string;\n items?: string;\n };\n onClick?: () => void;\n} & DepositStatusScriptReturn;\n\nexport const DepositStatus: React.FC<DepositStatusProps> = (props) => {\n const { canTrade, className, classNames, pendingCount, completedCount } =\n props;\n\n if (!canTrade || (pendingCount === 0 && completedCount === 0)) {\n return null;\n }\n\n return (\n <Flex\n direction=\"column\"\n gapY={1}\n width=\"100%\"\n className={cn(className, classNames?.root)}\n >\n <DepositStatusContent\n className={classNames?.items}\n count={pendingCount}\n status={AssetHistoryStatusEnum.PENDING}\n onClick={props.onClick}\n estimatedTime={props.estimatedTime}\n onClose={props.onClose}\n />\n <DepositStatusContent\n className={classNames?.items}\n count={completedCount}\n status={AssetHistoryStatusEnum.COMPLETED}\n onClick={props.onClick}\n onClose={props.onClose}\n />\n </Flex>\n );\n};\n\ntype DepositStatusContentProps = {\n count: number;\n status: AssetHistoryStatusEnum.PENDING | AssetHistoryStatusEnum.COMPLETED;\n onClick?: () => void;\n className?: string;\n estimatedTime?: string | number;\n onClose: (status: AssetHistoryStatusEnum) => void;\n};\n\nexport const DepositStatusContent = (props: DepositStatusContentProps) => {\n const { t } = useTranslation();\n const { count, status, estimatedTime } = props;\n\n const content = useMemo(() => {\n if (status === AssetHistoryStatusEnum.PENDING) {\n return count > 1\n ? t(\"transfer.deposit.status.pending.multiple\")\n : t(\"transfer.deposit.status.pending.one\");\n }\n\n return count > 1\n ? t(\"transfer.deposit.status.completed.multiple\")\n : t(\"transfer.deposit.status.completed.one\");\n }, [t, status, count]);\n\n if (count === 0) {\n return null;\n }\n\n const clickable = typeof props.onClick === \"function\";\n\n const renderContent = () => {\n if (\n status === AssetHistoryStatusEnum.PENDING &&\n count === 1 &&\n estimatedTime\n ) {\n return (\n <Text size=\"2xs\" color=\"primary\">\n ~ {estimatedTime}\n </Text>\n );\n }\n\n return <Badge>{props.count}</Badge>;\n };\n\n return (\n <Flex\n intensity={900}\n gapX={1}\n width=\"100%\"\n r=\"full\"\n className={cn(\n \"oui-px-3 lg:oui-px-0\",\n \"oui-py-2 lg:oui-py-0\",\n props.className,\n )}\n >\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-font-normal\",\n \"oui-text-base-contrast-80 hover:oui-text-base-contrast\",\n clickable && \"oui-cursor-pointer\",\n )}\n width=\"100%\"\n onClick={props.onClick}\n >\n <Flex gapX={1}>\n <Dot\n className={\n status === AssetHistoryStatusEnum.COMPLETED\n ? \"oui-bg-success\"\n : \"oui-bg-primary\"\n }\n />\n <Text size=\"2xs\">{content}</Text>\n </Flex>\n {renderContent()}\n </Flex>\n <CloseIcon\n size={14}\n opacity={1}\n className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n props.onClose(status);\n }}\n />\n </Flex>\n );\n};\n\nconst Badge: FC<{ className?: string; children: ReactNode }> = (props) => {\n return (\n <Flex\n justify=\"center\"\n itemAlign=\"center\"\n r=\"full\"\n width={18}\n height={18}\n className={cn(\"oui-bg-line-12\", props.className)}\n >\n <Text size=\"3xs\" intensity={80}>\n {props.children}\n </Text>\n </Flex>\n );\n};\n\nconst Dot: FC<{ className?: string }> = (props) => {\n return (\n <div\n className={cn(\n \"oui-mx-[5px] oui-size-2 oui-shrink-0 oui-rounded-full\",\n props.className,\n )}\n />\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useBalanceTopic,\n useDebouncedCallback,\n useLocalStorage,\n useTransferHistory,\n useWalletTopic,\n} from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@orderly.network/types\";\nimport { useTransactionTime } from \"../../contract/useTransactionTime\";\n\nexport type DepositStatusScriptReturn = ReturnType<\n typeof useDepositStatusScript\n>;\n\nfunction getTimeRange() {\n const endTime = Date.now();\n // 1 hour ago\n const startTime = endTime - 1000 * 60 * 60;\n\n return [startTime, endTime];\n}\n\nexport function useDepositStatusScript() {\n const [depositDataRange, setDepositDataRange] = useState(getTimeRange());\n const [transferDataRange, setTransferDataRange] = useState(getTimeRange());\n // only deposit have pending status\n const [depositPending, setDepositPending] = useState(0);\n const [depositCompleted, setDepositCompleted] = useState(0);\n const [transferCompleted, setTransferCompleted] = useState(0);\n const [pendingList, setPendingList] = useState<API.TransferHistoryRow[]>([]);\n\n const [hideNotificationTimeMap, setHideNotificationTimeMap] = useLocalStorage(\n \"orderly_deposit_status_hide_notification_time\",\n {\n [AssetHistoryStatusEnum.PENDING]: 0,\n [AssetHistoryStatusEnum.COMPLETED]: 0,\n },\n );\n\n const { state } = useAccount();\n\n const canTrade =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n const { chainId, blockTime } = useMemo(() => {\n if (canTrade && pendingList.length === 1) {\n return {\n chainId: pendingList[0].chain_id,\n blockTime: pendingList[0].block_time,\n };\n }\n\n return {\n chainId: undefined,\n blockTime: undefined,\n };\n }, [canTrade, pendingList]);\n\n const transactionTime = useTransactionTime(chainId);\n\n // Estimated time remaining = tx_block_time +(total confirmations x average block time) - current time\n const estimatedTime = useMemo(() => {\n if (transactionTime && blockTime) {\n const seconds = blockTime / 1000 + transactionTime - Date.now() / 1000;\n console.log(\"transactionTime\", transactionTime, seconds);\n return formatEstimatedTime(seconds);\n }\n\n return 0;\n }, [transactionTime, blockTime]);\n\n const [assetHistory, { isLoading }] = useAssetsHistory(\n {\n startTime: depositDataRange[0],\n endTime: depositDataRange[1],\n page: 1,\n pageSize: 200,\n side: \"DEPOSIT\",\n },\n {\n shouldUpdateOnWalletChanged: () => false,\n },\n );\n\n // pending and completed use one request to reduce api request, because assets history api limit 10 per 60s\n const [transferHistory] = useTransferHistory({\n dataRange: transferDataRange,\n side: \"IN\",\n size: 200,\n page: 1,\n main_sub_only: false,\n });\n\n // update time range when wallet and balance changed\n // because DEPOSIT and WITHDRAW will push twice COMPLETED event in a shorttime, so we need to debounce it\n // TODO: refresh one when push more than twice again\n const updateDepositTimeRange = useDebouncedCallback((data: any) => {\n setDepositDataRange(getTimeRange());\n }, 300);\n\n useWalletTopic({\n onMessage(data) {\n const { side, transStatus } = data;\n if (\n side === AssetHistorySideEnum.DEPOSIT &&\n (transStatus === AssetHistoryStatusEnum.PENDING ||\n transStatus === AssetHistoryStatusEnum.COMPLETED)\n ) {\n console.log(\"deposit status updated\", data);\n updateDepositTimeRange(data);\n }\n },\n });\n\n // update transfer time range when balance changed\n const updateTransferTimeRange = useDebouncedCallback((data: any) => {\n setTransferDataRange(getTimeRange());\n }, 300);\n\n useBalanceTopic({\n onMessage(data) {\n console.log(\"balance updated\", data);\n updateTransferTimeRange(data);\n },\n });\n\n useEffect(() => {\n if (!assetHistory || isLoading) {\n return;\n }\n const hidePendingNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.PENDING];\n\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n let pendingList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.PENDING,\n );\n\n if (hidePendingNotificationTime) {\n pendingList = pendingList.filter(\n (item) => item.created_time > hidePendingNotificationTime,\n );\n }\n\n let completedList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.COMPLETED,\n );\n\n if (hideCompletedNotificationTime) {\n completedList = completedList.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n );\n }\n\n setDepositPending(pendingList?.length || 0);\n setDepositCompleted(completedList?.length || 0);\n setPendingList(pendingList || []);\n }, [assetHistory, isLoading, hideNotificationTimeMap]);\n\n useEffect(() => {\n if (!transferHistory) {\n return;\n }\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n const completedList = hideCompletedNotificationTime\n ? transferHistory.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n )\n : transferHistory;\n\n setTransferCompleted(completedList.length);\n }, [transferHistory, hideNotificationTimeMap]);\n\n const completedCount = useMemo(() => {\n return depositCompleted + transferCompleted;\n }, [depositCompleted, transferCompleted]);\n\n const onClose = useCallback(\n (status: AssetHistoryStatusEnum) => {\n setHideNotificationTimeMap({\n ...hideNotificationTimeMap,\n [status]: Date.now(),\n });\n },\n [hideNotificationTimeMap],\n );\n\n return {\n pendingCount: depositPending,\n completedCount,\n canTrade,\n estimatedTime,\n onClose,\n };\n}\n\nfunction formatEstimatedTime(totalSeconds: number) {\n const sec = Math.max(30, totalSeconds);\n let minutes = Math.floor(sec / 60);\n let seconds = sec % 60;\n\n if (seconds > 0 && seconds <= 30) {\n seconds = 30;\n } else if (seconds > 30) {\n minutes += 1;\n seconds = 0;\n }\n\n if (minutes > 0) {\n return seconds > 0 ? `${minutes} m ${seconds} s` : `${minutes} m`;\n }\n\n return `${seconds} s`;\n\n // minutes = Math.max(1, Math.ceil(seconds / 60));\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChains, useWalletConnector } from \"@orderly.network/hooks\";\nimport { getBlockTime } from \"./getBlockTime\";\nimport { getChainConfirmations } from \"./getChainConfirmations\";\n\nexport const useTransactionTime = (chainId?: number | string) => {\n const [blockTime, setBlockTime] = useState(0);\n const [confirmations, setConfirmations] = useState(0);\n const timeMap = useRef<Record<string, number>>({});\n const confirmationsMap = useRef<Record<string, number>>({});\n\n const [, { findByChainId }] = useChains();\n const { wallet } = useWalletConnector();\n\n const chain = useMemo(() => {\n if (!chainId) {\n return;\n }\n const id = typeof chainId === \"number\" ? chainId : Number.parseInt(chainId);\n return findByChainId(id);\n }, [chainId, findByChainId]);\n\n useEffect(() => {\n if (!chain || !wallet) {\n return;\n }\n\n const chainId = chain.network_infos.chain_id;\n\n if (timeMap.current[chainId]) {\n setBlockTime(timeMap.current[chainId]);\n } else {\n getBlockTime({\n chainId,\n chain,\n wallet,\n })\n .then((time) => {\n console.log(\"average block time\", chainId, time);\n setBlockTime(time);\n // record chain block time\n timeMap.current[chainId] = time;\n })\n .catch((error) => {\n console.error(\"getBlockTime error\", error);\n });\n }\n\n if (confirmationsMap.current[chainId]) {\n setConfirmations(confirmationsMap.current[chainId]);\n } else {\n getChainConfirmations(chain)\n .then((confirmations) => {\n console.log(\"confirmations\", chainId, confirmations);\n setConfirmations(confirmations);\n // record chain confirmations\n confirmationsMap.current[chainId] = confirmations;\n })\n .catch((error) => {\n console.error(\"getChainConfirmations error\", error);\n });\n }\n }, [chain, wallet]);\n\n const transactionTime = useMemo(() => {\n if (blockTime && confirmations) {\n return blockTime * confirmations;\n }\n return 0;\n }, [blockTime, confirmations]);\n\n return transactionTime;\n};\n","import { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { isSolana } from \"@orderly.network/utils\";\nimport { getEvmBlockTime } from \"./getEvmBlockTime\";\nimport { getSolanaBlockTime } from \"./getSolanaBlockTime\";\n\n// https://tokenterminal.com/explorer/metrics/block-time\nexport async function getBlockTime(inputs: {\n chainId: number;\n chain: API.Chain;\n wallet: WalletState | null;\n}) {\n const { chainId, chain, wallet } = inputs;\n if (isSolana(chainId)) {\n return getSolanaBlockTime(chain, wallet);\n }\n return getEvmBlockTime(chain);\n}\n","import { ethers } from \"ethers\";\nimport type { API } from \"@orderly.network/types\";\n\nconst blockCount = 5;\n\nexport async function getEvmBlockTime(chain: API.Chain) {\n const provider = new ethers.JsonRpcProvider(\n chain.network_infos.public_rpc_url,\n );\n\n const latest = await provider.getBlockNumber();\n\n const blocks = await Promise.all(\n Array.from({ length: blockCount }, (_, i) => provider.getBlock(latest - i)),\n );\n\n const timestamps = blocks\n .filter((b) => b?.timestamp != null)\n .map((b) => Number(b?.timestamp));\n\n if (timestamps.length < 2) {\n return 0;\n }\n\n let sum = 0;\n for (let i = 0; i < timestamps.length - 1; i++) {\n const diff = timestamps[i] - timestamps[i + 1];\n sum += diff;\n }\n\n return sum / (timestamps.length - 1);\n}\n","import {\n DefaultSolanaWalletAdapter,\n SolanaWalletProvider,\n} from \"@orderly.network/default-solana-adapter\";\nimport { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport async function getSolanaBlockTime(\n chain: API.Chain,\n wallet: WalletState | null,\n) {\n if (!wallet) {\n return 0;\n }\n\n const walletAdapter = new DefaultSolanaWalletAdapter();\n\n walletAdapter.active({\n address: wallet.accounts[0].address,\n chain: { id: chain.network_infos.chain_id },\n provider: wallet.provider as SolanaWalletProvider,\n });\n\n // console.log(\"walletAdapter\", walletAdapter);\n\n // The Solana RPC node keeps a history of performance samples, typically for a few hours.\n // A limit of 60 samples gives us a good average over the last hour or so.\n const samples =\n await walletAdapter.connection.getRecentPerformanceSamples(60);\n\n let totalBlockTime = 0;\n let validSamples = 0;\n\n for (const sample of samples) {\n if (sample.numSlots > 0 && sample.samplePeriodSecs > 0) {\n const blockTime = sample.samplePeriodSecs / sample.numSlots;\n totalBlockTime += blockTime;\n validSamples++;\n }\n }\n\n return totalBlockTime / validSamples;\n}\n","import { ethers } from \"ethers\";\nimport { API } from \"@orderly.network/types\";\nimport getAppUlnConfigAbi from \"./abi/getAppUlnConfigAbi.json\";\nimport { getEndpointId } from \"./endpointId\";\n\n/**\n * no need to distinguish between EVM and SOL\n */\nexport async function getChainConfirmations(chain: API.Chain) {\n const chainId = chain.network_infos.chain_id;\n const isMainnet = chain.network_infos.mainnet;\n\n const publicRpcUrl = isMainnet\n ? \"https://rpc.orderly.network\"\n : \"https://testnet-rpc.orderly.org\";\n\n // mainnet: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=read_write_contract\n // testnet: https://testnet-explorer.orderly.org/address/0x3013C32e5F45E69ceA9baD4d96786704C2aE148c?tab=read_contract#39e3f938\n const contractAddress = isMainnet\n ? \"0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77\"\n : \"0x3013C32e5F45E69ceA9baD4d96786704C2aE148c\";\n\n const endpointId = getEndpointId(chainId);\n\n const address = \"0x0000000000000000000000000000000000000000\";\n\n const provider = new ethers.JsonRpcProvider(publicRpcUrl);\n\n const contract = new ethers.Contract(\n contractAddress,\n // full abi: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=contract_abi\n // this only need to use getAppUlnConfig abi, other functions are not needed\n getAppUlnConfigAbi,\n provider,\n );\n\n const result = await contract.getAppUlnConfig(address, endpointId);\n\n // console.log(\"getChainConfirmations\", chainId, result);\n\n return Number(result.confirmations || 0);\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_oapp\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_remoteEid\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getAppUlnConfig\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"confirmations\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"requiredDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNThreshold\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"requiredDVNs\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"optionalDVNs\",\n \"type\": \"address[]\"\n }\n ],\n \"internalType\": \"struct UlnConfig\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n]\n","/**\n * https://docs.layerzero.network/v2/deployments/deployed-contracts\n * Chain ID to Endpoint ID mapping for LayerZero V2\n *\n * This mapping contains all supported chains and their corresponding LayerZero Endpoint IDs.\n *\n * Endpoint ID ranges:\n * - 30xxx: Mainnet chains\n * - 40xxx: Testnet chains\n */\n\nexport const CHAIN_ID_TO_ENDPOINT_ID: Record<number | string, number> = {\n // Ethereum and L2s\n 1: 30101, // Ethereum Mainnet\n 10: 30111, // Optimism Mainnet\n 42161: 30110, // Arbitrum Mainnet\n 137: 30109, // Polygon Mainnet\n 8453: 30184, // Base Mainnet\n 59144: 30183, // Linea Mainnet\n 534352: 30214, // Scroll Mainnet\n 324: 30165, // zkSync Era Mainnet\n 1101: 30158, // Polygon zkEVM Mainnet\n 169: 30217, // Manta Pacific Mainnet\n 5000: 30181, // Mantle Mainnet\n 81457: 30243, // Blast Mainnet\n 252: 30255, // Fraxtal Mainnet\n 34443: 30260, // Mode Mainnet\n 167000: 30290, // Taiko Mainnet\n 7777777: 30195, // Zora Mainnet\n\n // Testnets\n 11155420: 40232, // Optimism Sepolia Testnet\n 421614: 40231, // Arbitrum Sepolia Testnet\n 84532: 40245, // Base Sepolia Testnet\n 300: 40305, // zkSync Sepolia Testnet\n 11155111: 40161, // Ethereum Sepolia Testnet\n 17000: 40217, // Ethereum Holesky Testnet\n\n // BNB Chain and related\n 56: 30102, // BNB Smart Chain (BSC) Mainnet\n 204: 30202, // opBNB Mainnet\n 97: 40102, // BNB Smart Chain (BSC) Testnet\n\n // Avalanche\n 43114: 30106, // Avalanche Mainnet\n 43113: 40106, // Avalanche Fuji Testnet\n\n // Fantom\n 250: 30112, // Fantom Mainnet\n\n // Gnosis\n 100: 30145, // Gnosis Mainnet\n\n // Celo\n 42220: 30125, // Celo Mainnet\n\n // Harmony\n 1666600000: 30116, // Harmony Mainnet\n\n // Cronos\n 25: 30359, // Cronos EVM Mainnet\n 388: 30360, // Cronos zkEVM Mainnet\n\n // Metis\n 1088: 30151, // Metis Mainnet\n\n // Moonbeam/Moonriver\n 1284: 30126, // Moonbeam Mainnet\n 1285: 30167, // Moonriver Mainnet\n\n // Astar\n 592: 30210, // Astar Mainnet\n 3776: 30257, // Astar zkEVM Mainnet\n\n // Canto\n 7700: 30159, // Canto Mainnet\n\n // Fuse\n 122: 30138, // Fuse Mainnet\n\n // Kava\n 2222: 30177, // Kava Mainnet\n\n // Meter\n 82: 30176, // Meter Mainnet\n\n // Near Aurora\n 1313161554: 30211, // Near Aurora Mainnet\n\n // DFK Chain\n 53935: 30115, // DFK Chain\n\n // DOS Chain\n 7979: 30149, // DOS Chain Mainnet\n\n // Degen\n 666666666: 30267, // Degen Mainnet\n\n // Dexalot Subnet\n 432204: 30118, // Dexalot Subnet Mainnet\n\n // Homeverse\n 19011: 30265, // Homeverse Mainnet\n\n // Horizen EON\n 7332: 30215, // Horizen EON Mainnet\n\n // Hubble\n 1992: 30182, // Hubble Mainnet\n\n // Tenet\n 1559: 30173, // Tenet Mainnet\n\n // TelosEVM\n 40: 30199, // TelosEVM Mainnet\n\n // Tiltyard\n 710420: 30238, // Tiltyard Mainnet\n\n // Viction\n 88: 30196, // Viction Mainnet\n\n // XPLA\n 37: 30216, // XPLA Mainnet\n\n // Xai\n 660279: 30236, // Xai Mainnet\n\n // re.al\n 111188: 30237, // re.al Mainnet\n\n // inEVM\n 2525: 30234, // inEVM Mainnet\n\n // Rari Chain\n 1380012617: 30235, // Rari Chain Mainnet\n\n // Shimmer\n 148: 30230, // Shimmer Mainnet\n\n // Skale\n 2046399126: 30273, // Skale Mainnet\n\n // Orderly\n 291: 30213, // Orderly Mainnet\n\n // CoreDAO\n 1116: 30153, // CoreDAO Mainnet\n\n // Conflux eSpace\n 1030: 30212, // Conflux eSpace Mainnet\n\n // Flare\n 14: 30295, // Flare Mainnet\n\n // Gravity\n 1625: 30294, // Gravity Mainnet\n\n // Japan Open Chain\n 81: 30285, // Japan Open Chain Mainnet\n\n // Kaia (formerly Klaytn)\n 8217: 30150, // Kaia Mainnet (formerly Klaytn)\n\n // OKX\n 66: 30155, // OKX Mainnet\n\n // Beam\n 4337: 30198, // Beam Mainnet\n\n // Loot\n 5151706: 30197, // Loot Mainnet\n\n // Lyra\n 957: 30311, // Lyra Mainnet\n\n // Morph\n 2818: 30322, // Morph Mainnet\n\n // Movement\n \"\": 30325, // Movement Mainnet (no chain ID)\n\n // Bouncebit\n 6001: 30293, // Bouncebit Mainnet\n\n // Cyber\n 7560: 30283, // Cyber Mainnet\n\n // Iota\n 8822: 30284, // Iota Mainnet\n\n // Sanko\n 1996: 30278, // Sanko Mainnet\n\n // Sei\n 1329: 30280, // Sei Mainnet\n\n // BOB\n 60808: 30279, // BOB Mainnet\n\n // Bahamut\n 5165: 30363, // Bahamut Mainnet\n\n // Animechain\n 69000: 30372, // Animechain Mainnet\n\n // Ape\n 33139: 30312, // Ape Mainnet\n\n // Berachain\n 80094: 30362, // Berachain Mainnet\n\n // Bevm\n 11501: 30317, // Bevm Mainnet\n\n // Bitlayer\n 200901: 30314, // Bitlayer Mainnet\n\n // Botanix\n 3637: 30376, // Botanix\n\n // Codex\n 81224: 30323, // Codex Mainnet\n\n // Concrete\n 12739: 30366, // Concrete\n\n // DM2 Verse\n 68770: 30315, // DM2 Verse Mainnet\n\n // EDU Chain\n 41923: 30328, // EDU Chain Mainnet\n\n // EVM on Flow\n 747: 30336, // EVM on Flow Mainnet\n\n // Etherlink\n 42793: 30292, // Etherlink Mainnet\n\n // Glue\n 1300: 30342, // Glue Mainnet\n\n // Goat\n 2345: 30361, // Goat Mainnet\n\n // Gunz\n 43419: 30371, // Gunz Mainnet\n\n // Hedera\n 295: 30316, // Hedera Mainnet\n\n // Hemi\n 43111: 30329, // Hemi Mainnet\n\n // HyperEVM\n 999: 30367, // HyperEVM Mainnet\n\n // Initia\n // \"\": 30326, // Initia Mainnet (no chain ID)\n\n // Ink\n 57073: 30339, // Ink Mainnet\n\n // Katana\n 747474: 30375, // Katana\n\n // Lens\n 232: 30373, // Lens Mainnet\n\n // Lightlink\n 1890: 30309, // Lightlink Mainnet\n\n // Lisk\n 1135: 30321, // Lisk Mainnet\n\n // Merlin\n 4200: 30266, // Merlin Mainnet\n\n // Nibiru\n 6900: 30369, // Nibiru Mainnet\n\n // Otherworld Space\n 8227: 30341, // Otherworld Space Mainnet\n\n // Peaq\n 3338: 30302, // Peaq Mainnet\n\n // Plume\n 98866: 30370, // Plume Mainnet\n\n // Reya\n 1729: 30313, // Reya Mainnet\n\n // Rootstock\n 30: 30333, // Rootstock Mainnet\n\n // Soneium\n 1868: 30340, // Soneium Mainnet\n\n // Sonic\n 146: 30332, // Sonic Mainnet\n\n // Sophon\n 50104: 30334, // Sophon Mainnet\n\n // Story\n 1514: 30364, // Story Mainnet\n\n // Subtensor EVM\n 964: 30374, // Subtensor EVM Mainnet\n\n // Superposition\n 55244: 30327, // Superposition Mainnet\n\n // Swell\n 1923: 30335, // Swell Mainnet\n\n // Tac\n 239: 30377, // Tac\n\n // TON\n // \"\": 30343, // TON Mainnet (no chain ID)\n\n // Unichain\n 130: 30320, // Unichain Mainnet\n\n // Vana\n 1480: 30330, // Vana Mainnet\n\n // Worldchain\n 480: 30319, // Worldchain Mainnet\n\n // X Layer\n 196: 30274, // X Layer Mainnet\n\n // XChain\n 94524: 30291, // XChain Mainnet\n\n // XDC\n 50: 30365, // XDC Mainnet\n\n // Zircuit\n 48900: 30303, // Zircuit Mainnet\n\n // zkLink\n 810180: 30301, // zkLink Mainnet\n\n // Abstract\n 2741: 30324, // Abstract Mainnet\n\n // Aptos (non-EVM)\n // 1: 30108, // Aptos Mainnet\n\n // Arbitrum Nova\n 42170: 30175, // Arbitrum Nova Mainnet\n\n // Corn\n 21000000: 30331, // Corn Mainnet\n\n // Initia Testnet\n // \"\": 40326, // Initia Testnet (no chain ID)\n\n // HyperEVM Testnet\n 998: 40362, // HyperEVM Testnet\n\n // Berachain Bepolia Testnet\n 80069: 40371, // Berachain Bepolia Testnet\n\n // Monad Testnet\n 10143: 40204, // Monad Testnet\n\n // Polygon Amoy Testnet\n 80002: 40267, // Polygon Amoy Testnet\n\n // Solana (non-EVM)\n 101: 30168, // Solana Mainnet\n 103: 40168, // Solana Devnet\n 900900900: 30168, // Solana Mainnet\n 901901901: 40168, // Solana Devnet\n\n // Tron\n 728126428: 30420, // Tron Mainnet\n 2494104990: 40420, // Tron Testnet\n};\n\n/**\n * Get Endpoint ID for a given Chain ID\n * @param chainId - The chain ID to look up\n * @returns The corresponding Endpoint ID or undefined if not found\n */\nexport function getEndpointId(chainId: number | string): number | undefined {\n return CHAIN_ID_TO_ENDPOINT_ID[chainId];\n}\n","import React from \"react\";\nimport { useDepositStatusScript } from \"./depostiStatus.script\";\nimport { DepositStatus, DepositStatusProps } from \"./depostiStatus.ui\";\n\nexport type DepositStatusWidgetProps = Pick<\n DepositStatusProps,\n \"className\" | \"onClick\"\n>;\n\nexport const DepositStatusWidget: React.FC<DepositStatusWidgetProps> = (\n props,\n) => {\n const state = useDepositStatusScript();\n return <DepositStatus {...state} {...props} />;\n};\n"]}
1
+ {"version":3,"sources":["../src/components/depositForm/depositForm.ui.tsx","../src/components/LTV/ltv.script.tsx","../src/components/LTV/ltv.ui.tsx","../src/components/LTV/ltv.widget.tsx","../src/components/actionButton/index.tsx","../src/types.ts","../src/components/availableQuantity/index.tsx","../src/components/brokerWallet/index.tsx","../src/components/chainSelect/index.tsx","../src/icons.tsx","../src/components/collateralContribution/index.tsx","../src/components/collateralRatio/collateralRatio.ui.tsx","../src/components/collateralRatio/collateralRatio.widget.tsx","../src/components/exchangeDivider/index.tsx","../src/components/fee/index.tsx","../src/components/minimumReceived/index.tsx","../src/components/quantityInput/index.tsx","../src/components/quantityInput/tokenOption.tsx","../src/components/quantityInput/useBalance.ts","../src/components/slippage/index.tsx","../src/components/swap/components/notice.tsx","../src/components/swap/components/swapFee.tsx","../src/components/swapCoin/index.tsx","../src/components/swapIndicator/index.tsx","../src/components/swap/icons.tsx","../src/components/web3Wallet/index.tsx","../src/components/depositForm/depositForm.script.tsx","../src/components/swap/hooks/useNeedSwapAndCross.ts","../src/components/swap/hooks/useSwapDeposit.tsx","../src/components/swap/components/swapDialog.tsx","../src/components/swap/components/crossSwap.tsx","../src/components/swap/hooks/useCrossSwap.ts","../src/components/swap/constants.ts","../src/components/swap/components/processStatus.tsx","../src/components/swap/components/swapDetail.tsx","../src/utils.ts","../src/components/swap/components/viewFAQs.tsx","../src/components/swap/components/singleSwap.tsx","../src/components/swap/hooks/useSwap.ts","../src/components/swap/components/swap.tsx","../src/components/swap/hooks/useSwapEnquiry.ts","../src/components/swap/hooks/useCrossSwapQuery.ts","../src/components/swap/hooks/useSwapQuery.ts","../src/components/swap/hooks/useSwapFee.ts","../src/components/depositForm/hooks/useActionType.ts","../src/components/depositForm/hooks/useChainSelect.ts","../src/components/depositForm/hooks/useDepositAction.tsx","../src/components/depositForm/hooks/useInputStatus.ts","../src/components/depositForm/hooks/useToken.ts","../src/components/depositForm/depositForm.widget.tsx","../src/components/withdrawForm/withdrawForm.ui.tsx","../src/components/accountIdInput/index.tsx","../src/components/unsettlePnlInfo/index.tsx","../src/components/withdrawAction/index.tsx","../src/components/crossWithdrawConfirm/index.tsx","../src/components/withdrawAction/SwitchChainButton.tsx","../src/components/withdrawWarningMessage/index.tsx","../src/components/withdrawForm/withdrawForm.script.tsx","../src/components/unsettlePnlInfo/useSettlePnl.tsx","../src/components/withdrawForm/hooks/useWithdrawAccountId.ts","../src/components/withdrawForm/hooks/useWithdrawFee.ts","../src/components/withdrawForm/hooks/useWithdrawLTV.tsx","../src/components/withdrawForm/hooks/useWithdrawToken.ts","../src/components/withdrawForm/withdrawForm.widget.tsx","../src/components/depositAndWithdraw/index.tsx","../src/components/depositAndWithdraw/depositSlot.tsx","../src/components/depositAndWithdraw/withdrawSlot.tsx","../src/components/swap/swapDepositForm/swapDepositForm.ui.tsx","../src/components/swap/swapDepositForm/swapDepositForm.script.tsx","../src/components/swap/hooks/useToken.ts","../src/components/swap/swapDepositForm/swapDepositForm.widget.tsx","../src/components/transferForm/transferForm.ui.tsx","../src/components/accountSelect/index.tsx","../src/components/transferForm/transferForm.script.tsx","../src/components/transferForm/transferForm.widget.tsx","../src/components/convertForm/convertForm.ui.tsx","../src/components/convertAction/index.tsx","../src/components/convertForm/convertForm.script.tsx","../src/components/convertForm/hooks/useToken.ts","../src/components/convertForm/convertForm.widget.tsx","../src/components/depostiStatus/depostiStatus.ui.tsx","../src/components/depostiStatus/depostiStatus.script.ts","../src/contract/useTransactionTime.ts","../src/contract/getBlockTime.ts","../src/contract/getEvmBlockTime.ts","../src/contract/getSolanaBlockTime.ts","../src/contract/getChainConfirmations.ts","../src/contract/abi/getAppUlnConfigAbi.json","../src/contract/endpointId.ts","../src/components/depostiStatus/depostiStatus.widget.tsx"],"names":["useTranslation","Box","Flex","textVariants","Text","useMemo","useQuery","Decimal","useLtvScript","data","error","isLoading","React","cn","Tooltip","jsx","jsxs","TooltipIcon","props","ref","calculateTextColor","val","TooltipContent","ltv_threshold","t","LtvUI","currentLtv","nextLTV","showDiff","LtvWidget","state","AccountStatusEnum","Button","AuthGuard","DepositAction","WithdrawTo","ActionButton","disabled","loading","actionType","symbol","onDeposit","onApprove","onApproveAndDeposit","networkId","buttonParams","buttonSize","useIndexPricesStream","Spinner","AvailableQuantity","amount","maxQuantity","token","getIndexPrice","name","dp","notional","useAppConfig","useConfig","Fragment","BrokerWallet","appIcons","brokerName","icon","secondary","useState","ChainIcon","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","ScrollArea","ExchangeIcon","ArrowDownIcon","RefreshIcon","TransferVerticalIcon","ChainSelect","chains","value","wrongNetwork","open","setOpen","selectable","chainIcon","chainName","renderRightIcon","trigger","content","chain","index","isActive","e","CollateralContribution","precision","CollateralRatioUI","CollateralRatioWidget","ExchangeDivider","modal","Fee","dstGasFee","feeQty","feeAmount","nativeSymbol","onShowFee","showFeeQty","MinimumReceived","useEffect","useRef","Input","Select","inputFormatter","Badge","TokenIcon","retryInterval","useBalance","fetchBalance","balance","setBalance","balanceRef","setLoading","timeoutRef","loopGetTokenBalance","timeout","err","TokenOption","displayType","onTokenChange","insufficientBalance","showBalance","renderValue","QuantityInput","tokens","classNames","label","status","hintMessage","onValueChange","placeholder","formatters","vaultBalanceList","rest","inputRef","width","setWidth","tokenOptions","currentToken","item","rect","_onTokenChange","find","selectOpen","optionRenderer","prefix","suffix","event","message","AlertDialog","EditIcon","options","Slippage","min","max","setValue","customValue","setCustomValue","showSlippage","hideSlippage","onClick","d","getValue","onConfirm","SlippageItem","Trans","ChainSelectorDialogId","Notice","needSwap","needCrossSwap","showChainSelect","Divider","SwapFee","feeQtys","feeDetails","isEnd","renderFeeQty","len","list","SwapCoin","sourceSymbol","targetSymbol","indexPrice","ArrowRightIcon","GasFeeIcon","TopRightArrowIcon","WoofiIcon","SwapIndicator","sourceToken","targetToken","className","useAccount","useWalletConnector","ABSTRACT_CHAIN_ID_MAP","WalletIcon","Web3Wallet","wallet","connectedChain","accountState","account","address","useCallback","useComputedLTV","useDeposit","useIndexPrice","useTokenInfo","accountPerp","useAppContext","ChainNamespace","useNeedSwapAndCross","srcToken","dstToken","srcChainId","dstChainId","setNeedSwap","setNeedCrossSwap","isCrossChain","useLocalStorage","SimpleDialog","SimpleSheet","useModal","useScreen","useEventEmitter","WS_WalletStatusEnum","toast","createClient","pick","utils","useAccountInstance","useBoolean","woofiDexCrossSwapChainRouterAbi","woofiDexSwapDepositorAbi","nativeTokenAddress","isNativeTokenChecker","swapSupportApiUrl","useCrossSwap","start","stop","layerStatus","setLayerStatus","ee","bridgeMessage","setBridgeMessage","setStatus","txHashFromBridge","checkLayerStatusListener","config","brokerId","client","timer","handler","side","transStatus","trxId","checkLayerStatus","txHash","messages","dstValutDeposit","inputs","src","dst","crossChainRouteAddress","quotoLZFee","result","CheckedCircleFillIcon","CloseCircleFillIcon","createElement","ProcessStatus","mode","statusUrl","processList","bridgeStatus","getBridgeStatus","depositStatus","getDepositStatus","onOk","isFailed","showDashLine","ProcessItem","title","description","StatusIndicator","Icon","i18n","getTokenByTokenList","tokenObj","acc","feeDecimalsOffset","origin","checkIsAccountId","accountId","getTransferErrorMessage","errorCode","depositErrorCodeMap","getDepositKnownErrorMessage","key","SwapDetail","info","nativePrice","markPrice","nativeToken","viewMode","header","SwapSymbol","divider","listData","listView","ListItem","swapButton","SwapTime","ViewFAQs","CrossSwap","transaction","slippage","chainInfo","depositFee","view","setView","tx","setTx","doCrossSwap","swapStatus","swapInfo","doSwap","res","useSwap","woofiDexDepositorAdress","txPayload","SingleSwap","doSingleSwap","Swap","SwapDialog","isMobile","visible","hide","resolve","reject","onOpenChange","onComplete","isSuccss","onCancel","commonProps","useDebouncedCallback","useWooCrossSwapQuery","queryDestinationFee","params","queryString","useWooSwapQuery","useSwapEnquiry","quantity","queryParams","wooSwapQuery","wooCrossSwapQuery","queryParamsRef","setAmount","warningMessage","setWarningMessage","querying","queryStart","queryStop","transactionInfo","setTransactionInfo","enquiry","enquirySuccessHandle","swapFee","bridgeFee","fee","amountValue","cleanTransactionInfo","enquiryErrorHandle","debouncedEnquiry","qty","toNonExponential","useSwapFee","isNativeToken","srcSymbol","destinationGasFee","markPrices","nativeMarkPrice","symbolPrice","nativeDp","srcDp","totalFeeQty","ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY","useSwapDeposit","currentChain","setQuantity","setSlippage","swapAmount","swapRevalidating","cleanData","onSwapDeposit","swapPrice","swapQuantity","useActionType","allowance","allowanceNum","maxQty","useChains","int2hex","praseChainIdToNumber","useChainSelect","linkDeviceStorage","settingChain","setChain","findByChainId","chainId","onChainChange","switched","useDepositAction","approve","deposit","enableCustomDeposit","customDeposit","onSuccess","submitting","setSubmitting","doDeposit","knownErrorMessage","num","useInputStatus","inputStatus","setInputStatus","setHintMessage","useToken","filter","setSourceToken","setTargetToken","sourceTokens","setSourceTokens","targetTokens","setTargetTokens","onChainInited","a","b","usdcToken","usdc","collateralRatio","collateralContribution","calcMinimumReceived","SWAP_USDC_PRECISION","useDepositFormScript","feeWarningMessage","setFeeWarningMessage","onSourceTokenChange","onTargetTokenChange","indexPrices","depositFeeRevalidating","balanceRevalidating","swapWarningMessage","onSlippageChange","userMaxQtyMessage","useDepositFee","collateralContributionQuantity","currentLTV","useCollateralValue","negative_usdc_threshold","isConvertThresholdLoading","useConvertThreshold","gasFeeMessage","targetQuantity","minimumReceived","tokenInfo","memoizedCollateralRatio","DepositForm","onQuantityChange","targetQuantityLoading","renderContent","DepositFormWidget","Tabs","TabPanel","TextAreaInput","onChange","textareaRef","handleChange","textarea","ExclamationFillIcon","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlePnl","tooltipContent","dialogContent","settlePnlDialog","CrossWithdrawConfirm","networkName","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","checkIsBridgeless","onTransfer","preWithdraw","renderButton","WithdrawWarningMessage","chainVaultBalance","crossChainTrans","tokenName","qtyGreaterThanMaxAmount","qtyGreaterThanVault","WithdrawForm","tokenChains","withdrawTo","internalWithdrawPanel","useAssetsHistory","useMemoizedFn","useWalletTopic","useWithdraw","AssetHistorySideEnum","AssetHistoryStatusEnum","usePositionStream","useSettlePnl","positionData","useInternalTransfer","useWithdrawAccountId","close","decimals","toAccountId","setToAccountId","transfer","errorMsg","useWithdrawFee","useWithdrawLTV","ltvWarningMessage","threshold","useTokensInfo","useWithdrawToken","setToken","setTokens","tokensInfo","syncToken","findToken","useWithdrawFormScript","setCrossChainTrans","assetHistory","setWithdrawTo","walletName","withdraw","maxAmount","unsettledPnL","withdrawAccountIdState","vaultBalance","qtyNum","minAmountWarningMessage","minAmount","showQty","handleWalletTopic","txId","filteredVaultBalanceList","WithdrawFormWidget","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","registerSimpleDialog","registerSimpleSheet","ExtensionPositionEnum","ExtensionSlot","DepositSlot","WithdrawSlot","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","DepositAndWithdraw","activeTab","setActiveTab","SwapDepositForm","tokensFilter","newToken","useSwapDepositFormScript","SwapDepositFormWidget","AccountSelect","subAccounts","subAccount","asset","TransferForm","toAccountAsset","fromAccounts","toAccounts","fromAccount","onFromAccountChange","toAccount","onToAccountChange","onExchange","useSubAccountDataObserver","useSubAccountMaxWithdrawal","useTransfer","zero","DEFAULT_TOKEN","useTransferFormScript","setFromAccount","setToAccount","mainAccount","setMainAccount","holdingMap","setHoldingMap","isMainAccount","currentMaxAmount","currentUnsettledPnL","mainAccountId","observerAccountId","currentHasPositions","portfolio","positions","subAccountMaxAmount","formHasPositions","_mainAccount","firstSubAccount","selectAccount","TransferDialogId","TransferSheetId","TransferFormWidget","TransferWidget","ConvertAction","onConvert","useConvert","useOdosQuote","Arbitrum","splitTokenBySymbol","items","findChainInfo","arbitrumChainInfo","nativeTokenChainInfo","defaultValue","newTokensInfo","others","defaultToken","targetChainInfo","ORDERLY_CONVERT_SLIPPAGE_KEY","normalizeAmount","unnormalizeAmount","useConvertFormScript","convert","postQuote","quoteData","isQuoteLoading","quoteChainId","contract_address","targetAddress","memoizedOutAmounts","memoizedConvertRate","memoizedMinimumReceived","ConvertFormUI","convertRate","outAmounts","ConvertDialogId","ConvertSheetId","ConvertFormWidget","CloseIcon","DepositStatus","canTrade","pendingCount","completedCount","DepositStatusContent","count","estimatedTime","clickable","Dot","useBalanceTopic","useTransferHistory","isSolana","ethers","blockCount","getEvmBlockTime","provider","latest","timestamps","_","i","sum","diff","DefaultSolanaWalletAdapter","getSolanaBlockTime","walletAdapter","samples","totalBlockTime","validSamples","sample","blockTime","getBlockTime","getAppUlnConfigAbi_default","CHAIN_ID_TO_ENDPOINT_ID","getEndpointId","getChainConfirmations","isMainnet","publicRpcUrl","contractAddress","endpointId","useTransactionTime","setBlockTime","confirmations","setConfirmations","timeMap","confirmationsMap","id","time","getTimeRange","endTime","useDepositStatusScript","depositDataRange","setDepositDataRange","transferDataRange","setTransferDataRange","depositPending","setDepositPending","depositCompleted","setDepositCompleted","transferCompleted","setTransferCompleted","pendingList","setPendingList","hideNotificationTimeMap","setHideNotificationTimeMap","transactionTime","seconds","formatEstimatedTime","transferHistory","updateDepositTimeRange","updateTransferTimeRange","hidePendingNotificationTime","hideCompletedNotificationTime","completedList","onClose","totalSeconds","sec","minutes","DepositStatusWidget"],"mappings":"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AAM,WACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,kBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,KAAM,OACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,qBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,wBACN,QAAS,CACP,CACE,aAAc,YACd,KAAM,GACN,KAAM,WACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,8BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,kBACd,KAAM,KACN,KAAM,SACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,kBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,oBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,aAAc,mDACd,KAAM,kBACN,KAAM,OACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,SACd,KAAM,kBACN,KAAM,QACR,CACF,EACA,KAAM,aACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,eACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,mBACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,oBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,aAAc,mDACd,KAAM,kBACN,KAAM,OACR,CACF,EACA,KAAM,oBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,0BACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,kBACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,uBACN,KAAM,SACR,CACF,EACA,KAAM,yBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,qBACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,CACF,EACA,KAAM,kBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,OACd,KAAM,oBACN,KAAM,MACR,CACF,EACA,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,kBACN,KAAM,QACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,2BACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,CACF,EACA,KAAM,mBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,iBACN,QAAS,CACP,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,aAAc,QACd,KAAM,GACN,KAAM,OACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,aAAc,QACd,KAAM,UACN,KAAM,OACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,WACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,UACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,OACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,KAAM,4BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,gBAAiB,UACjB,KAAM,SACR,CACF,EAEaC,GAA2B,CACtC,CAAE,OAAQ,CAAC,EAAG,gBAAiB,aAAc,KAAM,aAAc,EACjE,CACE,UAAW,GACX,OAAQ,CACN,CAAE,QAAS,GAAO,aAAc,QAAS,KAAM,UAAW,KAAM,OAAQ,CAC1E,EACA,KAAM,cACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,SACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CAAE,QAAS,GAAM,aAAc,UAAW,KAAM,KAAM,KAAM,SAAU,EACtE,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,CACF,EACA,KAAM,eACN,KAAM,OACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,qBACN,QAAS,CAAC,CAAE,aAAc,UAAW,KAAM,GAAI,KAAM,SAAU,CAAC,EAChE,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,CAAE,aAAc,UAAW,KAAM,aAAc,KAAM,SAAU,CAAC,EACzE,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,CAAE,aAAc,UAAW,KAAM,aAAc,KAAM,SAAU,CAAC,EACzE,KAAM,aACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, textVariants, Text } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { ActionButton } from \"../actionButton\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { CollateralContribution } from \"../collateralContribution\";\nimport { CollateralRatioWidget } from \"../collateralRatio\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { Notice } from \"../swap/components/notice\";\nimport { SwapFee } from \"../swap/components/swapFee\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { SwapIndicator } from \"../swapIndicator\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport {\n SWAP_USDC_PRECISION,\n type DepositFormScriptReturn,\n} from \"./depositForm.script\";\n\nexport const DepositForm: FC<DepositFormScriptReturn> = (props) => {\n const {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n amount,\n quantity,\n collateralContributionQuantity,\n maxQuantity,\n onQuantityChange,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n fetchBalance,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n fee,\n collateralRatio,\n currentLTV,\n nextLTV,\n slippage,\n onSlippageChange,\n minimumReceived,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapFee,\n warningMessage,\n usdcToken,\n targetQuantity,\n targetQuantityLoading,\n } = props;\n\n const { t } = useTranslation();\n\n const renderContent = () => {\n if (needSwap || needCrossSwap) {\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={1} gapY={1}>\n <Flex width={\"100%\"} itemAlign=\"center\" justify=\"between\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.convertRate\")}\n </Text>\n <SwapCoin\n sourceSymbol={sourceToken?.display_name || sourceToken?.symbol}\n targetSymbol={targetToken?.display_name || targetToken?.symbol}\n precision={SWAP_USDC_PRECISION}\n indexPrice={swapPrice}\n />\n </Flex>\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n value={minimumReceived}\n symbol={targetToken?.symbol ?? \"\"}\n precision={SWAP_USDC_PRECISION}\n />\n <SwapFee {...swapFee} />\n </Flex>\n );\n }\n\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <CollateralRatioWidget value={collateralRatio} />\n <CollateralContribution\n // it need to use USDC precision\n precision={usdcToken?.precision ?? 6}\n value={collateralContributionQuantity}\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n <Fee {...fee} />\n </Flex>\n );\n };\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Web3Wallet />\n <Box mt={3} mb={1}>\n <ChainSelect\n chains={chains}\n value={currentChain!}\n onValueChange={onChainChange}\n wrongNetwork={wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n token={sourceToken}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n status={inputStatus}\n hintMessage={hintMessage}\n fetchBalance={fetchBalance}\n data-testId=\"oui-testid-deposit-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={sourceToken}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity);\n }}\n />\n\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={targetToken}\n tokens={targetTokens}\n onTokenChange={onTargetTokenChange}\n value={targetQuantity}\n loading={targetQuantityLoading}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n {renderContent()}\n </Box>\n\n <SwapIndicator\n sourceToken={sourceToken?.symbol}\n targetToken={targetToken?.symbol}\n className=\"oui-mb-3\"\n />\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={sourceToken?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n onApproveAndDeposit={onApproveAndDeposit}\n networkId={networkId}\n />\n </Flex>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"@orderly.network/hooks\";\nimport type { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const useLtvScript = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n revalidateOnFocus: false,\n },\n );\n const ltvThreshold = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.ltv_threshold).mul(100).toNumber()}%`;\n }, []);\n return {\n ltv_threshold: ltvThreshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nexport type LtvScriptReturns = ReturnType<typeof useLtvScript>;\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Tooltip, Text, Box } from \"@orderly.network/ui\";\nimport type { LtvScriptReturns } from \"./ltv.script\";\n\nconst TooltipIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGProps<SVGSVGElement>\n>((props, ref) => {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n});\n\nconst calculateTextColor = (val: number): string => {\n if (val >= 0 && val < 50) {\n return \"oui-text-success\";\n } else if (val >= 50 && val < 80) {\n return \"oui-text-warning\";\n } else if (val >= 80) {\n return \"oui-text-danger\";\n } else {\n return \"\";\n }\n};\n\nconst TooltipContent: React.FC<{\n isLoading: boolean;\n ltv_threshold: string;\n}> = (props) => {\n const { isLoading, ltv_threshold } = props;\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-72 oui-max-w-72\">\n <Text size=\"2xs\" intensity={80}>\n {t(\"transfer.LTV.description\", {\n threshold: isLoading ? \"-\" : ltv_threshold,\n })}\n </Text>{\" \"}\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className={\n \"oui-border-b oui-border-dashed oui-border-line-12 oui-text-2xs oui-text-primary\"\n }\n >\n {t(\"tradingLeaderboard.learnMore\")}\n </a>\n </Box>\n );\n};\n\nexport const LtvUI: React.FC<\n Readonly<\n LtvScriptReturns & {\n currentLtv: number;\n nextLTV: number;\n showDiff?: boolean;\n }\n >\n> = (props) => {\n const { t } = useTranslation();\n const { currentLtv, nextLTV, showDiff, ltv_threshold, isLoading } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.LTV\")}\n </Text>\n <Tooltip\n className=\"oui-p-2\"\n content={\n <TooltipContent\n isLoading={isLoading}\n ltv_threshold={ltv_threshold}\n />\n }\n >\n <TooltipIcon className=\"oui-ml-[2px] oui-cursor-pointer oui-text-base-contrast-36\" />\n </Tooltip>\n </Flex>\n {showDiff ? (\n <Flex itemAlign=\"center\" justify=\"between\" gap={1}>\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n →\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(nextLTV))}\n >\n {nextLTV}%\n </Text>\n </Flex>\n ) : (\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n )}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useLtvScript } from \"./ltv.script\";\nimport { LtvUI } from \"./ltv.ui\";\n\nexport const LtvWidget: React.FC<\n Readonly<{\n currentLtv: number;\n nextLTV: number;\n showDiff?: boolean;\n }>\n> = (props) => {\n const state = useLtvScript();\n return <LtvUI {...props} {...state} />;\n};\n","import React, { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, ButtonProps } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { DepositAction } from \"../../types\";\n\nexport type ActionButtonProps = {\n disabled?: boolean;\n loading?: boolean;\n actionType: DepositAction;\n symbol?: string;\n onDeposit?: () => void;\n onApprove?: () => void;\n onApproveAndDeposit?: () => void;\n networkId?: NetworkId;\n};\n\nexport const ActionButton: React.FC<ActionButtonProps> = (props) => {\n const {\n disabled,\n loading,\n actionType,\n symbol = \"USDC\",\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n networkId,\n } = props;\n const { t } = useTranslation();\n\n const buttonParams = useMemo(() => {\n const params: Partial<Record<DepositAction, ButtonProps>> = {\n // [DepositAction.Approve]: {\n // // Approve & Deposit\n // children: t(\"transfer.deposit.approve\"),\n // onClick: onApprove,\n // // approve not disabled button\n // disabled: false,\n // \"data-testid\": \"oui-testid-deposit-dialog-approve-btn\",\n // },\n [DepositAction.ApproveAndDeposit]: {\n children: `${t(\"transfer.deposit.approve\")} & ${t(\"common.deposit\")}`,\n onClick: onApproveAndDeposit,\n // approve not disabled button\n // disabled: false,\n },\n // [DepositAction.Increase]: {\n // children: t(\"transfer.deposit.increase.symbol\", { symbol }),\n // onClick: onApprove,\n // \"data-testid\": \"oui-testid-deposit-dialog-increase-btn\",\n // },\n [DepositAction.Deposit]: {\n children: t(\"common.deposit\"),\n onClick: onDeposit,\n \"data-testid\": \"oui-testid-deposit-dialog-deposit-btn\",\n },\n };\n\n return params[actionType];\n }, [onApprove, onDeposit, actionType, symbol, t]);\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={buttonSize}\n {...buttonParams}\n />\n </AuthGuard>\n </Box>\n );\n};\n","export type DST = {\n symbol: string;\n address?: string;\n decimals?: number;\n chainId?: number;\n network?: string;\n};\n\nexport enum DepositAction {\n Deposit,\n Approve,\n ApproveAndDeposit,\n // Increase,\n}\n\nexport enum WithdrawTo {\n /** withdraw to web3 wallet */\n Wallet = \"wallet\",\n /** withdraw to other account id */\n Account = \"accountId\",\n}\n\nexport type InputStatus = \"error\" | \"warning\" | \"success\" | \"default\";\n","import { FC, useMemo } from \"react\";\nimport { useIndexPricesStream } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Spinner, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type AvailableQuantityProps = {\n token?: Partial<API.TokenInfo>;\n amount?: number | string;\n maxQuantity?: number | string;\n onClick?: () => void;\n loading?: boolean;\n};\n\nexport const AvailableQuantity: FC<AvailableQuantityProps> = (props) => {\n const { amount, maxQuantity, token, loading } = props;\n const { t } = useTranslation();\n\n const { getIndexPrice } = useIndexPricesStream();\n\n const name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n const notional = useMemo(() => {\n if (amount && token?.symbol && getIndexPrice(token?.symbol)) {\n return new Decimal(amount)\n .mul(getIndexPrice(token?.symbol) || 1)\n .toNumber();\n }\n return 0;\n }, [amount, token?.symbol]);\n\n return (\n <Flex px={2}>\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {notional}\n </Text.numeral>\n </Text>\n\n <Flex gapX={2} itemAlign=\"center\" className=\"oui-ml-auto\">\n <Flex gapX={1} itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"common.available\")}: `}\n </Text>\n\n {loading ? (\n <Spinner size=\"sm\" />\n ) : (\n <Text.numeral\n size=\"2xs\"\n intensity={36}\n rm={Decimal.ROUND_DOWN}\n dp={dp}\n padding={false}\n data-testid=\"oui-testid-withdraw_deposit-dialog-available-value\"\n >\n {maxQuantity!}\n </Text.numeral>\n )}\n\n <Text size=\"2xs\" intensity={36}>\n {` ${name}`}\n </Text>\n </Flex>\n\n <Text\n size=\"2xs\"\n color=\"primary\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={props.onClick}\n >\n {t(\"common.max\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { useAppConfig } from \"@orderly.network/react-app\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const BrokerWallet: FC = () => {\n const { t } = useTranslation();\n const { appIcons } = useAppConfig();\n const brokerName = useConfig(\"brokerName\");\n\n const icon = useMemo(() => {\n const { secondary } = appIcons || {};\n\n if (!secondary?.img && secondary?.component) return null;\n\n if (secondary?.img) {\n return <img src={secondary?.img} className=\"oui-w-5 oui-h-5\" />;\n }\n\n if (secondary?.component) {\n return <>{secondary.component}</>;\n }\n }, [appIcons]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.brokerAccount\", { brokerName })}\n </Text>\n {icon}\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n ChainIcon,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\nimport { CurrentChain } from \"../depositForm/hooks\";\n\ntype ChainSelectProps = {\n chains: API.NetworkInfos[];\n value: CurrentChain;\n onValueChange: (chain: API.NetworkInfos) => Promise<void>;\n wrongNetwork: boolean;\n loading?: boolean;\n};\n\nexport const ChainSelect: React.FC<ChainSelectProps> = (props) => {\n const { chains, value, wrongNetwork, loading } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n const selectable = wrongNetwork || chains?.length > 1;\n\n const chainIcon = wrongNetwork ? (\n <Flex\n width={18}\n height={18}\n intensity={100}\n r=\"full\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Text size=\"2xs\" intensity={80}>\n U\n </Text>\n </Flex>\n ) : (\n <ChainIcon className=\"oui-size-[18px]\" chainId={value?.id} />\n );\n\n const chainName = wrongNetwork ? \"Unknown\" : value?.info?.network_infos?.name;\n\n const renderRightIcon = () => {\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n if (selectable) {\n return <ExchangeIcon className=\"oui-text-base-contrast-54\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-t-xl oui-rounded-b-sm oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <div>\n <Flex>\n <Text size=\"2xs\" intensity={54}>\n {t(\"transfer.network\")}\n </Text>\n </Flex>\n <Flex gapX={1}>\n {chainIcon}\n <Text size=\"sm\" intensity={80}>\n {chainName}\n </Text>\n </Flex>\n </div>\n {renderRightIcon()}\n </Flex>\n );\n\n const content = chains.map((chain, index) => {\n const isActive = chain.chain_id === value?.id;\n return (\n <Flex\n key={chain.chain_id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-deposit-network-select-item\",\n \"hover:oui-bg-base-5 oui-h-[30px] oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n await props.onValueChange(chain);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <ChainIcon className=\"oui-size-[18px]\" chainId={chain.chain_id} />\n <Text size=\"2xs\" intensity={54}>\n {chain.name}\n </Text>\n </Flex>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-deposit-network-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-deposit-token-select-dropdown-menu-content\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-rounded-md oui-select-none\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content}</div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import React, { FC, SVGProps } from \"react\";\n\nexport const ExchangeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10.997 8.004a.5.5 0 0 0-.14-.36l-1.86-1.843-.703.703.984 1h-7.28a.5.5 0 0 0 0 1h7.28l-.984 1 .703.703 1.86-1.844a.5.5 0 0 0 .14-.36m-.5-4a.5.5 0 0 0-.5-.5H2.716l.984-1-.703-.703-1.859 1.843a.515.515 0 0 0 0 .719l1.86 1.844.702-.703-.984-1h7.281a.5.5 0 0 0 .5-.5\" />\n </svg>\n);\n\nexport const ArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M9.994 5.51a.83.83 0 0 0-.832.833v6.295l-2.498-2.471-1.17 1.17 3.902 3.929a.84.84 0 0 0 .599.244.84.84 0 0 0 .597-.244l3.903-3.928-1.171-1.171-2.498 2.471V6.343a.83.83 0 0 0-.832-.833\" />\n </svg>\n);\n\nexport const SelectArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2.503 3.332a.412.412 0 0 0-.326.664l2.5 3.333a.414.414 0 0 0 .664 0l2.5-3.333a.417.417 0 0 0-.338-.664z\" />\n </svg>\n);\n\nexport const RefreshIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.00342 1.49561C4.97642 1.49561 3.99542 1.84011 3.20642 2.46461C2.98992 2.63561 2.95692 2.9511 3.12842 3.1676C3.29992 3.3841 3.61492 3.4171 3.83142 3.2456C4.44492 2.7601 5.20392 2.4956 6.00342 2.4956C7.93642 2.4956 9.50342 4.0626 9.50342 5.9956H8.50342L10.0034 7.9956L11.5034 5.9956H10.5034C10.5034 3.5101 8.48892 1.49561 6.00342 1.49561ZM2.00342 3.9956L0.503418 5.9956H1.50342C1.50342 8.4811 3.51792 10.4956 6.00342 10.4956C7.03092 10.4956 8.01142 10.1516 8.80042 9.52659C9.01692 9.35559 9.04992 9.0401 8.87842 8.8236C8.70692 8.6071 8.39191 8.5741 8.17542 8.7456C7.56142 9.2316 6.80342 9.4956 6.00342 9.4956C4.07042 9.4956 2.50342 7.9286 2.50342 5.9956H3.50342L2.00342 3.9956Z\" />\n </svg>\n);\n\nexport const TransferVerticalIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M12.385 4.565a.6.6 0 0 0-.427.167L9.764 6.944l.837.837 1.19-1.17v8.66a.595.595 0 0 0 1.19 0v-8.66l1.189 1.17.836-.837-2.193-2.212a.6.6 0 0 0-.428-.167m-4.758.595a.595.595 0 0 0-.595.595v8.661l-1.19-1.17-.836.836L7.2 16.294a.61.61 0 0 0 .855 0l2.194-2.212-.837-.836-1.19 1.17V5.755a.595.595 0 0 0-.594-.595\" />\n </svg>\n);\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const CollateralContribution: React.FC<{\n value: number;\n precision: number;\n}> = (props) => {\n const { t } = useTranslation();\n const { value, precision } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.collateralContribution\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n rm={Decimal.ROUND_DOWN}\n className={cn(\"oui-font-semibold\")}\n padding={false}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36} className=\"oui-select-none\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\n// import type { CollateralRatioReturns } from \"./collateralRatio.script\";\n\nconst TooltipIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGProps<SVGSVGElement>\n>((props, ref) => {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n});\n\nconst TooltipContent: React.FC = () => {\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-72 oui-max-w-72\">\n <Text size=\"2xs\" intensity={80}>\n {t(\"portfolio.overview.column.collateralRatio.explain\")}\n </Text>{\" \"}\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className={\n \"oui-border-b oui-border-dashed oui-border-line-12 oui-text-2xs oui-text-primary\"\n }\n >\n {t(\"tradingLeaderboard.learnMore\")}\n </a>\n </Box>\n );\n};\n\nexport const CollateralRatioUI: React.FC<{ value: number }> = (props) => {\n const { t } = useTranslation();\n const { value } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"portfolio.overview.column.collateralRatio\")}\n </Text>\n <Tooltip className=\"oui-p-2\" content={<TooltipContent />}>\n <TooltipIcon className=\"oui-ml-[2px] oui-cursor-pointer oui-text-base-contrast-36\" />\n </Tooltip>\n </Flex>\n <Text.numeral\n dp={2}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n rule=\"percentages\"\n >\n {value}\n </Text.numeral>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { CollateralRatioUI } from \"./collateralRatio.ui\";\n\nexport const CollateralRatioWidget: React.FC<{ value: number }> = (props) => {\n return <CollateralRatioUI {...props} />;\n};\n","import { FC, ReactNode } from \"react\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../../icons\";\n\ntype ExchangeDividerProps = {\n icon?: ReactNode;\n};\n\nexport const ExchangeDivider: FC<ExchangeDividerProps> = ({ icon }) => {\n return (\n <Flex height={40} gapX={3}>\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n {icon || <ArrowDownIcon className=\"oui-text-primary-light\" />}\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { type UseDepositFeeReturn } from \"../depositForm/depositForm.script\";\n\nexport const Fee: FC<Partial<UseDepositFeeReturn>> = (props) => {\n const { dstGasFee, feeQty, feeAmount, dp, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={1}>\n <Text size=\"2xs\" intensity={54}>\n {`${t(\"transfer.deposit.destinationGasFee\")}: `}\n </Text>\n <Text.numeral\n intensity={80}\n dp={dp}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {feeQty!}\n </Text.numeral>\n <Text intensity={54}>{nativeSymbol}</Text>\n </Flex>\n <Box mt={2}>\n <Text intensity={36}>\n {t(\"transfer.deposit.destinationGasFee.description\")}\n </Text>\n </Box>\n </div>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const showFeeQty = !!dstGasFee && dstGasFee !== \"0\";\n\n return (\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\"\n onClick={onShowFee}\n >\n {`${t(\"transfer.deposit.estGasFee\")} ≈ `}\n <Text size=\"2xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount!}\n </Text.numeral>{\" \"}\n </Text>\n {showFeeQty && (\n <span>\n (\n <Text intensity={54}>\n <Text.numeral dp={dp} padding={false} rm={Decimal.ROUND_UP}>\n {feeQty!}\n </Text.numeral>\n {nativeSymbol}\n </Text>\n )\n </span>\n )}\n </Text>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const MinimumReceived: React.FC<\n Readonly<{ symbol: string; value: number | string; precision: number }>\n> = (props) => {\n const { t } = useTranslation();\n const { value, symbol, precision = 6 } = props;\n\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.swapDeposit.minimumReceived\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n className=\"oui-select-none\"\n intensity={80}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" className=\"oui-select-none\" intensity={36}>\n {symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Input,\n Select,\n InputProps,\n cn,\n Box,\n Text,\n Flex,\n inputFormatter,\n Spinner,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { TokenOption } from \"./tokenOption\";\n\nexport type QuantityInputProps = {\n token?: API.TokenInfo;\n tokens?: API.TokenInfo[];\n label?: string;\n status?: InputStatus;\n hintMessage?: string;\n onValueChange?: (value: string) => void;\n onTokenChange?: (token: any) => void;\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n loading?: boolean;\n testId?: string;\n formatters?: InputFormatter[];\n vaultBalanceList?: API.VaultBalance[];\n displayType?: \"balance\" | \"vaultBalance\";\n} & Omit<InputProps, \"onClear\" | \"suffix\" | \"onValueChange\">;\n\nexport const QuantityInput: FC<QuantityInputProps> = (props) => {\n const {\n token,\n tokens = [],\n classNames,\n label,\n status,\n hintMessage,\n value,\n onValueChange,\n fetchBalance,\n onTokenChange,\n loading,\n placeholder,\n formatters,\n vaultBalanceList,\n displayType,\n ...rest\n } = props;\n\n const { t } = useTranslation();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n\n const tokenOptions = useMemo(() => {\n return tokens.map((token) => {\n const currentToken = vaultBalanceList?.find(\n (item) => item.token === token.symbol,\n );\n const insufficientBalance = currentToken\n ? new Decimal(currentToken.balance ?? 0).lt(value ? Number(value) : 0)\n : false;\n return {\n ...token,\n name: token.display_name || token.symbol!,\n insufficientBalance,\n };\n });\n }, [tokens, value, vaultBalanceList]);\n\n useEffect(() => {\n const rect = inputRef?.current?.getBoundingClientRect();\n setWidth(rect?.width || 0);\n }, [inputRef]);\n\n const _onTokenChange = (value: string) => {\n const find = tokens.find((item) => item.symbol === value);\n if (find) {\n onTokenChange?.(find);\n }\n };\n\n const selectable = tokens.length > 1;\n const selectOpen = selectable ? open : false;\n\n const optionRenderer = (item: any) => {\n const isActive = item.symbol === token?.symbol;\n return (\n <TokenOption\n token={item}\n isActive={isActive}\n fetchBalance={fetchBalance}\n displayType={displayType}\n onTokenChange={(item) => {\n onTokenChange?.(item);\n setOpen(false);\n }}\n open={selectOpen}\n />\n );\n };\n\n const prefix = (\n <Box>\n <Box className=\"oui-absolute oui-top-0\">\n <Text size=\"2xs\" intensity={36}>\n {label || t(\"common.quantity\")}\n </Text>\n </Box>\n {loading && (\n <Box className=\"oui-absolute oui-bottom-1\">\n <Spinner size=\"sm\" />\n </Box>\n )}\n </Box>\n );\n\n const suffix = (\n <div className=\"oui-absolute oui-right-0\">\n <Select.tokens\n open={selectOpen}\n onOpenChange={setOpen}\n disabled={rest.disabled}\n variant=\"text\"\n tokens={tokenOptions}\n value={token?.display_name || token?.symbol}\n size={rest.size}\n onValueChange={_onTokenChange}\n showIcon\n optionRenderer={optionRenderer}\n contentProps={{\n onCloseAutoFocus: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n onClick: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n style: { width },\n align: \"end\",\n sideOffset: 5,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n </div>\n );\n\n const message = (\n <Flex mt={1} gapX={1} px={1}>\n <Box\n width={4}\n height={4}\n r=\"full\"\n className={cn(\n status === \"error\" && \"oui-bg-danger-light\",\n status === \"warning\" && \"oui-bg-warning-light\",\n )}\n ></Box>\n <Text\n size=\"2xs\"\n className={cn(\n status === \"error\" && \"oui-text-danger-light\",\n status === \"warning\" && \"oui-text-warning-light\",\n )}\n >\n {hintMessage}\n </Text>\n </Flex>\n );\n\n const _placeholder = placeholder ?? (loading ? \"\" : \"0\");\n\n return (\n <>\n <Input\n ref={inputRef}\n autoComplete=\"off\"\n placeholder={_placeholder}\n prefix={prefix}\n suffix={suffix}\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value);\n }}\n formatters={\n formatters || [\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(token?.precision ?? 2),\n inputFormatter.currencyFormatter,\n ]\n }\n {...rest}\n classNames={{\n ...classNames,\n root: cn(\n \"oui-relative oui-h-[54px] oui-px-3\",\n \"oui-rounded-lg oui-border oui-border-line\",\n status === \"error\" &&\n \"oui-outline-danger-light focus-within:oui-outline-danger-light\",\n status === \"warning\" &&\n \"oui-outline-warning-light focus-within:oui-outline-warning-light\",\n props.readOnly\n ? \"oui-border-none oui-bg-base-6 focus-within:oui-outline-0\"\n : \"oui-bg-base-5\",\n classNames?.root,\n ),\n input: cn(\"oui-absolute oui-bottom-0\", classNames?.input),\n }}\n />\n {hintMessage && message}\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Badge, cn, Flex, Spinner, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useBalance } from \"./useBalance\";\n\ninterface TokenOptionProps {\n token: API.TokenInfo & {\n label: string;\n value: string;\n insufficientBalance?: boolean;\n };\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n onTokenChange?: (token: API.TokenInfo) => void;\n isActive: boolean;\n index?: number;\n displayType?: \"balance\" | \"vaultBalance\";\n open?: boolean;\n}\n\nexport const TokenOption: React.FC<TokenOptionProps> = (props) => {\n const { token, isActive, displayType, onTokenChange, fetchBalance, open } =\n props;\n const { symbol, precision, insufficientBalance } = token;\n const { balance, loading } = useBalance(token, fetchBalance, open);\n\n const showBalance = typeof fetchBalance === \"function\";\n\n const { t } = useTranslation();\n\n if (displayType === \"vaultBalance\" && insufficientBalance) {\n return (\n <Flex\n key={symbol}\n itemAlign={\"center\"}\n justify=\"between\"\n px={2}\n r=\"base\"\n className={cn(\n \"group\",\n \"oui-h-[30px]\",\n \"oui-text-2xs oui-font-semibold\",\n isActive && \"oui-bg-base-5\",\n props.index !== 0 && \"oui-mt-[2px]\",\n \"oui-cursor-not-allowed\",\n )}\n >\n <Flex itemAlign=\"center\" gapX={1}>\n <TokenIcon name={symbol} className=\"oui-size-[16px] oui-opacity-50\" />\n <Text intensity={36}>{token.label}</Text>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"transfer.withdraw.InsufficientVaultBalance\")}\n </Badge>\n </Flex>\n </Flex>\n );\n }\n\n const renderValue = () => {\n if (!showBalance) {\n return null;\n }\n\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n\n return (\n <Text.numeral\n rule=\"price\"\n dp={precision ?? 2}\n rm={Decimal.ROUND_DOWN}\n className={cn(\n \"oui-text-base-contrast-80 group-hover:oui-text-base-contrast-54\",\n isActive && \"oui-text-base-contrast-54\",\n )}\n >\n {balance}\n </Text.numeral>\n );\n };\n\n return (\n <Flex\n key={symbol}\n justify=\"between\"\n px={2}\n r=\"base\"\n className={cn(\n \"group\",\n \"oui-h-[30px] hover:oui-bg-base-5\",\n \"oui-text-2xs oui-font-semibold\",\n \"oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n props.index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={() => {\n onTokenChange?.(token);\n }}\n >\n <Flex gapX={1}>\n <TokenIcon name={symbol} className=\"oui-size-[16px]\" />\n <Text\n className={cn(\n \"oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80\",\n isActive && \"oui-text-base-contrast-80\",\n )}\n >\n {token.label}\n </Text>\n </Flex>\n {renderValue()}\n </Flex>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nconst retryInterval = 1000;\n\nexport function useBalance(\n token: API.TokenInfo,\n fetchBalance?: (token: string, decimals: number) => Promise<any>,\n open?: boolean,\n) {\n const [balance, setBalance] = useState<string>(\"\");\n const balanceRef = useRef<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n const loopGetTokenBalance = async (timeout = 0) => {\n if (loading || typeof fetchBalance !== \"function\" || !token.address) {\n return;\n }\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (balanceRef.current === \"\") {\n // when balance is empty, set loading to true\n setLoading(true);\n }\n\n timeoutRef.current = setTimeout(async () => {\n try {\n const balance = await fetchBalance(token.address!, token.decimals!);\n setBalance(balance);\n balanceRef.current = balance;\n console.log(\"balance\", token.symbol, token.address, balance);\n } catch (err) {\n console.error(\"get balance error\", token.symbol, token.address, err);\n // when fetch balance failed, retry\n loopGetTokenBalance(retryInterval);\n } finally {\n if (balanceRef.current !== \"\") {\n setLoading(false);\n }\n }\n }, timeout);\n };\n\n useEffect(() => {\n if (open) {\n // get balance first, no timeout\n loopGetTokenBalance(0);\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [token, open]);\n\n return { balance, loading };\n}\n","import { FC, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlertDialog,\n Box,\n cn,\n EditIcon,\n Flex,\n Input,\n inputFormatter,\n Text,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ninterface SlippageProps {\n value?: number;\n onValueChange?: (value: number) => void;\n max?: number;\n min?: number;\n}\n\nconst options = [0.5, 1, 2];\n\nexport const Slippage: FC<SlippageProps> = (props) => {\n const { min = 0.2, max = 10 } = props;\n const [value, setValue] = useState<number>();\n const [customValue, setCustomValue] = useState(\"\");\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.value && !options.includes(props.value!)) {\n setCustomValue(props.value!.toString());\n } else {\n setValue(props.value);\n }\n }, [props.value, open]);\n\n const showSlippage = () => {\n setOpen(true);\n };\n\n const hideSlippage = () => {\n setOpen(false);\n };\n\n const onClick = (val: number) => {\n setValue(val);\n setCustomValue(\"\");\n };\n\n const onValueChange = (val: string) => {\n if (!val || Number(val) === 0) {\n setCustomValue(val);\n return;\n }\n\n const d = new Decimal(val);\n setValue(undefined);\n if (d.lt(min)) {\n setCustomValue(min.toString());\n } else if (d.gt(max)) {\n setCustomValue(max.toString());\n } else {\n setCustomValue(val);\n }\n };\n\n const getValue = () =>\n customValue ? new Decimal(customValue)?.toNumber() : value;\n\n const onConfirm = () => {\n const val = getValue();\n if (!val) return Promise.resolve(true);\n props.onValueChange?.(val);\n hideSlippage();\n // if custom value in options, then clear custom value\n if (options.includes(val)) {\n setCustomValue(\"\");\n }\n return Promise.resolve(true);\n };\n\n const disabled = !getValue();\n\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={2}>\n {options.map((item) => {\n const isActive = value === item;\n return (\n <SlippageItem\n key={item}\n value={item}\n isActive={isActive}\n onClick={() => {\n onClick(item);\n }}\n />\n );\n })}\n\n <Input\n suffix=\"%\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n ]}\n value={customValue}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-rounded-md oui-bg-base-6\",\n \"oui-h-[40px] oui-w-[74px]\",\n ),\n input: \"oui-text-base-contrast\",\n additional: \"oui-pl-1\",\n }}\n />\n </Flex>\n\n <Box mt={5}>\n <Text intensity={54}>\n {t(\"transfer.slippage.slippageTolerance.description\")}\n </Text>\n </Box>\n </div>\n );\n\n return (\n <>\n <AlertDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"transfer.slippage.slippageTolerance\")}\n okLabel={t(\"common.confirm\")}\n message={content}\n onOk={onConfirm}\n actions={{ primary: { disabled } }}\n />\n <Flex\n width=\"100%\"\n justify=\"between\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={showSlippage}\n >\n <Text intensity={36} size=\"2xs\">\n {t(\"transfer.slippage\")}\n </Text>\n <Flex gapX={1}>\n <Text size=\"2xs\" color=\"primaryLight\">\n {props.value}%\n </Text>\n <EditIcon className=\"oui-size-3 oui-text-primary-light\" />\n </Flex>\n </Flex>\n </>\n );\n};\n\ntype SlippageItemProps = {\n value: number;\n isActive: boolean;\n onClick: () => void;\n};\n\nconst SlippageItem: FC<SlippageItemProps> = ({ value, isActive, onClick }) => {\n return (\n <Flex\n intensity={600}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"md\"\n width={74}\n height={40}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive && \"oui-bg-primary-light\",\n )}\n onClick={onClick}\n >\n <Text size=\"sm\" intensity={80}>\n {value}%\n </Text>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { Box, Text } from \"@orderly.network/ui\";\nimport { modal } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\n\ntype NoticeProps = {\n message?: string;\n needSwap?: boolean;\n needCrossSwap?: boolean;\n wrongNetwork?: boolean;\n networkId?: NetworkId;\n};\n\nexport const Notice: FC<NoticeProps> = (props) => {\n const { message, needSwap, needCrossSwap, wrongNetwork, networkId } = props;\n const { t } = useTranslation();\n\n const showChainSelect = () => {\n modal.show(ChainSelectorDialogId, { networkId });\n };\n\n const content = useMemo(() => {\n if (wrongNetwork) {\n return t(\"connector.wrongNetwork.tooltip\");\n }\n\n if (message) {\n return message;\n }\n\n if (needCrossSwap) {\n return (\n <Text>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.crossSwap.notice\"\n components={[\n <Text\n key=\"0\"\n className=\"oui-cursor-pointer\"\n color=\"primaryLight\"\n onClick={showChainSelect}\n />,\n ]}\n />\n </Text>\n );\n }\n\n if (needSwap) {\n return t(\"transfer.swapDeposit.swap.notice\");\n }\n }, [message, needSwap, needCrossSwap, wrongNetwork, t]);\n\n if (content) {\n return (\n <Box\n mb={3}\n className=\"oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Box>\n );\n }\n\n return null;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Divider, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { UseSwapFee } from \"../hooks/useSwapFee\";\n\ntype SwapFeeProps = UseSwapFee;\n\nexport const SwapFee: FC<SwapFeeProps> = (props) => {\n const { feeQtys, feeAmount, feeDetails, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <Box className=\"oui-text-2xs\">\n {feeDetails?.map((item, index) => {\n const isEnd = index === feeDetails?.length - 1;\n return (\n <Box key={index}>\n <Flex gapX={1}>\n <Text intensity={54}>{item.title}:</Text>\n {/* TODO: format price in data */}\n <Text\n intensity={80}\n // dp={item.dp}\n // rm={Decimal.ROUND_UP}\n // padding={false}\n >\n {item.value}\n </Text>\n <Text intensity={54}>{item.symbol}</Text>\n </Flex>\n\n <Box mt={2}>\n <Text intensity={36}>{item.description}</Text>\n </Box>\n\n {!isEnd && (\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const renderFeeQty = () => {\n const len = feeQtys?.length;\n if (!len) return;\n\n const list = feeQtys.map((item, index) => {\n return (\n <Text intensity={54} key={index}>\n <Text.numeral dp={item.dp} padding={false} rm={Decimal.ROUND_UP}>\n {item.value}\n </Text.numeral>\n {` ${item.symbol || nativeSymbol}`}\n </Text>\n );\n });\n\n if (len === 1) {\n return <span>({list})</span>;\n }\n\n if (len === 2) {\n return (\n <span>\n ({list[0]} + {list[1]})\n </span>\n );\n }\n };\n\n return (\n <Text\n size=\"xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n onClick={onShowFee}\n >\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount}\n </Text.numeral>\n {` `}\n </Text>\n\n {renderFeeQty()}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\n\ninterface SwapCoinProps {\n className?: string;\n sourceSymbol?: string;\n targetSymbol?: string;\n indexPrice: number | string;\n precision?: number;\n}\n\nexport const SwapCoin: FC<SwapCoinProps> = (props) => {\n const { sourceSymbol, targetSymbol, indexPrice, precision = 6 } = props;\n return (\n <Flex\n itemAlign=\"center\"\n gap={1}\n className={cn(props.className, \"oui-text-2xs\")}\n >\n <Text size=\"2xs\" intensity={80}>\n 1\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {sourceSymbol}\n </Text>\n =\n <Text.numeral size=\"2xs\" intensity={80} dp={precision} padding={false}>\n {indexPrice}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36}>\n {targetSymbol}\n </Text>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { ArrowRightIcon } from \"../swap/icons\";\n\nexport const SwapIndicator: React.FC<{\n sourceToken?: string;\n targetToken?: string;\n className?: string;\n}> = (props) => {\n const { sourceToken, targetToken, className } = props;\n\n if (sourceToken === targetToken) {\n return null;\n }\n\n return (\n <Flex\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={className}\n >\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={sourceToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {sourceToken}\n </Text>\n </Flex>\n <ArrowRightIcon className=\"oui-size-4\" />\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={targetToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {targetToken}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n","import { FC, SVGProps } from \"react\";\n\nexport const EditIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.498.977a.5.5 0 0 0-.36.14l-1.5 1.501-4.503 4.503-.5.5a.5.5 0 0 0-.125.266l-.5 2.501c-.07.35.228.648.578.579l2.501-.5a.5.5 0 0 0 .266-.126l.5-.5 4.503-4.503 1.5-1.5a.5.5 0 0 0 .141-.36c0-.818-.208-1.403-.64-1.845-.437-.445-1.02-.656-1.861-.656m.197 1.01c.451.026.744.13.944.334.205.21.335.5.363.942-.274.273-.675.668-1.004.997L7.716 2.978c.33-.329.705-.718.979-.992m-1.698 1.71L8.28 4.979 4.496 8.762 3.214 7.48zM2.495 8.199l1.282 1.282-.047.047c-.33.066-.997.206-1.61.329l.328-1.61z\" />\n </svg>\n);\n\nexport const ArrowRightIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"25\"\n viewBox=\"0 0 24 25\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 12.493a1 1 0 0 1 .999-1h7.555L11.6 8.498l1.405-1.405 4.714 4.683c.196.195.293.457.293.719 0 .26-.098.522-.293.717l-4.714 4.683L11.6 16.49l2.966-2.997H7.011a1 1 0 0 1-.999-1\" />\n </svg>\n);\n\nexport const GasFeeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 2.67v10.663h4.667V2.667H4zm6-.003v2.666h1c.218 0 .53.06.806.26.31.223.527.59.527 1.074V12h1V6.667c0-.045 0-.154-.027-.277a.5.5 0 0 0-.11-.252l-1.668-1.667a.667.667 0 0 1 .943-.942l1.667 1.666c.294.294.417.658.472.915.057.264.057.486.057.555V12c0 .484-.217.85-.527 1.074-.277.2-.589.26-.807.26h-1c-.484 0-.85-.217-1.074-.528a1.4 1.4 0 0 1-.26-.806V6.667H10v6.666h.667a.667.667 0 0 1 0 1.334H2a.667.667 0 0 1 0-1.334h.667V2.667c0-.218.06-.53.259-.807.223-.31.59-.527 1.074-.527h4.667c.217 0 .53.06.806.26.31.223.527.59.527 1.074m-4.667 2a.667.667 0 0 0 0 1.333h2a.667.667 0 0 0 0-1.333z\"\n />\n </svg>\n);\n\nexport const TopRightArrowIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"13\"\n height=\"12\"\n viewBox=\"0 0 13 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.996 10.496a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2zm-4-2.5a.5.5 0 0 1-.36-.14.515.515 0 0 1 0-.72l2-2-1.14-1.14h3v3l-1.14-1.14-2 2a.5.5 0 0 1-.36.14\" />\n </svg>\n);\n\nexport const WoofiIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#07080A\" />\n <path\n d=\"M5.077 7.385h2.269l1.604 5.28c.106.348.196.73.196.73s.138-.413.28-.742l.885-2.052a1.8 1.8 0 0 1 .66-.782 1.81 1.81 0 0 1 1.974 0c.293.191.523.463.662.782l2.143 4.91v1.095h-1.402c-.235 0-.464-.07-.66-.2a1.17 1.17 0 0 1-.434-.53l-1.303-3.16-1.243 3.152a1.19 1.19 0 0 1-1.105.747h-.848c-.235 0-.465-.075-.654-.214a1.1 1.1 0 0 1-.4-.556z\"\n fill=\"#FEFEFE\"\n />\n <path d=\"m18.146 10.846 1.066-3.461h-2.396l-1.066 3.461z\" fill=\"url(#a)\" />\n <path\n d=\"m15.371 12-1.208 3.865v.009c-.073.216-.194.529-.514.51a.33.33 0 0 1-.207-.058c.211.186.482.29.763.29h1.428a1.065 1.065 0 0 0 .928-.75L17.769 12z\"\n fill=\"url(#b)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"14.618\"\n y1=\"16.592\"\n x2=\"17.597\"\n y2=\"7.455\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n <linearGradient\n id=\"b\"\n x1=\"16.192\"\n y1=\"16.587\"\n x2=\"18.206\"\n y2=\"7.458\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { FC, useMemo } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@orderly.network/types\";\nimport { Flex, Text, WalletIcon } from \"@orderly.network/ui\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const address = useMemo(() => {\n let address = accountState.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, accountState, account, connectedChain]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.web3Wallet.your\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"xs\"} name={wallet?.label ?? \"\"} />\n <Text.formatted size=\"sm\" intensity={54} rule=\"address\">\n {address}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useConfig,\n useComputedLTV,\n useDeposit,\n useIndexPrice,\n useIndexPricesStream,\n useQuery,\n useTokenInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account as accountPerp } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId, ChainNamespace } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useNeedSwapAndCross } from \"../swap/hooks/useNeedSwapAndCross\";\nimport { useSwapDeposit } from \"../swap/hooks/useSwapDeposit\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"./hooks\";\nimport { useToken } from \"./hooks/useToken\";\n\nconst { collateralRatio, collateralContribution, calcMinimumReceived } =\n accountPerp;\n\nexport type DepositFormScriptReturn = ReturnType<typeof useDepositFormScript>;\n\nexport type DepositFormScriptOptions = {\n close?: () => void;\n};\n// swap to usdc precision is 3\nexport const SWAP_USDC_PRECISION = 3;\n\nexport const useDepositFormScript = (options: DepositFormScriptOptions) => {\n const { wrongNetwork } = useAppContext();\n const { t } = useTranslation();\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const [feeWarningMessage, setFeeWarningMessage] = useState(\"\");\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n } = useToken(currentChain);\n\n const { data: indexPrices, getIndexPrice } = useIndexPricesStream();\n\n const indexPrice = useMemo(() => {\n return getIndexPrice(sourceToken?.symbol ?? \"\") ?? 0;\n }, [sourceToken?.symbol, indexPrices]);\n\n const usdcToken = useMemo(() => {\n return sourceTokens?.find((item) => item.symbol === \"USDC\");\n }, [sourceTokens]);\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n } = useDeposit({\n address: sourceToken?.address,\n decimals: sourceToken?.decimals,\n srcChainId: currentChain?.id,\n srcToken: sourceToken?.symbol,\n dstToken: targetToken?.symbol,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n depositorAddress: currentChain?.info?.network_infos?.depositor,\n });\n\n const maxQuantity = useMemo(\n () =>\n new Decimal(balance || 0)\n .todp(sourceToken?.precision ?? 2, Decimal.ROUND_DOWN)\n .toString(),\n [balance, sourceToken?.precision],\n );\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n });\n\n const { needSwap, needCrossSwap } = useNeedSwapAndCross({\n srcToken: sourceToken,\n dstToken: targetToken,\n srcChainId: currentChain?.id,\n dstChainId: dst?.chainId,\n });\n\n const {\n cleanTransactionInfo,\n onSwapDeposit,\n swapRevalidating,\n\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n warningMessage: swapWarningMessage,\n slippage,\n onSlippageChange,\n } = useSwapDeposit({\n srcToken: sourceToken!,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.close?.();\n }, [cleanData, options.close]);\n\n const { submitting, onApprove, onDeposit, onApproveAndDeposit } =\n useDepositAction({\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit: needSwap || needCrossSwap,\n customDeposit: onSwapDeposit,\n onSuccess,\n });\n\n const userMaxQtyMessage = useMemo(() => {\n if (\n sourceToken?.symbol === \"USDC\" ||\n sourceToken?.symbol !== targetToken?.symbol ||\n !sourceToken?.is_collateral ||\n !quantity ||\n isNaN(Number(quantity))\n ) {\n return \"\";\n }\n\n if (new Decimal(quantity).gt(sourceToken?.user_max_qty)) {\n return t(\"transfer.deposit.userMaxQty.error\", {\n maxQty: sourceToken?.user_max_qty,\n token: sourceToken?.symbol,\n });\n }\n return \"\";\n }, [sourceToken, targetToken, quantity, t]);\n\n const loading = submitting || depositFeeRevalidating!;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n !sourceToken ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating ||\n // if exceed collateral cap, disable deposit\n !!userMaxQtyMessage ||\n !!feeWarningMessage;\n\n const amount = useMemo(() => {\n const markPrice = 1;\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity]);\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useDepositFee({\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n });\n\n const {\n collateralRatio,\n collateralContributionQuantity,\n currentLTV,\n nextLTV,\n } = useCollateralValue({\n tokens: sourceTokens,\n sourceToken,\n targetToken,\n qty: quantity,\n indexPrice,\n });\n\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isLoading: isConvertThresholdLoading,\n } = useConvertThreshold();\n\n useEffect(() => {\n cleanData();\n }, [sourceToken, currentChain?.id]);\n\n const gasFeeMessage = useMemo(() => {\n if (isNativeToken && maxQuantity === quantity) {\n return t(\"transfer.deposit.gasFee.error\", {\n token: sourceToken?.symbol,\n });\n }\n }, [maxQuantity, quantity, sourceToken?.symbol, t]);\n\n useEffect(() => {\n if (\n quantity &&\n Number(quantity) > 0 &&\n depositFee === 0n &&\n !depositFeeRevalidating\n ) {\n setFeeWarningMessage(t(\"transfer.deposit.failed.fee\"));\n } else {\n setFeeWarningMessage(\"\");\n }\n }, [quantity, depositFee, depositFeeRevalidating, t]);\n\n const warningMessage =\n swapWarningMessage ||\n userMaxQtyMessage ||\n gasFeeMessage ||\n feeWarningMessage;\n\n // const isCollateralNativeToken = useMemo(() => {\n // return (\n // sourceToken?.is_collateral &&\n // sourceToken?.symbol === targetToken?.symbol &&\n // isNativeToken &&\n // !needSwap &&\n // !needCrossSwap\n // );\n // }, [sourceToken, targetToken, isNativeToken, needSwap, needCrossSwap]);\n\n const targetQuantity = useMemo(() => {\n if (needSwap) {\n return swapQuantity\n ? new Decimal(swapQuantity)\n ?.todp(SWAP_USDC_PRECISION, Decimal.ROUND_DOWN)\n .toString()\n : swapQuantity;\n }\n return quantity;\n }, [needSwap, swapQuantity, quantity]);\n\n // only swap deposit show minimum received\n const minimumReceived = useMemo(() => {\n if (!swapQuantity) {\n return \"-\";\n }\n return calcMinimumReceived({\n amount: Number(swapQuantity),\n slippage,\n });\n }, [swapQuantity, slippage]);\n\n const targetQuantityLoading = swapRevalidating;\n\n return {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n\n amount,\n isNativeToken,\n quantity,\n collateralContributionQuantity,\n maxQuantity,\n indexPrice,\n onQuantityChange: setQuantity,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n fee,\n collateralRatio,\n currentLTV,\n nextLTV,\n ltv_threshold,\n negative_usdc_threshold,\n isConvertThresholdLoading,\n slippage,\n onSlippageChange,\n minimumReceived,\n usdcToken,\n\n needSwap,\n needCrossSwap,\n swapPrice,\n markPrice,\n swapFee,\n warningMessage,\n targetQuantity,\n targetQuantityLoading,\n };\n};\n\nexport type UseDepositFeeReturn = ReturnType<typeof useDepositFee>;\n\nfunction useDepositFee(options: {\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n}) {\n const { nativeToken, depositFee = 0 } = options;\n const { account } = useAccount();\n\n const nativeSymbol = nativeToken?.symbol;\n const tokenInfo = useTokenInfo(nativeSymbol!);\n\n const { data: indexPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const feeProps = useMemo(() => {\n // deposit fee is native token, so decimals is 18\n const dstGasFee = new Decimal(depositFee.toString())\n // todo solana is 9, evm is 18\n .div(\n new Decimal(10).pow(\n account.walletAdapter?.chainNamespace === ChainNamespace.solana\n ? 9\n : 18,\n ),\n )\n .toString();\n\n const feeAmount = new Decimal(dstGasFee).mul(indexPrice || 0).toString();\n\n return {\n dstGasFee,\n feeQty: dstGasFee,\n feeAmount,\n // dp: feeDecimalsOffset(4),\n dp: tokenInfo?.decimals || 8,\n };\n }, [depositFee, indexPrice]);\n\n return { ...feeProps, nativeSymbol };\n}\n\nconst useCollateralValue = (params: {\n tokens: API.TokenInfo[];\n sourceToken?: API.TokenInfo;\n targetToken?: API.TokenInfo;\n qty: string;\n indexPrice: number;\n}) => {\n const { sourceToken, targetToken, indexPrice } = params;\n\n const quantity = Number(params.qty);\n\n const memoizedCollateralRatio = useMemo(() => {\n return collateralRatio({\n baseWeight: targetToken?.base_weight ?? 0,\n discountFactor: targetToken?.discount_factor ?? 0,\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n indexPrice,\n });\n }, [targetToken, quantity, sourceToken?.user_max_qty, indexPrice]);\n\n const collateralContributionQuantity = collateralContribution({\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n collateralRatio: memoizedCollateralRatio.toNumber(),\n indexPrice,\n });\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity,\n token: sourceToken?.symbol,\n });\n\n return {\n collateralRatio: memoizedCollateralRatio.toNumber(),\n collateralContributionQuantity,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n indexPrice,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n },\n );\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n","import { useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport function useNeedSwapAndCross(options: {\n srcToken?: API.TokenInfo;\n dstToken?: API.TokenInfo;\n srcChainId?: number;\n dstChainId?: number;\n}) {\n const { srcToken, dstToken, srcChainId, dstChainId } = options;\n const [needSwap, setNeedSwap] = useState(false);\n const [needCrossSwap, setNeedCrossSwap] = useState(false);\n\n useEffect(() => {\n if (!srcChainId || !dstChainId || !srcToken || !dstToken) return;\n const isCrossChain = srcChainId !== dstChainId;\n\n if (\n (srcToken?.symbol === \"USDC\" && !isCrossChain) ||\n // if srcToken is collateral and srcToken.symbol is the same as dstToken.symbol, it will not need swap\n (srcToken.is_collateral && srcToken.symbol === dstToken?.symbol)\n ) {\n setNeedSwap(false);\n setNeedCrossSwap(false);\n return;\n }\n\n setNeedSwap(srcToken?.symbol !== \"USDC\");\n\n if (isCrossChain) {\n setNeedCrossSwap(true);\n setNeedSwap(true);\n } else {\n setNeedCrossSwap(false);\n }\n }, [srcToken, dstToken, srcChainId, dstChainId]);\n\n return { needSwap, needCrossSwap };\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useConfig, useLocalStorage } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { DST, SwapMode } from \"../types\";\nimport { useSwapEnquiry } from \"./useSwapEnquiry\";\nimport { useSwapFee } from \"./useSwapFee\";\n\ntype SwapDepositOptions = {\n srcToken: API.TokenInfo;\n currentChain?: CurrentChain | null;\n dst: DST;\n quantity: string;\n isNativeToken: boolean;\n depositFee: bigint;\n setQuantity: (quantity: string) => void;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nconst ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY = \"orderly_swap_deposit_slippage\";\n\nexport const useSwapDeposit = (options: SwapDepositOptions) => {\n const {\n srcToken,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n } = options;\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY,\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n srcToken: srcToken?.address,\n dstToken: dst.address,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (srcToken?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: srcToken!.symbol,\n // swap precision\n displayDecimals: srcToken?.precision,\n amount: quantity,\n decimals: srcToken!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const swapFee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: srcToken,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n return {\n cleanTransactionInfo,\n onSwapDeposit,\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n swapRevalidating,\n warningMessage,\n needSwap,\n needCrossSwap,\n slippage,\n onSlippageChange: setSlippage,\n };\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport {\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { Swap, SwapProps } from \"./swap\";\n\nexport const SwapDialog = modal.create<SwapProps>((props) => {\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n const onComplete = (isSuccss: boolean) => {\n resolve(isSuccss);\n hide();\n };\n\n const onCancel = () => {\n reject();\n hide();\n };\n\n const commonProps = {\n title: t(\"transfer.swapDeposit.swapDialog.title\"),\n open: visible,\n onOpenChange,\n classNames: {\n content: \"oui-font-semibold\",\n },\n children: <Swap {...props} onComplete={onComplete} onCancel={onCancel} />,\n };\n\n if (isMobile) {\n return <SimpleSheet {...commonProps} />;\n }\n\n return <SimpleDialog {...commonProps} size=\"md\" />;\n});\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { useCrossSwap } from \"../hooks/useCrossSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const CrossSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain: chainInfo,\n nativeToken,\n depositFee,\n } = props;\n\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const {\n swap: doCrossSwap,\n bridgeStatus,\n message,\n status: swapStatus,\n } = useCrossSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chainInfo?.est_txn_mins,\n received: dst.amount,\n bridgeFee: transaction.fees_from.stargate,\n swapFee: transaction.fees_from.woofi,\n dstGasFee: transaction.dst_infos.gas_fee,\n };\n\n return info;\n }, [transaction, chainInfo?.est_txn_mins, mode, dst]);\n\n useEffect(() => {\n if (bridgeStatus === \"DELIVERED\") {\n setStatus(SwapProcessStatus.Depositing);\n }\n\n if (bridgeStatus === \"FAILED\") {\n setStatus(SwapProcessStatus.BridgeFialed);\n }\n\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [bridgeStatus, swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n setStatus(SwapProcessStatus.Bridging);\n\n return doCrossSwap({\n address: \"\",\n crossChainRouteAddress: chainInfo?.cross_chain_router!,\n src: {\n fromToken: transaction.src_infos.from_token,\n fromAmount: BigInt(transaction.src_infos.from_amount),\n bridgeToken: transaction.src_infos.bridge_token,\n minBridgeAmount: BigInt(transaction.src_infos.min_bridge_amount),\n },\n dst: {\n chainId: transaction.dst_infos.chain_id,\n bridgedToken: transaction.dst_infos.bridged_token,\n toToken: transaction.dst_infos.to_token,\n minToAmount: BigInt(transaction.dst_infos.min_to_amount),\n // @ts-ignore\n orderlyNativeFees: depositFee,\n },\n })\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.BridgeFialed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !message) {\n return;\n }\n return `https://layerzeroscan.com/tx/${message.srcTxHash}`;\n // return `https://layerzeroscan.com/${message.srcChainId}/address/${message.srcUaAddress}/message/${message.dstChainId}/address/${message.dstUaAddress}/nonce/${message.srcUaNonce}`;\n }, [status, message]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Cross}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Environment, createClient } from \"@layerzerolabs/scan-client\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport {\n isNativeTokenChecker,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport enum MessageStatus {\n INITIALIZING = \"WAITTING\",\n INFLIGHT = \"INFLIGHT\",\n CONFIRMING = \"CONFIRMING\",\n DELIVERED = \"DELIVERED\",\n FAILED = \"FAILED\",\n}\n\nexport const useCrossSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n const [layerStatus, setLayerStatus] = useState<MessageStatus>(\n MessageStatus.INITIALIZING,\n );\n\n const ee = useEventEmitter();\n\n const [bridgeMessage, setBridgeMessage] = useState<any | undefined>();\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n const txHashFromBridge = useRef<string | undefined>();\n\n const checkLayerStatusListener = useRef<ReturnType<typeof setTimeout>>();\n\n const account = useAccountInstance();\n\n const config = useConfig();\n const brokerId = config.get(\"brokerId\");\n const networkId = config.get(\"networkId\");\n\n const client = useRef(createClient(networkId as Environment)).current;\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHashFromBridge.current]);\n\n const checkLayerStatus = useCallback((txHash: string) => {\n if (checkLayerStatusListener.current) {\n clearTimeout(checkLayerStatusListener.current);\n }\n\n checkLayerStatusListener.current = setTimeout(async () => {\n try {\n const { messages } = await client.getMessagesBySrcTxHash(txHash);\n\n if (messages.length > 0) {\n const { status } = messages[0];\n\n setLayerStatus(status as MessageStatus);\n\n if (status === MessageStatus.DELIVERED) {\n setBridgeMessage(messages[0]);\n txHashFromBridge.current = messages[0].dstTxHash;\n } else if (status === MessageStatus.FAILED) {\n setBridgeMessage(messages[0]);\n } else {\n checkLayerStatus(txHash);\n }\n } else {\n checkLayerStatus(txHash);\n }\n } catch (e) {\n // setLayerStatus(MessageStatus.FAILED);\n checkLayerStatus(txHash);\n }\n }, 1000);\n }, []);\n\n // swap => src tx hash, cross swap => dst tx hash\n // const checkDeposit\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = async (inputs: {\n address: string;\n crossChainRouteAddress: string;\n src: {\n fromToken: string;\n fromAmount: bigint;\n bridgeToken: string;\n minBridgeAmount: bigint;\n };\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n airdropNativeAmount: bigint;\n };\n }) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (!inputs.crossChainRouteAddress) {\n throw new Error(\"crossChainRouteAddress is undefined\");\n }\n\n const { address, src, dst, crossChainRouteAddress } = inputs;\n if (loading) return;\n start();\n\n try {\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n const result = await account.walletAdapter.sendTransaction(\n crossChainRouteAddress,\n \"crossSwap\",\n {\n from: account.address!,\n to: crossChainRouteAddress,\n data: [account.address, src, dst, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.src.fromToken)\n ? BigInt(inputs.src.fromAmount) + quotoLZFee[0]\n : quotoLZFee[0],\n },\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n stop();\n\n checkLayerStatus(result.hash);\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n console.error(\"crossSwap error\", e);\n stop();\n throw new Error(e.errorCode);\n }\n };\n\n return {\n swap,\n loading,\n bridgeStatus: layerStatus,\n status,\n message: bridgeMessage,\n };\n};\n","export const woofiDexCrossSwapChainRouterAbi = [\n {\n inputs: [],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint8\",\n name: \"version\",\n type: \"uint8\",\n },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"realToToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"realToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnDstChain\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"dstChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnSrcChain\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MAX_BRIDGE_SLIPPAGE\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"addDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokens\",\n outputs: [\n {\n internalType: \"address[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokensLength\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bridgeSlippage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address payable\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.SrcInfos\",\n name: \"srcInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"crossSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForNoSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"stuckToken\",\n type: \"address\",\n },\n ],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_weth\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nonceCounter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"quoteLayerZeroFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"nativeAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"zroAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"removeDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_bridgeSlippage\",\n type: \"uint256\",\n },\n ],\n name: \"setBridgeSlippage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForNoSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForNoSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n ],\n name: \"setNonceCounter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_orderlyFeeToggle\",\n type: \"bool\",\n },\n ],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"setSgChainIdLocal\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"setSgETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"poolId\",\n type: \"uint256\",\n },\n ],\n name: \"setSgPoolId\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n ],\n name: \"setSgRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexCrossChainRouter\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexCrossChainRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexVault\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n ],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgChainIdLocal\",\n outputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"sgETHs\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"sgPoolIds\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"payload\",\n type: \"bytes\",\n },\n ],\n name: \"sgReceive\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"weth\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"woofiDexCrossChainRouters\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"woofiDexVaults\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n];\n\nexport const woofiDexSwapDepositorAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint8\", name: \"version\", type: \"uint8\" },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"toAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexSwap\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"stuckToken\", type: \"address\" }],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bool\", name: \"_orderlyFeeToggle\", type: \"bool\" }],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n { internalType: \"address\", name: \"woofiDexVault\", type: \"address\" },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"fromToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"fromAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"toToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"minToAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexDepositor.Infos\",\n name: \"infos\",\n type: \"tuple\",\n },\n {\n components: [\n { internalType: \"bytes32\", name: \"accountId\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"brokerHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"tokenHash\", type: \"bytes32\" },\n ],\n internalType: \"struct IWOOFiDexDepositor.VaultDeposit\",\n name: \"vaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"woofiDexVaults\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n];\n\nexport const nativeTokenAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\nexport const isNativeTokenChecker = (address: string) =>\n address === nativeTokenAddress;\n\nexport const swapSupportApiUrl = \"https://fi-api.woo.org\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n CheckedCircleFillIcon,\n CloseCircleFillIcon,\n cn,\n Divider,\n Flex,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\nimport { TopRightArrowIcon } from \"../icons\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\n\ntype ProcessStatusProps = {\n status?: SwapProcessStatus;\n mode: SwapMode;\n statusUrl?: string;\n onComplete?: (isSuccss: boolean) => void;\n brokerName?: string;\n};\n\nenum SwapState {\n Pending = \"pending\",\n Failed = \"failed\",\n Success = \"success\",\n}\n\ntype TProcessItem = {\n title: string;\n description: string;\n state?: SwapState;\n};\n\nexport const ProcessStatus: FC<ProcessStatusProps> = (props) => {\n const { status, mode, statusUrl, brokerName } = props;\n const { t } = useTranslation();\n\n const processList = useMemo(() => {\n const bridgeStatus = getBridgeStatus(status!);\n const depositStatus = getDepositStatus(status!);\n const list: TProcessItem[] = [\n {\n title:\n bridgeStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.bridging\")\n : t(\"transfer.swapDeposit.bridge\"),\n description: t(\"transfer.swapDeposit.bridge.description\"),\n state: bridgeStatus,\n },\n {\n title:\n depositStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.depositing\")\n : t(\"transfer.swapDeposit.deposit\"),\n description: t(\"transfer.swapDeposit.deposit.description\", {\n brokerName,\n }),\n state: depositStatus,\n },\n ];\n\n if (mode === SwapMode.Single) {\n return list.slice(1, 2);\n }\n\n return list;\n }, [mode, brokerName, status, t]);\n\n const onOk = () => {\n props.onComplete?.(status === SwapProcessStatus.Done);\n };\n\n const isFailed =\n status === SwapProcessStatus.DepositFailed ||\n status === SwapProcessStatus.BridgeFialed;\n\n const disabled =\n status === SwapProcessStatus.Bridging ||\n status === SwapProcessStatus.Depositing;\n\n const showDashLine = processList.length > 1;\n\n return (\n <div className=\"oui-font-semibold\">\n <Box intensity={600} p={4} r=\"lg\">\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n gapY={4}\n className=\"oui-relative\"\n >\n {processList.map((item) => (\n <ProcessItem {...item} key={item.title} />\n ))}\n {showDashLine && (\n <div\n className={cn(\n \"oui-absolute oui-left-[10px] oui-top-[20px] oui-bottom-[38px]\",\n \"oui-w-[1px] oui-h-[34px]\",\n \"oui-border-r oui-border-dashed oui-border-r-line-16\",\n )}\n />\n )}\n </Flex>\n\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n\n <Flex\n gapX={1}\n justify=\"center\"\n itemAlign=\"center\"\n className={cn(\n statusUrl ? \"oui-text-primary-light\" : \"oui-text-base-contrast-20\",\n statusUrl ? \"oui-cursor-pointer\" : \"oui-cursor-not-allowed\",\n )}\n onClick={() => {\n statusUrl && window.open(statusUrl);\n }}\n >\n <Text size=\"2xs\">{t(\"transfer.swapDeposit.viewStatus\")}</Text>\n <TopRightArrowIcon />\n </Flex>\n </Box>\n\n <Flex\n direction=\"column\"\n justify=\"center\"\n itemAlign=\"center\"\n mt={8}\n gapY={3}\n >\n {isFailed && (\n <Text size=\"xs\" className=\"oui-text-danger-light\">\n {t(\"transfer.swapDeposit.depositFailed\")}\n </Text>\n )}\n\n <Button\n className=\"oui-w-full lg:oui-w-[184px]\"\n disabled={disabled}\n onClick={onOk}\n >\n {t(\"common.ok\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nconst ProcessItem: FC<TProcessItem> = ({ title, description, state }) => {\n return (\n <Flex itemAlign=\"start\" gapX={2} key={title}>\n <Flex width={20} height={20} justify=\"center\">\n <StatusIndicator state={state} />\n </Flex>\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text\n size=\"sm\"\n className={cn(\n state === \"pending\" || state === \"failed\"\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-54\",\n )}\n >\n {title}\n </Text>\n <Text\n size=\"2xs\"\n className={cn(\n state === \"pending\"\n ? \"oui-text-base-contrast-54\"\n : \"oui-text-base-contrast-20\",\n )}\n >\n {description}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst StatusIndicator: FC<{ state?: SwapState }> = ({ state }) => {\n if (state === SwapState.Pending) {\n return <Spinner size=\"sm\" />;\n }\n\n if (state === SwapState.Failed) {\n return (\n <CloseCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-danger-light\"\n />\n );\n }\n\n if (state === SwapState.Success) {\n return (\n <CheckedCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-primary-light\"\n />\n );\n }\n\n return <Box r=\"full\" width={10} height={10} intensity={200}></Box>;\n};\n\nfunction getBridgeStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Bridging) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.BridgeFialed) {\n return SwapState.Failed;\n }\n\n if (\n status === SwapProcessStatus.Done ||\n status === SwapProcessStatus.Depositing\n ) {\n return SwapState.Success;\n }\n}\n\nfunction getDepositStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Depositing) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.DepositFailed) {\n return SwapState.Failed;\n }\n\n if (status === SwapProcessStatus.Done) {\n return SwapState.Success;\n }\n}\n","import { FC, ReactNode } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n Flex,\n Text,\n TokenIcon,\n Icon,\n Divider,\n Button,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { ArrowRightIcon, GasFeeIcon, WoofiIcon } from \"../icons\";\nimport { SwapMode, SymbolInfo } from \"../types\";\n\nexport interface SwapInfo {\n // gasFee: string;\n // tradingFee: string;\n dstGasFee: string;\n swapFee: string;\n bridgeFee: string;\n price: number;\n slippage: number;\n received: string;\n time: number;\n}\n\ntype SwapDetailProps = {\n onConfirm: () => void;\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n info: SwapInfo;\n markPrice: number;\n nativePrice: number;\n nativeToken?: API.TokenInfo;\n viewMode: \"processing\" | \"details\";\n // transactionData: any;\n};\n\nexport const SwapDetail: FC<SwapDetailProps> = (props) => {\n const {\n info,\n mode,\n nativePrice,\n markPrice,\n src,\n dst,\n nativeToken,\n viewMode,\n } = props;\n\n const { t } = useTranslation();\n\n const header = (\n <Flex justify=\"between\">\n <SwapSymbol\n primary={src?.token}\n chainId={src.chain}\n amount={src?.amount}\n dp={src?.displayDecimals}\n symbol={src?.token}\n />\n <ArrowRightIcon className=\"oui-text-primary-light\" />\n <SwapSymbol\n primary={dst?.token}\n component={<WoofiIcon className=\"oui-size-4\" />}\n amount={dst?.amount}\n dp={dst?.displayDecimals}\n symbol={dst?.token}\n reverse\n />\n </Flex>\n );\n\n const divider = (\n <Box my={5}>\n <Divider intensity={12} />\n </Box>\n );\n\n const listData = [\n {\n label: t(\"transfer.deposit.destinationGasFee\"),\n value: (\n <Flex gapX={1}>\n <GasFeeIcon className=\"oui-text-primary-light\" />\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n // swap precision\n dp={feeDecimalsOffset(nativeToken?.precision)}\n >\n {info.dstGasFee!}\n </Text.numeral>\n <Text color=\"primaryLight\">{nativeToken?.symbol}</Text>\n <Text className=\"oui-text-primary-light/60\">\n ($\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n dp={2}\n >\n {new Decimal(info.dstGasFee?.toString())\n .mul(nativePrice || 0)\n .toString()}\n </Text.numeral>\n )\n </Text>\n </Flex>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.swapFee\"),\n value: (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.swapFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.swapFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.bridgeFee\"),\n value: mode === SwapMode.Cross && (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.bridgeFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.bridgeFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.minimumReceived\"),\n value: (\n <>\n <Text.numeral\n dp={dst?.displayDecimals}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n >\n {info.received}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"common.price\"),\n value: (\n <>\n {`1 ${src?.token} = `}\n <Text.numeral dp={3} padding={false}>\n {info.price}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"transfer.slippage\"),\n value: `${info.slippage}%`,\n },\n ];\n\n const listView = (\n <Flex direction=\"column\" itemAlign=\"start\" gapY={3}>\n {listData?.map((item) => {\n if (item.value) {\n return <ListItem {...item} key={item.label} />;\n }\n })}\n </Flex>\n );\n\n const swapButton = (\n <Flex justify=\"center\" mt={8}>\n <Button className=\"oui-w-full lg:oui-w-[184px]\" onClick={props.onConfirm}>\n {t(\"transfer.swapDeposit.confirmSwap\")}\n </Button>\n </Flex>\n );\n\n return (\n <Box intensity={800}>\n {header}\n <SwapTime time={info.time ?? 0} />\n {divider}\n\n {viewMode === \"details\" && (\n <>\n {listView}\n {swapButton}\n </>\n )}\n </Box>\n );\n};\n\ntype ListItemProps = {\n label?: string;\n value?: ReactNode;\n};\n\nconst ListItem: FC<ListItemProps> = (props) => {\n return (\n <Flex gapX={2} justify=\"between\" width=\"100%\">\n <Text size=\"sm\" intensity={54}>\n {props.label}\n </Text>\n <Text size=\"sm\" intensity={98} as=\"div\">\n {props.value}\n </Text>\n </Flex>\n );\n};\n\ntype SwapSymbolProps = {\n primary: string;\n chainId?: number;\n component?: ReactNode;\n amount: string;\n dp?: number;\n symbol: string;\n reverse?: boolean;\n};\n\nconst SwapSymbol: FC<SwapSymbolProps> = (props) => {\n return (\n <Flex gapX={2} direction={props.reverse ? \"rowReverse\" : \"row\"}>\n <Icon.combine\n secondary={{\n chainId: props.chainId,\n component: props.component,\n className: \"oui-w-4 oui-h-4 oui-outline-base-8 oui-rounded-full\",\n }}\n >\n <TokenIcon name={props.primary} size=\"md\" />\n </Icon.combine>\n\n <Flex direction=\"column\" itemAlign={props.reverse ? \"end\" : \"start\"}>\n <Text.numeral intensity={98} size=\"lg\" dp={props.dp}>\n {props.amount}\n </Text.numeral>\n <Text intensity={54} size=\"xs\">\n {props.symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst SwapTime: FC<{ time: number }> = (props) => {\n return (\n <Flex justify=\"center\">\n <Flex\n intensity={600}\n r=\"full\"\n gapX={2}\n justify=\"center\"\n py={1}\n mt={2}\n width={210}\n >\n <Text size=\"sm\" intensity={54}>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.averageSwapTime\"\n values={{ time: props.time }}\n components={[<Text color=\"primaryLight\" key=\"0\" />]}\n />\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const getTokenByTokenList = (tokens: API.TokenInfo[] = []) => {\n const tokenObj = tokens.reduce<Record<string, API.TokenInfo>>((acc, item) => {\n acc[item.symbol!] = item;\n return acc;\n }, {});\n return tokenObj[\"USDC\"] || tokenObj[\"USDbC\"] || tokens[0];\n};\n\nexport const feeDecimalsOffset = (origin?: number): number => {\n return (origin ?? 2) + 3;\n};\n\n// export const priceDecimalsOffset = (origin?: number): number => {\n// return Math.abs((origin ?? 2) - 5);\n// };\n\nexport function checkIsAccountId(accountId: string) {\n const regex = /^0x[a-fA-F0-9]{64}$/;\n return regex.test(accountId);\n}\n\nexport function getTransferErrorMessage(errorCode: number) {\n if (errorCode === 34) {\n return i18n.t(\"transfer.internalTransfer.error.transferInProgress\");\n }\n\n if (errorCode === 17) {\n return i18n.t(\"transfer.internalTransfer.error.withdrawalInProgress\");\n }\n\n if (errorCode === 35) {\n return i18n.t(\"transfer.internalTransfer.error.accountIdNotExist\");\n }\n\n if (errorCode === 37) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSelf\");\n }\n\n if (errorCode === 46) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSubAccount\");\n }\n\n // TODO: when api return 500 status, not throw error code\n // if (errorCode === -1000) {\n // return i18n.t(\"transfer.internalTransfer.error.scopeInsufficient\");\n // }\n\n return i18n.t(\"transfer.internalTransfer.error.default\");\n}\n\nconst depositErrorCodeMap = {\n \"0x6697b232\": \"AccessControlBadConfirmation\",\n \"0xe2517d3f\": \"AccessControlUnauthorizedAccount\",\n \"0xc7ee9ce6\": \"AccountIdInvalid\",\n \"0x9fabe1c1\": \"AddressZero\",\n \"0x4b3815a6\": \"BalanceNotEnough\",\n \"0x59d9b863\": \"BrokerNotAllowed\",\n \"0xf67c6d78\": \"CeffuAddressMismatch\",\n \"0xd969df24\": \"DepositExceedLimit\",\n \"0xa65b249b\": \"EnumerableSetError\",\n \"0x06a0cf4a\": \"InvalidSwapSignature\",\n \"0x1eb00b06\": \"InvalidTokenAddress\",\n \"0xfa7c7537\": \"NativeTokenDepositAmountMismatch\",\n \"0xad674ae6\": \"NotRebalanceEnableToken\",\n \"0x623793c9\": \"NotZeroCodeLength\",\n \"0x833d33e7\": \"OnlyCrossChainManagerCanCall\",\n \"0x3ee5aeb5\": \"ReentrancyGuardReentrantCall\",\n \"0x0b693144\": \"SwapAlreadySubmitted\",\n \"0xa29c4986\": \"TokenNotAllowed\",\n \"0x30773dbb\": \"ZeroCodeLength\",\n \"0x56316e87\": \"ZeroDeposit\",\n \"0x93d3bb4d\": \"ZeroDepositFee\",\n};\n\nexport function getDepositKnownErrorMessage(message: string) {\n if (!message) {\n return \"\";\n }\n\n for (const key of Object.keys(depositErrorCodeMap)) {\n if (message.includes(key)) {\n const value =\n depositErrorCodeMap[key as keyof typeof depositErrorCodeMap];\n return `${value} (${key})`;\n }\n }\n}\n","import { FC } from \"react\";\nimport { Trans } from \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const ViewFAQs: FC = () => {\n return (\n <Flex justify=\"center\" gapX={1} mt={3}>\n <Trans\n i18nKey=\"transfer.swapDeposit.viewFAQs\"\n components={[\n <Text\n size=\"xs\"\n color=\"primaryLight\"\n onClick={() => {\n window.open(\"https://learn.woo.org/woofi/faqs/woofi-pro\");\n }}\n className=\"oui-cursor-pointer\"\n key=\"0\"\n />,\n ]}\n />\n </Flex>\n );\n};\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSwap } from \"../hooks/useSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const SingleSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain,\n nativeToken,\n depositFee,\n } = props;\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const { swap: doSingleSwap, status: swapStatus } = useSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chain?.est_txn_mins,\n received: dst.amount,\n dstGasFee: new Decimal(depositFee!.toString())\n ?.div(new Decimal(10).pow(18))\n ?.toString(),\n swapFee: transaction.fees_from,\n };\n\n return info;\n }, [transaction, chain?.est_txn_mins, mode, dst, depositFee]);\n\n useEffect(() => {\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n if (!chain || !chain.depositor) return Promise.reject(\"No chain data\");\n\n setStatus(SwapProcessStatus.Depositing);\n\n return doSingleSwap(\n chain.depositor,\n {\n fromToken: transaction.infos.from_token,\n fromAmount: transaction.infos.from_amount,\n toToken: transaction.infos.to_token,\n minToAmount: transaction.infos.min_to_amount,\n orderlyNativeFees: depositFee,\n },\n { dst, src },\n )\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.DepositFailed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !tx) {\n return;\n }\n return `${chain?.explorer_base_url}/tx/${tx.hash}`;\n }, [status, tx, chain]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Single}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { isNativeTokenChecker, woofiDexSwapDepositorAbi } from \"../constants\";\n\n/**\n * 1. fee precision swap_support.woofi_dex_precision+3,round off\n * 2. price precision = abs(woofi_dex_precision - 5),cut off\n * 3. orderly deposit fee = $0\n * 4. deposit pop-ups: don't show token when fee is 0.\n * e.g. dst gas fee = 0 ETH, swap fee = 0.04 USDC, it will show $0.04 ( 0.04 USDC )\n */\nexport const useSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n const brokerId = useConfig(\"brokerId\");\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n\n const txHash = useRef<string | undefined>();\n const ee = useEventEmitter();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHash.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHash.current]);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = useCallback(\n async (\n woofiDexDepositorAdress: string,\n inputs: {\n fromToken: string;\n fromAmount: string;\n toToken: string;\n minToAmount: string;\n orderlyNativeFees: bigint;\n },\n config: { dst: any; src: any },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (loading) return;\n start();\n\n const txPayload = {\n from: account.address,\n to: woofiDexDepositorAdress,\n data: [account.address, inputs, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.fromToken)\n ? BigInt(inputs.fromAmount) + inputs.orderlyNativeFees\n : inputs.orderlyNativeFees,\n };\n\n try {\n const result = await account.walletAdapter.sendTransaction(\n woofiDexDepositorAdress,\n \"swap\",\n txPayload,\n {\n abi: woofiDexSwapDepositorAbi,\n },\n );\n\n stop();\n\n txHash.current = result.hash;\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n throw new Error(e.errorCode);\n }\n },\n [loading, account],\n );\n\n return {\n swap,\n loading,\n status,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { SwapMode, SymbolInfo } from \"../types\";\nimport { CrossSwap } from \"./crossSwap\";\nimport { SingleSwap } from \"./singleSwap\";\n\nexport interface SwapProps {\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n chain?: API.NetworkInfos;\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n transactionData: any;\n slippage: number;\n brokerName?: string;\n onComplete?: (isSuccss: boolean) => void;\n onCancel?: () => void;\n onFail?: () => void;\n}\n\nexport const Swap: FC<SwapProps> = (props) => {\n const { mode } = props;\n\n if (mode === SwapMode.Cross) {\n return <CrossSwap {...props} />;\n }\n\n return <SingleSwap {...props} />;\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useBoolean, useDebouncedCallback } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DST, MarkPrices } from \"../types\";\nimport { useWooCrossSwapQuery } from \"./useCrossSwapQuery\";\nimport { useWooSwapQuery } from \"./useSwapQuery\";\n\nexport type TransactionInfo = {\n price: number;\n markPrices: MarkPrices;\n dstGasFee?: string;\n swapFee?: string;\n bridgeFee?: string;\n fee: string;\n};\n\ntype useSwapEnquiryProps = {\n quantity: string;\n dst: DST;\n queryParams: any;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nexport function useSwapEnquiry(props: useSwapEnquiryProps) {\n const { quantity, dst, queryParams, needSwap, needCrossSwap } = props;\n const { t } = useTranslation();\n const { query: wooSwapQuery } = useWooSwapQuery();\n const { query: wooCrossSwapQuery } = useWooCrossSwapQuery();\n\n const queryParamsRef = useRef(queryParams);\n queryParamsRef.current = queryParams;\n\n const [amount, setAmount] = useState<string>(\"\");\n const [warningMessage, setWarningMessage] = useState<string>(\"\");\n const [querying, { setTrue: queryStart, setFalse: queryStop }] =\n useBoolean(false);\n\n const [transactionInfo, setTransactionInfo] = useState<TransactionInfo>({\n price: 0,\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n fee: \"\",\n // dstGasFee: \"\",\n // swapFee: \"\",\n // bridgeFee: \"\",\n });\n\n const enquiry = useCallback(() => {\n if (needCrossSwap) {\n return wooCrossSwapQuery(queryParamsRef.current);\n }\n\n if (needSwap) {\n return wooSwapQuery(queryParamsRef.current);\n }\n\n return Promise.reject(\"no need to enquiry\");\n }, [needSwap, needCrossSwap]);\n\n const enquirySuccessHandle = (res: any) => {\n if (res.mark_prices) {\n const dstGasFee = needCrossSwap ? res.dst_infos.gas_fee : \"0\";\n const swapFee = needCrossSwap ? res.fees_from.woofi : res.fees_from;\n const bridgeFee = needCrossSwap ? res.fees_from.stargate : undefined;\n const fee = needCrossSwap ? res.fees_from.total : res.fees_from;\n\n setTransactionInfo({\n price: res.price,\n markPrices: res.mark_prices,\n dstGasFee,\n swapFee,\n bridgeFee,\n fee: fee,\n });\n }\n\n // set amount\n if (res.route_infos) {\n const amountValue = needCrossSwap\n ? res.route_infos.dst.amounts[1]\n : res.route_infos.amounts[1];\n\n setAmount(\n new Decimal(amountValue).div(Math.pow(10, dst.decimals!)).toString(),\n );\n }\n\n setWarningMessage(\"\");\n return res;\n };\n\n const cleanTransactionInfo = (data?: any) => {\n setTransactionInfo({\n fee: \"0\",\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n price: 0,\n swapFee: \"0\",\n bridgeFee: \"0\",\n dstGasFee: \"0\",\n ...data,\n });\n\n setAmount(\"\");\n };\n\n const enquiryErrorHandle = (error: Error) => {\n if (error.message === \"contract call failed\") {\n // Not enough liquidity on the cross-chain bridge.\n setWarningMessage(t(\"transfer.swapDeposit.notEnoughLiquidity\"));\n // clean previous data\n cleanTransactionInfo();\n } else {\n setWarningMessage(\"\");\n if (error?.message) {\n toast.error(error.message);\n }\n }\n };\n\n const debouncedEnquiry = useDebouncedCallback(() => {\n queryStart();\n return enquiry()\n .then(enquirySuccessHandle, enquiryErrorHandle)\n .finally(() => {\n queryStop();\n });\n }, 300);\n\n useEffect(() => {\n // if not need swap and cross swap\n if (!needSwap && !needCrossSwap) {\n cleanTransactionInfo({\n price: 1,\n });\n setAmount(quantity);\n return;\n }\n\n const qty = Number(quantity);\n\n if (isNaN(qty) || qty <= 0) {\n cleanTransactionInfo();\n return;\n }\n\n debouncedEnquiry();\n }, [needSwap, needCrossSwap, quantity]);\n\n return {\n enquiry,\n querying,\n warningMessage,\n transactionInfo,\n amount,\n cleanTransactionInfo,\n };\n}\n","import { useCallback } from \"react\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n} from \"@orderly.network/hooks\";\nimport {\n swapSupportApiUrl,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport const useWooCrossSwapQuery = () => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const brokerId = useConfig(\"brokerId\");\n\n const account = useAccountInstance();\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const queryDestinationFee = useCallback(\n async (\n crossChainRouteAddress: string,\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n orderlyNativeFees: bigint;\n },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is not ready\");\n }\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n return utils.formatByUnits(quotoLZFee[0]);\n },\n [],\n );\n\n /// swap enquiry\n const query = useCallback(\n (inputs: {\n srcNetwork: string;\n srcToken: string;\n amount: bigint;\n slippage: number;\n dstToken: string;\n crossChainRouteAddress: string;\n }) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n // src_network: inputs.srcNetwork,\n src_network: inputs.srcNetwork,\n dst_network: \"arbitrum\",\n src_token: inputs.srcToken,\n dst_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n src_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${swapSupportApiUrl}/woofi_dex/cross_chain_swap?${queryString}`,\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .then((swapInfo) => {\n return queryDestinationFee(inputs.crossChainRouteAddress, {\n chainId: swapInfo.dst_infos.chain_id,\n bridgedToken: swapInfo.dst_infos.bridged_token,\n toToken: swapInfo.dst_infos.to_token,\n minToAmount: BigInt(swapInfo.dst_infos.min_to_amount),\n orderlyNativeFees: 0n,\n })\n .then((data) => {\n return {\n ...swapInfo,\n dst_infos: {\n ...swapInfo.dst_infos,\n gas_fee: data,\n },\n };\n })\n .catch((e) => {\n console.error(\"queryDestinationFee error\", e);\n });\n })\n .finally(() => stop());\n },\n\n [loading, account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useCallback } from \"react\";\nimport { useAccountInstance, useBoolean } from \"@orderly.network/hooks\";\nimport { swapSupportApiUrl } from \"../constants\";\n\nexport const useWooSwapQuery = () => {\n const account = useAccountInstance();\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n /// swap 询价\n const query = useCallback(\n (inputs: any) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n network: inputs.srcNetwork,\n // network: \"arbitrum\",\n from_token: inputs.srcToken,\n to_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n from_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(`${swapSupportApiUrl}/woofi_dex/swap?${queryString}`)\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .finally(() => stop());\n },\n [account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useMemo } from \"react\";\nimport { useIndexPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, toNonExponential } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { TransactionInfo } from \"./useSwapEnquiry\";\n\nexport type UseSwapFee = ReturnType<typeof useSwapFee>;\n\ntype FeeQty = {\n value: string | number;\n dp: number;\n symbol?: string;\n};\n\nexport function useSwapFee(options: {\n nativeToken?: API.TokenInfo;\n isNativeToken?: boolean;\n src?: API.TokenInfo;\n depositFee?: bigint;\n transactionInfo: TransactionInfo;\n needSwap: boolean;\n needCrossSwap: boolean;\n}) {\n const {\n nativeToken,\n isNativeToken,\n src,\n depositFee = 0,\n transactionInfo,\n needSwap,\n needCrossSwap,\n } = options;\n\n const nativeSymbol = nativeToken?.symbol;\n const srcSymbol = src?.symbol;\n\n const {\n fee = \"0\",\n swapFee = \"0\",\n bridgeFee = \"0\",\n dstGasFee: destinationGasFee = \"0\",\n markPrices,\n } = transactionInfo;\n\n const { from_token: markPrice, native_token: nativeMarkPrice } = markPrices;\n\n const { data: symbolPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const { t } = useTranslation();\n\n const feeInfo = useMemo(() => {\n let feeAmount = \"\";\n let feeQtys: FeeQty[] = [];\n\n const nativeDp = feeDecimalsOffset(\n // swap precision\n nativeToken?.precision,\n );\n\n // swap precision\n const srcDp = feeDecimalsOffset(src?.precision);\n\n const dstGasFee = needCrossSwap\n ? destinationGasFee\n : new Decimal(depositFee.toString())\n .div(new Decimal(10).pow(18))\n .toString();\n\n if (!needSwap && !needCrossSwap) {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee).mul(symbolPrice || 0).toString();\n }\n\n if (needSwap || needCrossSwap) {\n // if native token, Destination gas fee、fee (Swap fee + Bridge fee ) will use a same symbol unit\n if (isNativeToken) {\n const totalFeeQty = new Decimal(dstGasFee).plus(fee);\n\n feeQtys = [\n {\n value: totalFeeQty.toString(),\n dp: nativeDp,\n },\n ];\n\n feeAmount = totalFeeQty.mul(nativeMarkPrice ?? 1).toString();\n } else {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n value: fee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee)\n .mul(nativeMarkPrice ?? 1)\n .plus(new Decimal(fee).mul(markPrice ?? 1))\n .toString();\n }\n }\n\n feeQtys = feeQtys.filter(\n (item) => !!item.value && Number(item.value) !== 0,\n );\n\n const feeDetails = [\n {\n title: t(\"transfer.deposit.destinationGasFee\"),\n description: t(\"transfer.deposit.destinationGasFee.description\"),\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.swapFee\"),\n description: t(\"transfer.swapDeposit.swapFee.description\"),\n value: swapFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.bridgeFee\"),\n description: t(\"transfer.swapDeposit.bridgeFee.description\"),\n value: bridgeFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ]\n .filter(\n // alway show Destination gas fee\n (item, index) =>\n index === 0 || (!!item.value && Number(item.value) !== 0),\n )\n .map((item) => {\n const value = new Decimal(item.value || 0).todp(item.dp).toNumber();\n return {\n ...item,\n value: toNonExponential(value),\n };\n });\n\n return {\n feeAmount,\n feeQtys,\n feeDetails,\n };\n }, [\n depositFee,\n symbolPrice,\n nativeSymbol,\n srcSymbol,\n transactionInfo,\n needSwap,\n needCrossSwap,\n ]);\n\n return {\n ...feeInfo,\n nativeSymbol,\n };\n}\n","import { useMemo } from \"react\";\nimport { DepositAction } from \"../../../types\";\n\ntype Options = {\n isNativeToken: boolean;\n allowance: string;\n quantity: string;\n maxQuantity: string;\n};\n\nexport function useActionType(options: Options) {\n const { isNativeToken, allowance, quantity, maxQuantity } = options;\n\n const actionType = useMemo(() => {\n const allowanceNum = isNativeToken ? Number.MAX_VALUE : Number(allowance);\n\n if (allowanceNum <= 0) {\n return DepositAction.ApproveAndDeposit;\n }\n\n const qty = Number(quantity);\n const maxQty = Number(maxQuantity);\n\n if (allowanceNum < qty && qty <= maxQty) {\n // return DepositAction.Increase;\n return DepositAction.ApproveAndDeposit;\n }\n\n return DepositAction.Deposit;\n }, [isNativeToken, allowance, quantity, maxQuantity]);\n\n return actionType;\n}\n","import { useCallback, useMemo } from \"react\";\nimport {\n Chain,\n ConnectedChain,\n useChains,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\n\nexport type CurrentChain = Pick<ConnectedChain, \"namespace\"> & {\n id: number;\n info?: Chain;\n};\n\nexport function useChainSelect() {\n const { t } = useTranslation();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { connectedChain, settingChain, setChain } = useWalletConnector();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const currentChain = useMemo(() => {\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) return null;\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (!connectedChain) {\n return;\n }\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return setChain({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n if (error && error.message) {\n toast.error(\n `${t(\"connector.switchChain.failed\")}: ${error.message}`,\n );\n }\n });\n },\n [currentChain, setChain, findByChainId],\n );\n\n return {\n chains,\n currentChain,\n settingChain,\n onChainChange,\n };\n}\n","import { useCallback, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { getDepositKnownErrorMessage } from \"../../../utils\";\n\ntype Options = {\n quantity: string;\n allowance?: string;\n approve: (quantity?: string) => Promise<any>;\n deposit: () => Promise<any>;\n onSuccess?: () => void;\n customDeposit?: () => Promise<any>;\n enableCustomDeposit?: boolean;\n};\n\nexport function useDepositAction(options: Options) {\n const {\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit,\n customDeposit,\n onSuccess,\n } = options;\n const [submitting, setSubmitting] = useState(false);\n const ee = useEventEmitter();\n const { t } = useTranslation();\n\n const doDeposit = useCallback(async () => {\n try {\n await deposit();\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n } catch (err: any) {\n console.error(\"deposit error\", err);\n\n const knownErrorMessage = getDepositKnownErrorMessage(err.message);\n if (knownErrorMessage) {\n toast.error(\n <div>\n {t(\"common.somethingWentWrong\")}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {t(\"common.details\")}: {knownErrorMessage}\n </div>\n </div>,\n );\n } else {\n toast.error(err.message || t(\"common.somethingWentWrong\"));\n }\n }\n }, [deposit, onSuccess, t]);\n\n const onDeposit = useCallback(async () => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting) return;\n\n setSubmitting(true);\n\n const execDeposit = enableCustomDeposit ? customDeposit : doDeposit;\n\n await execDeposit?.()?.finally(() => {\n setSubmitting(false);\n });\n }, [quantity, submitting, doDeposit, enableCustomDeposit, customDeposit, t]);\n\n const onApprove = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await approve(quantity);\n toast.success(t(\"transfer.deposit.approve.success\"));\n } catch (err: any) {\n console.error(\"approve error\", err);\n toast.error(\n err.message || err?.errorCode || t(\"transfer.deposit.approve.failed\"),\n );\n throw err;\n } finally {\n setSubmitting(false);\n }\n }, [approve, submitting, quantity, allowance, t]);\n\n const onApproveAndDeposit = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await onApprove();\n await onDeposit();\n } catch (err) {\n console.error(\"approve and deposit error\", err);\n } finally {\n setSubmitting(false);\n }\n }, [submitting, onApprove, onDeposit]);\n\n return { submitting, onApprove, onDeposit, onApproveAndDeposit };\n}\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../../types\";\n\ntype Options = { quantity: string; maxQuantity: string | number };\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { NetworkId, type API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport type { CurrentChain } from \"./useChainSelect\";\n\nexport const useToken = (\n currentChain?: CurrentChain | null,\n filter: (token: API.TokenInfo) => boolean = () => true,\n) => {\n const [sourceToken, setSourceToken] = useState<API.TokenInfo>();\n const [targetToken, setTargetToken] = useState<API.TokenInfo>();\n\n const [sourceTokens, setSourceTokens] = useState<API.TokenInfo[]>([]);\n const [targetTokens, setTargetTokens] = useState<API.TokenInfo[]>([]);\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n // when chain changed and chain data ready then call this function init tokens\n const onChainInited = useCallback((chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n // const tokens = chainInfo.token_infos.filter((i) => i.is_collateral);\n // all tokens available in the chain, include swap tokens\n const tokens = chainInfo.token_infos?.filter(filter);\n\n if (tokens?.length) {\n // sort tokens, USDC should be the first\n tokens.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n }\n\n const usdcToken = getTokenByTokenList(tokens);\n if (!usdcToken) {\n return;\n }\n setSourceToken(usdcToken);\n setTargetToken(usdcToken);\n\n setSourceTokens(tokens);\n setTargetTokens([usdcToken]);\n }\n }, []);\n\n useEffect(() => {\n onChainInited(currentChain?.info);\n // if settingChain is true, the currentChain will change, so use currentChain.id\n // TODO: confirm currentChain data is correct\n }, [currentChain, onChainInited]);\n\n useEffect(() => {\n if (!sourceToken || !sourceTokens.length) {\n return;\n }\n\n // USDC => USDC\n if (sourceToken.symbol === \"USDC\") {\n setTargetToken(sourceToken);\n setTargetTokens([sourceToken]);\n return;\n }\n\n const usdc = sourceTokens.find((t) => t.symbol === \"USDC\")!;\n\n // if is_collateral\n if (sourceToken.is_collateral) {\n // mainnet and swap_enable: [token] => [USDC,token]\n if (networkId === \"mainnet\" && sourceToken.swap_enable) {\n setTargetToken(sourceToken);\n setTargetTokens([sourceToken, usdc]);\n } else {\n // testnet: [token] => [token]\n setTargetToken(sourceToken);\n setTargetTokens([sourceToken]);\n }\n return;\n }\n\n // if swap token: [token] => [USDC]\n setTargetToken(usdc);\n setTargetTokens([usdc]);\n }, [networkId, sourceToken, sourceTokens]);\n\n return {\n sourceToken,\n targetToken,\n\n sourceTokens,\n targetTokens,\n\n onSourceTokenChange: setSourceToken,\n onTargetTokenChange: setTargetToken,\n };\n};\n","import { FC } from \"react\";\nimport {\n useDepositFormScript,\n DepositFormScriptOptions,\n} from \"./depositForm.script\";\nimport { DepositForm } from \"./depositForm.ui\";\n\nexport type DepositFormWidgetProps = DepositFormScriptOptions;\n\nexport const DepositFormWidget: FC<DepositFormWidgetProps> = (props) => {\n const state = useDepositFormScript(props);\n return <DepositForm {...state} />;\n};\n","import React from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n textVariants,\n Tabs,\n TabPanel,\n WalletIcon,\n} from \"@orderly.network/ui\";\nimport { WithdrawTo } from \"../../types\";\nimport { LtvWidget } from \"../LTV\";\nimport { TextAreaInput } from \"../accountIdInput\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { WithdrawAction } from \"../withdrawAction\";\nimport { WithdrawWarningMessage } from \"../withdrawWarningMessage\";\nimport { WithdrawFormScriptReturn } from \"./withdrawForm.script\";\n\nexport type WithdrawFormProps = WithdrawFormScriptReturn;\n\nexport const WithdrawForm: React.FC<WithdrawFormProps> = (props) => {\n const {\n address,\n loading,\n disabled,\n quantity,\n onQuantityChange,\n sourceToken,\n amount,\n maxQuantity,\n tokenChains,\n currentChain,\n fee,\n settingChain,\n chainVaultBalance,\n crossChainTrans,\n checkIsBridgeless,\n withdrawTo,\n sourceTokens,\n onSourceTokenChange,\n vaultBalanceList,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n } = props;\n\n const { t } = useTranslation();\n\n const internalWithdrawPanel = (\n <TabPanel\n title={t(\"transfer.withdraw.otherAccount\", {\n brokerName: props.brokerName,\n })}\n value={WithdrawTo.Account}\n >\n <TextAreaInput\n label={t(\"common.accountId\")}\n value={props.toAccountId}\n onChange={props.setToAccountId}\n status={props.toAccountIdInputStatus}\n hintMessage={props.toAccountIdHintMessage}\n />\n <Box my={2}>\n <Text size=\"xs\" intensity={54}>\n {t(\"transfer.withdraw.accountId.tips\")}\n </Text>\n </Box>\n </TabPanel>\n );\n\n return (\n <Box\n id=\"oui-withdraw-form\"\n className={textVariants({ weight: \"semibold\" })}\n >\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={sourceToken}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n status={props.inputStatus}\n hintMessage={props.hintMessage}\n vaultBalanceList={vaultBalanceList}\n testId=\"oui-testid-withdraw-dialog-quantity-input\"\n displayType=\"vaultBalance\"\n />\n </Box>\n <AvailableQuantity\n token={sourceToken}\n amount={amount}\n maxQuantity={maxQuantity.toString()}\n loading={props.balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={props.unsettledPnL}\n hasPositions={props.hasPositions}\n onSettlePnl={props.onSettlePnl}\n tooltipContent={t(\"settle.unsettled.tooltip\")}\n dialogContent={<Trans i18nKey=\"settle.settlePnl.description\" />}\n />\n </Box>\n <ExchangeDivider />\n <Tabs\n value={withdrawTo}\n onValueChange={props.setWithdrawTo as (tab: string) => void}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-3\",\n }}\n >\n <TabPanel\n title={t(\"transfer.web3Wallet.my\")}\n icon={<WalletIcon size={\"xs\"} name={props.walletName ?? \"\"} />}\n value={WithdrawTo.Wallet}\n >\n <ChainSelect\n chains={tokenChains}\n value={currentChain!}\n onValueChange={props.onChainChange}\n wrongNetwork={props.wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n token={sourceToken}\n value={props.showQty}\n readOnly\n />\n </TabPanel>\n {internalWithdrawPanel}\n </Tabs>\n <Box mt={2}>\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={props.currentLTV}\n nextLTV={props.nextLTV}\n />\n </Box>\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <Text size=\"xs\" intensity={36}>\n {t(\"common.fee\")}\n {withdrawTo === WithdrawTo.Wallet ? \" ≈ \" : \" = \"}\n <Text size=\"xs\" intensity={80}>\n {fee}\n </Text>\n </Text>\n </Flex>\n </Box>\n <WithdrawWarningMessage\n checkIsBridgeless={checkIsBridgeless}\n chainVaultBalance={chainVaultBalance as number}\n currentChain={currentChain}\n crossChainTrans={crossChainTrans}\n tokenName={sourceToken?.symbol as string}\n qtyGreaterThanVault={qtyGreaterThanVault}\n qtyGreaterThanMaxAmount={qtyGreaterThanMaxAmount}\n message={props.warningMessage}\n />\n <Flex justify=\"center\">\n <WithdrawAction\n checkIsBridgeless={checkIsBridgeless}\n networkId={props.networkId}\n disabled={disabled}\n loading={loading}\n onWithdraw={props.onWithdraw}\n crossChainWithdraw={props.crossChainWithdraw}\n currentChain={currentChain}\n address={address}\n quantity={quantity}\n fee={fee}\n withdrawTo={withdrawTo}\n onTransfer={props.onTransfer}\n />\n </Flex>\n </Box>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport { InputStatus } from \"../../types\";\n\nexport type TextAreaInputProps = {\n value: string;\n onChange: (value: string) => void;\n status?: InputStatus;\n hintMessage?: string;\n placeholder?: string;\n className?: string;\n label: string;\n};\n\nexport const TextAreaInput = (props: TextAreaInputProps) => {\n const { value, onChange, status, hintMessage, placeholder, label } = props;\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e.target.value);\n\n // auto adjust height\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n };\n\n useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [value]);\n\n const prefix = (\n <div className=\"oui-absolute oui-left-3 oui-top-0.5 oui-z-[1]\">\n <Text size=\"2xs\" intensity={36}>\n {label}\n </Text>\n </div>\n );\n\n const message = (\n <Flex mt={1} gapX={1} px={1}>\n <Box\n width={4}\n height={4}\n r=\"full\"\n className={cn(\n status === \"error\" && \"oui-bg-danger-light\",\n status === \"warning\" && \"oui-bg-warning-light\",\n )}\n ></Box>\n <Text\n size=\"2xs\"\n className={cn(\n status === \"error\" && \"oui-text-danger-light\",\n status === \"warning\" && \"oui-text-warning-light\",\n )}\n >\n {hintMessage}\n </Text>\n </Flex>\n );\n return (\n <div className=\"oui-relative\">\n {prefix}\n <textarea\n ref={textareaRef}\n placeholder={placeholder}\n className={cn(\n // hide resize height control and scrollbar\n \"oui-resize-none oui-overflow-y-hidden\",\n \"oui-relative oui-min-h-[54px] oui-px-3 oui-pb-2 oui-pt-5\",\n \"oui-w-full oui-bg-base-5 oui-text-sm oui-text-base-contrast\",\n \"oui-rounded-lg oui-outline-none\",\n \"oui-border oui-border-line focus:oui-border-primary-light\",\n status === \"error\" &&\n \"oui-border-danger-light focus-within:oui-border-danger-light focus:oui-border-danger-light\",\n status === \"warning\" &&\n \"oui-border-warning-light focus-within:oui-border-warning-light focus:oui-border-warning-light\",\n props.className,\n )}\n rows={1}\n value={value}\n onChange={handleChange}\n />\n {hintMessage && message}\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { RefreshIcon } from \"../../icons\";\n\ntype UnsettlePnlInfoProps = {\n hasPositions: boolean;\n unsettledPnl?: number;\n onSettlePnl: () => Promise<any>;\n tooltipContent?: ReactNode;\n dialogContent?: ReactNode;\n};\n\nexport const UnsettlePnlInfo = (props: UnsettlePnlInfoProps) => {\n const {\n hasPositions,\n unsettledPnl,\n onSettlePnl,\n tooltipContent,\n dialogContent,\n } = props;\n const { t } = useTranslation();\n\n if (unsettledPnl === 0 && !hasPositions) {\n return <></>;\n }\n\n const settlePnlDialog = () => {\n modal.confirm({\n title: t(\"settle.settlePnl\"),\n content: dialogContent,\n onOk: () => {\n return onSettlePnl();\n },\n });\n };\n\n return (\n <Flex justify=\"between\" className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <Tooltip\n className=\"oui-max-w-[274px] oui-font-semibold\"\n content={tooltipContent as any}\n >\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <ExclamationFillIcon\n size={14}\n className=\"oui-text-warning-darken\"\n />\n <Text className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\">\n {`${t(\"settle.unsettled\")}:`}\n </Text>\n </Flex>\n </Tooltip>\n <Text.numeral\n showIdentifier\n coloring\n weight=\"semibold\"\n dp={6}\n data-testid=\"oui-testid-withdraw-dialog-unsettledPnl-value\"\n >\n {unsettledPnl}\n </Text.numeral>\n <Text>USDC</Text>\n </Flex>\n <Flex itemAlign=\"center\" gap={1} className=\"oui-cursor-pointer\">\n <RefreshIcon className=\"oui-text-primary\" />\n <Text\n data-testid=\"oui-testid-withdraw-dialog-settle-text\"\n size=\"2xs\"\n color=\"primary\"\n className=\" oui-select-none\"\n onClick={settlePnlDialog}\n >\n {t(\"common.settle\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, modal } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { WithdrawTo } from \"../../types\";\nimport { CrossWithdrawConfirm } from \"../crossWithdrawConfirm\";\nimport SwitchChainButton from \"./SwitchChainButton\";\n\ninterface IProps {\n disabled?: boolean;\n loading?: boolean;\n onWithdraw: () => Promise<void>;\n networkId?: NetworkId;\n crossChainWithdraw: boolean;\n address?: string;\n currentChain?: any;\n quantity: string;\n fee: number;\n checkIsBridgeless: boolean;\n withdrawTo: WithdrawTo;\n onTransfer: () => void;\n}\n\nexport const WithdrawAction = (props: IProps) => {\n const {\n disabled,\n loading,\n onWithdraw,\n networkId,\n crossChainWithdraw,\n address,\n currentChain,\n quantity,\n fee,\n checkIsBridgeless,\n onTransfer,\n } = props;\n const { t } = useTranslation();\n\n const amount = useMemo(() => {\n if (!quantity) {\n return 0;\n }\n return new Decimal(quantity).minus(fee ?? 0).toNumber();\n }, [quantity, fee]);\n\n const preWithdraw = () => {\n if (crossChainWithdraw) {\n modal.confirm({\n title: t(\"transfer.withdraw.crossChain.confirmWithdraw\"),\n content: (\n <CrossWithdrawConfirm\n address={address!}\n amount={amount}\n currentChain={currentChain}\n />\n ),\n classNames: {\n content: \"oui-font-semibold\",\n body: \"!oui-pb-0\",\n footer: \"!oui-pt-0\",\n },\n\n onOk: async () => {\n onWithdraw();\n },\n });\n return;\n }\n onWithdraw();\n };\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n const renderButton = () => {\n if (props.withdrawTo === WithdrawTo.Account) {\n return (\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={onTransfer}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n\n if (checkIsBridgeless) {\n return (\n <Button\n data-testid=\"oui-testid-withdraw-dialog-withdraw-btn\"\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={preWithdraw}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n return <SwitchChainButton networkId={networkId} size={buttonSize} />;\n };\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n bridgeLessOnly\n buttonProps={{ fullWidth: true, size: buttonSize }}\n >\n {renderButton()}\n </AuthGuard>\n </Box>\n );\n};\n","import { Box, ChainIcon, Flex, Text } from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n currentChain: any;\n amount: number;\n address: string;\n}\n\nexport const CrossWithdrawConfirm = ({\n address,\n amount,\n currentChain,\n}: IProps) => {\n const { t } = useTranslation();\n\n const networkName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return undefined;\n }, [currentChain]);\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"start\"\n className=\"oui-gap-1 lg:oui-gap-3\"\n >\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n mb={5}\n className=\"oui-gap-3 lg:oui-gap-4\"\n >\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientAddress\")}\n </Text>\n <Text size=\"sm\" intensity={98} className=\"oui-break-all\">\n {address}\n </Text>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientNetwork\")}\n </Text>\n <Flex gap={1}>\n <ChainIcon\n className=\"oui-h-[18px] oui-w-[18px]\"\n size={\"sm\"}\n chainId={currentChain.id}\n />\n\n <Text size=\"sm\" intensity={98}>\n {networkName}\n </Text>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"transfer.withdraw.crossChain.withdrawAmount\")} (USDC)`}\n </Text>\n <Text.numeral size=\"sm\" intensity={98} dp={2}>\n {amount}\n </Text.numeral>\n </Flex>\n </Flex>\n <Flex\n justify=\"center\"\n className=\"oui-text-warning-darken oui-text-2xs lg:oui-text-xs oui-text-center\"\n mb={3}\n >\n {t(\"transfer.withdraw.crossChain.warning\")}\n </Flex>\n </Flex>\n );\n};\n","import { Button, ButtonProps, Flex, modal, toast } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n networkId?: NetworkId;\n size: ButtonProps[\"size\"];\n}\n\nexport default function SwitchChainButton(props: IProps) {\n const { t } = useTranslation();\n\n const switchChain = () => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorDialogId, {\n networkId: props.networkId,\n bridgeLessOnly: true,\n })\n .then(\n (r) => {\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n return (\n <Flex direction={\"column\"}>\n <Button\n color=\"warning\"\n size={props.size}\n fullWidth\n onClick={() => {\n switchChain();\n }}\n >\n {t(\"connector.switchNetwork\")}\n </Button>\n </Flex>\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Flex } from \"@orderly.network/ui\";\n\ninterface WarningMessageProps {\n chainVaultBalance: number;\n currentChain: any;\n crossChainTrans: boolean;\n checkIsBridgeless: boolean;\n tokenName: string;\n qtyGreaterThanMaxAmount: boolean;\n qtyGreaterThanVault: boolean;\n message?: string;\n}\n\nexport const WithdrawWarningMessage: React.FC<WarningMessageProps> = (\n props,\n) => {\n const {\n chainVaultBalance,\n currentChain,\n crossChainTrans,\n tokenName,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n } = props;\n const { t } = useTranslation();\n const { state } = useAccount();\n\n const chainName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return undefined;\n }, [currentChain]);\n\n const renderContent = () => {\n if (state.status === AccountStatusEnum.NotConnected) {\n return null;\n }\n if (crossChainTrans) {\n return t(\"transfer.withdraw.crossChain.process\");\n }\n if (qtyGreaterThanMaxAmount) {\n return t(\"transfer.insufficientBalance\");\n }\n if (qtyGreaterThanVault) {\n return t(\"transfer.withdraw.vaultWarning\", {\n tokenName: tokenName,\n chainName: chainName,\n balance: chainVaultBalance,\n });\n }\n\n return props.message;\n };\n\n const content = renderContent();\n\n if (!content) {\n return null;\n }\n\n return (\n <Flex\n my={4}\n className=\"oui-justify-center oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useChains,\n useConfig,\n useEventEmitter,\n useLocalStorage,\n useMemoizedFn,\n useQuery,\n useWalletConnector,\n useWalletTopic,\n useWithdraw,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n NetworkId,\n} from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport {\n Decimal,\n int2hex,\n praseChainIdToNumber,\n toNonExponential,\n} from \"@orderly.network/utils\";\nimport { InputStatus, WithdrawTo } from \"../../types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useWithdrawAccountId } from \"./hooks/useWithdrawAccountId\";\nimport { useWithdrawFee } from \"./hooks/useWithdrawFee\";\nimport { useWithdrawLTV } from \"./hooks/useWithdrawLTV\";\nimport { useWithdrawToken } from \"./hooks/useWithdrawToken\";\n\nexport type WithdrawFormScriptReturn = ReturnType<typeof useWithdrawFormScript>;\n\nconst markPrice = 1;\n\nexport type WithdrawFormScriptOptions = {\n close?: () => void;\n};\n\nexport const useWithdrawFormScript = (options: WithdrawFormScriptOptions) => {\n const { t } = useTranslation();\n const [crossChainTrans, setCrossChainTrans] = useState<boolean>(false);\n const [loading, setLoading] = useState(false);\n const [assetHistory] = useAssetsHistory(\n {\n page: 1,\n pageSize: 1,\n side: AssetHistorySideEnum.WITHDRAW,\n status: AssetHistoryStatusEnum.PENDING_REBALANCE,\n },\n // update when withdraw status changed\n {\n shouldUpdateOnWalletChanged: (data) =>\n data.side === AssetHistorySideEnum.WITHDRAW,\n },\n );\n\n const config = useConfig();\n\n const brokerName = config.get(\"brokerName\");\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const ee = useEventEmitter();\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const [withdrawTo, setWithdrawTo] = useState<WithdrawTo>(WithdrawTo.Wallet);\n\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { data: vaultBalanceList } = useQuery<API.VaultBalance[]>(\n `/v1/public/vault_balance`,\n {\n revalidateOnMount: true,\n errorRetryCount: 3,\n },\n );\n\n const {\n connectedChain,\n wallet,\n setChain: switchChain,\n settingChain,\n } = useWalletConnector();\n\n const currentChain = useMemo(() => {\n // if (!connectedChain) return null;\n\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : Number.parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) {\n return null;\n }\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useWithdrawToken({\n currentChain,\n withdrawTo,\n });\n\n const tokenChains = useMemo(() => {\n return chains\n .filter((chain) =>\n chain.token_infos?.some(\n (token) => token.symbol === sourceToken?.symbol,\n ),\n )\n .map((chain) => chain.network_infos);\n }, [chains, networkId, sourceToken]);\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const { withdraw, maxAmount, unsettledPnL } = useWithdraw({\n token: sourceToken?.symbol,\n decimals: sourceToken?.token_decimal,\n });\n\n const withdrawAccountIdState = useWithdrawAccountId({\n token: sourceToken?.symbol!,\n decimals: sourceToken?.token_decimal!,\n quantity,\n setQuantity,\n close: options.close,\n setLoading,\n });\n\n const checkIsBridgeless = useMemo(() => {\n if (wrongNetwork) {\n return false;\n }\n if (!currentChain) {\n return false;\n }\n if (networkId === \"testnet\") {\n return true;\n }\n if (!currentChain.info) {\n return false;\n }\n if (\n !currentChain.info.network_infos ||\n !currentChain.info.network_infos.bridgeless\n ) {\n return false;\n }\n return true;\n }, [currentChain, wrongNetwork]);\n\n const cleanData = () => {\n setQuantity(\"\");\n };\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return switchChain?.({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n // clean input value\n cleanData();\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n toast.error(`${t(\"connector.switchChain.failed\")}: ${error.message}`);\n });\n },\n [currentChain, switchChain, findByChainId, t],\n );\n\n const chainVaultBalance = useMemo(() => {\n if (!Array.isArray(vaultBalanceList) || !currentChain) {\n return null;\n }\n // chain.id\n const vaultBalance = vaultBalanceList.find(\n (item) =>\n Number.parseInt(item.chain_id) === currentChain?.id &&\n item.token === sourceToken?.symbol,\n );\n if (vaultBalance) {\n return vaultBalance.balance;\n }\n return null;\n }, [chains, currentChain, vaultBalanceList, sourceToken?.symbol]);\n\n const qtyGreaterThanMaxAmount = useMemo<boolean>(() => {\n if (!quantity || Number.isNaN(quantity)) {\n return false;\n }\n if (!maxAmount || Number.isNaN(maxAmount)) {\n return true;\n }\n return new Decimal(quantity).gt(maxAmount);\n }, [quantity, maxAmount]);\n\n const qtyGreaterThanVault = useMemo<boolean>(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return false;\n }\n if (!quantity || Number.isNaN(quantity)) {\n return false;\n }\n if (!chainVaultBalance || Number.isNaN(chainVaultBalance)) {\n return true;\n }\n return new Decimal(quantity).gt(chainVaultBalance);\n }, [quantity, chainVaultBalance, withdrawTo]);\n\n const crossChainWithdraw = useMemo(() => {\n if (chainVaultBalance !== null) {\n const qtyNum = Number.parseFloat(quantity);\n const value = qtyNum > chainVaultBalance && qtyNum <= maxAmount;\n return value;\n }\n return false;\n }, [quantity, maxAmount, chainVaultBalance]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n\n setLoading(true);\n return withdraw({\n amount: quantity,\n token: sourceToken?.symbol!,\n chainId: currentChain?.id!,\n allowCrossChainWithdraw: crossChainWithdraw,\n })\n .then((res) => {\n toast.success(t(\"transfer.withdraw.requested\"));\n ee.emit(\"withdraw:requested\");\n options.close?.();\n setQuantity(\"\");\n })\n .catch((e) => {\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n return;\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(e.message);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const fee = useWithdrawFee({\n crossChainWithdraw,\n currentChain,\n token: sourceToken?.symbol!,\n withdrawTo,\n });\n\n const minAmountWarningMessage = useMemo(() => {\n const minAmount = new Decimal(\n sourceToken?.minimum_withdraw_amount ?? 0,\n ).add(fee);\n\n if (quantity && new Decimal(quantity).lt(minAmount)) {\n return t(\"transfer.withdraw.minAmount.error\", {\n minAmount: toNonExponential(minAmount.toNumber()),\n currency: sourceToken?.symbol,\n });\n }\n }, [quantity, sourceToken?.minimum_withdraw_amount, fee, t]);\n\n const showQty = useMemo(() => {\n if (!quantity) {\n return \"\";\n }\n\n const value = new Decimal(quantity).sub(fee ?? 0);\n if (value.isNegative()) {\n return \"\";\n }\n return toNonExponential(value.toNumber());\n }, [fee, quantity]);\n\n useEffect(() => {\n if (!quantity) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n const qty = new Decimal(quantity ?? 0);\n if (unsettledPnL < 0) {\n if (qty.gt(maxAmount)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxAmount, unsettledPnL, crossChainTrans]);\n\n const disabled =\n crossChainTrans ||\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus) ||\n (withdrawTo === WithdrawTo.Account &&\n !withdrawAccountIdState.toAccountId) ||\n qtyGreaterThanMaxAmount ||\n qtyGreaterThanVault ||\n !!minAmountWarningMessage;\n\n useEffect(() => {\n setCrossChainTrans(!!assetHistory?.length);\n }, [assetHistory?.length]);\n\n // it need to use useMemoizedFn wrap ,otherwise crossChainTrans and assetHistory will be first render data\n const handleWalletTopic = useMemoizedFn((data: any) => {\n if (!crossChainTrans) {\n return;\n }\n const txId = assetHistory?.[0]?.tx_id;\n const { trxId, transStatus } = data;\n if (trxId === txId && transStatus === \"COMPLETED\") {\n setCrossChainTrans(false);\n }\n });\n\n useWalletTopic({\n onMessage: handleWalletTopic,\n });\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n const { currentLTV, nextLTV, ltvWarningMessage } = useWithdrawLTV({\n token: sourceToken?.symbol!,\n quantity,\n });\n\n const warningMessage = ltvWarningMessage || minAmountWarningMessage;\n\n const filteredVaultBalanceList = useMemo(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return [];\n }\n return vaultBalanceList?.filter(\n (item) => Number.parseInt(item.chain_id) === currentChain?.id,\n );\n }, [vaultBalanceList, currentChain, withdrawTo]);\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n sourceToken,\n onSourceTokenChange,\n sourceTokens,\n inputStatus,\n hintMessage,\n amount,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n unsettledPnL,\n wrongNetwork,\n settingChain,\n tokenChains,\n currentChain,\n onChainChange,\n onWithdraw,\n chainVaultBalance,\n fee,\n crossChainWithdraw,\n crossChainTrans,\n showQty,\n networkId,\n checkIsBridgeless,\n hasPositions,\n onSettlePnl,\n brokerName,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n vaultBalanceList: filteredVaultBalanceList,\n ...withdrawAccountIdState,\n withdrawTo,\n setWithdrawTo,\n currentLTV,\n nextLTV,\n warningMessage,\n };\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n usePositionStream,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport type SettlePnlOptions = {\n accountId?: string;\n};\n\nexport const useSettlePnl = (options?: SettlePnlOptions) => {\n const { accountId } = options || {};\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { account, state } = useAccount();\n const [positionData] = usePositionStream();\n\n const hasPositions = useMemo(\n () => !!positionData?.rows?.length,\n [positionData],\n );\n\n const onSettlePnl = async () => {\n const isSubAccount = accountId && state.mainAccountId !== accountId;\n const settleFn = isSubAccount\n ? account.settleSubAccount({ subAccountId: accountId })\n : account.settle({ accountId });\n return settleFn\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n })\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\n } else if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n } else if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n } else {\n toast.error(e.message);\n return Promise.reject(e);\n }\n });\n };\n\n return {\n hasPositions,\n onSettlePnl,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useInternalTransfer } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { InputStatus } from \"../../../types\";\nimport { checkIsAccountId, getTransferErrorMessage } from \"../../../utils\";\n\ntype InternalWithdrawOptions = {\n token: string;\n decimals: number;\n quantity: string;\n setQuantity: (quantity: string) => void;\n close?: () => void;\n setLoading: (loading: boolean) => void;\n};\n\nexport function useWithdrawAccountId(options: InternalWithdrawOptions) {\n const { token, quantity, setQuantity, close, setLoading, decimals } = options;\n const { t } = useTranslation();\n const [toAccountId, setToAccountId] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { transfer, submitting } = useInternalTransfer();\n\n const onTransfer = useCallback(() => {\n const num = Number(quantity);\n\n if (Number.isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting || !toAccountId) {\n return;\n }\n setLoading(true);\n\n transfer({\n token,\n receiver: toAccountId,\n amount: quantity,\n decimals,\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n close?.();\n })\n .catch((err) => {\n console.log(\"transfer error\", err);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [t, quantity, token, submitting, toAccountId, transfer]);\n\n useEffect(() => {\n if (!toAccountId) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n if (checkIsAccountId(toAccountId)) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n } else {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.withdraw.accountId.invalid\"));\n }\n }, [toAccountId]);\n\n return {\n toAccountId,\n setToAccountId,\n onTransfer,\n internalWithdrawSubmitting: submitting,\n toAccountIdInputStatus: inputStatus,\n toAccountIdHintMessage: hintMessage,\n };\n}\n","import { useMemo } from \"react\";\nimport { useTokenInfo } from \"@orderly.network/hooks\";\nimport { WithdrawTo } from \"../../../types\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\n\nexport function useWithdrawFee(options: {\n token: string;\n currentChain?: CurrentChain | null;\n crossChainWithdraw: boolean;\n withdrawTo: WithdrawTo;\n}) {\n const { crossChainWithdraw, currentChain, token, withdrawTo } = options;\n\n const tokenInfo = useTokenInfo(token);\n\n const fee = useMemo(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return 0;\n }\n\n if (!currentChain) {\n return 0;\n }\n\n const item = tokenInfo?.chain_details?.find(\n (chain) => Number.parseInt(chain.chain_id) === currentChain.id,\n );\n\n if (!item) {\n return 0;\n }\n\n if (crossChainWithdraw) {\n return (\n (item.withdrawal_fee || 0) + (item.cross_chain_withdrawal_fee || 0)\n );\n }\n\n return item.withdrawal_fee || 0;\n }, [tokenInfo, token, currentChain, crossChainWithdraw, withdrawTo]);\n\n return fee;\n}\n","import { useMemo } from \"react\";\nimport { useComputedLTV, useQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useWithdrawLTV = (params: { token: string; quantity: string }) => {\n const { token, quantity } = params;\n const { ltv_threshold } = useConvertThreshold();\n const { t } = useTranslation();\n\n const currentLTV = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity ? -Number(quantity) : 0,\n token,\n });\n\n const ltvWarningMessage = useMemo(() => {\n if (ltv_threshold && nextLTV) {\n const threshold = ltv_threshold * 100;\n if (nextLTV > threshold) {\n return t(\"transfer.withdraw.LTV.error\", {\n threshold,\n });\n }\n }\n return \"\";\n }, [nextLTV, ltv_threshold]);\n\n return {\n currentLTV,\n nextLTV,\n ltvWarningMessage,\n t,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n revalidateOnFocus: false,\n },\n );\n\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useMemoizedFn, useTokensInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { WithdrawTo } from \"../../../types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\nimport { useToken } from \"../../depositForm/hooks/useToken\";\n\nexport function useWithdrawToken(params: {\n currentChain?: CurrentChain | null;\n withdrawTo: WithdrawTo;\n}) {\n const { currentChain, withdrawTo } = params;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useToken(\n currentChain,\n (token) => token.symbol === \"USDC\" || token.is_collateral,\n );\n\n useEffect(() => {\n if (!tokensInfo?.length) return;\n\n const list = tokensInfo.map((item) => ({\n ...item,\n symbol: item.token,\n token_decimal: item.decimals,\n precision: item.decimals,\n }));\n\n // sort tokens, USDC should be the first\n list.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n\n const usdcToken = getTokenByTokenList(tokens);\n setToken(usdcToken || list?.[0]);\n setTokens(list);\n }, [tokensInfo]);\n\n const syncToken = useMemoizedFn(() => {\n if (withdrawTo === WithdrawTo.Account) {\n const findToken = tokens.find(\n (item) => item.symbol === sourceToken?.symbol,\n ) as API.TokenInfo;\n if (findToken) {\n setToken(findToken);\n }\n } else {\n const findToken = sourceTokens.find(\n (item) => item.symbol === token?.symbol,\n ) as API.TokenInfo;\n if (findToken) {\n onSourceTokenChange(findToken);\n }\n }\n });\n\n useEffect(() => {\n syncToken();\n }, [withdrawTo]);\n\n if (withdrawTo === WithdrawTo.Account) {\n return {\n sourceToken: token,\n onSourceTokenChange: setToken,\n sourceTokens: tokens,\n };\n }\n\n return {\n sourceToken,\n onSourceTokenChange,\n sourceTokens,\n };\n}\n","import { FC } from \"react\";\nimport {\n useWithdrawFormScript,\n WithdrawFormScriptOptions,\n} from \"./withdrawForm.script\";\nimport { WithdrawForm } from \"./withdrawForm.ui\";\n\nexport type WithdrawFormWidgetProps = WithdrawFormScriptOptions;\n\nexport const WithdrawFormWidget: FC<WithdrawFormWidgetProps> = (props) => {\n const state = useWithdrawFormScript(props);\n return <WithdrawForm {...state} />;\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { DepositSlot } from \"./depositSlot\";\nimport { WithdrawSlot } from \"./withdrawSlot\";\n\nexport const DepositAndWithdrawWithDialogId = \"DepositAndWithdrawWithDialogId\";\nexport const DepositAndWithdrawWithSheetId = \"DepositAndWithdrawWithSheetId\";\n\nexport type DepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n};\n\nexport const DepositAndWithdraw: FC<DepositAndWithdrawProps> = (props) => {\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\",\n );\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel\n title={t(\"common.deposit\")}\n icon={<ArrowDownSquareFillIcon />}\n value=\"deposit\"\n >\n <DepositSlot close={props.close} />\n {/* <DepositFormWidget close={props.close} /> */}\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <WithdrawSlot close={props.close} />\n {/* <WithdrawFormWidget close={props.close} /> */}\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(DepositAndWithdrawWithDialogId, DepositAndWithdraw, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n});\n\nregisterSimpleSheet(DepositAndWithdrawWithSheetId, DepositAndWithdraw);\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { DepositFormWidget } from \"../depositForm\";\nimport { DepositFormWidgetProps } from \"../depositForm/depositForm.widget\";\n\nexport const DepositSlot = (props: DepositFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.DepositForm}\n defaultWidget={DepositFormWidget}\n {...props}\n />\n );\n};\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { WithdrawFormWidget } from \"../withdrawForm\";\nimport { WithdrawFormWidgetProps } from \"../withdrawForm/withdrawForm.widget\";\n\nexport const WithdrawSlot = (props: WithdrawFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.WithdrawForm}\n defaultWidget={WithdrawFormWidget}\n {...props}\n />\n );\n};\n","import { FC } from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { ActionButton } from \"../../actionButton\";\nimport { AvailableQuantity } from \"../../availableQuantity\";\nimport { BrokerWallet } from \"../../brokerWallet\";\nimport { ChainSelect } from \"../../chainSelect\";\nimport { ExchangeDivider } from \"../../exchangeDivider\";\nimport { QuantityInput } from \"../../quantityInput\";\nimport { Slippage } from \"../../slippage\";\nimport { SwapCoin } from \"../../swapCoin\";\nimport { Web3Wallet } from \"../../web3Wallet\";\nimport { Notice } from \"../components/notice\";\nimport { SwapFee } from \"../components/swapFee\";\nimport { UseSwapDepositFormScriptReturn } from \"./swapDepositForm.script\";\n\nexport const SwapDepositForm: FC<UseSwapDepositFormScriptReturn> = (props) => {\n const {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n } = props;\n\n return (\n <Box\n id=\"oui-swap-deposit-form\"\n className={textVariants({ weight: \"semibold\" })}\n >\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Web3Wallet />\n\n <Box mt={3} mb={1}>\n <ChainSelect\n chains={chains}\n value={currentChain!}\n onValueChange={onChainChange}\n wrongNetwork={wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n status={inputStatus}\n hintMessage={hintMessage}\n fetchBalance={fetchBalance}\n data-testid=\"oui-testid-swap-deposit-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity);\n }}\n />\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={dst as any}\n value={swapQuantity}\n loading={swapRevalidating}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n\n <Flex direction=\"column\" itemAlign=\"start\" mt={1} gapY={1}>\n <Flex justify=\"between\" width=\"100%\">\n {/* <SwapCoin token={token as any} dst={dst} price={swapPrice} /> */}\n {/* <SwapCoin\n sourceSymbol={token as any}\n targetSymbol={dst.symbol}\n indexPrice={swapPrice}\n /> */}\n {(needSwap || needCrossSwap) && (\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n )}\n </Flex>\n\n <SwapFee {...fee} />\n </Flex>\n </Box>\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={token?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n networkId={networkId}\n />\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useConfig, useDeposit, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"../../depositForm/hooks\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { useNeedSwapAndCross } from \"../hooks/useNeedSwapAndCross\";\nimport { useSwapEnquiry } from \"../hooks/useSwapEnquiry\";\nimport { useSwapFee } from \"../hooks/useSwapFee\";\nimport { useToken } from \"../hooks/useToken\";\nimport { SwapMode } from \"../types\";\n\nexport type UseSwapDepositFormScriptReturn = ReturnType<\n typeof useSwapDepositFormScript\n>;\n\nexport type UseSwapDepositFormScriptOptions = {\n onClose?: () => void;\n};\n\nexport const useSwapDepositFormScript = (\n options: UseSwapDepositFormScriptOptions,\n) => {\n const [slippage, setSlippage] = useLocalStorage(\n \"orderly_swap_deposit_slippage\",\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const { wrongNetwork } = useAppContext();\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const tokensFilter = useCallback((chainInfo: API.Chain) => {\n return (\n chainInfo.token_infos.filter((token) => {\n if (chainInfo.network_infos.bridgeless && token.symbol === \"USDC\") {\n return true;\n }\n return !!(token as API.TokenInfo).swap_enable;\n }) ?? []\n );\n }, []);\n\n const { token, tokens, onTokenChange } = useToken({\n currentChain,\n tokensFilter,\n });\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n } = useDeposit({\n address: token?.address,\n decimals: token?.decimals,\n srcChainId: currentChain?.id,\n srcToken: token?.symbol,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n depositorAddress: (currentChain?.info?.network_infos as API.NetworkInfos)\n ?.depositor,\n });\n\n const maxQuantity = useMemo(\n () =>\n new Decimal(balance || 0)\n .todp(token?.precision ?? 2, Decimal.ROUND_DOWN)\n .toString(),\n [balance, token],\n );\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n });\n\n const { needSwap, needCrossSwap } = useNeedSwapAndCross({\n srcToken: token,\n srcChainId: currentChain?.id,\n dstChainId: dst?.chainId,\n });\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcToken: token?.address,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n dstToken: dst.address,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (token?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = () => {\n cleanTransactionInfo();\n setQuantity(\"\");\n };\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.onClose?.();\n }, [options.onClose]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: token!.symbol,\n // swap precision\n displayDecimals: token?.precision,\n amount: quantity,\n decimals: token!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const { submitting, onApprove, onDeposit } = useDepositAction({\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit: needSwap || needCrossSwap,\n customDeposit: onSwapDeposit,\n onSuccess,\n });\n\n const loading = submitting || depositFeeRevalidating! || swapRevalidating;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating;\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: token,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n useEffect(() => {\n cleanData();\n }, [token, currentChain?.id]);\n\n return {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange: setQuantity,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\n\ntype Options = {\n currentChain: CurrentChain | null;\n tokensFilter?: (chainInfo: API.Chain) => API.TokenInfo[];\n};\n\nexport function useToken(options: Options) {\n const { currentChain, tokensFilter } = options;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n // when chain changed and chain data ready then call this function\n const onChainInited = useCallback(\n (chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n const tokens =\n typeof tokensFilter === \"function\"\n ? tokensFilter(chainInfo)\n : chainInfo.token_infos;\n\n setTokens(tokens);\n\n const newToken = getTokenByTokenList(tokens);\n\n if (!newToken) return;\n\n setToken(newToken);\n }\n },\n [tokensFilter],\n );\n\n useEffect(() => {\n onChainInited(currentChain?.info);\n // if settingChain is true, the currentChain will change, so use currentChain.id\n }, [currentChain?.id, onChainInited]);\n\n return { token, tokens, onTokenChange: setToken };\n}\n","import { FC } from \"react\";\nimport {\n useSwapDepositFormScript,\n UseSwapDepositFormScriptOptions,\n} from \"./swapDepositForm.script\";\nimport { SwapDepositForm } from \"./swapDepositForm.ui\";\n\nexport type SwapDepositFormWidgetProps = UseSwapDepositFormScriptOptions;\n\nexport const SwapDepositFormWidget: FC<SwapDepositFormWidgetProps> = (\n props,\n) => {\n const state = useSwapDepositFormScript(props);\n return <SwapDepositForm {...state} />;\n};\n","import { FC } from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Button, Flex, textVariants, Text, cn } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { TransferVerticalIcon } from \"../../icons\";\nimport { AccountSelect } from \"../accountSelect\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { TransferFormScriptReturn } from \"./transferForm.script\";\n\nexport type TransferFormProps = TransferFormScriptReturn;\n\nexport const TransferForm: FC<TransferFormProps> = (props) => {\n const {\n networkId,\n disabled,\n onTransfer,\n quantity,\n onQuantityChange,\n amount,\n tokens,\n token,\n onTokenChange,\n maxQuantity,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccounts,\n toAccounts,\n fromAccount,\n onFromAccountChange,\n toAccount,\n onToAccountChange,\n onExchange,\n } = props;\n\n const { t } = useTranslation();\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.from\")}\n </Text>\n <Box mt={1} mb={1}>\n <AccountSelect\n subAccounts={fromAccounts}\n value={fromAccount}\n onValueChange={onFromAccountChange}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n hintMessage={hintMessage}\n status={inputStatus}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={unsettledPnL}\n hasPositions={hasPositions}\n onSettlePnl={onSettlePnl}\n tooltipContent={t(\"transfer.internalTransfer.unsettled.tooltip\")}\n dialogContent={\n // @ts-ignore\n <Trans i18nKey=\"transfer.internalTransfer.settlePnl.description\" />\n }\n />\n </Box>\n\n <ExchangeDivider\n icon={\n <TransferVerticalIcon\n // TODO: determines if the current orderly key is the main account\n // className={cn(\n // isMainAccount\n // ? \"oui-cursor-pointer oui-text-primary\"\n // : \" oui-cursor-not-allowed oui-text-base-contrast-20\",\n // )}\n // onClick={isMainAccount ? onExchange : undefined}\n className=\"oui-cursor-pointer oui-text-primary\"\n onClick={onExchange}\n />\n }\n />\n\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.to\")}\n </Text>\n <Box mt={1}>\n <AccountSelect\n subAccounts={toAccounts}\n value={toAccount}\n onValueChange={onToAccountChange}\n />\n <Flex\n className={cn(\n \"oui-mt-[2px] oui-h-[31px] oui-text-base-contrast-54\",\n \"oui-rounded-b-xl oui-rounded-t-sm\",\n )}\n justify=\"between\"\n itemAlign=\"center\"\n px={3}\n intensity={600}\n >\n <Text size=\"2xs\">\n {t(\"transfer.internalTransfer.currentAssetValue\")}\n </Text>\n <Text.numeral\n size=\"2xs\"\n intensity={54}\n unit={` ${token.symbol}`}\n dp={token?.precision}\n padding={false}\n >\n {toAccountAsset}\n </Text.numeral>\n </Flex>\n </Box>\n </Box>\n\n <Flex justify=\"center\">\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={submitting}\n size={buttonSize}\n onClick={onTransfer}\n >\n {t(\"common.transfer\")}\n </Button>\n </AuthGuard>\n </Box>\n </Flex>\n </Box>\n );\n};\n","import { useState } from \"react\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\n\ntype AccountSelectProps = {\n subAccounts?: SubAccount[];\n value?: SubAccount;\n onValueChange?: (subAccount: SubAccount) => void;\n};\n\nexport const AccountSelect: React.FC<AccountSelectProps> = (props) => {\n const { subAccounts = [], value } = props;\n const [open, setOpen] = useState(false);\n\n const selectable = subAccounts.length > 1;\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-b-sm oui-rounded-t-xl oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto oui-bg-base-6\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n size=\"xs\"\n intensity={80}\n rule={value?.description ? undefined : \"address\"}\n >\n {value?.description || value?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{value?.id}</Text.formatted>\n </Text>\n </Flex>\n {selectable && <ExchangeIcon className=\"oui-text-base-contrast-54\" />}\n </Flex>\n );\n\n const content = subAccounts.map((subAccount, index) => {\n const isActive = subAccount.id === value?.id;\n\n const asset = subAccount?.holding?.find(\n (item) => item.token === \"USDC\",\n )?.holding;\n\n return (\n <Flex\n key={subAccount.id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-transfer-form-account-select-item\",\n \"oui-cursor-pointer oui-py-[6px] hover:oui-bg-base-5\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n props.onValueChange?.(subAccount);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <Flex direction=\"column\" itemAlign=\"start\" className=\"oui-text-2xs\">\n <Text.formatted\n rule={subAccount?.description ? undefined : \"address\"}\n intensity={80}\n >\n {subAccount?.description || subAccount?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{subAccount?.id}</Text.formatted>\n </Text>\n </Flex>\n </Flex>\n <Flex gapX={3}>\n <Text.numeral size=\"2xs\" intensity={54} unit=\" USDC\">\n {asset || 0}\n </Text.numeral>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-transfer-form-account-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-transfer-form-account-select-dropdown-menu-content\",\n \"oui-font-semibold\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content} </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n SubAccount,\n useAccount,\n useConfig,\n useSubAccountDataObserver,\n useSubAccountMaxWithdrawal,\n useTransfer,\n} from \"@orderly.network/hooks\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { getTransferErrorMessage } from \"../../utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\n\nexport type TransferFormScriptReturn = ReturnType<typeof useTransferFormScript>;\n\nexport type TransferFormScriptOptions = {\n /** target sub account id */\n toAccountId?: string;\n token?: string;\n close?: () => void;\n};\n\nconst DEFAULT_TOKEN = {\n symbol: \"USDC\",\n} as API.TokenInfo;\n\nexport const useTransferFormScript = (options: TransferFormScriptOptions) => {\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\"\");\n const [fromAccount, setFromAccount] = useState<SubAccount>();\n const [toAccount, setToAccount] = useState<SubAccount>();\n const [mainAccount, setMainAccount] = useState<SubAccount>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([DEFAULT_TOKEN]);\n const [token, setToken] = useState<API.TokenInfo>(DEFAULT_TOKEN);\n const [holdingMap, setHoldingMap] = useState<Record<string, API.Holding[]>>(\n {},\n );\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { state, isMainAccount, subAccount } = useAccount();\n\n const tokensInfo = useTokensInfo();\n\n const {\n transfer,\n submitting,\n maxAmount: currentMaxAmount,\n unsettledPnL: currentUnsettledPnL,\n } = useTransfer({ fromAccountId: fromAccount?.id, token: token.symbol });\n\n const subAccounts = state.subAccounts;\n const mainAccountId = state.mainAccountId;\n const accountId = state.accountId;\n\n // when current account is main account, and fromAccount is not main account, set observerAccountId to fromAccountId\n // current sub account use main account orderly key to transfer, so fromAccount can be main account or current sub account\n const observerAccountId = isMainAccount\n ? fromAccount?.id !== mainAccountId\n ? fromAccount?.id\n : undefined\n : fromAccount?.id;\n\n const { hasPositions: currentHasPositions, onSettlePnl } = useSettlePnl({\n accountId: fromAccount?.id,\n });\n\n // when select sub account, open the private websocket\n const { portfolio, positions } = useSubAccountDataObserver(observerAccountId);\n const subAccountMaxAmount = useSubAccountMaxWithdrawal({\n token: token.symbol,\n unsettledPnL: portfolio?.unsettledPnL,\n freeCollateral: portfolio?.freeCollateral ?? zero,\n holdings: portfolio?.holding,\n });\n\n const formHasPositions = useMemo(\n () => !!positions?.rows?.length,\n [positions],\n );\n\n const hasPositions = useMemo(() => {\n return observerAccountId ? formHasPositions : currentHasPositions;\n }, [observerAccountId, formHasPositions, currentHasPositions]);\n\n const { unsettledPnL, maxQuantity } = useMemo(() => {\n if (observerAccountId) {\n return {\n unsettledPnL: portfolio?.unsettledPnL,\n maxQuantity: subAccountMaxAmount,\n };\n }\n return {\n unsettledPnL: currentUnsettledPnL,\n maxQuantity: currentMaxAmount,\n };\n }, [\n observerAccountId,\n currentUnsettledPnL,\n currentMaxAmount,\n portfolio?.unsettledPnL,\n subAccountMaxAmount,\n ]);\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n unsettledPnL,\n });\n\n const onTransfer = useCallback(() => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting || !toAccount) return;\n\n transfer(token.symbol!, {\n account_id: toAccount.id,\n amount: new Decimal(quantity).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n options.close?.();\n })\n .catch((err) => {\n console.error(\"transfer error: \", err);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n });\n }, [t, token, quantity, submitting, transfer, toAccount]);\n\n const disabled = submitting || !quantity || inputStatus === \"error\";\n\n const amount = useMemo(() => {\n const markPrice = 1;\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity]);\n\n const toAccountAsset = useMemo(() => {\n if (!toAccount?.id) {\n return 0;\n }\n const holdings = holdingMap[toAccount.id];\n const asset = holdings?.find((item) => item.token === token.symbol);\n return asset?.holding || 0;\n }, [toAccount, token, holdingMap]);\n\n const { fromAccounts, toAccounts } = useMemo(() => {\n if (isMainAccount) {\n return {\n fromAccounts: mainAccount ? [mainAccount, ...(subAccounts || [])] : [],\n toAccounts:\n // only from account is main account, can transfer to other sub accounts\n fromAccount?.id === mainAccountId ? subAccounts : [],\n };\n }\n\n return {\n fromAccounts: [],\n toAccounts: [],\n };\n }, [isMainAccount, mainAccountId, mainAccount, subAccounts, fromAccount]);\n\n // init and update main account holding\n useEffect(() => {\n if (!mainAccountId) return;\n\n const _mainAccount = {\n id: mainAccountId!,\n description: t(\"common.mainAccount\"),\n holding: [],\n };\n\n setMainAccount(_mainAccount);\n\n subAccount.refresh().then((res) => {\n setHoldingMap(res);\n setMainAccount({\n ..._mainAccount,\n holding: res[mainAccountId],\n });\n });\n }, [t, mainAccountId]);\n\n // init fromAccount\n useEffect(() => {\n // if current account is main account, set fromAccount to main account\n // if current account is sub account, set fromAccount to current sub account\n setFromAccount(\n isMainAccount\n ? mainAccount\n : subAccounts?.find((item) => item.id === accountId),\n );\n }, [isMainAccount, mainAccount, subAccounts, accountId]);\n\n // init toAccount\n useEffect(() => {\n // if current account is main account\n if (isMainAccount) {\n const firstSubAccount = subAccounts?.[0];\n\n // if toAccount is not set, set toAccount to first sub account\n const selectAccount = options.toAccountId\n ? subAccounts?.find((item) => item.id === options.toAccountId) ||\n firstSubAccount\n : firstSubAccount;\n\n if (selectAccount) {\n setToAccount(selectAccount);\n }\n } else {\n // if current account is sub account, set toAccount to main account\n setToAccount(mainAccount);\n }\n }, [options?.toAccountId, isMainAccount, mainAccount, subAccounts]);\n\n useEffect(() => {\n const tokens = tokensInfo?.map((item) => ({\n symbol: item.token,\n precision: item.decimals,\n })) as API.TokenInfo[];\n\n if (tokens?.length) {\n // sort tokens, USDC should be the first\n tokens.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n\n const targetToken = tokens?.find((item) => item.symbol === options.token);\n\n setTokens(tokens);\n setToken(targetToken || tokens?.[0] || DEFAULT_TOKEN);\n }\n }, [tokensInfo, options.token]);\n\n const onFromAccountChange = useCallback(\n (account: SubAccount) => {\n setFromAccount(account);\n\n const firstSubAccount = subAccounts?.[0];\n // if fromAccount is main account, set toAccount to first sub account\n if (account?.id === mainAccountId) {\n setToAccount(firstSubAccount);\n return;\n }\n\n // if fromAccount is not main account, set toAccount to main account\n // sub account only can transfer to main account\n if (account?.id && account?.id !== mainAccountId) {\n setToAccount(mainAccount);\n return;\n }\n },\n [mainAccountId, mainAccount, subAccounts],\n );\n\n const onToAccountChange = useCallback((account: SubAccount) => {\n setToAccount(account);\n }, []);\n\n const onExchange = useCallback(() => {\n setFromAccount(toAccount);\n setToAccount(fromAccount);\n }, [fromAccount, toAccount]);\n\n return {\n networkId,\n onTransfer,\n quantity,\n amount,\n onQuantityChange: setQuantity,\n maxQuantity,\n tokens,\n token,\n onTokenChange: setToken,\n disabled,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccount,\n toAccount,\n fromAccounts,\n onFromAccountChange,\n toAccounts,\n onToAccountChange,\n onExchange,\n isMainAccount,\n };\n};\n\ntype Options = {\n quantity: string;\n maxQuantity: string | number;\n unsettledPnL?: number;\n};\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity, unsettledPnL = 0 } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (unsettledPnL < 0) {\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n } else {\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else if (\n qty.gt(new Decimal(maxQuantity).minus(unsettledPnL)) &&\n qty.lessThanOrEqualTo(maxQuantity)\n ) {\n setInputStatus(\"warning\");\n setHintMessage(t(\"settle.settlePnl.warning\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { FC } from \"react\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { registerSimpleSheet } from \"@orderly.network/ui\";\nimport {\n TransferFormScriptOptions,\n useTransferFormScript,\n} from \"./transferForm.script\";\nimport { TransferForm } from \"./transferForm.ui\";\n\nexport const TransferDialogId = \"TransferDialogId\";\nexport const TransferSheetId = \"TransferSheetId\";\n\nexport type TransferFormWidgetProps = TransferFormScriptOptions;\n\nexport const TransferFormWidget = (props: TransferFormWidgetProps) => {\n const state = useTransferFormScript({\n toAccountId: props.toAccountId,\n token: props.token,\n close: props.close,\n });\n return <TransferForm {...state} />;\n};\n\nexport const TransferWidget: FC<TransferFormWidgetProps> = (props) => {\n return (\n <TransferFormWidget\n close={props.close}\n toAccountId={props.toAccountId}\n token={props.token}\n />\n );\n};\n\nregisterSimpleDialog(TransferDialogId, TransferWidget, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n title: () => i18n.t(\"common.transfer\"),\n});\n\nregisterSimpleSheet(TransferSheetId, TransferWidget, {\n title: () => i18n.t(\"common.transfer\"),\n});\n","import React from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ConvertAction } from \"../convertAction\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { SwapCoin } from \"../swapCoin\";\nimport {\n unnormalizeAmount,\n type ConvertFormScriptReturn,\n} from \"./convertForm.script\";\n\nexport type ConvertFormProps = ConvertFormScriptReturn;\n\nexport const ConvertFormUI: React.FC<ConvertFormProps> = (props) => {\n const {\n loading,\n disabled,\n quantity,\n onQuantityChange,\n maxQuantity,\n token,\n targetToken,\n sourceTokens,\n onSourceTokenChange,\n onConvert,\n slippage,\n onSlippageChange,\n convertRate,\n outAmounts,\n minimumReceived,\n isQuoteLoading,\n currentLTV,\n nextLTV,\n networkId,\n balanceRevalidating,\n targetChainInfo,\n } = props;\n\n return (\n <Box className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={token}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={quantity}\n maxQuantity={maxQuantity.toString()}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <ExchangeDivider />\n <QuantityInput\n readOnly\n loading={isQuoteLoading}\n token={targetToken}\n value={\n isQuoteLoading || !quantity || Number.isNaN(Number(outAmounts))\n ? \"\"\n : unnormalizeAmount(outAmounts, targetChainInfo?.decimals ?? 6)\n }\n />\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <SwapCoin\n indexPrice={\n isQuoteLoading || !quantity || Number.isNaN(Number(convertRate))\n ? \"-\"\n : convertRate\n }\n sourceSymbol={token?.token}\n targetSymbol={targetToken?.token}\n />\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n symbol={targetToken?.token || \"\"}\n precision={targetChainInfo?.precision ?? 6}\n value={\n isQuoteLoading ||\n !quantity ||\n Number.isNaN(Number(minimumReceived))\n ? \"-\"\n : unnormalizeAmount(\n minimumReceived.toString(),\n targetChainInfo?.decimals ?? 6,\n )\n }\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n <Fee dstGasFee={\"0\"} />\n </Flex>\n </Box>\n <Flex itemAlign={\"center\"} justify=\"center\">\n <ConvertAction\n networkId={networkId}\n disabled={disabled}\n loading={loading}\n onConvert={onConvert}\n />\n </Flex>\n </Box>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\n\nexport interface ConvertActionButtonProps {\n disabled?: boolean;\n loading?: boolean;\n symbol?: string;\n networkId?: NetworkId;\n onConvert?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const ConvertAction: React.FC<ConvertActionButtonProps> = (props) => {\n const { disabled, loading, networkId, onConvert } = props;\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{ fullWidth: true, size: { initial: \"md\", lg: \"lg\" } }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={{ initial: \"md\", lg: \"lg\" }}\n onClick={onConvert}\n >\n {t(\"transfer.convert\")}\n </Button>\n </AuthGuard>\n </Box>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useConfig,\n useConvert,\n useComputedLTV,\n useLocalStorage,\n useOdosQuote,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport type { NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useToken } from \"./hooks/useToken\";\n\nconst { calcMinimumReceived } = account;\n\nexport type ConvertFormScriptReturn = ReturnType<typeof useConvertFormScript>;\n\nconst ORDERLY_CONVERT_SLIPPAGE_KEY = \"orderly_convert_slippage\";\n\nexport interface ConvertFormScriptOptions {\n token?: string;\n close?: () => void;\n}\n\nexport const normalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).mul(new Decimal(10).pow(decimals)).toFixed(0);\n};\n\nexport const unnormalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).div(new Decimal(10).pow(decimals)).toString();\n};\n\nexport const useConvertFormScript = (options: ConvertFormScriptOptions) => {\n const { token: defaultToken, close } = options;\n\n const { t } = useTranslation();\n const [loading, setLoading] = useState<boolean>(false);\n\n const config = useConfig();\n\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const [quantity, setQuantity] = useState<string>(\"\");\n\n const { wrongNetwork } = useAppContext();\n\n const { wallet } = useWalletConnector();\n\n const {\n sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n targetChainInfo,\n } = useToken({ defaultValue: defaultToken });\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_CONVERT_SLIPPAGE_KEY,\n 1,\n );\n\n const { maxAmount, convert } = useConvert({ token: sourceToken?.token });\n\n const onConvert = async () => {\n if (loading) {\n return;\n }\n setLoading(true);\n return convert({\n amount: Number(quantity),\n slippage: new Decimal(slippage).div(100).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.convert.completed\"));\n close?.();\n setQuantity(\"\");\n })\n .catch((err: Error) => {\n toast.error(\n err.message?.includes(\"user rejected\")\n ? t(\"transfer.convert.failed\")\n : err.message,\n );\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const [postQuote, { data: quoteData, isMutating: isQuoteLoading }] =\n useOdosQuote();\n\n useEffect(() => {\n const { quoteChainId, contract_address, decimals } = sourceToken || {};\n const targetAddress = targetChainInfo?.contract_address;\n\n if (quantity && quoteChainId && contract_address && targetAddress) {\n // https://docs.odos.xyz/build/api-docs\n postQuote({\n chainId: parseInt(quoteChainId),\n inputTokens: [\n {\n amount: normalizeAmount(quantity, decimals!),\n tokenAddress: contract_address,\n },\n ],\n outputTokens: [\n {\n proportion: 1,\n tokenAddress: targetAddress,\n },\n ],\n // simple: true,\n });\n }\n }, [quantity, sourceToken, targetChainInfo, postQuote]);\n\n const memoizedOutAmounts = useMemo<string>(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n return quoteData?.outAmounts[0];\n }, [quoteData, isQuoteLoading]);\n\n const memoizedConvertRate = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n\n const rate = new Decimal(\n unnormalizeAmount(\n quoteData.outAmounts[0],\n targetChainInfo?.decimals ?? 6,\n ),\n )\n .div(\n unnormalizeAmount(quoteData.inAmounts[0], sourceToken?.decimals ?? 6),\n )\n .toString();\n return rate;\n }, [isQuoteLoading, quoteData, sourceToken, targetChainInfo]);\n\n const memoizedMinimumReceived = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return 0;\n }\n return calcMinimumReceived({\n amount: quoteData?.outAmounts[0],\n slippage: Number(slippage),\n });\n }, [quoteData, isQuoteLoading, slippage]);\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: Number(quantity),\n token: sourceToken?.token,\n });\n\n const disabled = !quantity || Number(quantity) === 0;\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n token: sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n wrongNetwork,\n onConvert,\n hasPositions,\n onSettlePnl,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n convertRate: memoizedConvertRate,\n minimumReceived: memoizedMinimumReceived,\n outAmounts: memoizedOutAmounts,\n isQuoteLoading,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n targetChainInfo,\n };\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { Arbitrum, type API } from \"@orderly.network/types\";\n\nconst splitTokenBySymbol = <T extends API.Chain>(items: T[]) => {\n return items.reduce<Record<\"usdc\" | \"others\", T[]>>(\n (result, item) => {\n if (item.token?.toUpperCase() === \"USDC\") {\n result.usdc.push(item);\n } else {\n result.others.push(item);\n }\n return result;\n },\n { usdc: [], others: [] },\n );\n};\n\nconst findChainInfo = (tokenInfo: API.Chain) => {\n const arbitrumChainInfo = tokenInfo.chain_details.find(\n (item) => parseInt(item.chain_id) === Arbitrum.id,\n );\n\n const nativeTokenChainInfo = tokenInfo.chain_details.find(\n (item) => !item.contract_address,\n );\n\n const nativeTokenAddress = \"0x0000000000000000000000000000000000000000\";\n\n if (arbitrumChainInfo) {\n return {\n contract_address:\n arbitrumChainInfo.contract_address || nativeTokenAddress,\n quoteChainId: arbitrumChainInfo.chain_id,\n decimals: arbitrumChainInfo.decimals,\n };\n }\n\n if (nativeTokenChainInfo) {\n return {\n contract_address: nativeTokenAddress,\n quoteChainId: nativeTokenChainInfo.chain_id,\n decimals: nativeTokenChainInfo.decimals,\n };\n }\n\n return {\n contract_address: tokenInfo.chain_details[0]?.contract_address,\n quoteChainId: tokenInfo.chain_details[0]?.chain_id,\n decimals: tokenInfo.chain_details[0]?.decimals,\n };\n};\n\ninterface Options {\n defaultValue?: string;\n}\n\ntype ConvertTokenInfo = API.Chain & {\n contract_address: string;\n quoteChainId: string;\n precision: number;\n};\n\nexport const useToken = (options: Options) => {\n const { defaultValue } = options;\n\n const [sourceToken, setSourceToken] = useState<ConvertTokenInfo>();\n const [targetToken, setTargetToken] = useState<ConvertTokenInfo>();\n const [sourceTokens, setSourceTokens] = useState<ConvertTokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const newTokensInfo = useMemo(() => {\n const filteredTokensInfo = tokensInfo.filter((item) => item.on_chain_swap);\n\n return filteredTokensInfo.map((item) => {\n const chainInfo = findChainInfo(item);\n return {\n ...item,\n symbol: item.token,\n precision: item.decimals ?? 6,\n ...chainInfo,\n };\n });\n }, [tokensInfo]);\n\n useEffect(() => {\n const { usdc, others } = splitTokenBySymbol(newTokensInfo);\n setSourceToken(() => {\n if (defaultValue) {\n const defaultToken = others.find(({ token }) => token === defaultValue);\n return defaultToken ? defaultToken : others[0];\n }\n return others[0];\n });\n setSourceTokens(others);\n setTargetToken(usdc[0]);\n }, [defaultValue, newTokensInfo]);\n\n const targetChainInfo = useMemo(() => {\n const info = targetToken?.chain_details?.find(\n (item) => item.chain_id === sourceToken?.quoteChainId,\n );\n return {\n ...info,\n precision: targetToken?.precision,\n };\n }, [sourceToken, targetToken]);\n\n return {\n sourceToken,\n sourceTokens,\n onSourceTokenChange: setSourceToken,\n targetToken,\n targetChainInfo,\n };\n};\n","import React from \"react\";\n// import pick from \"ramda/es/pick\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport type { ConvertFormScriptOptions } from \"./convertForm.script\";\nimport { useConvertFormScript } from \"./convertForm.script\";\nimport { ConvertFormUI } from \"./convertForm.ui\";\n\nexport const ConvertDialogId = \"ConvertDialogId\";\nexport const ConvertSheetId = \"ConvertSheetId\";\n\nexport const ConvertFormWidget: React.FC<ConvertFormScriptOptions> = (\n props,\n) => {\n const state = useConvertFormScript(props);\n return <ConvertFormUI {...state} />;\n};\n\nregisterSimpleDialog(ConvertDialogId, ConvertFormWidget, {\n size: \"md\",\n classNames: { content: \"oui-border oui-border-line-6\" },\n title: () => i18n.t(\"transfer.convert\"),\n});\n\nregisterSimpleSheet(ConvertSheetId, ConvertFormWidget, {\n title: () => i18n.t(\"transfer.convert\"),\n});\n","import React, { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport { Flex, cn, Text, CloseIcon } from \"@orderly.network/ui\";\nimport { DepositStatusScriptReturn } from \"./depostiStatus.script\";\n\nexport type DepositStatusProps = {\n className?: string;\n classNames?: {\n root?: string;\n items?: string;\n };\n onClick?: () => void;\n} & DepositStatusScriptReturn;\n\nexport const DepositStatus: React.FC<DepositStatusProps> = (props) => {\n const { canTrade, className, classNames, pendingCount, completedCount } =\n props;\n\n if (!canTrade || (pendingCount === 0 && completedCount === 0)) {\n return null;\n }\n\n return (\n <Flex\n direction=\"column\"\n gapY={1}\n width=\"100%\"\n className={cn(className, classNames?.root)}\n >\n <DepositStatusContent\n className={classNames?.items}\n count={pendingCount}\n status={AssetHistoryStatusEnum.PENDING}\n onClick={props.onClick}\n estimatedTime={props.estimatedTime}\n onClose={props.onClose}\n />\n <DepositStatusContent\n className={classNames?.items}\n count={completedCount}\n status={AssetHistoryStatusEnum.COMPLETED}\n onClick={props.onClick}\n onClose={props.onClose}\n />\n </Flex>\n );\n};\n\ntype DepositStatusContentProps = {\n count: number;\n status: AssetHistoryStatusEnum.PENDING | AssetHistoryStatusEnum.COMPLETED;\n onClick?: () => void;\n className?: string;\n estimatedTime?: string | number;\n onClose: (status: AssetHistoryStatusEnum) => void;\n};\n\nexport const DepositStatusContent = (props: DepositStatusContentProps) => {\n const { t } = useTranslation();\n const { count, status, estimatedTime } = props;\n\n const content = useMemo(() => {\n if (status === AssetHistoryStatusEnum.PENDING) {\n return count > 1\n ? t(\"transfer.deposit.status.pending.multiple\")\n : t(\"transfer.deposit.status.pending.one\");\n }\n\n return count > 1\n ? t(\"transfer.deposit.status.completed.multiple\")\n : t(\"transfer.deposit.status.completed.one\");\n }, [t, status, count]);\n\n if (count === 0) {\n return null;\n }\n\n const clickable = typeof props.onClick === \"function\";\n\n const renderContent = () => {\n if (\n status === AssetHistoryStatusEnum.PENDING &&\n count === 1 &&\n estimatedTime\n ) {\n return (\n <Text size=\"2xs\" color=\"primary\">\n ~ {estimatedTime}\n </Text>\n );\n }\n\n return <Badge>{props.count}</Badge>;\n };\n\n return (\n <Flex\n intensity={900}\n gapX={1}\n width=\"100%\"\n r=\"full\"\n className={cn(\n \"oui-px-3 lg:oui-px-0\",\n \"oui-py-2 lg:oui-py-0\",\n props.className,\n )}\n >\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-font-normal\",\n \"oui-text-base-contrast-80 hover:oui-text-base-contrast\",\n clickable && \"oui-cursor-pointer\",\n )}\n width=\"100%\"\n onClick={props.onClick}\n >\n <Flex gapX={1}>\n <Dot\n className={\n status === AssetHistoryStatusEnum.COMPLETED\n ? \"oui-bg-success\"\n : \"oui-bg-primary\"\n }\n />\n <Text size=\"2xs\">{content}</Text>\n </Flex>\n {renderContent()}\n </Flex>\n <CloseIcon\n size={14}\n opacity={1}\n className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n props.onClose(status);\n }}\n />\n </Flex>\n );\n};\n\nconst Badge: FC<{ className?: string; children: ReactNode }> = (props) => {\n return (\n <Flex\n justify=\"center\"\n itemAlign=\"center\"\n r=\"full\"\n width={18}\n height={18}\n className={cn(\"oui-bg-line-12\", props.className)}\n >\n <Text size=\"3xs\" intensity={80}>\n {props.children}\n </Text>\n </Flex>\n );\n};\n\nconst Dot: FC<{ className?: string }> = (props) => {\n return (\n <div\n className={cn(\n \"oui-mx-[5px] oui-size-2 oui-shrink-0 oui-rounded-full\",\n props.className,\n )}\n />\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useBalanceTopic,\n useDebouncedCallback,\n useLocalStorage,\n useTransferHistory,\n useWalletTopic,\n} from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@orderly.network/types\";\nimport { useTransactionTime } from \"../../contract/useTransactionTime\";\n\nexport type DepositStatusScriptReturn = ReturnType<\n typeof useDepositStatusScript\n>;\n\nfunction getTimeRange() {\n const endTime = Date.now();\n // 1 hour ago\n const startTime = endTime - 1000 * 60 * 60;\n\n return [startTime, endTime];\n}\n\nexport function useDepositStatusScript() {\n const [depositDataRange, setDepositDataRange] = useState(getTimeRange());\n const [transferDataRange, setTransferDataRange] = useState(getTimeRange());\n // only deposit have pending status\n const [depositPending, setDepositPending] = useState(0);\n const [depositCompleted, setDepositCompleted] = useState(0);\n const [transferCompleted, setTransferCompleted] = useState(0);\n const [pendingList, setPendingList] = useState<API.TransferHistoryRow[]>([]);\n\n const [hideNotificationTimeMap, setHideNotificationTimeMap] = useLocalStorage(\n \"orderly_deposit_status_hide_notification_time\",\n {\n [AssetHistoryStatusEnum.PENDING]: 0,\n [AssetHistoryStatusEnum.COMPLETED]: 0,\n },\n );\n\n const { state } = useAccount();\n\n const canTrade =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n const { chainId, blockTime } = useMemo(() => {\n if (canTrade && pendingList.length === 1) {\n return {\n chainId: pendingList[0].chain_id,\n blockTime: pendingList[0].block_time,\n };\n }\n\n return {\n chainId: undefined,\n blockTime: undefined,\n };\n }, [canTrade, pendingList]);\n\n const transactionTime = useTransactionTime(chainId);\n\n // Estimated time remaining = tx_block_time +(total confirmations x average block time) - current time\n const estimatedTime = useMemo(() => {\n if (transactionTime && blockTime) {\n const seconds = blockTime / 1000 + transactionTime - Date.now() / 1000;\n console.log(\"transactionTime\", transactionTime, seconds);\n return formatEstimatedTime(seconds);\n }\n\n return 0;\n }, [transactionTime, blockTime]);\n\n const [assetHistory, { isLoading }] = useAssetsHistory(\n {\n startTime: depositDataRange[0],\n endTime: depositDataRange[1],\n page: 1,\n pageSize: 200,\n side: \"DEPOSIT\",\n },\n {\n shouldUpdateOnWalletChanged: () => false,\n },\n );\n\n // pending and completed use one request to reduce api request, because assets history api limit 10 per 60s\n const [transferHistory] = useTransferHistory({\n dataRange: transferDataRange,\n side: \"IN\",\n size: 200,\n page: 1,\n main_sub_only: false,\n });\n\n // update time range when wallet and balance changed\n // because DEPOSIT and WITHDRAW will push twice COMPLETED event in a shorttime, so we need to debounce it\n // TODO: refresh one when push more than twice again\n const updateDepositTimeRange = useDebouncedCallback((data: any) => {\n setDepositDataRange(getTimeRange());\n }, 300);\n\n useWalletTopic({\n onMessage(data) {\n const { side, transStatus } = data;\n if (\n side === AssetHistorySideEnum.DEPOSIT &&\n (transStatus === AssetHistoryStatusEnum.PENDING ||\n transStatus === AssetHistoryStatusEnum.COMPLETED)\n ) {\n console.log(\"deposit status updated\", data);\n updateDepositTimeRange(data);\n }\n },\n });\n\n // update transfer time range when balance changed\n const updateTransferTimeRange = useDebouncedCallback((data: any) => {\n setTransferDataRange(getTimeRange());\n }, 300);\n\n useBalanceTopic({\n onMessage(data) {\n console.log(\"balance updated\", data);\n updateTransferTimeRange(data);\n },\n });\n\n useEffect(() => {\n if (!assetHistory || isLoading) {\n return;\n }\n const hidePendingNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.PENDING];\n\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n let pendingList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.PENDING,\n );\n\n if (hidePendingNotificationTime) {\n pendingList = pendingList.filter(\n (item) => item.created_time > hidePendingNotificationTime,\n );\n }\n\n let completedList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.COMPLETED,\n );\n\n if (hideCompletedNotificationTime) {\n completedList = completedList.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n );\n }\n\n setDepositPending(pendingList?.length || 0);\n setDepositCompleted(completedList?.length || 0);\n setPendingList(pendingList || []);\n }, [assetHistory, isLoading, hideNotificationTimeMap]);\n\n useEffect(() => {\n if (!transferHistory) {\n return;\n }\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n const completedList = hideCompletedNotificationTime\n ? transferHistory.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n )\n : transferHistory;\n\n setTransferCompleted(completedList.length);\n }, [transferHistory, hideNotificationTimeMap]);\n\n const completedCount = useMemo(() => {\n return depositCompleted + transferCompleted;\n }, [depositCompleted, transferCompleted]);\n\n const onClose = useCallback(\n (status: AssetHistoryStatusEnum) => {\n setHideNotificationTimeMap({\n ...hideNotificationTimeMap,\n [status]: Date.now(),\n });\n },\n [hideNotificationTimeMap],\n );\n\n return {\n pendingCount: depositPending,\n completedCount,\n canTrade,\n estimatedTime,\n onClose,\n };\n}\n\nfunction formatEstimatedTime(totalSeconds: number) {\n const sec = Math.max(30, totalSeconds);\n let minutes = Math.floor(sec / 60);\n let seconds = sec % 60;\n\n if (seconds > 0 && seconds <= 30) {\n seconds = 30;\n } else if (seconds > 30) {\n minutes += 1;\n seconds = 0;\n }\n\n if (minutes > 0) {\n return seconds > 0 ? `${minutes} m ${seconds} s` : `${minutes} m`;\n }\n\n return `${seconds} s`;\n\n // minutes = Math.max(1, Math.ceil(seconds / 60));\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChains, useWalletConnector } from \"@orderly.network/hooks\";\nimport { getBlockTime } from \"./getBlockTime\";\nimport { getChainConfirmations } from \"./getChainConfirmations\";\n\nexport const useTransactionTime = (chainId?: number | string) => {\n const [blockTime, setBlockTime] = useState(0);\n const [confirmations, setConfirmations] = useState(0);\n const timeMap = useRef<Record<string, number>>({});\n const confirmationsMap = useRef<Record<string, number>>({});\n\n const [, { findByChainId }] = useChains();\n const { wallet } = useWalletConnector();\n\n const chain = useMemo(() => {\n if (!chainId) {\n return;\n }\n const id = typeof chainId === \"number\" ? chainId : Number.parseInt(chainId);\n return findByChainId(id);\n }, [chainId, findByChainId]);\n\n useEffect(() => {\n if (!chain || !wallet) {\n return;\n }\n\n const chainId = chain.network_infos.chain_id;\n\n if (timeMap.current[chainId]) {\n setBlockTime(timeMap.current[chainId]);\n } else {\n getBlockTime({\n chainId,\n chain,\n wallet,\n })\n .then((time) => {\n console.log(\"average block time\", chainId, time);\n setBlockTime(time);\n // record chain block time\n timeMap.current[chainId] = time;\n })\n .catch((error) => {\n console.error(\"getBlockTime error\", error);\n });\n }\n\n if (confirmationsMap.current[chainId]) {\n setConfirmations(confirmationsMap.current[chainId]);\n } else {\n getChainConfirmations(chain)\n .then((confirmations) => {\n console.log(\"confirmations\", chainId, confirmations);\n setConfirmations(confirmations);\n // record chain confirmations\n confirmationsMap.current[chainId] = confirmations;\n })\n .catch((error) => {\n console.error(\"getChainConfirmations error\", error);\n });\n }\n }, [chain, wallet]);\n\n const transactionTime = useMemo(() => {\n if (blockTime && confirmations) {\n return blockTime * confirmations;\n }\n return 0;\n }, [blockTime, confirmations]);\n\n return transactionTime;\n};\n","import { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { isSolana } from \"@orderly.network/utils\";\nimport { getEvmBlockTime } from \"./getEvmBlockTime\";\nimport { getSolanaBlockTime } from \"./getSolanaBlockTime\";\n\n// https://tokenterminal.com/explorer/metrics/block-time\nexport async function getBlockTime(inputs: {\n chainId: number;\n chain: API.Chain;\n wallet: WalletState | null;\n}) {\n const { chainId, chain, wallet } = inputs;\n if (isSolana(chainId)) {\n return getSolanaBlockTime(chain, wallet);\n }\n return getEvmBlockTime(chain);\n}\n","import { ethers } from \"ethers\";\nimport type { API } from \"@orderly.network/types\";\n\nconst blockCount = 5;\n\nexport async function getEvmBlockTime(chain: API.Chain) {\n const provider = new ethers.JsonRpcProvider(\n chain.network_infos.public_rpc_url,\n );\n\n const latest = await provider.getBlockNumber();\n\n const blocks = await Promise.all(\n Array.from({ length: blockCount }, (_, i) => provider.getBlock(latest - i)),\n );\n\n const timestamps = blocks\n .filter((b) => b?.timestamp != null)\n .map((b) => Number(b?.timestamp));\n\n if (timestamps.length < 2) {\n return 0;\n }\n\n let sum = 0;\n for (let i = 0; i < timestamps.length - 1; i++) {\n const diff = timestamps[i] - timestamps[i + 1];\n sum += diff;\n }\n\n return sum / (timestamps.length - 1);\n}\n","import {\n DefaultSolanaWalletAdapter,\n SolanaWalletProvider,\n} from \"@orderly.network/default-solana-adapter\";\nimport { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport async function getSolanaBlockTime(\n chain: API.Chain,\n wallet: WalletState | null,\n) {\n if (!wallet) {\n return 0;\n }\n\n const walletAdapter = new DefaultSolanaWalletAdapter();\n\n walletAdapter.active({\n address: wallet.accounts[0].address,\n chain: { id: chain.network_infos.chain_id },\n provider: wallet.provider as SolanaWalletProvider,\n });\n\n // console.log(\"walletAdapter\", walletAdapter);\n\n // The Solana RPC node keeps a history of performance samples, typically for a few hours.\n // A limit of 60 samples gives us a good average over the last hour or so.\n const samples =\n await walletAdapter.connection.getRecentPerformanceSamples(60);\n\n let totalBlockTime = 0;\n let validSamples = 0;\n\n for (const sample of samples) {\n if (sample.numSlots > 0 && sample.samplePeriodSecs > 0) {\n const blockTime = sample.samplePeriodSecs / sample.numSlots;\n totalBlockTime += blockTime;\n validSamples++;\n }\n }\n\n return totalBlockTime / validSamples;\n}\n","import { ethers } from \"ethers\";\nimport { API } from \"@orderly.network/types\";\nimport getAppUlnConfigAbi from \"./abi/getAppUlnConfigAbi.json\";\nimport { getEndpointId } from \"./endpointId\";\n\n/**\n * no need to distinguish between EVM and SOL\n */\nexport async function getChainConfirmations(chain: API.Chain) {\n const chainId = chain.network_infos.chain_id;\n const isMainnet = chain.network_infos.mainnet;\n\n const publicRpcUrl = isMainnet\n ? \"https://rpc.orderly.network\"\n : \"https://testnet-rpc.orderly.org\";\n\n // mainnet: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=read_write_contract\n // testnet: https://testnet-explorer.orderly.org/address/0x3013C32e5F45E69ceA9baD4d96786704C2aE148c?tab=read_contract#39e3f938\n const contractAddress = isMainnet\n ? \"0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77\"\n : \"0x3013C32e5F45E69ceA9baD4d96786704C2aE148c\";\n\n const endpointId = getEndpointId(chainId);\n\n const address = \"0x0000000000000000000000000000000000000000\";\n\n const provider = new ethers.JsonRpcProvider(publicRpcUrl);\n\n const contract = new ethers.Contract(\n contractAddress,\n // full abi: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=contract_abi\n // this only need to use getAppUlnConfig abi, other functions are not needed\n getAppUlnConfigAbi,\n provider,\n );\n\n const result = await contract.getAppUlnConfig(address, endpointId);\n\n // console.log(\"getChainConfirmations\", chainId, result);\n\n return Number(result.confirmations || 0);\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_oapp\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_remoteEid\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getAppUlnConfig\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"confirmations\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"requiredDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNThreshold\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"requiredDVNs\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"optionalDVNs\",\n \"type\": \"address[]\"\n }\n ],\n \"internalType\": \"struct UlnConfig\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n]\n","/**\n * https://docs.layerzero.network/v2/deployments/deployed-contracts\n * Chain ID to Endpoint ID mapping for LayerZero V2\n *\n * This mapping contains all supported chains and their corresponding LayerZero Endpoint IDs.\n *\n * Endpoint ID ranges:\n * - 30xxx: Mainnet chains\n * - 40xxx: Testnet chains\n */\n\nexport const CHAIN_ID_TO_ENDPOINT_ID: Record<number | string, number> = {\n // Ethereum and L2s\n 1: 30101, // Ethereum Mainnet\n 10: 30111, // Optimism Mainnet\n 42161: 30110, // Arbitrum Mainnet\n 137: 30109, // Polygon Mainnet\n 8453: 30184, // Base Mainnet\n 59144: 30183, // Linea Mainnet\n 534352: 30214, // Scroll Mainnet\n 324: 30165, // zkSync Era Mainnet\n 1101: 30158, // Polygon zkEVM Mainnet\n 169: 30217, // Manta Pacific Mainnet\n 5000: 30181, // Mantle Mainnet\n 81457: 30243, // Blast Mainnet\n 252: 30255, // Fraxtal Mainnet\n 34443: 30260, // Mode Mainnet\n 167000: 30290, // Taiko Mainnet\n 7777777: 30195, // Zora Mainnet\n\n // Testnets\n 11155420: 40232, // Optimism Sepolia Testnet\n 421614: 40231, // Arbitrum Sepolia Testnet\n 84532: 40245, // Base Sepolia Testnet\n 300: 40305, // zkSync Sepolia Testnet\n 11155111: 40161, // Ethereum Sepolia Testnet\n 17000: 40217, // Ethereum Holesky Testnet\n\n // BNB Chain and related\n 56: 30102, // BNB Smart Chain (BSC) Mainnet\n 204: 30202, // opBNB Mainnet\n 97: 40102, // BNB Smart Chain (BSC) Testnet\n\n // Avalanche\n 43114: 30106, // Avalanche Mainnet\n 43113: 40106, // Avalanche Fuji Testnet\n\n // Fantom\n 250: 30112, // Fantom Mainnet\n\n // Gnosis\n 100: 30145, // Gnosis Mainnet\n\n // Celo\n 42220: 30125, // Celo Mainnet\n\n // Harmony\n 1666600000: 30116, // Harmony Mainnet\n\n // Cronos\n 25: 30359, // Cronos EVM Mainnet\n 388: 30360, // Cronos zkEVM Mainnet\n\n // Metis\n 1088: 30151, // Metis Mainnet\n\n // Moonbeam/Moonriver\n 1284: 30126, // Moonbeam Mainnet\n 1285: 30167, // Moonriver Mainnet\n\n // Astar\n 592: 30210, // Astar Mainnet\n 3776: 30257, // Astar zkEVM Mainnet\n\n // Canto\n 7700: 30159, // Canto Mainnet\n\n // Fuse\n 122: 30138, // Fuse Mainnet\n\n // Kava\n 2222: 30177, // Kava Mainnet\n\n // Meter\n 82: 30176, // Meter Mainnet\n\n // Near Aurora\n 1313161554: 30211, // Near Aurora Mainnet\n\n // DFK Chain\n 53935: 30115, // DFK Chain\n\n // DOS Chain\n 7979: 30149, // DOS Chain Mainnet\n\n // Degen\n 666666666: 30267, // Degen Mainnet\n\n // Dexalot Subnet\n 432204: 30118, // Dexalot Subnet Mainnet\n\n // Homeverse\n 19011: 30265, // Homeverse Mainnet\n\n // Horizen EON\n 7332: 30215, // Horizen EON Mainnet\n\n // Hubble\n 1992: 30182, // Hubble Mainnet\n\n // Tenet\n 1559: 30173, // Tenet Mainnet\n\n // TelosEVM\n 40: 30199, // TelosEVM Mainnet\n\n // Tiltyard\n 710420: 30238, // Tiltyard Mainnet\n\n // Viction\n 88: 30196, // Viction Mainnet\n\n // XPLA\n 37: 30216, // XPLA Mainnet\n\n // Xai\n 660279: 30236, // Xai Mainnet\n\n // re.al\n 111188: 30237, // re.al Mainnet\n\n // inEVM\n 2525: 30234, // inEVM Mainnet\n\n // Rari Chain\n 1380012617: 30235, // Rari Chain Mainnet\n\n // Shimmer\n 148: 30230, // Shimmer Mainnet\n\n // Skale\n 2046399126: 30273, // Skale Mainnet\n\n // Orderly\n 291: 30213, // Orderly Mainnet\n\n // CoreDAO\n 1116: 30153, // CoreDAO Mainnet\n\n // Conflux eSpace\n 1030: 30212, // Conflux eSpace Mainnet\n\n // Flare\n 14: 30295, // Flare Mainnet\n\n // Gravity\n 1625: 30294, // Gravity Mainnet\n\n // Japan Open Chain\n 81: 30285, // Japan Open Chain Mainnet\n\n // Kaia (formerly Klaytn)\n 8217: 30150, // Kaia Mainnet (formerly Klaytn)\n\n // OKX\n 66: 30155, // OKX Mainnet\n\n // Beam\n 4337: 30198, // Beam Mainnet\n\n // Loot\n 5151706: 30197, // Loot Mainnet\n\n // Lyra\n 957: 30311, // Lyra Mainnet\n\n // Morph\n 2818: 30322, // Morph Mainnet\n\n // Movement\n \"\": 30325, // Movement Mainnet (no chain ID)\n\n // Bouncebit\n 6001: 30293, // Bouncebit Mainnet\n\n // Cyber\n 7560: 30283, // Cyber Mainnet\n\n // Iota\n 8822: 30284, // Iota Mainnet\n\n // Sanko\n 1996: 30278, // Sanko Mainnet\n\n // Sei\n 1329: 30280, // Sei Mainnet\n\n // BOB\n 60808: 30279, // BOB Mainnet\n\n // Bahamut\n 5165: 30363, // Bahamut Mainnet\n\n // Animechain\n 69000: 30372, // Animechain Mainnet\n\n // Ape\n 33139: 30312, // Ape Mainnet\n\n // Berachain\n 80094: 30362, // Berachain Mainnet\n\n // Bevm\n 11501: 30317, // Bevm Mainnet\n\n // Bitlayer\n 200901: 30314, // Bitlayer Mainnet\n\n // Botanix\n 3637: 30376, // Botanix\n\n // Codex\n 81224: 30323, // Codex Mainnet\n\n // Concrete\n 12739: 30366, // Concrete\n\n // DM2 Verse\n 68770: 30315, // DM2 Verse Mainnet\n\n // EDU Chain\n 41923: 30328, // EDU Chain Mainnet\n\n // EVM on Flow\n 747: 30336, // EVM on Flow Mainnet\n\n // Etherlink\n 42793: 30292, // Etherlink Mainnet\n\n // Glue\n 1300: 30342, // Glue Mainnet\n\n // Goat\n 2345: 30361, // Goat Mainnet\n\n // Gunz\n 43419: 30371, // Gunz Mainnet\n\n // Hedera\n 295: 30316, // Hedera Mainnet\n\n // Hemi\n 43111: 30329, // Hemi Mainnet\n\n // HyperEVM\n 999: 30367, // HyperEVM Mainnet\n\n // Initia\n // \"\": 30326, // Initia Mainnet (no chain ID)\n\n // Ink\n 57073: 30339, // Ink Mainnet\n\n // Katana\n 747474: 30375, // Katana\n\n // Lens\n 232: 30373, // Lens Mainnet\n\n // Lightlink\n 1890: 30309, // Lightlink Mainnet\n\n // Lisk\n 1135: 30321, // Lisk Mainnet\n\n // Merlin\n 4200: 30266, // Merlin Mainnet\n\n // Nibiru\n 6900: 30369, // Nibiru Mainnet\n\n // Otherworld Space\n 8227: 30341, // Otherworld Space Mainnet\n\n // Peaq\n 3338: 30302, // Peaq Mainnet\n\n // Plume\n 98866: 30370, // Plume Mainnet\n\n // Reya\n 1729: 30313, // Reya Mainnet\n\n // Rootstock\n 30: 30333, // Rootstock Mainnet\n\n // Soneium\n 1868: 30340, // Soneium Mainnet\n\n // Sonic\n 146: 30332, // Sonic Mainnet\n\n // Sophon\n 50104: 30334, // Sophon Mainnet\n\n // Story\n 1514: 30364, // Story Mainnet\n\n // Subtensor EVM\n 964: 30374, // Subtensor EVM Mainnet\n\n // Superposition\n 55244: 30327, // Superposition Mainnet\n\n // Swell\n 1923: 30335, // Swell Mainnet\n\n // Tac\n 239: 30377, // Tac\n\n // TON\n // \"\": 30343, // TON Mainnet (no chain ID)\n\n // Unichain\n 130: 30320, // Unichain Mainnet\n\n // Vana\n 1480: 30330, // Vana Mainnet\n\n // Worldchain\n 480: 30319, // Worldchain Mainnet\n\n // X Layer\n 196: 30274, // X Layer Mainnet\n\n // XChain\n 94524: 30291, // XChain Mainnet\n\n // XDC\n 50: 30365, // XDC Mainnet\n\n // Zircuit\n 48900: 30303, // Zircuit Mainnet\n\n // zkLink\n 810180: 30301, // zkLink Mainnet\n\n // Abstract\n 2741: 30324, // Abstract Mainnet\n\n // Aptos (non-EVM)\n // 1: 30108, // Aptos Mainnet\n\n // Arbitrum Nova\n 42170: 30175, // Arbitrum Nova Mainnet\n\n // Corn\n 21000000: 30331, // Corn Mainnet\n\n // Initia Testnet\n // \"\": 40326, // Initia Testnet (no chain ID)\n\n // HyperEVM Testnet\n 998: 40362, // HyperEVM Testnet\n\n // Berachain Bepolia Testnet\n 80069: 40371, // Berachain Bepolia Testnet\n\n // Monad Testnet\n 10143: 40204, // Monad Testnet\n\n // Polygon Amoy Testnet\n 80002: 40267, // Polygon Amoy Testnet\n\n // Solana (non-EVM)\n 101: 30168, // Solana Mainnet\n 103: 40168, // Solana Devnet\n 900900900: 30168, // Solana Mainnet\n 901901901: 40168, // Solana Devnet\n\n // Tron\n 728126428: 30420, // Tron Mainnet\n 2494104990: 40420, // Tron Testnet\n};\n\n/**\n * Get Endpoint ID for a given Chain ID\n * @param chainId - The chain ID to look up\n * @returns The corresponding Endpoint ID or undefined if not found\n */\nexport function getEndpointId(chainId: number | string): number | undefined {\n return CHAIN_ID_TO_ENDPOINT_ID[chainId];\n}\n","import React from \"react\";\nimport { useDepositStatusScript } from \"./depostiStatus.script\";\nimport { DepositStatus, DepositStatusProps } from \"./depostiStatus.ui\";\n\nexport type DepositStatusWidgetProps = Pick<\n DepositStatusProps,\n \"className\" | \"onClick\"\n>;\n\nexport const DepositStatusWidget: React.FC<DepositStatusWidgetProps> = (\n props,\n) => {\n const state = useDepositStatusScript();\n return <DepositStatus {...state} {...props} />;\n};\n"]}