@kodiak-finance/orderly-ui-transfer 2.8.18 → 2.8.19
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.d.mts +167 -24
- package/dist/index.d.ts +167 -24
- package/dist/index.js +8932 -50
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8888 -7
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +13 -13
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/depositForm/depositForm.ui.tsx","../src/components/LTV/ltv.script.tsx","../src/components/LTV/ltv.ui.tsx","../src/components/LTV/ltv.widget.tsx","../src/components/actionButton/index.tsx","../src/types.ts","../src/components/availableQuantity/index.tsx","../src/components/brokerWallet/index.tsx","../src/components/chainSelect/index.tsx","../src/icons.tsx","../src/components/collateralContribution/index.tsx","../src/components/collateralRatio/collateralRatio.ui.tsx","../src/components/collateralRatio/collateralRatio.widget.tsx","../src/components/exchangeDivider/index.tsx","../src/components/fee/index.tsx","../src/components/minimumReceived/index.tsx","../src/components/quantityInput/index.tsx","../src/components/quantityInput/tokenOption.tsx","../src/components/quantityInput/useBalance.ts","../src/components/slippage/index.tsx","../src/components/swap/components/notice.tsx","../src/components/swap/components/swapFee.tsx","../src/components/swapCoin/index.tsx","../src/components/swapIndicator/index.tsx","../src/components/swap/icons.tsx","../src/components/web3Wallet/index.tsx","../src/components/depositForm/depositForm.script.tsx","../src/components/swap/hooks/useNeedSwapAndCross.ts","../src/components/swap/hooks/useSwapDeposit.tsx","../src/components/swap/components/swapDialog.tsx","../src/components/swap/components/crossSwap.tsx","../src/components/swap/hooks/useCrossSwap.ts","../src/components/swap/constants.ts","../src/components/swap/components/processStatus.tsx","../src/components/swap/components/swapDetail.tsx","../src/utils.ts","../src/components/swap/components/viewFAQs.tsx","../src/components/swap/components/singleSwap.tsx","../src/components/swap/hooks/useSwap.ts","../src/components/swap/components/swap.tsx","../src/components/swap/hooks/useSwapEnquiry.ts","../src/components/swap/hooks/useCrossSwapQuery.ts","../src/components/swap/hooks/useSwapQuery.ts","../src/components/swap/hooks/useSwapFee.ts","../src/components/depositForm/hooks/useActionType.ts","../src/components/depositForm/hooks/useChainSelect.ts","../src/components/depositForm/hooks/useDepositAction.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"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/depositForm/depositForm.ui.tsx","../src/components/LTV/ltv.script.tsx","../src/components/LTV/ltv.ui.tsx","../src/components/icons/tooltipIcon.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/constants/yieldBearingAssets.ts","../src/components/depositForm/hooks/useYieldAPY.ts","../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/yieldBearingReminder/baseReminder.tsx","../src/components/yieldBearingReminder/deUsdReminder.tsx","../src/components/yieldBearingReminder/yusdReminder.tsx","../src/components/yieldBearingReminder/yieldBearingReminder.tsx","../src/components/depositForm/depositForm.script.tsx","../src/components/swap/hooks/useNeedSwapAndCross.ts","../src/components/swap/hooks/useSwapDeposit.tsx","../src/components/swap/components/swapDialog.tsx","../src/components/swap/components/crossSwap.tsx","../src/components/swap/hooks/useCrossSwap.ts","../src/components/swap/constants.ts","../src/components/swap/components/processStatus.tsx","../src/components/swap/components/swapDetail.tsx","../src/utils.ts","../src/components/swap/components/viewFAQs.tsx","../src/components/swap/components/singleSwap.tsx","../src/components/swap/hooks/useSwap.ts","../src/components/swap/components/swap.tsx","../src/components/swap/hooks/useSwapEnquiry.ts","../src/components/swap/hooks/useCrossSwapQuery.ts","../src/components/swap/hooks/useSwapQuery.ts","../src/components/swap/hooks/useSwapFee.ts","../src/components/depositForm/hooks/useActionType.ts","../src/components/depositForm/hooks/useChainSelect.ts","../src/components/depositForm/hooks/useDepositAction.tsx","../src/components/depositForm/hooks/useInputStatus.ts","../src/components/depositForm/hooks/useNativeBalance.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/useVaultBalance.tsx","../src/components/withdrawForm/hooks/useWithdrawAccountId.ts","../src/components/withdrawForm/hooks/useWithdrawFee.ts","../src/components/withdrawForm/hooks/useWithdrawLTV.tsx","../src/components/withdrawForm/hooks/useWithdrawToken.ts","../src/components/withdrawForm/withdrawForm.widget.tsx","../src/components/depositAndWithdraw/index.tsx","../src/components/depositAndWithdraw/depositSlot.tsx","../src/components/depositAndWithdraw/withdrawSlot.tsx","../src/components/swap/swapDepositForm/swapDepositForm.ui.tsx","../src/components/swap/swapDepositForm/swapDepositForm.script.tsx","../src/components/swap/hooks/useToken.ts","../src/components/swap/swapDepositForm/swapDepositForm.widget.tsx","../src/components/transferForm/transferForm.ui.tsx","../src/components/accountSelect/index.tsx","../src/components/transferForm/transferForm.script.tsx","../src/components/transferForm/transferForm.widget.tsx","../src/components/convertForm/convertForm.ui.tsx","../src/components/convertAction/index.tsx","../src/components/convertForm/convertForm.script.tsx","../src/components/convertForm/hooks/useToken.ts","../src/components/convertForm/convertForm.widget.tsx","../src/components/depostiStatus/depostiStatus.ui.tsx","../src/components/depostiStatus/depostiStatus.script.ts","../src/contract/useTransactionTime.ts","../src/contract/getBlockTime.ts","../src/contract/getEvmBlockTime.ts","../src/contract/getSolanaBlockTime.ts","../src/contract/getChainConfirmations.ts","../src/contract/abi/getAppUlnConfigAbi.json","../src/contract/endpointId.ts","../src/components/depostiStatus/depostiStatus.widget.tsx"],"names":["useTranslation","Box","Flex","Text","TokenIcon","Tooltip","modal","useScreen","jsx","useMemo","DepositAction","WithdrawTo","Decimal","jsxs","Spinner","cn","TooltipContent","useEffect","useRef","useState","Badge","balance","Fragment","token","value","item","Input","inputFormatter","account","address","Trans","useCallback","useAccount","useConfig","useIndexPrice","useIndexPricesStream","useQuery","isNativeTokenChecker","options","useEventEmitter","WS_WalletStatusEnum","status","Button","Divider","createElement","markPrice","toast","pick","utils","useAccountInstance","useBoolean","useLocalStorage","useWalletConnector","nativeTokenAddress","retryInterval","collateralRatio","textVariants","WalletIcon","AccountStatusEnum","AuthGuard","ChainIcon","ChainSelectorDialogId","useChains","useMemoizedFn","useWithdraw","useAppContext","useAuthGuard","int2hex","praseChainIdToNumber","toNonExponential","useTokenInfo","useComputedLTV","useConvertThreshold","TabPanel","Tabs","ExtensionPositionEnum","ExtensionSlot","useDeposit","useToken","tokens","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","ScrollArea","state","useInputStatus","i18n","registerSimpleDialog","registerSimpleSheet","useTokensInfo","calcMinimumReceived","AssetHistoryStatusEnum","useAssetsHistory","useDebouncedCallback","useWalletTopic","AssetHistorySideEnum","ethers","chainId","confirmations","pendingList"],"mappings":"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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Flex,\n InfoCircleIcon,\n textVariants,\n Text,\n TokenIcon,\n CaretDownIcon,\n Tooltip,\n modal,\n useScreen,\n} 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 { YieldBearingReminder } from \"../yieldBearingReminder\";\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 maxDepositAmount,\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 showRegularTokenRenderer =\n sourceToken?.user_max_qty !== undefined && sourceToken?.user_max_qty === -1;\n\n const { isMobile } = useScreen();\n\n const renderDepositCapTooltipContent = (tokenLabel: string) => (\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text size=\"2xs\" weight=\"semibold\" intensity={36}>\n {t(\"transfer.depositCap.tooltip\")}\n <Text as=\"span\" size=\"2xs\" weight=\"semibold\" intensity={80}>\n {tokenLabel}.\n </Text>\n </Text>\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral#max-deposits-user\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-text-2xs oui-text-primary\"\n >\n {t(\"common.learnMore\")}\n </a>\n </Flex>\n );\n\n const tokenValueFormatter = (value: string) => (\n <Flex direction=\"column\" itemAlign=\"end\" gapY={1}>\n <Flex gapX={1} itemAlign=\"center\">\n <TokenIcon name={value} className=\"oui-size-[16px]\" />\n <Text weight=\"semibold\" intensity={54}>\n {value}\n </Text>\n <CaretDownIcon\n size={12}\n className=\"oui-text-base-contrast-54\"\n opacity={1}\n />\n </Flex>\n <Flex itemAlign=\"center\" className=\"oui-gap-[2px]\">\n <Text\n size=\"2xs\"\n intensity={36}\n weight=\"regular\"\n className=\"oui-leading-[10px]\"\n >\n {t(\"transfer.depositCap\", \"Deposit cap\")}{\" \"}\n <Text.numeral\n as=\"span\"\n size=\"2xs\"\n intensity={80}\n weight=\"regular\"\n className=\"oui-leading-[10px]\"\n dp={0}\n >\n {sourceToken?.user_max_qty?.toString() || \"0\"}\n </Text.numeral>\n </Text>\n {isMobile ? (\n <button\n type=\"button\"\n className=\"oui-flex oui-items-center\"\n onClick={(event) => {\n event.stopPropagation();\n modal.alert({\n title: t(\"common.tips\"),\n message: <Box>{renderDepositCapTooltipContent(value)}</Box>,\n });\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n >\n <InfoCircleIcon\n className=\"oui-size-3 oui-shrink-0 oui-cursor-pointer\"\n opacity={0.36}\n />\n </button>\n ) : (\n <Tooltip\n content={\n <Box\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n >\n {renderDepositCapTooltipContent(value)}\n </Box>\n }\n >\n <InfoCircleIcon\n className=\"oui-size-3 oui-shrink-0 oui-cursor-pointer\"\n opacity={0.36}\n />\n </Tooltip>\n )}\n </Flex>\n </Flex>\n );\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} nativeSymbol={props.nativeSymbol} />\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 disabled={!props.isLoggedIn}\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 tokenBalances={props.tokenBalances}\n tokenShowCaret={showRegularTokenRenderer}\n tokenValueFormatter={\n showRegularTokenRenderer ? undefined : tokenValueFormatter\n }\n data-testId=\"oui-testid-deposit-dialog-quantity-input\"\n disabled={!props.isLoggedIn}\n />\n </Box>\n\n <AvailableQuantity\n token={sourceToken}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxDepositAmount);\n }}\n />\n\n {/* Yield-bearing collateral reminder */}\n <YieldBearingReminder\n symbol={targetToken?.symbol}\n className=\"oui-mt-3\"\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 disabled={!props.isLoggedIn}\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 { TooltipIcon } from \"../icons/tooltipIcon\";\nimport type { LtvScriptReturns } from \"./ltv.script\";\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 { forwardRef } from \"react\";\n\nexport const TooltipIcon = 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","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, useMemo } from \"react\";\nimport {\n useIndexPricesStream,\n useWithdraw,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport {\n Flex,\n Spinner,\n Text,\n Tooltip,\n modal,\n useScreen,\n} 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 tooltipContent?: React.ReactNode;\n};\n\ntype AvailableTooltipMessageProps = {\n tokenSymbol?: string;\n decimals?: number;\n};\n\nconst AvailableTooltipMessage: FC<AvailableTooltipMessageProps> = ({\n tokenSymbol,\n decimals,\n}) => {\n const { t } = useTranslation();\n const { maxAmount } = useWithdraw({\n token: tokenSymbol,\n decimals,\n });\n\n const amountText = useMemo(() => {\n if (maxAmount === undefined || maxAmount === null) return \"--\";\n return maxAmount.toString();\n }, [maxAmount]);\n\n return (\n <Text size=\"2xs\" intensity={80}>\n {t(\"transfer.withdraw.available.tooltip\", { amount: amountText })}\n </Text>\n );\n};\n\nexport const AvailableQuantity: FC<AvailableQuantityProps> = (props) => {\n const { amount, maxQuantity, token, loading } = props;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const { getIndexPrice } = useIndexPricesStream();\n\n const name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n const notional = useMemo(() => {\n if (amount && token?.symbol && getIndexPrice(token?.symbol)) {\n return new Decimal(amount)\n .mul(getIndexPrice(token?.symbol) || 1)\n .toNumber();\n }\n return 0;\n }, [amount, token?.symbol]);\n\n return (\n <Flex px={2}>\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {notional}\n </Text.numeral>\n </Text>\n\n <Flex gapX={2} itemAlign=\"center\" className=\"oui-ml-auto\">\n <Flex gapX={1} itemAlign=\"center\">\n {props.tooltipContent ? (\n isMobile ? (\n <button\n type=\"button\"\n className=\"oui-p-0\"\n onClick={() => {\n if (token?.symbol) {\n const anyToken = token as any;\n modal.alert({\n title: t(\"common.tips\"),\n message: (\n <AvailableTooltipMessage\n tokenSymbol={token.symbol}\n decimals={\n anyToken?.token_decimal ??\n token.decimals ??\n token.precision\n }\n />\n ),\n });\n } else {\n modal.alert({\n title: t(\"common.tips\"),\n message: props.tooltipContent,\n });\n }\n }}\n >\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n >\n {`${t(\"common.available\")}: `}\n </Text>\n </button>\n ) : (\n <Tooltip\n content={props.tooltipContent}\n className=\"oui-max-w-[274px]\"\n >\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n >\n {`${t(\"common.available\")}: `}\n </Text>\n </Tooltip>\n )\n ) : (\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"common.available\")}: `}\n </Text>\n )}\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 Badge,\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 disabled?: boolean;\n};\n\nexport const ChainSelect: React.FC<ChainSelectProps> = (props) => {\n const { chains, value, wrongNetwork, loading, disabled } = 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 currentChain = chains.find((chain) => chain.chain_id === value?.id);\n const extendedCurrentChain = currentChain as API.NetworkInfos & {\n isSupported?: boolean;\n };\n const isCurrentChainSupported =\n !currentChain || extendedCurrentChain?.isSupported !== false;\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 disabled\n ? \"oui-cursor-not-allowed\"\n : selectable\n ? \"oui-cursor-pointer\"\n : \"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} itemAlign=\"center\">\n {chainIcon}\n <Text size=\"sm\" intensity={80}>\n {chainName}\n </Text>\n {!isCurrentChainSupported && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.notSupported\")}\n </Badge>\n )}\n </Flex>\n </div>\n {renderRightIcon()}\n </Flex>\n );\n\n const content = chains.map((chain, index) => {\n const extendedChain = chain as API.NetworkInfos & {\n isSupported?: boolean;\n };\n const isActive = chain.chain_id === value?.id;\n const isSupported = extendedChain.isSupported !== false;\n return (\n <Flex\n key={chain.chain_id}\n px={2}\n r=\"base\"\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-deposit-network-select-item\",\n \"oui-h-[30px]\",\n isSupported\n ? \"hover:oui-bg-base-5 oui-cursor-pointer\"\n : \"oui-cursor-not-allowed\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n if (!isSupported) return;\n setOpen(false);\n await props.onValueChange(chain);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <ChainIcon\n className={cn(\"oui-size-[18px]\", !isSupported && \"oui-opacity-50\")}\n chainId={chain.chain_id}\n />\n <Text size=\"2xs\" intensity={isSupported ? 54 : 36}>\n {chain.name}\n </Text>\n {!isSupported && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.notSupported\")}\n </Badge>\n )}\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 disabled={disabled} asChild>\n {trigger}\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-deposit-token-select-dropdown-menu-content\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-rounded-md oui-select-none\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content}</div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import React, { FC, SVGProps } from \"react\";\n\nexport const ExchangeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10.997 8.004a.5.5 0 0 0-.14-.36l-1.86-1.843-.703.703.984 1h-7.28a.5.5 0 0 0 0 1h7.28l-.984 1 .703.703 1.86-1.844a.5.5 0 0 0 .14-.36m-.5-4a.5.5 0 0 0-.5-.5H2.716l.984-1-.703-.703-1.859 1.843a.515.515 0 0 0 0 .719l1.86 1.844.702-.703-.984-1h7.281a.5.5 0 0 0 .5-.5\" />\n </svg>\n);\n\nexport const ArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M9.994 5.51a.83.83 0 0 0-.832.833v6.295l-2.498-2.471-1.17 1.17 3.902 3.929a.84.84 0 0 0 .599.244.84.84 0 0 0 .597-.244l3.903-3.928-1.171-1.171-2.498 2.471V6.343a.83.83 0 0 0-.832-.833\" />\n </svg>\n);\n\nexport const SelectArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2.503 3.332a.412.412 0 0 0-.326.664l2.5 3.333a.414.414 0 0 0 .664 0l2.5-3.333a.417.417 0 0 0-.338-.664z\" />\n </svg>\n);\n\nexport const RefreshIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.00342 1.49561C4.97642 1.49561 3.99542 1.84011 3.20642 2.46461C2.98992 2.63561 2.95692 2.9511 3.12842 3.1676C3.29992 3.3841 3.61492 3.4171 3.83142 3.2456C4.44492 2.7601 5.20392 2.4956 6.00342 2.4956C7.93642 2.4956 9.50342 4.0626 9.50342 5.9956H8.50342L10.0034 7.9956L11.5034 5.9956H10.5034C10.5034 3.5101 8.48892 1.49561 6.00342 1.49561ZM2.00342 3.9956L0.503418 5.9956H1.50342C1.50342 8.4811 3.51792 10.4956 6.00342 10.4956C7.03092 10.4956 8.01142 10.1516 8.80042 9.52659C9.01692 9.35559 9.04992 9.0401 8.87842 8.8236C8.70692 8.6071 8.39191 8.5741 8.17542 8.7456C7.56142 9.2316 6.80342 9.4956 6.00342 9.4956C4.07042 9.4956 2.50342 7.9286 2.50342 5.9956H3.50342L2.00342 3.9956Z\" />\n </svg>\n);\n\nexport const TransferVerticalIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M12.385 4.565a.6.6 0 0 0-.427.167L9.764 6.944l.837.837 1.19-1.17v8.66a.595.595 0 0 0 1.19 0v-8.66l1.189 1.17.836-.837-2.193-2.212a.6.6 0 0 0-.428-.167m-4.758.595a.595.595 0 0 0-.595.595v8.661l-1.19-1.17-.836.836L7.2 16.294a.61.61 0 0 0 .855 0l2.194-2.212-.837-.836-1.19 1.17V5.755a.595.595 0 0 0-.594-.595\" />\n </svg>\n);\n","import React from \"react\";\nimport { useTranslation } from \"@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\";\nimport { TooltipIcon } from \"../icons/tooltipIcon\";\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\ntype FeeProps = Partial<UseDepositFeeReturn> & {\n nativeSymbol?: string;\n};\n\nexport const Fee: FC<FeeProps> = (props) => {\n const { dstGasFee, feeQty, feeAmount, dp, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={1}>\n <Text size=\"2xs\" intensity={54}>\n {`${t(\"transfer.deposit.destinationGasFee\")}: `}\n </Text>\n <Text.numeral\n intensity={80}\n dp={dp}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {feeQty!}\n </Text.numeral>\n <Text intensity={54}>{nativeSymbol}</Text>\n </Flex>\n <Box mt={2}>\n <Text intensity={36}>\n {t(\"transfer.deposit.destinationGasFee.description\")}\n </Text>\n </Box>\n </div>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const showFeeQty = !!dstGasFee && dstGasFee !== \"0\";\n\n return (\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\"\n onClick={onShowFee}\n >\n {`${t(\"transfer.deposit.estGasFee\")} ≈ `}\n <Text size=\"2xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount!}\n </Text.numeral>{\" \"}\n </Text>\n {showFeeQty && (\n <span>\n (\n <Text intensity={54}>\n <Text.numeral dp={dp} padding={false} rm={Decimal.ROUND_UP}>\n {feeQty!}\n </Text.numeral>\n {nativeSymbol}\n </Text>\n )\n </span>\n )}\n </Text>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@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, ReactNode, 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 hintSuffix?: ReactNode;\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 tokenBalances?: Record<string, string>;\n tokenValueFormatter?: (value: string) => ReactNode;\n tokenShowCaret?: boolean;\n} & Omit<InputProps, \"onClear\" | \"suffix\" | \"onValueChange\">;\n\nexport const QuantityInput: FC<QuantityInputProps> = (props) => {\n const {\n token,\n tokens = [],\n classNames,\n label,\n status,\n hintMessage,\n hintSuffix,\n value,\n onValueChange,\n fetchBalance,\n onTokenChange,\n loading,\n placeholder,\n formatters,\n vaultBalanceList,\n displayType,\n tokenBalances,\n tokenValueFormatter,\n tokenShowCaret,\n ...rest\n } = props;\n\n const { t } = useTranslation();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n\n const tokenOptions = useMemo(() => {\n return tokens.map((token) => {\n const currentToken = vaultBalanceList?.find(\n (item) => item.token === token.symbol,\n );\n const insufficientBalance = currentToken\n ? new Decimal(currentToken.balance ?? 0).lt(value ? Number(value) : 0)\n : false;\n return {\n ...token,\n name: token.display_name || token.symbol!,\n insufficientBalance,\n balance: tokenBalances?.[token.symbol!],\n };\n });\n }, [tokens, value, vaultBalanceList, tokenBalances]);\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 valueFormatter={tokenValueFormatter}\n showCaret={tokenShowCaret}\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} justify=\"between\" itemAlign=\"center\">\n <Flex gapX={1} itemAlign=\"center\">\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 {hintSuffix && (\n <Box className=\"oui-flex oui-items-center oui-gap-1\">{hintSuffix}</Box>\n )}\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 inputMode=\"decimal\"\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 {\n Badge,\n Box,\n cn,\n Flex,\n Spinner,\n Text,\n TokenIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { isYieldBearingAsset } from \"../../constants/yieldBearingAssets\";\nimport { useYieldAPY } from \"../depositForm/hooks/useYieldAPY\";\nimport { useBalance } from \"./useBalance\";\n\ninterface TokenOptionProps {\n token: API.TokenInfo & {\n label: string;\n value: string;\n insufficientBalance?: boolean;\n balance?: string;\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 const { apy } = useYieldAPY(symbol);\n\n const showBalance = typeof fetchBalance === \"function\";\n const showAPY = isYieldBearingAsset(symbol) && apy !== null;\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 && !token.balance) {\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 || token.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} itemAlign=\"center\">\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 {showAPY && (\n <Box\n height={18}\n px={2}\n r=\"sm\"\n className=\"oui-rounded-[4px] oui-bg-success/[0.15]\"\n >\n <Text size=\"2xs\" className=\"oui-text-success\">\n {apy!.toFixed(1)}% APY\n </Text>\n </Box>\n )}\n </Flex>\n {renderValue()}\n </Flex>\n );\n};\n","/**\n * Yield-bearing collateral assets configuration\n * These assets earn APY rewards while being used as collateral for trading\n */\n\nexport interface YieldBearingAsset {\n /** Asset symbol (e.g., \"YUSD\", \"deUSD\") */\n symbol: string;\n /** Asset display name */\n displayName: string;\n /** API endpoint to fetch APY data */\n apyApiUrl: string;\n /** Path to extract APY value from API response (e.g., \"data.efficient_apr\") */\n apyPath: string;\n /** External link to the asset issuer's website */\n externalUrl: string;\n}\n\n/**\n * Configuration for all supported yield-bearing assets\n * Chain support is determined by the backend API (/v1/public/token)\n * via the chain_details array for each token\n */\nexport const YIELD_BEARING_ASSETS: YieldBearingAsset[] = [\n {\n symbol: \"YUSD\",\n displayName: \"YUSD\",\n apyApiUrl: \"https://api.aegis.im/api/project-stats\",\n apyPath: \"data.efficient_apr\",\n externalUrl: \"https://aegis.im/\",\n },\n {\n symbol: \"deUSD\",\n displayName: \"deUSD\",\n apyApiUrl: \"https://api-deusd-prod-public.elixir.xyz/public/deusd_apy\",\n apyPath: \"deusd_apy\",\n externalUrl: \"https://www.elixir.xyz/deusd\",\n },\n];\n\n/**\n * Check if a token is a yield-bearing asset\n * Note: This only checks if the token symbol is configured as yield-bearing.\n * Chain availability is determined by the backend API's chain_details.\n *\n * @param symbol - Token symbol to check\n * @returns true if the token is configured as yield-bearing\n */\nexport function isYieldBearingAsset(symbol?: string): boolean {\n if (!symbol) return false;\n return YIELD_BEARING_ASSETS.some(\n (asset) => asset.symbol.toLowerCase() === symbol.toLowerCase(),\n );\n}\n\n/**\n * Get yield-bearing asset configuration by symbol\n */\nexport function getYieldBearingAsset(\n symbol?: string,\n): YieldBearingAsset | undefined {\n if (!symbol) return undefined;\n return YIELD_BEARING_ASSETS.find(\n (asset) => asset.symbol.toLowerCase() === symbol.toLowerCase(),\n );\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { getYieldBearingAsset } from \"../../../constants/yieldBearingAssets\";\n\nexport interface YieldAPYData {\n /** APY value in percentage (e.g., 8.5 for 8.5%) */\n apy: number | null;\n /** Whether the APY data is currently loading */\n loading: boolean;\n /** Error message if failed to fetch APY */\n error: string | null;\n /** External URL to the asset issuer's website */\n externalUrl: string | null;\n}\n\n/**\n * Hook to fetch and manage APY data for yield-bearing assets\n * @param symbol - Token symbol to fetch APY for\n * @returns APY data including value, loading state, and error\n */\nexport function useYieldAPY(symbol?: string): YieldAPYData {\n const [apy, setApy] = useState<number | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const assetConfig = getYieldBearingAsset(symbol);\n\n const fetchAPY = useCallback(async () => {\n if (!assetConfig) {\n setApy(null);\n setError(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10s timeout\n\n const response = await fetch(assetConfig.apyApiUrl, {\n signal: controller.signal,\n headers: {\n Accept: \"application/json\",\n },\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n\n // Extract APY value using the path from config\n const apyValue = getNestedValue(data, assetConfig.apyPath);\n\n if (typeof apyValue === \"number\" && !isNaN(apyValue)) {\n setApy(apyValue);\n setError(null);\n } else {\n throw new Error(\"Invalid APY data format\");\n }\n } catch (err) {\n console.error(`[useYieldAPY] Failed to fetch APY for ${symbol}:`, err);\n\n // CRITICAL FIX: Clear APY data when fetch fails\n // This prevents showing stale data from previous token\n setApy(null);\n\n if (err instanceof Error) {\n if (err.name === \"AbortError\") {\n setError(\"timeout\");\n } else {\n setError(err.message);\n }\n } else {\n setError(\"unknown_error\");\n }\n } finally {\n setLoading(false);\n }\n }, [symbol, assetConfig]);\n\n // Fetch APY when symbol changes\n useEffect(() => {\n // CRITICAL FIX: Clear APY immediately when symbol changes\n // This prevents showing stale data during the transition\n setApy(null);\n setError(null);\n\n if (assetConfig?.symbol === \"deUSD\") {\n fetchAPY();\n } else {\n setLoading(false);\n }\n }, [assetConfig, fetchAPY]);\n\n return {\n apy,\n loading,\n error,\n externalUrl: assetConfig?.externalUrl || null,\n };\n}\n\n/**\n * Helper function to extract nested value from object using dot notation path\n * e.g., \"data.efficient_apr\" => obj.data.efficient_apr\n */\nfunction getNestedValue(obj: any, path: string): any {\n return path.split(\".\").reduce((current, key) => {\n return current?.[key];\n }, obj);\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 inputMode=\"decimal\"\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, ReactNode, 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 | ReactNode;\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 { FC } from \"react\";\nimport { Trans, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { TooltipIcon } from \"../icons/tooltipIcon\";\n\nexport interface BaseReminderProps {\n /** APY value in percentage (e.g., 8.5 for 8.5%) */\n apy: number | null;\n /** Whether the APY data is currently loading */\n loading: boolean;\n /** External URL to the asset issuer's website */\n externalUrl: string | null;\n /** Additional CSS class name */\n className?: string;\n /** Theme configuration */\n // theme: ReminderTheme;\n /** Test ID for the component */\n testId?: string;\n}\n\n/**\n * Base Yield Reminder Component\n * Generic reminder component that renders based on provided theme configuration\n * Used by YUSD and deUSD specific components\n */\nexport const BaseReminder: FC<BaseReminderProps> = ({\n apy,\n loading,\n externalUrl,\n className,\n testId,\n}) => {\n const { t } = useTranslation();\n const formattedAPY = apy !== null ? apy.toFixed(1) : null;\n\n return (\n <Box\n className={cn(\n \"oui-border-[0.5px] oui-border-primary oui-bg-primary/[0.12]\",\n className,\n )}\n px={3}\n py={2}\n r=\"lg\"\n width=\"100%\"\n >\n <Flex direction=\"column\" itemAlign=\"start\">\n {formattedAPY !== null ? (\n <Text size=\"sm\" intensity={98}>\n <Trans\n i18nKey=\"transfer.deposit.yieldReminder.earnAPY\"\n values={{ apy: formattedAPY }}\n components={[<span className=\"oui-text-success\" key=\"0\" />]}\n />\n </Text>\n ) : (\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.deposit.yieldReminder.earnRewards\")}\n </Text>\n )}\n <Text size=\"2xs\" intensity={54} className=\"oui-font-normal\">\n {t(\"transfer.deposit.yieldReminder.distribution\")}\n </Text>\n </Flex>\n\n <Flex justify=\"between\" itemAlign=\"center\" mt={3}>\n {/* Disclaimer - only show when APY is available */}\n {formattedAPY !== null && (\n <Flex gap={1}>\n <TooltipIcon />\n <Text size=\"2xs\" intensity={36} className=\"oui-font-normal\">\n {t(\"transfer.deposit.yieldReminder.disclaimer\")}\n </Text>\n </Flex>\n )}\n\n {externalUrl && (\n <a\n href={externalUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-inline-flex oui-items-center oui-gap-[2px] oui-font-normal oui-no-underline oui-transition-opacity hover:oui-opacity-80\"\n >\n {t(\"common.details\")}\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.507 6.996c0-.322.26-.583.583-.583h4.407l-1.73-1.748.82-.82 2.749 2.732a.6.6 0 0 1 .17.42.6.6 0 0 1-.17.418l-2.75 2.731-.82-.82 1.73-1.747H4.09a.583.583 0 0 1-.583-.583\"\n fill=\"#fff\"\n fillOpacity=\".54\"\n />\n </svg>\n </a>\n )}\n </Flex>\n </Box>\n );\n};\n","import { FC } from \"react\";\nimport { BaseReminder } from \"./baseReminder\";\n\nexport interface DeUsdReminderProps {\n /** APY value in percentage (e.g., 8.5 for 8.5%) */\n apy: number | null;\n /** Whether the APY data is currently loading */\n loading: boolean;\n /** External URL to the asset issuer's website */\n externalUrl: string | null;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * DeUSD Yield Reminder Component\n * Light theme with dark text and button style\n * Strictly follows Figma design: https://www.figma.com/design/CdydOeLyOKPJUNw96Wnwzd/WOOFi---Portfolio?node-id=8417-14708&m=dev\n */\nexport const DeUsdReminder: FC<DeUsdReminderProps> = (props) => {\n return <BaseReminder {...props} testId=\"deusd-yield-reminder\" />;\n};\n","import { FC } from \"react\";\nimport { BaseReminder } from \"./baseReminder\";\n\nexport interface YusdReminderProps {\n /** APY value in percentage (e.g., 8.5 for 8.5%) */\n apy: number | null;\n /** Whether the APY data is currently loading */\n loading: boolean;\n /** External URL to the asset issuer's website */\n externalUrl: string | null;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * YUSD Yield Reminder Component\n * Dark theme with white text and coin icons\n * Strictly follows Figma design\n */\nexport const YusdReminder: FC<YusdReminderProps> = (props) => {\n return <BaseReminder {...props} testId=\"yusd-yield-reminder\" />;\n};\n","import { FC } from \"react\";\nimport { isYieldBearingAsset } from \"../../constants/yieldBearingAssets\";\nimport { useYieldAPY } from \"../depositForm/hooks/useYieldAPY\";\nimport { DeUsdReminder } from \"./deUsdReminder\";\nimport { YusdReminder } from \"./yusdReminder\";\n\nexport interface YieldBearingReminderProps {\n /** Token symbol to check and display APY for */\n symbol?: string;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * YieldBearingReminder Component\n * Router component that renders the appropriate reminder based on token type\n * - YUSD: Dark blue theme with white text and coin icons\n * - deUSD: Light pink/purple theme with dark text and deUSD logo icons\n */\nexport const YieldBearingReminder: FC<YieldBearingReminderProps> = ({\n symbol,\n className,\n}) => {\n const { apy, loading, externalUrl } = useYieldAPY(symbol);\n\n // Don't render if not a yield-bearing asset\n if (!isYieldBearingAsset(symbol)) {\n return null;\n }\n\n // Determine which reminder to show based on symbol\n const isDeUsd = symbol?.toLowerCase() === \"deusd\";\n\n if (isDeUsd) {\n return (\n <DeUsdReminder\n apy={apy}\n loading={loading}\n externalUrl={externalUrl}\n className={className}\n />\n );\n }\n\n return (\n <YusdReminder\n apy={apy}\n loading={loading}\n externalUrl={externalUrl}\n className={className}\n />\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useConfig,\n useComputedLTV,\n useDeposit,\n useIndexPrice,\n useIndexPricesStream,\n useQuery,\n useTokenInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation, Trans } from \"@kodiak-finance/orderly-i18n\";\nimport { account as accountPerp } from \"@kodiak-finance/orderly-perp\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n API,\n NetworkId,\n ChainNamespace,\n isNativeTokenChecker,\n} from \"@kodiak-finance/orderly-types\";\nimport { useAuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\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 { useNativeBalance } from \"./hooks/useNativeBalance\";\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 const { account } = useAccount();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const [feeWarningMessage, setFeeWarningMessage] = useState(\"\");\n const [tokenBalances, setTokenBalances] = useState<Record<string, string>>(\n {},\n );\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n setSourceToken,\n onTargetTokenChange,\n sourceTokenUpdatedRef,\n } = useToken(currentChain);\n\n const { data: indexPrices, getIndexPrice } = useIndexPricesStream();\n\n const indexPrice = useMemo(() => {\n return getIndexPrice(sourceToken?.symbol ?? \"\") ?? 0;\n }, [sourceToken?.symbol, indexPrices]);\n\n const usdcToken = useMemo(() => {\n return sourceTokens?.find((item) => item.symbol === \"USDC\");\n }, [sourceTokens]);\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n fetchBalances,\n targetChain,\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 maxDepositAmount = useMemo(() => {\n const balanceDecimal = new Decimal(balance || 0).todp(\n sourceToken?.precision ?? 2,\n Decimal.ROUND_DOWN,\n );\n\n // If user_max_qty is -1 or undefined, ignore it and use balance only\n // user_max_qty = 0 means no deposit allowed\n if (\n sourceToken?.user_max_qty === -1 ||\n sourceToken?.user_max_qty === undefined\n ) {\n return balanceDecimal.toString();\n }\n\n // user_max_qty = 0 means no deposit allowed\n if (sourceToken?.user_max_qty === 0) {\n return \"0\";\n }\n\n const userMaxQty = new Decimal(sourceToken.user_max_qty).todp(\n sourceToken?.precision ?? 2,\n Decimal.ROUND_DOWN,\n );\n\n return balanceDecimal.lt(userMaxQty)\n ? balanceDecimal.toString()\n : userMaxQty.toString();\n }, [balance, sourceToken?.precision, sourceToken?.user_max_qty]);\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 (\n <Trans\n i18nKey=\"transfer.deposit.userMaxQty.error\"\n values={{\n token: sourceToken?.symbol,\n chain: currentChain?.info?.network_infos?.name || \"\",\n }}\n components={[\n <a\n key=\"0\"\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral#max-deposits-global\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-text-primary\"\n />,\n ]}\n />\n );\n }\n return \"\";\n }, [sourceToken, targetToken, quantity, currentChain, t]);\n\n const loading = submitting || depositFeeRevalidating!;\n\n const nativeSymbol = useMemo(() => {\n return currentChain?.info?.nativeToken?.symbol;\n }, [currentChain]);\n\n const fee = useDepositFee({\n nativeSymbol: nativeSymbol,\n depositFee,\n });\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 isLoggedIn = useAuthGuard();\n\n const {\n collateralRatio,\n collateralContributionQuantity,\n currentLTV,\n nextLTV,\n } = useCollateralValue({\n tokens: sourceTokens,\n sourceToken,\n targetToken,\n qty: quantity,\n indexPrice,\n });\n\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isLoading: isConvertThresholdLoading,\n } = useConvertThreshold();\n\n useEffect(() => {\n cleanData();\n }, [sourceToken, currentChain?.id]);\n\n const gasFeeMessage = useMemo(() => {\n if (isNativeToken && maxQuantity === quantity) {\n return t(\"transfer.deposit.gasFee.error\", {\n token: sourceToken?.symbol,\n });\n }\n }, [maxQuantity, quantity, sourceToken?.symbol, t]);\n\n useEffect(() => {\n if (\n quantity &&\n Number(quantity) > 0 &&\n depositFee === 0n &&\n !depositFeeRevalidating &&\n account.walletAdapter?.chainNamespace !== ChainNamespace.solana\n ) {\n setFeeWarningMessage(t(\"transfer.deposit.feeUnavailable\"));\n } else {\n setFeeWarningMessage(\"\");\n }\n }, [quantity, depositFee, depositFeeRevalidating, t, account]);\n\n const insufficientBalance = useMemo(() => {\n if (quantity && Number(quantity) > 0) {\n return new Decimal(quantity).gt(maxQuantity);\n }\n return false;\n }, [quantity, maxQuantity]);\n\n const nativeBalance = useNativeBalance({\n fetchBalance,\n targetChain,\n });\n\n const insufficientGasMessage = useMemo(() => {\n if (\n (nativeSymbol &&\n quantity &&\n Number(quantity) > 0 &&\n // when insufficient balance, the input status is error, so we don't need to check gas balance\n !insufficientBalance &&\n !depositFeeRevalidating &&\n (account.walletAdapter?.chainNamespace === ChainNamespace.solana ||\n fee.dstGasFee)) ||\n nativeBalance === undefined\n ) {\n const notEnoughGas = new Decimal(nativeBalance || 0).lt(fee.dstGasFee);\n\n // when solana, if fee.dstGasFee is 0, and nativeTokenBalance is 0, it means the balance is not balance\n const isNotSolBalance =\n Number(fee.dstGasFee) === 0 &&\n Number(nativeBalance) == Number(fee.dstGasFee);\n\n if (notEnoughGas || isNotSolBalance) {\n return t(\"transfer.deposit.notEnoughGas\", {\n token: nativeSymbol,\n });\n }\n }\n\n return \"\";\n }, [\n fee.dstGasFee,\n quantity,\n depositFeeRevalidating,\n t,\n nativeSymbol,\n insufficientBalance,\n account,\n nativeBalance,\n ]);\n\n const warningMessage =\n swapWarningMessage ||\n userMaxQtyMessage ||\n gasFeeMessage ||\n feeWarningMessage ||\n insufficientGasMessage;\n\n const hasUserMaxQtyError = !!userMaxQtyMessage;\n const finalInputStatus = hasUserMaxQtyError ? \"error\" : inputStatus;\n const finalHintMessage: string | undefined = hasUserMaxQtyError\n ? t(\"transfer.deposit.exceedCap\")\n : hintMessage;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n !sourceToken ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating ||\n // if exceed collateral cap, disable deposit\n !!userMaxQtyMessage ||\n !!feeWarningMessage ||\n !!insufficientGasMessage;\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 useEffect(() => {\n if (sourceTokens?.length > 0 && fetchBalances) {\n fetchBalances(sourceTokens)\n .then((balances) => {\n setTokenBalances(balances);\n })\n .catch((error) => {\n console.error(\"Failed to fetch balances:\", error);\n });\n }\n }, [sourceTokens]);\n\n const sortedSourceTokens = useMemo(() => {\n return sortTokens(sourceTokens, tokenBalances, getIndexPrice);\n }, [sourceTokens, tokenBalances]);\n\n useEffect(() => {\n if (!sourceTokenUpdatedRef.current && sortedSourceTokens?.[0]) {\n setSourceToken(sortedSourceTokens[0]);\n }\n }, [sortedSourceTokens]);\n\n return {\n sourceToken,\n targetToken,\n sourceTokens: sortedSourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n\n amount,\n nativeSymbol,\n isNativeToken,\n quantity,\n collateralContributionQuantity,\n maxQuantity,\n maxDepositAmount,\n indexPrice,\n onQuantityChange: setQuantity,\n hintMessage: finalHintMessage,\n inputStatus: finalInputStatus,\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 tokenBalances,\n\n isLoggedIn,\n };\n};\n\nexport type UseDepositFeeReturn = ReturnType<typeof useDepositFee>;\n\nfunction useDepositFee(options: {\n nativeSymbol?: string;\n depositFee?: bigint;\n}) {\n const { nativeSymbol, depositFee = 0 } = options;\n const { account } = useAccount();\n\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;\n}\n\nconst useCollateralValue = (params: {\n tokens: API.TokenInfo[];\n sourceToken?: API.TokenInfo;\n targetToken?: API.TokenInfo;\n qty: string;\n indexPrice: number;\n}) => {\n const { sourceToken, targetToken, indexPrice } = params;\n\n const quantity = Number(params.qty);\n\n const memoizedCollateralRatio = useMemo(() => {\n return collateralRatio({\n baseWeight: targetToken?.base_weight ?? 0,\n discountFactor: targetToken?.discount_factor ?? 0,\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n indexPrice,\n });\n }, [targetToken, quantity, sourceToken?.user_max_qty, indexPrice]);\n\n const collateralContributionQuantity = collateralContribution({\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n collateralRatio: memoizedCollateralRatio.toNumber(),\n indexPrice,\n });\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity,\n token: sourceToken?.symbol,\n });\n\n return {\n collateralRatio: memoizedCollateralRatio.toNumber(),\n collateralContributionQuantity,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n indexPrice,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n },\n );\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nconst sortTokens = (\n tokens: API.TokenInfo[] = [],\n tokenBalances: Record<string, string> = {},\n getIndexPrice: (token: string) => number,\n) => {\n const list = tokens.map((item) => {\n const indexPrice = getIndexPrice(item.symbol!);\n const balance = new Decimal(tokenBalances[item.symbol!] || 0)\n .mul(indexPrice || 1)\n .todp(item.precision || 2)\n .toNumber();\n\n return {\n ...item,\n balance,\n isNativeToken: isNativeTokenChecker(item.address!),\n };\n });\n\n return list.sort((a, b) => {\n const hasBalanceA = a.balance > 0;\n const hasBalanceB = b.balance > 0;\n\n // Tokens with balance come first\n if (hasBalanceA !== hasBalanceB) {\n return hasBalanceA ? -1 : 1;\n }\n\n // 1. USDC has highest priority\n if (a.symbol === \"USDC\" && b.symbol !== \"USDC\") return -1;\n if (b.symbol === \"USDC\" && a.symbol !== \"USDC\") return 1;\n\n // 2. USDC.e has second priority\n if (a.symbol === \"USDC.e\" && b.symbol !== \"USDC.e\") return -1;\n if (b.symbol === \"USDC.e\" && a.symbol !== \"USDC.e\") return 1;\n\n // 3. Native tokens have third priority\n if (a.isNativeToken && !b.isNativeToken) return -1;\n if (b.isNativeToken && !a.isNativeToken) return 1;\n\n // 4. If both have balance, sort by balance amount (high to low)\n if (hasBalanceA && hasBalanceB) {\n return b.balance - a.balance;\n }\n\n // 5. If both have no balance, sort alphabetically\n return (a.symbol || \"\").localeCompare(b.symbol || \"\");\n });\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\nconst depositErrorCodeMap = {\n \"0x6697b232\": \"AccessControlBadConfirmation\",\n \"0xe2517d3f\": \"AccessControlUnauthorizedAccount\",\n \"0xc7ee9ce6\": \"AccountIdInvalid\",\n \"0x9fabe1c1\": \"AddressZero\",\n \"0x4b3815a6\": \"BalanceNotEnough\",\n \"0x59d9b863\": \"BrokerNotAllowed\",\n \"0xf67c6d78\": \"CeffuAddressMismatch\",\n \"0xd969df24\": \"DepositExceedLimit\",\n \"0xa65b249b\": \"EnumerableSetError\",\n \"0x06a0cf4a\": \"InvalidSwapSignature\",\n \"0x1eb00b06\": \"InvalidTokenAddress\",\n \"0xfa7c7537\": \"NativeTokenDepositAmountMismatch\",\n \"0xad674ae6\": \"NotRebalanceEnableToken\",\n \"0x623793c9\": \"NotZeroCodeLength\",\n \"0x833d33e7\": \"OnlyCrossChainManagerCanCall\",\n \"0x3ee5aeb5\": \"ReentrancyGuardReentrantCall\",\n \"0x0b693144\": \"SwapAlreadySubmitted\",\n \"0xa29c4986\": \"TokenNotAllowed\",\n \"0x30773dbb\": \"ZeroCodeLength\",\n \"0x56316e87\": \"ZeroDeposit\",\n \"0x93d3bb4d\": \"ZeroDepositFee\",\n};\n\nexport function getDepositKnownErrorMessage(message: string) {\n if (!message) {\n return \"\";\n }\n\n for (const key of Object.keys(depositErrorCodeMap)) {\n if (message.includes(key)) {\n const value =\n depositErrorCodeMap[key as keyof typeof depositErrorCodeMap];\n return `${value} (${key})`;\n }\n }\n}\n","import { FC } from \"react\";\nimport { Trans } from \"@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\";\nimport { getDepositKnownErrorMessage } from \"../../../utils\";\n\ntype Options = {\n quantity: string;\n allowance?: string;\n approve: (quantity?: string) => Promise<any>;\n deposit: () => Promise<any>;\n onSuccess?: () => void;\n customDeposit?: () => Promise<any>;\n enableCustomDeposit?: boolean;\n};\n\nexport function useDepositAction(options: Options) {\n const {\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit,\n customDeposit,\n onSuccess,\n } = options;\n const [submitting, setSubmitting] = useState(false);\n const ee = useEventEmitter();\n const { t } = useTranslation();\n\n const doDeposit = useCallback(async () => {\n try {\n await deposit();\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n } catch (err: any) {\n console.error(\"deposit error\", err);\n\n const knownErrorMessage = getDepositKnownErrorMessage(err.message);\n if (knownErrorMessage) {\n toast.error(\n <div>\n {t(\"common.somethingWentWrong\")}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {t(\"common.details\")}: {knownErrorMessage}\n </div>\n </div>,\n );\n } else {\n toast.error(err.message || t(\"common.somethingWentWrong\"));\n }\n }\n }, [deposit, onSuccess, t]);\n\n const onDeposit = useCallback(async () => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting) return;\n\n setSubmitting(true);\n\n const execDeposit = enableCustomDeposit ? customDeposit : doDeposit;\n\n await execDeposit?.()?.finally(() => {\n setSubmitting(false);\n });\n }, [quantity, submitting, doDeposit, enableCustomDeposit, customDeposit, t]);\n\n const onApprove = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await approve(quantity);\n toast.success(t(\"transfer.deposit.approve.success\"));\n } catch (err: any) {\n console.error(\"approve error\", err);\n toast.error(\n err.message || err?.errorCode || t(\"transfer.deposit.approve.failed\"),\n );\n throw err;\n } finally {\n setSubmitting(false);\n }\n }, [approve, submitting, quantity, allowance, t]);\n\n const onApproveAndDeposit = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await onApprove();\n await onDeposit();\n } catch (err) {\n console.error(\"approve and deposit error\", err);\n } finally {\n setSubmitting(false);\n }\n }, [submitting, onApprove, onDeposit]);\n\n return { submitting, onApprove, onDeposit, onApproveAndDeposit };\n}\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@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 { useEffect, useRef, useState } from \"react\";\nimport { API, nativeTokenAddress } from \"@kodiak-finance/orderly-types\";\n\nconst retryInterval = 3000;\n\nexport function useNativeBalance(options: {\n fetchBalance: (token: string, decimal: number) => Promise<string>;\n targetChain?: API.Chain;\n}) {\n const { fetchBalance, targetChain } = options;\n const [balance, setBalance] = useState<string>();\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n const loopGetTokenBalance = async (timeout = 0) => {\n const decimal = targetChain?.network_infos?.currency_decimal;\n\n if (typeof fetchBalance !== \"function\" || !decimal) {\n return;\n }\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(async () => {\n fetchBalance(nativeTokenAddress, decimal)\n .then((balance) => {\n console.log(\"native balance\", balance);\n setBalance(balance);\n })\n .catch((error) => {\n console.error(\"fetch native balance error\", error);\n loopGetTokenBalance(retryInterval);\n });\n }, timeout);\n };\n\n useEffect(() => {\n // get balance first, no timeout\n loopGetTokenBalance(0);\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return balance;\n}\n","import { useCallback, useEffect, useRef, 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 sourceTokenUpdatedRef = useRef(false);\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 const onSourceTokenChange = useCallback((token: API.TokenInfo) => {\n sourceTokenUpdatedRef.current = true;\n setSourceToken(token);\n }, []);\n\n useEffect(() => {\n sourceTokenUpdatedRef.current = false;\n }, [currentChain?.id]);\n\n return {\n sourceToken,\n targetToken,\n\n sourceTokens,\n targetTokens,\n\n onSourceTokenChange,\n setSourceToken,\n onTargetTokenChange: setTargetToken,\n sourceTokenUpdatedRef,\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 ArrowLeftRightIcon,\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 crossChainTrans,\n checkIsBridgeless,\n withdrawTo,\n sourceTokens,\n onSourceTokenChange,\n vaultBalanceList,\n qtyGreaterThanMaxAmount,\n isTokenUnsupported,\n onSwitchToSupportedNetwork,\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 disabled={!props.isLoggedIn}\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 hintSuffix={\n isTokenUnsupported ? (\n <button\n type=\"button\"\n onClick={onSwitchToSupportedNetwork}\n className=\"oui-inline-flex oui-items-center oui-gap-1 oui-text-2xs oui-font-semibold oui-text-primary\"\n >\n {t(\"common.switch\")}\n <ArrowLeftRightIcon\n size={16}\n className=\"oui-text-primary oui-mt-0.5\"\n opacity={1}\n />\n </button>\n ) : undefined\n }\n vaultBalanceList={vaultBalanceList}\n testId=\"oui-testid-withdraw-dialog-quantity-input\"\n displayType=\"vaultBalance\"\n disabled={!props.isLoggedIn}\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 tooltipContent={t(\"transfer.withdraw.available.tooltip\", {\n amount: 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={\n props.walletName ? (\n <WalletIcon size={\"xs\"} name={props.walletName ?? \"\"} />\n ) : undefined\n }\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 disabled={!props.isLoggedIn}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n token={sourceToken}\n value={props.showQty}\n readOnly\n />\n </TabPanel>\n {internalWithdrawPanel}\n </Tabs>\n <Box mt={2}>\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={props.currentLTV}\n nextLTV={props.nextLTV}\n />\n </Box>\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <Text size=\"xs\" intensity={36}>\n {t(\"common.fee\")}\n {withdrawTo === WithdrawTo.Wallet ? \" ≈ \" : \" = \"}\n <Text size=\"xs\" intensity={80}>\n {fee}\n </Text>\n </Text>\n </Flex>\n </Box>\n <WithdrawWarningMessage\n checkIsBridgeless={checkIsBridgeless}\n crossChainTrans={crossChainTrans}\n qtyGreaterThanMaxAmount={qtyGreaterThanMaxAmount}\n message={props.warningMessage}\n />\n <Flex justify=\"center\">\n <WithdrawAction\n checkIsBridgeless={checkIsBridgeless}\n networkId={props.networkId}\n disabled={disabled}\n loading={loading}\n onWithdraw={props.onWithdraw}\n crossChainWithdraw={props.crossChainWithdraw}\n currentChain={currentChain}\n address={address}\n quantity={quantity}\n fee={fee}\n withdrawTo={withdrawTo}\n onTransfer={props.onTransfer}\n />\n </Flex>\n </Box>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Box, cn, Flex, Text } from \"@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 disabled?: boolean;\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 \"disabled:oui-cursor-not-allowed\",\n props.className,\n )}\n rows={1}\n value={value}\n onChange={handleChange}\n disabled={props.disabled}\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","import React 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 crossChainTrans: boolean;\n checkIsBridgeless: boolean;\n qtyGreaterThanMaxAmount: boolean;\n message?: string;\n}\n\nexport const WithdrawWarningMessage: React.FC<WarningMessageProps> = (\n props,\n) => {\n const { crossChainTrans, qtyGreaterThanMaxAmount } = props;\n const { t } = useTranslation();\n const { state } = useAccount();\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\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 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 { useAuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport {\n Decimal,\n int2hex,\n praseChainIdToNumber,\n toNonExponential,\n} from \"@kodiak-finance/orderly-utils\";\nimport { InputStatus, WithdrawTo } from \"../../types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useVaultBalance } from \"./hooks/useVaultBalance\";\nimport { useWithdrawAccountId } from \"./hooks/useWithdrawAccountId\";\nimport { useWithdrawFee } from \"./hooks/useWithdrawFee\";\nimport { useWithdrawLTV } from \"./hooks/useWithdrawLTV\";\nimport { useWithdrawToken } from \"./hooks/useWithdrawToken\";\n\nexport type WithdrawFormScriptReturn = ReturnType<typeof useWithdrawFormScript>;\n\nconst markPrice = 1;\n\nexport type WithdrawFormScriptOptions = {\n close?: () => void;\n};\n\nexport const useWithdrawFormScript = (options: WithdrawFormScriptOptions) => {\n const { t } = useTranslation();\n const [crossChainTrans, setCrossChainTrans] = useState<boolean>(false);\n const [loading, setLoading] = useState(false);\n const [assetHistory] = useAssetsHistory(\n {\n page: 1,\n pageSize: 1,\n side: AssetHistorySideEnum.WITHDRAW,\n status: AssetHistoryStatusEnum.PENDING_REBALANCE,\n },\n // update when withdraw status changed\n {\n shouldUpdateOnWalletChanged: (data) =>\n data.side === AssetHistorySideEnum.WITHDRAW,\n },\n );\n\n const config = useConfig();\n\n const brokerName = config.get(\"brokerName\");\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const ee = useEventEmitter();\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const [withdrawTo, setWithdrawTo] = useState<WithdrawTo>(WithdrawTo.Wallet);\n\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const {\n connectedChain,\n wallet,\n setChain: switchChain,\n settingChain,\n } = useWalletConnector();\n\n const isLoggedIn = useAuthGuard();\n\n const [pendingTokenSymbol, setPendingTokenSymbol] = useState<\n string | undefined\n >();\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 {\n sourceToken,\n onSourceTokenChange: _OnSourceTokenChange,\n sourceTokens,\n isTokenSupportedOnChain,\n } = useWithdrawToken({\n currentChain,\n withdrawTo,\n });\n\n const onSourceTokenChange = useMemoizedFn((token: API.TokenInfo) => {\n setQuantity(\"\");\n _OnSourceTokenChange(token);\n setPendingTokenSymbol(token.symbol);\n });\n\n const tokenChains = useMemo(() => {\n if (!chains) return [];\n\n const list = chains.map((chain) => {\n const isSupported = chain.token_infos?.some(\n (token) => token.symbol === sourceToken?.symbol,\n );\n\n return {\n ...chain.network_infos,\n isSupported,\n };\n });\n\n // Put supported chains on top, unsupported ones at the bottom\n list.sort((a, b) => {\n const aSupported = !!a.isSupported;\n const bSupported = !!b.isSupported;\n if (aSupported === bSupported) return 0;\n return aSupported ? -1 : 1;\n });\n\n return list;\n }, [chains, sourceToken?.symbol]);\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 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 {\n vaultBalanceList,\n qtyGreaterThanVault,\n crossChainWithdraw,\n vaultBalanceMessage,\n } = useVaultBalance({\n currentChain,\n sourceToken,\n withdrawTo,\n quantity,\n qtyGreaterThanMaxAmount,\n });\n\n const withdrawAccountIdState = useWithdrawAccountId({\n token: sourceToken?.symbol!,\n decimals: sourceToken?.token_decimal!,\n quantity,\n setQuantity,\n close: options.close,\n setLoading,\n });\n\n const checkIsBridgeless = useMemo(() => {\n if (wrongNetwork) {\n return false;\n }\n if (!currentChain) {\n return false;\n }\n if (networkId === \"testnet\") {\n return true;\n }\n if (!currentChain.info) {\n return false;\n }\n if (\n !currentChain.info.network_infos ||\n !currentChain.info.network_infos.bridgeless\n ) {\n return false;\n }\n return true;\n }, [currentChain, wrongNetwork]);\n\n const cleanData = () => {\n setQuantity(\"\");\n };\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return switchChain?.({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n // clean input value\n cleanData();\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n toast.error(`${t(\"connector.switchChain.failed\")}: ${error.message}`);\n });\n },\n [currentChain, switchChain, findByChainId, t],\n );\n\n useEffect(() => {\n if (!pendingTokenSymbol || !sourceTokens || sourceTokens.length === 0) {\n return;\n }\n\n const matchedToken = sourceTokens.find(\n (token) => token.symbol === pendingTokenSymbol,\n );\n if (matchedToken) {\n onSourceTokenChange(matchedToken);\n }\n }, [pendingTokenSymbol, sourceTokens, onSourceTokenChange, currentChain]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n\n setLoading(true);\n return withdraw({\n amount: quantity,\n token: sourceToken?.symbol!,\n chainId: currentChain?.id!,\n allowCrossChainWithdraw: crossChainWithdraw,\n })\n .then((res) => {\n toast.success(t(\"transfer.withdraw.requested\"));\n ee.emit(\"withdraw:requested\");\n options.close?.();\n setQuantity(\"\");\n })\n .catch((e) => {\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n return;\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(e.message);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const fee = useWithdrawFee({\n crossChainWithdraw,\n currentChain,\n token: sourceToken?.symbol!,\n withdrawTo,\n });\n\n const minAmountWarningMessage = useMemo(() => {\n const minAmount = new Decimal(\n sourceToken?.minimum_withdraw_amount ?? 0,\n ).add(fee);\n\n if (quantity && new Decimal(quantity).lt(minAmount)) {\n return t(\"transfer.withdraw.minAmount.error\", {\n minAmount: toNonExponential(minAmount.toNumber()),\n currency: sourceToken?.symbol,\n });\n }\n }, [quantity, sourceToken?.minimum_withdraw_amount, fee, t]);\n\n const showQty = useMemo(() => {\n if (!quantity) {\n return \"\";\n }\n\n const value = new Decimal(quantity).sub(fee ?? 0);\n if (value.isNegative()) {\n return \"\";\n }\n return toNonExponential(value.toNumber());\n }, [fee, quantity]);\n\n const isTokenUnsupported = useMemo(() => {\n if (\n withdrawTo !== WithdrawTo.Wallet ||\n !currentChain ||\n !sourceToken?.symbol\n ) {\n return false;\n }\n return !isTokenSupportedOnChain(sourceToken.symbol);\n }, [withdrawTo, currentChain, sourceToken?.symbol, isTokenSupportedOnChain]);\n\n useEffect(() => {\n if (isTokenUnsupported && sourceToken?.symbol) {\n setInputStatus(\"error\");\n setHintMessage(\n t(\"transfer.withdraw.unsupported.token\", { token: sourceToken.symbol }),\n );\n return;\n }\n\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 }, [\n quantity,\n maxAmount,\n unsettledPnL,\n crossChainTrans,\n isTokenUnsupported,\n sourceToken?.symbol,\n t,\n ]);\n\n const disabled =\n crossChainTrans ||\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus) ||\n (withdrawTo === WithdrawTo.Account &&\n !withdrawAccountIdState.toAccountId) ||\n qtyGreaterThanMaxAmount ||\n qtyGreaterThanVault ||\n !!minAmountWarningMessage ||\n isTokenUnsupported;\n\n useEffect(() => {\n setCrossChainTrans(!!assetHistory?.length);\n }, [assetHistory?.length]);\n\n // it need to use useMemoizedFn wrap ,otherwise crossChainTrans and assetHistory will be first render data\n const handleWalletTopic = useMemoizedFn((data: any) => {\n if (!crossChainTrans) {\n return;\n }\n const txId = assetHistory?.[0]?.tx_id;\n const { trxId, transStatus } = data;\n if (trxId === txId && transStatus === \"COMPLETED\") {\n setCrossChainTrans(false);\n }\n });\n\n useWalletTopic({\n onMessage: handleWalletTopic,\n });\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n const { currentLTV, nextLTV, ltvWarningMessage } = useWithdrawLTV({\n token: sourceToken?.symbol!,\n quantity,\n });\n\n const warningMessage =\n ltvWarningMessage || minAmountWarningMessage || vaultBalanceMessage;\n\n const filteredVaultBalanceList = useMemo(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return [];\n }\n return vaultBalanceList?.filter(\n (item) => Number.parseInt(item.chain_id) === currentChain?.id,\n );\n }, [vaultBalanceList, currentChain, withdrawTo]);\n\n const onSwitchToSupportedNetwork = useMemoizedFn(async () => {\n if (!tokenChains || tokenChains.length === 0) return;\n\n const targetNetwork =\n tokenChains.find((item) => item.isSupported) ?? tokenChains[0];\n\n await onChainChange(targetNetwork);\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 fee,\n crossChainWithdraw,\n crossChainTrans,\n showQty,\n networkId,\n checkIsBridgeless,\n hasPositions,\n onSettlePnl,\n brokerName,\n qtyGreaterThanMaxAmount,\n vaultBalanceList,\n ...withdrawAccountIdState,\n withdrawTo,\n setWithdrawTo,\n currentLTV,\n nextLTV,\n warningMessage,\n\n isLoggedIn,\n isTokenUnsupported,\n onSwitchToSupportedNetwork,\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 { useMemo } from \"react\";\nimport { useQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { WithdrawTo } from \"../../../types\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\n\n// CCTP (Cross-Chain Transfer Protocol) Supported AVAX, ETH, POL, ARB, OP, BASE, SEI\nconst cctpSupportedChains = [43114, 1, 137, 42161, 10, 8453, 1329];\n// CCTP Supported Tokens\nconst cctpSupportedTokens = [\"USDC\"];\n\nexport const useVaultBalance = (inputs: {\n currentChain?: CurrentChain | null;\n sourceToken?: API.TokenInfo;\n withdrawTo: WithdrawTo;\n quantity: string;\n qtyGreaterThanMaxAmount: boolean;\n}) => {\n const {\n currentChain,\n sourceToken,\n withdrawTo,\n quantity,\n qtyGreaterThanMaxAmount,\n } = inputs;\n\n const { t } = useTranslation();\n\n const { data: vaultBalanceData } = useQuery<API.VaultBalance[]>(\n `/v1/public/vault_balance`,\n {\n revalidateOnMount: true,\n errorRetryCount: 3,\n },\n );\n\n const vaultBalanceList = useMemo(() => {\n if (\n withdrawTo === WithdrawTo.Account ||\n !currentChain ||\n !Array.isArray(vaultBalanceData)\n ) {\n return [];\n }\n return vaultBalanceData.filter(\n (item) => Number.parseInt(item.chain_id) === currentChain?.id,\n );\n }, [vaultBalanceData, currentChain, withdrawTo]);\n\n const chainVaultBalance = useMemo(() => {\n const vaultBalance = vaultBalanceList?.find(\n (item) => item.token === sourceToken?.symbol,\n );\n return vaultBalance?.balance;\n }, [vaultBalanceList, sourceToken]);\n\n const qtyGreaterThanVault = useMemo<boolean>(() => {\n if (\n !quantity ||\n Number.isNaN(quantity) ||\n !chainVaultBalance ||\n Number.isNaN(chainVaultBalance)\n ) {\n return false;\n }\n\n return new Decimal(quantity).gt(chainVaultBalance);\n }, [quantity, chainVaultBalance, withdrawTo]);\n\n const crossChainWithdraw = useMemo(() => {\n const canCCTP =\n currentChain?.id && sourceToken?.symbol\n ? cctpSupportedChains.includes(currentChain?.id) &&\n cctpSupportedTokens.includes(sourceToken?.symbol)\n : false;\n\n return qtyGreaterThanVault && canCCTP && !qtyGreaterThanMaxAmount;\n }, [qtyGreaterThanVault, qtyGreaterThanMaxAmount, currentChain, sourceToken]);\n\n const chainName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return \"\";\n }, [currentChain]);\n\n const vaultBalanceMessage = useMemo(() => {\n if (qtyGreaterThanVault && !crossChainWithdraw && chainName) {\n return t(\"transfer.withdraw.vaultWarning\", {\n tokenName: sourceToken?.symbol!,\n chainName: chainName,\n balance: chainVaultBalance,\n });\n }\n return \"\";\n }, [\n qtyGreaterThanVault,\n crossChainWithdraw,\n chainName,\n sourceToken,\n chainVaultBalance,\n ]);\n\n const vaultBalanceListFilterCCTP = useMemo(() => {\n if (cctpSupportedChains.includes(currentChain?.id!)) {\n return vaultBalanceList?.filter(\n (item) => !cctpSupportedTokens.includes(item.token),\n );\n }\n return vaultBalanceList;\n }, [vaultBalanceList, currentChain]);\n\n return {\n vaultBalanceList: vaultBalanceListFilterCCTP,\n // chainVaultBalance,\n // if the token is cross chain withdraw supported, the qtyGreaterThanVault will be false\n qtyGreaterThanVault: qtyGreaterThanVault && !crossChainWithdraw,\n crossChainWithdraw,\n vaultBalanceMessage,\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 } from \"../../../types\";\nimport { checkIsAccountId, getTransferErrorMessage } from \"../../../utils\";\n\ntype InternalWithdrawOptions = {\n token: string;\n decimals: number;\n quantity: string;\n setQuantity: (quantity: string) => void;\n close?: () => void;\n setLoading: (loading: boolean) => void;\n};\n\nexport function useWithdrawAccountId(options: InternalWithdrawOptions) {\n const { token, quantity, setQuantity, close, setLoading, decimals } = options;\n const { t } = useTranslation();\n const [toAccountId, setToAccountId] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { transfer, submitting } = useInternalTransfer();\n\n const onTransfer = useCallback(() => {\n const num = Number(quantity);\n\n if (Number.isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting || !toAccountId) {\n return;\n }\n setLoading(true);\n\n transfer({\n token,\n receiver: toAccountId,\n amount: quantity,\n decimals,\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n close?.();\n })\n .catch((err) => {\n console.log(\"transfer error\", err);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [t, quantity, token, submitting, toAccountId, transfer]);\n\n useEffect(() => {\n if (!toAccountId) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n if (checkIsAccountId(toAccountId)) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n } else {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.withdraw.accountId.invalid\"));\n }\n }, [toAccountId]);\n\n return {\n toAccountId,\n setToAccountId,\n onTransfer,\n internalWithdrawSubmitting: submitting,\n toAccountIdInputStatus: inputStatus,\n toAccountIdHintMessage: hintMessage,\n };\n}\n","import { useMemo } from \"react\";\nimport { useTokenInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { WithdrawTo } from \"../../../types\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\n\nexport function useWithdrawFee(options: {\n token: string;\n currentChain?: CurrentChain | null;\n crossChainWithdraw: boolean;\n withdrawTo: WithdrawTo;\n}) {\n const { crossChainWithdraw, currentChain, token, withdrawTo } = options;\n\n const tokenInfo = useTokenInfo(token);\n\n const fee = useMemo(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return 0;\n }\n\n if (!currentChain) {\n return 0;\n }\n\n const item = tokenInfo?.chain_details?.find(\n (chain) => Number.parseInt(chain.chain_id) === currentChain.id,\n );\n\n if (!item) {\n return 0;\n }\n\n if (crossChainWithdraw) {\n return (\n (item.withdrawal_fee || 0) + (item.cross_chain_withdrawal_fee || 0)\n );\n }\n\n return item.withdrawal_fee || 0;\n }, [tokenInfo, token, currentChain, crossChainWithdraw, withdrawTo]);\n\n return fee;\n}\n","import { useMemo } from \"react\";\nimport { useComputedLTV, useQuery } from \"@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 { useEffect, useMemo, useState } from \"react\";\nimport {\n useHoldingStream,\n useMemoizedFn,\n useTokensInfo,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { WithdrawTo } from \"../../../types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\nimport { useToken } from \"../../depositForm/hooks/useToken\";\n\nexport function useWithdrawToken(params: {\n currentChain?: CurrentChain | null;\n withdrawTo: WithdrawTo;\n}) {\n const { currentChain, withdrawTo } = params;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n const { data: holdings } = useHoldingStream();\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useToken(\n currentChain,\n (token) => token.symbol === \"USDC\" || token.is_collateral,\n );\n\n // Get user holding\n const allTokens = useMemo(() => {\n if (!tokensInfo?.length) return [];\n\n const holdingMap = new Map<string, API.Holding>();\n holdings?.forEach((item) => {\n holdingMap.set(item.token, item);\n });\n\n const mappedTokens = tokensInfo.map((item) => ({\n ...item,\n symbol: item.token,\n token_decimal: item.decimals,\n precision: item.decimals,\n }));\n\n const list = mappedTokens.filter((token) => {\n const holding = holdingMap.get(token.symbol!);\n if (!holdings) return true;\n return !!holding && holding.holding > 0;\n });\n\n // If user has no holdings, show USDC by default\n if (list.length === 0) {\n const usdcToken = mappedTokens.find((t) => t.symbol === \"USDC\");\n if (usdcToken) {\n return [usdcToken];\n }\n }\n // sort tokens, USDC should be the first\n list.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n\n return list;\n }, [tokensInfo, holdings]);\n\n useEffect(() => {\n if (!allTokens.length) return;\n\n const usdcToken = getTokenByTokenList(allTokens);\n setToken(usdcToken || allTokens?.[0]);\n setTokens(allTokens);\n }, [allTokens]);\n\n // Check if a token is supported on the current chain\n const isTokenSupportedOnChain = useMemoizedFn(\n (tokenSymbol: string): boolean => {\n if (!currentChain?.info?.token_infos) {\n return false;\n }\n return currentChain.info.token_infos.some(\n (token) => token.symbol === tokenSymbol,\n );\n },\n );\n\n const handleSourceTokenChange = useMemoizedFn((newToken: API.TokenInfo) => {\n if (withdrawTo === WithdrawTo.Wallet && currentChain && newToken.symbol) {\n const matchingToken = sourceTokens.find(\n (t) => t.symbol === newToken.symbol,\n );\n if (matchingToken) {\n onSourceTokenChange(matchingToken);\n } else {\n onSourceTokenChange(newToken);\n }\n return;\n }\n // Withdraw to account\n onSourceTokenChange(newToken);\n });\n\n const syncToken = useMemoizedFn(() => {\n if (withdrawTo === WithdrawTo.Account) {\n const findToken = tokens.find(\n (item) => item.symbol === sourceToken?.symbol,\n ) as API.TokenInfo;\n if (findToken) {\n setToken(findToken);\n }\n }\n });\n\n useEffect(() => {\n syncToken();\n }, [\n withdrawTo,\n allTokens,\n sourceToken,\n sourceTokens,\n currentChain,\n syncToken,\n ]);\n\n if (withdrawTo === WithdrawTo.Account) {\n return {\n sourceToken: token,\n onSourceTokenChange: setToken,\n sourceTokens: tokens,\n isTokenSupportedOnChain,\n };\n }\n\n return {\n sourceToken,\n onSourceTokenChange: handleSourceTokenChange,\n sourceTokens: allTokens,\n isTokenSupportedOnChain,\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 { useAppStore } 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 = useAppStore((state) => state.tokensInfo);\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 type { 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 targetChainInfo,\n } = useToken({ defaultValue: defaultToken });\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_CONVERT_SLIPPAGE_KEY,\n 1,\n );\n\n const { maxAmount, convert } = useConvert({ token: sourceToken?.token });\n\n const onConvert = async () => {\n if (loading) {\n return;\n }\n setLoading(true);\n return convert({\n amount: Number(quantity),\n slippage: new Decimal(slippage).div(100).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.convert.completed\"));\n close?.();\n setQuantity(\"\");\n })\n .catch((err: Error) => {\n toast.error(\n err.message?.includes(\"user rejected\")\n ? t(\"transfer.convert.failed\")\n : err.message,\n );\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const [postQuote, { data: quoteData, isMutating: isQuoteLoading }] =\n useOdosQuote();\n\n useEffect(() => {\n const { quoteChainId, contract_address, decimals } = sourceToken || {};\n const targetAddress = targetChainInfo?.contract_address;\n\n if (quantity && quoteChainId && contract_address && targetAddress) {\n // https://docs.odos.xyz/build/api-docs\n postQuote({\n chainId: parseInt(quoteChainId),\n inputTokens: [\n {\n amount: normalizeAmount(quantity, decimals!),\n tokenAddress: contract_address,\n },\n ],\n outputTokens: [\n {\n proportion: 1,\n tokenAddress: targetAddress,\n },\n ],\n // simple: true,\n });\n }\n }, [quantity, sourceToken, targetChainInfo, postQuote]);\n\n const memoizedOutAmounts = useMemo<string>(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n return quoteData?.outAmounts[0];\n }, [quoteData, isQuoteLoading]);\n\n const memoizedConvertRate = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n\n const rate = new Decimal(\n unnormalizeAmount(\n quoteData.outAmounts[0],\n targetChainInfo?.decimals ?? 6,\n ),\n )\n .div(\n unnormalizeAmount(quoteData.inAmounts[0], sourceToken?.decimals ?? 6),\n )\n .toString();\n return rate;\n }, [isQuoteLoading, quoteData, sourceToken, targetChainInfo]);\n\n const memoizedMinimumReceived = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return 0;\n }\n return calcMinimumReceived({\n amount: quoteData?.outAmounts[0],\n slippage: Number(slippage),\n });\n }, [quoteData, isQuoteLoading, slippage]);\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: Number(quantity),\n token: sourceToken?.token,\n });\n\n const disabled = !quantity || Number(quantity) === 0;\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n token: sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n wrongNetwork,\n onConvert,\n hasPositions,\n onSettlePnl,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n convertRate: memoizedConvertRate,\n minimumReceived: memoizedMinimumReceived,\n outAmounts: memoizedOutAmounts,\n isQuoteLoading,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n targetChainInfo,\n };\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTokensInfo } from \"@kodiak-finance/orderly-hooks\";\nimport { Arbitrum, type API } from \"@kodiak-finance/orderly-types\";\n\nconst splitTokenBySymbol = <T extends API.Token>(items: T[]) => {\n return items.reduce<Record<\"usdc\" | \"others\", T[]>>(\n (result, item) => {\n if (item.token?.toUpperCase() === \"USDC\") {\n result.usdc.push(item);\n } else {\n result.others.push(item);\n }\n return result;\n },\n { usdc: [], others: [] },\n );\n};\n\nconst findChainInfo = (tokenInfo: API.Token) => {\n const arbitrumChainInfo = tokenInfo.chain_details.find(\n (item) => parseInt(item.chain_id) === Arbitrum.id,\n );\n\n const nativeTokenChainInfo = tokenInfo.chain_details.find(\n (item) => !item.contract_address,\n );\n\n const nativeTokenAddress = \"0x0000000000000000000000000000000000000000\";\n\n if (arbitrumChainInfo) {\n return {\n contract_address:\n arbitrumChainInfo.contract_address || nativeTokenAddress,\n quoteChainId: arbitrumChainInfo.chain_id,\n decimals: arbitrumChainInfo.decimals,\n };\n }\n\n if (nativeTokenChainInfo) {\n return {\n contract_address: nativeTokenAddress,\n quoteChainId: nativeTokenChainInfo.chain_id,\n decimals: nativeTokenChainInfo.decimals,\n };\n }\n\n return {\n contract_address: tokenInfo.chain_details[0]?.contract_address,\n quoteChainId: tokenInfo.chain_details[0]?.chain_id,\n decimals: tokenInfo.chain_details[0]?.decimals,\n };\n};\n\ninterface Options {\n defaultValue?: string;\n}\n\ntype ConvertTokenInfo = API.Token & {\n contract_address: string;\n quoteChainId: string;\n precision: number;\n symbol: string;\n};\n\nexport const useToken = (options: Options) => {\n const { defaultValue } = options;\n\n const [sourceToken, setSourceToken] = useState<ConvertTokenInfo>();\n const [targetToken, setTargetToken] = useState<ConvertTokenInfo>();\n const [sourceTokens, setSourceTokens] = useState<ConvertTokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const newTokensInfo = useMemo(() => {\n const filteredTokensInfo = (tokensInfo ?? []).filter(\n (item) => item.on_chain_swap,\n );\n\n return filteredTokensInfo.map((item) => {\n const chainInfo = findChainInfo(item);\n return {\n ...item,\n symbol: item.token,\n precision: item.decimals ?? 6,\n ...chainInfo,\n };\n });\n }, [tokensInfo]);\n\n useEffect(() => {\n const { usdc, others } = splitTokenBySymbol(newTokensInfo);\n setSourceToken(() => {\n if (defaultValue) {\n const defaultToken = others.find(({ token }) => token === defaultValue);\n return defaultToken ? defaultToken : others[0];\n }\n return others[0];\n });\n setSourceTokens(others);\n setTargetToken(usdc[0]);\n }, [defaultValue, newTokensInfo]);\n\n const targetChainInfo = useMemo(() => {\n const info = targetToken?.chain_details?.find(\n (item) => item.chain_id === sourceToken?.quoteChainId,\n );\n return {\n ...info,\n precision: targetToken?.precision,\n };\n }, [sourceToken, targetToken]);\n\n return {\n sourceToken,\n sourceTokens,\n onSourceTokenChange: setSourceToken,\n targetToken,\n targetChainInfo,\n };\n};\n","import React from \"react\";\n// import pick from \"ramda/es/pick\";\nimport { i18n } from \"@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"]}
|