@orderly.network/ui-transfer 2.8.3 → 2.8.4-alpha.0

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.
@@ -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/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/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","jsx","useMemo","DepositAction","WithdrawTo","Decimal","jsxs","Spinner","cn","Tooltip","TooltipContent","useEffect","useRef","useState","balance","Fragment","token","value","item","Input","inputFormatter","modal","TokenIcon","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","useAppContext","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","Badge","useAssetsHistory","useDebouncedCallback","useWalletTopic","AssetHistorySideEnum","ethers","chainId","confirmations","pendingList"],"mappings":"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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, textVariants, Text } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { ActionButton } from \"../actionButton\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { CollateralContribution } from \"../collateralContribution\";\nimport { CollateralRatioWidget } from \"../collateralRatio\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { Notice } from \"../swap/components/notice\";\nimport { SwapFee } from \"../swap/components/swapFee\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { SwapIndicator } from \"../swapIndicator\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport { 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 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} 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 />\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 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 {/* 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 />\n {renderContent()}\n </Box>\n\n <SwapIndicator\n sourceToken={sourceToken?.symbol}\n targetToken={targetToken?.symbol}\n className=\"oui-mb-3\"\n />\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={sourceToken?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n onApproveAndDeposit={onApproveAndDeposit}\n networkId={networkId}\n />\n </Flex>\n </Box>\n );\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"@orderly.network/hooks\";\nimport type { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const useLtvScript = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n revalidateOnFocus: false,\n },\n );\n const ltvThreshold = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.ltv_threshold).mul(100).toNumber()}%`;\n }, []);\n return {\n ltv_threshold: ltvThreshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nexport type LtvScriptReturns = ReturnType<typeof useLtvScript>;\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Tooltip, Text, Box } from \"@orderly.network/ui\";\nimport { 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 \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, ButtonProps } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { DepositAction } from \"../../types\";\n\nexport type ActionButtonProps = {\n disabled?: boolean;\n loading?: boolean;\n actionType: DepositAction;\n symbol?: string;\n onDeposit?: () => void;\n onApprove?: () => void;\n onApproveAndDeposit?: () => void;\n networkId?: NetworkId;\n};\n\nexport const ActionButton: React.FC<ActionButtonProps> = (props) => {\n const {\n disabled,\n loading,\n actionType,\n symbol = \"USDC\",\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n networkId,\n } = props;\n const { t } = useTranslation();\n\n const buttonParams = useMemo(() => {\n const params: Partial<Record<DepositAction, ButtonProps>> = {\n // [DepositAction.Approve]: {\n // // Approve & Deposit\n // children: t(\"transfer.deposit.approve\"),\n // onClick: onApprove,\n // // approve not disabled button\n // disabled: false,\n // \"data-testid\": \"oui-testid-deposit-dialog-approve-btn\",\n // },\n [DepositAction.ApproveAndDeposit]: {\n children: `${t(\"transfer.deposit.approve\")} & ${t(\"common.deposit\")}`,\n onClick: onApproveAndDeposit,\n // approve not disabled button\n // disabled: false,\n },\n // [DepositAction.Increase]: {\n // children: t(\"transfer.deposit.increase.symbol\", { symbol }),\n // onClick: onApprove,\n // \"data-testid\": \"oui-testid-deposit-dialog-increase-btn\",\n // },\n [DepositAction.Deposit]: {\n children: t(\"common.deposit\"),\n onClick: onDeposit,\n \"data-testid\": \"oui-testid-deposit-dialog-deposit-btn\",\n },\n };\n\n return params[actionType];\n }, [onApprove, onDeposit, actionType, symbol, t]);\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={buttonSize}\n {...buttonParams}\n />\n </AuthGuard>\n </Box>\n );\n};\n","export type DST = {\n symbol: string;\n address?: string;\n decimals?: number;\n chainId?: number;\n network?: string;\n};\n\nexport enum DepositAction {\n Deposit,\n Approve,\n ApproveAndDeposit,\n // Increase,\n}\n\nexport enum WithdrawTo {\n /** withdraw to web3 wallet */\n Wallet = \"wallet\",\n /** withdraw to other account id */\n Account = \"accountId\",\n}\n\nexport type InputStatus = \"error\" | \"warning\" | \"success\" | \"default\";\n","import { FC, useMemo } from \"react\";\nimport { useIndexPricesStream } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Spinner, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type AvailableQuantityProps = {\n token?: Partial<API.TokenInfo>;\n amount?: number | string;\n maxQuantity?: number | string;\n onClick?: () => void;\n loading?: boolean;\n};\n\nexport const AvailableQuantity: FC<AvailableQuantityProps> = (props) => {\n const { amount, maxQuantity, token, loading } = props;\n const { t } = useTranslation();\n\n const { getIndexPrice } = useIndexPricesStream();\n\n const name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n const notional = useMemo(() => {\n if (amount && token?.symbol && getIndexPrice(token?.symbol)) {\n return new Decimal(amount)\n .mul(getIndexPrice(token?.symbol) || 1)\n .toNumber();\n }\n return 0;\n }, [amount, token?.symbol]);\n\n return (\n <Flex px={2}>\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {notional}\n </Text.numeral>\n </Text>\n\n <Flex gapX={2} itemAlign=\"center\" className=\"oui-ml-auto\">\n <Flex gapX={1} itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"common.available\")}: `}\n </Text>\n\n {loading ? (\n <Spinner size=\"sm\" />\n ) : (\n <Text.numeral\n size=\"2xs\"\n intensity={36}\n rm={Decimal.ROUND_DOWN}\n dp={dp}\n padding={false}\n data-testid=\"oui-testid-withdraw_deposit-dialog-available-value\"\n >\n {maxQuantity!}\n </Text.numeral>\n )}\n\n <Text size=\"2xs\" intensity={36}>\n {` ${name}`}\n </Text>\n </Flex>\n\n <Text\n size=\"2xs\"\n color=\"primary\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={props.onClick}\n >\n {t(\"common.max\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { useAppConfig } from \"@orderly.network/react-app\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const BrokerWallet: FC = () => {\n const { t } = useTranslation();\n const { appIcons } = useAppConfig();\n const brokerName = useConfig(\"brokerName\");\n\n const icon = useMemo(() => {\n const { secondary } = appIcons || {};\n\n if (!secondary?.img && secondary?.component) return null;\n\n if (secondary?.img) {\n return <img src={secondary?.img} className=\"oui-w-5 oui-h-5\" />;\n }\n\n if (secondary?.component) {\n return <>{secondary.component}</>;\n }\n }, [appIcons]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.brokerAccount\", { brokerName })}\n </Text>\n {icon}\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n ChainIcon,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\nimport { CurrentChain } from \"../depositForm/hooks\";\n\ntype ChainSelectProps = {\n chains: API.NetworkInfos[];\n value: CurrentChain;\n onValueChange: (chain: API.NetworkInfos) => Promise<void>;\n wrongNetwork: boolean;\n loading?: boolean;\n};\n\nexport const ChainSelect: React.FC<ChainSelectProps> = (props) => {\n const { chains, value, wrongNetwork, loading } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n const selectable = wrongNetwork || chains?.length > 1;\n\n const chainIcon = wrongNetwork ? (\n <Flex\n width={18}\n height={18}\n intensity={100}\n r=\"full\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Text size=\"2xs\" intensity={80}>\n U\n </Text>\n </Flex>\n ) : (\n <ChainIcon className=\"oui-size-[18px]\" chainId={value?.id} />\n );\n\n const chainName = wrongNetwork ? \"Unknown\" : value?.info?.network_infos?.name;\n\n const renderRightIcon = () => {\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n if (selectable) {\n return <ExchangeIcon className=\"oui-text-base-contrast-54\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-t-xl oui-rounded-b-sm oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <div>\n <Flex>\n <Text size=\"2xs\" intensity={54}>\n {t(\"transfer.network\")}\n </Text>\n </Flex>\n <Flex gapX={1}>\n {chainIcon}\n <Text size=\"sm\" intensity={80}>\n {chainName}\n </Text>\n </Flex>\n </div>\n {renderRightIcon()}\n </Flex>\n );\n\n const content = chains.map((chain, index) => {\n const isActive = chain.chain_id === value?.id;\n return (\n <Flex\n key={chain.chain_id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-deposit-network-select-item\",\n \"hover:oui-bg-base-5 oui-h-[30px] oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n await props.onValueChange(chain);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <ChainIcon className=\"oui-size-[18px]\" chainId={chain.chain_id} />\n <Text size=\"2xs\" intensity={54}>\n {chain.name}\n </Text>\n </Flex>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-deposit-network-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-deposit-token-select-dropdown-menu-content\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-rounded-md oui-select-none\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content}</div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import React, { FC, SVGProps } from \"react\";\n\nexport const ExchangeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10.997 8.004a.5.5 0 0 0-.14-.36l-1.86-1.843-.703.703.984 1h-7.28a.5.5 0 0 0 0 1h7.28l-.984 1 .703.703 1.86-1.844a.5.5 0 0 0 .14-.36m-.5-4a.5.5 0 0 0-.5-.5H2.716l.984-1-.703-.703-1.859 1.843a.515.515 0 0 0 0 .719l1.86 1.844.702-.703-.984-1h7.281a.5.5 0 0 0 .5-.5\" />\n </svg>\n);\n\nexport const ArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M9.994 5.51a.83.83 0 0 0-.832.833v6.295l-2.498-2.471-1.17 1.17 3.902 3.929a.84.84 0 0 0 .599.244.84.84 0 0 0 .597-.244l3.903-3.928-1.171-1.171-2.498 2.471V6.343a.83.83 0 0 0-.832-.833\" />\n </svg>\n);\n\nexport const SelectArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2.503 3.332a.412.412 0 0 0-.326.664l2.5 3.333a.414.414 0 0 0 .664 0l2.5-3.333a.417.417 0 0 0-.338-.664z\" />\n </svg>\n);\n\nexport const RefreshIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.00342 1.49561C4.97642 1.49561 3.99542 1.84011 3.20642 2.46461C2.98992 2.63561 2.95692 2.9511 3.12842 3.1676C3.29992 3.3841 3.61492 3.4171 3.83142 3.2456C4.44492 2.7601 5.20392 2.4956 6.00342 2.4956C7.93642 2.4956 9.50342 4.0626 9.50342 5.9956H8.50342L10.0034 7.9956L11.5034 5.9956H10.5034C10.5034 3.5101 8.48892 1.49561 6.00342 1.49561ZM2.00342 3.9956L0.503418 5.9956H1.50342C1.50342 8.4811 3.51792 10.4956 6.00342 10.4956C7.03092 10.4956 8.01142 10.1516 8.80042 9.52659C9.01692 9.35559 9.04992 9.0401 8.87842 8.8236C8.70692 8.6071 8.39191 8.5741 8.17542 8.7456C7.56142 9.2316 6.80342 9.4956 6.00342 9.4956C4.07042 9.4956 2.50342 7.9286 2.50342 5.9956H3.50342L2.00342 3.9956Z\" />\n </svg>\n);\n\nexport const TransferVerticalIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M12.385 4.565a.6.6 0 0 0-.427.167L9.764 6.944l.837.837 1.19-1.17v8.66a.595.595 0 0 0 1.19 0v-8.66l1.189 1.17.836-.837-2.193-2.212a.6.6 0 0 0-.428-.167m-4.758.595a.595.595 0 0 0-.595.595v8.661l-1.19-1.17-.836.836L7.2 16.294a.61.61 0 0 0 .855 0l2.194-2.212-.837-.836-1.19 1.17V5.755a.595.595 0 0 0-.594-.595\" />\n </svg>\n);\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const CollateralContribution: React.FC<{\n value: number;\n precision: number;\n}> = (props) => {\n const { t } = useTranslation();\n const { value, precision } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.collateralContribution\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n rm={Decimal.ROUND_DOWN}\n className={cn(\"oui-font-semibold\")}\n padding={false}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36} className=\"oui-select-none\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\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 \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../../icons\";\n\ntype ExchangeDividerProps = {\n icon?: ReactNode;\n};\n\nexport const ExchangeDivider: FC<ExchangeDividerProps> = ({ icon }) => {\n return (\n <Flex height={40} gapX={3}>\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n {icon || <ArrowDownIcon className=\"oui-text-primary-light\" />}\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { type UseDepositFeeReturn } from \"../depositForm/depositForm.script\";\n\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 \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const MinimumReceived: React.FC<\n Readonly<{ symbol: string; value: number | string; precision: number }>\n> = (props) => {\n const { t } = useTranslation();\n const { value, symbol, precision = 6 } = props;\n\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.swapDeposit.minimumReceived\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n className=\"oui-select-none\"\n intensity={80}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" className=\"oui-select-none\" intensity={36}>\n {symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Input,\n Select,\n InputProps,\n cn,\n Box,\n Text,\n Flex,\n inputFormatter,\n Spinner,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { TokenOption } from \"./tokenOption\";\n\nexport type QuantityInputProps = {\n token?: API.TokenInfo;\n tokens?: API.TokenInfo[];\n label?: string;\n status?: InputStatus;\n hintMessage?: string;\n onValueChange?: (value: string) => void;\n onTokenChange?: (token: any) => void;\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n loading?: boolean;\n testId?: string;\n formatters?: InputFormatter[];\n vaultBalanceList?: API.VaultBalance[];\n displayType?: \"balance\" | \"vaultBalance\";\n tokenBalances?: Record<string, string>;\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 tokenBalances,\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 optionRenderer={optionRenderer}\n contentProps={{\n onCloseAutoFocus: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n onClick: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n style: { width },\n align: \"end\",\n sideOffset: 5,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n </div>\n );\n\n const message = (\n <Flex mt={1} gapX={1} px={1}>\n <Box\n width={4}\n height={4}\n r=\"full\"\n className={cn(\n status === \"error\" && \"oui-bg-danger-light\",\n status === \"warning\" && \"oui-bg-warning-light\",\n )}\n ></Box>\n <Text\n size=\"2xs\"\n className={cn(\n status === \"error\" && \"oui-text-danger-light\",\n status === \"warning\" && \"oui-text-warning-light\",\n )}\n >\n {hintMessage}\n </Text>\n </Flex>\n );\n\n const _placeholder = placeholder ?? (loading ? \"\" : \"0\");\n\n return (\n <>\n <Input\n ref={inputRef}\n autoComplete=\"off\"\n placeholder={_placeholder}\n prefix={prefix}\n suffix={suffix}\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value);\n }}\n formatters={\n formatters || [\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(token?.precision ?? 2),\n inputFormatter.currencyFormatter,\n ]\n }\n {...rest}\n classNames={{\n ...classNames,\n root: cn(\n \"oui-relative oui-h-[54px] oui-px-3\",\n \"oui-rounded-lg oui-border oui-border-line\",\n status === \"error\" &&\n \"oui-outline-danger-light focus-within:oui-outline-danger-light\",\n status === \"warning\" &&\n \"oui-outline-warning-light focus-within:oui-outline-warning-light\",\n props.readOnly\n ? \"oui-border-none oui-bg-base-6 focus-within:oui-outline-0\"\n : \"oui-bg-base-5\",\n classNames?.root,\n ),\n input: cn(\"oui-absolute oui-bottom-0\", classNames?.input),\n }}\n />\n {hintMessage && message}\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n cn,\n Flex,\n Spinner,\n Text,\n TokenIcon,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/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 \"@orderly.network/types\";\n\nconst retryInterval = 1000;\n\nexport function useBalance(\n token: API.TokenInfo,\n fetchBalance?: (token: string, decimals: number) => Promise<any>,\n open?: boolean,\n) {\n const [balance, setBalance] = useState<string>(\"\");\n const balanceRef = useRef<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n const loopGetTokenBalance = async (timeout = 0) => {\n if (loading || typeof fetchBalance !== \"function\" || !token.address) {\n return;\n }\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (balanceRef.current === \"\") {\n // when balance is empty, set loading to true\n setLoading(true);\n }\n\n timeoutRef.current = setTimeout(async () => {\n try {\n const balance = await fetchBalance(token.address!, token.decimals!);\n setBalance(balance);\n balanceRef.current = balance;\n console.log(\"balance\", token.symbol, token.address, balance);\n } catch (err) {\n console.error(\"get balance error\", token.symbol, token.address, err);\n // when fetch balance failed, retry\n loopGetTokenBalance(retryInterval);\n } finally {\n if (balanceRef.current !== \"\") {\n setLoading(false);\n }\n }\n }, timeout);\n };\n\n useEffect(() => {\n if (open) {\n // get balance first, no timeout\n loopGetTokenBalance(0);\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [token, open]);\n\n return { balance, loading };\n}\n","import { FC, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlertDialog,\n Box,\n cn,\n EditIcon,\n Flex,\n Input,\n inputFormatter,\n Text,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ninterface SlippageProps {\n value?: number;\n onValueChange?: (value: number) => void;\n max?: number;\n min?: number;\n}\n\nconst options = [0.5, 1, 2];\n\nexport const Slippage: FC<SlippageProps> = (props) => {\n const { min = 0.2, max = 10 } = props;\n const [value, setValue] = useState<number>();\n const [customValue, setCustomValue] = useState(\"\");\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.value && !options.includes(props.value!)) {\n setCustomValue(props.value!.toString());\n } else {\n setValue(props.value);\n }\n }, [props.value, open]);\n\n const showSlippage = () => {\n setOpen(true);\n };\n\n const hideSlippage = () => {\n setOpen(false);\n };\n\n const onClick = (val: number) => {\n setValue(val);\n setCustomValue(\"\");\n };\n\n const onValueChange = (val: string) => {\n if (!val || Number(val) === 0) {\n setCustomValue(val);\n return;\n }\n\n const d = new Decimal(val);\n setValue(undefined);\n if (d.lt(min)) {\n setCustomValue(min.toString());\n } else if (d.gt(max)) {\n setCustomValue(max.toString());\n } else {\n setCustomValue(val);\n }\n };\n\n const getValue = () =>\n customValue ? new Decimal(customValue)?.toNumber() : value;\n\n const onConfirm = () => {\n const val = getValue();\n if (!val) return Promise.resolve(true);\n props.onValueChange?.(val);\n hideSlippage();\n // if custom value in options, then clear custom value\n if (options.includes(val)) {\n setCustomValue(\"\");\n }\n return Promise.resolve(true);\n };\n\n const disabled = !getValue();\n\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={2}>\n {options.map((item) => {\n const isActive = value === item;\n return (\n <SlippageItem\n key={item}\n value={item}\n isActive={isActive}\n onClick={() => {\n onClick(item);\n }}\n />\n );\n })}\n\n <Input\n suffix=\"%\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n ]}\n value={customValue}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-rounded-md oui-bg-base-6\",\n \"oui-h-[40px] oui-w-[74px]\",\n ),\n input: \"oui-text-base-contrast\",\n additional: \"oui-pl-1\",\n }}\n />\n </Flex>\n\n <Box mt={5}>\n <Text intensity={54}>\n {t(\"transfer.slippage.slippageTolerance.description\")}\n </Text>\n </Box>\n </div>\n );\n\n return (\n <>\n <AlertDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"transfer.slippage.slippageTolerance\")}\n okLabel={t(\"common.confirm\")}\n message={content}\n onOk={onConfirm}\n actions={{ primary: { disabled } }}\n />\n <Flex\n width=\"100%\"\n justify=\"between\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={showSlippage}\n >\n <Text intensity={36} size=\"2xs\">\n {t(\"transfer.slippage\")}\n </Text>\n <Flex gapX={1}>\n <Text size=\"2xs\" color=\"primaryLight\">\n {props.value}%\n </Text>\n <EditIcon className=\"oui-size-3 oui-text-primary-light\" />\n </Flex>\n </Flex>\n </>\n );\n};\n\ntype SlippageItemProps = {\n value: number;\n isActive: boolean;\n onClick: () => void;\n};\n\nconst SlippageItem: FC<SlippageItemProps> = ({ value, isActive, onClick }) => {\n return (\n <Flex\n intensity={600}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"md\"\n width={74}\n height={40}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive && \"oui-bg-primary-light\",\n )}\n onClick={onClick}\n >\n <Text size=\"sm\" intensity={80}>\n {value}%\n </Text>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { Box, Text } from \"@orderly.network/ui\";\nimport { modal } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\n\ntype NoticeProps = {\n message?: string;\n needSwap?: boolean;\n needCrossSwap?: boolean;\n wrongNetwork?: boolean;\n networkId?: NetworkId;\n};\n\nexport const Notice: FC<NoticeProps> = (props) => {\n const { message, needSwap, needCrossSwap, wrongNetwork, networkId } = props;\n const { t } = useTranslation();\n\n const showChainSelect = () => {\n modal.show(ChainSelectorDialogId, { networkId });\n };\n\n const content = useMemo(() => {\n if (wrongNetwork) {\n return t(\"connector.wrongNetwork.tooltip\");\n }\n\n if (message) {\n return message;\n }\n\n if (needCrossSwap) {\n return (\n <Text>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.crossSwap.notice\"\n components={[\n <Text\n key=\"0\"\n className=\"oui-cursor-pointer\"\n color=\"primaryLight\"\n onClick={showChainSelect}\n />,\n ]}\n />\n </Text>\n );\n }\n\n if (needSwap) {\n return t(\"transfer.swapDeposit.swap.notice\");\n }\n }, [message, needSwap, needCrossSwap, wrongNetwork, t]);\n\n if (content) {\n return (\n <Box\n mb={3}\n className=\"oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Box>\n );\n }\n\n return null;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Divider, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { UseSwapFee } from \"../hooks/useSwapFee\";\n\ntype SwapFeeProps = UseSwapFee;\n\nexport const SwapFee: FC<SwapFeeProps> = (props) => {\n const { feeQtys, feeAmount, feeDetails, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <Box className=\"oui-text-2xs\">\n {feeDetails?.map((item, index) => {\n const isEnd = index === feeDetails?.length - 1;\n return (\n <Box key={index}>\n <Flex gapX={1}>\n <Text intensity={54}>{item.title}:</Text>\n {/* TODO: format price in data */}\n <Text\n intensity={80}\n // dp={item.dp}\n // rm={Decimal.ROUND_UP}\n // padding={false}\n >\n {item.value}\n </Text>\n <Text intensity={54}>{item.symbol}</Text>\n </Flex>\n\n <Box mt={2}>\n <Text intensity={36}>{item.description}</Text>\n </Box>\n\n {!isEnd && (\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const renderFeeQty = () => {\n const len = feeQtys?.length;\n if (!len) return;\n\n const list = feeQtys.map((item, index) => {\n return (\n <Text intensity={54} key={index}>\n <Text.numeral dp={item.dp} padding={false} rm={Decimal.ROUND_UP}>\n {item.value}\n </Text.numeral>\n {` ${item.symbol || nativeSymbol}`}\n </Text>\n );\n });\n\n if (len === 1) {\n return <span>({list})</span>;\n }\n\n if (len === 2) {\n return (\n <span>\n ({list[0]} + {list[1]})\n </span>\n );\n }\n };\n\n return (\n <Text\n size=\"xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n onClick={onShowFee}\n >\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount}\n </Text.numeral>\n {` `}\n </Text>\n\n {renderFeeQty()}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\n\ninterface SwapCoinProps {\n className?: string;\n sourceSymbol?: string;\n targetSymbol?: string;\n indexPrice: number | string;\n precision?: number;\n}\n\nexport const SwapCoin: FC<SwapCoinProps> = (props) => {\n const { sourceSymbol, targetSymbol, indexPrice, precision = 6 } = props;\n return (\n <Flex\n itemAlign=\"center\"\n gap={1}\n className={cn(props.className, \"oui-text-2xs\")}\n >\n <Text size=\"2xs\" intensity={80}>\n 1\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {sourceSymbol}\n </Text>\n =\n <Text.numeral size=\"2xs\" intensity={80} dp={precision} padding={false}>\n {indexPrice}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36}>\n {targetSymbol}\n </Text>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { ArrowRightIcon } from \"../swap/icons\";\n\nexport const SwapIndicator: React.FC<{\n sourceToken?: string;\n targetToken?: string;\n className?: string;\n}> = (props) => {\n const { sourceToken, targetToken, className } = props;\n\n if (sourceToken === targetToken) {\n return null;\n }\n\n return (\n <Flex\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={className}\n >\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={sourceToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {sourceToken}\n </Text>\n </Flex>\n <ArrowRightIcon className=\"oui-size-4\" />\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={targetToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {targetToken}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n","import { FC, SVGProps } from \"react\";\n\nexport const EditIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.498.977a.5.5 0 0 0-.36.14l-1.5 1.501-4.503 4.503-.5.5a.5.5 0 0 0-.125.266l-.5 2.501c-.07.35.228.648.578.579l2.501-.5a.5.5 0 0 0 .266-.126l.5-.5 4.503-4.503 1.5-1.5a.5.5 0 0 0 .141-.36c0-.818-.208-1.403-.64-1.845-.437-.445-1.02-.656-1.861-.656m.197 1.01c.451.026.744.13.944.334.205.21.335.5.363.942-.274.273-.675.668-1.004.997L7.716 2.978c.33-.329.705-.718.979-.992m-1.698 1.71L8.28 4.979 4.496 8.762 3.214 7.48zM2.495 8.199l1.282 1.282-.047.047c-.33.066-.997.206-1.61.329l.328-1.61z\" />\n </svg>\n);\n\nexport const ArrowRightIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"25\"\n viewBox=\"0 0 24 25\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 12.493a1 1 0 0 1 .999-1h7.555L11.6 8.498l1.405-1.405 4.714 4.683c.196.195.293.457.293.719 0 .26-.098.522-.293.717l-4.714 4.683L11.6 16.49l2.966-2.997H7.011a1 1 0 0 1-.999-1\" />\n </svg>\n);\n\nexport const GasFeeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 2.67v10.663h4.667V2.667H4zm6-.003v2.666h1c.218 0 .53.06.806.26.31.223.527.59.527 1.074V12h1V6.667c0-.045 0-.154-.027-.277a.5.5 0 0 0-.11-.252l-1.668-1.667a.667.667 0 0 1 .943-.942l1.667 1.666c.294.294.417.658.472.915.057.264.057.486.057.555V12c0 .484-.217.85-.527 1.074-.277.2-.589.26-.807.26h-1c-.484 0-.85-.217-1.074-.528a1.4 1.4 0 0 1-.26-.806V6.667H10v6.666h.667a.667.667 0 0 1 0 1.334H2a.667.667 0 0 1 0-1.334h.667V2.667c0-.218.06-.53.259-.807.223-.31.59-.527 1.074-.527h4.667c.217 0 .53.06.806.26.31.223.527.59.527 1.074m-4.667 2a.667.667 0 0 0 0 1.333h2a.667.667 0 0 0 0-1.333z\"\n />\n </svg>\n);\n\nexport const TopRightArrowIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"13\"\n height=\"12\"\n viewBox=\"0 0 13 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.996 10.496a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2zm-4-2.5a.5.5 0 0 1-.36-.14.515.515 0 0 1 0-.72l2-2-1.14-1.14h3v3l-1.14-1.14-2 2a.5.5 0 0 1-.36.14\" />\n </svg>\n);\n\nexport const WoofiIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#07080A\" />\n <path\n d=\"M5.077 7.385h2.269l1.604 5.28c.106.348.196.73.196.73s.138-.413.28-.742l.885-2.052a1.8 1.8 0 0 1 .66-.782 1.81 1.81 0 0 1 1.974 0c.293.191.523.463.662.782l2.143 4.91v1.095h-1.402c-.235 0-.464-.07-.66-.2a1.17 1.17 0 0 1-.434-.53l-1.303-3.16-1.243 3.152a1.19 1.19 0 0 1-1.105.747h-.848c-.235 0-.465-.075-.654-.214a1.1 1.1 0 0 1-.4-.556z\"\n fill=\"#FEFEFE\"\n />\n <path d=\"m18.146 10.846 1.066-3.461h-2.396l-1.066 3.461z\" fill=\"url(#a)\" />\n <path\n d=\"m15.371 12-1.208 3.865v.009c-.073.216-.194.529-.514.51a.33.33 0 0 1-.207-.058c.211.186.482.29.763.29h1.428a1.065 1.065 0 0 0 .928-.75L17.769 12z\"\n fill=\"url(#b)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"14.618\"\n y1=\"16.592\"\n x2=\"17.597\"\n y2=\"7.455\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n <linearGradient\n id=\"b\"\n x1=\"16.192\"\n y1=\"16.587\"\n x2=\"18.206\"\n y2=\"7.458\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { FC, useMemo } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@orderly.network/types\";\nimport { Flex, Text, WalletIcon } from \"@orderly.network/ui\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const address = useMemo(() => {\n let address = accountState.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, accountState, account, connectedChain]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.web3Wallet.your\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"xs\"} name={wallet?.label ?? \"\"} />\n <Text.formatted size=\"sm\" intensity={54} rule=\"address\">\n {address}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/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 \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account as accountPerp } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n API,\n NetworkId,\n ChainNamespace,\n isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useNeedSwapAndCross } from \"../swap/hooks/useNeedSwapAndCross\";\nimport { useSwapDeposit } from \"../swap/hooks/useSwapDeposit\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"./hooks\";\nimport { 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 { 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 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 {\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 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 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 tokenBalances,\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 \"@orderly.network/types\";\n\nexport function useNeedSwapAndCross(options: {\n srcToken?: API.TokenInfo;\n dstToken?: API.TokenInfo;\n srcChainId?: number;\n dstChainId?: number;\n}) {\n const { srcToken, dstToken, srcChainId, dstChainId } = options;\n const [needSwap, setNeedSwap] = useState(false);\n const [needCrossSwap, setNeedCrossSwap] = useState(false);\n\n useEffect(() => {\n if (!srcChainId || !dstChainId || !srcToken || !dstToken) return;\n const isCrossChain = srcChainId !== dstChainId;\n\n if (\n (srcToken?.symbol === \"USDC\" && !isCrossChain) ||\n // if srcToken is collateral and srcToken.symbol is the same as dstToken.symbol, it will not need swap\n (srcToken.is_collateral && srcToken.symbol === dstToken?.symbol)\n ) {\n setNeedSwap(false);\n setNeedCrossSwap(false);\n return;\n }\n\n setNeedSwap(srcToken?.symbol !== \"USDC\");\n\n if (isCrossChain) {\n setNeedCrossSwap(true);\n setNeedSwap(true);\n } else {\n setNeedCrossSwap(false);\n }\n }, [srcToken, dstToken, srcChainId, dstChainId]);\n\n return { needSwap, needCrossSwap };\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useConfig, useLocalStorage } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { DST, SwapMode } from \"../types\";\nimport { useSwapEnquiry } from \"./useSwapEnquiry\";\nimport { useSwapFee } from \"./useSwapFee\";\n\ntype SwapDepositOptions = {\n srcToken: API.TokenInfo;\n currentChain?: CurrentChain | null;\n dst: DST;\n quantity: string;\n isNativeToken: boolean;\n depositFee: bigint;\n setQuantity: (quantity: string) => void;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nconst ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY = \"orderly_swap_deposit_slippage\";\n\nexport const useSwapDeposit = (options: SwapDepositOptions) => {\n const {\n srcToken,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n } = options;\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY,\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n srcToken: srcToken?.address,\n dstToken: dst.address,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (srcToken?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: srcToken!.symbol,\n // swap precision\n displayDecimals: srcToken?.precision,\n amount: quantity,\n decimals: srcToken!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const swapFee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: srcToken,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n return {\n cleanTransactionInfo,\n onSwapDeposit,\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n swapRevalidating,\n warningMessage,\n needSwap,\n needCrossSwap,\n slippage,\n onSlippageChange: setSlippage,\n };\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport {\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { Swap, SwapProps } from \"./swap\";\n\nexport const SwapDialog = modal.create<SwapProps>((props) => {\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n const onComplete = (isSuccss: boolean) => {\n resolve(isSuccss);\n hide();\n };\n\n const onCancel = () => {\n reject();\n hide();\n };\n\n const commonProps = {\n title: t(\"transfer.swapDeposit.swapDialog.title\"),\n open: visible,\n onOpenChange,\n classNames: {\n content: \"oui-font-semibold\",\n },\n children: <Swap {...props} onComplete={onComplete} onCancel={onCancel} />,\n };\n\n if (isMobile) {\n return <SimpleSheet {...commonProps} />;\n }\n\n return <SimpleDialog {...commonProps} size=\"md\" />;\n});\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { useCrossSwap } from \"../hooks/useCrossSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const CrossSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain: chainInfo,\n nativeToken,\n depositFee,\n } = props;\n\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const {\n swap: doCrossSwap,\n bridgeStatus,\n message,\n status: swapStatus,\n } = useCrossSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chainInfo?.est_txn_mins,\n received: dst.amount,\n bridgeFee: transaction.fees_from.stargate,\n swapFee: transaction.fees_from.woofi,\n dstGasFee: transaction.dst_infos.gas_fee,\n };\n\n return info;\n }, [transaction, chainInfo?.est_txn_mins, mode, dst]);\n\n useEffect(() => {\n if (bridgeStatus === \"DELIVERED\") {\n setStatus(SwapProcessStatus.Depositing);\n }\n\n if (bridgeStatus === \"FAILED\") {\n setStatus(SwapProcessStatus.BridgeFialed);\n }\n\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [bridgeStatus, swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n setStatus(SwapProcessStatus.Bridging);\n\n return doCrossSwap({\n address: \"\",\n crossChainRouteAddress: chainInfo?.cross_chain_router!,\n src: {\n fromToken: transaction.src_infos.from_token,\n fromAmount: BigInt(transaction.src_infos.from_amount),\n bridgeToken: transaction.src_infos.bridge_token,\n minBridgeAmount: BigInt(transaction.src_infos.min_bridge_amount),\n },\n dst: {\n chainId: transaction.dst_infos.chain_id,\n bridgedToken: transaction.dst_infos.bridged_token,\n toToken: transaction.dst_infos.to_token,\n minToAmount: BigInt(transaction.dst_infos.min_to_amount),\n // @ts-ignore\n orderlyNativeFees: depositFee,\n },\n })\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.BridgeFialed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !message) {\n return;\n }\n return `https://layerzeroscan.com/tx/${message.srcTxHash}`;\n // return `https://layerzeroscan.com/${message.srcChainId}/address/${message.srcUaAddress}/message/${message.dstChainId}/address/${message.dstUaAddress}/nonce/${message.srcUaNonce}`;\n }, [status, message]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Cross}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Environment, createClient } from \"@layerzerolabs/scan-client\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport {\n isNativeTokenChecker,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport enum MessageStatus {\n INITIALIZING = \"WAITTING\",\n INFLIGHT = \"INFLIGHT\",\n CONFIRMING = \"CONFIRMING\",\n DELIVERED = \"DELIVERED\",\n FAILED = \"FAILED\",\n}\n\nexport const useCrossSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n const [layerStatus, setLayerStatus] = useState<MessageStatus>(\n MessageStatus.INITIALIZING,\n );\n\n const ee = useEventEmitter();\n\n const [bridgeMessage, setBridgeMessage] = useState<any | undefined>();\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n const txHashFromBridge = useRef<string | undefined>();\n\n const checkLayerStatusListener = useRef<ReturnType<typeof setTimeout>>();\n\n const account = useAccountInstance();\n\n const config = useConfig();\n const brokerId = config.get(\"brokerId\");\n const networkId = config.get(\"networkId\");\n\n const client = useRef(createClient(networkId as Environment)).current;\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHashFromBridge.current]);\n\n const checkLayerStatus = useCallback((txHash: string) => {\n if (checkLayerStatusListener.current) {\n clearTimeout(checkLayerStatusListener.current);\n }\n\n checkLayerStatusListener.current = setTimeout(async () => {\n try {\n const { messages } = await client.getMessagesBySrcTxHash(txHash);\n\n if (messages.length > 0) {\n const { status } = messages[0];\n\n setLayerStatus(status as MessageStatus);\n\n if (status === MessageStatus.DELIVERED) {\n setBridgeMessage(messages[0]);\n txHashFromBridge.current = messages[0].dstTxHash;\n } else if (status === MessageStatus.FAILED) {\n setBridgeMessage(messages[0]);\n } else {\n checkLayerStatus(txHash);\n }\n } else {\n checkLayerStatus(txHash);\n }\n } catch (e) {\n // setLayerStatus(MessageStatus.FAILED);\n checkLayerStatus(txHash);\n }\n }, 1000);\n }, []);\n\n // swap => src tx hash, cross swap => dst tx hash\n // const checkDeposit\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = async (inputs: {\n address: string;\n crossChainRouteAddress: string;\n src: {\n fromToken: string;\n fromAmount: bigint;\n bridgeToken: string;\n minBridgeAmount: bigint;\n };\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n airdropNativeAmount: bigint;\n };\n }) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (!inputs.crossChainRouteAddress) {\n throw new Error(\"crossChainRouteAddress is undefined\");\n }\n\n const { address, src, dst, crossChainRouteAddress } = inputs;\n if (loading) return;\n start();\n\n try {\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n const result = await account.walletAdapter.sendTransaction(\n crossChainRouteAddress,\n \"crossSwap\",\n {\n from: account.address!,\n to: crossChainRouteAddress,\n data: [account.address, src, dst, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.src.fromToken)\n ? BigInt(inputs.src.fromAmount) + quotoLZFee[0]\n : quotoLZFee[0],\n },\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n stop();\n\n checkLayerStatus(result.hash);\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n console.error(\"crossSwap error\", e);\n stop();\n throw new Error(e.errorCode);\n }\n };\n\n return {\n swap,\n loading,\n bridgeStatus: layerStatus,\n status,\n message: bridgeMessage,\n };\n};\n","export const woofiDexCrossSwapChainRouterAbi = [\n {\n inputs: [],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint8\",\n name: \"version\",\n type: \"uint8\",\n },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"realToToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"realToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnDstChain\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"dstChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnSrcChain\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MAX_BRIDGE_SLIPPAGE\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"addDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokens\",\n outputs: [\n {\n internalType: \"address[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokensLength\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bridgeSlippage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address payable\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.SrcInfos\",\n name: \"srcInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"crossSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForNoSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"stuckToken\",\n type: \"address\",\n },\n ],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_weth\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nonceCounter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"quoteLayerZeroFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"nativeAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"zroAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"removeDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_bridgeSlippage\",\n type: \"uint256\",\n },\n ],\n name: \"setBridgeSlippage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForNoSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForNoSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n ],\n name: \"setNonceCounter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_orderlyFeeToggle\",\n type: \"bool\",\n },\n ],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"setSgChainIdLocal\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"setSgETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"poolId\",\n type: \"uint256\",\n },\n ],\n name: \"setSgPoolId\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n ],\n name: \"setSgRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexCrossChainRouter\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexCrossChainRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexVault\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n ],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgChainIdLocal\",\n outputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"sgETHs\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"sgPoolIds\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"payload\",\n type: \"bytes\",\n },\n ],\n name: \"sgReceive\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"weth\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"woofiDexCrossChainRouters\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"woofiDexVaults\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n];\n\nexport const woofiDexSwapDepositorAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint8\", name: \"version\", type: \"uint8\" },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"toAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexSwap\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"stuckToken\", type: \"address\" }],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bool\", name: \"_orderlyFeeToggle\", type: \"bool\" }],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n { internalType: \"address\", name: \"woofiDexVault\", type: \"address\" },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"fromToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"fromAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"toToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"minToAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexDepositor.Infos\",\n name: \"infos\",\n type: \"tuple\",\n },\n {\n components: [\n { internalType: \"bytes32\", name: \"accountId\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"brokerHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"tokenHash\", type: \"bytes32\" },\n ],\n internalType: \"struct IWOOFiDexDepositor.VaultDeposit\",\n name: \"vaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"woofiDexVaults\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n];\n\nexport const nativeTokenAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\nexport const isNativeTokenChecker = (address: string) =>\n address === nativeTokenAddress;\n\nexport const swapSupportApiUrl = \"https://fi-api.woo.org\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n CheckedCircleFillIcon,\n CloseCircleFillIcon,\n cn,\n Divider,\n Flex,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\nimport { TopRightArrowIcon } from \"../icons\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\n\ntype ProcessStatusProps = {\n status?: SwapProcessStatus;\n mode: SwapMode;\n statusUrl?: string;\n onComplete?: (isSuccss: boolean) => void;\n brokerName?: string;\n};\n\nenum SwapState {\n Pending = \"pending\",\n Failed = \"failed\",\n Success = \"success\",\n}\n\ntype TProcessItem = {\n title: string;\n description: string;\n state?: SwapState;\n};\n\nexport const ProcessStatus: FC<ProcessStatusProps> = (props) => {\n const { status, mode, statusUrl, brokerName } = props;\n const { t } = useTranslation();\n\n const processList = useMemo(() => {\n const bridgeStatus = getBridgeStatus(status!);\n const depositStatus = getDepositStatus(status!);\n const list: TProcessItem[] = [\n {\n title:\n bridgeStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.bridging\")\n : t(\"transfer.swapDeposit.bridge\"),\n description: t(\"transfer.swapDeposit.bridge.description\"),\n state: bridgeStatus,\n },\n {\n title:\n depositStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.depositing\")\n : t(\"transfer.swapDeposit.deposit\"),\n description: t(\"transfer.swapDeposit.deposit.description\", {\n brokerName,\n }),\n state: depositStatus,\n },\n ];\n\n if (mode === SwapMode.Single) {\n return list.slice(1, 2);\n }\n\n return list;\n }, [mode, brokerName, status, t]);\n\n const onOk = () => {\n props.onComplete?.(status === SwapProcessStatus.Done);\n };\n\n const isFailed =\n status === SwapProcessStatus.DepositFailed ||\n status === SwapProcessStatus.BridgeFialed;\n\n const disabled =\n status === SwapProcessStatus.Bridging ||\n status === SwapProcessStatus.Depositing;\n\n const showDashLine = processList.length > 1;\n\n return (\n <div className=\"oui-font-semibold\">\n <Box intensity={600} p={4} r=\"lg\">\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n gapY={4}\n className=\"oui-relative\"\n >\n {processList.map((item) => (\n <ProcessItem {...item} key={item.title} />\n ))}\n {showDashLine && (\n <div\n className={cn(\n \"oui-absolute oui-left-[10px] oui-top-[20px] oui-bottom-[38px]\",\n \"oui-w-[1px] oui-h-[34px]\",\n \"oui-border-r oui-border-dashed oui-border-r-line-16\",\n )}\n />\n )}\n </Flex>\n\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n\n <Flex\n gapX={1}\n justify=\"center\"\n itemAlign=\"center\"\n className={cn(\n statusUrl ? \"oui-text-primary-light\" : \"oui-text-base-contrast-20\",\n statusUrl ? \"oui-cursor-pointer\" : \"oui-cursor-not-allowed\",\n )}\n onClick={() => {\n statusUrl && window.open(statusUrl);\n }}\n >\n <Text size=\"2xs\">{t(\"transfer.swapDeposit.viewStatus\")}</Text>\n <TopRightArrowIcon />\n </Flex>\n </Box>\n\n <Flex\n direction=\"column\"\n justify=\"center\"\n itemAlign=\"center\"\n mt={8}\n gapY={3}\n >\n {isFailed && (\n <Text size=\"xs\" className=\"oui-text-danger-light\">\n {t(\"transfer.swapDeposit.depositFailed\")}\n </Text>\n )}\n\n <Button\n className=\"oui-w-full lg:oui-w-[184px]\"\n disabled={disabled}\n onClick={onOk}\n >\n {t(\"common.ok\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nconst ProcessItem: FC<TProcessItem> = ({ title, description, state }) => {\n return (\n <Flex itemAlign=\"start\" gapX={2} key={title}>\n <Flex width={20} height={20} justify=\"center\">\n <StatusIndicator state={state} />\n </Flex>\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text\n size=\"sm\"\n className={cn(\n state === \"pending\" || state === \"failed\"\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-54\",\n )}\n >\n {title}\n </Text>\n <Text\n size=\"2xs\"\n className={cn(\n state === \"pending\"\n ? \"oui-text-base-contrast-54\"\n : \"oui-text-base-contrast-20\",\n )}\n >\n {description}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst StatusIndicator: FC<{ state?: SwapState }> = ({ state }) => {\n if (state === SwapState.Pending) {\n return <Spinner size=\"sm\" />;\n }\n\n if (state === SwapState.Failed) {\n return (\n <CloseCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-danger-light\"\n />\n );\n }\n\n if (state === SwapState.Success) {\n return (\n <CheckedCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-primary-light\"\n />\n );\n }\n\n return <Box r=\"full\" width={10} height={10} intensity={200}></Box>;\n};\n\nfunction getBridgeStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Bridging) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.BridgeFialed) {\n return SwapState.Failed;\n }\n\n if (\n status === SwapProcessStatus.Done ||\n status === SwapProcessStatus.Depositing\n ) {\n return SwapState.Success;\n }\n}\n\nfunction getDepositStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Depositing) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.DepositFailed) {\n return SwapState.Failed;\n }\n\n if (status === SwapProcessStatus.Done) {\n return SwapState.Success;\n }\n}\n","import { FC, ReactNode } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n Flex,\n Text,\n TokenIcon,\n Icon,\n Divider,\n Button,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { ArrowRightIcon, GasFeeIcon, WoofiIcon } from \"../icons\";\nimport { SwapMode, SymbolInfo } from \"../types\";\n\nexport interface SwapInfo {\n // gasFee: string;\n // tradingFee: string;\n dstGasFee: string;\n swapFee: string;\n bridgeFee: string;\n price: number;\n slippage: number;\n received: string;\n time: number;\n}\n\ntype SwapDetailProps = {\n onConfirm: () => void;\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n info: SwapInfo;\n markPrice: number;\n nativePrice: number;\n nativeToken?: API.TokenInfo;\n viewMode: \"processing\" | \"details\";\n // transactionData: any;\n};\n\nexport const SwapDetail: FC<SwapDetailProps> = (props) => {\n const {\n info,\n mode,\n nativePrice,\n markPrice,\n src,\n dst,\n nativeToken,\n viewMode,\n } = props;\n\n const { t } = useTranslation();\n\n const header = (\n <Flex justify=\"between\">\n <SwapSymbol\n primary={src?.token}\n chainId={src.chain}\n amount={src?.amount}\n dp={src?.displayDecimals}\n symbol={src?.token}\n />\n <ArrowRightIcon className=\"oui-text-primary-light\" />\n <SwapSymbol\n primary={dst?.token}\n component={<WoofiIcon className=\"oui-size-4\" />}\n amount={dst?.amount}\n dp={dst?.displayDecimals}\n symbol={dst?.token}\n reverse\n />\n </Flex>\n );\n\n const divider = (\n <Box my={5}>\n <Divider intensity={12} />\n </Box>\n );\n\n const listData = [\n {\n label: t(\"transfer.deposit.destinationGasFee\"),\n value: (\n <Flex gapX={1}>\n <GasFeeIcon className=\"oui-text-primary-light\" />\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n // swap precision\n dp={feeDecimalsOffset(nativeToken?.precision)}\n >\n {info.dstGasFee!}\n </Text.numeral>\n <Text color=\"primaryLight\">{nativeToken?.symbol}</Text>\n <Text className=\"oui-text-primary-light/60\">\n ($\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n dp={2}\n >\n {new Decimal(info.dstGasFee?.toString())\n .mul(nativePrice || 0)\n .toString()}\n </Text.numeral>\n )\n </Text>\n </Flex>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.swapFee\"),\n value: (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.swapFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.swapFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.bridgeFee\"),\n value: mode === SwapMode.Cross && (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.bridgeFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.bridgeFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.minimumReceived\"),\n value: (\n <>\n <Text.numeral\n dp={dst?.displayDecimals}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n >\n {info.received}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"common.price\"),\n value: (\n <>\n {`1 ${src?.token} = `}\n <Text.numeral dp={3} padding={false}>\n {info.price}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"transfer.slippage\"),\n value: `${info.slippage}%`,\n },\n ];\n\n const listView = (\n <Flex direction=\"column\" itemAlign=\"start\" gapY={3}>\n {listData?.map((item) => {\n if (item.value) {\n return <ListItem {...item} key={item.label} />;\n }\n })}\n </Flex>\n );\n\n const swapButton = (\n <Flex justify=\"center\" mt={8}>\n <Button className=\"oui-w-full lg:oui-w-[184px]\" onClick={props.onConfirm}>\n {t(\"transfer.swapDeposit.confirmSwap\")}\n </Button>\n </Flex>\n );\n\n return (\n <Box intensity={800}>\n {header}\n <SwapTime time={info.time ?? 0} />\n {divider}\n\n {viewMode === \"details\" && (\n <>\n {listView}\n {swapButton}\n </>\n )}\n </Box>\n );\n};\n\ntype ListItemProps = {\n label?: string;\n value?: ReactNode;\n};\n\nconst ListItem: FC<ListItemProps> = (props) => {\n return (\n <Flex gapX={2} justify=\"between\" width=\"100%\">\n <Text size=\"sm\" intensity={54}>\n {props.label}\n </Text>\n <Text size=\"sm\" intensity={98} as=\"div\">\n {props.value}\n </Text>\n </Flex>\n );\n};\n\ntype SwapSymbolProps = {\n primary: string;\n chainId?: number;\n component?: ReactNode;\n amount: string;\n dp?: number;\n symbol: string;\n reverse?: boolean;\n};\n\nconst SwapSymbol: FC<SwapSymbolProps> = (props) => {\n return (\n <Flex gapX={2} direction={props.reverse ? \"rowReverse\" : \"row\"}>\n <Icon.combine\n secondary={{\n chainId: props.chainId,\n component: props.component,\n className: \"oui-w-4 oui-h-4 oui-outline-base-8 oui-rounded-full\",\n }}\n >\n <TokenIcon name={props.primary} size=\"md\" />\n </Icon.combine>\n\n <Flex direction=\"column\" itemAlign={props.reverse ? \"end\" : \"start\"}>\n <Text.numeral intensity={98} size=\"lg\" dp={props.dp}>\n {props.amount}\n </Text.numeral>\n <Text intensity={54} size=\"xs\">\n {props.symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst SwapTime: FC<{ time: number }> = (props) => {\n return (\n <Flex justify=\"center\">\n <Flex\n intensity={600}\n r=\"full\"\n gapX={2}\n justify=\"center\"\n py={1}\n mt={2}\n width={210}\n >\n <Text size=\"sm\" intensity={54}>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.averageSwapTime\"\n values={{ time: props.time }}\n components={[<Text color=\"primaryLight\" key=\"0\" />]}\n />\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const getTokenByTokenList = (tokens: API.TokenInfo[] = []) => {\n const tokenObj = tokens.reduce<Record<string, API.TokenInfo>>((acc, item) => {\n acc[item.symbol!] = item;\n return acc;\n }, {});\n return tokenObj[\"USDC\"] || tokenObj[\"USDbC\"] || tokens[0];\n};\n\nexport const feeDecimalsOffset = (origin?: number): number => {\n return (origin ?? 2) + 3;\n};\n\n// export const priceDecimalsOffset = (origin?: number): number => {\n// return Math.abs((origin ?? 2) - 5);\n// };\n\nexport function checkIsAccountId(accountId: string) {\n const regex = /^0x[a-fA-F0-9]{64}$/;\n return regex.test(accountId);\n}\n\nexport function getTransferErrorMessage(errorCode: number) {\n if (errorCode === 34) {\n return i18n.t(\"transfer.internalTransfer.error.transferInProgress\");\n }\n\n if (errorCode === 17) {\n return i18n.t(\"transfer.internalTransfer.error.withdrawalInProgress\");\n }\n\n if (errorCode === 35) {\n return i18n.t(\"transfer.internalTransfer.error.accountIdNotExist\");\n }\n\n if (errorCode === 37) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSelf\");\n }\n\n if (errorCode === 46) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSubAccount\");\n }\n\n // TODO: when api return 500 status, not throw error code\n // if (errorCode === -1000) {\n // return i18n.t(\"transfer.internalTransfer.error.scopeInsufficient\");\n // }\n\n return i18n.t(\"transfer.internalTransfer.error.default\");\n}\n\nconst depositErrorCodeMap = {\n \"0x6697b232\": \"AccessControlBadConfirmation\",\n \"0xe2517d3f\": \"AccessControlUnauthorizedAccount\",\n \"0xc7ee9ce6\": \"AccountIdInvalid\",\n \"0x9fabe1c1\": \"AddressZero\",\n \"0x4b3815a6\": \"BalanceNotEnough\",\n \"0x59d9b863\": \"BrokerNotAllowed\",\n \"0xf67c6d78\": \"CeffuAddressMismatch\",\n \"0xd969df24\": \"DepositExceedLimit\",\n \"0xa65b249b\": \"EnumerableSetError\",\n \"0x06a0cf4a\": \"InvalidSwapSignature\",\n \"0x1eb00b06\": \"InvalidTokenAddress\",\n \"0xfa7c7537\": \"NativeTokenDepositAmountMismatch\",\n \"0xad674ae6\": \"NotRebalanceEnableToken\",\n \"0x623793c9\": \"NotZeroCodeLength\",\n \"0x833d33e7\": \"OnlyCrossChainManagerCanCall\",\n \"0x3ee5aeb5\": \"ReentrancyGuardReentrantCall\",\n \"0x0b693144\": \"SwapAlreadySubmitted\",\n \"0xa29c4986\": \"TokenNotAllowed\",\n \"0x30773dbb\": \"ZeroCodeLength\",\n \"0x56316e87\": \"ZeroDeposit\",\n \"0x93d3bb4d\": \"ZeroDepositFee\",\n};\n\nexport function getDepositKnownErrorMessage(message: string) {\n if (!message) {\n return \"\";\n }\n\n for (const key of Object.keys(depositErrorCodeMap)) {\n if (message.includes(key)) {\n const value =\n depositErrorCodeMap[key as keyof typeof depositErrorCodeMap];\n return `${value} (${key})`;\n }\n }\n}\n","import { FC } from \"react\";\nimport { Trans } from \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const ViewFAQs: FC = () => {\n return (\n <Flex justify=\"center\" gapX={1} mt={3}>\n <Trans\n i18nKey=\"transfer.swapDeposit.viewFAQs\"\n components={[\n <Text\n size=\"xs\"\n color=\"primaryLight\"\n onClick={() => {\n window.open(\"https://learn.woo.org/woofi/faqs/woofi-pro\");\n }}\n className=\"oui-cursor-pointer\"\n key=\"0\"\n />,\n ]}\n />\n </Flex>\n );\n};\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSwap } from \"../hooks/useSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const SingleSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain,\n nativeToken,\n depositFee,\n } = props;\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const { swap: doSingleSwap, status: swapStatus } = useSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chain?.est_txn_mins,\n received: dst.amount,\n dstGasFee: new Decimal(depositFee!.toString())\n ?.div(new Decimal(10).pow(18))\n ?.toString(),\n swapFee: transaction.fees_from,\n };\n\n return info;\n }, [transaction, chain?.est_txn_mins, mode, dst, depositFee]);\n\n useEffect(() => {\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n if (!chain || !chain.depositor) return Promise.reject(\"No chain data\");\n\n setStatus(SwapProcessStatus.Depositing);\n\n return doSingleSwap(\n chain.depositor,\n {\n fromToken: transaction.infos.from_token,\n fromAmount: transaction.infos.from_amount,\n toToken: transaction.infos.to_token,\n minToAmount: transaction.infos.min_to_amount,\n orderlyNativeFees: depositFee,\n },\n { dst, src },\n )\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.DepositFailed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !tx) {\n return;\n }\n return `${chain?.explorer_base_url}/tx/${tx.hash}`;\n }, [status, tx, chain]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Single}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { isNativeTokenChecker, woofiDexSwapDepositorAbi } from \"../constants\";\n\n/**\n * 1. fee precision swap_support.woofi_dex_precision+3,round off\n * 2. price precision = abs(woofi_dex_precision - 5),cut off\n * 3. orderly deposit fee = $0\n * 4. deposit pop-ups: don't show token when fee is 0.\n * e.g. dst gas fee = 0 ETH, swap fee = 0.04 USDC, it will show $0.04 ( 0.04 USDC )\n */\nexport const useSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n const brokerId = useConfig(\"brokerId\");\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n\n const txHash = useRef<string | undefined>();\n const ee = useEventEmitter();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHash.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHash.current]);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = useCallback(\n async (\n woofiDexDepositorAdress: string,\n inputs: {\n fromToken: string;\n fromAmount: string;\n toToken: string;\n minToAmount: string;\n orderlyNativeFees: bigint;\n },\n config: { dst: any; src: any },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (loading) return;\n start();\n\n const txPayload = {\n from: account.address,\n to: woofiDexDepositorAdress,\n data: [account.address, inputs, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.fromToken)\n ? BigInt(inputs.fromAmount) + inputs.orderlyNativeFees\n : inputs.orderlyNativeFees,\n };\n\n try {\n const result = await account.walletAdapter.sendTransaction(\n woofiDexDepositorAdress,\n \"swap\",\n txPayload,\n {\n abi: woofiDexSwapDepositorAbi,\n },\n );\n\n stop();\n\n txHash.current = result.hash;\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n throw new Error(e.errorCode);\n }\n },\n [loading, account],\n );\n\n return {\n swap,\n loading,\n status,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { SwapMode, SymbolInfo } from \"../types\";\nimport { CrossSwap } from \"./crossSwap\";\nimport { SingleSwap } from \"./singleSwap\";\n\nexport interface SwapProps {\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n chain?: API.NetworkInfos;\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n transactionData: any;\n slippage: number;\n brokerName?: string;\n onComplete?: (isSuccss: boolean) => void;\n onCancel?: () => void;\n onFail?: () => void;\n}\n\nexport const Swap: FC<SwapProps> = (props) => {\n const { mode } = props;\n\n if (mode === SwapMode.Cross) {\n return <CrossSwap {...props} />;\n }\n\n return <SingleSwap {...props} />;\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useBoolean, useDebouncedCallback } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DST, MarkPrices } from \"../types\";\nimport { useWooCrossSwapQuery } from \"./useCrossSwapQuery\";\nimport { useWooSwapQuery } from \"./useSwapQuery\";\n\nexport type TransactionInfo = {\n price: number;\n markPrices: MarkPrices;\n dstGasFee?: string;\n swapFee?: string;\n bridgeFee?: string;\n fee: string;\n};\n\ntype useSwapEnquiryProps = {\n quantity: string;\n dst: DST;\n queryParams: any;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nexport function useSwapEnquiry(props: useSwapEnquiryProps) {\n const { quantity, dst, queryParams, needSwap, needCrossSwap } = props;\n const { t } = useTranslation();\n const { query: wooSwapQuery } = useWooSwapQuery();\n const { query: wooCrossSwapQuery } = useWooCrossSwapQuery();\n\n const queryParamsRef = useRef(queryParams);\n queryParamsRef.current = queryParams;\n\n const [amount, setAmount] = useState<string>(\"\");\n const [warningMessage, setWarningMessage] = useState<string>(\"\");\n const [querying, { setTrue: queryStart, setFalse: queryStop }] =\n useBoolean(false);\n\n const [transactionInfo, setTransactionInfo] = useState<TransactionInfo>({\n price: 0,\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n fee: \"\",\n // dstGasFee: \"\",\n // swapFee: \"\",\n // bridgeFee: \"\",\n });\n\n const enquiry = useCallback(() => {\n if (needCrossSwap) {\n return wooCrossSwapQuery(queryParamsRef.current);\n }\n\n if (needSwap) {\n return wooSwapQuery(queryParamsRef.current);\n }\n\n return Promise.reject(\"no need to enquiry\");\n }, [needSwap, needCrossSwap]);\n\n const enquirySuccessHandle = (res: any) => {\n if (res.mark_prices) {\n const dstGasFee = needCrossSwap ? res.dst_infos.gas_fee : \"0\";\n const swapFee = needCrossSwap ? res.fees_from.woofi : res.fees_from;\n const bridgeFee = needCrossSwap ? res.fees_from.stargate : undefined;\n const fee = needCrossSwap ? res.fees_from.total : res.fees_from;\n\n setTransactionInfo({\n price: res.price,\n markPrices: res.mark_prices,\n dstGasFee,\n swapFee,\n bridgeFee,\n fee: fee,\n });\n }\n\n // set amount\n if (res.route_infos) {\n const amountValue = needCrossSwap\n ? res.route_infos.dst.amounts[1]\n : res.route_infos.amounts[1];\n\n setAmount(\n new Decimal(amountValue).div(Math.pow(10, dst.decimals!)).toString(),\n );\n }\n\n setWarningMessage(\"\");\n return res;\n };\n\n const cleanTransactionInfo = (data?: any) => {\n setTransactionInfo({\n fee: \"0\",\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n price: 0,\n swapFee: \"0\",\n bridgeFee: \"0\",\n dstGasFee: \"0\",\n ...data,\n });\n\n setAmount(\"\");\n };\n\n const enquiryErrorHandle = (error: Error) => {\n if (error.message === \"contract call failed\") {\n // Not enough liquidity on the cross-chain bridge.\n setWarningMessage(t(\"transfer.swapDeposit.notEnoughLiquidity\"));\n // clean previous data\n cleanTransactionInfo();\n } else {\n setWarningMessage(\"\");\n if (error?.message) {\n toast.error(error.message);\n }\n }\n };\n\n const debouncedEnquiry = useDebouncedCallback(() => {\n queryStart();\n return enquiry()\n .then(enquirySuccessHandle, enquiryErrorHandle)\n .finally(() => {\n queryStop();\n });\n }, 300);\n\n useEffect(() => {\n // if not need swap and cross swap\n if (!needSwap && !needCrossSwap) {\n cleanTransactionInfo({\n price: 1,\n });\n setAmount(quantity);\n return;\n }\n\n const qty = Number(quantity);\n\n if (isNaN(qty) || qty <= 0) {\n cleanTransactionInfo();\n return;\n }\n\n debouncedEnquiry();\n }, [needSwap, needCrossSwap, quantity]);\n\n return {\n enquiry,\n querying,\n warningMessage,\n transactionInfo,\n amount,\n cleanTransactionInfo,\n };\n}\n","import { useCallback } from \"react\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n} from \"@orderly.network/hooks\";\nimport {\n swapSupportApiUrl,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport const useWooCrossSwapQuery = () => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const brokerId = useConfig(\"brokerId\");\n\n const account = useAccountInstance();\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const queryDestinationFee = useCallback(\n async (\n crossChainRouteAddress: string,\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n orderlyNativeFees: bigint;\n },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is not ready\");\n }\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n return utils.formatByUnits(quotoLZFee[0]);\n },\n [],\n );\n\n /// swap enquiry\n const query = useCallback(\n (inputs: {\n srcNetwork: string;\n srcToken: string;\n amount: bigint;\n slippage: number;\n dstToken: string;\n crossChainRouteAddress: string;\n }) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n // src_network: inputs.srcNetwork,\n src_network: inputs.srcNetwork,\n dst_network: \"arbitrum\",\n src_token: inputs.srcToken,\n dst_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n src_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${swapSupportApiUrl}/woofi_dex/cross_chain_swap?${queryString}`,\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .then((swapInfo) => {\n return queryDestinationFee(inputs.crossChainRouteAddress, {\n chainId: swapInfo.dst_infos.chain_id,\n bridgedToken: swapInfo.dst_infos.bridged_token,\n toToken: swapInfo.dst_infos.to_token,\n minToAmount: BigInt(swapInfo.dst_infos.min_to_amount),\n orderlyNativeFees: 0n,\n })\n .then((data) => {\n return {\n ...swapInfo,\n dst_infos: {\n ...swapInfo.dst_infos,\n gas_fee: data,\n },\n };\n })\n .catch((e) => {\n console.error(\"queryDestinationFee error\", e);\n });\n })\n .finally(() => stop());\n },\n\n [loading, account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useCallback } from \"react\";\nimport { useAccountInstance, useBoolean } from \"@orderly.network/hooks\";\nimport { swapSupportApiUrl } from \"../constants\";\n\nexport const useWooSwapQuery = () => {\n const account = useAccountInstance();\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n /// swap 询价\n const query = useCallback(\n (inputs: any) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n network: inputs.srcNetwork,\n // network: \"arbitrum\",\n from_token: inputs.srcToken,\n to_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n from_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(`${swapSupportApiUrl}/woofi_dex/swap?${queryString}`)\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .finally(() => stop());\n },\n [account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useMemo } from \"react\";\nimport { useIndexPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, toNonExponential } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { TransactionInfo } from \"./useSwapEnquiry\";\n\nexport type UseSwapFee = ReturnType<typeof useSwapFee>;\n\ntype FeeQty = {\n value: string | number;\n dp: number;\n symbol?: string;\n};\n\nexport function useSwapFee(options: {\n nativeToken?: API.TokenInfo;\n isNativeToken?: boolean;\n src?: API.TokenInfo;\n depositFee?: bigint;\n transactionInfo: TransactionInfo;\n needSwap: boolean;\n needCrossSwap: boolean;\n}) {\n const {\n nativeToken,\n isNativeToken,\n src,\n depositFee = 0,\n transactionInfo,\n needSwap,\n needCrossSwap,\n } = options;\n\n const nativeSymbol = nativeToken?.symbol;\n const srcSymbol = src?.symbol;\n\n const {\n fee = \"0\",\n swapFee = \"0\",\n bridgeFee = \"0\",\n dstGasFee: destinationGasFee = \"0\",\n markPrices,\n } = transactionInfo;\n\n const { from_token: markPrice, native_token: nativeMarkPrice } = markPrices;\n\n const { data: symbolPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const { t } = useTranslation();\n\n const feeInfo = useMemo(() => {\n let feeAmount = \"\";\n let feeQtys: FeeQty[] = [];\n\n const nativeDp = feeDecimalsOffset(\n // swap precision\n nativeToken?.precision,\n );\n\n // swap precision\n const srcDp = feeDecimalsOffset(src?.precision);\n\n const dstGasFee = needCrossSwap\n ? destinationGasFee\n : new Decimal(depositFee.toString())\n .div(new Decimal(10).pow(18))\n .toString();\n\n if (!needSwap && !needCrossSwap) {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee).mul(symbolPrice || 0).toString();\n }\n\n if (needSwap || needCrossSwap) {\n // if native token, Destination gas fee、fee (Swap fee + Bridge fee ) will use a same symbol unit\n if (isNativeToken) {\n const totalFeeQty = new Decimal(dstGasFee).plus(fee);\n\n feeQtys = [\n {\n value: totalFeeQty.toString(),\n dp: nativeDp,\n },\n ];\n\n feeAmount = totalFeeQty.mul(nativeMarkPrice ?? 1).toString();\n } else {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n value: fee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee)\n .mul(nativeMarkPrice ?? 1)\n .plus(new Decimal(fee).mul(markPrice ?? 1))\n .toString();\n }\n }\n\n feeQtys = feeQtys.filter(\n (item) => !!item.value && Number(item.value) !== 0,\n );\n\n const feeDetails = [\n {\n title: t(\"transfer.deposit.destinationGasFee\"),\n description: t(\"transfer.deposit.destinationGasFee.description\"),\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.swapFee\"),\n description: t(\"transfer.swapDeposit.swapFee.description\"),\n value: swapFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.bridgeFee\"),\n description: t(\"transfer.swapDeposit.bridgeFee.description\"),\n value: bridgeFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ]\n .filter(\n // alway show Destination gas fee\n (item, index) =>\n index === 0 || (!!item.value && Number(item.value) !== 0),\n )\n .map((item) => {\n const value = new Decimal(item.value || 0).todp(item.dp).toNumber();\n return {\n ...item,\n value: toNonExponential(value),\n };\n });\n\n return {\n feeAmount,\n feeQtys,\n feeDetails,\n };\n }, [\n depositFee,\n symbolPrice,\n nativeSymbol,\n srcSymbol,\n transactionInfo,\n needSwap,\n needCrossSwap,\n ]);\n\n return {\n ...feeInfo,\n nativeSymbol,\n };\n}\n","import { useMemo } from \"react\";\nimport { DepositAction } from \"../../../types\";\n\ntype Options = {\n isNativeToken: boolean;\n allowance: string;\n quantity: string;\n maxQuantity: string;\n};\n\nexport function useActionType(options: Options) {\n const { isNativeToken, allowance, quantity, maxQuantity } = options;\n\n const actionType = useMemo(() => {\n const allowanceNum = isNativeToken ? Number.MAX_VALUE : Number(allowance);\n\n if (allowanceNum <= 0) {\n return DepositAction.ApproveAndDeposit;\n }\n\n const qty = Number(quantity);\n const maxQty = Number(maxQuantity);\n\n if (allowanceNum < qty && qty <= maxQty) {\n // return DepositAction.Increase;\n return DepositAction.ApproveAndDeposit;\n }\n\n return DepositAction.Deposit;\n }, [isNativeToken, allowance, quantity, maxQuantity]);\n\n return actionType;\n}\n","import { useCallback, useMemo } from \"react\";\nimport {\n Chain,\n ConnectedChain,\n useChains,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\n\nexport type CurrentChain = Pick<ConnectedChain, \"namespace\"> & {\n id: number;\n info?: Chain;\n};\n\nexport function useChainSelect() {\n const { t } = useTranslation();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { connectedChain, settingChain, setChain } = useWalletConnector();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const currentChain = useMemo(() => {\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) return null;\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (!connectedChain) {\n return;\n }\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return setChain({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n if (error && error.message) {\n toast.error(\n `${t(\"connector.switchChain.failed\")}: ${error.message}`,\n );\n }\n });\n },\n [currentChain, setChain, findByChainId],\n );\n\n return {\n chains,\n currentChain,\n settingChain,\n onChainChange,\n };\n}\n","import { useCallback, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { getDepositKnownErrorMessage } from \"../../../utils\";\n\ntype Options = {\n quantity: string;\n allowance?: string;\n approve: (quantity?: string) => Promise<any>;\n deposit: () => Promise<any>;\n onSuccess?: () => void;\n customDeposit?: () => Promise<any>;\n enableCustomDeposit?: boolean;\n};\n\nexport function useDepositAction(options: Options) {\n const {\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit,\n customDeposit,\n onSuccess,\n } = options;\n const [submitting, setSubmitting] = useState(false);\n const ee = useEventEmitter();\n const { t } = useTranslation();\n\n const doDeposit = useCallback(async () => {\n try {\n await deposit();\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n } catch (err: any) {\n console.error(\"deposit error\", err);\n\n const knownErrorMessage = getDepositKnownErrorMessage(err.message);\n if (knownErrorMessage) {\n toast.error(\n <div>\n {t(\"common.somethingWentWrong\")}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {t(\"common.details\")}: {knownErrorMessage}\n </div>\n </div>,\n );\n } else {\n toast.error(err.message || t(\"common.somethingWentWrong\"));\n }\n }\n }, [deposit, onSuccess, t]);\n\n const onDeposit = useCallback(async () => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting) return;\n\n setSubmitting(true);\n\n const execDeposit = enableCustomDeposit ? customDeposit : doDeposit;\n\n await execDeposit?.()?.finally(() => {\n setSubmitting(false);\n });\n }, [quantity, submitting, doDeposit, enableCustomDeposit, customDeposit, t]);\n\n const onApprove = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await approve(quantity);\n toast.success(t(\"transfer.deposit.approve.success\"));\n } catch (err: any) {\n console.error(\"approve error\", err);\n toast.error(\n err.message || err?.errorCode || t(\"transfer.deposit.approve.failed\"),\n );\n throw err;\n } finally {\n setSubmitting(false);\n }\n }, [approve, submitting, quantity, allowance, t]);\n\n const onApproveAndDeposit = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await onApprove();\n await onDeposit();\n } catch (err) {\n console.error(\"approve and deposit error\", err);\n } finally {\n setSubmitting(false);\n }\n }, [submitting, onApprove, onDeposit]);\n\n return { submitting, onApprove, onDeposit, onApproveAndDeposit };\n}\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../../types\";\n\ntype Options = { quantity: string; maxQuantity: string | number };\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { API, nativeTokenAddress } from \"@orderly.network/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 \"@orderly.network/hooks\";\nimport { NetworkId, type API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport type { CurrentChain } from \"./useChainSelect\";\n\nexport const useToken = (\n currentChain?: CurrentChain | null,\n filter: (token: API.TokenInfo) => boolean = () => true,\n) => {\n const [sourceToken, setSourceToken] = useState<API.TokenInfo>();\n const [targetToken, setTargetToken] = useState<API.TokenInfo>();\n\n const [sourceTokens, setSourceTokens] = useState<API.TokenInfo[]>([]);\n const [targetTokens, setTargetTokens] = useState<API.TokenInfo[]>([]);\n\n const 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 \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n textVariants,\n Tabs,\n TabPanel,\n WalletIcon,\n} from \"@orderly.network/ui\";\nimport { WithdrawTo } from \"../../types\";\nimport { LtvWidget } from \"../LTV\";\nimport { TextAreaInput } from \"../accountIdInput\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { WithdrawAction } from \"../withdrawAction\";\nimport { WithdrawWarningMessage } from \"../withdrawWarningMessage\";\nimport { WithdrawFormScriptReturn } from \"./withdrawForm.script\";\n\nexport type WithdrawFormProps = WithdrawFormScriptReturn;\n\nexport const WithdrawForm: React.FC<WithdrawFormProps> = (props) => {\n const {\n address,\n loading,\n disabled,\n quantity,\n onQuantityChange,\n sourceToken,\n amount,\n maxQuantity,\n tokenChains,\n currentChain,\n fee,\n settingChain,\n chainVaultBalance,\n crossChainTrans,\n checkIsBridgeless,\n withdrawTo,\n sourceTokens,\n onSourceTokenChange,\n vaultBalanceList,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n } = props;\n\n const { t } = useTranslation();\n\n const internalWithdrawPanel = (\n <TabPanel\n title={t(\"transfer.withdraw.otherAccount\", {\n brokerName: props.brokerName,\n })}\n value={WithdrawTo.Account}\n >\n <TextAreaInput\n label={t(\"common.accountId\")}\n value={props.toAccountId}\n onChange={props.setToAccountId}\n status={props.toAccountIdInputStatus}\n hintMessage={props.toAccountIdHintMessage}\n />\n <Box my={2}>\n <Text size=\"xs\" intensity={54}>\n {t(\"transfer.withdraw.accountId.tips\")}\n </Text>\n </Box>\n </TabPanel>\n );\n\n return (\n <Box\n id=\"oui-withdraw-form\"\n className={textVariants({ weight: \"semibold\" })}\n >\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={sourceToken}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n status={props.inputStatus}\n hintMessage={props.hintMessage}\n vaultBalanceList={vaultBalanceList}\n testId=\"oui-testid-withdraw-dialog-quantity-input\"\n displayType=\"vaultBalance\"\n />\n </Box>\n <AvailableQuantity\n token={sourceToken}\n amount={amount}\n maxQuantity={maxQuantity.toString()}\n loading={props.balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={props.unsettledPnL}\n hasPositions={props.hasPositions}\n onSettlePnl={props.onSettlePnl}\n tooltipContent={t(\"settle.unsettled.tooltip\")}\n dialogContent={<Trans i18nKey=\"settle.settlePnl.description\" />}\n />\n </Box>\n <ExchangeDivider />\n <Tabs\n value={withdrawTo}\n onValueChange={props.setWithdrawTo as (tab: string) => void}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-3\",\n }}\n >\n <TabPanel\n title={t(\"transfer.web3Wallet.my\")}\n icon={<WalletIcon size={\"xs\"} name={props.walletName ?? \"\"} />}\n value={WithdrawTo.Wallet}\n >\n <ChainSelect\n chains={tokenChains}\n value={currentChain!}\n onValueChange={props.onChainChange}\n wrongNetwork={props.wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n token={sourceToken}\n value={props.showQty}\n readOnly\n />\n </TabPanel>\n {internalWithdrawPanel}\n </Tabs>\n <Box mt={2}>\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={props.currentLTV}\n nextLTV={props.nextLTV}\n />\n </Box>\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <Text size=\"xs\" intensity={36}>\n {t(\"common.fee\")}\n {withdrawTo === WithdrawTo.Wallet ? \" ≈ \" : \" = \"}\n <Text size=\"xs\" intensity={80}>\n {fee}\n </Text>\n </Text>\n </Flex>\n </Box>\n <WithdrawWarningMessage\n checkIsBridgeless={checkIsBridgeless}\n chainVaultBalance={chainVaultBalance as number}\n currentChain={currentChain}\n crossChainTrans={crossChainTrans}\n tokenName={sourceToken?.symbol as string}\n qtyGreaterThanVault={qtyGreaterThanVault}\n qtyGreaterThanMaxAmount={qtyGreaterThanMaxAmount}\n message={props.warningMessage}\n />\n <Flex justify=\"center\">\n <WithdrawAction\n checkIsBridgeless={checkIsBridgeless}\n networkId={props.networkId}\n disabled={disabled}\n loading={loading}\n onWithdraw={props.onWithdraw}\n crossChainWithdraw={props.crossChainWithdraw}\n currentChain={currentChain}\n address={address}\n quantity={quantity}\n fee={fee}\n withdrawTo={withdrawTo}\n onTransfer={props.onTransfer}\n />\n </Flex>\n </Box>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/ui\";\nimport { InputStatus } from \"../../types\";\n\nexport type TextAreaInputProps = {\n value: string;\n onChange: (value: string) => void;\n status?: InputStatus;\n hintMessage?: string;\n placeholder?: string;\n className?: string;\n label: string;\n};\n\nexport const TextAreaInput = (props: TextAreaInputProps) => {\n const { value, onChange, status, hintMessage, placeholder, label } = props;\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e.target.value);\n\n // auto adjust height\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n };\n\n useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [value]);\n\n const prefix = (\n <div className=\"oui-absolute oui-left-3 oui-top-0.5 oui-z-[1]\">\n <Text size=\"2xs\" intensity={36}>\n {label}\n </Text>\n </div>\n );\n\n const message = (\n <Flex mt={1} gapX={1} px={1}>\n <Box\n width={4}\n height={4}\n r=\"full\"\n className={cn(\n status === \"error\" && \"oui-bg-danger-light\",\n status === \"warning\" && \"oui-bg-warning-light\",\n )}\n ></Box>\n <Text\n size=\"2xs\"\n className={cn(\n status === \"error\" && \"oui-text-danger-light\",\n status === \"warning\" && \"oui-text-warning-light\",\n )}\n >\n {hintMessage}\n </Text>\n </Flex>\n );\n return (\n <div className=\"oui-relative\">\n {prefix}\n <textarea\n ref={textareaRef}\n placeholder={placeholder}\n className={cn(\n // hide resize height control and scrollbar\n \"oui-resize-none oui-overflow-y-hidden\",\n \"oui-relative oui-min-h-[54px] oui-px-3 oui-pb-2 oui-pt-5\",\n \"oui-w-full oui-bg-base-5 oui-text-sm oui-text-base-contrast\",\n \"oui-rounded-lg oui-outline-none\",\n \"oui-border oui-border-line focus:oui-border-primary-light\",\n status === \"error\" &&\n \"oui-border-danger-light focus-within:oui-border-danger-light focus:oui-border-danger-light\",\n status === \"warning\" &&\n \"oui-border-warning-light focus-within:oui-border-warning-light focus:oui-border-warning-light\",\n props.className,\n )}\n rows={1}\n value={value}\n onChange={handleChange}\n />\n {hintMessage && message}\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { RefreshIcon } from \"../../icons\";\n\ntype UnsettlePnlInfoProps = {\n hasPositions: boolean;\n unsettledPnl?: number;\n onSettlePnl: () => Promise<any>;\n tooltipContent?: ReactNode;\n dialogContent?: ReactNode;\n};\n\nexport const UnsettlePnlInfo = (props: UnsettlePnlInfoProps) => {\n const {\n hasPositions,\n unsettledPnl,\n onSettlePnl,\n tooltipContent,\n dialogContent,\n } = props;\n const { t } = useTranslation();\n\n if (unsettledPnl === 0 && !hasPositions) {\n return <></>;\n }\n\n const settlePnlDialog = () => {\n modal.confirm({\n title: t(\"settle.settlePnl\"),\n content: dialogContent,\n onOk: () => {\n return onSettlePnl();\n },\n });\n };\n\n return (\n <Flex justify=\"between\" className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <Tooltip\n className=\"oui-max-w-[274px] oui-font-semibold\"\n content={tooltipContent as any}\n >\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <ExclamationFillIcon\n size={14}\n className=\"oui-text-warning-darken\"\n />\n <Text className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\">\n {`${t(\"settle.unsettled\")}:`}\n </Text>\n </Flex>\n </Tooltip>\n <Text.numeral\n showIdentifier\n coloring\n weight=\"semibold\"\n dp={6}\n data-testid=\"oui-testid-withdraw-dialog-unsettledPnl-value\"\n >\n {unsettledPnl}\n </Text.numeral>\n <Text>USDC</Text>\n </Flex>\n <Flex itemAlign=\"center\" gap={1} className=\"oui-cursor-pointer\">\n <RefreshIcon className=\"oui-text-primary\" />\n <Text\n data-testid=\"oui-testid-withdraw-dialog-settle-text\"\n size=\"2xs\"\n color=\"primary\"\n className=\" oui-select-none\"\n onClick={settlePnlDialog}\n >\n {t(\"common.settle\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, modal } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { WithdrawTo } from \"../../types\";\nimport { CrossWithdrawConfirm } from \"../crossWithdrawConfirm\";\nimport SwitchChainButton from \"./SwitchChainButton\";\n\ninterface IProps {\n disabled?: boolean;\n loading?: boolean;\n onWithdraw: () => Promise<void>;\n networkId?: NetworkId;\n crossChainWithdraw: boolean;\n address?: string;\n currentChain?: any;\n quantity: string;\n fee: number;\n checkIsBridgeless: boolean;\n withdrawTo: WithdrawTo;\n onTransfer: () => void;\n}\n\nexport const WithdrawAction = (props: IProps) => {\n const {\n disabled,\n loading,\n onWithdraw,\n networkId,\n crossChainWithdraw,\n address,\n currentChain,\n quantity,\n fee,\n checkIsBridgeless,\n onTransfer,\n } = props;\n const { t } = useTranslation();\n\n const amount = useMemo(() => {\n if (!quantity) {\n return 0;\n }\n return new Decimal(quantity).minus(fee ?? 0).toNumber();\n }, [quantity, fee]);\n\n const preWithdraw = () => {\n if (crossChainWithdraw) {\n modal.confirm({\n title: t(\"transfer.withdraw.crossChain.confirmWithdraw\"),\n content: (\n <CrossWithdrawConfirm\n address={address!}\n amount={amount}\n currentChain={currentChain}\n />\n ),\n classNames: {\n content: \"oui-font-semibold\",\n body: \"!oui-pb-0\",\n footer: \"!oui-pt-0\",\n },\n\n onOk: async () => {\n onWithdraw();\n },\n });\n return;\n }\n onWithdraw();\n };\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n const renderButton = () => {\n if (props.withdrawTo === WithdrawTo.Account) {\n return (\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={onTransfer}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n\n if (checkIsBridgeless) {\n return (\n <Button\n data-testid=\"oui-testid-withdraw-dialog-withdraw-btn\"\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={preWithdraw}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n return <SwitchChainButton networkId={networkId} size={buttonSize} />;\n };\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n bridgeLessOnly\n buttonProps={{ fullWidth: true, size: buttonSize }}\n >\n {renderButton()}\n </AuthGuard>\n </Box>\n );\n};\n","import { Box, ChainIcon, Flex, Text } from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n currentChain: any;\n amount: number;\n address: string;\n}\n\nexport const CrossWithdrawConfirm = ({\n address,\n amount,\n currentChain,\n}: IProps) => {\n const { t } = useTranslation();\n\n const networkName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return undefined;\n }, [currentChain]);\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"start\"\n className=\"oui-gap-1 lg:oui-gap-3\"\n >\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n mb={5}\n className=\"oui-gap-3 lg:oui-gap-4\"\n >\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientAddress\")}\n </Text>\n <Text size=\"sm\" intensity={98} className=\"oui-break-all\">\n {address}\n </Text>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientNetwork\")}\n </Text>\n <Flex gap={1}>\n <ChainIcon\n className=\"oui-h-[18px] oui-w-[18px]\"\n size={\"sm\"}\n chainId={currentChain.id}\n />\n\n <Text size=\"sm\" intensity={98}>\n {networkName}\n </Text>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"transfer.withdraw.crossChain.withdrawAmount\")} (USDC)`}\n </Text>\n <Text.numeral size=\"sm\" intensity={98} dp={2}>\n {amount}\n </Text.numeral>\n </Flex>\n </Flex>\n <Flex\n justify=\"center\"\n className=\"oui-text-warning-darken oui-text-2xs lg:oui-text-xs oui-text-center\"\n mb={3}\n >\n {t(\"transfer.withdraw.crossChain.warning\")}\n </Flex>\n </Flex>\n );\n};\n","import { Button, ButtonProps, Flex, modal, toast } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n networkId?: NetworkId;\n size: ButtonProps[\"size\"];\n}\n\nexport default function SwitchChainButton(props: IProps) {\n const { t } = useTranslation();\n\n const switchChain = () => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorDialogId, {\n networkId: props.networkId,\n bridgeLessOnly: true,\n })\n .then(\n (r) => {\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n return (\n <Flex direction={\"column\"}>\n <Button\n color=\"warning\"\n size={props.size}\n fullWidth\n onClick={() => {\n switchChain();\n }}\n >\n {t(\"connector.switchNetwork\")}\n </Button>\n </Flex>\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Flex } from \"@orderly.network/ui\";\n\ninterface WarningMessageProps {\n chainVaultBalance: number;\n currentChain: any;\n crossChainTrans: boolean;\n checkIsBridgeless: boolean;\n tokenName: string;\n qtyGreaterThanMaxAmount: boolean;\n qtyGreaterThanVault: boolean;\n message?: string;\n}\n\nexport const WithdrawWarningMessage: React.FC<WarningMessageProps> = (\n props,\n) => {\n const {\n chainVaultBalance,\n currentChain,\n crossChainTrans,\n tokenName,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n } = props;\n const { t } = useTranslation();\n const { state } = useAccount();\n\n const chainName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return undefined;\n }, [currentChain]);\n\n const renderContent = () => {\n if (state.status === AccountStatusEnum.NotConnected) {\n return null;\n }\n if (crossChainTrans) {\n return t(\"transfer.withdraw.crossChain.process\");\n }\n if (qtyGreaterThanMaxAmount) {\n return t(\"transfer.insufficientBalance\");\n }\n if (qtyGreaterThanVault) {\n return t(\"transfer.withdraw.vaultWarning\", {\n tokenName: tokenName,\n chainName: chainName,\n balance: chainVaultBalance,\n });\n }\n\n return props.message;\n };\n\n const content = renderContent();\n\n if (!content) {\n return null;\n }\n\n return (\n <Flex\n my={4}\n className=\"oui-justify-center oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useChains,\n useConfig,\n useEventEmitter,\n useLocalStorage,\n useMemoizedFn,\n useQuery,\n useWalletConnector,\n useWalletTopic,\n useWithdraw,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n NetworkId,\n} from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport {\n Decimal,\n int2hex,\n praseChainIdToNumber,\n toNonExponential,\n} from \"@orderly.network/utils\";\nimport { InputStatus, WithdrawTo } from \"../../types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useWithdrawAccountId } from \"./hooks/useWithdrawAccountId\";\nimport { useWithdrawFee } from \"./hooks/useWithdrawFee\";\nimport { useWithdrawLTV } from \"./hooks/useWithdrawLTV\";\nimport { useWithdrawToken } from \"./hooks/useWithdrawToken\";\n\nexport type WithdrawFormScriptReturn = ReturnType<typeof useWithdrawFormScript>;\n\nconst markPrice = 1;\n\nexport type WithdrawFormScriptOptions = {\n close?: () => void;\n};\n\nexport const useWithdrawFormScript = (options: WithdrawFormScriptOptions) => {\n const { t } = useTranslation();\n const [crossChainTrans, setCrossChainTrans] = useState<boolean>(false);\n const [loading, setLoading] = useState(false);\n const [assetHistory] = useAssetsHistory(\n {\n page: 1,\n pageSize: 1,\n side: AssetHistorySideEnum.WITHDRAW,\n status: AssetHistoryStatusEnum.PENDING_REBALANCE,\n },\n // update when withdraw status changed\n {\n shouldUpdateOnWalletChanged: (data) =>\n data.side === AssetHistorySideEnum.WITHDRAW,\n },\n );\n\n const config = useConfig();\n\n const brokerName = config.get(\"brokerName\");\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const ee = useEventEmitter();\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const [withdrawTo, setWithdrawTo] = useState<WithdrawTo>(WithdrawTo.Wallet);\n\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { data: vaultBalanceList } = useQuery<API.VaultBalance[]>(\n `/v1/public/vault_balance`,\n {\n revalidateOnMount: true,\n errorRetryCount: 3,\n },\n );\n\n const {\n connectedChain,\n wallet,\n setChain: switchChain,\n settingChain,\n } = useWalletConnector();\n\n const currentChain = useMemo(() => {\n // if (!connectedChain) return null;\n\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : Number.parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) {\n return null;\n }\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useWithdrawToken({\n currentChain,\n withdrawTo,\n });\n\n const tokenChains = useMemo(() => {\n return chains\n .filter((chain) =>\n chain.token_infos?.some(\n (token) => token.symbol === sourceToken?.symbol,\n ),\n )\n .map((chain) => chain.network_infos);\n }, [chains, networkId, sourceToken]);\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const { withdraw, maxAmount, unsettledPnL } = useWithdraw({\n token: sourceToken?.symbol,\n decimals: sourceToken?.token_decimal,\n });\n\n const withdrawAccountIdState = useWithdrawAccountId({\n token: sourceToken?.symbol!,\n decimals: sourceToken?.token_decimal!,\n quantity,\n setQuantity,\n close: options.close,\n setLoading,\n });\n\n const checkIsBridgeless = useMemo(() => {\n if (wrongNetwork) {\n return false;\n }\n if (!currentChain) {\n return false;\n }\n if (networkId === \"testnet\") {\n return true;\n }\n if (!currentChain.info) {\n return false;\n }\n if (\n !currentChain.info.network_infos ||\n !currentChain.info.network_infos.bridgeless\n ) {\n return false;\n }\n return true;\n }, [currentChain, wrongNetwork]);\n\n const cleanData = () => {\n setQuantity(\"\");\n };\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return switchChain?.({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n // clean input value\n cleanData();\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n toast.error(`${t(\"connector.switchChain.failed\")}: ${error.message}`);\n });\n },\n [currentChain, switchChain, findByChainId, t],\n );\n\n const chainVaultBalance = useMemo(() => {\n if (!Array.isArray(vaultBalanceList) || !currentChain) {\n return null;\n }\n // chain.id\n const vaultBalance = vaultBalanceList.find(\n (item) =>\n Number.parseInt(item.chain_id) === currentChain?.id &&\n item.token === sourceToken?.symbol,\n );\n if (vaultBalance) {\n return vaultBalance.balance;\n }\n return null;\n }, [chains, currentChain, vaultBalanceList, sourceToken?.symbol]);\n\n const qtyGreaterThanMaxAmount = useMemo<boolean>(() => {\n if (!quantity || Number.isNaN(quantity)) {\n return false;\n }\n if (!maxAmount || Number.isNaN(maxAmount)) {\n return true;\n }\n return new Decimal(quantity).gt(maxAmount);\n }, [quantity, maxAmount]);\n\n const qtyGreaterThanVault = useMemo<boolean>(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return false;\n }\n if (!quantity || Number.isNaN(quantity)) {\n return false;\n }\n if (!chainVaultBalance || Number.isNaN(chainVaultBalance)) {\n return true;\n }\n return new Decimal(quantity).gt(chainVaultBalance);\n }, [quantity, chainVaultBalance, withdrawTo]);\n\n const crossChainWithdraw = useMemo(() => {\n if (chainVaultBalance !== null) {\n const qtyNum = Number.parseFloat(quantity);\n const value = qtyNum > chainVaultBalance && qtyNum <= maxAmount;\n return value;\n }\n return false;\n }, [quantity, maxAmount, chainVaultBalance]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n\n setLoading(true);\n return withdraw({\n amount: quantity,\n token: sourceToken?.symbol!,\n chainId: currentChain?.id!,\n allowCrossChainWithdraw: crossChainWithdraw,\n })\n .then((res) => {\n toast.success(t(\"transfer.withdraw.requested\"));\n ee.emit(\"withdraw:requested\");\n options.close?.();\n setQuantity(\"\");\n })\n .catch((e) => {\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n return;\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(e.message);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const fee = useWithdrawFee({\n crossChainWithdraw,\n currentChain,\n token: sourceToken?.symbol!,\n withdrawTo,\n });\n\n const minAmountWarningMessage = useMemo(() => {\n const minAmount = new Decimal(\n sourceToken?.minimum_withdraw_amount ?? 0,\n ).add(fee);\n\n if (quantity && new Decimal(quantity).lt(minAmount)) {\n return t(\"transfer.withdraw.minAmount.error\", {\n minAmount: toNonExponential(minAmount.toNumber()),\n currency: sourceToken?.symbol,\n });\n }\n }, [quantity, sourceToken?.minimum_withdraw_amount, fee, t]);\n\n const showQty = useMemo(() => {\n if (!quantity) {\n return \"\";\n }\n\n const value = new Decimal(quantity).sub(fee ?? 0);\n if (value.isNegative()) {\n return \"\";\n }\n return toNonExponential(value.toNumber());\n }, [fee, quantity]);\n\n useEffect(() => {\n if (!quantity) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n const qty = new Decimal(quantity ?? 0);\n if (unsettledPnL < 0) {\n if (qty.gt(maxAmount)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxAmount, unsettledPnL, crossChainTrans]);\n\n const disabled =\n crossChainTrans ||\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus) ||\n (withdrawTo === WithdrawTo.Account &&\n !withdrawAccountIdState.toAccountId) ||\n qtyGreaterThanMaxAmount ||\n qtyGreaterThanVault ||\n !!minAmountWarningMessage;\n\n useEffect(() => {\n setCrossChainTrans(!!assetHistory?.length);\n }, [assetHistory?.length]);\n\n // it need to use useMemoizedFn wrap ,otherwise crossChainTrans and assetHistory will be first render data\n const handleWalletTopic = useMemoizedFn((data: any) => {\n if (!crossChainTrans) {\n return;\n }\n const txId = assetHistory?.[0]?.tx_id;\n const { trxId, transStatus } = data;\n if (trxId === txId && transStatus === \"COMPLETED\") {\n setCrossChainTrans(false);\n }\n });\n\n useWalletTopic({\n onMessage: handleWalletTopic,\n });\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n const { currentLTV, nextLTV, ltvWarningMessage } = useWithdrawLTV({\n token: sourceToken?.symbol!,\n quantity,\n });\n\n const warningMessage = ltvWarningMessage || minAmountWarningMessage;\n\n const filteredVaultBalanceList = useMemo(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return [];\n }\n return vaultBalanceList?.filter(\n (item) => Number.parseInt(item.chain_id) === currentChain?.id,\n );\n }, [vaultBalanceList, currentChain, withdrawTo]);\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n sourceToken,\n onSourceTokenChange,\n sourceTokens,\n inputStatus,\n hintMessage,\n amount,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n unsettledPnL,\n wrongNetwork,\n settingChain,\n tokenChains,\n currentChain,\n onChainChange,\n onWithdraw,\n chainVaultBalance,\n fee,\n crossChainWithdraw,\n crossChainTrans,\n showQty,\n networkId,\n checkIsBridgeless,\n hasPositions,\n onSettlePnl,\n brokerName,\n qtyGreaterThanMaxAmount,\n qtyGreaterThanVault,\n vaultBalanceList: filteredVaultBalanceList,\n ...withdrawAccountIdState,\n withdrawTo,\n setWithdrawTo,\n currentLTV,\n nextLTV,\n warningMessage,\n };\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n usePositionStream,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport type SettlePnlOptions = {\n accountId?: string;\n};\n\nexport const useSettlePnl = (options?: SettlePnlOptions) => {\n const { accountId } = options || {};\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { account, state } = useAccount();\n const [positionData] = usePositionStream();\n\n const hasPositions = useMemo(\n () => !!positionData?.rows?.length,\n [positionData],\n );\n\n const onSettlePnl = async () => {\n const isSubAccount = accountId && state.mainAccountId !== accountId;\n const settleFn = isSubAccount\n ? account.settleSubAccount({ subAccountId: accountId })\n : account.settle({ accountId });\n return settleFn\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n })\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\n } else if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n } else if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n } else {\n toast.error(e.message);\n return Promise.reject(e);\n }\n });\n };\n\n return {\n hasPositions,\n onSettlePnl,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useInternalTransfer } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { InputStatus } from \"../../../types\";\nimport { checkIsAccountId, getTransferErrorMessage } from \"../../../utils\";\n\ntype InternalWithdrawOptions = {\n token: string;\n decimals: number;\n quantity: string;\n setQuantity: (quantity: string) => void;\n close?: () => void;\n setLoading: (loading: boolean) => void;\n};\n\nexport function useWithdrawAccountId(options: InternalWithdrawOptions) {\n const { token, quantity, setQuantity, close, setLoading, decimals } = options;\n const { t } = useTranslation();\n const [toAccountId, setToAccountId] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { transfer, submitting } = useInternalTransfer();\n\n const onTransfer = useCallback(() => {\n const num = Number(quantity);\n\n if (Number.isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting || !toAccountId) {\n return;\n }\n setLoading(true);\n\n transfer({\n token,\n receiver: toAccountId,\n amount: quantity,\n decimals,\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n close?.();\n })\n .catch((err) => {\n console.log(\"transfer error\", err);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [t, quantity, token, submitting, toAccountId, transfer]);\n\n useEffect(() => {\n if (!toAccountId) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n if (checkIsAccountId(toAccountId)) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n } else {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.withdraw.accountId.invalid\"));\n }\n }, [toAccountId]);\n\n return {\n toAccountId,\n setToAccountId,\n onTransfer,\n internalWithdrawSubmitting: submitting,\n toAccountIdInputStatus: inputStatus,\n toAccountIdHintMessage: hintMessage,\n };\n}\n","import { useMemo } from \"react\";\nimport { useTokenInfo } from \"@orderly.network/hooks\";\nimport { WithdrawTo } from \"../../../types\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\n\nexport function useWithdrawFee(options: {\n token: string;\n currentChain?: CurrentChain | null;\n crossChainWithdraw: boolean;\n withdrawTo: WithdrawTo;\n}) {\n const { crossChainWithdraw, currentChain, token, withdrawTo } = options;\n\n const tokenInfo = useTokenInfo(token);\n\n const fee = useMemo(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return 0;\n }\n\n if (!currentChain) {\n return 0;\n }\n\n const item = tokenInfo?.chain_details?.find(\n (chain) => Number.parseInt(chain.chain_id) === currentChain.id,\n );\n\n if (!item) {\n return 0;\n }\n\n if (crossChainWithdraw) {\n return (\n (item.withdrawal_fee || 0) + (item.cross_chain_withdrawal_fee || 0)\n );\n }\n\n return item.withdrawal_fee || 0;\n }, [tokenInfo, token, currentChain, crossChainWithdraw, withdrawTo]);\n\n return fee;\n}\n","import { useMemo } from \"react\";\nimport { useComputedLTV, useQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useWithdrawLTV = (params: { token: string; quantity: string }) => {\n const { token, quantity } = params;\n const { ltv_threshold } = useConvertThreshold();\n const { t } = useTranslation();\n\n const currentLTV = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity ? -Number(quantity) : 0,\n token,\n });\n\n const ltvWarningMessage = useMemo(() => {\n if (ltv_threshold && nextLTV) {\n const threshold = ltv_threshold * 100;\n if (nextLTV > threshold) {\n return t(\"transfer.withdraw.LTV.error\", {\n threshold,\n });\n }\n }\n return \"\";\n }, [nextLTV, ltv_threshold]);\n\n return {\n currentLTV,\n nextLTV,\n ltvWarningMessage,\n t,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n revalidateOnFocus: false,\n },\n );\n\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useMemoizedFn, useTokensInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { WithdrawTo } from \"../../../types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\nimport { useToken } from \"../../depositForm/hooks/useToken\";\n\nexport function useWithdrawToken(params: {\n currentChain?: CurrentChain | null;\n withdrawTo: WithdrawTo;\n}) {\n const { currentChain, withdrawTo } = params;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useToken(\n currentChain,\n (token) => token.symbol === \"USDC\" || token.is_collateral,\n );\n\n useEffect(() => {\n if (!tokensInfo?.length) return;\n\n const list = tokensInfo.map((item) => ({\n ...item,\n symbol: item.token,\n token_decimal: item.decimals,\n precision: item.decimals,\n }));\n\n // sort tokens, USDC should be the first\n list.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n\n const usdcToken = getTokenByTokenList(tokens);\n setToken(usdcToken || list?.[0]);\n setTokens(list);\n }, [tokensInfo]);\n\n const syncToken = useMemoizedFn(() => {\n if (withdrawTo === WithdrawTo.Account) {\n const findToken = tokens.find(\n (item) => item.symbol === sourceToken?.symbol,\n ) as API.TokenInfo;\n if (findToken) {\n setToken(findToken);\n }\n } else {\n const findToken = sourceTokens.find(\n (item) => item.symbol === token?.symbol,\n ) as API.TokenInfo;\n if (findToken) {\n onSourceTokenChange(findToken);\n }\n }\n });\n\n useEffect(() => {\n syncToken();\n }, [withdrawTo]);\n\n if (withdrawTo === WithdrawTo.Account) {\n return {\n sourceToken: token,\n onSourceTokenChange: setToken,\n sourceTokens: tokens,\n };\n }\n\n return {\n sourceToken,\n onSourceTokenChange,\n sourceTokens,\n };\n}\n","import { FC } from \"react\";\nimport {\n useWithdrawFormScript,\n WithdrawFormScriptOptions,\n} from \"./withdrawForm.script\";\nimport { WithdrawForm } from \"./withdrawForm.ui\";\n\nexport type WithdrawFormWidgetProps = WithdrawFormScriptOptions;\n\nexport const WithdrawFormWidget: FC<WithdrawFormWidgetProps> = (props) => {\n const state = useWithdrawFormScript(props);\n return <WithdrawForm {...state} />;\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { DepositSlot } from \"./depositSlot\";\nimport { WithdrawSlot } from \"./withdrawSlot\";\n\nexport const DepositAndWithdrawWithDialogId = \"DepositAndWithdrawWithDialogId\";\nexport const DepositAndWithdrawWithSheetId = \"DepositAndWithdrawWithSheetId\";\n\nexport type DepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n};\n\nexport const DepositAndWithdraw: FC<DepositAndWithdrawProps> = (props) => {\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\",\n );\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel\n title={t(\"common.deposit\")}\n icon={<ArrowDownSquareFillIcon />}\n value=\"deposit\"\n >\n <DepositSlot close={props.close} />\n {/* <DepositFormWidget close={props.close} /> */}\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <WithdrawSlot close={props.close} />\n {/* <WithdrawFormWidget close={props.close} /> */}\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(DepositAndWithdrawWithDialogId, DepositAndWithdraw, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n});\n\nregisterSimpleSheet(DepositAndWithdrawWithSheetId, DepositAndWithdraw);\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { DepositFormWidget } from \"../depositForm\";\nimport { DepositFormWidgetProps } from \"../depositForm/depositForm.widget\";\n\nexport const DepositSlot = (props: DepositFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.DepositForm}\n defaultWidget={DepositFormWidget}\n {...props}\n />\n );\n};\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { WithdrawFormWidget } from \"../withdrawForm\";\nimport { WithdrawFormWidgetProps } from \"../withdrawForm/withdrawForm.widget\";\n\nexport const WithdrawSlot = (props: WithdrawFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.WithdrawForm}\n defaultWidget={WithdrawFormWidget}\n {...props}\n />\n );\n};\n","import { FC } from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { ActionButton } from \"../../actionButton\";\nimport { AvailableQuantity } from \"../../availableQuantity\";\nimport { BrokerWallet } from \"../../brokerWallet\";\nimport { ChainSelect } from \"../../chainSelect\";\nimport { ExchangeDivider } from \"../../exchangeDivider\";\nimport { QuantityInput } from \"../../quantityInput\";\nimport { Slippage } from \"../../slippage\";\nimport { SwapCoin } from \"../../swapCoin\";\nimport { Web3Wallet } from \"../../web3Wallet\";\nimport { Notice } from \"../components/notice\";\nimport { SwapFee } from \"../components/swapFee\";\nimport { UseSwapDepositFormScriptReturn } from \"./swapDepositForm.script\";\n\nexport const SwapDepositForm: FC<UseSwapDepositFormScriptReturn> = (props) => {\n const {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n } = props;\n\n return (\n <Box\n id=\"oui-swap-deposit-form\"\n className={textVariants({ weight: \"semibold\" })}\n >\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Web3Wallet />\n\n <Box mt={3} mb={1}>\n <ChainSelect\n chains={chains}\n value={currentChain!}\n onValueChange={onChainChange}\n wrongNetwork={wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n status={inputStatus}\n hintMessage={hintMessage}\n fetchBalance={fetchBalance}\n data-testid=\"oui-testid-swap-deposit-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity);\n }}\n />\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={dst as any}\n value={swapQuantity}\n loading={swapRevalidating}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n\n <Flex direction=\"column\" itemAlign=\"start\" mt={1} gapY={1}>\n <Flex justify=\"between\" width=\"100%\">\n {/* <SwapCoin token={token as any} dst={dst} price={swapPrice} /> */}\n {/* <SwapCoin\n sourceSymbol={token as any}\n targetSymbol={dst.symbol}\n indexPrice={swapPrice}\n /> */}\n {(needSwap || needCrossSwap) && (\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n )}\n </Flex>\n\n <SwapFee {...fee} />\n </Flex>\n </Box>\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={token?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n networkId={networkId}\n />\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useConfig, useDeposit, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"../../depositForm/hooks\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { useNeedSwapAndCross } from \"../hooks/useNeedSwapAndCross\";\nimport { useSwapEnquiry } from \"../hooks/useSwapEnquiry\";\nimport { useSwapFee } from \"../hooks/useSwapFee\";\nimport { useToken } from \"../hooks/useToken\";\nimport { SwapMode } from \"../types\";\n\nexport type UseSwapDepositFormScriptReturn = ReturnType<\n typeof useSwapDepositFormScript\n>;\n\nexport type UseSwapDepositFormScriptOptions = {\n onClose?: () => void;\n};\n\nexport const useSwapDepositFormScript = (\n options: UseSwapDepositFormScriptOptions,\n) => {\n const [slippage, setSlippage] = useLocalStorage(\n \"orderly_swap_deposit_slippage\",\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const { wrongNetwork } = useAppContext();\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const tokensFilter = useCallback((chainInfo: API.Chain) => {\n return (\n chainInfo.token_infos.filter((token) => {\n if (chainInfo.network_infos.bridgeless && token.symbol === \"USDC\") {\n return true;\n }\n return !!(token as API.TokenInfo).swap_enable;\n }) ?? []\n );\n }, []);\n\n const { token, tokens, onTokenChange } = useToken({\n currentChain,\n tokensFilter,\n });\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n } = useDeposit({\n address: token?.address,\n decimals: token?.decimals,\n srcChainId: currentChain?.id,\n srcToken: token?.symbol,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n depositorAddress: (currentChain?.info?.network_infos as API.NetworkInfos)\n ?.depositor,\n });\n\n const maxQuantity = useMemo(\n () =>\n new Decimal(balance || 0)\n .todp(token?.precision ?? 2, Decimal.ROUND_DOWN)\n .toString(),\n [balance, token],\n );\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n });\n\n const { needSwap, needCrossSwap } = useNeedSwapAndCross({\n srcToken: token,\n srcChainId: currentChain?.id,\n dstChainId: dst?.chainId,\n });\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcToken: token?.address,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n dstToken: dst.address,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (token?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = () => {\n cleanTransactionInfo();\n setQuantity(\"\");\n };\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.onClose?.();\n }, [options.onClose]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: token!.symbol,\n // swap precision\n displayDecimals: token?.precision,\n amount: quantity,\n decimals: token!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const { submitting, onApprove, onDeposit } = useDepositAction({\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit: needSwap || needCrossSwap,\n customDeposit: onSwapDeposit,\n onSuccess,\n });\n\n const loading = submitting || depositFeeRevalidating! || swapRevalidating;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating;\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: token,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n useEffect(() => {\n cleanData();\n }, [token, currentChain?.id]);\n\n return {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange: setQuantity,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\n\ntype Options = {\n currentChain: CurrentChain | null;\n tokensFilter?: (chainInfo: API.Chain) => API.TokenInfo[];\n};\n\nexport function useToken(options: Options) {\n const { currentChain, tokensFilter } = options;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n // when chain changed and chain data ready then call this function\n const onChainInited = useCallback(\n (chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n const tokens =\n typeof tokensFilter === \"function\"\n ? tokensFilter(chainInfo)\n : chainInfo.token_infos;\n\n setTokens(tokens);\n\n const newToken = getTokenByTokenList(tokens);\n\n if (!newToken) return;\n\n setToken(newToken);\n }\n },\n [tokensFilter],\n );\n\n useEffect(() => {\n onChainInited(currentChain?.info);\n // if settingChain is true, the currentChain will change, so use currentChain.id\n }, [currentChain?.id, onChainInited]);\n\n return { token, tokens, onTokenChange: setToken };\n}\n","import { FC } from \"react\";\nimport {\n useSwapDepositFormScript,\n UseSwapDepositFormScriptOptions,\n} from \"./swapDepositForm.script\";\nimport { SwapDepositForm } from \"./swapDepositForm.ui\";\n\nexport type SwapDepositFormWidgetProps = UseSwapDepositFormScriptOptions;\n\nexport const SwapDepositFormWidget: FC<SwapDepositFormWidgetProps> = (\n props,\n) => {\n const state = useSwapDepositFormScript(props);\n return <SwapDepositForm {...state} />;\n};\n","import { FC } from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Button, Flex, textVariants, Text, cn } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { TransferVerticalIcon } from \"../../icons\";\nimport { AccountSelect } from \"../accountSelect\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { TransferFormScriptReturn } from \"./transferForm.script\";\n\nexport type TransferFormProps = TransferFormScriptReturn;\n\nexport const TransferForm: FC<TransferFormProps> = (props) => {\n const {\n networkId,\n disabled,\n onTransfer,\n quantity,\n onQuantityChange,\n amount,\n tokens,\n token,\n onTokenChange,\n maxQuantity,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccounts,\n toAccounts,\n fromAccount,\n onFromAccountChange,\n toAccount,\n onToAccountChange,\n onExchange,\n } = props;\n\n const { t } = useTranslation();\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.from\")}\n </Text>\n <Box mt={1} mb={1}>\n <AccountSelect\n subAccounts={fromAccounts}\n value={fromAccount}\n onValueChange={onFromAccountChange}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n hintMessage={hintMessage}\n status={inputStatus}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={unsettledPnL}\n hasPositions={hasPositions}\n onSettlePnl={onSettlePnl}\n tooltipContent={t(\"transfer.internalTransfer.unsettled.tooltip\")}\n dialogContent={\n // @ts-ignore\n <Trans i18nKey=\"transfer.internalTransfer.settlePnl.description\" />\n }\n />\n </Box>\n\n <ExchangeDivider\n icon={\n <TransferVerticalIcon\n // TODO: determines if the current orderly key is the main account\n // className={cn(\n // isMainAccount\n // ? \"oui-cursor-pointer oui-text-primary\"\n // : \" oui-cursor-not-allowed oui-text-base-contrast-20\",\n // )}\n // onClick={isMainAccount ? onExchange : undefined}\n className=\"oui-cursor-pointer oui-text-primary\"\n onClick={onExchange}\n />\n }\n />\n\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.to\")}\n </Text>\n <Box mt={1}>\n <AccountSelect\n subAccounts={toAccounts}\n value={toAccount}\n onValueChange={onToAccountChange}\n />\n <Flex\n className={cn(\n \"oui-mt-[2px] oui-h-[31px] oui-text-base-contrast-54\",\n \"oui-rounded-b-xl oui-rounded-t-sm\",\n )}\n justify=\"between\"\n itemAlign=\"center\"\n px={3}\n intensity={600}\n >\n <Text size=\"2xs\">\n {t(\"transfer.internalTransfer.currentAssetValue\")}\n </Text>\n <Text.numeral\n size=\"2xs\"\n intensity={54}\n unit={` ${token.symbol}`}\n dp={token?.precision}\n padding={false}\n >\n {toAccountAsset}\n </Text.numeral>\n </Flex>\n </Box>\n </Box>\n\n <Flex justify=\"center\">\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={submitting}\n size={buttonSize}\n onClick={onTransfer}\n >\n {t(\"common.transfer\")}\n </Button>\n </AuthGuard>\n </Box>\n </Flex>\n </Box>\n );\n};\n","import { useState } from \"react\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\n\ntype AccountSelectProps = {\n subAccounts?: SubAccount[];\n value?: SubAccount;\n onValueChange?: (subAccount: SubAccount) => void;\n};\n\nexport const AccountSelect: React.FC<AccountSelectProps> = (props) => {\n const { subAccounts = [], value } = props;\n const [open, setOpen] = useState(false);\n\n const selectable = subAccounts.length > 1;\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-b-sm oui-rounded-t-xl oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto oui-bg-base-6\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n size=\"xs\"\n intensity={80}\n rule={value?.description ? undefined : \"address\"}\n >\n {value?.description || value?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{value?.id}</Text.formatted>\n </Text>\n </Flex>\n {selectable && <ExchangeIcon className=\"oui-text-base-contrast-54\" />}\n </Flex>\n );\n\n const content = subAccounts.map((subAccount, index) => {\n const isActive = subAccount.id === value?.id;\n\n const asset = subAccount?.holding?.find(\n (item) => item.token === \"USDC\",\n )?.holding;\n\n return (\n <Flex\n key={subAccount.id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-transfer-form-account-select-item\",\n \"oui-cursor-pointer oui-py-[6px] hover:oui-bg-base-5\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n props.onValueChange?.(subAccount);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <Flex direction=\"column\" itemAlign=\"start\" className=\"oui-text-2xs\">\n <Text.formatted\n rule={subAccount?.description ? undefined : \"address\"}\n intensity={80}\n >\n {subAccount?.description || subAccount?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{subAccount?.id}</Text.formatted>\n </Text>\n </Flex>\n </Flex>\n <Flex gapX={3}>\n <Text.numeral size=\"2xs\" intensity={54} unit=\" USDC\">\n {asset || 0}\n </Text.numeral>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-transfer-form-account-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-transfer-form-account-select-dropdown-menu-content\",\n \"oui-font-semibold\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content} </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n SubAccount,\n useAccount,\n useConfig,\n useSubAccountDataObserver,\n useSubAccountMaxWithdrawal,\n useTransfer,\n} from \"@orderly.network/hooks\";\nimport { useAppStore } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { getTransferErrorMessage } from \"../../utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\n\nexport type TransferFormScriptReturn = ReturnType<typeof useTransferFormScript>;\n\nexport type TransferFormScriptOptions = {\n /** target sub account id */\n toAccountId?: string;\n token?: string;\n close?: () => void;\n};\n\nconst DEFAULT_TOKEN = {\n symbol: \"USDC\",\n} as API.TokenInfo;\n\nexport const useTransferFormScript = (options: TransferFormScriptOptions) => {\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\"\");\n const [fromAccount, setFromAccount] = useState<SubAccount>();\n const [toAccount, setToAccount] = useState<SubAccount>();\n const [mainAccount, setMainAccount] = useState<SubAccount>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([DEFAULT_TOKEN]);\n const [token, setToken] = useState<API.TokenInfo>(DEFAULT_TOKEN);\n const [holdingMap, setHoldingMap] = useState<Record<string, API.Holding[]>>(\n {},\n );\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { state, isMainAccount, subAccount } = useAccount();\n\n const tokensInfo = 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 \"@orderly.network/i18n\";\nimport { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { registerSimpleSheet } from \"@orderly.network/ui\";\nimport {\n TransferFormScriptOptions,\n useTransferFormScript,\n} from \"./transferForm.script\";\nimport { TransferForm } from \"./transferForm.ui\";\n\nexport const TransferDialogId = \"TransferDialogId\";\nexport const TransferSheetId = \"TransferSheetId\";\n\nexport type TransferFormWidgetProps = TransferFormScriptOptions;\n\nexport const TransferFormWidget = (props: TransferFormWidgetProps) => {\n const state = useTransferFormScript({\n toAccountId: props.toAccountId,\n token: props.token,\n close: props.close,\n });\n return <TransferForm {...state} />;\n};\n\nexport const TransferWidget: FC<TransferFormWidgetProps> = (props) => {\n return (\n <TransferFormWidget\n close={props.close}\n toAccountId={props.toAccountId}\n token={props.token}\n />\n );\n};\n\nregisterSimpleDialog(TransferDialogId, TransferWidget, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n title: () => i18n.t(\"common.transfer\"),\n});\n\nregisterSimpleSheet(TransferSheetId, TransferWidget, {\n title: () => i18n.t(\"common.transfer\"),\n});\n","import React from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ConvertAction } from \"../convertAction\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { SwapCoin } from \"../swapCoin\";\nimport {\n unnormalizeAmount,\n type ConvertFormScriptReturn,\n} from \"./convertForm.script\";\n\nexport type ConvertFormProps = ConvertFormScriptReturn;\n\nexport const ConvertFormUI: React.FC<ConvertFormProps> = (props) => {\n const {\n loading,\n disabled,\n quantity,\n onQuantityChange,\n maxQuantity,\n token,\n targetToken,\n sourceTokens,\n onSourceTokenChange,\n onConvert,\n slippage,\n onSlippageChange,\n convertRate,\n outAmounts,\n minimumReceived,\n isQuoteLoading,\n currentLTV,\n nextLTV,\n networkId,\n balanceRevalidating,\n targetChainInfo,\n } = props;\n\n return (\n <Box className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={token}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={quantity}\n maxQuantity={maxQuantity.toString()}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <ExchangeDivider />\n <QuantityInput\n readOnly\n loading={isQuoteLoading}\n token={targetToken}\n value={\n isQuoteLoading || !quantity || Number.isNaN(Number(outAmounts))\n ? \"\"\n : unnormalizeAmount(outAmounts, targetChainInfo?.decimals ?? 6)\n }\n />\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <SwapCoin\n indexPrice={\n isQuoteLoading || !quantity || Number.isNaN(Number(convertRate))\n ? \"-\"\n : convertRate\n }\n sourceSymbol={token?.token}\n targetSymbol={targetToken?.token}\n />\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n symbol={targetToken?.token || \"\"}\n precision={targetChainInfo?.precision ?? 6}\n value={\n isQuoteLoading ||\n !quantity ||\n Number.isNaN(Number(minimumReceived))\n ? \"-\"\n : unnormalizeAmount(\n minimumReceived.toString(),\n targetChainInfo?.decimals ?? 6,\n )\n }\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n </Flex>\n </Box>\n <Flex itemAlign={\"center\"} justify=\"center\">\n <ConvertAction\n networkId={networkId}\n disabled={disabled}\n loading={loading}\n onConvert={onConvert}\n />\n </Flex>\n </Box>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\n\nexport interface ConvertActionButtonProps {\n disabled?: boolean;\n loading?: boolean;\n symbol?: string;\n networkId?: NetworkId;\n onConvert?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const ConvertAction: React.FC<ConvertActionButtonProps> = (props) => {\n const { disabled, loading, networkId, onConvert } = props;\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{ fullWidth: true, size: { initial: \"md\", lg: \"lg\" } }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={{ initial: \"md\", lg: \"lg\" }}\n onClick={onConvert}\n >\n {t(\"transfer.convert\")}\n </Button>\n </AuthGuard>\n </Box>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useConfig,\n useConvert,\n useComputedLTV,\n useLocalStorage,\n useOdosQuote,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport type { NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useToken } from \"./hooks/useToken\";\n\nconst { calcMinimumReceived } = account;\n\nexport type ConvertFormScriptReturn = ReturnType<typeof useConvertFormScript>;\n\nconst ORDERLY_CONVERT_SLIPPAGE_KEY = \"orderly_convert_slippage\";\n\nexport interface ConvertFormScriptOptions {\n token?: string;\n close?: () => void;\n}\n\nexport const normalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).mul(new Decimal(10).pow(decimals)).toFixed(0);\n};\n\nexport const unnormalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).div(new Decimal(10).pow(decimals)).toString();\n};\n\nexport const useConvertFormScript = (options: ConvertFormScriptOptions) => {\n const { token: defaultToken, close } = options;\n\n const { t } = useTranslation();\n const [loading, setLoading] = useState<boolean>(false);\n\n const config = useConfig();\n\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const [quantity, setQuantity] = useState<string>(\"\");\n\n const { wrongNetwork } = useAppContext();\n\n const { wallet } = useWalletConnector();\n\n const {\n sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n targetChainInfo,\n } = useToken({ defaultValue: defaultToken });\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_CONVERT_SLIPPAGE_KEY,\n 1,\n );\n\n const { maxAmount, convert } = useConvert({ token: sourceToken?.token });\n\n const onConvert = async () => {\n if (loading) {\n return;\n }\n setLoading(true);\n return convert({\n amount: Number(quantity),\n slippage: new Decimal(slippage).div(100).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.convert.completed\"));\n close?.();\n setQuantity(\"\");\n })\n .catch((err: Error) => {\n toast.error(\n err.message?.includes(\"user rejected\")\n ? t(\"transfer.convert.failed\")\n : err.message,\n );\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const [postQuote, { data: quoteData, isMutating: isQuoteLoading }] =\n useOdosQuote();\n\n useEffect(() => {\n const { quoteChainId, contract_address, decimals } = sourceToken || {};\n const targetAddress = targetChainInfo?.contract_address;\n\n if (quantity && quoteChainId && contract_address && targetAddress) {\n // https://docs.odos.xyz/build/api-docs\n postQuote({\n chainId: parseInt(quoteChainId),\n inputTokens: [\n {\n amount: normalizeAmount(quantity, decimals!),\n tokenAddress: contract_address,\n },\n ],\n outputTokens: [\n {\n proportion: 1,\n tokenAddress: targetAddress,\n },\n ],\n // simple: true,\n });\n }\n }, [quantity, sourceToken, targetChainInfo, postQuote]);\n\n const memoizedOutAmounts = useMemo<string>(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n return quoteData?.outAmounts[0];\n }, [quoteData, isQuoteLoading]);\n\n const memoizedConvertRate = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n\n const rate = new Decimal(\n unnormalizeAmount(\n quoteData.outAmounts[0],\n targetChainInfo?.decimals ?? 6,\n ),\n )\n .div(\n unnormalizeAmount(quoteData.inAmounts[0], sourceToken?.decimals ?? 6),\n )\n .toString();\n return rate;\n }, [isQuoteLoading, quoteData, sourceToken, targetChainInfo]);\n\n const memoizedMinimumReceived = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return 0;\n }\n return calcMinimumReceived({\n amount: quoteData?.outAmounts[0],\n slippage: Number(slippage),\n });\n }, [quoteData, isQuoteLoading, slippage]);\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: Number(quantity),\n token: sourceToken?.token,\n });\n\n const disabled = !quantity || Number(quantity) === 0;\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n token: sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n wrongNetwork,\n onConvert,\n hasPositions,\n onSettlePnl,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n convertRate: memoizedConvertRate,\n minimumReceived: memoizedMinimumReceived,\n outAmounts: memoizedOutAmounts,\n isQuoteLoading,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n targetChainInfo,\n };\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { Arbitrum, type API } from \"@orderly.network/types\";\n\nconst splitTokenBySymbol = <T extends API.Chain>(items: T[]) => {\n return items.reduce<Record<\"usdc\" | \"others\", T[]>>(\n (result, item) => {\n if (item.token?.toUpperCase() === \"USDC\") {\n result.usdc.push(item);\n } else {\n result.others.push(item);\n }\n return result;\n },\n { usdc: [], others: [] },\n );\n};\n\nconst findChainInfo = (tokenInfo: API.Chain) => {\n const arbitrumChainInfo = tokenInfo.chain_details.find(\n (item) => parseInt(item.chain_id) === Arbitrum.id,\n );\n\n const nativeTokenChainInfo = tokenInfo.chain_details.find(\n (item) => !item.contract_address,\n );\n\n const nativeTokenAddress = \"0x0000000000000000000000000000000000000000\";\n\n if (arbitrumChainInfo) {\n return {\n contract_address:\n arbitrumChainInfo.contract_address || nativeTokenAddress,\n quoteChainId: arbitrumChainInfo.chain_id,\n decimals: arbitrumChainInfo.decimals,\n };\n }\n\n if (nativeTokenChainInfo) {\n return {\n contract_address: nativeTokenAddress,\n quoteChainId: nativeTokenChainInfo.chain_id,\n decimals: nativeTokenChainInfo.decimals,\n };\n }\n\n return {\n contract_address: tokenInfo.chain_details[0]?.contract_address,\n quoteChainId: tokenInfo.chain_details[0]?.chain_id,\n decimals: tokenInfo.chain_details[0]?.decimals,\n };\n};\n\ninterface Options {\n defaultValue?: string;\n}\n\ntype ConvertTokenInfo = API.Chain & {\n contract_address: string;\n quoteChainId: string;\n precision: number;\n};\n\nexport const useToken = (options: Options) => {\n const { defaultValue } = options;\n\n const [sourceToken, setSourceToken] = useState<ConvertTokenInfo>();\n const [targetToken, setTargetToken] = useState<ConvertTokenInfo>();\n const [sourceTokens, setSourceTokens] = useState<ConvertTokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const newTokensInfo = useMemo(() => {\n const filteredTokensInfo = tokensInfo.filter((item) => item.on_chain_swap);\n\n return filteredTokensInfo.map((item) => {\n const chainInfo = findChainInfo(item);\n return {\n ...item,\n symbol: item.token,\n precision: item.decimals ?? 6,\n ...chainInfo,\n };\n });\n }, [tokensInfo]);\n\n useEffect(() => {\n const { usdc, others } = splitTokenBySymbol(newTokensInfo);\n setSourceToken(() => {\n if (defaultValue) {\n const defaultToken = others.find(({ token }) => token === defaultValue);\n return defaultToken ? defaultToken : others[0];\n }\n return others[0];\n });\n setSourceTokens(others);\n setTargetToken(usdc[0]);\n }, [defaultValue, newTokensInfo]);\n\n const targetChainInfo = useMemo(() => {\n const info = targetToken?.chain_details?.find(\n (item) => item.chain_id === sourceToken?.quoteChainId,\n );\n return {\n ...info,\n precision: targetToken?.precision,\n };\n }, [sourceToken, targetToken]);\n\n return {\n sourceToken,\n sourceTokens,\n onSourceTokenChange: setSourceToken,\n targetToken,\n targetChainInfo,\n };\n};\n","import React from \"react\";\n// import pick from \"ramda/es/pick\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport type { ConvertFormScriptOptions } from \"./convertForm.script\";\nimport { useConvertFormScript } from \"./convertForm.script\";\nimport { ConvertFormUI } from \"./convertForm.ui\";\n\nexport const ConvertDialogId = \"ConvertDialogId\";\nexport const ConvertSheetId = \"ConvertSheetId\";\n\nexport const ConvertFormWidget: React.FC<ConvertFormScriptOptions> = (\n props,\n) => {\n const state = useConvertFormScript(props);\n return <ConvertFormUI {...state} />;\n};\n\nregisterSimpleDialog(ConvertDialogId, ConvertFormWidget, {\n size: \"md\",\n classNames: { content: \"oui-border oui-border-line-6\" },\n title: () => i18n.t(\"transfer.convert\"),\n});\n\nregisterSimpleSheet(ConvertSheetId, ConvertFormWidget, {\n title: () => i18n.t(\"transfer.convert\"),\n});\n","import React, { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport { Flex, cn, Text, CloseIcon } from \"@orderly.network/ui\";\nimport { DepositStatusScriptReturn } from \"./depostiStatus.script\";\n\nexport type DepositStatusProps = {\n className?: string;\n classNames?: {\n root?: string;\n items?: string;\n };\n onClick?: () => void;\n} & DepositStatusScriptReturn;\n\nexport const DepositStatus: React.FC<DepositStatusProps> = (props) => {\n const { canTrade, className, classNames, pendingCount, completedCount } =\n props;\n\n if (!canTrade || (pendingCount === 0 && completedCount === 0)) {\n return null;\n }\n\n return (\n <Flex\n direction=\"column\"\n gapY={1}\n width=\"100%\"\n className={cn(className, classNames?.root)}\n >\n <DepositStatusContent\n className={classNames?.items}\n count={pendingCount}\n status={AssetHistoryStatusEnum.PENDING}\n onClick={props.onClick}\n estimatedTime={props.estimatedTime}\n onClose={props.onClose}\n />\n <DepositStatusContent\n className={classNames?.items}\n count={completedCount}\n status={AssetHistoryStatusEnum.COMPLETED}\n onClick={props.onClick}\n onClose={props.onClose}\n />\n </Flex>\n );\n};\n\ntype DepositStatusContentProps = {\n count: number;\n status: AssetHistoryStatusEnum.PENDING | AssetHistoryStatusEnum.COMPLETED;\n onClick?: () => void;\n className?: string;\n estimatedTime?: string | number;\n onClose: (status: AssetHistoryStatusEnum) => void;\n};\n\nexport const DepositStatusContent = (props: DepositStatusContentProps) => {\n const { t } = useTranslation();\n const { count, status, estimatedTime } = props;\n\n const content = useMemo(() => {\n if (status === AssetHistoryStatusEnum.PENDING) {\n return count > 1\n ? t(\"transfer.deposit.status.pending.multiple\")\n : t(\"transfer.deposit.status.pending.one\");\n }\n\n return count > 1\n ? t(\"transfer.deposit.status.completed.multiple\")\n : t(\"transfer.deposit.status.completed.one\");\n }, [t, status, count]);\n\n if (count === 0) {\n return null;\n }\n\n const clickable = typeof props.onClick === \"function\";\n\n const renderContent = () => {\n if (\n status === AssetHistoryStatusEnum.PENDING &&\n count === 1 &&\n estimatedTime\n ) {\n return (\n <Text size=\"2xs\" color=\"primary\">\n ~ {estimatedTime}\n </Text>\n );\n }\n\n return <Badge>{props.count}</Badge>;\n };\n\n return (\n <Flex\n intensity={900}\n gapX={1}\n width=\"100%\"\n r=\"full\"\n className={cn(\n \"oui-px-3 lg:oui-px-0\",\n \"oui-py-2 lg:oui-py-0\",\n props.className,\n )}\n >\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-font-normal\",\n \"oui-text-base-contrast-80 hover:oui-text-base-contrast\",\n clickable && \"oui-cursor-pointer\",\n )}\n width=\"100%\"\n onClick={props.onClick}\n >\n <Flex gapX={1}>\n <Dot\n className={\n status === AssetHistoryStatusEnum.COMPLETED\n ? \"oui-bg-success\"\n : \"oui-bg-primary\"\n }\n />\n <Text size=\"2xs\">{content}</Text>\n </Flex>\n {renderContent()}\n </Flex>\n <CloseIcon\n size={14}\n opacity={1}\n className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n props.onClose(status);\n }}\n />\n </Flex>\n );\n};\n\nconst Badge: FC<{ className?: string; children: ReactNode }> = (props) => {\n return (\n <Flex\n justify=\"center\"\n itemAlign=\"center\"\n r=\"full\"\n width={18}\n height={18}\n className={cn(\"oui-bg-line-12\", props.className)}\n >\n <Text size=\"3xs\" intensity={80}>\n {props.children}\n </Text>\n </Flex>\n );\n};\n\nconst Dot: FC<{ className?: string }> = (props) => {\n return (\n <div\n className={cn(\n \"oui-mx-[5px] oui-size-2 oui-shrink-0 oui-rounded-full\",\n props.className,\n )}\n />\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useBalanceTopic,\n useDebouncedCallback,\n useLocalStorage,\n useTransferHistory,\n useWalletTopic,\n} from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@orderly.network/types\";\nimport { useTransactionTime } from \"../../contract/useTransactionTime\";\n\nexport type DepositStatusScriptReturn = ReturnType<\n typeof useDepositStatusScript\n>;\n\nfunction getTimeRange() {\n const endTime = Date.now();\n // 1 hour ago\n const startTime = endTime - 1000 * 60 * 60;\n\n return [startTime, endTime];\n}\n\nexport function useDepositStatusScript() {\n const [depositDataRange, setDepositDataRange] = useState(getTimeRange());\n const [transferDataRange, setTransferDataRange] = useState(getTimeRange());\n // only deposit have pending status\n const [depositPending, setDepositPending] = useState(0);\n const [depositCompleted, setDepositCompleted] = useState(0);\n const [transferCompleted, setTransferCompleted] = useState(0);\n const [pendingList, setPendingList] = useState<API.TransferHistoryRow[]>([]);\n\n const [hideNotificationTimeMap, setHideNotificationTimeMap] = useLocalStorage(\n \"orderly_deposit_status_hide_notification_time\",\n {\n [AssetHistoryStatusEnum.PENDING]: 0,\n [AssetHistoryStatusEnum.COMPLETED]: 0,\n },\n );\n\n const { state } = useAccount();\n\n const canTrade =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n const { chainId, blockTime } = useMemo(() => {\n if (canTrade && pendingList.length === 1) {\n return {\n chainId: pendingList[0].chain_id,\n blockTime: pendingList[0].block_time,\n };\n }\n\n return {\n chainId: undefined,\n blockTime: undefined,\n };\n }, [canTrade, pendingList]);\n\n const transactionTime = useTransactionTime(chainId);\n\n // Estimated time remaining = tx_block_time +(total confirmations x average block time) - current time\n const estimatedTime = useMemo(() => {\n if (transactionTime && blockTime) {\n const seconds = blockTime / 1000 + transactionTime - Date.now() / 1000;\n console.log(\"transactionTime\", transactionTime, seconds);\n return formatEstimatedTime(seconds);\n }\n\n return 0;\n }, [transactionTime, blockTime]);\n\n const [assetHistory, { isLoading }] = useAssetsHistory(\n {\n startTime: depositDataRange[0],\n endTime: depositDataRange[1],\n page: 1,\n pageSize: 200,\n side: \"DEPOSIT\",\n },\n {\n shouldUpdateOnWalletChanged: () => false,\n },\n );\n\n // pending and completed use one request to reduce api request, because assets history api limit 10 per 60s\n const [transferHistory] = useTransferHistory({\n dataRange: transferDataRange,\n side: \"IN\",\n size: 200,\n page: 1,\n main_sub_only: false,\n });\n\n // update time range when wallet and balance changed\n // because DEPOSIT and WITHDRAW will push twice COMPLETED event in a shorttime, so we need to debounce it\n // TODO: refresh one when push more than twice again\n const updateDepositTimeRange = useDebouncedCallback((data: any) => {\n setDepositDataRange(getTimeRange());\n }, 300);\n\n useWalletTopic({\n onMessage(data) {\n const { side, transStatus } = data;\n if (\n side === AssetHistorySideEnum.DEPOSIT &&\n (transStatus === AssetHistoryStatusEnum.PENDING ||\n transStatus === AssetHistoryStatusEnum.COMPLETED)\n ) {\n console.log(\"deposit status updated\", data);\n updateDepositTimeRange(data);\n }\n },\n });\n\n // update transfer time range when balance changed\n const updateTransferTimeRange = useDebouncedCallback((data: any) => {\n setTransferDataRange(getTimeRange());\n }, 300);\n\n useBalanceTopic({\n onMessage(data) {\n console.log(\"balance updated\", data);\n updateTransferTimeRange(data);\n },\n });\n\n useEffect(() => {\n if (!assetHistory || isLoading) {\n return;\n }\n const hidePendingNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.PENDING];\n\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n let pendingList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.PENDING,\n );\n\n if (hidePendingNotificationTime) {\n pendingList = pendingList.filter(\n (item) => item.created_time > hidePendingNotificationTime,\n );\n }\n\n let completedList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.COMPLETED,\n );\n\n if (hideCompletedNotificationTime) {\n completedList = completedList.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n );\n }\n\n setDepositPending(pendingList?.length || 0);\n setDepositCompleted(completedList?.length || 0);\n setPendingList(pendingList || []);\n }, [assetHistory, isLoading, hideNotificationTimeMap]);\n\n useEffect(() => {\n if (!transferHistory) {\n return;\n }\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n const completedList = hideCompletedNotificationTime\n ? transferHistory.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n )\n : transferHistory;\n\n setTransferCompleted(completedList.length);\n }, [transferHistory, hideNotificationTimeMap]);\n\n const completedCount = useMemo(() => {\n return depositCompleted + transferCompleted;\n }, [depositCompleted, transferCompleted]);\n\n const onClose = useCallback(\n (status: AssetHistoryStatusEnum) => {\n setHideNotificationTimeMap({\n ...hideNotificationTimeMap,\n [status]: Date.now(),\n });\n },\n [hideNotificationTimeMap],\n );\n\n return {\n pendingCount: depositPending,\n completedCount,\n canTrade,\n estimatedTime,\n onClose,\n };\n}\n\nfunction formatEstimatedTime(totalSeconds: number) {\n const sec = Math.max(30, totalSeconds);\n let minutes = Math.floor(sec / 60);\n let seconds = sec % 60;\n\n if (seconds > 0 && seconds <= 30) {\n seconds = 30;\n } else if (seconds > 30) {\n minutes += 1;\n seconds = 0;\n }\n\n if (minutes > 0) {\n return seconds > 0 ? `${minutes} m ${seconds} s` : `${minutes} m`;\n }\n\n return `${seconds} s`;\n\n // minutes = Math.max(1, Math.ceil(seconds / 60));\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChains, useWalletConnector } from \"@orderly.network/hooks\";\nimport { getBlockTime } from \"./getBlockTime\";\nimport { getChainConfirmations } from \"./getChainConfirmations\";\n\nexport const useTransactionTime = (chainId?: number | string) => {\n const [blockTime, setBlockTime] = useState(0);\n const [confirmations, setConfirmations] = useState(0);\n const timeMap = useRef<Record<string, number>>({});\n const confirmationsMap = useRef<Record<string, number>>({});\n\n const [, { findByChainId }] = useChains();\n const { wallet } = useWalletConnector();\n\n const chain = useMemo(() => {\n if (!chainId) {\n return;\n }\n const id = typeof chainId === \"number\" ? chainId : Number.parseInt(chainId);\n return findByChainId(id);\n }, [chainId, findByChainId]);\n\n useEffect(() => {\n if (!chain || !wallet) {\n return;\n }\n\n const chainId = chain.network_infos.chain_id;\n\n if (timeMap.current[chainId]) {\n setBlockTime(timeMap.current[chainId]);\n } else {\n getBlockTime({\n chainId,\n chain,\n wallet,\n })\n .then((time) => {\n console.log(\"average block time\", chainId, time);\n setBlockTime(time);\n // record chain block time\n timeMap.current[chainId] = time;\n })\n .catch((error) => {\n console.error(\"getBlockTime error\", error);\n });\n }\n\n if (confirmationsMap.current[chainId]) {\n setConfirmations(confirmationsMap.current[chainId]);\n } else {\n getChainConfirmations(chain)\n .then((confirmations) => {\n console.log(\"confirmations\", chainId, confirmations);\n setConfirmations(confirmations);\n // record chain confirmations\n confirmationsMap.current[chainId] = confirmations;\n })\n .catch((error) => {\n console.error(\"getChainConfirmations error\", error);\n });\n }\n }, [chain, wallet]);\n\n const transactionTime = useMemo(() => {\n if (blockTime && confirmations) {\n return blockTime * confirmations;\n }\n return 0;\n }, [blockTime, confirmations]);\n\n return transactionTime;\n};\n","import { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { isSolana } from \"@orderly.network/utils\";\nimport { getEvmBlockTime } from \"./getEvmBlockTime\";\nimport { getSolanaBlockTime } from \"./getSolanaBlockTime\";\n\n// https://tokenterminal.com/explorer/metrics/block-time\nexport async function getBlockTime(inputs: {\n chainId: number;\n chain: API.Chain;\n wallet: WalletState | null;\n}) {\n const { chainId, chain, wallet } = inputs;\n if (isSolana(chainId)) {\n return getSolanaBlockTime(chain, wallet);\n }\n return getEvmBlockTime(chain);\n}\n","import { ethers } from \"ethers\";\nimport type { API } from \"@orderly.network/types\";\n\nconst blockCount = 5;\n\nexport async function getEvmBlockTime(chain: API.Chain) {\n const provider = new ethers.JsonRpcProvider(\n chain.network_infos.public_rpc_url,\n );\n\n const latest = await provider.getBlockNumber();\n\n const blocks = await Promise.all(\n Array.from({ length: blockCount }, (_, i) => provider.getBlock(latest - i)),\n );\n\n const timestamps = blocks\n .filter((b) => b?.timestamp != null)\n .map((b) => Number(b?.timestamp));\n\n if (timestamps.length < 2) {\n return 0;\n }\n\n let sum = 0;\n for (let i = 0; i < timestamps.length - 1; i++) {\n const diff = timestamps[i] - timestamps[i + 1];\n sum += diff;\n }\n\n return sum / (timestamps.length - 1);\n}\n","import {\n DefaultSolanaWalletAdapter,\n SolanaWalletProvider,\n} from \"@orderly.network/default-solana-adapter\";\nimport { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport async function getSolanaBlockTime(\n chain: API.Chain,\n wallet: WalletState | null,\n) {\n if (!wallet) {\n return 0;\n }\n\n const walletAdapter = new DefaultSolanaWalletAdapter();\n\n walletAdapter.active({\n address: wallet.accounts[0].address,\n chain: { id: chain.network_infos.chain_id },\n provider: wallet.provider as SolanaWalletProvider,\n });\n\n // console.log(\"walletAdapter\", walletAdapter);\n\n // The Solana RPC node keeps a history of performance samples, typically for a few hours.\n // A limit of 60 samples gives us a good average over the last hour or so.\n const samples =\n await walletAdapter.connection.getRecentPerformanceSamples(60);\n\n let totalBlockTime = 0;\n let validSamples = 0;\n\n for (const sample of samples) {\n if (sample.numSlots > 0 && sample.samplePeriodSecs > 0) {\n const blockTime = sample.samplePeriodSecs / sample.numSlots;\n totalBlockTime += blockTime;\n validSamples++;\n }\n }\n\n return totalBlockTime / validSamples;\n}\n","import { ethers } from \"ethers\";\nimport { API } from \"@orderly.network/types\";\nimport getAppUlnConfigAbi from \"./abi/getAppUlnConfigAbi.json\";\nimport { getEndpointId } from \"./endpointId\";\n\n/**\n * no need to distinguish between EVM and SOL\n */\nexport async function getChainConfirmations(chain: API.Chain) {\n const chainId = chain.network_infos.chain_id;\n const isMainnet = chain.network_infos.mainnet;\n\n const publicRpcUrl = isMainnet\n ? \"https://rpc.orderly.network\"\n : \"https://testnet-rpc.orderly.org\";\n\n // mainnet: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=read_write_contract\n // testnet: https://testnet-explorer.orderly.org/address/0x3013C32e5F45E69ceA9baD4d96786704C2aE148c?tab=read_contract#39e3f938\n const contractAddress = isMainnet\n ? \"0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77\"\n : \"0x3013C32e5F45E69ceA9baD4d96786704C2aE148c\";\n\n const endpointId = getEndpointId(chainId);\n\n const address = \"0x0000000000000000000000000000000000000000\";\n\n const provider = new ethers.JsonRpcProvider(publicRpcUrl);\n\n const contract = new ethers.Contract(\n contractAddress,\n // full abi: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=contract_abi\n // this only need to use getAppUlnConfig abi, other functions are not needed\n getAppUlnConfigAbi,\n provider,\n );\n\n const result = await contract.getAppUlnConfig(address, endpointId);\n\n // console.log(\"getChainConfirmations\", chainId, result);\n\n return Number(result.confirmations || 0);\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_oapp\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_remoteEid\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getAppUlnConfig\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"confirmations\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"requiredDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNThreshold\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"requiredDVNs\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"optionalDVNs\",\n \"type\": \"address[]\"\n }\n ],\n \"internalType\": \"struct UlnConfig\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n]\n","/**\n * https://docs.layerzero.network/v2/deployments/deployed-contracts\n * Chain ID to Endpoint ID mapping for LayerZero V2\n *\n * This mapping contains all supported chains and their corresponding LayerZero Endpoint IDs.\n *\n * Endpoint ID ranges:\n * - 30xxx: Mainnet chains\n * - 40xxx: Testnet chains\n */\n\nexport const CHAIN_ID_TO_ENDPOINT_ID: Record<number | string, number> = {\n // Ethereum and L2s\n 1: 30101, // Ethereum Mainnet\n 10: 30111, // Optimism Mainnet\n 42161: 30110, // Arbitrum Mainnet\n 137: 30109, // Polygon Mainnet\n 8453: 30184, // Base Mainnet\n 59144: 30183, // Linea Mainnet\n 534352: 30214, // Scroll Mainnet\n 324: 30165, // zkSync Era Mainnet\n 1101: 30158, // Polygon zkEVM Mainnet\n 169: 30217, // Manta Pacific Mainnet\n 5000: 30181, // Mantle Mainnet\n 81457: 30243, // Blast Mainnet\n 252: 30255, // Fraxtal Mainnet\n 34443: 30260, // Mode Mainnet\n 167000: 30290, // Taiko Mainnet\n 7777777: 30195, // Zora Mainnet\n\n // Testnets\n 11155420: 40232, // Optimism Sepolia Testnet\n 421614: 40231, // Arbitrum Sepolia Testnet\n 84532: 40245, // Base Sepolia Testnet\n 300: 40305, // zkSync Sepolia Testnet\n 11155111: 40161, // Ethereum Sepolia Testnet\n 17000: 40217, // Ethereum Holesky Testnet\n\n // BNB Chain and related\n 56: 30102, // BNB Smart Chain (BSC) Mainnet\n 204: 30202, // opBNB Mainnet\n 97: 40102, // BNB Smart Chain (BSC) Testnet\n\n // Avalanche\n 43114: 30106, // Avalanche Mainnet\n 43113: 40106, // Avalanche Fuji Testnet\n\n // Fantom\n 250: 30112, // Fantom Mainnet\n\n // Gnosis\n 100: 30145, // Gnosis Mainnet\n\n // Celo\n 42220: 30125, // Celo Mainnet\n\n // Harmony\n 1666600000: 30116, // Harmony Mainnet\n\n // Cronos\n 25: 30359, // Cronos EVM Mainnet\n 388: 30360, // Cronos zkEVM Mainnet\n\n // Metis\n 1088: 30151, // Metis Mainnet\n\n // Moonbeam/Moonriver\n 1284: 30126, // Moonbeam Mainnet\n 1285: 30167, // Moonriver Mainnet\n\n // Astar\n 592: 30210, // Astar Mainnet\n 3776: 30257, // Astar zkEVM Mainnet\n\n // Canto\n 7700: 30159, // Canto Mainnet\n\n // Fuse\n 122: 30138, // Fuse Mainnet\n\n // Kava\n 2222: 30177, // Kava Mainnet\n\n // Meter\n 82: 30176, // Meter Mainnet\n\n // Near Aurora\n 1313161554: 30211, // Near Aurora Mainnet\n\n // DFK Chain\n 53935: 30115, // DFK Chain\n\n // DOS Chain\n 7979: 30149, // DOS Chain Mainnet\n\n // Degen\n 666666666: 30267, // Degen Mainnet\n\n // Dexalot Subnet\n 432204: 30118, // Dexalot Subnet Mainnet\n\n // Homeverse\n 19011: 30265, // Homeverse Mainnet\n\n // Horizen EON\n 7332: 30215, // Horizen EON Mainnet\n\n // Hubble\n 1992: 30182, // Hubble Mainnet\n\n // Tenet\n 1559: 30173, // Tenet Mainnet\n\n // TelosEVM\n 40: 30199, // TelosEVM Mainnet\n\n // Tiltyard\n 710420: 30238, // Tiltyard Mainnet\n\n // Viction\n 88: 30196, // Viction Mainnet\n\n // XPLA\n 37: 30216, // XPLA Mainnet\n\n // Xai\n 660279: 30236, // Xai Mainnet\n\n // re.al\n 111188: 30237, // re.al Mainnet\n\n // inEVM\n 2525: 30234, // inEVM Mainnet\n\n // Rari Chain\n 1380012617: 30235, // Rari Chain Mainnet\n\n // Shimmer\n 148: 30230, // Shimmer Mainnet\n\n // Skale\n 2046399126: 30273, // Skale Mainnet\n\n // Orderly\n 291: 30213, // Orderly Mainnet\n\n // CoreDAO\n 1116: 30153, // CoreDAO Mainnet\n\n // Conflux eSpace\n 1030: 30212, // Conflux eSpace Mainnet\n\n // Flare\n 14: 30295, // Flare Mainnet\n\n // Gravity\n 1625: 30294, // Gravity Mainnet\n\n // Japan Open Chain\n 81: 30285, // Japan Open Chain Mainnet\n\n // Kaia (formerly Klaytn)\n 8217: 30150, // Kaia Mainnet (formerly Klaytn)\n\n // OKX\n 66: 30155, // OKX Mainnet\n\n // Beam\n 4337: 30198, // Beam Mainnet\n\n // Loot\n 5151706: 30197, // Loot Mainnet\n\n // Lyra\n 957: 30311, // Lyra Mainnet\n\n // Morph\n 2818: 30322, // Morph Mainnet\n\n // Movement\n \"\": 30325, // Movement Mainnet (no chain ID)\n\n // Bouncebit\n 6001: 30293, // Bouncebit Mainnet\n\n // Cyber\n 7560: 30283, // Cyber Mainnet\n\n // Iota\n 8822: 30284, // Iota Mainnet\n\n // Sanko\n 1996: 30278, // Sanko Mainnet\n\n // Sei\n 1329: 30280, // Sei Mainnet\n\n // BOB\n 60808: 30279, // BOB Mainnet\n\n // Bahamut\n 5165: 30363, // Bahamut Mainnet\n\n // Animechain\n 69000: 30372, // Animechain Mainnet\n\n // Ape\n 33139: 30312, // Ape Mainnet\n\n // Berachain\n 80094: 30362, // Berachain Mainnet\n\n // Bevm\n 11501: 30317, // Bevm Mainnet\n\n // Bitlayer\n 200901: 30314, // Bitlayer Mainnet\n\n // Botanix\n 3637: 30376, // Botanix\n\n // Codex\n 81224: 30323, // Codex Mainnet\n\n // Concrete\n 12739: 30366, // Concrete\n\n // DM2 Verse\n 68770: 30315, // DM2 Verse Mainnet\n\n // EDU Chain\n 41923: 30328, // EDU Chain Mainnet\n\n // EVM on Flow\n 747: 30336, // EVM on Flow Mainnet\n\n // Etherlink\n 42793: 30292, // Etherlink Mainnet\n\n // Glue\n 1300: 30342, // Glue Mainnet\n\n // Goat\n 2345: 30361, // Goat Mainnet\n\n // Gunz\n 43419: 30371, // Gunz Mainnet\n\n // Hedera\n 295: 30316, // Hedera Mainnet\n\n // Hemi\n 43111: 30329, // Hemi Mainnet\n\n // HyperEVM\n 999: 30367, // HyperEVM Mainnet\n\n // Initia\n // \"\": 30326, // Initia Mainnet (no chain ID)\n\n // Ink\n 57073: 30339, // Ink Mainnet\n\n // Katana\n 747474: 30375, // Katana\n\n // Lens\n 232: 30373, // Lens Mainnet\n\n // Lightlink\n 1890: 30309, // Lightlink Mainnet\n\n // Lisk\n 1135: 30321, // Lisk Mainnet\n\n // Merlin\n 4200: 30266, // Merlin Mainnet\n\n // Nibiru\n 6900: 30369, // Nibiru Mainnet\n\n // Otherworld Space\n 8227: 30341, // Otherworld Space Mainnet\n\n // Peaq\n 3338: 30302, // Peaq Mainnet\n\n // Plume\n 98866: 30370, // Plume Mainnet\n\n // Reya\n 1729: 30313, // Reya Mainnet\n\n // Rootstock\n 30: 30333, // Rootstock Mainnet\n\n // Soneium\n 1868: 30340, // Soneium Mainnet\n\n // Sonic\n 146: 30332, // Sonic Mainnet\n\n // Sophon\n 50104: 30334, // Sophon Mainnet\n\n // Story\n 1514: 30364, // Story Mainnet\n\n // Subtensor EVM\n 964: 30374, // Subtensor EVM Mainnet\n\n // Superposition\n 55244: 30327, // Superposition Mainnet\n\n // Swell\n 1923: 30335, // Swell Mainnet\n\n // Tac\n 239: 30377, // Tac\n\n // TON\n // \"\": 30343, // TON Mainnet (no chain ID)\n\n // Unichain\n 130: 30320, // Unichain Mainnet\n\n // Vana\n 1480: 30330, // Vana Mainnet\n\n // Worldchain\n 480: 30319, // Worldchain Mainnet\n\n // X Layer\n 196: 30274, // X Layer Mainnet\n\n // XChain\n 94524: 30291, // XChain Mainnet\n\n // XDC\n 50: 30365, // XDC Mainnet\n\n // Zircuit\n 48900: 30303, // Zircuit Mainnet\n\n // zkLink\n 810180: 30301, // zkLink Mainnet\n\n // Abstract\n 2741: 30324, // Abstract Mainnet\n\n // Aptos (non-EVM)\n // 1: 30108, // Aptos Mainnet\n\n // Arbitrum Nova\n 42170: 30175, // Arbitrum Nova Mainnet\n\n // Corn\n 21000000: 30331, // Corn Mainnet\n\n // Initia Testnet\n // \"\": 40326, // Initia Testnet (no chain ID)\n\n // HyperEVM Testnet\n 998: 40362, // HyperEVM Testnet\n\n // Berachain Bepolia Testnet\n 80069: 40371, // Berachain Bepolia Testnet\n\n // Monad Testnet\n 10143: 40204, // Monad Testnet\n\n // Polygon Amoy Testnet\n 80002: 40267, // Polygon Amoy Testnet\n\n // Solana (non-EVM)\n 101: 30168, // Solana Mainnet\n 103: 40168, // Solana Devnet\n 900900900: 30168, // Solana Mainnet\n 901901901: 40168, // Solana Devnet\n\n // Tron\n 728126428: 30420, // Tron Mainnet\n 2494104990: 40420, // Tron Testnet\n};\n\n/**\n * Get Endpoint ID for a given Chain ID\n * @param chainId - The chain ID to look up\n * @returns The corresponding Endpoint ID or undefined if not found\n */\nexport function getEndpointId(chainId: number | string): number | undefined {\n return CHAIN_ID_TO_ENDPOINT_ID[chainId];\n}\n","import React from \"react\";\nimport { useDepositStatusScript } from \"./depostiStatus.script\";\nimport { DepositStatus, DepositStatusProps } from \"./depostiStatus.ui\";\n\nexport type DepositStatusWidgetProps = Pick<\n DepositStatusProps,\n \"className\" | \"onClick\"\n>;\n\nexport const DepositStatusWidget: React.FC<DepositStatusWidgetProps> = (\n props,\n) => {\n const state = useDepositStatusScript();\n return <DepositStatus {...state} {...props} />;\n};\n"]}
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","jsx","useMemo","DepositAction","WithdrawTo","Decimal","jsxs","Spinner","cn","Tooltip","TooltipContent","useEffect","useRef","useState","balance","Fragment","token","value","item","Input","inputFormatter","modal","TokenIcon","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","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","Badge","useAssetsHistory","useDebouncedCallback","useWalletTopic","AssetHistorySideEnum","ethers","chainId","confirmations","pendingList"],"mappings":"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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, textVariants, Text } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { ActionButton } from \"../actionButton\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { CollateralContribution } from \"../collateralContribution\";\nimport { CollateralRatioWidget } from \"../collateralRatio\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { Notice } from \"../swap/components/notice\";\nimport { SwapFee } from \"../swap/components/swapFee\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { SwapIndicator } from \"../swapIndicator\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport { 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 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} 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 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(maxQuantity);\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 \"@orderly.network/hooks\";\nimport type { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const useLtvScript = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n revalidateOnFocus: false,\n },\n );\n const ltvThreshold = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.ltv_threshold).mul(100).toNumber()}%`;\n }, []);\n return {\n ltv_threshold: ltvThreshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nexport type LtvScriptReturns = ReturnType<typeof useLtvScript>;\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Tooltip, Text, Box } from \"@orderly.network/ui\";\nimport { 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 \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, ButtonProps } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { DepositAction } from \"../../types\";\n\nexport type ActionButtonProps = {\n disabled?: boolean;\n loading?: boolean;\n actionType: DepositAction;\n symbol?: string;\n onDeposit?: () => void;\n onApprove?: () => void;\n onApproveAndDeposit?: () => void;\n networkId?: NetworkId;\n};\n\nexport const ActionButton: React.FC<ActionButtonProps> = (props) => {\n const {\n disabled,\n loading,\n actionType,\n symbol = \"USDC\",\n onDeposit,\n onApprove,\n onApproveAndDeposit,\n networkId,\n } = props;\n const { t } = useTranslation();\n\n const buttonParams = useMemo(() => {\n const params: Partial<Record<DepositAction, ButtonProps>> = {\n // [DepositAction.Approve]: {\n // // Approve & Deposit\n // children: t(\"transfer.deposit.approve\"),\n // onClick: onApprove,\n // // approve not disabled button\n // disabled: false,\n // \"data-testid\": \"oui-testid-deposit-dialog-approve-btn\",\n // },\n [DepositAction.ApproveAndDeposit]: {\n children: `${t(\"transfer.deposit.approve\")} & ${t(\"common.deposit\")}`,\n onClick: onApproveAndDeposit,\n // approve not disabled button\n // disabled: false,\n },\n // [DepositAction.Increase]: {\n // children: t(\"transfer.deposit.increase.symbol\", { symbol }),\n // onClick: onApprove,\n // \"data-testid\": \"oui-testid-deposit-dialog-increase-btn\",\n // },\n [DepositAction.Deposit]: {\n children: t(\"common.deposit\"),\n onClick: onDeposit,\n \"data-testid\": \"oui-testid-deposit-dialog-deposit-btn\",\n },\n };\n\n return params[actionType];\n }, [onApprove, onDeposit, actionType, symbol, t]);\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={buttonSize}\n {...buttonParams}\n />\n </AuthGuard>\n </Box>\n );\n};\n","export type DST = {\n symbol: string;\n address?: string;\n decimals?: number;\n chainId?: number;\n network?: string;\n};\n\nexport enum DepositAction {\n Deposit,\n Approve,\n ApproveAndDeposit,\n // Increase,\n}\n\nexport enum WithdrawTo {\n /** withdraw to web3 wallet */\n Wallet = \"wallet\",\n /** withdraw to other account id */\n Account = \"accountId\",\n}\n\nexport type InputStatus = \"error\" | \"warning\" | \"success\" | \"default\";\n","import { FC, useMemo } from \"react\";\nimport { useIndexPricesStream } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Flex, Spinner, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type AvailableQuantityProps = {\n token?: Partial<API.TokenInfo>;\n amount?: number | string;\n maxQuantity?: number | string;\n onClick?: () => void;\n loading?: boolean;\n};\n\nexport const AvailableQuantity: FC<AvailableQuantityProps> = (props) => {\n const { amount, maxQuantity, token, loading } = props;\n const { t } = useTranslation();\n\n const { getIndexPrice } = useIndexPricesStream();\n\n const name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n const notional = useMemo(() => {\n if (amount && token?.symbol && getIndexPrice(token?.symbol)) {\n return new Decimal(amount)\n .mul(getIndexPrice(token?.symbol) || 1)\n .toNumber();\n }\n return 0;\n }, [amount, token?.symbol]);\n\n return (\n <Flex px={2}>\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {notional}\n </Text.numeral>\n </Text>\n\n <Flex gapX={2} itemAlign=\"center\" className=\"oui-ml-auto\">\n <Flex gapX={1} itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"common.available\")}: `}\n </Text>\n\n {loading ? (\n <Spinner size=\"sm\" />\n ) : (\n <Text.numeral\n size=\"2xs\"\n intensity={36}\n rm={Decimal.ROUND_DOWN}\n dp={dp}\n padding={false}\n data-testid=\"oui-testid-withdraw_deposit-dialog-available-value\"\n >\n {maxQuantity!}\n </Text.numeral>\n )}\n\n <Text size=\"2xs\" intensity={36}>\n {` ${name}`}\n </Text>\n </Flex>\n\n <Text\n size=\"2xs\"\n color=\"primary\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={props.onClick}\n >\n {t(\"common.max\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { useAppConfig } from \"@orderly.network/react-app\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const BrokerWallet: FC = () => {\n const { t } = useTranslation();\n const { appIcons } = useAppConfig();\n const brokerName = useConfig(\"brokerName\");\n\n const icon = useMemo(() => {\n const { secondary } = appIcons || {};\n\n if (!secondary?.img && secondary?.component) return null;\n\n if (secondary?.img) {\n return <img src={secondary?.img} className=\"oui-w-5 oui-h-5\" />;\n }\n\n if (secondary?.component) {\n return <>{secondary.component}</>;\n }\n }, [appIcons]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.brokerAccount\", { brokerName })}\n </Text>\n {icon}\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n ChainIcon,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\nimport { CurrentChain } from \"../depositForm/hooks\";\n\ntype ChainSelectProps = {\n chains: API.NetworkInfos[];\n value: CurrentChain;\n onValueChange: (chain: API.NetworkInfos) => Promise<void>;\n wrongNetwork: boolean;\n loading?: boolean;\n 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 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}>\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 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 \"@orderly.network/i18n\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const CollateralContribution: React.FC<{\n value: number;\n precision: number;\n}> = (props) => {\n const { t } = useTranslation();\n const { value, precision } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.collateralContribution\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n rm={Decimal.ROUND_DOWN}\n className={cn(\"oui-font-semibold\")}\n padding={false}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36} className=\"oui-select-none\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\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 \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../../icons\";\n\ntype ExchangeDividerProps = {\n icon?: ReactNode;\n};\n\nexport const ExchangeDivider: FC<ExchangeDividerProps> = ({ icon }) => {\n return (\n <Flex height={40} gapX={3}>\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n {icon || <ArrowDownIcon className=\"oui-text-primary-light\" />}\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { type UseDepositFeeReturn } from \"../depositForm/depositForm.script\";\n\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 \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const MinimumReceived: React.FC<\n Readonly<{ symbol: string; value: number | string; precision: number }>\n> = (props) => {\n const { t } = useTranslation();\n const { value, symbol, precision = 6 } = props;\n\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.swapDeposit.minimumReceived\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n className=\"oui-select-none\"\n intensity={80}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" className=\"oui-select-none\" intensity={36}>\n {symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Input,\n Select,\n InputProps,\n cn,\n Box,\n Text,\n Flex,\n inputFormatter,\n Spinner,\n InputFormatter,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { TokenOption } from \"./tokenOption\";\n\nexport type QuantityInputProps = {\n token?: API.TokenInfo;\n tokens?: API.TokenInfo[];\n label?: string;\n status?: InputStatus;\n hintMessage?: string;\n onValueChange?: (value: string) => void;\n onTokenChange?: (token: any) => void;\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n loading?: boolean;\n testId?: string;\n formatters?: InputFormatter[];\n vaultBalanceList?: API.VaultBalance[];\n displayType?: \"balance\" | \"vaultBalance\";\n tokenBalances?: Record<string, string>;\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 tokenBalances,\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 optionRenderer={optionRenderer}\n contentProps={{\n onCloseAutoFocus: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n onClick: (event) => {\n event.preventDefault();\n inputRef.current?.focus();\n },\n style: { width },\n align: \"end\",\n sideOffset: 5,\n className: \"oui-border oui-border-line-6\",\n }}\n />\n </div>\n );\n\n const message = (\n <Flex mt={1} gapX={1} px={1}>\n <Box\n width={4}\n height={4}\n r=\"full\"\n className={cn(\n status === \"error\" && \"oui-bg-danger-light\",\n status === \"warning\" && \"oui-bg-warning-light\",\n )}\n ></Box>\n <Text\n size=\"2xs\"\n className={cn(\n status === \"error\" && \"oui-text-danger-light\",\n status === \"warning\" && \"oui-text-warning-light\",\n )}\n >\n {hintMessage}\n </Text>\n </Flex>\n );\n\n const _placeholder = placeholder ?? (loading ? \"\" : \"0\");\n\n return (\n <>\n <Input\n ref={inputRef}\n autoComplete=\"off\"\n placeholder={_placeholder}\n prefix={prefix}\n suffix={suffix}\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value);\n }}\n formatters={\n formatters || [\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(token?.precision ?? 2),\n inputFormatter.currencyFormatter,\n ]\n }\n {...rest}\n classNames={{\n ...classNames,\n root: cn(\n \"oui-relative oui-h-[54px] oui-px-3\",\n \"oui-rounded-lg oui-border oui-border-line\",\n status === \"error\" &&\n \"oui-outline-danger-light focus-within:oui-outline-danger-light\",\n status === \"warning\" &&\n \"oui-outline-warning-light focus-within:oui-outline-warning-light\",\n props.readOnly\n ? \"oui-border-none oui-bg-base-6 focus-within:oui-outline-0\"\n : \"oui-bg-base-5\",\n classNames?.root,\n ),\n input: cn(\"oui-absolute oui-bottom-0\", classNames?.input),\n }}\n />\n {hintMessage && message}\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n cn,\n Flex,\n Spinner,\n Text,\n TokenIcon,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/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 \"@orderly.network/types\";\n\nconst retryInterval = 1000;\n\nexport function useBalance(\n token: API.TokenInfo,\n fetchBalance?: (token: string, decimals: number) => Promise<any>,\n open?: boolean,\n) {\n const [balance, setBalance] = useState<string>(\"\");\n const balanceRef = useRef<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n const loopGetTokenBalance = async (timeout = 0) => {\n if (loading || typeof fetchBalance !== \"function\" || !token.address) {\n return;\n }\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (balanceRef.current === \"\") {\n // when balance is empty, set loading to true\n setLoading(true);\n }\n\n timeoutRef.current = setTimeout(async () => {\n try {\n const balance = await fetchBalance(token.address!, token.decimals!);\n setBalance(balance);\n balanceRef.current = balance;\n console.log(\"balance\", token.symbol, token.address, balance);\n } catch (err) {\n console.error(\"get balance error\", token.symbol, token.address, err);\n // when fetch balance failed, retry\n loopGetTokenBalance(retryInterval);\n } finally {\n if (balanceRef.current !== \"\") {\n setLoading(false);\n }\n }\n }, timeout);\n };\n\n useEffect(() => {\n if (open) {\n // get balance first, no timeout\n loopGetTokenBalance(0);\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [token, open]);\n\n return { balance, loading };\n}\n","import { FC, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlertDialog,\n Box,\n cn,\n EditIcon,\n Flex,\n Input,\n inputFormatter,\n Text,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ninterface SlippageProps {\n value?: number;\n onValueChange?: (value: number) => void;\n max?: number;\n min?: number;\n}\n\nconst options = [0.5, 1, 2];\n\nexport const Slippage: FC<SlippageProps> = (props) => {\n const { min = 0.2, max = 10 } = props;\n const [value, setValue] = useState<number>();\n const [customValue, setCustomValue] = useState(\"\");\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.value && !options.includes(props.value!)) {\n setCustomValue(props.value!.toString());\n } else {\n setValue(props.value);\n }\n }, [props.value, open]);\n\n const showSlippage = () => {\n setOpen(true);\n };\n\n const hideSlippage = () => {\n setOpen(false);\n };\n\n const onClick = (val: number) => {\n setValue(val);\n setCustomValue(\"\");\n };\n\n const onValueChange = (val: string) => {\n if (!val || Number(val) === 0) {\n setCustomValue(val);\n return;\n }\n\n const d = new Decimal(val);\n setValue(undefined);\n if (d.lt(min)) {\n setCustomValue(min.toString());\n } else if (d.gt(max)) {\n setCustomValue(max.toString());\n } else {\n setCustomValue(val);\n }\n };\n\n const getValue = () =>\n customValue ? new Decimal(customValue)?.toNumber() : value;\n\n const onConfirm = () => {\n const val = getValue();\n if (!val) return Promise.resolve(true);\n props.onValueChange?.(val);\n hideSlippage();\n // if custom value in options, then clear custom value\n if (options.includes(val)) {\n setCustomValue(\"\");\n }\n return Promise.resolve(true);\n };\n\n const disabled = !getValue();\n\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={2}>\n {options.map((item) => {\n const isActive = value === item;\n return (\n <SlippageItem\n key={item}\n value={item}\n isActive={isActive}\n onClick={() => {\n onClick(item);\n }}\n />\n );\n })}\n\n <Input\n suffix=\"%\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n ]}\n value={customValue}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-rounded-md oui-bg-base-6\",\n \"oui-h-[40px] oui-w-[74px]\",\n ),\n input: \"oui-text-base-contrast\",\n additional: \"oui-pl-1\",\n }}\n />\n </Flex>\n\n <Box mt={5}>\n <Text intensity={54}>\n {t(\"transfer.slippage.slippageTolerance.description\")}\n </Text>\n </Box>\n </div>\n );\n\n return (\n <>\n <AlertDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"transfer.slippage.slippageTolerance\")}\n okLabel={t(\"common.confirm\")}\n message={content}\n onOk={onConfirm}\n actions={{ primary: { disabled } }}\n />\n <Flex\n width=\"100%\"\n justify=\"between\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={showSlippage}\n >\n <Text intensity={36} size=\"2xs\">\n {t(\"transfer.slippage\")}\n </Text>\n <Flex gapX={1}>\n <Text size=\"2xs\" color=\"primaryLight\">\n {props.value}%\n </Text>\n <EditIcon className=\"oui-size-3 oui-text-primary-light\" />\n </Flex>\n </Flex>\n </>\n );\n};\n\ntype SlippageItemProps = {\n value: number;\n isActive: boolean;\n onClick: () => void;\n};\n\nconst SlippageItem: FC<SlippageItemProps> = ({ value, isActive, onClick }) => {\n return (\n <Flex\n intensity={600}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"md\"\n width={74}\n height={40}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive && \"oui-bg-primary-light\",\n )}\n onClick={onClick}\n >\n <Text size=\"sm\" intensity={80}>\n {value}%\n </Text>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { Box, Text } from \"@orderly.network/ui\";\nimport { modal } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\n\ntype NoticeProps = {\n message?: string;\n needSwap?: boolean;\n needCrossSwap?: boolean;\n wrongNetwork?: boolean;\n networkId?: NetworkId;\n};\n\nexport const Notice: FC<NoticeProps> = (props) => {\n const { message, needSwap, needCrossSwap, wrongNetwork, networkId } = props;\n const { t } = useTranslation();\n\n const showChainSelect = () => {\n modal.show(ChainSelectorDialogId, { networkId });\n };\n\n const content = useMemo(() => {\n if (wrongNetwork) {\n return t(\"connector.wrongNetwork.tooltip\");\n }\n\n if (message) {\n return message;\n }\n\n if (needCrossSwap) {\n return (\n <Text>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.crossSwap.notice\"\n components={[\n <Text\n key=\"0\"\n className=\"oui-cursor-pointer\"\n color=\"primaryLight\"\n onClick={showChainSelect}\n />,\n ]}\n />\n </Text>\n );\n }\n\n if (needSwap) {\n return t(\"transfer.swapDeposit.swap.notice\");\n }\n }, [message, needSwap, needCrossSwap, wrongNetwork, t]);\n\n if (content) {\n return (\n <Box\n mb={3}\n className=\"oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Box>\n );\n }\n\n return null;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Divider, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { UseSwapFee } from \"../hooks/useSwapFee\";\n\ntype SwapFeeProps = UseSwapFee;\n\nexport const SwapFee: FC<SwapFeeProps> = (props) => {\n const { feeQtys, feeAmount, feeDetails, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <Box className=\"oui-text-2xs\">\n {feeDetails?.map((item, index) => {\n const isEnd = index === feeDetails?.length - 1;\n return (\n <Box key={index}>\n <Flex gapX={1}>\n <Text intensity={54}>{item.title}:</Text>\n {/* TODO: format price in data */}\n <Text\n intensity={80}\n // dp={item.dp}\n // rm={Decimal.ROUND_UP}\n // padding={false}\n >\n {item.value}\n </Text>\n <Text intensity={54}>{item.symbol}</Text>\n </Flex>\n\n <Box mt={2}>\n <Text intensity={36}>{item.description}</Text>\n </Box>\n\n {!isEnd && (\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const renderFeeQty = () => {\n const len = feeQtys?.length;\n if (!len) return;\n\n const list = feeQtys.map((item, index) => {\n return (\n <Text intensity={54} key={index}>\n <Text.numeral dp={item.dp} padding={false} rm={Decimal.ROUND_UP}>\n {item.value}\n </Text.numeral>\n {` ${item.symbol || nativeSymbol}`}\n </Text>\n );\n });\n\n if (len === 1) {\n return <span>({list})</span>;\n }\n\n if (len === 2) {\n return (\n <span>\n ({list[0]} + {list[1]})\n </span>\n );\n }\n };\n\n return (\n <Text\n size=\"xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n onClick={onShowFee}\n >\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount}\n </Text.numeral>\n {` `}\n </Text>\n\n {renderFeeQty()}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\n\ninterface SwapCoinProps {\n className?: string;\n sourceSymbol?: string;\n targetSymbol?: string;\n indexPrice: number | string;\n precision?: number;\n}\n\nexport const SwapCoin: FC<SwapCoinProps> = (props) => {\n const { sourceSymbol, targetSymbol, indexPrice, precision = 6 } = props;\n return (\n <Flex\n itemAlign=\"center\"\n gap={1}\n className={cn(props.className, \"oui-text-2xs\")}\n >\n <Text size=\"2xs\" intensity={80}>\n 1\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {sourceSymbol}\n </Text>\n =\n <Text.numeral size=\"2xs\" intensity={80} dp={precision} padding={false}>\n {indexPrice}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36}>\n {targetSymbol}\n </Text>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { ArrowRightIcon } from \"../swap/icons\";\n\nexport const SwapIndicator: React.FC<{\n sourceToken?: string;\n targetToken?: string;\n className?: string;\n}> = (props) => {\n const { sourceToken, targetToken, className } = props;\n\n if (sourceToken === targetToken) {\n return null;\n }\n\n return (\n <Flex\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={className}\n >\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={sourceToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {sourceToken}\n </Text>\n </Flex>\n <ArrowRightIcon className=\"oui-size-4\" />\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={targetToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {targetToken}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n","import { FC, SVGProps } from \"react\";\n\nexport const EditIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.498.977a.5.5 0 0 0-.36.14l-1.5 1.501-4.503 4.503-.5.5a.5.5 0 0 0-.125.266l-.5 2.501c-.07.35.228.648.578.579l2.501-.5a.5.5 0 0 0 .266-.126l.5-.5 4.503-4.503 1.5-1.5a.5.5 0 0 0 .141-.36c0-.818-.208-1.403-.64-1.845-.437-.445-1.02-.656-1.861-.656m.197 1.01c.451.026.744.13.944.334.205.21.335.5.363.942-.274.273-.675.668-1.004.997L7.716 2.978c.33-.329.705-.718.979-.992m-1.698 1.71L8.28 4.979 4.496 8.762 3.214 7.48zM2.495 8.199l1.282 1.282-.047.047c-.33.066-.997.206-1.61.329l.328-1.61z\" />\n </svg>\n);\n\nexport const ArrowRightIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"25\"\n viewBox=\"0 0 24 25\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 12.493a1 1 0 0 1 .999-1h7.555L11.6 8.498l1.405-1.405 4.714 4.683c.196.195.293.457.293.719 0 .26-.098.522-.293.717l-4.714 4.683L11.6 16.49l2.966-2.997H7.011a1 1 0 0 1-.999-1\" />\n </svg>\n);\n\nexport const GasFeeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 2.67v10.663h4.667V2.667H4zm6-.003v2.666h1c.218 0 .53.06.806.26.31.223.527.59.527 1.074V12h1V6.667c0-.045 0-.154-.027-.277a.5.5 0 0 0-.11-.252l-1.668-1.667a.667.667 0 0 1 .943-.942l1.667 1.666c.294.294.417.658.472.915.057.264.057.486.057.555V12c0 .484-.217.85-.527 1.074-.277.2-.589.26-.807.26h-1c-.484 0-.85-.217-1.074-.528a1.4 1.4 0 0 1-.26-.806V6.667H10v6.666h.667a.667.667 0 0 1 0 1.334H2a.667.667 0 0 1 0-1.334h.667V2.667c0-.218.06-.53.259-.807.223-.31.59-.527 1.074-.527h4.667c.217 0 .53.06.806.26.31.223.527.59.527 1.074m-4.667 2a.667.667 0 0 0 0 1.333h2a.667.667 0 0 0 0-1.333z\"\n />\n </svg>\n);\n\nexport const TopRightArrowIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"13\"\n height=\"12\"\n viewBox=\"0 0 13 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.996 10.496a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2zm-4-2.5a.5.5 0 0 1-.36-.14.515.515 0 0 1 0-.72l2-2-1.14-1.14h3v3l-1.14-1.14-2 2a.5.5 0 0 1-.36.14\" />\n </svg>\n);\n\nexport const WoofiIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#07080A\" />\n <path\n d=\"M5.077 7.385h2.269l1.604 5.28c.106.348.196.73.196.73s.138-.413.28-.742l.885-2.052a1.8 1.8 0 0 1 .66-.782 1.81 1.81 0 0 1 1.974 0c.293.191.523.463.662.782l2.143 4.91v1.095h-1.402c-.235 0-.464-.07-.66-.2a1.17 1.17 0 0 1-.434-.53l-1.303-3.16-1.243 3.152a1.19 1.19 0 0 1-1.105.747h-.848c-.235 0-.465-.075-.654-.214a1.1 1.1 0 0 1-.4-.556z\"\n fill=\"#FEFEFE\"\n />\n <path d=\"m18.146 10.846 1.066-3.461h-2.396l-1.066 3.461z\" fill=\"url(#a)\" />\n <path\n d=\"m15.371 12-1.208 3.865v.009c-.073.216-.194.529-.514.51a.33.33 0 0 1-.207-.058c.211.186.482.29.763.29h1.428a1.065 1.065 0 0 0 .928-.75L17.769 12z\"\n fill=\"url(#b)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"14.618\"\n y1=\"16.592\"\n x2=\"17.597\"\n y2=\"7.455\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n <linearGradient\n id=\"b\"\n x1=\"16.192\"\n y1=\"16.587\"\n x2=\"18.206\"\n y2=\"7.458\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { FC, useMemo } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@orderly.network/types\";\nimport { Flex, Text, WalletIcon } from \"@orderly.network/ui\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const address = useMemo(() => {\n let address = accountState.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, accountState, account, connectedChain]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.web3Wallet.your\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"xs\"} name={wallet?.label ?? \"\"} />\n <Text.formatted size=\"sm\" intensity={54} rule=\"address\">\n {address}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport { Box, cn, Flex, Text } from \"@orderly.network/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 \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account as accountPerp } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n API,\n NetworkId,\n ChainNamespace,\n isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport { useAuthGuard } from \"@orderly.network/ui-connector\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useNeedSwapAndCross } from \"../swap/hooks/useNeedSwapAndCross\";\nimport { useSwapDeposit } from \"../swap/hooks/useSwapDeposit\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"./hooks\";\nimport { 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 { 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 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 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 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 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 \"@orderly.network/types\";\n\nexport function useNeedSwapAndCross(options: {\n srcToken?: API.TokenInfo;\n dstToken?: API.TokenInfo;\n srcChainId?: number;\n dstChainId?: number;\n}) {\n const { srcToken, dstToken, srcChainId, dstChainId } = options;\n const [needSwap, setNeedSwap] = useState(false);\n const [needCrossSwap, setNeedCrossSwap] = useState(false);\n\n useEffect(() => {\n if (!srcChainId || !dstChainId || !srcToken || !dstToken) return;\n const isCrossChain = srcChainId !== dstChainId;\n\n if (\n (srcToken?.symbol === \"USDC\" && !isCrossChain) ||\n // if srcToken is collateral and srcToken.symbol is the same as dstToken.symbol, it will not need swap\n (srcToken.is_collateral && srcToken.symbol === dstToken?.symbol)\n ) {\n setNeedSwap(false);\n setNeedCrossSwap(false);\n return;\n }\n\n setNeedSwap(srcToken?.symbol !== \"USDC\");\n\n if (isCrossChain) {\n setNeedCrossSwap(true);\n setNeedSwap(true);\n } else {\n setNeedCrossSwap(false);\n }\n }, [srcToken, dstToken, srcChainId, dstChainId]);\n\n return { needSwap, needCrossSwap };\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useConfig, useLocalStorage } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { DST, SwapMode } from \"../types\";\nimport { useSwapEnquiry } from \"./useSwapEnquiry\";\nimport { useSwapFee } from \"./useSwapFee\";\n\ntype SwapDepositOptions = {\n srcToken: API.TokenInfo;\n currentChain?: CurrentChain | null;\n dst: DST;\n quantity: string;\n isNativeToken: boolean;\n depositFee: bigint;\n setQuantity: (quantity: string) => void;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nconst ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY = \"orderly_swap_deposit_slippage\";\n\nexport const useSwapDeposit = (options: SwapDepositOptions) => {\n const {\n srcToken,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n } = options;\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY,\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n srcToken: srcToken?.address,\n dstToken: dst.address,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (srcToken?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: srcToken!.symbol,\n // swap precision\n displayDecimals: srcToken?.precision,\n amount: quantity,\n decimals: srcToken!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const swapFee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: srcToken,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n return {\n cleanTransactionInfo,\n onSwapDeposit,\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n swapRevalidating,\n warningMessage,\n needSwap,\n needCrossSwap,\n slippage,\n onSlippageChange: setSlippage,\n };\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport {\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { Swap, SwapProps } from \"./swap\";\n\nexport const SwapDialog = modal.create<SwapProps>((props) => {\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n const onComplete = (isSuccss: boolean) => {\n resolve(isSuccss);\n hide();\n };\n\n const onCancel = () => {\n reject();\n hide();\n };\n\n const commonProps = {\n title: t(\"transfer.swapDeposit.swapDialog.title\"),\n open: visible,\n onOpenChange,\n classNames: {\n content: \"oui-font-semibold\",\n },\n children: <Swap {...props} onComplete={onComplete} onCancel={onCancel} />,\n };\n\n if (isMobile) {\n return <SimpleSheet {...commonProps} />;\n }\n\n return <SimpleDialog {...commonProps} size=\"md\" />;\n});\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { useCrossSwap } from \"../hooks/useCrossSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const CrossSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain: chainInfo,\n nativeToken,\n depositFee,\n } = props;\n\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const {\n swap: doCrossSwap,\n bridgeStatus,\n message,\n status: swapStatus,\n } = useCrossSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chainInfo?.est_txn_mins,\n received: dst.amount,\n bridgeFee: transaction.fees_from.stargate,\n swapFee: transaction.fees_from.woofi,\n dstGasFee: transaction.dst_infos.gas_fee,\n };\n\n return info;\n }, [transaction, chainInfo?.est_txn_mins, mode, dst]);\n\n useEffect(() => {\n if (bridgeStatus === \"DELIVERED\") {\n setStatus(SwapProcessStatus.Depositing);\n }\n\n if (bridgeStatus === \"FAILED\") {\n setStatus(SwapProcessStatus.BridgeFialed);\n }\n\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [bridgeStatus, swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n setStatus(SwapProcessStatus.Bridging);\n\n return doCrossSwap({\n address: \"\",\n crossChainRouteAddress: chainInfo?.cross_chain_router!,\n src: {\n fromToken: transaction.src_infos.from_token,\n fromAmount: BigInt(transaction.src_infos.from_amount),\n bridgeToken: transaction.src_infos.bridge_token,\n minBridgeAmount: BigInt(transaction.src_infos.min_bridge_amount),\n },\n dst: {\n chainId: transaction.dst_infos.chain_id,\n bridgedToken: transaction.dst_infos.bridged_token,\n toToken: transaction.dst_infos.to_token,\n minToAmount: BigInt(transaction.dst_infos.min_to_amount),\n // @ts-ignore\n orderlyNativeFees: depositFee,\n },\n })\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.BridgeFialed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !message) {\n return;\n }\n return `https://layerzeroscan.com/tx/${message.srcTxHash}`;\n // return `https://layerzeroscan.com/${message.srcChainId}/address/${message.srcUaAddress}/message/${message.dstChainId}/address/${message.dstUaAddress}/nonce/${message.srcUaNonce}`;\n }, [status, message]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Cross}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Environment, createClient } from \"@layerzerolabs/scan-client\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport {\n isNativeTokenChecker,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport enum MessageStatus {\n INITIALIZING = \"WAITTING\",\n INFLIGHT = \"INFLIGHT\",\n CONFIRMING = \"CONFIRMING\",\n DELIVERED = \"DELIVERED\",\n FAILED = \"FAILED\",\n}\n\nexport const useCrossSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n const [layerStatus, setLayerStatus] = useState<MessageStatus>(\n MessageStatus.INITIALIZING,\n );\n\n const ee = useEventEmitter();\n\n const [bridgeMessage, setBridgeMessage] = useState<any | undefined>();\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n const txHashFromBridge = useRef<string | undefined>();\n\n const checkLayerStatusListener = useRef<ReturnType<typeof setTimeout>>();\n\n const account = useAccountInstance();\n\n const config = useConfig();\n const brokerId = config.get(\"brokerId\");\n const networkId = config.get(\"networkId\");\n\n const client = useRef(createClient(networkId as Environment)).current;\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHashFromBridge.current]);\n\n const checkLayerStatus = useCallback((txHash: string) => {\n if (checkLayerStatusListener.current) {\n clearTimeout(checkLayerStatusListener.current);\n }\n\n checkLayerStatusListener.current = setTimeout(async () => {\n try {\n const { messages } = await client.getMessagesBySrcTxHash(txHash);\n\n if (messages.length > 0) {\n const { status } = messages[0];\n\n setLayerStatus(status as MessageStatus);\n\n if (status === MessageStatus.DELIVERED) {\n setBridgeMessage(messages[0]);\n txHashFromBridge.current = messages[0].dstTxHash;\n } else if (status === MessageStatus.FAILED) {\n setBridgeMessage(messages[0]);\n } else {\n checkLayerStatus(txHash);\n }\n } else {\n checkLayerStatus(txHash);\n }\n } catch (e) {\n // setLayerStatus(MessageStatus.FAILED);\n checkLayerStatus(txHash);\n }\n }, 1000);\n }, []);\n\n // swap => src tx hash, cross swap => dst tx hash\n // const checkDeposit\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = async (inputs: {\n address: string;\n crossChainRouteAddress: string;\n src: {\n fromToken: string;\n fromAmount: bigint;\n bridgeToken: string;\n minBridgeAmount: bigint;\n };\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n airdropNativeAmount: bigint;\n };\n }) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (!inputs.crossChainRouteAddress) {\n throw new Error(\"crossChainRouteAddress is undefined\");\n }\n\n const { address, src, dst, crossChainRouteAddress } = inputs;\n if (loading) return;\n start();\n\n try {\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n const result = await account.walletAdapter.sendTransaction(\n crossChainRouteAddress,\n \"crossSwap\",\n {\n from: account.address!,\n to: crossChainRouteAddress,\n data: [account.address, src, dst, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.src.fromToken)\n ? BigInt(inputs.src.fromAmount) + quotoLZFee[0]\n : quotoLZFee[0],\n },\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n stop();\n\n checkLayerStatus(result.hash);\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n console.error(\"crossSwap error\", e);\n stop();\n throw new Error(e.errorCode);\n }\n };\n\n return {\n swap,\n loading,\n bridgeStatus: layerStatus,\n status,\n message: bridgeMessage,\n };\n};\n","export const woofiDexCrossSwapChainRouterAbi = [\n {\n inputs: [],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint8\",\n name: \"version\",\n type: \"uint8\",\n },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"realToToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"realToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnDstChain\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"dstChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnSrcChain\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MAX_BRIDGE_SLIPPAGE\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"addDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokens\",\n outputs: [\n {\n internalType: \"address[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokensLength\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bridgeSlippage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address payable\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.SrcInfos\",\n name: \"srcInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"crossSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForNoSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForSwapCall\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"stuckToken\",\n type: \"address\",\n },\n ],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_weth\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nonceCounter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"quoteLayerZeroFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"nativeAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"zroAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"removeDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_bridgeSlippage\",\n type: \"uint256\",\n },\n ],\n name: \"setBridgeSlippage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForNoSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForNoSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n ],\n name: \"setNonceCounter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_orderlyFeeToggle\",\n type: \"bool\",\n },\n ],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"setSgChainIdLocal\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"setSgETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"poolId\",\n type: \"uint256\",\n },\n ],\n name: \"setSgPoolId\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n ],\n name: \"setSgRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexCrossChainRouter\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexCrossChainRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexVault\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n ],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgChainIdLocal\",\n outputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"sgETHs\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"sgPoolIds\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"payload\",\n type: \"bytes\",\n },\n ],\n name: \"sgReceive\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"weth\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"woofiDexCrossChainRouters\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"woofiDexVaults\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n];\n\nexport const woofiDexSwapDepositorAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint8\", name: \"version\", type: \"uint8\" },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"toAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexSwap\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"stuckToken\", type: \"address\" }],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bool\", name: \"_orderlyFeeToggle\", type: \"bool\" }],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n { internalType: \"address\", name: \"woofiDexVault\", type: \"address\" },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"fromToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"fromAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"toToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"minToAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexDepositor.Infos\",\n name: \"infos\",\n type: \"tuple\",\n },\n {\n components: [\n { internalType: \"bytes32\", name: \"accountId\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"brokerHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"tokenHash\", type: \"bytes32\" },\n ],\n internalType: \"struct IWOOFiDexDepositor.VaultDeposit\",\n name: \"vaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"wooRouter\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"woofiDexVaults\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n];\n\nexport const nativeTokenAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\nexport const isNativeTokenChecker = (address: string) =>\n address === nativeTokenAddress;\n\nexport const swapSupportApiUrl = \"https://fi-api.woo.org\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Button,\n CheckedCircleFillIcon,\n CloseCircleFillIcon,\n cn,\n Divider,\n Flex,\n Spinner,\n Text,\n} from \"@orderly.network/ui\";\nimport { TopRightArrowIcon } from \"../icons\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\n\ntype ProcessStatusProps = {\n status?: SwapProcessStatus;\n mode: SwapMode;\n statusUrl?: string;\n onComplete?: (isSuccss: boolean) => void;\n brokerName?: string;\n};\n\nenum SwapState {\n Pending = \"pending\",\n Failed = \"failed\",\n Success = \"success\",\n}\n\ntype TProcessItem = {\n title: string;\n description: string;\n state?: SwapState;\n};\n\nexport const ProcessStatus: FC<ProcessStatusProps> = (props) => {\n const { status, mode, statusUrl, brokerName } = props;\n const { t } = useTranslation();\n\n const processList = useMemo(() => {\n const bridgeStatus = getBridgeStatus(status!);\n const depositStatus = getDepositStatus(status!);\n const list: TProcessItem[] = [\n {\n title:\n bridgeStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.bridging\")\n : t(\"transfer.swapDeposit.bridge\"),\n description: t(\"transfer.swapDeposit.bridge.description\"),\n state: bridgeStatus,\n },\n {\n title:\n depositStatus === SwapState.Pending\n ? t(\"transfer.swapDeposit.depositing\")\n : t(\"transfer.swapDeposit.deposit\"),\n description: t(\"transfer.swapDeposit.deposit.description\", {\n brokerName,\n }),\n state: depositStatus,\n },\n ];\n\n if (mode === SwapMode.Single) {\n return list.slice(1, 2);\n }\n\n return list;\n }, [mode, brokerName, status, t]);\n\n const onOk = () => {\n props.onComplete?.(status === SwapProcessStatus.Done);\n };\n\n const isFailed =\n status === SwapProcessStatus.DepositFailed ||\n status === SwapProcessStatus.BridgeFialed;\n\n const disabled =\n status === SwapProcessStatus.Bridging ||\n status === SwapProcessStatus.Depositing;\n\n const showDashLine = processList.length > 1;\n\n return (\n <div className=\"oui-font-semibold\">\n <Box intensity={600} p={4} r=\"lg\">\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n gapY={4}\n className=\"oui-relative\"\n >\n {processList.map((item) => (\n <ProcessItem {...item} key={item.title} />\n ))}\n {showDashLine && (\n <div\n className={cn(\n \"oui-absolute oui-left-[10px] oui-top-[20px] oui-bottom-[38px]\",\n \"oui-w-[1px] oui-h-[34px]\",\n \"oui-border-r oui-border-dashed oui-border-r-line-16\",\n )}\n />\n )}\n </Flex>\n\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n\n <Flex\n gapX={1}\n justify=\"center\"\n itemAlign=\"center\"\n className={cn(\n statusUrl ? \"oui-text-primary-light\" : \"oui-text-base-contrast-20\",\n statusUrl ? \"oui-cursor-pointer\" : \"oui-cursor-not-allowed\",\n )}\n onClick={() => {\n statusUrl && window.open(statusUrl);\n }}\n >\n <Text size=\"2xs\">{t(\"transfer.swapDeposit.viewStatus\")}</Text>\n <TopRightArrowIcon />\n </Flex>\n </Box>\n\n <Flex\n direction=\"column\"\n justify=\"center\"\n itemAlign=\"center\"\n mt={8}\n gapY={3}\n >\n {isFailed && (\n <Text size=\"xs\" className=\"oui-text-danger-light\">\n {t(\"transfer.swapDeposit.depositFailed\")}\n </Text>\n )}\n\n <Button\n className=\"oui-w-full lg:oui-w-[184px]\"\n disabled={disabled}\n onClick={onOk}\n >\n {t(\"common.ok\")}\n </Button>\n </Flex>\n </div>\n );\n};\n\nconst ProcessItem: FC<TProcessItem> = ({ title, description, state }) => {\n return (\n <Flex itemAlign=\"start\" gapX={2} key={title}>\n <Flex width={20} height={20} justify=\"center\">\n <StatusIndicator state={state} />\n </Flex>\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text\n size=\"sm\"\n className={cn(\n state === \"pending\" || state === \"failed\"\n ? \"oui-text-base-contrast\"\n : \"oui-text-base-contrast-54\",\n )}\n >\n {title}\n </Text>\n <Text\n size=\"2xs\"\n className={cn(\n state === \"pending\"\n ? \"oui-text-base-contrast-54\"\n : \"oui-text-base-contrast-20\",\n )}\n >\n {description}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst StatusIndicator: FC<{ state?: SwapState }> = ({ state }) => {\n if (state === SwapState.Pending) {\n return <Spinner size=\"sm\" />;\n }\n\n if (state === SwapState.Failed) {\n return (\n <CloseCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-danger-light\"\n />\n );\n }\n\n if (state === SwapState.Success) {\n return (\n <CheckedCircleFillIcon\n size={20}\n opacity={1}\n className=\"oui-text-primary-light\"\n />\n );\n }\n\n return <Box r=\"full\" width={10} height={10} intensity={200}></Box>;\n};\n\nfunction getBridgeStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Bridging) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.BridgeFialed) {\n return SwapState.Failed;\n }\n\n if (\n status === SwapProcessStatus.Done ||\n status === SwapProcessStatus.Depositing\n ) {\n return SwapState.Success;\n }\n}\n\nfunction getDepositStatus(status: SwapProcessStatus) {\n if (status === SwapProcessStatus.Depositing) {\n return SwapState.Pending;\n }\n if (status === SwapProcessStatus.DepositFailed) {\n return SwapState.Failed;\n }\n\n if (status === SwapProcessStatus.Done) {\n return SwapState.Success;\n }\n}\n","import { FC, ReactNode } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n Flex,\n Text,\n TokenIcon,\n Icon,\n Divider,\n Button,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { ArrowRightIcon, GasFeeIcon, WoofiIcon } from \"../icons\";\nimport { SwapMode, SymbolInfo } from \"../types\";\n\nexport interface SwapInfo {\n // gasFee: string;\n // tradingFee: string;\n dstGasFee: string;\n swapFee: string;\n bridgeFee: string;\n price: number;\n slippage: number;\n received: string;\n time: number;\n}\n\ntype SwapDetailProps = {\n onConfirm: () => void;\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n info: SwapInfo;\n markPrice: number;\n nativePrice: number;\n nativeToken?: API.TokenInfo;\n viewMode: \"processing\" | \"details\";\n // transactionData: any;\n};\n\nexport const SwapDetail: FC<SwapDetailProps> = (props) => {\n const {\n info,\n mode,\n nativePrice,\n markPrice,\n src,\n dst,\n nativeToken,\n viewMode,\n } = props;\n\n const { t } = useTranslation();\n\n const header = (\n <Flex justify=\"between\">\n <SwapSymbol\n primary={src?.token}\n chainId={src.chain}\n amount={src?.amount}\n dp={src?.displayDecimals}\n symbol={src?.token}\n />\n <ArrowRightIcon className=\"oui-text-primary-light\" />\n <SwapSymbol\n primary={dst?.token}\n component={<WoofiIcon className=\"oui-size-4\" />}\n amount={dst?.amount}\n dp={dst?.displayDecimals}\n symbol={dst?.token}\n reverse\n />\n </Flex>\n );\n\n const divider = (\n <Box my={5}>\n <Divider intensity={12} />\n </Box>\n );\n\n const listData = [\n {\n label: t(\"transfer.deposit.destinationGasFee\"),\n value: (\n <Flex gapX={1}>\n <GasFeeIcon className=\"oui-text-primary-light\" />\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n // swap precision\n dp={feeDecimalsOffset(nativeToken?.precision)}\n >\n {info.dstGasFee!}\n </Text.numeral>\n <Text color=\"primaryLight\">{nativeToken?.symbol}</Text>\n <Text className=\"oui-text-primary-light/60\">\n ($\n <Text.numeral\n color=\"primaryLight\"\n padding={false}\n rm={Decimal.ROUND_UP}\n dp={2}\n >\n {new Decimal(info.dstGasFee?.toString())\n .mul(nativePrice || 0)\n .toString()}\n </Text.numeral>\n )\n </Text>\n </Flex>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.swapFee\"),\n value: (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.swapFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.swapFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.bridgeFee\"),\n value: mode === SwapMode.Cross && (\n <>\n <Text.numeral\n intensity={80}\n dp={feeDecimalsOffset(src?.displayDecimals)}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {info.bridgeFee}\n </Text.numeral>\n {` ${src?.token} `}\n <Text className=\"oui-text-[#63666D]\">\n ($\n <Text.numeral padding={false} rm={Decimal.ROUND_UP} dp={2}>\n {new Decimal(info.bridgeFee).mul(markPrice || 0).toString()}\n </Text.numeral>\n )\n </Text>\n </>\n ),\n },\n {\n label: t(\"transfer.swapDeposit.minimumReceived\"),\n value: (\n <>\n <Text.numeral\n dp={dst?.displayDecimals}\n rm={Decimal.ROUND_DOWN}\n padding={false}\n >\n {info.received}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"common.price\"),\n value: (\n <>\n {`1 ${src?.token} = `}\n <Text.numeral dp={3} padding={false}>\n {info.price}\n </Text.numeral>\n {` ${dst?.token}`}\n </>\n ),\n },\n {\n label: t(\"transfer.slippage\"),\n value: `${info.slippage}%`,\n },\n ];\n\n const listView = (\n <Flex direction=\"column\" itemAlign=\"start\" gapY={3}>\n {listData?.map((item) => {\n if (item.value) {\n return <ListItem {...item} key={item.label} />;\n }\n })}\n </Flex>\n );\n\n const swapButton = (\n <Flex justify=\"center\" mt={8}>\n <Button className=\"oui-w-full lg:oui-w-[184px]\" onClick={props.onConfirm}>\n {t(\"transfer.swapDeposit.confirmSwap\")}\n </Button>\n </Flex>\n );\n\n return (\n <Box intensity={800}>\n {header}\n <SwapTime time={info.time ?? 0} />\n {divider}\n\n {viewMode === \"details\" && (\n <>\n {listView}\n {swapButton}\n </>\n )}\n </Box>\n );\n};\n\ntype ListItemProps = {\n label?: string;\n value?: ReactNode;\n};\n\nconst ListItem: FC<ListItemProps> = (props) => {\n return (\n <Flex gapX={2} justify=\"between\" width=\"100%\">\n <Text size=\"sm\" intensity={54}>\n {props.label}\n </Text>\n <Text size=\"sm\" intensity={98} as=\"div\">\n {props.value}\n </Text>\n </Flex>\n );\n};\n\ntype SwapSymbolProps = {\n primary: string;\n chainId?: number;\n component?: ReactNode;\n amount: string;\n dp?: number;\n symbol: string;\n reverse?: boolean;\n};\n\nconst SwapSymbol: FC<SwapSymbolProps> = (props) => {\n return (\n <Flex gapX={2} direction={props.reverse ? \"rowReverse\" : \"row\"}>\n <Icon.combine\n secondary={{\n chainId: props.chainId,\n component: props.component,\n className: \"oui-w-4 oui-h-4 oui-outline-base-8 oui-rounded-full\",\n }}\n >\n <TokenIcon name={props.primary} size=\"md\" />\n </Icon.combine>\n\n <Flex direction=\"column\" itemAlign={props.reverse ? \"end\" : \"start\"}>\n <Text.numeral intensity={98} size=\"lg\" dp={props.dp}>\n {props.amount}\n </Text.numeral>\n <Text intensity={54} size=\"xs\">\n {props.symbol}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\nconst SwapTime: FC<{ time: number }> = (props) => {\n return (\n <Flex justify=\"center\">\n <Flex\n intensity={600}\n r=\"full\"\n gapX={2}\n justify=\"center\"\n py={1}\n mt={2}\n width={210}\n >\n <Text size=\"sm\" intensity={54}>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.averageSwapTime\"\n values={{ time: props.time }}\n components={[<Text color=\"primaryLight\" key=\"0\" />]}\n />\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { i18n } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const getTokenByTokenList = (tokens: API.TokenInfo[] = []) => {\n const tokenObj = tokens.reduce<Record<string, API.TokenInfo>>((acc, item) => {\n acc[item.symbol!] = item;\n return acc;\n }, {});\n return tokenObj[\"USDC\"] || tokenObj[\"USDbC\"] || tokens[0];\n};\n\nexport const feeDecimalsOffset = (origin?: number): number => {\n return (origin ?? 2) + 3;\n};\n\n// export const priceDecimalsOffset = (origin?: number): number => {\n// return Math.abs((origin ?? 2) - 5);\n// };\n\nexport function checkIsAccountId(accountId: string) {\n const regex = /^0x[a-fA-F0-9]{64}$/;\n return regex.test(accountId);\n}\n\nexport function getTransferErrorMessage(errorCode: number) {\n if (errorCode === 34) {\n return i18n.t(\"transfer.internalTransfer.error.transferInProgress\");\n }\n\n if (errorCode === 17) {\n return i18n.t(\"transfer.internalTransfer.error.withdrawalInProgress\");\n }\n\n if (errorCode === 35) {\n return i18n.t(\"transfer.internalTransfer.error.accountIdNotExist\");\n }\n\n if (errorCode === 37) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSelf\");\n }\n\n if (errorCode === 46) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSubAccount\");\n }\n\n // TODO: when api return 500 status, not throw error code\n // if (errorCode === -1000) {\n // return i18n.t(\"transfer.internalTransfer.error.scopeInsufficient\");\n // }\n\n return i18n.t(\"transfer.internalTransfer.error.default\");\n}\n\nconst depositErrorCodeMap = {\n \"0x6697b232\": \"AccessControlBadConfirmation\",\n \"0xe2517d3f\": \"AccessControlUnauthorizedAccount\",\n \"0xc7ee9ce6\": \"AccountIdInvalid\",\n \"0x9fabe1c1\": \"AddressZero\",\n \"0x4b3815a6\": \"BalanceNotEnough\",\n \"0x59d9b863\": \"BrokerNotAllowed\",\n \"0xf67c6d78\": \"CeffuAddressMismatch\",\n \"0xd969df24\": \"DepositExceedLimit\",\n \"0xa65b249b\": \"EnumerableSetError\",\n \"0x06a0cf4a\": \"InvalidSwapSignature\",\n \"0x1eb00b06\": \"InvalidTokenAddress\",\n \"0xfa7c7537\": \"NativeTokenDepositAmountMismatch\",\n \"0xad674ae6\": \"NotRebalanceEnableToken\",\n \"0x623793c9\": \"NotZeroCodeLength\",\n \"0x833d33e7\": \"OnlyCrossChainManagerCanCall\",\n \"0x3ee5aeb5\": \"ReentrancyGuardReentrantCall\",\n \"0x0b693144\": \"SwapAlreadySubmitted\",\n \"0xa29c4986\": \"TokenNotAllowed\",\n \"0x30773dbb\": \"ZeroCodeLength\",\n \"0x56316e87\": \"ZeroDeposit\",\n \"0x93d3bb4d\": \"ZeroDepositFee\",\n};\n\nexport function getDepositKnownErrorMessage(message: string) {\n if (!message) {\n return \"\";\n }\n\n for (const key of Object.keys(depositErrorCodeMap)) {\n if (message.includes(key)) {\n const value =\n depositErrorCodeMap[key as keyof typeof depositErrorCodeMap];\n return `${value} (${key})`;\n }\n }\n}\n","import { FC } from \"react\";\nimport { Trans } from \"@orderly.network/i18n\";\nimport { Flex, Text } from \"@orderly.network/ui\";\n\nexport const ViewFAQs: FC = () => {\n return (\n <Flex justify=\"center\" gapX={1} mt={3}>\n <Trans\n i18nKey=\"transfer.swapDeposit.viewFAQs\"\n components={[\n <Text\n size=\"xs\"\n color=\"primaryLight\"\n onClick={() => {\n window.open(\"https://learn.woo.org/woofi/faqs/woofi-pro\");\n }}\n className=\"oui-cursor-pointer\"\n key=\"0\"\n />,\n ]}\n />\n </Flex>\n );\n};\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSwap } from \"../hooks/useSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const SingleSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain,\n nativeToken,\n depositFee,\n } = props;\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const { swap: doSingleSwap, status: swapStatus } = useSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chain?.est_txn_mins,\n received: dst.amount,\n dstGasFee: new Decimal(depositFee!.toString())\n ?.div(new Decimal(10).pow(18))\n ?.toString(),\n swapFee: transaction.fees_from,\n };\n\n return info;\n }, [transaction, chain?.est_txn_mins, mode, dst, depositFee]);\n\n useEffect(() => {\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n if (!chain || !chain.depositor) return Promise.reject(\"No chain data\");\n\n setStatus(SwapProcessStatus.Depositing);\n\n return doSingleSwap(\n chain.depositor,\n {\n fromToken: transaction.infos.from_token,\n fromAmount: transaction.infos.from_amount,\n toToken: transaction.infos.to_token,\n minToAmount: transaction.infos.min_to_amount,\n orderlyNativeFees: depositFee,\n },\n { dst, src },\n )\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.DepositFailed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !tx) {\n return;\n }\n return `${chain?.explorer_base_url}/tx/${tx.hash}`;\n }, [status, tx, chain]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Single}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { isNativeTokenChecker, woofiDexSwapDepositorAbi } from \"../constants\";\n\n/**\n * 1. fee precision swap_support.woofi_dex_precision+3,round off\n * 2. price precision = abs(woofi_dex_precision - 5),cut off\n * 3. orderly deposit fee = $0\n * 4. deposit pop-ups: don't show token when fee is 0.\n * e.g. dst gas fee = 0 ETH, swap fee = 0.04 USDC, it will show $0.04 ( 0.04 USDC )\n */\nexport const useSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n const brokerId = useConfig(\"brokerId\");\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n\n const txHash = useRef<string | undefined>();\n const ee = useEventEmitter();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHash.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHash.current]);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = useCallback(\n async (\n woofiDexDepositorAdress: string,\n inputs: {\n fromToken: string;\n fromAmount: string;\n toToken: string;\n minToAmount: string;\n orderlyNativeFees: bigint;\n },\n config: { dst: any; src: any },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (loading) return;\n start();\n\n const txPayload = {\n from: account.address,\n to: woofiDexDepositorAdress,\n data: [account.address, inputs, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.fromToken)\n ? BigInt(inputs.fromAmount) + inputs.orderlyNativeFees\n : inputs.orderlyNativeFees,\n };\n\n try {\n const result = await account.walletAdapter.sendTransaction(\n woofiDexDepositorAdress,\n \"swap\",\n txPayload,\n {\n abi: woofiDexSwapDepositorAbi,\n },\n );\n\n stop();\n\n txHash.current = result.hash;\n\n ee.emit(\"deposit:requested\");\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n throw new Error(e.errorCode);\n }\n },\n [loading, account],\n );\n\n return {\n swap,\n loading,\n status,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { SwapMode, SymbolInfo } from \"../types\";\nimport { CrossSwap } from \"./crossSwap\";\nimport { SingleSwap } from \"./singleSwap\";\n\nexport interface SwapProps {\n mode: SwapMode;\n src: SymbolInfo;\n dst: SymbolInfo;\n chain?: API.NetworkInfos;\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n transactionData: any;\n slippage: number;\n brokerName?: string;\n onComplete?: (isSuccss: boolean) => void;\n onCancel?: () => void;\n onFail?: () => void;\n}\n\nexport const Swap: FC<SwapProps> = (props) => {\n const { mode } = props;\n\n if (mode === SwapMode.Cross) {\n return <CrossSwap {...props} />;\n }\n\n return <SingleSwap {...props} />;\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useBoolean, useDebouncedCallback } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { DST, MarkPrices } from \"../types\";\nimport { useWooCrossSwapQuery } from \"./useCrossSwapQuery\";\nimport { useWooSwapQuery } from \"./useSwapQuery\";\n\nexport type TransactionInfo = {\n price: number;\n markPrices: MarkPrices;\n dstGasFee?: string;\n swapFee?: string;\n bridgeFee?: string;\n fee: string;\n};\n\ntype useSwapEnquiryProps = {\n quantity: string;\n dst: DST;\n queryParams: any;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nexport function useSwapEnquiry(props: useSwapEnquiryProps) {\n const { quantity, dst, queryParams, needSwap, needCrossSwap } = props;\n const { t } = useTranslation();\n const { query: wooSwapQuery } = useWooSwapQuery();\n const { query: wooCrossSwapQuery } = useWooCrossSwapQuery();\n\n const queryParamsRef = useRef(queryParams);\n queryParamsRef.current = queryParams;\n\n const [amount, setAmount] = useState<string>(\"\");\n const [warningMessage, setWarningMessage] = useState<string>(\"\");\n const [querying, { setTrue: queryStart, setFalse: queryStop }] =\n useBoolean(false);\n\n const [transactionInfo, setTransactionInfo] = useState<TransactionInfo>({\n price: 0,\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n fee: \"\",\n // dstGasFee: \"\",\n // swapFee: \"\",\n // bridgeFee: \"\",\n });\n\n const enquiry = useCallback(() => {\n if (needCrossSwap) {\n return wooCrossSwapQuery(queryParamsRef.current);\n }\n\n if (needSwap) {\n return wooSwapQuery(queryParamsRef.current);\n }\n\n return Promise.reject(\"no need to enquiry\");\n }, [needSwap, needCrossSwap]);\n\n const enquirySuccessHandle = (res: any) => {\n if (res.mark_prices) {\n const dstGasFee = needCrossSwap ? res.dst_infos.gas_fee : \"0\";\n const swapFee = needCrossSwap ? res.fees_from.woofi : res.fees_from;\n const bridgeFee = needCrossSwap ? res.fees_from.stargate : undefined;\n const fee = needCrossSwap ? res.fees_from.total : res.fees_from;\n\n setTransactionInfo({\n price: res.price,\n markPrices: res.mark_prices,\n dstGasFee,\n swapFee,\n bridgeFee,\n fee: fee,\n });\n }\n\n // set amount\n if (res.route_infos) {\n const amountValue = needCrossSwap\n ? res.route_infos.dst.amounts[1]\n : res.route_infos.amounts[1];\n\n setAmount(\n new Decimal(amountValue).div(Math.pow(10, dst.decimals!)).toString(),\n );\n }\n\n setWarningMessage(\"\");\n return res;\n };\n\n const cleanTransactionInfo = (data?: any) => {\n setTransactionInfo({\n fee: \"0\",\n markPrices: {\n from_token: 0,\n native_token: 0,\n },\n price: 0,\n swapFee: \"0\",\n bridgeFee: \"0\",\n dstGasFee: \"0\",\n ...data,\n });\n\n setAmount(\"\");\n };\n\n const enquiryErrorHandle = (error: Error) => {\n if (error.message === \"contract call failed\") {\n // Not enough liquidity on the cross-chain bridge.\n setWarningMessage(t(\"transfer.swapDeposit.notEnoughLiquidity\"));\n // clean previous data\n cleanTransactionInfo();\n } else {\n setWarningMessage(\"\");\n if (error?.message) {\n toast.error(error.message);\n }\n }\n };\n\n const debouncedEnquiry = useDebouncedCallback(() => {\n queryStart();\n return enquiry()\n .then(enquirySuccessHandle, enquiryErrorHandle)\n .finally(() => {\n queryStop();\n });\n }, 300);\n\n useEffect(() => {\n // if not need swap and cross swap\n if (!needSwap && !needCrossSwap) {\n cleanTransactionInfo({\n price: 1,\n });\n setAmount(quantity);\n return;\n }\n\n const qty = Number(quantity);\n\n if (isNaN(qty) || qty <= 0) {\n cleanTransactionInfo();\n return;\n }\n\n debouncedEnquiry();\n }, [needSwap, needCrossSwap, quantity]);\n\n return {\n enquiry,\n querying,\n warningMessage,\n transactionInfo,\n amount,\n cleanTransactionInfo,\n };\n}\n","import { useCallback } from \"react\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n} from \"@orderly.network/hooks\";\nimport {\n swapSupportApiUrl,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport const useWooCrossSwapQuery = () => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const brokerId = useConfig(\"brokerId\");\n\n const account = useAccountInstance();\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const queryDestinationFee = useCallback(\n async (\n crossChainRouteAddress: string,\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n orderlyNativeFees: bigint;\n },\n ) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is not ready\");\n }\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n return utils.formatByUnits(quotoLZFee[0]);\n },\n [],\n );\n\n /// swap enquiry\n const query = useCallback(\n (inputs: {\n srcNetwork: string;\n srcToken: string;\n amount: bigint;\n slippage: number;\n dstToken: string;\n crossChainRouteAddress: string;\n }) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n // src_network: inputs.srcNetwork,\n src_network: inputs.srcNetwork,\n dst_network: \"arbitrum\",\n src_token: inputs.srcToken,\n dst_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n src_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${swapSupportApiUrl}/woofi_dex/cross_chain_swap?${queryString}`,\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .then((swapInfo) => {\n return queryDestinationFee(inputs.crossChainRouteAddress, {\n chainId: swapInfo.dst_infos.chain_id,\n bridgedToken: swapInfo.dst_infos.bridged_token,\n toToken: swapInfo.dst_infos.to_token,\n minToAmount: BigInt(swapInfo.dst_infos.min_to_amount),\n orderlyNativeFees: 0n,\n })\n .then((data) => {\n return {\n ...swapInfo,\n dst_infos: {\n ...swapInfo.dst_infos,\n gas_fee: data,\n },\n };\n })\n .catch((e) => {\n console.error(\"queryDestinationFee error\", e);\n });\n })\n .finally(() => stop());\n },\n\n [loading, account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useCallback } from \"react\";\nimport { useAccountInstance, useBoolean } from \"@orderly.network/hooks\";\nimport { swapSupportApiUrl } from \"../constants\";\n\nexport const useWooSwapQuery = () => {\n const account = useAccountInstance();\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n /// swap 询价\n const query = useCallback(\n (inputs: any) => {\n if (loading) return Promise.resolve();\n start();\n\n const params = {\n network: inputs.srcNetwork,\n // network: \"arbitrum\",\n from_token: inputs.srcToken,\n to_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n from_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(`${swapSupportApiUrl}/woofi_dex/swap?${queryString}`)\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .finally(() => stop());\n },\n [account],\n );\n\n return {\n query,\n loading,\n };\n};\n","import { useMemo } from \"react\";\nimport { useIndexPrice } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal, toNonExponential } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../../utils\";\nimport { TransactionInfo } from \"./useSwapEnquiry\";\n\nexport type UseSwapFee = ReturnType<typeof useSwapFee>;\n\ntype FeeQty = {\n value: string | number;\n dp: number;\n symbol?: string;\n};\n\nexport function useSwapFee(options: {\n nativeToken?: API.TokenInfo;\n isNativeToken?: boolean;\n src?: API.TokenInfo;\n depositFee?: bigint;\n transactionInfo: TransactionInfo;\n needSwap: boolean;\n needCrossSwap: boolean;\n}) {\n const {\n nativeToken,\n isNativeToken,\n src,\n depositFee = 0,\n transactionInfo,\n needSwap,\n needCrossSwap,\n } = options;\n\n const nativeSymbol = nativeToken?.symbol;\n const srcSymbol = src?.symbol;\n\n const {\n fee = \"0\",\n swapFee = \"0\",\n bridgeFee = \"0\",\n dstGasFee: destinationGasFee = \"0\",\n markPrices,\n } = transactionInfo;\n\n const { from_token: markPrice, native_token: nativeMarkPrice } = markPrices;\n\n const { data: symbolPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const { t } = useTranslation();\n\n const feeInfo = useMemo(() => {\n let feeAmount = \"\";\n let feeQtys: FeeQty[] = [];\n\n const nativeDp = feeDecimalsOffset(\n // swap precision\n nativeToken?.precision,\n );\n\n // swap precision\n const srcDp = feeDecimalsOffset(src?.precision);\n\n const dstGasFee = needCrossSwap\n ? destinationGasFee\n : new Decimal(depositFee.toString())\n .div(new Decimal(10).pow(18))\n .toString();\n\n if (!needSwap && !needCrossSwap) {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee).mul(symbolPrice || 0).toString();\n }\n\n if (needSwap || needCrossSwap) {\n // if native token, Destination gas fee、fee (Swap fee + Bridge fee ) will use a same symbol unit\n if (isNativeToken) {\n const totalFeeQty = new Decimal(dstGasFee).plus(fee);\n\n feeQtys = [\n {\n value: totalFeeQty.toString(),\n dp: nativeDp,\n },\n ];\n\n feeAmount = totalFeeQty.mul(nativeMarkPrice ?? 1).toString();\n } else {\n feeQtys = [\n {\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n value: fee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ];\n\n feeAmount = new Decimal(dstGasFee)\n .mul(nativeMarkPrice ?? 1)\n .plus(new Decimal(fee).mul(markPrice ?? 1))\n .toString();\n }\n }\n\n feeQtys = feeQtys.filter(\n (item) => !!item.value && Number(item.value) !== 0,\n );\n\n const feeDetails = [\n {\n title: t(\"transfer.deposit.destinationGasFee\"),\n description: t(\"transfer.deposit.destinationGasFee.description\"),\n value: dstGasFee,\n dp: nativeDp,\n symbol: nativeSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.swapFee\"),\n description: t(\"transfer.swapDeposit.swapFee.description\"),\n value: swapFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n {\n title: t(\"transfer.swapDeposit.bridgeFee\"),\n description: t(\"transfer.swapDeposit.bridgeFee.description\"),\n value: bridgeFee,\n dp: srcDp,\n symbol: srcSymbol,\n },\n ]\n .filter(\n // alway show Destination gas fee\n (item, index) =>\n index === 0 || (!!item.value && Number(item.value) !== 0),\n )\n .map((item) => {\n const value = new Decimal(item.value || 0).todp(item.dp).toNumber();\n return {\n ...item,\n value: toNonExponential(value),\n };\n });\n\n return {\n feeAmount,\n feeQtys,\n feeDetails,\n };\n }, [\n depositFee,\n symbolPrice,\n nativeSymbol,\n srcSymbol,\n transactionInfo,\n needSwap,\n needCrossSwap,\n ]);\n\n return {\n ...feeInfo,\n nativeSymbol,\n };\n}\n","import { useMemo } from \"react\";\nimport { DepositAction } from \"../../../types\";\n\ntype Options = {\n isNativeToken: boolean;\n allowance: string;\n quantity: string;\n maxQuantity: string;\n};\n\nexport function useActionType(options: Options) {\n const { isNativeToken, allowance, quantity, maxQuantity } = options;\n\n const actionType = useMemo(() => {\n const allowanceNum = isNativeToken ? Number.MAX_VALUE : Number(allowance);\n\n if (allowanceNum <= 0) {\n return DepositAction.ApproveAndDeposit;\n }\n\n const qty = Number(quantity);\n const maxQty = Number(maxQuantity);\n\n if (allowanceNum < qty && qty <= maxQty) {\n // return DepositAction.Increase;\n return DepositAction.ApproveAndDeposit;\n }\n\n return DepositAction.Deposit;\n }, [isNativeToken, allowance, quantity, maxQuantity]);\n\n return actionType;\n}\n","import { useCallback, useMemo } from \"react\";\nimport {\n Chain,\n ConnectedChain,\n useChains,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\n\nexport type CurrentChain = Pick<ConnectedChain, \"namespace\"> & {\n id: number;\n info?: Chain;\n};\n\nexport function useChainSelect() {\n const { t } = useTranslation();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { connectedChain, settingChain, setChain } = useWalletConnector();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const currentChain = useMemo(() => {\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) return null;\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (!connectedChain) {\n return;\n }\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return setChain({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n if (error && error.message) {\n toast.error(\n `${t(\"connector.switchChain.failed\")}: ${error.message}`,\n );\n }\n });\n },\n [currentChain, setChain, findByChainId],\n );\n\n return {\n chains,\n currentChain,\n settingChain,\n onChainChange,\n };\n}\n","import { useCallback, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { getDepositKnownErrorMessage } from \"../../../utils\";\n\ntype Options = {\n quantity: string;\n allowance?: string;\n approve: (quantity?: string) => Promise<any>;\n deposit: () => Promise<any>;\n onSuccess?: () => void;\n customDeposit?: () => Promise<any>;\n enableCustomDeposit?: boolean;\n};\n\nexport function useDepositAction(options: Options) {\n const {\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit,\n customDeposit,\n onSuccess,\n } = options;\n const [submitting, setSubmitting] = useState(false);\n const ee = useEventEmitter();\n const { t } = useTranslation();\n\n const doDeposit = useCallback(async () => {\n try {\n await deposit();\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n } catch (err: any) {\n console.error(\"deposit error\", err);\n\n const knownErrorMessage = getDepositKnownErrorMessage(err.message);\n if (knownErrorMessage) {\n toast.error(\n <div>\n {t(\"common.somethingWentWrong\")}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {t(\"common.details\")}: {knownErrorMessage}\n </div>\n </div>,\n );\n } else {\n toast.error(err.message || t(\"common.somethingWentWrong\"));\n }\n }\n }, [deposit, onSuccess, t]);\n\n const onDeposit = useCallback(async () => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting) return;\n\n setSubmitting(true);\n\n const execDeposit = enableCustomDeposit ? customDeposit : doDeposit;\n\n await execDeposit?.()?.finally(() => {\n setSubmitting(false);\n });\n }, [quantity, submitting, doDeposit, enableCustomDeposit, customDeposit, t]);\n\n const onApprove = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await approve(quantity);\n toast.success(t(\"transfer.deposit.approve.success\"));\n } catch (err: any) {\n console.error(\"approve error\", err);\n toast.error(\n err.message || err?.errorCode || t(\"transfer.deposit.approve.failed\"),\n );\n throw err;\n } finally {\n setSubmitting(false);\n }\n }, [approve, submitting, quantity, allowance, t]);\n\n const onApproveAndDeposit = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n try {\n await onApprove();\n await onDeposit();\n } catch (err) {\n console.error(\"approve and deposit error\", err);\n } finally {\n setSubmitting(false);\n }\n }, [submitting, onApprove, onDeposit]);\n\n return { submitting, onApprove, onDeposit, onApproveAndDeposit };\n}\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../../types\";\n\ntype Options = { quantity: string; maxQuantity: string | number };\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { API, nativeTokenAddress } from \"@orderly.network/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 \"@orderly.network/hooks\";\nimport { NetworkId, type API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport type { CurrentChain } from \"./useChainSelect\";\n\nexport const useToken = (\n currentChain?: CurrentChain | null,\n filter: (token: API.TokenInfo) => boolean = () => true,\n) => {\n const [sourceToken, setSourceToken] = useState<API.TokenInfo>();\n const [targetToken, setTargetToken] = useState<API.TokenInfo>();\n\n const [sourceTokens, setSourceTokens] = useState<API.TokenInfo[]>([]);\n const [targetTokens, setTargetTokens] = useState<API.TokenInfo[]>([]);\n\n const 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 \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n textVariants,\n Tabs,\n TabPanel,\n WalletIcon,\n} from \"@orderly.network/ui\";\nimport { WithdrawTo } from \"../../types\";\nimport { LtvWidget } from \"../LTV\";\nimport { TextAreaInput } from \"../accountIdInput\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { WithdrawAction } from \"../withdrawAction\";\nimport { WithdrawWarningMessage } from \"../withdrawWarningMessage\";\nimport { WithdrawFormScriptReturn } from \"./withdrawForm.script\";\n\nexport type WithdrawFormProps = WithdrawFormScriptReturn;\n\nexport const WithdrawForm: React.FC<WithdrawFormProps> = (props) => {\n const {\n address,\n loading,\n disabled,\n quantity,\n onQuantityChange,\n sourceToken,\n amount,\n maxQuantity,\n tokenChains,\n currentChain,\n fee,\n settingChain,\n crossChainTrans,\n checkIsBridgeless,\n withdrawTo,\n sourceTokens,\n onSourceTokenChange,\n vaultBalanceList,\n qtyGreaterThanMaxAmount,\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 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 />\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 \"@orderly.network/ui\";\nimport { InputStatus } from \"../../types\";\n\nexport type TextAreaInputProps = {\n value: string;\n onChange: (value: string) => void;\n status?: InputStatus;\n hintMessage?: string;\n placeholder?: string;\n className?: string;\n label: string;\n 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 \"@orderly.network/i18n\";\nimport {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { RefreshIcon } from \"../../icons\";\n\ntype UnsettlePnlInfoProps = {\n hasPositions: boolean;\n unsettledPnl?: number;\n onSettlePnl: () => Promise<any>;\n tooltipContent?: ReactNode;\n dialogContent?: ReactNode;\n};\n\nexport const UnsettlePnlInfo = (props: UnsettlePnlInfoProps) => {\n const {\n hasPositions,\n unsettledPnl,\n onSettlePnl,\n tooltipContent,\n dialogContent,\n } = props;\n const { t } = useTranslation();\n\n if (unsettledPnl === 0 && !hasPositions) {\n return <></>;\n }\n\n const settlePnlDialog = () => {\n modal.confirm({\n title: t(\"settle.settlePnl\"),\n content: dialogContent,\n onOk: () => {\n return onSettlePnl();\n },\n });\n };\n\n return (\n <Flex justify=\"between\" className=\"oui-text-2xs oui-text-base-contrast-36\">\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <Tooltip\n className=\"oui-max-w-[274px] oui-font-semibold\"\n content={tooltipContent as any}\n >\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <ExclamationFillIcon\n size={14}\n className=\"oui-text-warning-darken\"\n />\n <Text className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\">\n {`${t(\"settle.unsettled\")}:`}\n </Text>\n </Flex>\n </Tooltip>\n <Text.numeral\n showIdentifier\n coloring\n weight=\"semibold\"\n dp={6}\n data-testid=\"oui-testid-withdraw-dialog-unsettledPnl-value\"\n >\n {unsettledPnl}\n </Text.numeral>\n <Text>USDC</Text>\n </Flex>\n <Flex itemAlign=\"center\" gap={1} className=\"oui-cursor-pointer\">\n <RefreshIcon className=\"oui-text-primary\" />\n <Text\n data-testid=\"oui-testid-withdraw-dialog-settle-text\"\n size=\"2xs\"\n color=\"primary\"\n className=\" oui-select-none\"\n onClick={settlePnlDialog}\n >\n {t(\"common.settle\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button, modal } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { WithdrawTo } from \"../../types\";\nimport { CrossWithdrawConfirm } from \"../crossWithdrawConfirm\";\nimport SwitchChainButton from \"./SwitchChainButton\";\n\ninterface IProps {\n disabled?: boolean;\n loading?: boolean;\n onWithdraw: () => Promise<void>;\n networkId?: NetworkId;\n crossChainWithdraw: boolean;\n address?: string;\n currentChain?: any;\n quantity: string;\n fee: number;\n checkIsBridgeless: boolean;\n withdrawTo: WithdrawTo;\n onTransfer: () => void;\n}\n\nexport const WithdrawAction = (props: IProps) => {\n const {\n disabled,\n loading,\n onWithdraw,\n networkId,\n crossChainWithdraw,\n address,\n currentChain,\n quantity,\n fee,\n checkIsBridgeless,\n onTransfer,\n } = props;\n const { t } = useTranslation();\n\n const amount = useMemo(() => {\n if (!quantity) {\n return 0;\n }\n return new Decimal(quantity).minus(fee ?? 0).toNumber();\n }, [quantity, fee]);\n\n const preWithdraw = () => {\n if (crossChainWithdraw) {\n modal.confirm({\n title: t(\"transfer.withdraw.crossChain.confirmWithdraw\"),\n content: (\n <CrossWithdrawConfirm\n address={address!}\n amount={amount}\n currentChain={currentChain}\n />\n ),\n classNames: {\n content: \"oui-font-semibold\",\n body: \"!oui-pb-0\",\n footer: \"!oui-pt-0\",\n },\n\n onOk: async () => {\n onWithdraw();\n },\n });\n return;\n }\n onWithdraw();\n };\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n const renderButton = () => {\n if (props.withdrawTo === WithdrawTo.Account) {\n return (\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={onTransfer}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n\n if (checkIsBridgeless) {\n return (\n <Button\n data-testid=\"oui-testid-withdraw-dialog-withdraw-btn\"\n fullWidth\n disabled={disabled}\n loading={loading}\n onClick={preWithdraw}\n size={buttonSize}\n >\n {t(\"common.withdraw\")}\n </Button>\n );\n }\n return <SwitchChainButton networkId={networkId} size={buttonSize} />;\n };\n\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n bridgeLessOnly\n buttonProps={{ fullWidth: true, size: buttonSize }}\n >\n {renderButton()}\n </AuthGuard>\n </Box>\n );\n};\n","import { Box, ChainIcon, Flex, Text } from \"@orderly.network/ui\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n currentChain: any;\n amount: number;\n address: string;\n}\n\nexport const CrossWithdrawConfirm = ({\n address,\n amount,\n currentChain,\n}: IProps) => {\n const { t } = useTranslation();\n\n const networkName = useMemo(() => {\n if (currentChain && currentChain.info && currentChain.info.network_infos) {\n return currentChain.info.network_infos.name;\n }\n return undefined;\n }, [currentChain]);\n\n return (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"start\"\n className=\"oui-gap-1 lg:oui-gap-3\"\n >\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n mb={5}\n className=\"oui-gap-3 lg:oui-gap-4\"\n >\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientAddress\")}\n </Text>\n <Text size=\"sm\" intensity={98} className=\"oui-break-all\">\n {address}\n </Text>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.withdraw.crossChain.recipientNetwork\")}\n </Text>\n <Flex gap={1}>\n <ChainIcon\n className=\"oui-h-[18px] oui-w-[18px]\"\n size={\"sm\"}\n chainId={currentChain.id}\n />\n\n <Text size=\"sm\" intensity={98}>\n {networkName}\n </Text>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justify=\"start\" itemAlign=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"transfer.withdraw.crossChain.withdrawAmount\")} (USDC)`}\n </Text>\n <Text.numeral size=\"sm\" intensity={98} dp={2}>\n {amount}\n </Text.numeral>\n </Flex>\n </Flex>\n <Flex\n justify=\"center\"\n className=\"oui-text-warning-darken oui-text-2xs lg:oui-text-xs oui-text-center\"\n mb={3}\n >\n {t(\"transfer.withdraw.crossChain.warning\")}\n </Flex>\n </Flex>\n );\n};\n","import { Button, ButtonProps, Flex, modal, toast } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n networkId?: NetworkId;\n size: ButtonProps[\"size\"];\n}\n\nexport default function SwitchChainButton(props: IProps) {\n const { t } = useTranslation();\n\n const switchChain = () => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorDialogId, {\n networkId: props.networkId,\n bridgeLessOnly: true,\n })\n .then(\n (r) => {\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n return (\n <Flex direction={\"column\"}>\n <Button\n color=\"warning\"\n size={props.size}\n fullWidth\n onClick={() => {\n switchChain();\n }}\n >\n {t(\"connector.switchNetwork\")}\n </Button>\n </Flex>\n );\n}\n","import React from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Flex } from \"@orderly.network/ui\";\n\ninterface WarningMessageProps {\n 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 \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport {\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n NetworkId,\n} from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useAuthGuard } from \"@orderly.network/ui-connector\";\nimport {\n Decimal,\n int2hex,\n praseChainIdToNumber,\n toNonExponential,\n} from \"@orderly.network/utils\";\nimport { InputStatus, WithdrawTo } from \"../../types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { 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 currentChain = useMemo(() => {\n // if (!connectedChain) return null;\n\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : Number.parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) {\n return null;\n }\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useWithdrawToken({\n currentChain,\n withdrawTo,\n });\n\n const tokenChains = useMemo(() => {\n return chains\n .filter((chain) =>\n chain.token_infos?.some(\n (token) => token.symbol === sourceToken?.symbol,\n ),\n )\n .map((chain) => chain.network_infos);\n }, [chains, networkId, sourceToken]);\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const { withdraw, maxAmount, unsettledPnL } = useWithdraw({\n token: sourceToken?.symbol,\n decimals: sourceToken?.token_decimal,\n });\n\n const 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 const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n\n setLoading(true);\n return withdraw({\n amount: quantity,\n token: sourceToken?.symbol!,\n chainId: currentChain?.id!,\n allowCrossChainWithdraw: crossChainWithdraw,\n })\n .then((res) => {\n toast.success(t(\"transfer.withdraw.requested\"));\n ee.emit(\"withdraw:requested\");\n options.close?.();\n setQuantity(\"\");\n })\n .catch((e) => {\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n return;\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(e.message);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const fee = useWithdrawFee({\n crossChainWithdraw,\n currentChain,\n token: sourceToken?.symbol!,\n withdrawTo,\n });\n\n const minAmountWarningMessage = useMemo(() => {\n const minAmount = new Decimal(\n sourceToken?.minimum_withdraw_amount ?? 0,\n ).add(fee);\n\n if (quantity && new Decimal(quantity).lt(minAmount)) {\n return t(\"transfer.withdraw.minAmount.error\", {\n minAmount: toNonExponential(minAmount.toNumber()),\n currency: sourceToken?.symbol,\n });\n }\n }, [quantity, sourceToken?.minimum_withdraw_amount, fee, t]);\n\n const showQty = useMemo(() => {\n if (!quantity) {\n return \"\";\n }\n\n const value = new Decimal(quantity).sub(fee ?? 0);\n if (value.isNegative()) {\n return \"\";\n }\n return toNonExponential(value.toNumber());\n }, [fee, quantity]);\n\n useEffect(() => {\n if (!quantity) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n const qty = new Decimal(quantity ?? 0);\n if (unsettledPnL < 0) {\n if (qty.gt(maxAmount)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxAmount, unsettledPnL, crossChainTrans]);\n\n 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 disabled =\n crossChainTrans ||\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus) ||\n (withdrawTo === WithdrawTo.Account &&\n !withdrawAccountIdState.toAccountId) ||\n qtyGreaterThanMaxAmount ||\n !!minAmountWarningMessage ||\n qtyGreaterThanVault;\n\n const warningMessage =\n minAmountWarningMessage || ltvWarningMessage || vaultBalanceMessage;\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 };\n};\n","import { useMemo } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n usePositionStream,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport type SettlePnlOptions = {\n accountId?: string;\n};\n\nexport const useSettlePnl = (options?: SettlePnlOptions) => {\n const { accountId } = options || {};\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { account, state } = useAccount();\n const [positionData] = usePositionStream();\n\n const hasPositions = useMemo(\n () => !!positionData?.rows?.length,\n [positionData],\n );\n\n const onSettlePnl = async () => {\n const isSubAccount = accountId && state.mainAccountId !== accountId;\n const settleFn = isSubAccount\n ? account.settleSubAccount({ subAccountId: accountId })\n : account.settle({ accountId });\n return settleFn\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\n })\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\n } else if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n } else if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n } else {\n toast.error(e.message);\n return Promise.reject(e);\n }\n });\n };\n\n return {\n hasPositions,\n onSettlePnl,\n };\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/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 \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { toast } from \"@orderly.network/ui\";\nimport { InputStatus } from \"../../../types\";\nimport { checkIsAccountId, getTransferErrorMessage } from \"../../../utils\";\n\ntype InternalWithdrawOptions = {\n token: string;\n decimals: number;\n quantity: string;\n setQuantity: (quantity: string) => void;\n close?: () => void;\n setLoading: (loading: boolean) => void;\n};\n\nexport function useWithdrawAccountId(options: InternalWithdrawOptions) {\n const { token, quantity, setQuantity, close, setLoading, decimals } = options;\n const { t } = useTranslation();\n const [toAccountId, setToAccountId] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { transfer, submitting } = useInternalTransfer();\n\n const onTransfer = useCallback(() => {\n const num = Number(quantity);\n\n if (Number.isNaN(num) || num <= 0) {\n toast.error(t(\"transfer.quantity.invalid\"));\n return;\n }\n\n if (submitting || !toAccountId) {\n return;\n }\n setLoading(true);\n\n transfer({\n token,\n receiver: toAccountId,\n amount: quantity,\n decimals,\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n close?.();\n })\n .catch((err) => {\n console.log(\"transfer error\", err);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [t, quantity, token, submitting, toAccountId, transfer]);\n\n useEffect(() => {\n if (!toAccountId) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n if (checkIsAccountId(toAccountId)) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n } else {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.withdraw.accountId.invalid\"));\n }\n }, [toAccountId]);\n\n return {\n toAccountId,\n setToAccountId,\n onTransfer,\n internalWithdrawSubmitting: submitting,\n toAccountIdInputStatus: inputStatus,\n toAccountIdHintMessage: hintMessage,\n };\n}\n","import { useMemo } from \"react\";\nimport { useTokenInfo } from \"@orderly.network/hooks\";\nimport { WithdrawTo } from \"../../../types\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\n\nexport function useWithdrawFee(options: {\n token: string;\n currentChain?: CurrentChain | null;\n crossChainWithdraw: boolean;\n withdrawTo: WithdrawTo;\n}) {\n const { crossChainWithdraw, currentChain, token, withdrawTo } = options;\n\n const tokenInfo = useTokenInfo(token);\n\n const fee = useMemo(() => {\n if (withdrawTo === WithdrawTo.Account) {\n return 0;\n }\n\n if (!currentChain) {\n return 0;\n }\n\n const item = tokenInfo?.chain_details?.find(\n (chain) => Number.parseInt(chain.chain_id) === currentChain.id,\n );\n\n if (!item) {\n return 0;\n }\n\n if (crossChainWithdraw) {\n return (\n (item.withdrawal_fee || 0) + (item.cross_chain_withdrawal_fee || 0)\n );\n }\n\n return item.withdrawal_fee || 0;\n }, [tokenInfo, token, currentChain, crossChainWithdraw, withdrawTo]);\n\n return fee;\n}\n","import { useMemo } from \"react\";\nimport { useComputedLTV, useQuery } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\n\nexport const useWithdrawLTV = (params: { token: string; quantity: string }) => {\n const { token, quantity } = params;\n const { ltv_threshold } = useConvertThreshold();\n const { t } = useTranslation();\n\n const currentLTV = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity ? -Number(quantity) : 0,\n token,\n });\n\n const ltvWarningMessage = useMemo(() => {\n if (ltv_threshold && nextLTV) {\n const threshold = ltv_threshold * 100;\n if (nextLTV > threshold) {\n return t(\"transfer.withdraw.LTV.error\", {\n threshold,\n });\n }\n }\n return \"\";\n }, [nextLTV, ltv_threshold]);\n\n return {\n currentLTV,\n nextLTV,\n ltvWarningMessage,\n t,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n revalidateOnFocus: false,\n },\n );\n\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useMemoizedFn, useTokensInfo } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { WithdrawTo } from \"../../../types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks\";\nimport { useToken } from \"../../depositForm/hooks/useToken\";\n\nexport function useWithdrawToken(params: {\n currentChain?: CurrentChain | null;\n withdrawTo: WithdrawTo;\n}) {\n const { currentChain, withdrawTo } = params;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const { sourceToken, onSourceTokenChange, sourceTokens } = useToken(\n currentChain,\n (token) => token.symbol === \"USDC\" || token.is_collateral,\n );\n\n useEffect(() => {\n if (!tokensInfo?.length) return;\n\n const list = tokensInfo.map((item) => ({\n ...item,\n symbol: item.token,\n token_decimal: item.decimals,\n precision: item.decimals,\n }));\n\n // sort tokens, USDC should be the first\n list.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n\n const usdcToken = getTokenByTokenList(tokens);\n setToken(usdcToken || list?.[0]);\n setTokens(list);\n }, [tokensInfo]);\n\n const syncToken = useMemoizedFn(() => {\n if (withdrawTo === WithdrawTo.Account) {\n const findToken = tokens.find(\n (item) => item.symbol === sourceToken?.symbol,\n ) as API.TokenInfo;\n if (findToken) {\n setToken(findToken);\n }\n } else {\n const findToken = sourceTokens.find(\n (item) => item.symbol === token?.symbol,\n ) as API.TokenInfo;\n if (findToken) {\n onSourceTokenChange(findToken);\n }\n }\n });\n\n useEffect(() => {\n syncToken();\n }, [withdrawTo]);\n\n if (withdrawTo === WithdrawTo.Account) {\n return {\n sourceToken: token,\n onSourceTokenChange: setToken,\n sourceTokens: tokens,\n };\n }\n\n return {\n sourceToken,\n onSourceTokenChange,\n sourceTokens,\n };\n}\n","import { FC } from \"react\";\nimport {\n useWithdrawFormScript,\n WithdrawFormScriptOptions,\n} from \"./withdrawForm.script\";\nimport { WithdrawForm } from \"./withdrawForm.ui\";\n\nexport type WithdrawFormWidgetProps = WithdrawFormScriptOptions;\n\nexport const WithdrawFormWidget: FC<WithdrawFormWidgetProps> = (props) => {\n const state = useWithdrawFormScript(props);\n return <WithdrawForm {...state} />;\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { DepositSlot } from \"./depositSlot\";\nimport { WithdrawSlot } from \"./withdrawSlot\";\n\nexport const DepositAndWithdrawWithDialogId = \"DepositAndWithdrawWithDialogId\";\nexport const DepositAndWithdrawWithSheetId = \"DepositAndWithdrawWithSheetId\";\n\nexport type DepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n};\n\nexport const DepositAndWithdraw: FC<DepositAndWithdrawProps> = (props) => {\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\",\n );\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel\n title={t(\"common.deposit\")}\n icon={<ArrowDownSquareFillIcon />}\n value=\"deposit\"\n >\n <DepositSlot close={props.close} />\n {/* <DepositFormWidget close={props.close} /> */}\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <WithdrawSlot close={props.close} />\n {/* <WithdrawFormWidget close={props.close} /> */}\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(DepositAndWithdrawWithDialogId, DepositAndWithdraw, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n});\n\nregisterSimpleSheet(DepositAndWithdrawWithSheetId, DepositAndWithdraw);\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { DepositFormWidget } from \"../depositForm\";\nimport { DepositFormWidgetProps } from \"../depositForm/depositForm.widget\";\n\nexport const DepositSlot = (props: DepositFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.DepositForm}\n defaultWidget={DepositFormWidget}\n {...props}\n />\n );\n};\n","import { ExtensionPositionEnum, ExtensionSlot } from \"@orderly.network/ui\";\nimport { WithdrawFormWidget } from \"../withdrawForm\";\nimport { WithdrawFormWidgetProps } from \"../withdrawForm/withdrawForm.widget\";\n\nexport const WithdrawSlot = (props: WithdrawFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.WithdrawForm}\n defaultWidget={WithdrawFormWidget}\n {...props}\n />\n );\n};\n","import { FC } from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { ActionButton } from \"../../actionButton\";\nimport { AvailableQuantity } from \"../../availableQuantity\";\nimport { BrokerWallet } from \"../../brokerWallet\";\nimport { ChainSelect } from \"../../chainSelect\";\nimport { ExchangeDivider } from \"../../exchangeDivider\";\nimport { QuantityInput } from \"../../quantityInput\";\nimport { Slippage } from \"../../slippage\";\nimport { SwapCoin } from \"../../swapCoin\";\nimport { Web3Wallet } from \"../../web3Wallet\";\nimport { Notice } from \"../components/notice\";\nimport { SwapFee } from \"../components/swapFee\";\nimport { UseSwapDepositFormScriptReturn } from \"./swapDepositForm.script\";\n\nexport const SwapDepositForm: FC<UseSwapDepositFormScriptReturn> = (props) => {\n const {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n } = props;\n\n return (\n <Box\n id=\"oui-swap-deposit-form\"\n className={textVariants({ weight: \"semibold\" })}\n >\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Web3Wallet />\n\n <Box mt={3} mb={1}>\n <ChainSelect\n chains={chains}\n value={currentChain!}\n onValueChange={onChainChange}\n wrongNetwork={wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n status={inputStatus}\n hintMessage={hintMessage}\n fetchBalance={fetchBalance}\n data-testid=\"oui-testid-swap-deposit-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity);\n }}\n />\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={dst as any}\n value={swapQuantity}\n loading={swapRevalidating}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n\n <Flex direction=\"column\" itemAlign=\"start\" mt={1} gapY={1}>\n <Flex justify=\"between\" width=\"100%\">\n {/* <SwapCoin token={token as any} dst={dst} price={swapPrice} /> */}\n {/* <SwapCoin\n sourceSymbol={token as any}\n targetSymbol={dst.symbol}\n indexPrice={swapPrice}\n /> */}\n {(needSwap || needCrossSwap) && (\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n )}\n </Flex>\n\n <SwapFee {...fee} />\n </Flex>\n </Box>\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={token?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n networkId={networkId}\n />\n </Flex>\n </Box>\n );\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useConfig, useDeposit, useLocalStorage } from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"../../depositForm/hooks\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { useNeedSwapAndCross } from \"../hooks/useNeedSwapAndCross\";\nimport { useSwapEnquiry } from \"../hooks/useSwapEnquiry\";\nimport { useSwapFee } from \"../hooks/useSwapFee\";\nimport { useToken } from \"../hooks/useToken\";\nimport { SwapMode } from \"../types\";\n\nexport type UseSwapDepositFormScriptReturn = ReturnType<\n typeof useSwapDepositFormScript\n>;\n\nexport type UseSwapDepositFormScriptOptions = {\n onClose?: () => void;\n};\n\nexport const useSwapDepositFormScript = (\n options: UseSwapDepositFormScriptOptions,\n) => {\n const [slippage, setSlippage] = useLocalStorage(\n \"orderly_swap_deposit_slippage\",\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const { wrongNetwork } = useAppContext();\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const tokensFilter = useCallback((chainInfo: API.Chain) => {\n return (\n chainInfo.token_infos.filter((token) => {\n if (chainInfo.network_infos.bridgeless && token.symbol === \"USDC\") {\n return true;\n }\n return !!(token as API.TokenInfo).swap_enable;\n }) ?? []\n );\n }, []);\n\n const { token, tokens, onTokenChange } = useToken({\n currentChain,\n tokensFilter,\n });\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n } = useDeposit({\n address: token?.address,\n decimals: token?.decimals,\n srcChainId: currentChain?.id,\n srcToken: token?.symbol,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n depositorAddress: (currentChain?.info?.network_infos as API.NetworkInfos)\n ?.depositor,\n });\n\n const maxQuantity = useMemo(\n () =>\n new Decimal(balance || 0)\n .todp(token?.precision ?? 2, Decimal.ROUND_DOWN)\n .toString(),\n [balance, token],\n );\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n });\n\n const { needSwap, needCrossSwap } = useNeedSwapAndCross({\n srcToken: token,\n srcChainId: currentChain?.id,\n dstChainId: dst?.chainId,\n });\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcToken: token?.address,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n dstToken: dst.address,\n crossChainRouteAddress: (\n currentChain?.info?.network_infos as API.NetworkInfos\n )?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (token?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = () => {\n cleanTransactionInfo();\n setQuantity(\"\");\n };\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.onClose?.();\n }, [options.onClose]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: token!.symbol,\n // swap precision\n displayDecimals: token?.precision,\n amount: quantity,\n decimals: token!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const { submitting, onApprove, onDeposit } = useDepositAction({\n quantity,\n allowance,\n approve,\n deposit,\n enableCustomDeposit: needSwap || needCrossSwap,\n customDeposit: onSwapDeposit,\n onSuccess,\n });\n\n const loading = submitting || depositFeeRevalidating! || swapRevalidating;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating;\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: token,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n useEffect(() => {\n cleanData();\n }, [token, currentChain?.id]);\n\n return {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\n swapQuantity,\n onQuantityChange: setQuantity,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapRevalidating,\n warningMessage,\n fee,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\n\ntype Options = {\n currentChain: CurrentChain | null;\n tokensFilter?: (chainInfo: API.Chain) => API.TokenInfo[];\n};\n\nexport function useToken(options: Options) {\n const { currentChain, tokensFilter } = options;\n const [token, setToken] = useState<API.TokenInfo>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([]);\n\n // when chain changed and chain data ready then call this function\n const onChainInited = useCallback(\n (chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n const tokens =\n typeof tokensFilter === \"function\"\n ? tokensFilter(chainInfo)\n : chainInfo.token_infos;\n\n setTokens(tokens);\n\n const newToken = getTokenByTokenList(tokens);\n\n if (!newToken) return;\n\n setToken(newToken);\n }\n },\n [tokensFilter],\n );\n\n useEffect(() => {\n onChainInited(currentChain?.info);\n // if settingChain is true, the currentChain will change, so use currentChain.id\n }, [currentChain?.id, onChainInited]);\n\n return { token, tokens, onTokenChange: setToken };\n}\n","import { FC } from \"react\";\nimport {\n useSwapDepositFormScript,\n UseSwapDepositFormScriptOptions,\n} from \"./swapDepositForm.script\";\nimport { SwapDepositForm } from \"./swapDepositForm.ui\";\n\nexport type SwapDepositFormWidgetProps = UseSwapDepositFormScriptOptions;\n\nexport const SwapDepositFormWidget: FC<SwapDepositFormWidgetProps> = (\n props,\n) => {\n const state = useSwapDepositFormScript(props);\n return <SwapDepositForm {...state} />;\n};\n","import { FC } from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Button, Flex, textVariants, Text, cn } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { TransferVerticalIcon } from \"../../icons\";\nimport { AccountSelect } from \"../accountSelect\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { TransferFormScriptReturn } from \"./transferForm.script\";\n\nexport type TransferFormProps = TransferFormScriptReturn;\n\nexport const TransferForm: FC<TransferFormProps> = (props) => {\n const {\n networkId,\n disabled,\n onTransfer,\n quantity,\n onQuantityChange,\n amount,\n tokens,\n token,\n onTokenChange,\n maxQuantity,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccounts,\n toAccounts,\n fromAccount,\n onFromAccountChange,\n toAccount,\n onToAccountChange,\n onExchange,\n } = props;\n\n const { t } = useTranslation();\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.from\")}\n </Text>\n <Box mt={1} mb={1}>\n <AccountSelect\n subAccounts={fromAccounts}\n value={fromAccount}\n onValueChange={onFromAccountChange}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n hintMessage={hintMessage}\n status={inputStatus}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={unsettledPnL}\n hasPositions={hasPositions}\n onSettlePnl={onSettlePnl}\n tooltipContent={t(\"transfer.internalTransfer.unsettled.tooltip\")}\n dialogContent={\n // @ts-ignore\n <Trans i18nKey=\"transfer.internalTransfer.settlePnl.description\" />\n }\n />\n </Box>\n\n <ExchangeDivider\n icon={\n <TransferVerticalIcon\n // TODO: determines if the current orderly key is the main account\n // className={cn(\n // isMainAccount\n // ? \"oui-cursor-pointer oui-text-primary\"\n // : \" oui-cursor-not-allowed oui-text-base-contrast-20\",\n // )}\n // onClick={isMainAccount ? onExchange : undefined}\n className=\"oui-cursor-pointer oui-text-primary\"\n onClick={onExchange}\n />\n }\n />\n\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.to\")}\n </Text>\n <Box mt={1}>\n <AccountSelect\n subAccounts={toAccounts}\n value={toAccount}\n onValueChange={onToAccountChange}\n />\n <Flex\n className={cn(\n \"oui-mt-[2px] oui-h-[31px] oui-text-base-contrast-54\",\n \"oui-rounded-b-xl oui-rounded-t-sm\",\n )}\n justify=\"between\"\n itemAlign=\"center\"\n px={3}\n intensity={600}\n >\n <Text size=\"2xs\">\n {t(\"transfer.internalTransfer.currentAssetValue\")}\n </Text>\n <Text.numeral\n size=\"2xs\"\n intensity={54}\n unit={` ${token.symbol}`}\n dp={token?.precision}\n padding={false}\n >\n {toAccountAsset}\n </Text.numeral>\n </Flex>\n </Box>\n </Box>\n\n <Flex justify=\"center\">\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={submitting}\n size={buttonSize}\n onClick={onTransfer}\n >\n {t(\"common.transfer\")}\n </Button>\n </AuthGuard>\n </Box>\n </Flex>\n </Box>\n );\n};\n","import { useState } from \"react\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\n\ntype AccountSelectProps = {\n subAccounts?: SubAccount[];\n value?: SubAccount;\n onValueChange?: (subAccount: SubAccount) => void;\n};\n\nexport const AccountSelect: React.FC<AccountSelectProps> = (props) => {\n const { subAccounts = [], value } = props;\n const [open, setOpen] = useState(false);\n\n const selectable = subAccounts.length > 1;\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-b-sm oui-rounded-t-xl oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto oui-bg-base-6\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n size=\"xs\"\n intensity={80}\n rule={value?.description ? undefined : \"address\"}\n >\n {value?.description || value?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{value?.id}</Text.formatted>\n </Text>\n </Flex>\n {selectable && <ExchangeIcon className=\"oui-text-base-contrast-54\" />}\n </Flex>\n );\n\n const content = subAccounts.map((subAccount, index) => {\n const isActive = subAccount.id === value?.id;\n\n const asset = subAccount?.holding?.find(\n (item) => item.token === \"USDC\",\n )?.holding;\n\n return (\n <Flex\n key={subAccount.id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-transfer-form-account-select-item\",\n \"oui-cursor-pointer oui-py-[6px] hover:oui-bg-base-5\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n props.onValueChange?.(subAccount);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <Flex direction=\"column\" itemAlign=\"start\" className=\"oui-text-2xs\">\n <Text.formatted\n rule={subAccount?.description ? undefined : \"address\"}\n intensity={80}\n >\n {subAccount?.description || subAccount?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{subAccount?.id}</Text.formatted>\n </Text>\n </Flex>\n </Flex>\n <Flex gapX={3}>\n <Text.numeral size=\"2xs\" intensity={54} unit=\" USDC\">\n {asset || 0}\n </Text.numeral>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-transfer-form-account-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-transfer-form-account-select-dropdown-menu-content\",\n \"oui-font-semibold\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content} </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n SubAccount,\n useAccount,\n useConfig,\n useSubAccountDataObserver,\n useSubAccountMaxWithdrawal,\n useTransfer,\n} from \"@orderly.network/hooks\";\nimport { useAppStore } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { getTransferErrorMessage } from \"../../utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\n\nexport type TransferFormScriptReturn = ReturnType<typeof useTransferFormScript>;\n\nexport type TransferFormScriptOptions = {\n /** target sub account id */\n toAccountId?: string;\n token?: string;\n close?: () => void;\n};\n\nconst DEFAULT_TOKEN = {\n symbol: \"USDC\",\n} as API.TokenInfo;\n\nexport const useTransferFormScript = (options: TransferFormScriptOptions) => {\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\"\");\n const [fromAccount, setFromAccount] = useState<SubAccount>();\n const [toAccount, setToAccount] = useState<SubAccount>();\n const [mainAccount, setMainAccount] = useState<SubAccount>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([DEFAULT_TOKEN]);\n const [token, setToken] = useState<API.TokenInfo>(DEFAULT_TOKEN);\n const [holdingMap, setHoldingMap] = useState<Record<string, API.Holding[]>>(\n {},\n );\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { state, isMainAccount, subAccount } = useAccount();\n\n const tokensInfo = 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 \"@orderly.network/i18n\";\nimport { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { registerSimpleSheet } from \"@orderly.network/ui\";\nimport {\n TransferFormScriptOptions,\n useTransferFormScript,\n} from \"./transferForm.script\";\nimport { TransferForm } from \"./transferForm.ui\";\n\nexport const TransferDialogId = \"TransferDialogId\";\nexport const TransferSheetId = \"TransferSheetId\";\n\nexport type TransferFormWidgetProps = TransferFormScriptOptions;\n\nexport const TransferFormWidget = (props: TransferFormWidgetProps) => {\n const state = useTransferFormScript({\n toAccountId: props.toAccountId,\n token: props.token,\n close: props.close,\n });\n return <TransferForm {...state} />;\n};\n\nexport const TransferWidget: FC<TransferFormWidgetProps> = (props) => {\n return (\n <TransferFormWidget\n close={props.close}\n toAccountId={props.toAccountId}\n token={props.token}\n />\n );\n};\n\nregisterSimpleDialog(TransferDialogId, TransferWidget, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n title: () => i18n.t(\"common.transfer\"),\n});\n\nregisterSimpleSheet(TransferSheetId, TransferWidget, {\n title: () => i18n.t(\"common.transfer\"),\n});\n","import React from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ConvertAction } from \"../convertAction\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { SwapCoin } from \"../swapCoin\";\nimport {\n unnormalizeAmount,\n type ConvertFormScriptReturn,\n} from \"./convertForm.script\";\n\nexport type ConvertFormProps = ConvertFormScriptReturn;\n\nexport const ConvertFormUI: React.FC<ConvertFormProps> = (props) => {\n const {\n loading,\n disabled,\n quantity,\n onQuantityChange,\n maxQuantity,\n token,\n targetToken,\n sourceTokens,\n onSourceTokenChange,\n onConvert,\n slippage,\n onSlippageChange,\n convertRate,\n outAmounts,\n minimumReceived,\n isQuoteLoading,\n currentLTV,\n nextLTV,\n networkId,\n balanceRevalidating,\n targetChainInfo,\n } = props;\n\n return (\n <Box className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={token}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={quantity}\n maxQuantity={maxQuantity.toString()}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <ExchangeDivider />\n <QuantityInput\n readOnly\n loading={isQuoteLoading}\n token={targetToken}\n value={\n isQuoteLoading || !quantity || Number.isNaN(Number(outAmounts))\n ? \"\"\n : unnormalizeAmount(outAmounts, targetChainInfo?.decimals ?? 6)\n }\n />\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <SwapCoin\n indexPrice={\n isQuoteLoading || !quantity || Number.isNaN(Number(convertRate))\n ? \"-\"\n : convertRate\n }\n sourceSymbol={token?.token}\n targetSymbol={targetToken?.token}\n />\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n symbol={targetToken?.token || \"\"}\n precision={targetChainInfo?.precision ?? 6}\n value={\n isQuoteLoading ||\n !quantity ||\n Number.isNaN(Number(minimumReceived))\n ? \"-\"\n : unnormalizeAmount(\n minimumReceived.toString(),\n targetChainInfo?.decimals ?? 6,\n )\n }\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n </Flex>\n </Box>\n <Flex itemAlign={\"center\"} justify=\"center\">\n <ConvertAction\n networkId={networkId}\n disabled={disabled}\n loading={loading}\n onConvert={onConvert}\n />\n </Flex>\n </Box>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { Box, Button } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\n\nexport interface ConvertActionButtonProps {\n disabled?: boolean;\n loading?: boolean;\n symbol?: string;\n networkId?: NetworkId;\n onConvert?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const ConvertAction: React.FC<ConvertActionButtonProps> = (props) => {\n const { disabled, loading, networkId, onConvert } = props;\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n status={AccountStatusEnum.EnableTrading}\n networkId={networkId}\n buttonProps={{ fullWidth: true, size: { initial: \"md\", lg: \"lg\" } }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\n size={{ initial: \"md\", lg: \"lg\" }}\n onClick={onConvert}\n >\n {t(\"transfer.convert\")}\n </Button>\n </AuthGuard>\n </Box>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n useConfig,\n useConvert,\n useComputedLTV,\n useLocalStorage,\n useOdosQuote,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport type { NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\nimport { useToken } from \"./hooks/useToken\";\n\nconst { calcMinimumReceived } = account;\n\nexport type ConvertFormScriptReturn = ReturnType<typeof useConvertFormScript>;\n\nconst ORDERLY_CONVERT_SLIPPAGE_KEY = \"orderly_convert_slippage\";\n\nexport interface ConvertFormScriptOptions {\n token?: string;\n close?: () => void;\n}\n\nexport const normalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).mul(new Decimal(10).pow(decimals)).toFixed(0);\n};\n\nexport const unnormalizeAmount = (amount: string, decimals: number) => {\n return new Decimal(amount).div(new Decimal(10).pow(decimals)).toString();\n};\n\nexport const useConvertFormScript = (options: ConvertFormScriptOptions) => {\n const { token: defaultToken, close } = options;\n\n const { t } = useTranslation();\n const [loading, setLoading] = useState<boolean>(false);\n\n const config = useConfig();\n\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const [quantity, setQuantity] = useState<string>(\"\");\n\n const { wrongNetwork } = useAppContext();\n\n const { wallet } = useWalletConnector();\n\n const {\n sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n targetChainInfo,\n } = useToken({ defaultValue: defaultToken });\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_CONVERT_SLIPPAGE_KEY,\n 1,\n );\n\n const { maxAmount, convert } = useConvert({ token: sourceToken?.token });\n\n const onConvert = async () => {\n if (loading) {\n return;\n }\n setLoading(true);\n return convert({\n amount: Number(quantity),\n slippage: new Decimal(slippage).div(100).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.convert.completed\"));\n close?.();\n setQuantity(\"\");\n })\n .catch((err: Error) => {\n toast.error(\n err.message?.includes(\"user rejected\")\n ? t(\"transfer.convert.failed\")\n : err.message,\n );\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const [postQuote, { data: quoteData, isMutating: isQuoteLoading }] =\n useOdosQuote();\n\n useEffect(() => {\n const { quoteChainId, contract_address, decimals } = sourceToken || {};\n const targetAddress = targetChainInfo?.contract_address;\n\n if (quantity && quoteChainId && contract_address && targetAddress) {\n // https://docs.odos.xyz/build/api-docs\n postQuote({\n chainId: parseInt(quoteChainId),\n inputTokens: [\n {\n amount: normalizeAmount(quantity, decimals!),\n tokenAddress: contract_address,\n },\n ],\n outputTokens: [\n {\n proportion: 1,\n tokenAddress: targetAddress,\n },\n ],\n // simple: true,\n });\n }\n }, [quantity, sourceToken, targetChainInfo, postQuote]);\n\n const memoizedOutAmounts = useMemo<string>(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n return quoteData?.outAmounts[0];\n }, [quoteData, isQuoteLoading]);\n\n const memoizedConvertRate = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n\n const rate = new Decimal(\n unnormalizeAmount(\n quoteData.outAmounts[0],\n targetChainInfo?.decimals ?? 6,\n ),\n )\n .div(\n unnormalizeAmount(quoteData.inAmounts[0], sourceToken?.decimals ?? 6),\n )\n .toString();\n return rate;\n }, [isQuoteLoading, quoteData, sourceToken, targetChainInfo]);\n\n const memoizedMinimumReceived = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return 0;\n }\n return calcMinimumReceived({\n amount: quoteData?.outAmounts[0],\n slippage: Number(slippage),\n });\n }, [quoteData, isQuoteLoading, slippage]);\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: Number(quantity),\n token: sourceToken?.token,\n });\n\n const disabled = !quantity || Number(quantity) === 0;\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n token: sourceToken,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n wrongNetwork,\n onConvert,\n hasPositions,\n onSettlePnl,\n networkId,\n slippage,\n onSlippageChange: setSlippage,\n convertRate: memoizedConvertRate,\n minimumReceived: memoizedMinimumReceived,\n outAmounts: memoizedOutAmounts,\n isQuoteLoading,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n targetChainInfo,\n };\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { Arbitrum, type API } from \"@orderly.network/types\";\n\nconst splitTokenBySymbol = <T extends API.Chain>(items: T[]) => {\n return items.reduce<Record<\"usdc\" | \"others\", T[]>>(\n (result, item) => {\n if (item.token?.toUpperCase() === \"USDC\") {\n result.usdc.push(item);\n } else {\n result.others.push(item);\n }\n return result;\n },\n { usdc: [], others: [] },\n );\n};\n\nconst findChainInfo = (tokenInfo: API.Chain) => {\n const arbitrumChainInfo = tokenInfo.chain_details.find(\n (item) => parseInt(item.chain_id) === Arbitrum.id,\n );\n\n const nativeTokenChainInfo = tokenInfo.chain_details.find(\n (item) => !item.contract_address,\n );\n\n const nativeTokenAddress = \"0x0000000000000000000000000000000000000000\";\n\n if (arbitrumChainInfo) {\n return {\n contract_address:\n arbitrumChainInfo.contract_address || nativeTokenAddress,\n quoteChainId: arbitrumChainInfo.chain_id,\n decimals: arbitrumChainInfo.decimals,\n };\n }\n\n if (nativeTokenChainInfo) {\n return {\n contract_address: nativeTokenAddress,\n quoteChainId: nativeTokenChainInfo.chain_id,\n decimals: nativeTokenChainInfo.decimals,\n };\n }\n\n return {\n contract_address: tokenInfo.chain_details[0]?.contract_address,\n quoteChainId: tokenInfo.chain_details[0]?.chain_id,\n decimals: tokenInfo.chain_details[0]?.decimals,\n };\n};\n\ninterface Options {\n defaultValue?: string;\n}\n\ntype ConvertTokenInfo = API.Chain & {\n contract_address: string;\n quoteChainId: string;\n precision: number;\n};\n\nexport const useToken = (options: Options) => {\n const { defaultValue } = options;\n\n const [sourceToken, setSourceToken] = useState<ConvertTokenInfo>();\n const [targetToken, setTargetToken] = useState<ConvertTokenInfo>();\n const [sourceTokens, setSourceTokens] = useState<ConvertTokenInfo[]>([]);\n\n const tokensInfo = useTokensInfo();\n\n const newTokensInfo = useMemo(() => {\n const filteredTokensInfo = tokensInfo.filter((item) => item.on_chain_swap);\n\n return filteredTokensInfo.map((item) => {\n const chainInfo = findChainInfo(item);\n return {\n ...item,\n symbol: item.token,\n precision: item.decimals ?? 6,\n ...chainInfo,\n };\n });\n }, [tokensInfo]);\n\n useEffect(() => {\n const { usdc, others } = splitTokenBySymbol(newTokensInfo);\n setSourceToken(() => {\n if (defaultValue) {\n const defaultToken = others.find(({ token }) => token === defaultValue);\n return defaultToken ? defaultToken : others[0];\n }\n return others[0];\n });\n setSourceTokens(others);\n setTargetToken(usdc[0]);\n }, [defaultValue, newTokensInfo]);\n\n const targetChainInfo = useMemo(() => {\n const info = targetToken?.chain_details?.find(\n (item) => item.chain_id === sourceToken?.quoteChainId,\n );\n return {\n ...info,\n precision: targetToken?.precision,\n };\n }, [sourceToken, targetToken]);\n\n return {\n sourceToken,\n sourceTokens,\n onSourceTokenChange: setSourceToken,\n targetToken,\n targetChainInfo,\n };\n};\n","import React from \"react\";\n// import pick from \"ramda/es/pick\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport type { ConvertFormScriptOptions } from \"./convertForm.script\";\nimport { useConvertFormScript } from \"./convertForm.script\";\nimport { ConvertFormUI } from \"./convertForm.ui\";\n\nexport const ConvertDialogId = \"ConvertDialogId\";\nexport const ConvertSheetId = \"ConvertSheetId\";\n\nexport const ConvertFormWidget: React.FC<ConvertFormScriptOptions> = (\n props,\n) => {\n const state = useConvertFormScript(props);\n return <ConvertFormUI {...state} />;\n};\n\nregisterSimpleDialog(ConvertDialogId, ConvertFormWidget, {\n size: \"md\",\n classNames: { content: \"oui-border oui-border-line-6\" },\n title: () => i18n.t(\"transfer.convert\"),\n});\n\nregisterSimpleSheet(ConvertSheetId, ConvertFormWidget, {\n title: () => i18n.t(\"transfer.convert\"),\n});\n","import React, { FC, ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AssetHistoryStatusEnum } from \"@orderly.network/types\";\nimport { Flex, cn, Text, CloseIcon } from \"@orderly.network/ui\";\nimport { DepositStatusScriptReturn } from \"./depostiStatus.script\";\n\nexport type DepositStatusProps = {\n className?: string;\n classNames?: {\n root?: string;\n items?: string;\n };\n onClick?: () => void;\n} & DepositStatusScriptReturn;\n\nexport const DepositStatus: React.FC<DepositStatusProps> = (props) => {\n const { canTrade, className, classNames, pendingCount, completedCount } =\n props;\n\n if (!canTrade || (pendingCount === 0 && completedCount === 0)) {\n return null;\n }\n\n return (\n <Flex\n direction=\"column\"\n gapY={1}\n width=\"100%\"\n className={cn(className, classNames?.root)}\n >\n <DepositStatusContent\n className={classNames?.items}\n count={pendingCount}\n status={AssetHistoryStatusEnum.PENDING}\n onClick={props.onClick}\n estimatedTime={props.estimatedTime}\n onClose={props.onClose}\n />\n <DepositStatusContent\n className={classNames?.items}\n count={completedCount}\n status={AssetHistoryStatusEnum.COMPLETED}\n onClick={props.onClick}\n onClose={props.onClose}\n />\n </Flex>\n );\n};\n\ntype DepositStatusContentProps = {\n count: number;\n status: AssetHistoryStatusEnum.PENDING | AssetHistoryStatusEnum.COMPLETED;\n onClick?: () => void;\n className?: string;\n estimatedTime?: string | number;\n onClose: (status: AssetHistoryStatusEnum) => void;\n};\n\nexport const DepositStatusContent = (props: DepositStatusContentProps) => {\n const { t } = useTranslation();\n const { count, status, estimatedTime } = props;\n\n const content = useMemo(() => {\n if (status === AssetHistoryStatusEnum.PENDING) {\n return count > 1\n ? t(\"transfer.deposit.status.pending.multiple\")\n : t(\"transfer.deposit.status.pending.one\");\n }\n\n return count > 1\n ? t(\"transfer.deposit.status.completed.multiple\")\n : t(\"transfer.deposit.status.completed.one\");\n }, [t, status, count]);\n\n if (count === 0) {\n return null;\n }\n\n const clickable = typeof props.onClick === \"function\";\n\n const renderContent = () => {\n if (\n status === AssetHistoryStatusEnum.PENDING &&\n count === 1 &&\n estimatedTime\n ) {\n return (\n <Text size=\"2xs\" color=\"primary\">\n ~ {estimatedTime}\n </Text>\n );\n }\n\n return <Badge>{props.count}</Badge>;\n };\n\n return (\n <Flex\n intensity={900}\n gapX={1}\n width=\"100%\"\n r=\"full\"\n className={cn(\n \"oui-px-3 lg:oui-px-0\",\n \"oui-py-2 lg:oui-py-0\",\n props.className,\n )}\n >\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-font-normal\",\n \"oui-text-base-contrast-80 hover:oui-text-base-contrast\",\n clickable && \"oui-cursor-pointer\",\n )}\n width=\"100%\"\n onClick={props.onClick}\n >\n <Flex gapX={1}>\n <Dot\n className={\n status === AssetHistoryStatusEnum.COMPLETED\n ? \"oui-bg-success\"\n : \"oui-bg-primary\"\n }\n />\n <Text size=\"2xs\">{content}</Text>\n </Flex>\n {renderContent()}\n </Flex>\n <CloseIcon\n size={14}\n opacity={1}\n className=\"oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n props.onClose(status);\n }}\n />\n </Flex>\n );\n};\n\nconst Badge: FC<{ className?: string; children: ReactNode }> = (props) => {\n return (\n <Flex\n justify=\"center\"\n itemAlign=\"center\"\n r=\"full\"\n width={18}\n height={18}\n className={cn(\"oui-bg-line-12\", props.className)}\n >\n <Text size=\"3xs\" intensity={80}>\n {props.children}\n </Text>\n </Flex>\n );\n};\n\nconst Dot: FC<{ className?: string }> = (props) => {\n return (\n <div\n className={cn(\n \"oui-mx-[5px] oui-size-2 oui-shrink-0 oui-rounded-full\",\n props.className,\n )}\n />\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useAssetsHistory,\n useBalanceTopic,\n useDebouncedCallback,\n useLocalStorage,\n useTransferHistory,\n useWalletTopic,\n} from \"@orderly.network/hooks\";\nimport {\n AccountStatusEnum,\n API,\n AssetHistorySideEnum,\n AssetHistoryStatusEnum,\n} from \"@orderly.network/types\";\nimport { useTransactionTime } from \"../../contract/useTransactionTime\";\n\nexport type DepositStatusScriptReturn = ReturnType<\n typeof useDepositStatusScript\n>;\n\nfunction getTimeRange() {\n const endTime = Date.now();\n // 1 hour ago\n const startTime = endTime - 1000 * 60 * 60;\n\n return [startTime, endTime];\n}\n\nexport function useDepositStatusScript() {\n const [depositDataRange, setDepositDataRange] = useState(getTimeRange());\n const [transferDataRange, setTransferDataRange] = useState(getTimeRange());\n // only deposit have pending status\n const [depositPending, setDepositPending] = useState(0);\n const [depositCompleted, setDepositCompleted] = useState(0);\n const [transferCompleted, setTransferCompleted] = useState(0);\n const [pendingList, setPendingList] = useState<API.TransferHistoryRow[]>([]);\n\n const [hideNotificationTimeMap, setHideNotificationTimeMap] = useLocalStorage(\n \"orderly_deposit_status_hide_notification_time\",\n {\n [AssetHistoryStatusEnum.PENDING]: 0,\n [AssetHistoryStatusEnum.COMPLETED]: 0,\n },\n );\n\n const { state } = useAccount();\n\n const canTrade =\n state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n const { chainId, blockTime } = useMemo(() => {\n if (canTrade && pendingList.length === 1) {\n return {\n chainId: pendingList[0].chain_id,\n blockTime: pendingList[0].block_time,\n };\n }\n\n return {\n chainId: undefined,\n blockTime: undefined,\n };\n }, [canTrade, pendingList]);\n\n const transactionTime = useTransactionTime(chainId);\n\n // Estimated time remaining = tx_block_time +(total confirmations x average block time) - current time\n const estimatedTime = useMemo(() => {\n if (transactionTime && blockTime) {\n const seconds = blockTime / 1000 + transactionTime - Date.now() / 1000;\n console.log(\"transactionTime\", transactionTime, seconds);\n return formatEstimatedTime(seconds);\n }\n\n return 0;\n }, [transactionTime, blockTime]);\n\n const [assetHistory, { isLoading }] = useAssetsHistory(\n {\n startTime: depositDataRange[0],\n endTime: depositDataRange[1],\n page: 1,\n pageSize: 200,\n side: \"DEPOSIT\",\n },\n {\n shouldUpdateOnWalletChanged: () => false,\n },\n );\n\n // pending and completed use one request to reduce api request, because assets history api limit 10 per 60s\n const [transferHistory] = useTransferHistory({\n dataRange: transferDataRange,\n side: \"IN\",\n size: 200,\n page: 1,\n main_sub_only: false,\n });\n\n // update time range when wallet and balance changed\n // because DEPOSIT and WITHDRAW will push twice COMPLETED event in a shorttime, so we need to debounce it\n // TODO: refresh one when push more than twice again\n const updateDepositTimeRange = useDebouncedCallback((data: any) => {\n setDepositDataRange(getTimeRange());\n }, 300);\n\n useWalletTopic({\n onMessage(data) {\n const { side, transStatus } = data;\n if (\n side === AssetHistorySideEnum.DEPOSIT &&\n (transStatus === AssetHistoryStatusEnum.PENDING ||\n transStatus === AssetHistoryStatusEnum.COMPLETED)\n ) {\n console.log(\"deposit status updated\", data);\n updateDepositTimeRange(data);\n }\n },\n });\n\n // update transfer time range when balance changed\n const updateTransferTimeRange = useDebouncedCallback((data: any) => {\n setTransferDataRange(getTimeRange());\n }, 300);\n\n useBalanceTopic({\n onMessage(data) {\n console.log(\"balance updated\", data);\n updateTransferTimeRange(data);\n },\n });\n\n useEffect(() => {\n if (!assetHistory || isLoading) {\n return;\n }\n const hidePendingNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.PENDING];\n\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n let pendingList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.PENDING,\n );\n\n if (hidePendingNotificationTime) {\n pendingList = pendingList.filter(\n (item) => item.created_time > hidePendingNotificationTime,\n );\n }\n\n let completedList = assetHistory.filter(\n (item) => item.trans_status === AssetHistoryStatusEnum.COMPLETED,\n );\n\n if (hideCompletedNotificationTime) {\n completedList = completedList.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n );\n }\n\n setDepositPending(pendingList?.length || 0);\n setDepositCompleted(completedList?.length || 0);\n setPendingList(pendingList || []);\n }, [assetHistory, isLoading, hideNotificationTimeMap]);\n\n useEffect(() => {\n if (!transferHistory) {\n return;\n }\n const hideCompletedNotificationTime =\n hideNotificationTimeMap[AssetHistoryStatusEnum.COMPLETED];\n\n const completedList = hideCompletedNotificationTime\n ? transferHistory.filter(\n (item) => item.created_time > hideCompletedNotificationTime,\n )\n : transferHistory;\n\n setTransferCompleted(completedList.length);\n }, [transferHistory, hideNotificationTimeMap]);\n\n const completedCount = useMemo(() => {\n return depositCompleted + transferCompleted;\n }, [depositCompleted, transferCompleted]);\n\n const onClose = useCallback(\n (status: AssetHistoryStatusEnum) => {\n setHideNotificationTimeMap({\n ...hideNotificationTimeMap,\n [status]: Date.now(),\n });\n },\n [hideNotificationTimeMap],\n );\n\n return {\n pendingCount: depositPending,\n completedCount,\n canTrade,\n estimatedTime,\n onClose,\n };\n}\n\nfunction formatEstimatedTime(totalSeconds: number) {\n const sec = Math.max(30, totalSeconds);\n let minutes = Math.floor(sec / 60);\n let seconds = sec % 60;\n\n if (seconds > 0 && seconds <= 30) {\n seconds = 30;\n } else if (seconds > 30) {\n minutes += 1;\n seconds = 0;\n }\n\n if (minutes > 0) {\n return seconds > 0 ? `${minutes} m ${seconds} s` : `${minutes} m`;\n }\n\n return `${seconds} s`;\n\n // minutes = Math.max(1, Math.ceil(seconds / 60));\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChains, useWalletConnector } from \"@orderly.network/hooks\";\nimport { getBlockTime } from \"./getBlockTime\";\nimport { getChainConfirmations } from \"./getChainConfirmations\";\n\nexport const useTransactionTime = (chainId?: number | string) => {\n const [blockTime, setBlockTime] = useState(0);\n const [confirmations, setConfirmations] = useState(0);\n const timeMap = useRef<Record<string, number>>({});\n const confirmationsMap = useRef<Record<string, number>>({});\n\n const [, { findByChainId }] = useChains();\n const { wallet } = useWalletConnector();\n\n const chain = useMemo(() => {\n if (!chainId) {\n return;\n }\n const id = typeof chainId === \"number\" ? chainId : Number.parseInt(chainId);\n return findByChainId(id);\n }, [chainId, findByChainId]);\n\n useEffect(() => {\n if (!chain || !wallet) {\n return;\n }\n\n const chainId = chain.network_infos.chain_id;\n\n if (timeMap.current[chainId]) {\n setBlockTime(timeMap.current[chainId]);\n } else {\n getBlockTime({\n chainId,\n chain,\n wallet,\n })\n .then((time) => {\n console.log(\"average block time\", chainId, time);\n setBlockTime(time);\n // record chain block time\n timeMap.current[chainId] = time;\n })\n .catch((error) => {\n console.error(\"getBlockTime error\", error);\n });\n }\n\n if (confirmationsMap.current[chainId]) {\n setConfirmations(confirmationsMap.current[chainId]);\n } else {\n getChainConfirmations(chain)\n .then((confirmations) => {\n console.log(\"confirmations\", chainId, confirmations);\n setConfirmations(confirmations);\n // record chain confirmations\n confirmationsMap.current[chainId] = confirmations;\n })\n .catch((error) => {\n console.error(\"getChainConfirmations error\", error);\n });\n }\n }, [chain, wallet]);\n\n const transactionTime = useMemo(() => {\n if (blockTime && confirmations) {\n return blockTime * confirmations;\n }\n return 0;\n }, [blockTime, confirmations]);\n\n return transactionTime;\n};\n","import { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { isSolana } from \"@orderly.network/utils\";\nimport { getEvmBlockTime } from \"./getEvmBlockTime\";\nimport { getSolanaBlockTime } from \"./getSolanaBlockTime\";\n\n// https://tokenterminal.com/explorer/metrics/block-time\nexport async function getBlockTime(inputs: {\n chainId: number;\n chain: API.Chain;\n wallet: WalletState | null;\n}) {\n const { chainId, chain, wallet } = inputs;\n if (isSolana(chainId)) {\n return getSolanaBlockTime(chain, wallet);\n }\n return getEvmBlockTime(chain);\n}\n","import { ethers } from \"ethers\";\nimport type { API } from \"@orderly.network/types\";\n\nconst blockCount = 5;\n\nexport async function getEvmBlockTime(chain: API.Chain) {\n const provider = new ethers.JsonRpcProvider(\n chain.network_infos.public_rpc_url,\n );\n\n const latest = await provider.getBlockNumber();\n\n const blocks = await Promise.all(\n Array.from({ length: blockCount }, (_, i) => provider.getBlock(latest - i)),\n );\n\n const timestamps = blocks\n .filter((b) => b?.timestamp != null)\n .map((b) => Number(b?.timestamp));\n\n if (timestamps.length < 2) {\n return 0;\n }\n\n let sum = 0;\n for (let i = 0; i < timestamps.length - 1; i++) {\n const diff = timestamps[i] - timestamps[i + 1];\n sum += diff;\n }\n\n return sum / (timestamps.length - 1);\n}\n","import {\n DefaultSolanaWalletAdapter,\n SolanaWalletProvider,\n} from \"@orderly.network/default-solana-adapter\";\nimport { WalletState } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\n\nexport async function getSolanaBlockTime(\n chain: API.Chain,\n wallet: WalletState | null,\n) {\n if (!wallet) {\n return 0;\n }\n\n const walletAdapter = new DefaultSolanaWalletAdapter();\n\n walletAdapter.active({\n address: wallet.accounts[0].address,\n chain: { id: chain.network_infos.chain_id },\n provider: wallet.provider as SolanaWalletProvider,\n });\n\n // console.log(\"walletAdapter\", walletAdapter);\n\n // The Solana RPC node keeps a history of performance samples, typically for a few hours.\n // A limit of 60 samples gives us a good average over the last hour or so.\n const samples =\n await walletAdapter.connection.getRecentPerformanceSamples(60);\n\n let totalBlockTime = 0;\n let validSamples = 0;\n\n for (const sample of samples) {\n if (sample.numSlots > 0 && sample.samplePeriodSecs > 0) {\n const blockTime = sample.samplePeriodSecs / sample.numSlots;\n totalBlockTime += blockTime;\n validSamples++;\n }\n }\n\n return totalBlockTime / validSamples;\n}\n","import { ethers } from \"ethers\";\nimport { API } from \"@orderly.network/types\";\nimport getAppUlnConfigAbi from \"./abi/getAppUlnConfigAbi.json\";\nimport { getEndpointId } from \"./endpointId\";\n\n/**\n * no need to distinguish between EVM and SOL\n */\nexport async function getChainConfirmations(chain: API.Chain) {\n const chainId = chain.network_infos.chain_id;\n const isMainnet = chain.network_infos.mainnet;\n\n const publicRpcUrl = isMainnet\n ? \"https://rpc.orderly.network\"\n : \"https://testnet-rpc.orderly.org\";\n\n // mainnet: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=read_write_contract\n // testnet: https://testnet-explorer.orderly.org/address/0x3013C32e5F45E69ceA9baD4d96786704C2aE148c?tab=read_contract#39e3f938\n const contractAddress = isMainnet\n ? \"0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77\"\n : \"0x3013C32e5F45E69ceA9baD4d96786704C2aE148c\";\n\n const endpointId = getEndpointId(chainId);\n\n const address = \"0x0000000000000000000000000000000000000000\";\n\n const provider = new ethers.JsonRpcProvider(publicRpcUrl);\n\n const contract = new ethers.Contract(\n contractAddress,\n // full abi: https://explorer-orderly-mainnet-0.t.conduit.xyz/address/0xCFf08a35A5f27F306e2DA99ff198dB90f13DEF77?tab=contract_abi\n // this only need to use getAppUlnConfig abi, other functions are not needed\n getAppUlnConfigAbi,\n provider,\n );\n\n const result = await contract.getAppUlnConfig(address, endpointId);\n\n // console.log(\"getChainConfirmations\", chainId, result);\n\n return Number(result.confirmations || 0);\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_oapp\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"_remoteEid\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getAppUlnConfig\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint64\",\n \"name\": \"confirmations\",\n \"type\": \"uint64\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"requiredDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNCount\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"optionalDVNThreshold\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"requiredDVNs\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"optionalDVNs\",\n \"type\": \"address[]\"\n }\n ],\n \"internalType\": \"struct UlnConfig\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n]\n","/**\n * https://docs.layerzero.network/v2/deployments/deployed-contracts\n * Chain ID to Endpoint ID mapping for LayerZero V2\n *\n * This mapping contains all supported chains and their corresponding LayerZero Endpoint IDs.\n *\n * Endpoint ID ranges:\n * - 30xxx: Mainnet chains\n * - 40xxx: Testnet chains\n */\n\nexport const CHAIN_ID_TO_ENDPOINT_ID: Record<number | string, number> = {\n // Ethereum and L2s\n 1: 30101, // Ethereum Mainnet\n 10: 30111, // Optimism Mainnet\n 42161: 30110, // Arbitrum Mainnet\n 137: 30109, // Polygon Mainnet\n 8453: 30184, // Base Mainnet\n 59144: 30183, // Linea Mainnet\n 534352: 30214, // Scroll Mainnet\n 324: 30165, // zkSync Era Mainnet\n 1101: 30158, // Polygon zkEVM Mainnet\n 169: 30217, // Manta Pacific Mainnet\n 5000: 30181, // Mantle Mainnet\n 81457: 30243, // Blast Mainnet\n 252: 30255, // Fraxtal Mainnet\n 34443: 30260, // Mode Mainnet\n 167000: 30290, // Taiko Mainnet\n 7777777: 30195, // Zora Mainnet\n\n // Testnets\n 11155420: 40232, // Optimism Sepolia Testnet\n 421614: 40231, // Arbitrum Sepolia Testnet\n 84532: 40245, // Base Sepolia Testnet\n 300: 40305, // zkSync Sepolia Testnet\n 11155111: 40161, // Ethereum Sepolia Testnet\n 17000: 40217, // Ethereum Holesky Testnet\n\n // BNB Chain and related\n 56: 30102, // BNB Smart Chain (BSC) Mainnet\n 204: 30202, // opBNB Mainnet\n 97: 40102, // BNB Smart Chain (BSC) Testnet\n\n // Avalanche\n 43114: 30106, // Avalanche Mainnet\n 43113: 40106, // Avalanche Fuji Testnet\n\n // Fantom\n 250: 30112, // Fantom Mainnet\n\n // Gnosis\n 100: 30145, // Gnosis Mainnet\n\n // Celo\n 42220: 30125, // Celo Mainnet\n\n // Harmony\n 1666600000: 30116, // Harmony Mainnet\n\n // Cronos\n 25: 30359, // Cronos EVM Mainnet\n 388: 30360, // Cronos zkEVM Mainnet\n\n // Metis\n 1088: 30151, // Metis Mainnet\n\n // Moonbeam/Moonriver\n 1284: 30126, // Moonbeam Mainnet\n 1285: 30167, // Moonriver Mainnet\n\n // Astar\n 592: 30210, // Astar Mainnet\n 3776: 30257, // Astar zkEVM Mainnet\n\n // Canto\n 7700: 30159, // Canto Mainnet\n\n // Fuse\n 122: 30138, // Fuse Mainnet\n\n // Kava\n 2222: 30177, // Kava Mainnet\n\n // Meter\n 82: 30176, // Meter Mainnet\n\n // Near Aurora\n 1313161554: 30211, // Near Aurora Mainnet\n\n // DFK Chain\n 53935: 30115, // DFK Chain\n\n // DOS Chain\n 7979: 30149, // DOS Chain Mainnet\n\n // Degen\n 666666666: 30267, // Degen Mainnet\n\n // Dexalot Subnet\n 432204: 30118, // Dexalot Subnet Mainnet\n\n // Homeverse\n 19011: 30265, // Homeverse Mainnet\n\n // Horizen EON\n 7332: 30215, // Horizen EON Mainnet\n\n // Hubble\n 1992: 30182, // Hubble Mainnet\n\n // Tenet\n 1559: 30173, // Tenet Mainnet\n\n // TelosEVM\n 40: 30199, // TelosEVM Mainnet\n\n // Tiltyard\n 710420: 30238, // Tiltyard Mainnet\n\n // Viction\n 88: 30196, // Viction Mainnet\n\n // XPLA\n 37: 30216, // XPLA Mainnet\n\n // Xai\n 660279: 30236, // Xai Mainnet\n\n // re.al\n 111188: 30237, // re.al Mainnet\n\n // inEVM\n 2525: 30234, // inEVM Mainnet\n\n // Rari Chain\n 1380012617: 30235, // Rari Chain Mainnet\n\n // Shimmer\n 148: 30230, // Shimmer Mainnet\n\n // Skale\n 2046399126: 30273, // Skale Mainnet\n\n // Orderly\n 291: 30213, // Orderly Mainnet\n\n // CoreDAO\n 1116: 30153, // CoreDAO Mainnet\n\n // Conflux eSpace\n 1030: 30212, // Conflux eSpace Mainnet\n\n // Flare\n 14: 30295, // Flare Mainnet\n\n // Gravity\n 1625: 30294, // Gravity Mainnet\n\n // Japan Open Chain\n 81: 30285, // Japan Open Chain Mainnet\n\n // Kaia (formerly Klaytn)\n 8217: 30150, // Kaia Mainnet (formerly Klaytn)\n\n // OKX\n 66: 30155, // OKX Mainnet\n\n // Beam\n 4337: 30198, // Beam Mainnet\n\n // Loot\n 5151706: 30197, // Loot Mainnet\n\n // Lyra\n 957: 30311, // Lyra Mainnet\n\n // Morph\n 2818: 30322, // Morph Mainnet\n\n // Movement\n \"\": 30325, // Movement Mainnet (no chain ID)\n\n // Bouncebit\n 6001: 30293, // Bouncebit Mainnet\n\n // Cyber\n 7560: 30283, // Cyber Mainnet\n\n // Iota\n 8822: 30284, // Iota Mainnet\n\n // Sanko\n 1996: 30278, // Sanko Mainnet\n\n // Sei\n 1329: 30280, // Sei Mainnet\n\n // BOB\n 60808: 30279, // BOB Mainnet\n\n // Bahamut\n 5165: 30363, // Bahamut Mainnet\n\n // Animechain\n 69000: 30372, // Animechain Mainnet\n\n // Ape\n 33139: 30312, // Ape Mainnet\n\n // Berachain\n 80094: 30362, // Berachain Mainnet\n\n // Bevm\n 11501: 30317, // Bevm Mainnet\n\n // Bitlayer\n 200901: 30314, // Bitlayer Mainnet\n\n // Botanix\n 3637: 30376, // Botanix\n\n // Codex\n 81224: 30323, // Codex Mainnet\n\n // Concrete\n 12739: 30366, // Concrete\n\n // DM2 Verse\n 68770: 30315, // DM2 Verse Mainnet\n\n // EDU Chain\n 41923: 30328, // EDU Chain Mainnet\n\n // EVM on Flow\n 747: 30336, // EVM on Flow Mainnet\n\n // Etherlink\n 42793: 30292, // Etherlink Mainnet\n\n // Glue\n 1300: 30342, // Glue Mainnet\n\n // Goat\n 2345: 30361, // Goat Mainnet\n\n // Gunz\n 43419: 30371, // Gunz Mainnet\n\n // Hedera\n 295: 30316, // Hedera Mainnet\n\n // Hemi\n 43111: 30329, // Hemi Mainnet\n\n // HyperEVM\n 999: 30367, // HyperEVM Mainnet\n\n // Initia\n // \"\": 30326, // Initia Mainnet (no chain ID)\n\n // Ink\n 57073: 30339, // Ink Mainnet\n\n // Katana\n 747474: 30375, // Katana\n\n // Lens\n 232: 30373, // Lens Mainnet\n\n // Lightlink\n 1890: 30309, // Lightlink Mainnet\n\n // Lisk\n 1135: 30321, // Lisk Mainnet\n\n // Merlin\n 4200: 30266, // Merlin Mainnet\n\n // Nibiru\n 6900: 30369, // Nibiru Mainnet\n\n // Otherworld Space\n 8227: 30341, // Otherworld Space Mainnet\n\n // Peaq\n 3338: 30302, // Peaq Mainnet\n\n // Plume\n 98866: 30370, // Plume Mainnet\n\n // Reya\n 1729: 30313, // Reya Mainnet\n\n // Rootstock\n 30: 30333, // Rootstock Mainnet\n\n // Soneium\n 1868: 30340, // Soneium Mainnet\n\n // Sonic\n 146: 30332, // Sonic Mainnet\n\n // Sophon\n 50104: 30334, // Sophon Mainnet\n\n // Story\n 1514: 30364, // Story Mainnet\n\n // Subtensor EVM\n 964: 30374, // Subtensor EVM Mainnet\n\n // Superposition\n 55244: 30327, // Superposition Mainnet\n\n // Swell\n 1923: 30335, // Swell Mainnet\n\n // Tac\n 239: 30377, // Tac\n\n // TON\n // \"\": 30343, // TON Mainnet (no chain ID)\n\n // Unichain\n 130: 30320, // Unichain Mainnet\n\n // Vana\n 1480: 30330, // Vana Mainnet\n\n // Worldchain\n 480: 30319, // Worldchain Mainnet\n\n // X Layer\n 196: 30274, // X Layer Mainnet\n\n // XChain\n 94524: 30291, // XChain Mainnet\n\n // XDC\n 50: 30365, // XDC Mainnet\n\n // Zircuit\n 48900: 30303, // Zircuit Mainnet\n\n // zkLink\n 810180: 30301, // zkLink Mainnet\n\n // Abstract\n 2741: 30324, // Abstract Mainnet\n\n // Aptos (non-EVM)\n // 1: 30108, // Aptos Mainnet\n\n // Arbitrum Nova\n 42170: 30175, // Arbitrum Nova Mainnet\n\n // Corn\n 21000000: 30331, // Corn Mainnet\n\n // Initia Testnet\n // \"\": 40326, // Initia Testnet (no chain ID)\n\n // HyperEVM Testnet\n 998: 40362, // HyperEVM Testnet\n\n // Berachain Bepolia Testnet\n 80069: 40371, // Berachain Bepolia Testnet\n\n // Monad Testnet\n 10143: 40204, // Monad Testnet\n\n // Polygon Amoy Testnet\n 80002: 40267, // Polygon Amoy Testnet\n\n // Solana (non-EVM)\n 101: 30168, // Solana Mainnet\n 103: 40168, // Solana Devnet\n 900900900: 30168, // Solana Mainnet\n 901901901: 40168, // Solana Devnet\n\n // Tron\n 728126428: 30420, // Tron Mainnet\n 2494104990: 40420, // Tron Testnet\n};\n\n/**\n * Get Endpoint ID for a given Chain ID\n * @param chainId - The chain ID to look up\n * @returns The corresponding Endpoint ID or undefined if not found\n */\nexport function getEndpointId(chainId: number | string): number | undefined {\n return CHAIN_ID_TO_ENDPOINT_ID[chainId];\n}\n","import React from \"react\";\nimport { useDepositStatusScript } from \"./depostiStatus.script\";\nimport { DepositStatus, DepositStatusProps } from \"./depostiStatus.ui\";\n\nexport type DepositStatusWidgetProps = Pick<\n DepositStatusProps,\n \"className\" | \"onClick\"\n>;\n\nexport const DepositStatusWidget: React.FC<DepositStatusWidgetProps> = (\n props,\n) => {\n const state = useDepositStatusScript();\n return <DepositStatus {...state} {...props} />;\n};\n"]}