@kodiak-finance/orderly-ui-transfer 2.8.5 → 2.8.6
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 +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +13 -13
package/dist/index.mjs.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.ts","../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","Spinner","AvailableQuantity","amount","maxQuantity","token","name","dp","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","useIndexPricesStream","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","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","key","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","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","onSourceTokenChange","onTargetTokenChange","depositFeeRevalidating","balanceRevalidating","swapWarningMessage","onSlippageChange","userMaxQtyMessage","useDepositFee","collateralContributionQuantity","currentLTV","useCollateralValue","negative_usdc_threshold","isConvertThresholdLoading","useConvertThreshold","gasFeeMessage","targetQuantity","minimumReceived","tokenInfo","indexPrices","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","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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,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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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, Flex, textVariants, Text } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Tooltip, Text, Box } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button, ButtonProps } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-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 } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Spinner, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n return (\n <Flex px={2}>\n {amount !== undefined && (\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {amount}\n </Text.numeral>\n </Text>\n )}\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 \"@kodiak-finance/orderly-ui\";\nimport { useAppConfig } from \"@kodiak-finance/orderly-react-app\";\nimport { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 className=\"oui-h-[254px]\">\n <div>{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 \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Flex, Text, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Flex, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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(\"common.fee\")} ≈ `}\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 \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Input,\n Select,\n InputProps,\n cn,\n Box,\n Text,\n Flex,\n inputFormatter,\n Spinner,\n InputFormatter,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 = new Decimal(currentToken?.balance ?? 0).lt(\n value ? Number(value) : 0,\n );\n return {\n ...token,\n name: token.display_name || token.symbol!,\n insufficientBalance: 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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Badge, cn, Flex, Spinner, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n AlertDialog,\n Box,\n cn,\n EditIcon,\n Flex,\n Input,\n inputFormatter,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Text } from \"@kodiak-finance/orderly-ui\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { ChainSelectorDialogId } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Divider, Flex, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, WalletIcon } from \"@kodiak-finance/orderly-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 } from \"react\";\nimport {\n useAccount,\n useConfig,\n useComputedLTV,\n useDeposit,\n useIndexPrice,\n useIndexPricesStream,\n useQuery,\n useTokenInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { account as accountPerp } from \"@kodiak-finance/orderly-perp\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { API, NetworkId, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 { 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 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\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 indexPrice,\n } = useCollateralValue({\n tokens: sourceTokens,\n sourceToken,\n targetToken,\n qty: quantity,\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 const warningMessage =\n swapWarningMessage || userMaxQtyMessage || gasFeeMessage;\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}) => {\n const { sourceToken, targetToken } = params;\n\n const quantity = Number(params.qty);\n\n const { data: indexPrices } = useIndexPricesStream();\n\n const indexPrice = useMemo(() => {\n if (sourceToken?.symbol === \"USDC\") {\n return 1;\n }\n const symbol = `PERP_${sourceToken?.symbol}_USDC`;\n return indexPrices[symbol] ?? 0;\n }, [sourceToken?.symbol, indexPrices]);\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: 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: 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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n useScreen,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Box, toast } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Button,\n CheckedCircleFillIcon,\n CloseCircleFillIcon,\n cn,\n Divider,\n Flex,\n Spinner,\n Text,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Flex,\n Text,\n TokenIcon,\n Icon,\n Divider,\n Button,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-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","import { FC } from \"react\";\nimport { Trans } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Box, toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal, toNonExponential } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { int2hex, praseChainIdToNumber } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\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 toast.error(err.message || t(\"transfer.deposit.failed\"));\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 \"@kodiak-finance/orderly-i18n\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { NetworkId, type API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Flex,\n Text,\n textVariants,\n Tabs,\n TabPanel,\n WalletIcon,\n} from \"@kodiak-finance/orderly-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 <>\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.ltvWarningMessage}\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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button, modal } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-ui\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-ui\";\nimport { ChainSelectorDialogId } from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { useTranslation } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n NetworkId,\n} from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, int2hex, praseChainIdToNumber } from \"@kodiak-finance/orderly-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 (!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]);\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 minAmount = useMemo(() => {\n return sourceToken?.minimum_withdraw_amount ?? 0;\n }, [sourceToken]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n if (new Decimal(quantity).lt(minAmount)) {\n toast.error(\n t(\"transfer.withdraw.minAmount.error\", {\n minAmount,\n }),\n );\n return;\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 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 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\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 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 ltvWarningMessage,\n };\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n usePositionStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Button, Flex, textVariants, Text, cn } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@kodiak-finance/orderly-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 className=\"oui-h-[254px]\">\n <div>{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 \"@kodiak-finance/orderly-hooks\";\nimport { useTokensInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { registerSimpleSheet } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { account } from \"@kodiak-finance/orderly-perp\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { nativeETHAddress, nativeTokenAddress } from \"@kodiak-finance/orderly-types\";\nimport type { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { Arbitrum, type API, type NetworkId } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistoryStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex, cn, Text, CloseIcon } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport {\n AccountStatusEnum,\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { isSolana } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-default-solana-adapter\";\nimport { WalletState } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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.ts","../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","Spinner","AvailableQuantity","amount","maxQuantity","token","name","dp","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","useIndexPricesStream","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","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","key","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","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","onSourceTokenChange","onTargetTokenChange","depositFeeRevalidating","balanceRevalidating","swapWarningMessage","onSlippageChange","userMaxQtyMessage","useDepositFee","collateralContributionQuantity","currentLTV","useCollateralValue","negative_usdc_threshold","isConvertThresholdLoading","useConvertThreshold","gasFeeMessage","targetQuantity","minimumReceived","tokenInfo","indexPrices","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","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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T,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,QAA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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, Flex, textVariants, Text } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport type { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Tooltip, Text, Box } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button, ButtonProps } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-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 } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Spinner, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n return (\n <Flex px={2}>\n {amount !== undefined && (\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {amount}\n </Text.numeral>\n </Text>\n )}\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 \"@kodiak-finance/orderly-ui\";\nimport { useAppConfig } from \"@kodiak-finance/orderly-react-app\";\nimport { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"!oui-overflow-auto\",\n )}\n >\n <ScrollArea className=\"oui-h-[254px]\">\n <div>{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 \"@kodiak-finance/orderly-i18n\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Flex, Text, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Flex, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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(\"common.fee\")} ≈ `}\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 \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Input,\n Select,\n InputProps,\n cn,\n Box,\n Text,\n Flex,\n inputFormatter,\n Spinner,\n InputFormatter,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 = new Decimal(currentToken?.balance ?? 0).lt(\n value ? Number(value) : 0,\n );\n return {\n ...token,\n name: token.display_name || token.symbol!,\n insufficientBalance: 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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Badge, cn, Flex, Spinner, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n AlertDialog,\n Box,\n cn,\n EditIcon,\n Flex,\n Input,\n inputFormatter,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Text } from \"@kodiak-finance/orderly-ui\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { ChainSelectorDialogId } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Divider, Flex, modal, Text } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, WalletIcon } from \"@kodiak-finance/orderly-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 } from \"react\";\nimport {\n useAccount,\n useConfig,\n useComputedLTV,\n useDeposit,\n useIndexPrice,\n useIndexPricesStream,\n useQuery,\n useTokenInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { account as accountPerp } from \"@kodiak-finance/orderly-perp\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { API, NetworkId, ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 { 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 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\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 indexPrice,\n } = useCollateralValue({\n tokens: sourceTokens,\n sourceToken,\n targetToken,\n qty: quantity,\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 const warningMessage =\n swapWarningMessage || userMaxQtyMessage || gasFeeMessage;\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}) => {\n const { sourceToken, targetToken } = params;\n\n const quantity = Number(params.qty);\n\n const { data: indexPrices } = useIndexPricesStream();\n\n const indexPrice = useMemo(() => {\n if (sourceToken?.symbol === \"USDC\") {\n return 1;\n }\n const symbol = `PERP_${sourceToken?.symbol}_USDC`;\n return indexPrices[symbol] ?? 0;\n }, [sourceToken?.symbol, indexPrices]);\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: 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: 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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n useScreen,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Box, toast } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Button,\n CheckedCircleFillIcon,\n CloseCircleFillIcon,\n cn,\n Divider,\n Flex,\n Spinner,\n Text,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Flex,\n Text,\n TokenIcon,\n Icon,\n Divider,\n Button,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-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","import { FC } from \"react\";\nimport { Trans } from \"@kodiak-finance/orderly-i18n\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Box, toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { WS_WalletStatusEnum } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal, toNonExponential } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { int2hex, praseChainIdToNumber } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\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 toast.error(err.message || t(\"transfer.deposit.failed\"));\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 \"@kodiak-finance/orderly-i18n\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { NetworkId, type API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Flex,\n Text,\n textVariants,\n Tabs,\n TabPanel,\n WalletIcon,\n} from \"@kodiak-finance/orderly-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 <>\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.ltvWarningMessage}\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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button, modal } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-ui\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-ui\";\nimport { ChainSelectorDialogId } from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { useTranslation } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n NetworkId,\n} from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, int2hex, praseChainIdToNumber } from \"@kodiak-finance/orderly-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 (!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]);\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 minAmount = useMemo(() => {\n return sourceToken?.minimum_withdraw_amount ?? 0;\n }, [sourceToken]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n if (new Decimal(quantity).lt(minAmount)) {\n toast.error(\n t(\"transfer.withdraw.minAmount.error\", {\n minAmount,\n }),\n );\n return;\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 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 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\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 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 ltvWarningMessage,\n };\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n usePositionStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { modal } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { Box, Button, Flex, textVariants, Text, cn } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@kodiak-finance/orderly-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 className=\"oui-h-[254px]\">\n <div>{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 \"@kodiak-finance/orderly-hooks\";\nimport { useTokensInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal, zero } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { registerSimpleSheet } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { Box, Button } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { account } from \"@kodiak-finance/orderly-perp\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { nativeETHAddress, nativeTokenAddress } from \"@kodiak-finance/orderly-types\";\nimport type { API, NetworkId } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { Arbitrum, type API, type NetworkId } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-i18n\";\nimport { AssetHistoryStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex, cn, Text, CloseIcon } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport {\n AccountStatusEnum,\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { isSolana } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-default-solana-adapter\";\nimport { WalletState } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-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 \"@kodiak-finance/orderly-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"]}
|