@orderly.network/ui-transfer 2.4.2-alpha.0 → 2.5.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +178 -43
- package/dist/index.d.ts +178 -43
- package/dist/index.js +55 -42
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -9
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +15 -10
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/depositForm/depositForm.ui.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/exchangeDivider/index.tsx","../src/components/fee/index.tsx","../src/components/quantityInput/index.tsx","../src/components/quantityInput/tokenOption.tsx","../src/components/quantityInput/useBalance.ts","../src/components/swapCoin/index.tsx","../src/components/web3Wallet/index.tsx","../src/components/depositForm/depositForm.script.tsx","../src/utils.ts","../src/components/depositForm/hooks/useActionType.ts","../src/components/depositForm/hooks/useChainSelect.ts","../src/components/depositForm/hooks/useDepositAction.ts","../src/components/depositForm/hooks/useInputStatus.ts","../src/components/depositForm/hooks/useToken.ts","../src/components/depositForm/depositForm.widget.tsx","../src/components/withdrawForm/withdrawForm.ui.tsx","../src/components/accountIdInput/index.tsx","../src/components/unsettlePnlInfo/index.tsx","../src/components/withdrawAction/index.tsx","../src/components/crossWithdrawConfirm/index.tsx","../src/components/withdrawAction/SwitchChainButton.tsx","../src/components/withdrawWarningMessage/index.tsx","../src/components/withdrawForm/withdrawForm.script.tsx","../src/components/unsettlePnlInfo/useSettlePnl.tsx","../src/components/withdrawForm/withdrawForm.widget.tsx","../src/components/depositAndWithdraw/index.tsx","../src/components/depositAndWithdraw/plugin.tsx","../src/components/transferForm/transferForm.ui.tsx","../src/components/accountSelect/index.tsx","../src/components/transferForm/transferForm.script.tsx","../src/components/transferForm/transferForm.widget.tsx"],"names":["Box","Flex","textVariants","useMemo","Button","AuthGuard","AccountStatusEnum","DepositAction","WithdrawTo","useTranslation","jsx","ActionButton","props","disabled","loading","actionType","symbol","onDeposit","onApprove","networkId","t","buttonParams","buttonSize","Spinner","Text","Decimal","jsxs","AvailableQuantity","amount","maxQuantity","token","name","dp","useAppConfig","useConfig","Fragment","BrokerWallet","appIcons","brokerName","icon","secondary","useState","ChainIcon","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","ScrollArea","cn","ExchangeIcon","ArrowDownIcon","RefreshIcon","TransferVerticalIcon","ChainSelect","chains","value","wrongNetwork","open","setOpen","selectable","chainIcon","chainName","renderRightIcon","trigger","content","chain","index","isActive","e","ExchangeDivider","modal","Fee","dstGasFee","feeQty","feeAmount","nativeSymbol","onShowFee","showFeeQty","forwardRef","useEffect","useRef","Input","Select","inputFormatter","TokenIcon","useBalance","fetchBalance","balance","setBalance","setLoading","err","TokenOption","onTokenChange","precision","showBalance","renderValue","QuantityInput","ref","tokens","classNames","label","status","hintMessage","onValueChange","placeholder","formatters","rest","inputRef","width","setWidth","tokenOptions","rect","_onTokenChange","find","item","optionRenderer","prefix","suffix","event","message","_placeholder","SwapCoin","dst","price","srcSymbol","useAccount","useWalletConnector","ABSTRACT_CHAIN_ID_MAP","WalletIcon","Web3Wallet","wallet","connectedChain","accountState","account","address","DepositForm","quantity","onQuantityChange","inputStatus","currentChain","settingChain","onChainChange","balanceRevalidating","fee","useCallback","useDeposit","useIndexPrice","useAppContext","ChainNamespace","i18n","getTokenByTokenList","tokenObj","acc","feeDecimalsOffset","origin","checkIsAccountId","accountId","getTransferErrorMessage","errorCode","useActionType","options","isNativeToken","allowance","allowanceNum","qty","maxQty","useChains","useLocalStorage","toast","int2hex","praseChainIdToNumber","useChainSelect","linkDeviceStorage","setChain","findByChainId","chainId","chainInfo","switched","error","useEventEmitter","useDepositAction","approve","deposit","enableCustomDeposit","customDeposit","onSuccess","submitting","setSubmitting","ee","res","doDeposit","num","useInputStatus","setInputStatus","setHintMessage","useToken","tokensFilter","setToken","setTokens","onChainInited","newToken","useDepositFormScript","depositFeeRevalidating","depositFee","setQuantity","cleanData","useDepositFee","nativeToken","symbolPrice","DepositFormWidget","state","Trans","Tabs","TabPanel","TextAreaInput","onChange","textareaRef","handleChange","textarea","ExclamationFillIcon","Tooltip","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlePnl","tooltipContent","dialogContent","settlePnlDialog","CrossWithdrawConfirm","networkName","ChainSelectorDialogId","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","checkIsBridgeless","onTransfer","preWithdraw","renderButton","WithdrawWarningMessage","chainVaultBalance","maxAmount","crossChainTrans","showVaultWarning","WithdrawForm","withdrawTo","useContext","OrderlyContext","usePrivateQuery","useQuery","useTransfer","useWalletSubscription","useWithdraw","usePositionStream","useSettlePnl","subAccountId","positionData","markPrice","useWithdrawFormScript","setCrossChainTrans","assetHistory","config","allChains","balanceList","_token","walletName","withdraw","isLoading","availableBalance","availableWithdraw","unsettledPnL","internalWithdrawState","useInternalWithdraw","toAccountId","configStore","apiBaseUrl","vaultBalance","qtyNum","minAmount","useWithdrawFee","showQty","data","trxId","transStatus","close","setWithdrawTo","setToAccountId","transfer","errorMsg","tokenChainsRes","WithdrawFormWidget","dialogProps","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","registerSimpleDialog","registerSimpleSheet","ExtensionPositionEnum","ExtensionSlot","installExtension","installDeposit","DepositSlot","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","DepositAndWithdraw","activeTab","setActiveTab","AccountSelect","subAccounts","subAccount","asset","TransferForm","toAccountAsset","fromAccounts","toAccounts","fromAccount","onFromAccountChange","toAccount","onToAccountChange","onExchange","useSubAccountDataObserver","DEFAULT_TOKEN","useTransferFormScript","setFromAccount","setToAccount","mainAccount","setMainAccount","isMainAccount","currentMaxAmount","currentUnsettledPnL","currentHolding","mainAccountId","observerAccountId","currentHasPositions","portfolio","positions","formHasPositions","holding","_mainAccount","firstSubAccount","selectAccount","TransferDialogId","TransferSheetId","TransferFormWidget","TransferWidget"],"mappings":"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","sourcesContent":["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 { Fee } from \"../fee\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport { UseDepositFormScriptReturn } from \"./depositForm.script\";\n\nexport const DepositForm: FC<UseDepositFormScriptReturn> = (props) => {\n const {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\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 fee,\n } = props;\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\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-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\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={dst as any}\n value={quantity}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <SwapCoin token={token} dst={dst} price={1} />\n <Fee {...fee} />\n </Flex>\n </Box>\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 React, { useMemo } from \"react\";\nimport { Box, Button, ButtonProps } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { DepositAction } from \"../../types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type ActionButtonProps = {\n disabled?: boolean;\n loading?: boolean;\n actionType: DepositAction;\n symbol?: string;\n onDeposit?: () => void;\n onApprove?: () => 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 networkId,\n } = props;\n const { t } = useTranslation();\n\n const buttonParams = useMemo(() => {\n const params: Record<DepositAction, ButtonProps> = {\n [DepositAction.Approve]: {\n children: t(\"transfer.deposit.approve.symbol\", { symbol }),\n onClick: onApprove,\n // approve not disabled button\n disabled: false,\n \"data-testid\": \"oui-testid-deposit-dialog-approve-btn\",\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 Increase,\n}\n\nexport enum WithdrawTo {\n /** withdraw to web3 wallet */\n Wallet = \"wallet\",\n /** withdraw to other account id */\n Account = \"accountId\",\n}\n\nexport type InputStatus = \"error\" | \"warning\" | \"success\" | \"default\";\n","import { FC } from \"react\";\nimport { useTranslation } from \"@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 name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? 2;\n\n return (\n <Flex justify=\"between\" px={2}>\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {amount}\n </Text.numeral>\n </Text>\n\n <Flex gapX={2}>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"common.available\")}: `}\n <Text.numeral\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 {` ${name}`}\n </Text>\n {loading && <Spinner size=\"sm\" />}\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 {\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 { API } from \"@orderly.network/types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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-w-[18px] oui-h-[18px]\" chainId={value?.id} />\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\n className=\"oui-w-[18px] oui-h-[18px]\"\n chainId={chain.chain_id}\n />\n <Text size=\"2xs\" intensity={54}>\n {chain.name}\n </Text>\n {chain.bridgeless && (\n <Flex\n className=\"oui-bg-success-light/15\"\n height={18}\n px={2}\n r=\"base\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Text size=\"2xs\" className=\"oui-text-success-light\">\n {t(\"transfer.lowestFee\")}\n </Text>\n </Flex>\n )}\n </Flex>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-deposit-network-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger 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 { 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 { Box, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { UseFeeReturn } from \"../depositForm/depositForm.script\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype FeeProps = UseFeeReturn;\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 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=\"xs\"\n intensity={36}\n className=\"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\"\n onClick={onShowFee}\n >\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"xs\" 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 { forwardRef, 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 { 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: API.TokenInfo) => void;\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n loading?: boolean;\n testId?: string;\n formatters?: InputFormatter[];\n} & Omit<InputProps, \"onClear\" | \"suffix\" | \"onValueChange\">;\n\nexport const QuantityInput = forwardRef<HTMLInputElement, QuantityInputProps>(\n (props, ref) => {\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 ...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 ...token,\n name: token.display_name || token.symbol!,\n }));\n }, [tokens]);\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 optionRenderer = (item: any) => {\n const isActive = item.symbol === token?.symbol;\n return (\n <TokenOption\n token={item}\n fetchBalance={fetchBalance}\n onTokenChange={(item) => {\n onTokenChange?.(item);\n setOpen(false);\n }}\n isActive={isActive}\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 selectable = tokens.length > 1;\n\n const suffix = (\n <div className=\"oui-absolute oui-right-0\">\n <Select.tokens\n open={selectable ? open : false}\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 data-testid={props.testId}\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);\n","import React from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { cn, Flex, Spinner, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useBalance } from \"./useBalance\";\n\ninterface TokenOptionProps {\n token: API.TokenInfo & {\n label: string;\n value: string;\n };\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n onTokenChange?: (token: API.TokenInfo) => void;\n isActive: boolean;\n index?: number;\n}\n\nexport const TokenOption: React.FC<TokenOptionProps> = (props) => {\n const { token, isActive, onTokenChange, fetchBalance } = props;\n const { symbol, precision } = token;\n const { balance, loading } = useBalance(token, fetchBalance);\n\n const showBalance = typeof fetchBalance === \"function\";\n\n const dp = precision ?? 2;\n\n const renderValue = () => {\n if (!showBalance) {\n return null;\n }\n\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n\n return (\n <Text.numeral\n rule=\"price\"\n dp={dp}\n rm={Decimal.ROUND_DOWN}\n className={cn(\n \"oui-text-base-contrast-80 group-hover:oui-text-base-contrast-54\",\n isActive && \"oui-text-base-contrast-54\",\n )}\n >\n {balance}\n </Text.numeral>\n );\n };\n\n return (\n <Flex\n key={symbol}\n justify=\"between\"\n px={2}\n r=\"base\"\n className={cn(\n \"group\",\n \"oui-h-[30px] hover:oui-bg-base-5\",\n \"oui-text-2xs oui-font-semibold\",\n \"oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n props.index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={() => {\n onTokenChange?.(token);\n }}\n >\n <Flex gapX={1}>\n <TokenIcon name={symbol} className=\"oui-w-[16px] oui-h-[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 {symbol}\n </Text>\n </Flex>\n\n {renderValue()}\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\nimport { useEffect, useState } from \"react\";\n\nexport function useBalance(\n token: API.TokenInfo,\n fetchBalance?: (token: string, decimals: number) => Promise<any>\n) {\n const [balance, setBalance] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n useEffect(() => {\n if (loading || typeof fetchBalance !== \"function\") return;\n setLoading(true);\n fetchBalance(token.address, token.decimals)\n .then((balance) => {\n setBalance(balance);\n })\n .catch((err) => {\n console.error(\"fetchBalance\", err);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [token]);\n\n return { balance, loading };\n}\n","import { FC } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { DST } from \"../../types\";\n\ntype SwapCoinProps = {\n className?: string;\n token?: API.TokenInfo;\n dst?: DST;\n price?: number;\n};\n\nexport const SwapCoin: FC<SwapCoinProps> = (props) => {\n const { token, dst, price } = props;\n\n const srcSymbol = token?.display_name || token?.symbol || \"USDC\";\n\n return (\n <Flex>\n <Text size=\"xs\" intensity={36} className={props.className}>\n <Text size=\"xs\" intensity={80}>\n 1\n </Text>\n {` ${srcSymbol} = `}\n\n {price ? (\n <Text.numeral size=\"xs\" intensity={80} dp={3} padding={false}>\n {price!}\n </Text.numeral>\n ) : (\n \"-\"\n )}\n\n {` ${dst?.symbol}`}\n </Text>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@orderly.network/types\";\nimport { Flex, Text, WalletIcon } from \"@orderly.network/ui\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const address = useMemo(() => {\n let address = accountState.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, accountState, account, connectedChain]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.web3Wallet.your\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"xs\"} name={wallet?.label ?? \"\"} />\n <Text.formatted size=\"sm\" intensity={54} rule=\"address\">\n {address}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport {\n useAccount,\n useConfig,\n useDeposit,\n useIndexPrice,\n} from \"@orderly.network/hooks\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId, ChainNamespace } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { feeDecimalsOffset } from \"../../utils\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n useToken,\n} from \"./hooks\";\n\nexport type UseDepositFormScriptReturn = ReturnType<\n typeof useDepositFormScript\n>;\n\nexport type UseDepositFormScriptOptions = {\n onClose?: () => void;\n};\n\nexport const useDepositFormScript = (options: UseDepositFormScriptOptions) => {\n const { wrongNetwork } = useAppContext();\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const { token, tokens, onTokenChange } = useToken({ currentChain });\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 });\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 cleanData = () => {\n setQuantity(\"\");\n };\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.onClose?.();\n }, [options.onClose]);\n\n const { submitting, onApprove, onDeposit } = useDepositAction({\n quantity,\n allowance,\n approve,\n deposit,\n onSuccess,\n });\n\n const loading = submitting || depositFeeRevalidating!;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n !token ||\n inputStatus === \"error\" ||\n depositFeeRevalidating!;\n\n const amount = useMemo(() => {\n const markPrice = 1;\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity]);\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useDepositFee({\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n });\n\n useEffect(() => {\n cleanData();\n }, [token, currentChain?.id]);\n\n return {\n token,\n tokens,\n onTokenChange,\n amount,\n quantity,\n maxQuantity,\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 fee,\n };\n};\n\nexport type UseFeeReturn = ReturnType<typeof useDepositFee>;\n\nexport function useDepositFee(options: {\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n}) {\n const { nativeToken, depositFee = 0 } = options;\n const { account } = useAccount();\n\n const nativeSymbol = nativeToken?.symbol;\n\n const { data: symbolPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const feeProps = useMemo(() => {\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(symbolPrice || 0).toString();\n\n return {\n dstGasFee,\n feeQty: dstGasFee,\n feeAmount,\n dp: feeDecimalsOffset(4),\n };\n }, [depositFee, symbolPrice]);\n\n return { ...feeProps, nativeSymbol };\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((acc, item) => {\n acc[item.symbol] = item;\n return acc;\n }, {} as any);\n\n return tokenObj[\"USDC\"] || tokenObj[\"USDbC\"] || tokens[0];\n};\n\nexport const feeDecimalsOffset = (origin?: number): number => {\n return (origin ?? 2) + 3;\n};\n\n// export const priceDecimalsOffset = (origin?: number): number => {\n// return Math.abs((origin ?? 2) - 5);\n// };\n\nexport function checkIsAccountId(accountId: string) {\n const regex = /^0x[a-fA-F0-9]{64}$/;\n return regex.test(accountId);\n}\n\nexport function getTransferErrorMessage(errorCode: number) {\n if (errorCode === 34) {\n return i18n.t(\"transfer.internalTransfer.error.transferInProgress\");\n }\n\n if (errorCode === 17) {\n return i18n.t(\"transfer.internalTransfer.error.withdrawalInProgress\");\n }\n\n if (errorCode === 35) {\n return i18n.t(\"transfer.internalTransfer.error.accountIdNotExist\");\n }\n\n if (errorCode === 37) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSelf\");\n }\n\n if (errorCode === 46) {\n return i18n.t(\"transfer.internalTransfer.error.transferToSubAccount\");\n }\n\n // TODO: when api return 500 status, not throw error code\n // if (errorCode === -1000) {\n // return i18n.t(\"transfer.internalTransfer.error.scopeInsufficient\");\n // }\n\n return i18n.t(\"transfer.internalTransfer.error.default\");\n}\n","import { 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.Approve;\n }\n\n const qty = Number(quantity);\n const maxQty = Number(maxQuantity);\n\n if (allowanceNum < qty && qty <= maxQty) {\n return DepositAction.Increase;\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 { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 // if (!connectedChain) return null;\n\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 switched\n ? toast.success(t(\"connector.networkSwitched\"))\n : toast.error(t(\"connector.switchChain.failed\"));\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 { toast } from \"@orderly.network/ui\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 onApprove = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n return approve(quantity)\n .then((res: any) => {\n toast.success(t(\"transfer.deposit.approve.success\"));\n })\n .catch((err) => {\n console.error(\"approve error\", err);\n toast.error(\n err.message || err.errorCode || t(\"transfer.deposit.approve.failed\")\n );\n })\n .finally(() => {\n setSubmitting(false);\n });\n }, [approve, submitting, quantity, allowance, t]);\n\n const doDeposit = useCallback(async () => {\n return deposit()\n .then((res: any) => {\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n })\n .catch((err) => {\n console.error(\"deposit error\", err);\n toast.error(\n err.message || err.errorCode || t(\"transfer.deposit.failed\")\n );\n });\n }, [deposit, onSuccess, t]);\n\n const onDeposit = 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 (!token) {\n // toast.error(\"Please select a token\");\n // return;\n // }\n\n // if (inputStatus !== \"default\") {\n // return;\n // }\n\n if (submitting) return;\n\n setSubmitting(true);\n\n const execDeposit = enableCustomDeposit ? customDeposit : doDeposit;\n\n execDeposit?.()?.finally(() => {\n setSubmitting(false);\n });\n }, [quantity, submitting, doDeposit, enableCustomDeposit, customDeposit, t]);\n\n return { submitting, onApprove, onDeposit };\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 { API } from \"@orderly.network/types\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport { CurrentChain } from \"./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 useDepositFormScript,\n UseDepositFormScriptOptions,\n} from \"./depositForm.script\";\nimport { DepositForm } from \"./depositForm.ui\";\n\nexport type DepositFormWidgetProps = UseDepositFormScriptOptions;\n\nexport const DepositFormWidget: FC<DepositFormWidgetProps> = (props) => {\n const state = useDepositFormScript(props);\n return <DepositForm {...state} />;\n};\n","import { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n textVariants,\n Tabs,\n TabPanel,\n WalletIcon,\n cn,\n} from \"@orderly.network/ui\";\nimport { WithdrawTo } from \"../../types\";\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 = (props: WithdrawFormProps) => {\n const {\n address,\n loading,\n disabled,\n quantity,\n onQuantityChange,\n token,\n amount,\n maxQuantity,\n chains,\n currentChain,\n fee,\n settingChain,\n chainVaultBalance,\n crossChainTrans,\n checkIsBridgeless,\n withdrawTo,\n } = props;\n\n const { t } = useTranslation();\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={token}\n onTokenChange={() => {}}\n status={props.inputStatus}\n hintMessage={props.hintMessage}\n testId=\"oui-testid-withdraw-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={token}\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 // @ts-ignore\n dialogContent={<Trans i18nKey=\"settle.settlePnl.description\" />}\n />\n </Box>\n\n <ExchangeDivider />\n\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={chains}\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={token}\n value={props.showQty}\n readOnly\n />\n </TabPanel>\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 </Tabs>\n\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <Text size=\"xs\" intensity={36}>\n {t(\"common.fee\")}\n {withdrawTo === WithdrawTo.Wallet ? (\n <>\n {\" ≈ \"}\n <Text size=\"xs\" intensity={80}>\n {fee}\n </Text>\n </>\n ) : (\n <>\n {\" = \"}\n <Text size=\"xs\" intensity={80}>\n 0\n </Text>\n </>\n )}\n\n <Text>{` USDC`}</Text>\n </Text>\n </Flex>\n </Box>\n\n <WithdrawWarningMessage\n checkIsBridgeless={checkIsBridgeless}\n chainVaultBalance={chainVaultBalance}\n currentChain={currentChain}\n quantity={quantity}\n maxAmount={maxQuantity}\n crossChainTrans={crossChainTrans}\n />\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","import { Box, Flex } from \"@orderly.network/ui\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { useMemo } from \"react\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n quantity: string;\n chainVaultBalance: number;\n currentChain: any;\n maxAmount: number;\n crossChainTrans: boolean;\n checkIsBridgeless: boolean;\n}\n\nexport const WithdrawWarningMessage = ({\n checkIsBridgeless,\n quantity,\n chainVaultBalance,\n currentChain,\n maxAmount,\n crossChainTrans,\n}: IProps) => {\n const { t } = useTranslation();\n const { wrongNetwork } = useAppContext();\n const { state } = useAccount();\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 const showVaultWarning = useMemo(() => {\n if (!chainVaultBalance) {\n return false;\n }\n if (!maxAmount) {\n return false;\n }\n if (!quantity) {\n return false;\n }\n if (new Decimal(quantity).gt(maxAmount)) {\n return false;\n }\n if (new Decimal(quantity).gt(chainVaultBalance)) {\n return true;\n }\n return false;\n }, [quantity, chainVaultBalance]);\n\n const renderContent = () => {\n if (state.status === AccountStatusEnum.NotConnected) {\n return;\n }\n\n if (wrongNetwork || !checkIsBridgeless) {\n return (\n <Box>\n {networkName\n ? t(\"transfer.withdraw.unsupported.networkName\", {\n networkName,\n })\n : t(\"transfer.withdraw.unsupported.chain\")}\n </Box>\n );\n }\n if (crossChainTrans) {\n return t(\"transfer.withdraw.crossChain.process\");\n }\n if (showVaultWarning) {\n return t(\"transfer.withdraw.crossChain.vaultWarning\", {\n networkName,\n chainVaultBalance,\n });\n }\n };\n\n const content = renderContent();\n\n if (content) {\n return (\n <Flex\n className=\"oui-text-warning-darken oui-text-xs oui-justify-center oui-text-center\"\n mb={3}\n >\n {content}\n </Flex>\n );\n }\n\n return null;\n};\n","import { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n OrderlyContext,\n useAccount,\n useChains,\n useConfig,\n useEventEmitter,\n useLocalStorage,\n usePrivateQuery,\n useQuery,\n useTransfer,\n useWalletConnector,\n useWalletSubscription,\n useWithdraw,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal, int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\nimport { InputStatus, WithdrawTo } from \"../../types\";\nimport { checkIsAccountId, getTransferErrorMessage } from \"../../utils\";\nimport { CurrentChain, useToken } from \"../depositForm/hooks\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\n\nexport type WithdrawFormScriptReturn = ReturnType<typeof useWithdrawFormScript>;\n\nconst markPrice = 1;\n\ntype WithdrawFormScriptOptions = {\n onClose: (() => void) | undefined;\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 { data: assetHistory } = usePrivateQuery<any[]>(\"/v1/asset/history\", {\n revalidateOnMount: true,\n });\n const config = useConfig();\n\n const brokerName = config.get(\"brokerName\");\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const ee = useEventEmitter();\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\n\n const [allChains, { 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 [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { data: balanceList } = useQuery<any>(`/v1/public/vault_balance`, {\n revalidateOnMount: true,\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 : 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 [token, setToken] = useState<API.TokenInfo>({\n // symbol: \"USDC\",\n // decimals: 6,\n // address: \"\",\n // display_name: \"\",\n // precision: 6,\n // });\n const { token: _token } = useToken({ currentChain });\n\n const token = useMemo(() => {\n return {\n ..._token,\n // withdraw display precision is 6\n precision: _token?.precision ?? 6,\n } as API.TokenInfo;\n }, [_token]);\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 const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const {\n dst,\n withdraw,\n isLoading,\n maxAmount,\n availableBalance,\n availableWithdraw,\n unsettledPnL,\n } = useWithdraw({\n decimals: token?.decimals,\n });\n\n const internalWithdrawState = useInternalWithdraw({\n symbol: token.symbol,\n quantity,\n setQuantity,\n close: options.onClose,\n setLoading,\n });\n\n const { withdrawTo, toAccountId } = internalWithdrawState;\n\n const chains = useMemo(() => {\n if (networkId === \"mainnet\") {\n return allChains.filter((item) => item.bridgeless);\n }\n\n return allChains;\n }, [allChains, networkId]);\n\n const { configStore } = useContext(OrderlyContext);\n const apiBaseUrl = configStore.get(\"apiBaseUrl\");\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 (!balanceList || !currentChain) return null;\n // chain.id\n const vaultBalance = balanceList.find(\n (item: any) => parseInt(item.chain_id) === currentChain?.id,\n );\n if (vaultBalance) {\n return vaultBalance.balance;\n }\n return null;\n }, [chains, currentChain, balanceList]);\n\n const crossChainWithdraw = useMemo(() => {\n if (chainVaultBalance !== null) {\n const qtyNum = parseFloat(quantity);\n const value = qtyNum > chainVaultBalance && qtyNum <= maxAmount;\n return value;\n }\n return false;\n }, [quantity, maxAmount, chainVaultBalance]);\n\n const minAmount = useMemo(() => {\n // @ts-ignore;\n return chains.minimum_withdraw_amount ?? 1;\n }, [chains]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n if (new Decimal(quantity).lt(minAmount)) {\n toast.error(\n t(\"transfer.withdraw.minAmount.error\", {\n minAmount,\n }),\n );\n return;\n }\n setLoading(true);\n return withdraw({\n amount: quantity,\n token: \"USDC\",\n // @ts-ignore\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.onClose?.();\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 apiBaseUrl,\n crossChainWithdraw,\n currentChain,\n token: token.symbol,\n });\n\n const showQty = useMemo(() => {\n if (!quantity) {\n return \"\";\n }\n console.log(\"-- qty\", quantity);\n const value = new Decimal(quantity).sub(fee ?? 0);\n if (value.isNegative()) {\n return \"\";\n }\n return value.toNumber();\n }, [fee, quantity]);\n\n useEffect(() => {\n if (!quantity) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n const qty = new Decimal(quantity ?? 0);\n\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 } else {\n if (qty.gt(maxAmount)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else if (\n qty.gt(new Decimal(maxAmount).minus(unsettledPnL)) &&\n qty.lessThanOrEqualTo(maxAmount)\n ) {\n setInputStatus(\"warning\");\n setHintMessage(t(\"settle.settlePnl.warning\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxAmount, unsettledPnL, crossChainTrans]);\n\n const disabled =\n crossChainTrans ||\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus) ||\n (withdrawTo === WithdrawTo.Account && !toAccountId);\n\n useEffect(() => {\n // const item = assetHistory?.find((e: any) => e.trans_status === \"COMPLETED\");\n const item = assetHistory?.find(\n (e: any) => e.trans_status === \"pending_rebalance\".toUpperCase(),\n );\n if (item) {\n setCrossChainTrans(true);\n } else {\n setCrossChainTrans(false);\n }\n }, [assetHistory]);\n\n useWalletSubscription({\n onMessage(data: any) {\n if (!crossChainTrans) return;\n console.log(\"subscribe wallet topic\", data);\n const { trxId, transStatus } = data;\n if (trxId === crossChainTrans && transStatus === \"COMPLETED\") {\n setCrossChainTrans(false);\n }\n },\n });\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n token,\n inputStatus,\n hintMessage,\n dst,\n amount,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n unsettledPnL,\n wrongNetwork,\n settingChain,\n chains,\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 ...internalWithdrawState,\n };\n};\n\ntype InternalWithdrawOptions = {\n symbol: string;\n quantity: string;\n setQuantity: (quantity: string) => void;\n close?: () => void;\n setLoading: (loading: boolean) => void;\n};\n\nfunction useInternalWithdraw(options: InternalWithdrawOptions) {\n const { symbol, quantity, setQuantity, close, setLoading } = options;\n const { t } = useTranslation();\n const [withdrawTo, setWithdrawTo] = useState<WithdrawTo>(WithdrawTo.Wallet);\n const [toAccountId, setToAccountId] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { transfer, submitting } = useTransfer();\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 || !toAccountId) return;\n setLoading(true);\n\n transfer(symbol, {\n account_id: toAccountId,\n amount: new Decimal(quantity).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n close?.();\n })\n .catch((err) => {\n console.log(\"transfer error: \", err, err.code);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [t, quantity, symbol, submitting, toAccountId, transfer]);\n\n useEffect(() => {\n if (!toAccountId) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n if (checkIsAccountId(toAccountId)) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n } else {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.withdraw.accountId.invalid\"));\n }\n }, [toAccountId]);\n\n return {\n withdrawTo,\n setWithdrawTo,\n toAccountId,\n setToAccountId,\n onTransfer,\n internalWithdrawSubmitting: submitting,\n toAccountIdInputStatus: inputStatus,\n toAccountIdHintMessage: hintMessage,\n };\n}\n\nexport function useWithdrawFee(options: {\n apiBaseUrl: string;\n token: string;\n currentChain?: CurrentChain | null;\n crossChainWithdraw: boolean;\n}) {\n const { apiBaseUrl, crossChainWithdraw, currentChain, token } = options;\n\n const { data: tokenChainsRes } = useQuery<any[]>(\n `${apiBaseUrl}/v1/public/token?t=withdraw`,\n {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n // If false, undefined data gets cached against the key.\n revalidateOnMount: true,\n // dont duplicate a request w/ same key for 1hr\n dedupingInterval: 3_600_000,\n },\n );\n\n const fee = useMemo(() => {\n if (!currentChain) return 0;\n\n const tokenChain = tokenChainsRes?.find((item) => item.token === token);\n\n const item = tokenChain?.chain_details?.find(\n (c: any) => parseInt(c.chain_id) === currentChain!.id,\n );\n\n if (!item) {\n return 0;\n }\n\n if (crossChainWithdraw) {\n return (\n // @ts-ignore\n (item.withdrawal_fee || 0) + (item.cross_chain_withdrawal_fee || 0)\n );\n }\n\n return item.withdrawal_fee || 0;\n }, [tokenChainsRes, token, currentChain, crossChainWithdraw]);\n\n return fee;\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 subAccountId?: string;\n};\n\nexport const useSettlePnl = (options?: SettlePnlOptions) => {\n const { subAccountId } = options || {};\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { account } = useAccount();\n const [positionData] = usePositionStream();\n\n const hasPositions = useMemo(\n () => !!positionData?.rows?.length,\n [positionData],\n );\n\n const onSettlePnl = async () => {\n const settleFn = subAccountId\n ? account.settleSubAccount({ subAccountId })\n : account.settle();\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 { DepositAndWithdrawProps } from \"../depositAndWithdraw\";\nimport { useWithdrawFormScript } from \"./withdrawForm.script\";\nimport { WithdrawForm } from \"./withdrawForm.ui\";\n\nexport const WithdrawFormWidget = (dialogProps: DepositAndWithdrawProps) => {\n const props = useWithdrawFormScript({\n onClose: dialogProps.close,\n });\n return <WithdrawForm {...props} />;\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 { WithdrawFormWidget } from \"../withdrawForm\";\nimport { DepositSlot } from \"./plugin\";\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 onClose={props.close} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <WithdrawFormWidget {...props} />\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 {\n ExtensionPositionEnum,\n ExtensionSlot,\n installExtension,\n} from \"@orderly.network/ui\";\nimport { DepositFormWidget } from \"../depositForm\";\nimport { DepositFormWidgetProps } from \"../depositForm/depositForm.widget\";\n\nexport function installDeposit() {\n installExtension<DepositFormWidgetProps>({\n name: \"deposit-form\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.DepositForm],\n __isInternal: true,\n })((props: DepositFormWidgetProps) => {\n return <DepositFormWidget onClose={props.onClose} />;\n });\n}\n\nexport const DepositSlot = (props: DepositFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.DepositForm}\n defaultWidget={DepositFormWidget}\n {...props}\n />\n );\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 size=\"2xs\" intensity={54} unit=\" USDC\">\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 useTransfer,\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 { Decimal } 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 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\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { state, isMainAccount, subAccount } = useAccount();\n\n const {\n transfer,\n submitting,\n maxAmount: currentMaxAmount,\n unsettledPnL: currentUnsettledPnL,\n holding: currentHolding,\n } = useTransfer({ fromAccountId: fromAccount?.id });\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 subAccountId: observerAccountId,\n });\n\n // when select sub account, open the private websocket\n const { portfolio, positions } = useSubAccountDataObserver(observerAccountId);\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, holding, maxQuantity } = useMemo(() => {\n if (observerAccountId) {\n return {\n unsettledPnL: portfolio?.unsettledPnL,\n holding: portfolio?.holding,\n maxQuantity:\n portfolio?.freeCollateral.toDecimalPlaces(6).toNumber() || 0,\n };\n }\n return {\n holding: currentHolding,\n unsettledPnL: currentUnsettledPnL,\n maxQuantity: currentMaxAmount,\n };\n }, [\n observerAccountId,\n portfolio,\n currentHolding,\n currentUnsettledPnL,\n currentMaxAmount,\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.log(\"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 const asset = toAccount?.holding?.find(\n (item) => item.token === token.symbol,\n );\n\n return asset?.holding || 0;\n }, [toAccount, token]);\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 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 // update tokens by current holding\n useEffect(() => {\n const tokens = holding?.map((item) => ({\n symbol: item.token,\n })) as API.TokenInfo[];\n if (tokens?.length) {\n setTokens(tokens);\n setToken(tokens?.[0] || DEFAULT_TOKEN);\n }\n }, [holding]);\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 close: props.close,\n });\n return <TransferForm {...state} />;\n};\n\nexport const TransferWidget: FC<TransferFormWidgetProps> = (props) => {\n return (\n <TransferFormWidget close={props.close} toAccountId={props.toAccountId} />\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/depositForm/depositForm.ui.tsx","../src/components/LTV/ltv.script.tsx","../src/components/LTV/ltv.ui.tsx","../src/components/LTV/ltv.widget.tsx","../src/components/actionButton/index.tsx","../src/types.ts","../src/components/availableQuantity/index.tsx","../src/components/brokerWallet/index.tsx","../src/components/chainSelect/index.tsx","../src/icons.tsx","../src/components/collateralContribution/index.tsx","../src/components/collateralRatio/collateralRatio.ui.tsx","../src/components/collateralRatio/collateralRatio.widget.tsx","../src/components/exchangeDivider/index.tsx","../src/components/fee/index.tsx","../src/components/minimumReceived/index.tsx","../src/components/quantityInput/index.tsx","../src/components/quantityInput/tokenOption.tsx","../src/components/quantityInput/useBalance.ts","../src/components/slippage/index.tsx","../src/components/swap/components/notice.tsx","../src/components/swap/components/swapFee.tsx","../src/components/swapCoin/index.tsx","../src/components/swapIndicator/index.tsx","../src/components/swap/icons.tsx","../src/components/web3Wallet/index.tsx","../src/components/depositForm/depositForm.script.tsx","../src/components/swap/hooks/useNeedSwapAndCross.ts","../src/components/swap/hooks/useSwapDeposit.tsx","../src/components/swap/components/swapDialog.tsx","../src/components/swap/components/crossSwap.tsx","../src/components/swap/hooks/useCrossSwap.ts","../src/components/swap/constants.ts","../src/components/swap/components/processStatus.tsx","../src/components/swap/components/swapDetail.tsx","../src/utils.ts","../src/components/swap/components/viewFAQs.tsx","../src/components/swap/components/singleSwap.tsx","../src/components/swap/hooks/useSwap.ts","../src/components/swap/components/swap.tsx","../src/components/swap/hooks/useSwapEnquiry.ts","../src/components/swap/hooks/useCrossSwapQuery.ts","../src/components/swap/hooks/useSwapQuery.ts","../src/components/swap/hooks/useSwapFee.ts","../src/components/depositForm/hooks/useActionType.ts","../src/components/depositForm/hooks/useChainSelect.ts","../src/components/depositForm/hooks/useDepositAction.ts","../src/components/depositForm/hooks/useInputStatus.ts","../src/components/depositForm/hooks/useToken.ts","../src/components/depositForm/depositForm.widget.tsx","../src/components/withdrawForm/withdrawForm.ui.tsx","../src/components/accountIdInput/index.tsx","../src/components/unsettlePnlInfo/index.tsx","../src/components/withdrawAction/index.tsx","../src/components/crossWithdrawConfirm/index.tsx","../src/components/withdrawAction/SwitchChainButton.tsx","../src/components/withdrawWarningMessage/index.tsx","../src/components/withdrawForm/withdrawForm.script.tsx","../src/components/unsettlePnlInfo/useSettlePnl.tsx","../src/components/withdrawForm/withdrawForm.widget.tsx","../src/components/depositAndWithdraw/index.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/depositAndWithdraw/plugin.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"],"names":["useTranslation","Box","Flex","textVariants","Text","useMemo","useQuery","Decimal","useLtvScript","data","error","isLoading","React","cn","Tooltip","jsx","jsxs","TooltipIcon","props","ref","calculateTextColor","val","TooltipContent","ltv_threshold","t","LtvUI","currentLtv","nextLTV","showDiff","LtvWidget","state","Button","AuthGuard","AccountStatusEnum","DepositAction","WithdrawTo","ActionButton","disabled","loading","actionType","symbol","onDeposit","onApprove","networkId","buttonParams","buttonSize","Spinner","AvailableQuantity","amount","maxQuantity","token","name","dp","useAppConfig","useConfig","Fragment","BrokerWallet","appIcons","brokerName","icon","secondary","useState","ChainIcon","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","ScrollArea","ExchangeIcon","ArrowDownIcon","RefreshIcon","TransferVerticalIcon","ChainSelect","chains","value","wrongNetwork","open","setOpen","selectable","chainIcon","chainName","renderRightIcon","trigger","content","chain","index","isActive","e","CollateralContribution","precision","CollateralRatioUI","CollateralRatioWidget","ExchangeDivider","modal","Fee","dstGasFee","feeQty","feeAmount","nativeSymbol","onShowFee","showFeeQty","MinimumReceived","forwardRef","useEffect","useRef","Input","Select","inputFormatter","Badge","TokenIcon","useBalance","fetchBalance","balance","setBalance","setLoading","err","TokenOption","displayType","onTokenChange","insufficientBalance","showBalance","renderValue","QuantityInput","tokens","classNames","label","status","hintMessage","onValueChange","placeholder","formatters","vaultBalanceList","rest","inputRef","width","setWidth","tokenOptions","currentToken","item","rect","_onTokenChange","find","optionRenderer","prefix","suffix","event","message","AlertDialog","EditIcon","options","Slippage","min","max","setValue","customValue","setCustomValue","showSlippage","hideSlippage","onClick","d","getValue","onConfirm","SlippageItem","Trans","ChainSelectorDialogId","Notice","needSwap","needCrossSwap","showChainSelect","Divider","SwapFee","feeQtys","feeDetails","isEnd","renderFeeQty","len","list","SwapCoin","sourceSymbol","targetSymbol","indexPrice","ArrowRightIcon","GasFeeIcon","TopRightArrowIcon","WoofiIcon","SwapIndicator","sourceToken","targetToken","className","useAccount","useWalletConnector","ABSTRACT_CHAIN_ID_MAP","WalletIcon","Web3Wallet","wallet","connectedChain","accountState","account","address","useCallback","useComputedLTV","useDeposit","useIndexPrice","useIndexPricesStream","useTokenInfo","accountPerp","useAppContext","ChainNamespace","useNeedSwapAndCross","srcToken","dstToken","srcChainId","dstChainId","setNeedSwap","setNeedCrossSwap","isCrossChain","useLocalStorage","SimpleDialog","SimpleSheet","useModal","useScreen","useEventEmitter","WS_WalletStatusEnum","toast","createClient","pick","utils","useAccountInstance","useBoolean","woofiDexCrossSwapChainRouterAbi","woofiDexSwapDepositorAbi","nativeTokenAddress","isNativeTokenChecker","swapSupportApiUrl","useCrossSwap","start","stop","layerStatus","setLayerStatus","ee","bridgeMessage","setBridgeMessage","setStatus","txHashFromBridge","checkLayerStatusListener","config","brokerId","client","timer","handler","side","transStatus","trxId","checkLayerStatus","txHash","messages","dstValutDeposit","inputs","src","dst","crossChainRouteAddress","quotoLZFee","result","CheckedCircleFillIcon","CloseCircleFillIcon","createElement","ProcessStatus","mode","statusUrl","processList","bridgeStatus","getBridgeStatus","depositStatus","getDepositStatus","onOk","isFailed","showDashLine","ProcessItem","title","description","StatusIndicator","Icon","i18n","getTokenByTokenList","tokenObj","acc","feeDecimalsOffset","origin","checkIsAccountId","accountId","getTransferErrorMessage","errorCode","SwapDetail","info","nativePrice","markPrice","nativeToken","viewMode","header","SwapSymbol","divider","listData","listView","ListItem","swapButton","SwapTime","ViewFAQs","CrossSwap","transaction","slippage","chainInfo","depositFee","view","setView","tx","setTx","doCrossSwap","swapStatus","swapInfo","doSwap","res","useSwap","woofiDexDepositorAdress","txPayload","SingleSwap","doSingleSwap","Swap","SwapDialog","isMobile","visible","hide","resolve","reject","onOpenChange","onComplete","isSuccss","onCancel","commonProps","useDebouncedCallback","useWooCrossSwapQuery","queryDestinationFee","params","queryString","key","useWooSwapQuery","useSwapEnquiry","quantity","queryParams","wooSwapQuery","wooCrossSwapQuery","queryParamsRef","setAmount","warningMessage","setWarningMessage","querying","queryStart","queryStop","transactionInfo","setTransactionInfo","enquiry","enquirySuccessHandle","swapFee","bridgeFee","fee","amountValue","cleanTransactionInfo","enquiryErrorHandle","debouncedEnquiry","qty","toNonExponential","useSwapFee","isNativeToken","srcSymbol","destinationGasFee","markPrices","nativeMarkPrice","symbolPrice","nativeDp","srcDp","totalFeeQty","ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY","useSwapDeposit","currentChain","setQuantity","setSlippage","swapAmount","swapRevalidating","cleanData","onSwapDeposit","swapPrice","swapQuantity","useActionType","allowance","allowanceNum","maxQty","useChains","int2hex","praseChainIdToNumber","useChainSelect","linkDeviceStorage","settingChain","setChain","findByChainId","chainId","onChainChange","switched","useDepositAction","approve","deposit","enableCustomDeposit","customDeposit","onSuccess","submitting","setSubmitting","doDeposit","num","useInputStatus","inputStatus","setInputStatus","setHintMessage","useToken","filter","setSourceToken","setTargetToken","sourceTokens","setSourceTokens","targetTokens","setTargetTokens","onChainInited","usdcToken","usdc","collateralRatio","collateralContribution","calcMinimumReceived","SWAP_USDC_PRECISION","useDepositFormScript","onSourceTokenChange","onTargetTokenChange","depositFeeRevalidating","balanceRevalidating","swapWarningMessage","onSlippageChange","userMaxQtyMessage","useDepositFee","collateralContributionQuantity","currentLTV","useCollateralValue","negative_usdc_threshold","isConvertThresholdLoading","useConvertThreshold","gasFeeMessage","targetQuantity","minimumReceived","tokenInfo","indexPrices","memoizedCollateralRatio","DepositForm","onQuantityChange","targetQuantityLoading","renderContent","DepositFormWidget","Tabs","TabPanel","TextAreaInput","onChange","textareaRef","handleChange","textarea","ExclamationFillIcon","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlePnl","tooltipContent","dialogContent","settlePnlDialog","CrossWithdrawConfirm","networkName","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","checkIsBridgeless","onTransfer","preWithdraw","renderButton","WithdrawWarningMessage","chainVaultBalance","maxAmount","crossChainTrans","showVaultWarning","WithdrawForm","tokenChains","withdrawTo","usePrivateQuery","useTransfer","useWalletSubscription","useWithdraw","usePositionStream","useSettlePnl","positionData","useWithdrawFormScript","setCrossChainTrans","assetHistory","walletName","withdraw","unsettledPnL","internalWithdrawState","useInternalWithdraw","toAccountId","vaultBalance","qtyNum","minAmount","useWithdrawFee","showQty","close","setWithdrawTo","setToAccountId","transfer","errorMsg","WithdrawFormWidget","dialogProps","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","registerSimpleDialog","registerSimpleSheet","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","DepositAndWithdraw","activeTab","setActiveTab","SwapDepositForm","tokensFilter","setToken","setTokens","newToken","useSwapDepositFormScript","SwapDepositFormWidget","ExtensionPositionEnum","ExtensionSlot","installExtension","installDeposit","AccountSelect","subAccounts","subAccount","asset","TransferForm","toAccountAsset","fromAccounts","toAccounts","fromAccount","onFromAccountChange","toAccount","onToAccountChange","onExchange","useSubAccountDataObserver","useSubAccountMaxWithdrawal","useTokensInfo","DEFAULT_TOKEN","useTransferFormScript","setFromAccount","setToAccount","mainAccount","setMainAccount","holdingMap","setHoldingMap","isMainAccount","tokensInfo","currentMaxAmount","currentUnsettledPnL","mainAccountId","observerAccountId","currentHasPositions","portfolio","positions","subAccountMaxAmount","formHasPositions","_mainAccount","firstSubAccount","selectAccount","a","b","TransferDialogId","TransferSheetId","TransferFormWidget","TransferWidget","ConvertAction","onConvert","useConvert","useOdosQuote","nativeETHAddress","splitTokenBySymbol","items","predicate","defaultValue","others","defaultToken","ORDERLY_CONVERT_SLIPPAGE_KEY","normalizeAmount","decimals","unnormalizeAmount","useConvertFormScript","_token","convert","postQuote","quoteData","isQuoteLoading","convertRate","ConvertFormUI","ConvertDialogId","ConverSheetId","ConvertFormWidget"],"mappings":"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AQ,CACN,CACE,QAAS,GACT,aAAc,QACd,KAAM,UACN,KAAM,OACR,CACF,EACA,KAAM,cACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,SACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,kBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,KAAM,OACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,qBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,wBACN,QAAS,CACP,CACE,aAAc,YACd,KAAM,GACN,KAAM,WACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,8BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,kBACd,KAAM,KACN,KAAM,SACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,kBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,oBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,aAAc,mDACd,KAAM,kBACN,KAAM,OACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,SACd,KAAM,kBACN,KAAM,QACR,CACF,EACA,KAAM,aACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,eACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,mBACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,oBACN,KAAM,SACR,CACF,EACA,aAAc,4CACd,KAAM,WACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,aAAc,mDACd,KAAM,kBACN,KAAM,OACR,CACF,EACA,KAAM,oBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,0BACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,kBACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,uBACN,KAAM,SACR,CACF,EACA,KAAM,yBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,qBACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,CACF,EACA,KAAM,kBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,OACd,KAAM,oBACN,KAAM,MACR,CACF,EACA,KAAM,sBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,kBACN,KAAM,QACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,SACR,CACF,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,2BACN,KAAM,SACR,CACF,EACA,KAAM,8BACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,UACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,CACF,EACA,KAAM,mBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,aACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,iBACN,QAAS,CACP,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,aACN,KAAM,QACR,EACA,CACE,aAAc,QACd,KAAM,GACN,KAAM,OACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,aAAc,QACd,KAAM,UACN,KAAM,OACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,WACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,UACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,OACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,CACF,EACA,KAAM,4BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,GACN,KAAM,QACR,EACA,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,gBAAiB,UACjB,KAAM,SACR,CACF,EAEaC,GAA2B,CACtC,CAAE,OAAQ,CAAC,EAAG,gBAAiB,aAAc,KAAM,aAAc,EACjE,CACE,UAAW,GACX,OAAQ,CACN,CAAE,QAAS,GAAO,aAAc,QAAS,KAAM,UAAW,KAAM,OAAQ,CAC1E,EACA,KAAM,cACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,SACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CAAE,QAAS,GAAM,aAAc,UAAW,KAAM,KAAM,KAAM,SAAU,EACtE,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACR,EACA,CACE,QAAS,GAC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","sourcesContent":["import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, textVariants, Text } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { ActionButton } from \"../actionButton\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { CollateralContribution } from \"../collateralContribution\";\nimport { CollateralRatioWidget } from \"../collateralRatio\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { Notice } from \"../swap/components/notice\";\nimport { SwapFee } from \"../swap/components/swapFee\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { SwapIndicator } from \"../swapIndicator\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport {\n SWAP_USDC_PRECISION,\n type UseDepositFormScriptReturn,\n} from \"./depositForm.script\";\n\nexport const DepositForm: FC<UseDepositFormScriptReturn> = (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 fetchBalance,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n fee,\n collateralRatio,\n currentLTV,\n nextLTV,\n slippage,\n onSlippageChange,\n minimumReceived,\n needSwap,\n needCrossSwap,\n swapPrice,\n swapFee,\n warningMessage,\n usdcToken,\n targetQuantity,\n targetQuantityLoading,\n } = props;\n\n const { t } = useTranslation();\n\n const renderContent = () => {\n if (needSwap || needCrossSwap) {\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={1} gapY={1}>\n <Flex width={\"100%\"} itemAlign=\"center\" justify=\"between\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.convertRate\")}\n </Text>\n <SwapCoin\n sourceSymbol={sourceToken?.display_name || sourceToken?.symbol}\n targetSymbol={targetToken?.display_name || targetToken?.symbol}\n precision={SWAP_USDC_PRECISION}\n indexPrice={swapPrice}\n />\n </Flex>\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n value={minimumReceived}\n symbol={targetToken?.symbol ?? \"\"}\n precision={SWAP_USDC_PRECISION}\n />\n <SwapFee {...swapFee} />\n </Flex>\n );\n }\n\n return (\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <CollateralRatioWidget value={collateralRatio} />\n <CollateralContribution\n // it need to use USDC precision\n precision={usdcToken?.precision ?? 6}\n value={collateralContributionQuantity}\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n <Fee {...fee} />\n </Flex>\n );\n };\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Web3Wallet />\n <Box mt={3} mb={1}>\n <ChainSelect\n chains={chains}\n value={currentChain!}\n onValueChange={onChainChange}\n wrongNetwork={wrongNetwork}\n loading={settingChain}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n token={sourceToken}\n tokens={sourceTokens}\n onTokenChange={onSourceTokenChange}\n status={inputStatus}\n hintMessage={hintMessage}\n fetchBalance={fetchBalance}\n data-testId=\"oui-testid-deposit-dialog-quantity-input\"\n />\n </Box>\n\n <AvailableQuantity\n token={sourceToken}\n amount={amount}\n maxQuantity={maxQuantity}\n loading={balanceRevalidating}\n onClick={() => {\n onQuantityChange(maxQuantity);\n }}\n />\n\n <ExchangeDivider />\n\n <BrokerWallet />\n\n <QuantityInput\n readOnly\n token={targetToken}\n tokens={targetTokens}\n onTokenChange={onTargetTokenChange}\n value={targetQuantity}\n loading={targetQuantityLoading}\n classNames={{\n root: \"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent\",\n }}\n />\n {renderContent()}\n </Box>\n\n <SwapIndicator\n sourceToken={sourceToken?.symbol}\n targetToken={targetToken?.symbol}\n className=\"oui-mb-3\"\n />\n\n <Notice\n message={warningMessage}\n needSwap={needSwap}\n needCrossSwap={needCrossSwap}\n wrongNetwork={wrongNetwork}\n networkId={networkId}\n />\n\n <Flex justify=\"center\">\n <ActionButton\n actionType={actionType}\n symbol={sourceToken?.symbol}\n disabled={disabled}\n loading={loading}\n onDeposit={onDeposit}\n onApprove={onApprove}\n 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 },\n );\n const ltvThreshold = useMemo(() => {\n if (!data || isLoading) {\n return \"-\";\n }\n return `${new Decimal(data.ltv_threshold).mul(100).toNumber()}%`;\n }, []);\n return {\n ltv_threshold: ltvThreshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n\nexport type LtvScriptReturns = ReturnType<typeof useLtvScript>;\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Tooltip, Text, Box } from \"@orderly.network/ui\";\nimport type { LtvScriptReturns } from \"./ltv.script\";\n\nconst TooltipIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGProps<SVGSVGElement>\n>((props, ref) => {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n});\n\nconst calculateTextColor = (val: number): string => {\n if (val >= 0 && val < 50) {\n return \"oui-text-success\";\n } else if (val >= 50 && val < 80) {\n return \"oui-text-warning\";\n } else if (val >= 80) {\n return \"oui-text-danger\";\n } else {\n return \"\";\n }\n};\n\nconst TooltipContent: React.FC<{\n isLoading: boolean;\n ltv_threshold: string;\n}> = (props) => {\n const { isLoading, ltv_threshold } = props;\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-72 oui-max-w-72\">\n <Text size=\"2xs\" intensity={80}>\n {t(\"transfer.LTV.description\", {\n threshold: isLoading ? \"-\" : ltv_threshold,\n })}\n </Text>{\" \"}\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className={\n \"oui-border-b oui-border-dashed oui-border-line-12 oui-text-2xs oui-text-primary\"\n }\n >\n {t(\"tradingLeaderboard.learnMore\")}\n </a>\n </Box>\n );\n};\n\nexport const LtvUI: React.FC<\n Readonly<\n LtvScriptReturns & {\n currentLtv: number;\n nextLTV: number;\n showDiff?: boolean;\n }\n >\n> = (props) => {\n const { t } = useTranslation();\n const { currentLtv, nextLTV, showDiff, ltv_threshold, isLoading } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.LTV\")}\n </Text>\n <Tooltip\n className=\"oui-p-2\"\n content={\n <TooltipContent\n isLoading={isLoading}\n ltv_threshold={ltv_threshold}\n />\n }\n >\n <TooltipIcon className=\"oui-ml-[2px] oui-cursor-pointer oui-text-base-contrast-36\" />\n </Tooltip>\n </Flex>\n {showDiff ? (\n <Flex itemAlign=\"center\" justify=\"between\" gap={1}>\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n →\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(nextLTV))}\n >\n {nextLTV}%\n </Text>\n </Flex>\n ) : (\n <Text\n size=\"2xs\"\n className={cn(\"oui-font-semibold\", calculateTextColor(currentLtv))}\n >\n {currentLtv}%\n </Text>\n )}\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useLtvScript } from \"./ltv.script\";\nimport { LtvUI } from \"./ltv.ui\";\n\nexport const LtvWidget: React.FC<\n Readonly<{\n currentLtv: number;\n nextLTV: number;\n showDiff?: boolean;\n }>\n> = (props) => {\n const state = useLtvScript();\n return <LtvUI {...props} {...state} />;\n};\n","import React, { useMemo } from \"react\";\nimport { Box, Button, ButtonProps } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { DepositAction } from \"../../types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type ActionButtonProps = {\n disabled?: boolean;\n loading?: boolean;\n actionType: DepositAction;\n symbol?: string;\n onDeposit?: () => void;\n onApprove?: () => 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 networkId,\n } = props;\n const { t } = useTranslation();\n\n const buttonParams = useMemo(() => {\n const params: Record<DepositAction, ButtonProps> = {\n [DepositAction.Approve]: {\n children: t(\"transfer.deposit.approve.symbol\", { symbol }),\n onClick: onApprove,\n // approve not disabled button\n disabled: false,\n \"data-testid\": \"oui-testid-deposit-dialog-approve-btn\",\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 Increase,\n}\n\nexport enum WithdrawTo {\n /** withdraw to web3 wallet */\n Wallet = \"wallet\",\n /** withdraw to other account id */\n Account = \"accountId\",\n}\n\nexport type InputStatus = \"error\" | \"warning\" | \"success\" | \"default\";\n","import { FC } from \"react\";\nimport { useTranslation } from \"@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 name = token?.display_name || token?.symbol || \"\";\n const dp = token?.precision ?? token?.decimals ?? 2;\n\n return (\n <Flex justify=\"between\" px={2}>\n <Text size=\"2xs\" intensity={36}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_DOWN}>\n {amount}\n </Text.numeral>\n </Text>\n\n <Flex gapX={2}>\n <Text size=\"2xs\" intensity={36}>\n {`${t(\"common.available\")}: `}\n <Text.numeral\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 {` ${name}`}\n </Text>\n {loading && <Spinner size=\"sm\" />}\n\n <Text\n size=\"2xs\"\n color=\"primary\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={props.onClick}\n >\n {t(\"common.max\")}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Flex, Text } from \"@orderly.network/ui\";\nimport { useAppConfig } from \"@orderly.network/react-app\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const BrokerWallet: FC = () => {\n const { t } = useTranslation();\n const { appIcons } = useAppConfig();\n const brokerName = useConfig(\"brokerName\");\n\n const icon = useMemo(() => {\n const { secondary } = appIcons || {};\n\n if (!secondary?.img && secondary?.component) return null;\n\n if (secondary?.img) {\n return <img src={secondary?.img} className=\"oui-w-5 oui-h-5\" />;\n }\n\n if (secondary?.component) {\n return <>{secondary.component}</>;\n }\n }, [appIcons]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.brokerAccount\", { brokerName })}\n </Text>\n {icon}\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Box,\n ChainIcon,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\nimport { CurrentChain } from \"../depositForm/hooks\";\n\ntype ChainSelectProps = {\n chains: API.NetworkInfos[];\n value: CurrentChain;\n onValueChange: (chain: API.NetworkInfos) => Promise<void>;\n wrongNetwork: boolean;\n loading?: boolean;\n};\n\nexport const ChainSelect: React.FC<ChainSelectProps> = (props) => {\n const { chains, value, wrongNetwork, loading } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n const selectable = wrongNetwork || chains?.length > 1;\n\n const chainIcon = wrongNetwork ? (\n <Flex\n width={18}\n height={18}\n intensity={100}\n r=\"full\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Text size=\"2xs\" intensity={80}>\n U\n </Text>\n </Flex>\n ) : (\n <ChainIcon className=\"oui-size-[18px]\" chainId={value?.id} />\n );\n\n const chainName = wrongNetwork ? \"Unknown\" : value?.info?.network_infos?.name;\n\n const renderRightIcon = () => {\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n if (selectable) {\n return <ExchangeIcon className=\"oui-text-base-contrast-54\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-t-xl oui-rounded-b-sm oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <div>\n <Flex>\n <Text size=\"2xs\" intensity={54}>\n {t(\"transfer.network\")}\n </Text>\n </Flex>\n <Flex gapX={1}>\n {chainIcon}\n <Text size=\"sm\" intensity={80}>\n {chainName}\n </Text>\n </Flex>\n </div>\n {renderRightIcon()}\n </Flex>\n );\n\n const content = chains.map((chain, index) => {\n const isActive = chain.chain_id === value?.id;\n return (\n <Flex\n key={chain.chain_id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-deposit-network-select-item\",\n \"hover:oui-bg-base-5 oui-h-[30px] oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n await props.onValueChange(chain);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <ChainIcon className=\"oui-size-[18px]\" chainId={chain.chain_id} />\n <Text size=\"2xs\" intensity={54}>\n {chain.name}\n </Text>\n </Flex>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-deposit-network-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-deposit-token-select-dropdown-menu-content\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-rounded-md oui-select-none\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content}</div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import React, { FC, SVGProps } from \"react\";\n\nexport const ExchangeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10.997 8.004a.5.5 0 0 0-.14-.36l-1.86-1.843-.703.703.984 1h-7.28a.5.5 0 0 0 0 1h7.28l-.984 1 .703.703 1.86-1.844a.5.5 0 0 0 .14-.36m-.5-4a.5.5 0 0 0-.5-.5H2.716l.984-1-.703-.703-1.859 1.843a.515.515 0 0 0 0 .719l1.86 1.844.702-.703-.984-1h7.281a.5.5 0 0 0 .5-.5\" />\n </svg>\n);\n\nexport const ArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M9.994 5.51a.83.83 0 0 0-.832.833v6.295l-2.498-2.471-1.17 1.17 3.902 3.929a.84.84 0 0 0 .599.244.84.84 0 0 0 .597-.244l3.903-3.928-1.171-1.171-2.498 2.471V6.343a.83.83 0 0 0-.832-.833\" />\n </svg>\n);\n\nexport const SelectArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M2.503 3.332a.412.412 0 0 0-.326.664l2.5 3.333a.414.414 0 0 0 .664 0l2.5-3.333a.417.417 0 0 0-.338-.664z\" />\n </svg>\n);\n\nexport const RefreshIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.00342 1.49561C4.97642 1.49561 3.99542 1.84011 3.20642 2.46461C2.98992 2.63561 2.95692 2.9511 3.12842 3.1676C3.29992 3.3841 3.61492 3.4171 3.83142 3.2456C4.44492 2.7601 5.20392 2.4956 6.00342 2.4956C7.93642 2.4956 9.50342 4.0626 9.50342 5.9956H8.50342L10.0034 7.9956L11.5034 5.9956H10.5034C10.5034 3.5101 8.48892 1.49561 6.00342 1.49561ZM2.00342 3.9956L0.503418 5.9956H1.50342C1.50342 8.4811 3.51792 10.4956 6.00342 10.4956C7.03092 10.4956 8.01142 10.1516 8.80042 9.52659C9.01692 9.35559 9.04992 9.0401 8.87842 8.8236C8.70692 8.6071 8.39191 8.5741 8.17542 8.7456C7.56142 9.2316 6.80342 9.4956 6.00342 9.4956C4.07042 9.4956 2.50342 7.9286 2.50342 5.9956H3.50342L2.00342 3.9956Z\" />\n </svg>\n);\n\nexport const TransferVerticalIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M12.385 4.565a.6.6 0 0 0-.427.167L9.764 6.944l.837.837 1.19-1.17v8.66a.595.595 0 0 0 1.19 0v-8.66l1.189 1.17.836-.837-2.193-2.212a.6.6 0 0 0-.428-.167m-4.758.595a.595.595 0 0 0-.595.595v8.661l-1.19-1.17-.836.836L7.2 16.294a.61.61 0 0 0 .855 0l2.194-2.212-.837-.836-1.19 1.17V5.755a.595.595 0 0 0-.594-.595\" />\n </svg>\n);\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport const CollateralContribution: React.FC<{\n value: number;\n precision: number;\n}> = (props) => {\n const { t } = useTranslation();\n const { value, precision } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex itemAlign=\"center\" justify=\"start\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"transfer.deposit.collateralContribution\")}\n </Text>\n </Flex>\n <Flex itemAlign=\"center\" justify=\"end\" gap={1}>\n <Text.numeral\n dp={precision}\n size=\"2xs\"\n rm={Decimal.ROUND_DOWN}\n className={cn(\"oui-font-semibold\")}\n padding={false}\n >\n {value}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36} className=\"oui-select-none\">\n USDC\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, Text, Tooltip } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\n// import type { CollateralRatioReturns } from \"./collateralRatio.script\";\n\nconst TooltipIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGProps<SVGSVGElement>\n>((props, ref) => {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n ref={ref}\n {...props}\n >\n <path d=\"M5.999 1.007a5 5 0 1 0 0 10 5 5 0 0 0 0-10m0 2.5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m0 1.5a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-1 0v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n );\n});\n\nconst TooltipContent: React.FC = () => {\n const { t } = useTranslation();\n return (\n <Box className=\"oui-w-72 oui-max-w-72\">\n <Text size=\"2xs\" intensity={80}>\n {t(\"portfolio.overview.column.collateralRatio.explain\")}\n </Text>{\" \"}\n <a\n href=\"https://orderly.network/docs/introduction/trade-on-orderly/multi-collateral\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className={\n \"oui-border-b oui-border-dashed oui-border-line-12 oui-text-2xs oui-text-primary\"\n }\n >\n {t(\"tradingLeaderboard.learnMore\")}\n </a>\n </Box>\n );\n};\n\nexport const CollateralRatioUI: React.FC<{ value: number }> = (props) => {\n const { t } = useTranslation();\n const { value } = props;\n return (\n <Flex width=\"100%\" itemAlign=\"center\" justify=\"between\">\n <Flex justify=\"start\" itemAlign=\"center\">\n <Text size=\"2xs\" intensity={36}>\n {t(\"portfolio.overview.column.collateralRatio\")}\n </Text>\n <Tooltip className=\"oui-p-2\" content={<TooltipContent />}>\n <TooltipIcon className=\"oui-ml-[2px] oui-cursor-pointer oui-text-base-contrast-36\" />\n </Tooltip>\n </Flex>\n <Text.numeral\n dp={2}\n rm={Decimal.ROUND_DOWN}\n coloring\n className=\"oui-font-semibold\"\n rule=\"percentages\"\n >\n {value}\n </Text.numeral>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { CollateralRatioUI } from \"./collateralRatio.ui\";\n\nexport const CollateralRatioWidget: React.FC<{ value: number }> = (props) => {\n return <CollateralRatioUI {...props} />;\n};\n","import { FC, ReactNode } from \"react\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../../icons\";\n\ntype ExchangeDividerProps = {\n icon?: ReactNode;\n};\n\nexport const ExchangeDivider: FC<ExchangeDividerProps> = ({ icon }) => {\n return (\n <Flex height={40} gapX={3}>\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n {icon || <ArrowDownIcon className=\"oui-text-primary-light\" />}\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { type UseDepositFeeReturn } from \"../depositForm/depositForm.script\";\n\nexport const Fee: FC<Partial<UseDepositFeeReturn>> = (props) => {\n const { dstGasFee, feeQty, feeAmount, dp, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={1}>\n <Text size=\"2xs\" intensity={54}>\n {`${t(\"transfer.deposit.destinationGasFee\")}: `}\n </Text>\n <Text.numeral\n intensity={80}\n dp={dp}\n rm={Decimal.ROUND_UP}\n padding={false}\n >\n {feeQty!}\n </Text.numeral>\n <Text intensity={54}>{nativeSymbol}</Text>\n </Flex>\n <Box mt={2}>\n <Text intensity={36}>\n {t(\"transfer.deposit.destinationGasFee.description\")}\n </Text>\n </Box>\n </div>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const showFeeQty = !!dstGasFee && dstGasFee !== \"0\";\n\n return (\n <Text\n size=\"2xs\"\n intensity={36}\n className=\"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\"\n onClick={onShowFee}\n >\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"2xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount!}\n </Text.numeral>{\" \"}\n </Text>\n {showFeeQty && (\n <span>\n (\n <Text intensity={54}>\n <Text.numeral dp={dp} padding={false} rm={Decimal.ROUND_UP}>\n {feeQty!}\n </Text.numeral>\n {nativeSymbol}\n </Text>\n )\n </span>\n )}\n </Text>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { forwardRef, 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: API.TokenInfo) => void;\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n loading?: boolean;\n testId?: string;\n formatters?: InputFormatter[];\n vaultBalanceList?: API.VaultBalance[];\n displayType?: \"balance\" | \"vaultBalance\";\n} & Omit<InputProps, \"onClear\" | \"suffix\" | \"onValueChange\">;\n\nexport const QuantityInput = forwardRef<HTMLInputElement, QuantityInputProps>(\n (props) => {\n const {\n token,\n tokens = [],\n classNames,\n label,\n status,\n hintMessage,\n value,\n onValueChange,\n fetchBalance,\n onTokenChange,\n loading,\n placeholder,\n formatters,\n vaultBalanceList,\n displayType,\n ...rest\n } = props;\n\n const { t } = useTranslation();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [width, setWidth] = useState(0);\n\n const tokenOptions = useMemo(() => {\n return tokens.map((token) => {\n const currentToken = vaultBalanceList?.find(\n (item) => item.token === token.symbol,\n );\n const insufficientBalance = new Decimal(currentToken?.balance ?? 0).lt(\n value ? Number(value) : 0,\n );\n return {\n ...token,\n name: token.display_name || token.symbol!,\n insufficientBalance: insufficientBalance,\n };\n });\n }, [tokens, value, vaultBalanceList]);\n\n useEffect(() => {\n const rect = inputRef?.current?.getBoundingClientRect();\n setWidth(rect?.width || 0);\n }, [inputRef]);\n\n const _onTokenChange = (value: string) => {\n const find = tokens.find((item) => item.symbol === value);\n if (find) {\n onTokenChange?.(find);\n }\n };\n\n const 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 />\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 selectable = tokens.length > 1;\n\n const suffix = (\n <div className=\"oui-absolute oui-right-0\">\n <Select.tokens\n open={selectable ? open : false}\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);\n","import React from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport { Badge, cn, Flex, Spinner, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useBalance } from \"./useBalance\";\n\ninterface TokenOptionProps {\n token: API.TokenInfo & {\n label: string;\n value: string;\n insufficientBalance?: boolean;\n };\n fetchBalance?: (token: string, decimals: number) => Promise<any>;\n onTokenChange?: (token: API.TokenInfo) => void;\n isActive: boolean;\n index?: number;\n displayType?: \"balance\" | \"vaultBalance\";\n}\n\nexport const TokenOption: React.FC<TokenOptionProps> = (props) => {\n const { token, isActive, displayType, onTokenChange, fetchBalance } = props;\n const { symbol, precision, insufficientBalance } = token;\n const { balance, loading } = useBalance(token, fetchBalance);\n\n const showBalance = typeof fetchBalance === \"function\";\n\n const { t } = useTranslation();\n\n if (displayType === \"vaultBalance\" && insufficientBalance) {\n return (\n <Flex\n key={symbol}\n itemAlign={\"center\"}\n justify=\"between\"\n px={2}\n r=\"base\"\n className={cn(\n \"group\",\n \"oui-h-[30px]\",\n \"oui-text-2xs oui-font-semibold\",\n isActive && \"oui-bg-base-5\",\n props.index !== 0 && \"oui-mt-[2px]\",\n \"oui-cursor-not-allowed\",\n )}\n >\n <Flex itemAlign=\"center\" gapX={1}>\n <TokenIcon name={symbol} className=\"oui-size-[16px] oui-opacity-50\" />\n <Text intensity={36}>{symbol}</Text>\n <Badge color=\"neutral\" size=\"xs\">\n {t(\"transfer.withdraw.InsufficientVaultBalance\")}\n </Badge>\n </Flex>\n </Flex>\n );\n }\n\n const renderValue = () => {\n if (!showBalance) {\n return null;\n }\n\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n\n return (\n <Text.numeral\n rule=\"price\"\n dp={precision ?? 2}\n rm={Decimal.ROUND_DOWN}\n className={cn(\n \"oui-text-base-contrast-80 group-hover:oui-text-base-contrast-54\",\n isActive && \"oui-text-base-contrast-54\",\n )}\n >\n {balance}\n </Text.numeral>\n );\n };\n\n return (\n <Flex\n key={symbol}\n justify=\"between\"\n px={2}\n r=\"base\"\n className={cn(\n \"group\",\n \"oui-h-[30px] hover:oui-bg-base-5\",\n \"oui-text-2xs oui-font-semibold\",\n \"oui-cursor-pointer\",\n isActive && \"oui-bg-base-5\",\n props.index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={() => {\n onTokenChange?.(token);\n }}\n >\n <Flex gapX={1}>\n <TokenIcon name={symbol} className=\"oui-size-[16px]\" />\n <Text\n className={cn(\n \"oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80\",\n isActive && \"oui-text-base-contrast-80\",\n )}\n >\n {symbol}\n </Text>\n </Flex>\n {renderValue()}\n </Flex>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport function useBalance(\n token: API.TokenInfo,\n fetchBalance?: (token: string, decimals: number) => Promise<any>,\n) {\n const [balance, setBalance] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n useEffect(() => {\n if (loading || typeof fetchBalance !== \"function\" || !token.address) {\n return;\n }\n setLoading(true);\n fetchBalance(token.address, token.decimals)\n .then((balance) => {\n setBalance(balance);\n })\n .catch((err) => {\n console.error(\"fetchBalance\", err);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [token]);\n\n return { balance, loading };\n}\n","import { FC, useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n AlertDialog,\n Box,\n cn,\n EditIcon,\n Flex,\n Input,\n inputFormatter,\n Text,\n} from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ninterface SlippageProps {\n value?: number;\n onValueChange?: (value: number) => void;\n max?: number;\n min?: number;\n}\n\nconst options = [0.5, 1, 2];\n\nexport const Slippage: FC<SlippageProps> = (props) => {\n const { min = 0.2, max = 10 } = props;\n const [value, setValue] = useState<number>();\n const [customValue, setCustomValue] = useState(\"\");\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.value && !options.includes(props.value!)) {\n setCustomValue(props.value!.toString());\n } else {\n setValue(props.value);\n }\n }, [props.value, open]);\n\n const showSlippage = () => {\n setOpen(true);\n };\n\n const hideSlippage = () => {\n setOpen(false);\n };\n\n const onClick = (val: number) => {\n setValue(val);\n setCustomValue(\"\");\n };\n\n const onValueChange = (val: string) => {\n if (!val || Number(val) === 0) {\n setCustomValue(val);\n return;\n }\n\n const d = new Decimal(val);\n setValue(undefined);\n if (d.lt(min)) {\n setCustomValue(min.toString());\n } else if (d.gt(max)) {\n setCustomValue(max.toString());\n } else {\n setCustomValue(val);\n }\n };\n\n const getValue = () =>\n customValue ? new Decimal(customValue)?.toNumber() : value;\n\n const onConfirm = () => {\n const val = getValue();\n if (!val) return Promise.resolve(true);\n props.onValueChange?.(val);\n hideSlippage();\n // if custom value in options, then clear custom value\n if (options.includes(val)) {\n setCustomValue(\"\");\n }\n return Promise.resolve(true);\n };\n\n const disabled = !getValue();\n\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={2}>\n {options.map((item) => {\n const isActive = value === item;\n return (\n <SlippageItem\n key={item}\n value={item}\n isActive={isActive}\n onClick={() => {\n onClick(item);\n }}\n />\n );\n })}\n\n <Input\n suffix=\"%\"\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n ]}\n value={customValue}\n onValueChange={onValueChange}\n classNames={{\n root: cn(\n \"oui-rounded-md oui-bg-base-6\",\n \"oui-h-[40px] oui-w-[74px]\",\n ),\n input: \"oui-text-base-contrast\",\n additional: \"oui-pl-1\",\n }}\n />\n </Flex>\n\n <Box mt={5}>\n <Text intensity={54}>\n {t(\"transfer.slippage.slippageTolerance.description\")}\n </Text>\n </Box>\n </div>\n );\n\n return (\n <>\n <AlertDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"transfer.slippage.slippageTolerance\")}\n okLabel={t(\"common.confirm\")}\n message={content}\n onOk={onConfirm}\n actions={{ primary: { disabled } }}\n />\n <Flex\n width=\"100%\"\n justify=\"between\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={showSlippage}\n >\n <Text intensity={36} size=\"2xs\">\n {t(\"transfer.slippage\")}\n </Text>\n <Flex gapX={1}>\n <Text size=\"2xs\" color=\"primaryLight\">\n {props.value}%\n </Text>\n <EditIcon className=\"oui-size-3 oui-text-primary-light\" />\n </Flex>\n </Flex>\n </>\n );\n};\n\ntype SlippageItemProps = {\n value: number;\n isActive: boolean;\n onClick: () => void;\n};\n\nconst SlippageItem: FC<SlippageItemProps> = ({ value, isActive, onClick }) => {\n return (\n <Flex\n intensity={600}\n justify=\"center\"\n itemAlign=\"center\"\n r=\"md\"\n width={74}\n height={40}\n className={cn(\n \"oui-cursor-pointer oui-select-none\",\n isActive && \"oui-bg-primary-light\",\n )}\n onClick={onClick}\n >\n <Text size=\"sm\" intensity={80}>\n {value}%\n </Text>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation, Trans } from \"@orderly.network/i18n\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { Box, Text } from \"@orderly.network/ui\";\nimport { modal } from \"@orderly.network/ui\";\nimport { ChainSelectorDialogId } from \"@orderly.network/ui-chain-selector\";\n\ntype NoticeProps = {\n message?: string;\n needSwap?: boolean;\n needCrossSwap?: boolean;\n wrongNetwork?: boolean;\n networkId?: NetworkId;\n};\n\nexport const Notice: FC<NoticeProps> = (props) => {\n const { message, needSwap, needCrossSwap, wrongNetwork, networkId } = props;\n const { t } = useTranslation();\n\n const showChainSelect = () => {\n modal.show(ChainSelectorDialogId, { networkId });\n };\n\n const content = useMemo(() => {\n if (wrongNetwork) {\n return t(\"connector.wrongNetwork.tooltip\");\n }\n\n if (message) {\n return message;\n }\n\n if (needCrossSwap) {\n return (\n <Text>\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"transfer.swapDeposit.crossSwap.notice\"\n components={[\n <Text\n key=\"0\"\n className=\"oui-cursor-pointer\"\n color=\"primaryLight\"\n onClick={showChainSelect}\n />,\n ]}\n />\n </Text>\n );\n }\n\n if (needSwap) {\n return t(\"transfer.swapDeposit.swap.notice\");\n }\n }, [message, needSwap, needCrossSwap, wrongNetwork, t]);\n\n if (content) {\n return (\n <Box\n mb={3}\n className=\"oui-text-center oui-text-xs oui-text-warning-darken\"\n >\n {content}\n </Box>\n );\n }\n\n return null;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Divider, Flex, modal, Text } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { UseSwapFee } from \"../hooks/useSwapFee\";\n\ntype SwapFeeProps = UseSwapFee;\n\nexport const SwapFee: FC<SwapFeeProps> = (props) => {\n const { feeQtys, feeAmount, feeDetails, nativeSymbol } = props;\n const { t } = useTranslation();\n\n const onShowFee = () => {\n const content = (\n <Box className=\"oui-text-2xs\">\n {feeDetails?.map((item, index) => {\n const isEnd = index === feeDetails?.length - 1;\n return (\n <Box key={index}>\n <Flex gapX={1}>\n <Text intensity={54}>{item.title}:</Text>\n {/* TODO: format price in data */}\n <Text\n intensity={80}\n // dp={item.dp}\n // rm={Decimal.ROUND_UP}\n // padding={false}\n >\n {item.value}\n </Text>\n <Text intensity={54}>{item.symbol}</Text>\n </Flex>\n\n <Box mt={2}>\n <Text intensity={36}>{item.description}</Text>\n </Box>\n\n {!isEnd && (\n <Box my={3}>\n <Divider intensity={8} />\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n );\n\n modal.alert({\n title: t(\"common.fee\"),\n message: content,\n });\n };\n\n const renderFeeQty = () => {\n const len = feeQtys?.length;\n if (!len) return;\n\n const list = feeQtys.map((item, index) => {\n return (\n <Text intensity={54} key={index}>\n <Text.numeral dp={item.dp} padding={false} rm={Decimal.ROUND_UP}>\n {item.value}\n </Text.numeral>\n {` ${item.symbol || nativeSymbol}`}\n </Text>\n );\n });\n\n if (len === 1) {\n return <span>({list})</span>;\n }\n\n if (len === 2) {\n return (\n <span>\n ({list[0]} + {list[1]})\n </span>\n );\n }\n };\n\n return (\n <Text\n size=\"xs\"\n intensity={36}\n className=\"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12\"\n onClick={onShowFee}\n >\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount}\n </Text.numeral>\n {` `}\n </Text>\n\n {renderFeeQty()}\n </Text>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex, Text } from \"@orderly.network/ui\";\n\ninterface SwapCoinProps {\n className?: string;\n sourceSymbol?: string;\n targetSymbol?: string;\n indexPrice: number | string;\n precision?: number;\n}\n\nexport const SwapCoin: FC<SwapCoinProps> = (props) => {\n const { sourceSymbol, targetSymbol, indexPrice, precision = 6 } = props;\n return (\n <Flex\n itemAlign=\"center\"\n gap={1}\n className={cn(props.className, \"oui-text-2xs\")}\n >\n <Text size=\"2xs\" intensity={80}>\n 1\n </Text>\n <Text size=\"2xs\" intensity={36}>\n {sourceSymbol}\n </Text>\n =\n <Text.numeral size=\"2xs\" intensity={80} dp={precision} padding={false}>\n {indexPrice}\n </Text.numeral>\n <Text size=\"2xs\" intensity={36}>\n {targetSymbol}\n </Text>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { Flex, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { ArrowRightIcon } from \"../swap/icons\";\n\nexport const SwapIndicator: React.FC<{\n sourceToken?: string;\n targetToken?: string;\n className?: string;\n}> = (props) => {\n const { sourceToken, targetToken, className } = props;\n\n if (sourceToken === targetToken) {\n return null;\n }\n\n return (\n <Flex\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={className}\n >\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={sourceToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {sourceToken}\n </Text>\n </Flex>\n <ArrowRightIcon className=\"oui-size-4\" />\n <Flex itemAlign=\"center\" justify=\"center\" gap={1}>\n <TokenIcon className=\"oui-size-[18px]\" name={targetToken} />\n <Text weight=\"semibold\" intensity={80} size=\"sm\">\n {targetToken}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n","import { FC, SVGProps } from \"react\";\n\nexport const EditIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.498.977a.5.5 0 0 0-.36.14l-1.5 1.501-4.503 4.503-.5.5a.5.5 0 0 0-.125.266l-.5 2.501c-.07.35.228.648.578.579l2.501-.5a.5.5 0 0 0 .266-.126l.5-.5 4.503-4.503 1.5-1.5a.5.5 0 0 0 .141-.36c0-.818-.208-1.403-.64-1.845-.437-.445-1.02-.656-1.861-.656m.197 1.01c.451.026.744.13.944.334.205.21.335.5.363.942-.274.273-.675.668-1.004.997L7.716 2.978c.33-.329.705-.718.979-.992m-1.698 1.71L8.28 4.979 4.496 8.762 3.214 7.48zM2.495 8.199l1.282 1.282-.047.047c-.33.066-.997.206-1.61.329l.328-1.61z\" />\n </svg>\n);\n\nexport const ArrowRightIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"25\"\n viewBox=\"0 0 24 25\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.012 12.493a1 1 0 0 1 .999-1h7.555L11.6 8.498l1.405-1.405 4.714 4.683c.196.195.293.457.293.719 0 .26-.098.522-.293.717l-4.714 4.683L11.6 16.49l2.966-2.997H7.011a1 1 0 0 1-.999-1\" />\n </svg>\n);\n\nexport const GasFeeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4 2.67v10.663h4.667V2.667H4zm6-.003v2.666h1c.218 0 .53.06.806.26.31.223.527.59.527 1.074V12h1V6.667c0-.045 0-.154-.027-.277a.5.5 0 0 0-.11-.252l-1.668-1.667a.667.667 0 0 1 .943-.942l1.667 1.666c.294.294.417.658.472.915.057.264.057.486.057.555V12c0 .484-.217.85-.527 1.074-.277.2-.589.26-.807.26h-1c-.484 0-.85-.217-1.074-.528a1.4 1.4 0 0 1-.26-.806V6.667H10v6.666h.667a.667.667 0 0 1 0 1.334H2a.667.667 0 0 1 0-1.334h.667V2.667c0-.218.06-.53.259-.807.223-.31.59-.527 1.074-.527h4.667c.217 0 .53.06.806.26.31.223.527.59.527 1.074m-4.667 2a.667.667 0 0 0 0 1.333h2a.667.667 0 0 0 0-1.333z\"\n />\n </svg>\n);\n\nexport const TopRightArrowIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"13\"\n height=\"12\"\n viewBox=\"0 0 13 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M8.996 10.496a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2zm-4-2.5a.5.5 0 0 1-.36-.14.515.515 0 0 1 0-.72l2-2-1.14-1.14h3v3l-1.14-1.14-2 2a.5.5 0 0 1-.36.14\" />\n </svg>\n);\n\nexport const WoofiIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#07080A\" />\n <path\n d=\"M5.077 7.385h2.269l1.604 5.28c.106.348.196.73.196.73s.138-.413.28-.742l.885-2.052a1.8 1.8 0 0 1 .66-.782 1.81 1.81 0 0 1 1.974 0c.293.191.523.463.662.782l2.143 4.91v1.095h-1.402c-.235 0-.464-.07-.66-.2a1.17 1.17 0 0 1-.434-.53l-1.303-3.16-1.243 3.152a1.19 1.19 0 0 1-1.105.747h-.848c-.235 0-.465-.075-.654-.214a1.1 1.1 0 0 1-.4-.556z\"\n fill=\"#FEFEFE\"\n />\n <path d=\"m18.146 10.846 1.066-3.461h-2.396l-1.066 3.461z\" fill=\"url(#a)\" />\n <path\n d=\"m15.371 12-1.208 3.865v.009c-.073.216-.194.529-.514.51a.33.33 0 0 1-.207-.058c.211.186.482.29.763.29h1.428a1.065 1.065 0 0 0 .928-.75L17.769 12z\"\n fill=\"url(#b)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"14.618\"\n y1=\"16.592\"\n x2=\"17.597\"\n y2=\"7.455\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n <linearGradient\n id=\"b\"\n x1=\"16.192\"\n y1=\"16.587\"\n x2=\"18.206\"\n y2=\"7.458\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#59B0FE\" />\n <stop offset=\"1\" stopColor=\"#26FEFE\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { FC, useMemo } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@orderly.network/types\";\nimport { Flex, Text, WalletIcon } from \"@orderly.network/ui\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const address = useMemo(() => {\n let address = accountState.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, accountState, account, connectedChain]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.web3Wallet.your\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"xs\"} name={wallet?.label ?? \"\"} />\n <Text.formatted size=\"sm\" intensity={54} rule=\"address\">\n {address}\n </Text.formatted>\n </Flex>\n </Flex>\n );\n};\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport {\n useAccount,\n useConfig,\n useComputedLTV,\n useDeposit,\n useIndexPrice,\n useIndexPricesStream,\n useQuery,\n useTokenInfo,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account as accountPerp } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId, ChainNamespace } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useNeedSwapAndCross } from \"../swap/hooks/useNeedSwapAndCross\";\nimport { useSwapDeposit } from \"../swap/hooks/useSwapDeposit\";\nimport {\n useActionType,\n useChainSelect,\n useDepositAction,\n useInputStatus,\n} from \"./hooks\";\nimport { useToken } from \"./hooks/useToken\";\n\nconst { collateralRatio, collateralContribution, calcMinimumReceived } =\n accountPerp;\n\nexport type UseDepositFormScriptReturn = ReturnType<\n typeof useDepositFormScript\n>;\n\nexport type UseDepositFormScriptOptions = {\n onClose?: () => void;\n};\n// swap to usdc precision is 3\nexport const SWAP_USDC_PRECISION = 3;\n\nexport const useDepositFormScript = (options: UseDepositFormScriptOptions) => {\n const { wrongNetwork } = useAppContext();\n const { t } = useTranslation();\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { chains, currentChain, settingChain, onChainChange } =\n useChainSelect();\n\n const {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n } = useToken(currentChain);\n\n const usdcToken = useMemo(() => {\n return sourceTokens?.find((item) => item.symbol === \"USDC\");\n }, [sourceTokens]);\n\n const {\n dst,\n balance,\n allowance,\n depositFeeRevalidating,\n depositFee,\n quantity,\n setQuantity,\n approve,\n deposit,\n isNativeToken,\n balanceRevalidating,\n fetchBalance,\n } = useDeposit({\n address: sourceToken?.address,\n decimals: sourceToken?.decimals,\n srcChainId: currentChain?.id,\n srcToken: sourceToken?.symbol,\n dstToken: targetToken?.symbol,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n depositorAddress: currentChain?.info?.network_infos?.depositor,\n });\n\n const maxQuantity = useMemo(\n () =>\n new Decimal(balance || 0)\n .todp(sourceToken?.precision ?? 2, Decimal.ROUND_DOWN)\n .toString(),\n [balance, sourceToken?.precision],\n );\n\n const { inputStatus, hintMessage } = useInputStatus({\n quantity,\n maxQuantity,\n });\n\n const { needSwap, needCrossSwap } = useNeedSwapAndCross({\n srcToken: sourceToken,\n dstToken: targetToken,\n srcChainId: currentChain?.id,\n dstChainId: dst?.chainId,\n });\n\n const {\n cleanTransactionInfo,\n onSwapDeposit,\n swapRevalidating,\n\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n warningMessage: swapWarningMessage,\n slippage,\n onSlippageChange,\n } = useSwapDeposit({\n srcToken: sourceToken!,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSuccess = useCallback(() => {\n cleanData();\n options.onClose?.();\n }, [cleanData, options.onClose]);\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 userMaxQtyMessage = useMemo(() => {\n if (\n sourceToken?.symbol === \"USDC\" ||\n sourceToken?.symbol !== targetToken?.symbol ||\n !sourceToken?.is_collateral ||\n !quantity ||\n isNaN(Number(quantity))\n ) {\n return \"\";\n }\n\n if (new Decimal(quantity).gt(sourceToken?.user_max_qty)) {\n return t(\"transfer.deposit.userMaxQty.error\", {\n maxQty: sourceToken?.user_max_qty,\n token: sourceToken?.symbol,\n });\n }\n return \"\";\n }, [sourceToken, targetToken, quantity, t]);\n\n const loading = submitting || depositFeeRevalidating!;\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n !sourceToken ||\n inputStatus === \"error\" ||\n depositFeeRevalidating! ||\n swapRevalidating ||\n // if exceed collateral cap, disable deposit\n !!userMaxQtyMessage;\n\n const amount = useMemo(() => {\n const markPrice = 1;\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity]);\n\n const actionType = useActionType({\n isNativeToken,\n allowance,\n quantity,\n maxQuantity,\n });\n\n const fee = useDepositFee({\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n });\n\n const {\n collateralRatio,\n collateralContributionQuantity,\n currentLTV,\n nextLTV,\n indexPrice,\n } = useCollateralValue({\n tokens: sourceTokens,\n sourceToken,\n targetToken,\n qty: quantity,\n });\n\n const {\n ltv_threshold,\n negative_usdc_threshold,\n isLoading: isConvertThresholdLoading,\n } = useConvertThreshold();\n\n useEffect(() => {\n cleanData();\n }, [sourceToken, currentChain?.id]);\n\n const gasFeeMessage = useMemo(() => {\n if (isNativeToken && maxQuantity === quantity) {\n return t(\"transfer.deposit.gasFee.error\", {\n token: sourceToken?.symbol,\n });\n }\n }, [maxQuantity, quantity, sourceToken?.symbol, t]);\n\n const warningMessage =\n swapWarningMessage || userMaxQtyMessage || gasFeeMessage;\n\n // const isCollateralNativeToken = useMemo(() => {\n // return (\n // sourceToken?.is_collateral &&\n // sourceToken?.symbol === targetToken?.symbol &&\n // isNativeToken &&\n // !needSwap &&\n // !needCrossSwap\n // );\n // }, [sourceToken, targetToken, isNativeToken, needSwap, needCrossSwap]);\n\n const targetQuantity = useMemo(() => {\n if (needSwap) {\n return swapQuantity\n ? new Decimal(swapQuantity)\n ?.todp(SWAP_USDC_PRECISION, Decimal.ROUND_DOWN)\n .toString()\n : swapQuantity;\n }\n return quantity;\n }, [needSwap, swapQuantity, quantity]);\n\n // only swap deposit show minimum received\n const minimumReceived = useMemo(() => {\n if (!swapQuantity) {\n return \"-\";\n }\n return calcMinimumReceived({\n amount: Number(swapQuantity),\n slippage,\n });\n }, [swapQuantity, slippage]);\n\n const targetQuantityLoading = swapRevalidating;\n\n return {\n sourceToken,\n targetToken,\n sourceTokens,\n targetTokens,\n onSourceTokenChange,\n onTargetTokenChange,\n\n amount,\n isNativeToken,\n quantity,\n collateralContributionQuantity,\n maxQuantity,\n indexPrice,\n onQuantityChange: setQuantity,\n hintMessage,\n inputStatus,\n chains,\n currentChain,\n settingChain,\n onChainChange,\n actionType,\n onDeposit,\n onApprove,\n fetchBalance,\n dst,\n wrongNetwork,\n balanceRevalidating,\n loading,\n disabled,\n networkId,\n fee,\n collateralRatio,\n currentLTV,\n nextLTV,\n ltv_threshold,\n negative_usdc_threshold,\n isConvertThresholdLoading,\n slippage,\n onSlippageChange,\n minimumReceived,\n usdcToken,\n\n needSwap,\n needCrossSwap,\n swapPrice,\n markPrice,\n swapFee,\n warningMessage,\n targetQuantity,\n targetQuantityLoading,\n };\n};\n\nexport type UseDepositFeeReturn = ReturnType<typeof useDepositFee>;\n\nfunction useDepositFee(options: {\n nativeToken?: API.TokenInfo;\n depositFee?: bigint;\n}) {\n const { nativeToken, depositFee = 0 } = options;\n const { account } = useAccount();\n\n const nativeSymbol = nativeToken?.symbol;\n const tokenInfo = useTokenInfo(nativeSymbol!);\n\n const { data: indexPrice } = useIndexPrice(`SPOT_${nativeSymbol}_USDC`);\n\n const feeProps = useMemo(() => {\n // deposit fee is native token, so decimals is 18\n const dstGasFee = new Decimal(depositFee.toString())\n // todo solana is 9, evm is 18\n .div(\n new Decimal(10).pow(\n account.walletAdapter?.chainNamespace === ChainNamespace.solana\n ? 9\n : 18,\n ),\n )\n .toString();\n\n const feeAmount = new Decimal(dstGasFee).mul(indexPrice || 0).toString();\n\n return {\n dstGasFee,\n feeQty: dstGasFee,\n feeAmount,\n // dp: feeDecimalsOffset(4),\n dp: tokenInfo?.decimals || 8,\n };\n }, [depositFee, indexPrice]);\n\n return { ...feeProps, nativeSymbol };\n}\n\nconst useCollateralValue = (params: {\n tokens: API.TokenInfo[];\n sourceToken?: API.TokenInfo;\n targetToken?: API.TokenInfo;\n qty: string;\n}) => {\n const { sourceToken, targetToken } = params;\n\n const quantity = Number(params.qty);\n\n const { data: indexPrices } = useIndexPricesStream();\n\n const indexPrice = useMemo(() => {\n if (sourceToken?.symbol === \"USDC\") {\n return 1;\n }\n const symbol = `PERP_${sourceToken?.symbol}_USDC`;\n return indexPrices[symbol] ?? 0;\n }, [sourceToken?.symbol, indexPrices]);\n\n const memoizedCollateralRatio = useMemo<number>(() => {\n return collateralRatio({\n baseWeight: targetToken?.base_weight ?? 0,\n discountFactor: targetToken?.discount_factor ?? 0,\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n indexPrice: indexPrice,\n });\n }, [targetToken, quantity, sourceToken?.user_max_qty, indexPrice]);\n\n const collateralContributionQuantity = collateralContribution({\n collateralQty: quantity,\n collateralCap: sourceToken?.user_max_qty ?? quantity,\n collateralRatio: memoizedCollateralRatio,\n indexPrice: indexPrice,\n });\n\n const currentLtv = useComputedLTV();\n\n const nextLTV = useComputedLTV({\n input: quantity,\n token: sourceToken?.symbol,\n });\n\n return {\n collateralRatio: memoizedCollateralRatio,\n collateralContributionQuantity,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n indexPrice,\n };\n};\n\nconst useConvertThreshold = () => {\n const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n \"/v1/public/auto_convert_threshold\",\n {\n errorRetryCount: 3,\n },\n );\n return {\n ltv_threshold: data?.ltv_threshold,\n negative_usdc_threshold: data?.negative_usdc_threshold,\n isLoading,\n error,\n } as const;\n};\n","import { useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\n\nexport function useNeedSwapAndCross(options: {\n srcToken?: API.TokenInfo;\n dstToken?: API.TokenInfo;\n srcChainId?: number;\n dstChainId?: number;\n}) {\n const { srcToken, dstToken, srcChainId, dstChainId } = options;\n const [needSwap, setNeedSwap] = useState(false);\n const [needCrossSwap, setNeedCrossSwap] = useState(false);\n\n useEffect(() => {\n if (!srcChainId || !dstChainId || !srcToken || !dstToken) return;\n const isCrossChain = srcChainId !== dstChainId;\n\n if (\n (srcToken?.symbol === \"USDC\" && !isCrossChain) ||\n // if srcToken is collateral and srcToken.symbol is the same as dstToken.symbol, it will not need swap\n (srcToken.is_collateral && srcToken.symbol === dstToken?.symbol)\n ) {\n setNeedSwap(false);\n setNeedCrossSwap(false);\n return;\n }\n\n setNeedSwap(srcToken?.symbol !== \"USDC\");\n\n if (isCrossChain) {\n setNeedCrossSwap(true);\n setNeedSwap(true);\n } else {\n setNeedCrossSwap(false);\n }\n }, [srcToken, dstToken, srcChainId, dstChainId]);\n\n return { needSwap, needCrossSwap };\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useConfig, useLocalStorage } from \"@orderly.network/hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { modal } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { CurrentChain } from \"../../depositForm/hooks/useChainSelect\";\nimport { SwapDialog } from \"../components/swapDialog\";\nimport { DST, SwapMode } from \"../types\";\nimport { useSwapEnquiry } from \"./useSwapEnquiry\";\nimport { useSwapFee } from \"./useSwapFee\";\n\ntype SwapDepositOptions = {\n srcToken: API.TokenInfo;\n currentChain?: CurrentChain | null;\n dst: DST;\n quantity: string;\n isNativeToken: boolean;\n depositFee: bigint;\n setQuantity: (quantity: string) => void;\n needSwap: boolean;\n needCrossSwap: boolean;\n};\n\nconst ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY = \"orderly_swap_deposit_slippage\";\n\nexport const useSwapDeposit = (options: SwapDepositOptions) => {\n const {\n srcToken,\n currentChain,\n dst,\n quantity,\n isNativeToken,\n depositFee,\n setQuantity,\n needSwap,\n needCrossSwap,\n } = options;\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_SWAP_DEPOSIT_SLIPPAGE_KEY,\n 1,\n );\n\n const config = useConfig();\n const brokerName = config.get(\"brokerName\") || \"\";\n\n const {\n enquiry,\n transactionInfo,\n amount: swapAmount,\n querying: swapRevalidating,\n warningMessage,\n cleanTransactionInfo,\n } = useSwapEnquiry({\n quantity,\n dst,\n queryParams: {\n network: dst.network,\n srcNetwork: currentChain?.info?.network_infos?.shortName,\n srcToken: srcToken?.address,\n dstToken: dst.address,\n crossChainRouteAddress:\n currentChain?.info?.network_infos?.cross_chain_router,\n amount: new Decimal(quantity || 0)\n .mul(10 ** (srcToken?.decimals || 0))\n .toString(),\n slippage,\n },\n needSwap,\n needCrossSwap,\n });\n\n const cleanData = useCallback(() => {\n setQuantity(\"\");\n cleanTransactionInfo();\n }, [setQuantity]);\n\n const onSwapDeposit = useCallback(async () => {\n // const _params = getSwapTestData(needCrossSwap);\n // return modal.show(SwapDialog, _params);\n\n return enquiry()\n .then((transaction) => {\n const amountValue = needCrossSwap\n ? transaction.route_infos?.dst.amounts[1]\n : transaction.route_infos?.amounts[1];\n\n const params = {\n mode: needCrossSwap ? SwapMode.Cross : SwapMode.Single,\n src: {\n chain: currentChain?.id,\n token: srcToken!.symbol,\n // swap precision\n displayDecimals: srcToken?.precision,\n amount: quantity,\n decimals: srcToken!.decimals,\n },\n dst: {\n chain: dst.chainId,\n token: dst.symbol,\n displayDecimals: 2,\n amount: new Decimal(amountValue)\n .div(Math.pow(10, dst.decimals!))\n .toString(),\n decimals: dst.decimals,\n },\n chain: currentChain?.info?.network_infos,\n nativeToken: currentChain?.info?.nativeToken,\n depositFee,\n transactionData: transaction,\n slippage,\n brokerName,\n };\n\n return modal.show(SwapDialog, params);\n })\n .then((isSuccss) => {\n if (isSuccss) {\n cleanData();\n }\n })\n .catch((error) => {\n // toast.error(error?.message || \"Error\");\n });\n }, [quantity, needCrossSwap, dst, currentChain, slippage, depositFee]);\n\n const swapPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return transactionInfo.price;\n }\n return 1;\n }, [transactionInfo]);\n\n const markPrice = useMemo(() => {\n if (needCrossSwap || needSwap) {\n return isNativeToken\n ? transactionInfo.markPrices.native_token\n : transactionInfo.markPrices.from_token;\n }\n\n return 1;\n }, [needSwap, needCrossSwap, isNativeToken, transactionInfo]);\n\n const swapQuantity = needSwap || needCrossSwap ? swapAmount : quantity;\n\n const swapFee = useSwapFee({\n nativeToken: currentChain?.info?.nativeToken,\n isNativeToken,\n src: srcToken,\n depositFee,\n transactionInfo,\n needSwap,\n needCrossSwap,\n });\n\n return {\n cleanTransactionInfo,\n onSwapDeposit,\n swapPrice,\n markPrice,\n swapQuantity,\n swapFee,\n swapRevalidating,\n warningMessage,\n needSwap,\n needCrossSwap,\n slippage,\n onSlippageChange: setSlippage,\n };\n};\n","import { useTranslation } from \"@orderly.network/i18n\";\nimport {\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n useScreen,\n} from \"@orderly.network/ui\";\nimport { Swap, SwapProps } from \"./swap\";\n\nexport const SwapDialog = modal.create<SwapProps>((props) => {\n const { isMobile } = useScreen();\n const { t } = useTranslation();\n\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n\n const onComplete = (isSuccss: boolean) => {\n resolve(isSuccss);\n hide();\n };\n\n const onCancel = () => {\n reject();\n hide();\n };\n\n const commonProps = {\n title: t(\"transfer.swapDeposit.swapDialog.title\"),\n open: visible,\n onOpenChange,\n classNames: {\n content: \"oui-font-semibold\",\n },\n children: <Swap {...props} onComplete={onComplete} onCancel={onCancel} />,\n };\n\n if (isMobile) {\n return <SimpleSheet {...commonProps} />;\n }\n\n return <SimpleDialog {...commonProps} size=\"md\" />;\n});\n","import { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { Box, toast } from \"@orderly.network/ui\";\nimport { useCrossSwap } from \"../hooks/useCrossSwap\";\nimport { SwapMode, SwapProcessStatus } from \"../types\";\nimport { ProcessStatus } from \"./processStatus\";\nimport { SwapProps } from \"./swap\";\nimport { SwapDetail } from \"./swapDetail\";\nimport { ViewFAQs } from \"./viewFAQs\";\n\nexport const CrossSwap: FC<SwapProps> = (props) => {\n const {\n transactionData: transaction,\n slippage,\n mode,\n dst,\n src,\n chain: chainInfo,\n nativeToken,\n depositFee,\n } = props;\n\n const { t } = useTranslation();\n\n const [status, setStatus] = useState<SwapProcessStatus>(\n SwapProcessStatus.NONE,\n );\n\n const [view, setView] = useState<\"processing\" | \"details\">(\"details\");\n const [tx, setTx] = useState<any>();\n\n const ee = useEventEmitter();\n\n const {\n swap: doCrossSwap,\n bridgeStatus,\n message,\n status: swapStatus,\n } = useCrossSwap();\n\n const swapInfo = useMemo(() => {\n const info: any = {\n price: transaction.price,\n slippage,\n time: chainInfo?.est_txn_mins,\n received: dst.amount,\n bridgeFee: transaction.fees_from.stargate,\n swapFee: transaction.fees_from.woofi,\n dstGasFee: transaction.dst_infos.gas_fee,\n };\n\n return info;\n }, [transaction, chainInfo?.est_txn_mins, mode, dst]);\n\n useEffect(() => {\n if (bridgeStatus === \"DELIVERED\") {\n setStatus(SwapProcessStatus.Depositing);\n }\n\n if (bridgeStatus === \"FAILED\") {\n setStatus(SwapProcessStatus.BridgeFialed);\n }\n\n if (swapStatus === WS_WalletStatusEnum.COMPLETED) {\n setStatus(SwapProcessStatus.Done);\n }\n\n if (swapStatus === WS_WalletStatusEnum.FAILED) {\n setStatus(SwapProcessStatus.DepositFailed);\n }\n }, [bridgeStatus, swapStatus]);\n\n const doSwap = useCallback(() => {\n setView(\"processing\");\n\n if (!transaction) return Promise.reject(\"No transaction data\");\n setStatus(SwapProcessStatus.Bridging);\n\n return doCrossSwap({\n address: \"\",\n crossChainRouteAddress: chainInfo?.cross_chain_router!,\n src: {\n fromToken: transaction.src_infos.from_token,\n fromAmount: BigInt(transaction.src_infos.from_amount),\n bridgeToken: transaction.src_infos.bridge_token,\n minBridgeAmount: BigInt(transaction.src_infos.min_bridge_amount),\n },\n dst: {\n chainId: transaction.dst_infos.chain_id,\n bridgedToken: transaction.dst_infos.bridged_token,\n toToken: transaction.dst_infos.to_token,\n minToAmount: BigInt(transaction.dst_infos.min_to_amount),\n // @ts-ignore\n orderlyNativeFees: depositFee,\n },\n })\n .then((res: any) => {\n setTx(res);\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n })\n .catch((error: any) => {\n setStatus(SwapProcessStatus.BridgeFialed);\n toast.error(error?.message || \"Error\");\n });\n }, [transaction, mode, dst, src, ee]);\n\n const statusUrl = useMemo(() => {\n if (status < SwapProcessStatus.Depositing || !message) {\n return;\n }\n return `https://layerzeroscan.com/tx/${message.srcTxHash}`;\n // return `https://layerzeroscan.com/${message.srcChainId}/address/${message.srcUaAddress}/message/${message.dstChainId}/address/${message.dstUaAddress}/nonce/${message.srcUaNonce}`;\n }, [status, message]);\n\n return (\n <Box intensity={800}>\n <SwapDetail\n viewMode={view}\n onConfirm={doSwap}\n info={swapInfo}\n src={props.src}\n dst={props.dst}\n mode={mode}\n markPrice={transaction.mark_prices?.from_token ?? 1}\n nativePrice={transaction.mark_prices.native_token}\n nativeToken={nativeToken}\n />\n\n {view === \"processing\" && (\n <ProcessStatus\n mode={SwapMode.Cross}\n status={status}\n statusUrl={statusUrl}\n onComplete={props.onComplete}\n brokerName={props.brokerName}\n />\n )}\n <ViewFAQs />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Environment, createClient } from \"@layerzerolabs/scan-client\";\nimport { pick } from \"ramda\";\nimport { utils } from \"@orderly.network/core\";\nimport {\n useAccountInstance,\n useBoolean,\n useConfig,\n useEventEmitter,\n} from \"@orderly.network/hooks\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport {\n isNativeTokenChecker,\n woofiDexCrossSwapChainRouterAbi,\n} from \"../constants\";\n\nexport enum MessageStatus {\n INITIALIZING = \"WAITTING\",\n INFLIGHT = \"INFLIGHT\",\n CONFIRMING = \"CONFIRMING\",\n DELIVERED = \"DELIVERED\",\n FAILED = \"FAILED\",\n}\n\nexport const useCrossSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n const [layerStatus, setLayerStatus] = useState<MessageStatus>(\n MessageStatus.INITIALIZING,\n );\n\n const ee = useEventEmitter();\n\n const [bridgeMessage, setBridgeMessage] = useState<any | undefined>();\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO,\n );\n const txHashFromBridge = useRef<string | undefined>();\n\n const checkLayerStatusListener = useRef<ReturnType<typeof setTimeout>>();\n\n const account = useAccountInstance();\n\n const config = useConfig();\n const brokerId = config.get(\"brokerId\");\n const networkId = config.get(\"networkId\");\n\n const client = useRef(createClient(networkId as Environment)).current;\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHashFromBridge.current]);\n\n const checkLayerStatus = useCallback((txHash: string) => {\n if (checkLayerStatusListener.current) {\n clearTimeout(checkLayerStatusListener.current);\n }\n\n checkLayerStatusListener.current = setTimeout(async () => {\n try {\n const { messages } = await client.getMessagesBySrcTxHash(txHash);\n\n if (messages.length > 0) {\n const { status } = messages[0];\n\n setLayerStatus(status as MessageStatus);\n\n if (status === MessageStatus.DELIVERED) {\n setBridgeMessage(messages[0]);\n txHashFromBridge.current = messages[0].dstTxHash;\n } else if (status === MessageStatus.FAILED) {\n setBridgeMessage(messages[0]);\n } else {\n checkLayerStatus(txHash);\n }\n } else {\n checkLayerStatus(txHash);\n }\n } catch (e) {\n // setLayerStatus(MessageStatus.FAILED);\n checkLayerStatus(txHash);\n }\n }, 1000);\n }, []);\n\n // swap => src tx hash, cross swap => dst tx hash\n // const checkDeposit\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account, brokerId]);\n\n const swap = async (inputs: {\n address: string;\n crossChainRouteAddress: string;\n src: {\n fromToken: string;\n fromAmount: bigint;\n bridgeToken: string;\n minBridgeAmount: bigint;\n };\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n airdropNativeAmount: bigint;\n };\n }) => {\n if (!account.walletAdapter) {\n throw new Error(\"walletAdapter is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (!inputs.crossChainRouteAddress) {\n throw new Error(\"crossChainRouteAddress is undefined\");\n }\n\n const { address, src, dst, crossChainRouteAddress } = inputs;\n if (loading) return;\n start();\n\n try {\n const quotoLZFee = await account.walletAdapter.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n const result = await account.walletAdapter.sendTransaction(\n crossChainRouteAddress,\n \"crossSwap\",\n {\n from: account.address!,\n to: crossChainRouteAddress,\n data: [account.address, src, dst, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.src.fromToken)\n ? BigInt(inputs.src.fromAmount) + quotoLZFee[0]\n : quotoLZFee[0],\n },\n {\n abi: woofiDexCrossSwapChainRouterAbi,\n },\n );\n\n stop();\n\n checkLayerStatus(result.hash);\n\n // @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","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 // @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.Approve;\n }\n\n const qty = Number(quantity);\n const maxQty = Number(maxQuantity);\n\n if (allowanceNum < qty && qty <= maxQty) {\n return DepositAction.Increase;\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\";\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 onApprove = useCallback(async () => {\n if (submitting) return;\n setSubmitting(true);\n\n return approve(quantity)\n .then((res: any) => {\n toast.success(t(\"transfer.deposit.approve.success\"));\n })\n .catch((err) => {\n console.error(\"approve error\", err);\n toast.error(\n err.message || err.errorCode || t(\"transfer.deposit.approve.failed\"),\n );\n })\n .finally(() => {\n setSubmitting(false);\n });\n }, [approve, submitting, quantity, allowance, t]);\n\n const doDeposit = useCallback(async () => {\n return deposit()\n .then((res: any) => {\n toast.success(t(\"transfer.deposit.requested\"));\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n })\n .catch((err) => {\n console.error(\"deposit error\", err);\n toast.error(err.message || t(\"transfer.deposit.failed\"));\n });\n }, [deposit, onSuccess, t]);\n\n const onDeposit = useCallback(() => {\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 (!token) {\n // toast.error(\"Please select a token\");\n // return;\n // }\n\n // if (inputStatus !== \"default\") {\n // return;\n // }\n\n if (submitting) return;\n\n setSubmitting(true);\n\n const execDeposit = enableCustomDeposit ? customDeposit : doDeposit;\n\n execDeposit?.()?.finally(() => {\n setSubmitting(false);\n });\n }, [quantity, submitting, doDeposit, enableCustomDeposit, customDeposit, t]);\n\n return { submitting, onApprove, onDeposit };\n}\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../../types\";\n\ntype Options = { quantity: string; maxQuantity: string | number };\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { NetworkId, type API } from \"@orderly.network/types\";\nimport { getTokenByTokenList } from \"../../../utils\";\nimport type { CurrentChain } from \"./useChainSelect\";\n\nexport const useToken = (\n currentChain?: CurrentChain | null,\n filter: (token: API.TokenInfo) => boolean = () => true,\n) => {\n const [sourceToken, setSourceToken] = useState<API.TokenInfo>();\n const [targetToken, setTargetToken] = useState<API.TokenInfo>();\n\n const [sourceTokens, setSourceTokens] = useState<API.TokenInfo[]>([]);\n const [targetTokens, setTargetTokens] = useState<API.TokenInfo[]>([]);\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n // when chain changed and chain data ready then call this function init tokens\n const onChainInited = useCallback((chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n // const tokens = chainInfo.token_infos.filter((i) => i.is_collateral);\n // all tokens available in the chain, include swap tokens\n const tokens = chainInfo.token_infos?.filter(filter);\n\n 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: [token] => [USDC,token]\n if (networkId === \"mainnet\") {\n setTargetToken(usdc);\n setTargetTokens([usdc, sourceToken]);\n } else {\n // testnet: [token] => [token]\n setTargetToken(sourceToken);\n setTargetTokens([sourceToken]);\n }\n return;\n }\n\n // if swap token: [token] => [USDC]\n setTargetToken(usdc);\n setTargetTokens([usdc]);\n }, [networkId, sourceToken, sourceTokens]);\n\n return {\n sourceToken,\n targetToken,\n\n sourceTokens,\n targetTokens,\n\n onSourceTokenChange: setSourceToken,\n onTargetTokenChange: setTargetToken,\n };\n};\n","import { FC } from \"react\";\nimport {\n useDepositFormScript,\n UseDepositFormScriptOptions,\n} from \"./depositForm.script\";\nimport { DepositForm } from \"./depositForm.ui\";\n\nexport type DepositFormWidgetProps = UseDepositFormScriptOptions;\n\nexport const DepositFormWidget: FC<DepositFormWidgetProps> = (props) => {\n const state = useDepositFormScript(props);\n return <DepositForm {...state} />;\n};\n","import React from \"react\";\nimport { useQuery } from \"@orderly.network/hooks\";\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 { 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 } = props;\n\n const { t } = useTranslation();\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 <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 </Tabs>\n\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <Text size=\"xs\" intensity={36}>\n {t(\"common.fee\")}\n {withdrawTo === WithdrawTo.Wallet ? (\n <>\n {\" ≈ \"}\n <Text size=\"xs\" intensity={80}>\n {fee}\n </Text>\n </>\n ) : (\n <>\n {\" = \"}\n <Text size=\"xs\" intensity={80}>\n 0\n </Text>\n </>\n )}\n </Text>\n </Flex>\n </Box>\n\n <WithdrawWarningMessage\n checkIsBridgeless={checkIsBridgeless}\n chainVaultBalance={chainVaultBalance as number}\n currentChain={currentChain}\n quantity={quantity}\n maxAmount={maxQuantity}\n crossChainTrans={crossChainTrans}\n />\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","import { useMemo } from \"react\";\nimport { useAccount } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Box, Flex } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ninterface IProps {\n quantity: string;\n chainVaultBalance: number;\n currentChain: any;\n maxAmount: number;\n crossChainTrans: boolean;\n checkIsBridgeless: boolean;\n}\n\nexport const WithdrawWarningMessage = ({\n checkIsBridgeless,\n quantity,\n chainVaultBalance,\n currentChain,\n maxAmount,\n crossChainTrans,\n}: IProps) => {\n const { t } = useTranslation();\n const { wrongNetwork } = useAppContext();\n const { state } = useAccount();\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 const showVaultWarning = useMemo(() => {\n if (!chainVaultBalance) {\n return false;\n }\n if (!maxAmount) {\n return false;\n }\n if (!quantity) {\n return false;\n }\n if (new Decimal(quantity).gt(maxAmount)) {\n return false;\n }\n if (new Decimal(quantity).gt(chainVaultBalance)) {\n return true;\n }\n return false;\n }, [quantity, chainVaultBalance]);\n\n const renderContent = () => {\n if (state.status === AccountStatusEnum.NotConnected) {\n return;\n }\n\n // if (wrongNetwork || !checkIsBridgeless) {\n // return (\n // <Box>\n // {networkName\n // ? t(\"transfer.withdraw.unsupported.networkName\", { networkName })\n // : t(\"transfer.withdraw.unsupported.chain\")}\n // </Box>\n // );\n // }\n\n if (crossChainTrans) {\n return t(\"transfer.withdraw.crossChain.process\");\n }\n if (showVaultWarning) {\n return t(\"transfer.withdraw.crossChain.vaultWarning\", {\n networkName,\n chainVaultBalance,\n });\n }\n };\n\n const content = renderContent();\n\n if (content) {\n return (\n <Flex\n className=\"oui-text-warning-darken oui-text-xs oui-justify-center oui-text-center\"\n mb={3}\n >\n {content}\n </Flex>\n );\n }\n\n return null;\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n useAccount,\n useChains,\n useConfig,\n useEventEmitter,\n useLocalStorage,\n usePrivateQuery,\n useQuery,\n useTokenInfo,\n useTransfer,\n useWalletConnector,\n useWalletSubscription,\n useWithdraw,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal, int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\nimport { InputStatus, WithdrawTo } from \"../../types\";\nimport { checkIsAccountId, getTransferErrorMessage } from \"../../utils\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useToken } from \"../depositForm/hooks/useToken\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\n\nexport type WithdrawFormScriptReturn = ReturnType<typeof useWithdrawFormScript>;\n\nconst markPrice = 1;\n\ntype WithdrawFormScriptOptions = {\n onClose: (() => void) | undefined;\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 { data: assetHistory } = usePrivateQuery<any[]>(\"/v1/asset/history\", {\n revalidateOnMount: true,\n });\n const config = useConfig();\n\n const brokerName = config.get(\"brokerName\");\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const ee = useEventEmitter();\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\n\n const [chains, { findByChainId }] = useChains(networkId, {\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { data: vaultBalanceList } = useQuery<API.VaultBalance[]>(\n `/v1/public/vault_balance`,\n {\n revalidateOnMount: true,\n errorRetryCount: 3,\n },\n );\n\n const {\n connectedChain,\n wallet,\n setChain: switchChain,\n settingChain,\n } = useWalletConnector();\n\n const currentChain = useMemo(() => {\n // if (!connectedChain) return null;\n\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : Number.parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) 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 { sourceToken, onSourceTokenChange, sourceTokens } = useToken(\n currentChain,\n (token) => token.symbol === \"USDC\" || token.is_collateral,\n );\n\n const tokenChains = useMemo(() => {\n return chains\n .filter((chain) =>\n chain.token_infos?.some(\n (token) => token.symbol === sourceToken?.symbol,\n ),\n )\n .map((chain) => chain.network_infos);\n }, [chains, networkId, sourceToken]);\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const amount = useMemo(() => {\n return new Decimal(quantity || 0).mul(markPrice).toNumber();\n }, [quantity, markPrice]);\n\n const { withdraw, maxAmount, unsettledPnL } = useWithdraw({\n token: sourceToken?.symbol,\n decimals: sourceToken?.token_decimal,\n });\n\n const internalWithdrawState = useInternalWithdraw({\n token: sourceToken?.symbol!,\n quantity,\n setQuantity,\n close: options.onClose,\n setLoading,\n });\n\n const { withdrawTo, toAccountId } = internalWithdrawState;\n\n const checkIsBridgeless = useMemo(() => {\n if (wrongNetwork) {\n return false;\n }\n if (!currentChain) {\n return false;\n }\n if (networkId === \"testnet\") {\n return true;\n }\n if (!currentChain.info) {\n return false;\n }\n if (\n !currentChain.info.network_infos ||\n !currentChain.info.network_infos.bridgeless\n ) {\n return false;\n }\n return true;\n }, [currentChain, wrongNetwork]);\n\n const cleanData = () => {\n setQuantity(\"\");\n };\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (\n !chainInfo ||\n chainInfo.network_infos?.chain_id === currentChain?.id\n ) {\n return Promise.resolve();\n }\n\n return switchChain?.({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n // clean input value\n cleanData();\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n toast.error(`${t(\"connector.switchChain.failed\")}: ${error.message}`);\n });\n },\n [currentChain, switchChain, findByChainId, t],\n );\n\n const chainVaultBalance = useMemo(() => {\n if (!Array.isArray(vaultBalanceList) || !currentChain) {\n return null;\n }\n // chain.id\n const vaultBalance = vaultBalanceList.find(\n (item) => Number.parseInt(item.chain_id) === currentChain?.id,\n );\n if (vaultBalance) {\n return vaultBalance.balance;\n }\n return null;\n }, [chains, currentChain, vaultBalanceList]);\n\n const crossChainWithdraw = useMemo(() => {\n if (chainVaultBalance !== null) {\n const qtyNum = Number.parseFloat(quantity);\n const value = qtyNum > chainVaultBalance && qtyNum <= maxAmount;\n return value;\n }\n return false;\n }, [quantity, maxAmount, chainVaultBalance]);\n\n const minAmount = useMemo(() => {\n return sourceToken?.minimum_withdraw_amount ?? 0;\n }, [sourceToken]);\n\n const onWithdraw = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\n return;\n }\n if (new Decimal(quantity).lt(minAmount)) {\n toast.error(\n t(\"transfer.withdraw.minAmount.error\", {\n minAmount,\n }),\n );\n return;\n }\n setLoading(true);\n return withdraw({\n amount: quantity,\n token: sourceToken?.symbol!,\n chainId: currentChain?.id!,\n allowCrossChainWithdraw: crossChainWithdraw,\n })\n .then((res) => {\n toast.success(t(\"transfer.withdraw.requested\"));\n ee.emit(\"withdraw:requested\");\n options.onClose?.();\n setQuantity(\"\");\n })\n .catch((e) => {\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n return;\n }\n if (\n e.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: e.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(e.message);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const fee = useWithdrawFee({\n crossChainWithdraw,\n currentChain,\n token: sourceToken?.symbol!,\n });\n\n const showQty = useMemo(() => {\n if (!quantity) {\n return \"\";\n }\n console.log(\"-- qty\", quantity);\n const value = new Decimal(quantity).sub(fee ?? 0);\n if (value.isNegative()) {\n return \"\";\n }\n return value.toNumber();\n }, [fee, quantity]);\n\n useEffect(() => {\n if (!quantity) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n const qty = new Decimal(quantity ?? 0);\n if (unsettledPnL < 0) {\n if (qty.gt(maxAmount)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxAmount, unsettledPnL, crossChainTrans]);\n\n const disabled =\n crossChainTrans ||\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus) ||\n (withdrawTo === WithdrawTo.Account && !toAccountId);\n\n useEffect(() => {\n // const item = assetHistory?.find((e: any) => e.trans_status === \"COMPLETED\");\n const item = assetHistory?.find(\n (e: any) => e.trans_status === \"pending_rebalance\".toUpperCase(),\n );\n if (item) {\n setCrossChainTrans(true);\n } else {\n setCrossChainTrans(false);\n }\n }, [assetHistory]);\n\n useWalletSubscription({\n onMessage(data: any) {\n if (!crossChainTrans) return;\n console.log(\"subscribe wallet topic\", data);\n const { trxId, transStatus } = data;\n if (trxId === crossChainTrans && transStatus === \"COMPLETED\") {\n setCrossChainTrans(false);\n }\n },\n });\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\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 vaultBalanceList: vaultBalanceList?.filter(\n (item) => Number.parseInt(item.chain_id) === currentChain?.id,\n ),\n ...internalWithdrawState,\n };\n};\n\ntype InternalWithdrawOptions = {\n token: string;\n quantity: string;\n setQuantity: (quantity: string) => void;\n close?: () => void;\n setLoading: (loading: boolean) => void;\n};\n\nfunction useInternalWithdraw(options: InternalWithdrawOptions) {\n const { token, quantity, setQuantity, close, setLoading } = options;\n const { t } = useTranslation();\n const [withdrawTo, setWithdrawTo] = useState<WithdrawTo>(WithdrawTo.Wallet);\n const [toAccountId, setToAccountId] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { transfer, submitting } = useTransfer();\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 || !toAccountId) return;\n setLoading(true);\n\n transfer(token, {\n account_id: toAccountId,\n amount: new Decimal(quantity).toNumber(),\n })\n .then(() => {\n toast.success(t(\"transfer.internalTransfer.success\"));\n setQuantity(\"\");\n close?.();\n })\n .catch((err) => {\n console.error(\"transfer error: \", err, err.code);\n const errorMsg = getTransferErrorMessage(err.code);\n toast.error(errorMsg);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [t, quantity, token, submitting, toAccountId, transfer]);\n\n useEffect(() => {\n if (!toAccountId) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n if (checkIsAccountId(toAccountId)) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n } else {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.withdraw.accountId.invalid\"));\n }\n }, [toAccountId]);\n\n return {\n withdrawTo,\n setWithdrawTo,\n toAccountId,\n setToAccountId,\n onTransfer,\n internalWithdrawSubmitting: submitting,\n toAccountIdInputStatus: inputStatus,\n toAccountIdHintMessage: hintMessage,\n };\n}\n\nexport function useWithdrawFee(options: {\n token: string;\n currentChain?: CurrentChain | null;\n crossChainWithdraw: boolean;\n}) {\n const { crossChainWithdraw, currentChain, token } = options;\n\n const tokenInfo = useTokenInfo(token);\n\n const fee = useMemo(() => {\n if (!currentChain) return 0;\n\n const item = tokenInfo?.chain_details?.find(\n (chain) => Number.parseInt(chain.chain_id) === currentChain!.id,\n );\n\n if (!item) {\n return 0;\n }\n\n if (crossChainWithdraw) {\n return (\n (item.withdrawal_fee || 0) + (item.cross_chain_withdrawal_fee || 0)\n );\n }\n\n return item.withdrawal_fee || 0;\n }, [tokenInfo, token, currentChain, crossChainWithdraw]);\n\n return fee;\n}\n","import { useMemo } from \"react\";\nimport {\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 { DepositAndWithdrawProps } from \"../depositAndWithdraw\";\nimport { useWithdrawFormScript } from \"./withdrawForm.script\";\nimport { WithdrawForm } from \"./withdrawForm.ui\";\n\nexport const WithdrawFormWidget = (dialogProps: DepositAndWithdrawProps) => {\n const props = useWithdrawFormScript({\n onClose: dialogProps.close,\n });\n return <WithdrawForm {...props} />;\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 { DepositFormWidget } from \"../depositForm\";\nimport { WithdrawFormWidget } from \"../withdrawForm\";\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 onClose={props.close} /> */}\n <DepositFormWidget onClose={props.close} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <WithdrawFormWidget {...props} />\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 { 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 {\n ExtensionPositionEnum,\n ExtensionSlot,\n installExtension,\n} from \"@orderly.network/ui\";\nimport { DepositFormWidget } from \"../depositForm\";\nimport { DepositFormWidgetProps } from \"../depositForm/depositForm.widget\";\n\nexport function installDeposit() {\n installExtension<DepositFormWidgetProps>({\n name: \"deposit-form\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.DepositForm],\n __isInternal: true,\n })((props: DepositFormWidgetProps) => {\n return <DepositFormWidget onClose={props.onClose} />;\n });\n}\n\nexport const DepositSlot = (props: DepositFormWidgetProps) => {\n return (\n <ExtensionSlot\n position={ExtensionPositionEnum.DepositForm}\n defaultWidget={DepositFormWidget}\n {...props}\n />\n );\n};\n","import { FC } from \"react\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Button, Flex, textVariants, Text, cn } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { TransferVerticalIcon } from \"../../icons\";\nimport { AccountSelect } from \"../accountSelect\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { TransferFormScriptReturn } from \"./transferForm.script\";\n\nexport type TransferFormProps = TransferFormScriptReturn;\n\nexport const TransferForm: FC<TransferFormProps> = (props) => {\n const {\n networkId,\n disabled,\n onTransfer,\n quantity,\n onQuantityChange,\n amount,\n tokens,\n token,\n onTokenChange,\n maxQuantity,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccounts,\n toAccounts,\n fromAccount,\n onFromAccountChange,\n toAccount,\n onToAccountChange,\n onExchange,\n } = props;\n\n const { t } = useTranslation();\n\n const buttonSize = { initial: \"md\", lg: \"lg\" } as const;\n\n return (\n <Box id=\"oui-deposit-form\" className={textVariants({ weight: \"semibold\" })}>\n <Box className=\"oui-mb-6 lg:oui-mb-8\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.from\")}\n </Text>\n <Box mt={1} mb={1}>\n <AccountSelect\n subAccounts={fromAccounts}\n value={fromAccount}\n onValueChange={onFromAccountChange}\n />\n <QuantityInput\n classNames={{\n root: \"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl\",\n }}\n value={quantity}\n onValueChange={onQuantityChange}\n tokens={tokens}\n token={token}\n onTokenChange={onTokenChange}\n hintMessage={hintMessage}\n status={inputStatus}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={amount}\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n <Box mx={2} mt={1}>\n <UnsettlePnlInfo\n unsettledPnl={unsettledPnL}\n hasPositions={hasPositions}\n onSettlePnl={onSettlePnl}\n tooltipContent={t(\"transfer.internalTransfer.unsettled.tooltip\")}\n dialogContent={\n // @ts-ignore\n <Trans i18nKey=\"transfer.internalTransfer.settlePnl.description\" />\n }\n />\n </Box>\n\n <ExchangeDivider\n icon={\n <TransferVerticalIcon\n // TODO: determines if the current orderly key is the main account\n // className={cn(\n // isMainAccount\n // ? \"oui-cursor-pointer oui-text-primary\"\n // : \" oui-cursor-not-allowed oui-text-base-contrast-20\",\n // )}\n // onClick={isMainAccount ? onExchange : undefined}\n className=\"oui-cursor-pointer oui-text-primary\"\n onClick={onExchange}\n />\n }\n />\n\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.internalTransfer.to\")}\n </Text>\n <Box mt={1}>\n <AccountSelect\n subAccounts={toAccounts}\n value={toAccount}\n onValueChange={onToAccountChange}\n />\n <Flex\n className={cn(\n \"oui-mt-[2px] oui-h-[31px] oui-text-base-contrast-54\",\n \"oui-rounded-b-xl oui-rounded-t-sm\",\n )}\n justify=\"between\"\n itemAlign=\"center\"\n px={3}\n intensity={600}\n >\n <Text size=\"2xs\">\n {t(\"transfer.internalTransfer.currentAssetValue\")}\n </Text>\n <Text.numeral\n size=\"2xs\"\n intensity={54}\n unit={` ${token.symbol}`}\n dp={token?.precision}\n padding={false}\n >\n {toAccountAsset}\n </Text.numeral>\n </Flex>\n </Box>\n </Box>\n\n <Flex justify=\"center\">\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <AuthGuard\n networkId={networkId}\n buttonProps={{\n fullWidth: true,\n size: buttonSize,\n }}\n >\n <Button\n fullWidth\n disabled={disabled}\n loading={submitting}\n size={buttonSize}\n onClick={onTransfer}\n >\n {t(\"common.transfer\")}\n </Button>\n </AuthGuard>\n </Box>\n </Flex>\n </Box>\n );\n};\n","import { useState } from \"react\";\nimport { SubAccount } from \"@orderly.network/hooks\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../../icons\";\n\ntype AccountSelectProps = {\n subAccounts?: SubAccount[];\n value?: SubAccount;\n onValueChange?: (subAccount: SubAccount) => void;\n};\n\nexport const AccountSelect: React.FC<AccountSelectProps> = (props) => {\n const { subAccounts = [], value } = props;\n const [open, setOpen] = useState(false);\n\n const selectable = subAccounts.length > 1;\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-b-sm oui-rounded-t-xl oui-border oui-border-line\",\n selectable ? \"oui-cursor-pointer\" : \"oui-cursor-auto oui-bg-base-6\",\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Flex direction=\"column\" itemAlign=\"start\">\n <Text.formatted\n size=\"xs\"\n intensity={80}\n rule={value?.description ? undefined : \"address\"}\n >\n {value?.description || value?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{value?.id}</Text.formatted>\n </Text>\n </Flex>\n {selectable && <ExchangeIcon className=\"oui-text-base-contrast-54\" />}\n </Flex>\n );\n\n const content = subAccounts.map((subAccount, index) => {\n const isActive = subAccount.id === value?.id;\n\n const asset = subAccount?.holding?.find(\n (item) => item.token === \"USDC\",\n )?.holding;\n\n return (\n <Flex\n key={subAccount.id}\n px={2}\n r=\"base\"\n justify=\"between\"\n className={cn(\n \"oui-transfer-form-account-select-item\",\n \"oui-cursor-pointer oui-py-[6px] hover:oui-bg-base-5\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n setOpen(false);\n props.onValueChange?.(subAccount);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <Flex direction=\"column\" itemAlign=\"start\" className=\"oui-text-2xs\">\n <Text.formatted\n rule={subAccount?.description ? undefined : \"address\"}\n intensity={80}\n >\n {subAccount?.description || subAccount?.id}\n </Text.formatted>\n <Text intensity={36} size=\"2xs\">\n {`ID: `}\n <Text.formatted rule=\"address\">{subAccount?.id}</Text.formatted>\n </Text>\n </Flex>\n </Flex>\n <Flex gapX={3}>\n <Text.numeral size=\"2xs\" intensity={54} unit=\" USDC\">\n {asset || 0}\n </Text.numeral>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-transfer-form-account-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-transfer-form-account-select-dropdown-menu-content\",\n \"oui-font-semibold\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[254px]\">{content} </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n SubAccount,\n useAccount,\n useConfig,\n useSubAccountDataObserver,\n useSubAccountMaxWithdrawal,\n useTransfer,\n} from \"@orderly.network/hooks\";\nimport { useTokensInfo } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport { getTransferErrorMessage } from \"../../utils\";\nimport { useSettlePnl } from \"../unsettlePnlInfo/useSettlePnl\";\n\nexport type TransferFormScriptReturn = ReturnType<typeof useTransferFormScript>;\n\nexport type TransferFormScriptOptions = {\n /** target sub account id */\n toAccountId?: string;\n token?: string;\n close?: () => void;\n};\n\nconst DEFAULT_TOKEN = {\n symbol: \"USDC\",\n} as API.TokenInfo;\n\nexport const useTransferFormScript = (options: TransferFormScriptOptions) => {\n const { t } = useTranslation();\n const [quantity, setQuantity] = useState<string>(\"\");\n const [fromAccount, setFromAccount] = useState<SubAccount>();\n const [toAccount, setToAccount] = useState<SubAccount>();\n const [mainAccount, setMainAccount] = useState<SubAccount>();\n const [tokens, setTokens] = useState<API.TokenInfo[]>([DEFAULT_TOKEN]);\n const [token, setToken] = useState<API.TokenInfo>(DEFAULT_TOKEN);\n const [holdingMap, setHoldingMap] = useState<Record<string, API.Holding[]>>(\n {},\n );\n\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { state, isMainAccount, subAccount } = useAccount();\n\n const tokensInfo = useTokensInfo();\n\n const {\n transfer,\n submitting,\n maxAmount: currentMaxAmount,\n unsettledPnL: currentUnsettledPnL,\n } = useTransfer({ fromAccountId: fromAccount?.id, token: token.symbol });\n\n const subAccounts = state.subAccounts;\n const mainAccountId = state.mainAccountId;\n const accountId = state.accountId;\n\n // when current account is main account, and fromAccount is not main account, set observerAccountId to fromAccountId\n // current sub account use main account orderly key to transfer, so fromAccount can be main account or current sub account\n const observerAccountId = isMainAccount\n ? fromAccount?.id !== mainAccountId\n ? fromAccount?.id\n : undefined\n : fromAccount?.id;\n\n const { hasPositions: currentHasPositions, onSettlePnl } = useSettlePnl({\n accountId: fromAccount?.id,\n });\n\n // when select sub account, open the private websocket\n const { portfolio, positions } = useSubAccountDataObserver(observerAccountId);\n const subAccountMaxAmount = useSubAccountMaxWithdrawal({\n token: token.symbol,\n unsettledPnL: portfolio?.unsettledPnL,\n freeCollateral:\n portfolio?.freeCollateral?.todp(token?.precision).toNumber() || 0,\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 tokens.sort((a, b) => {\n if (a.symbol === \"USDC\") return -1;\n if (b.symbol === \"USDC\") return 1;\n return 0;\n });\n\n const targetToken = tokens?.find((item) => item.symbol === options.token);\n\n setTokens(tokens);\n setToken(targetToken || tokens?.[0] || DEFAULT_TOKEN);\n }\n }, [tokensInfo, options.token]);\n\n const onFromAccountChange = useCallback(\n (account: SubAccount) => {\n setFromAccount(account);\n\n const firstSubAccount = subAccounts?.[0];\n // if fromAccount is main account, set toAccount to first sub account\n if (account?.id === mainAccountId) {\n setToAccount(firstSubAccount);\n return;\n }\n\n // if fromAccount is not main account, set toAccount to main account\n // sub account only can transfer to main account\n if (account?.id && account?.id !== mainAccountId) {\n setToAccount(mainAccount);\n return;\n }\n },\n [mainAccountId, mainAccount, subAccounts],\n );\n\n const onToAccountChange = useCallback((account: SubAccount) => {\n setToAccount(account);\n }, []);\n\n const onExchange = useCallback(() => {\n setFromAccount(toAccount);\n setToAccount(fromAccount);\n }, [fromAccount, toAccount]);\n\n return {\n networkId,\n onTransfer,\n quantity,\n amount,\n onQuantityChange: setQuantity,\n maxQuantity,\n tokens,\n token,\n onTokenChange: setToken,\n disabled,\n submitting,\n hintMessage,\n inputStatus,\n hasPositions,\n onSettlePnl,\n unsettledPnL,\n toAccountAsset,\n fromAccount,\n toAccount,\n fromAccounts,\n onFromAccountChange,\n toAccounts,\n onToAccountChange,\n onExchange,\n isMainAccount,\n };\n};\n\ntype Options = {\n quantity: string;\n maxQuantity: string | number;\n unsettledPnL?: number;\n};\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity, unsettledPnL = 0 } = options;\n const { t } = useTranslation();\n\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n useEffect(() => {\n if (!quantity) {\n // reset input status when value is empty\n setInputStatus(\"default\");\n setHintMessage(\"\");\n return;\n }\n\n const qty = new Decimal(quantity);\n\n if (unsettledPnL < 0) {\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n } else {\n if (qty.gt(maxQuantity)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n } else if (\n qty.gt(new Decimal(maxQuantity).minus(unsettledPnL)) &&\n qty.lessThanOrEqualTo(maxQuantity)\n ) {\n setInputStatus(\"warning\");\n setHintMessage(t(\"settle.settlePnl.warning\"));\n } else {\n // reset input status\n setInputStatus(\"default\");\n setHintMessage(\"\");\n }\n }\n }, [quantity, maxQuantity]);\n\n return { inputStatus, hintMessage };\n}\n","import { FC } from \"react\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog } from \"@orderly.network/ui\";\nimport { registerSimpleSheet } from \"@orderly.network/ui\";\nimport {\n TransferFormScriptOptions,\n useTransferFormScript,\n} from \"./transferForm.script\";\nimport { TransferForm } from \"./transferForm.ui\";\n\nexport const TransferDialogId = \"TransferDialogId\";\nexport const TransferSheetId = \"TransferSheetId\";\n\nexport type TransferFormWidgetProps = TransferFormScriptOptions;\n\nexport const TransferFormWidget = (props: TransferFormWidgetProps) => {\n const state = useTransferFormScript({\n toAccountId: props.toAccountId,\n token: props.token,\n close: props.close,\n });\n return <TransferForm {...state} />;\n};\n\nexport const TransferWidget: FC<TransferFormWidgetProps> = (props) => {\n return (\n <TransferFormWidget\n close={props.close}\n toAccountId={props.toAccountId}\n token={props.token}\n />\n );\n};\n\nregisterSimpleDialog(TransferDialogId, TransferWidget, {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n title: () => i18n.t(\"common.transfer\"),\n});\n\nregisterSimpleSheet(TransferSheetId, TransferWidget, {\n title: () => i18n.t(\"common.transfer\"),\n});\n","import React from \"react\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { LtvWidget } from \"../LTV\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { ConvertAction } from \"../convertAction\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Fee } from \"../fee\";\nimport { MinimumReceived } from \"../minimumReceived\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { Slippage } from \"../slippage\";\nimport { SwapCoin } from \"../swapCoin\";\nimport {\n unnormalizeAmount,\n type ConvertFormScriptReturn,\n} from \"./convertForm.script\";\n\nexport type ConvertFormProps = ConvertFormScriptReturn;\n\nexport const ConvertFormUI: React.FC<ConvertFormProps> = (props) => {\n const {\n loading,\n disabled,\n quantity,\n onQuantityChange,\n maxQuantity,\n token,\n targetToken,\n sourceTokens,\n onSourceTokenChange,\n onConvert,\n slippage,\n onSlippageChange,\n convertRate,\n minimumReceived,\n isQuoteLoading,\n currentLTV,\n nextLTV,\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 status={props.inputStatus}\n hintMessage={props.hintMessage}\n />\n </Box>\n <AvailableQuantity\n token={token}\n amount={quantity}\n maxQuantity={maxQuantity.toString()}\n loading={props.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\n ? \"\"\n : unnormalizeAmount(\n minimumReceived.toString(),\n targetToken?.decimals ?? 6,\n )\n }\n />\n <Flex direction=\"column\" itemAlign=\"start\" mt={2} gap={1}>\n <SwapCoin\n indexPrice={isQuoteLoading || !quantity ? \"-\" : convertRate}\n sourceSymbol={token?.display_name || token?.symbol}\n targetSymbol={targetToken?.display_name || targetToken?.symbol}\n />\n <Slippage value={slippage} onValueChange={onSlippageChange} />\n <MinimumReceived\n symbol={targetToken?.display_name || targetToken?.symbol || \"\"}\n precision={targetToken?.precision!}\n value={\n isQuoteLoading || !quantity\n ? \"-\"\n : unnormalizeAmount(\n minimumReceived.toString(),\n targetToken?.decimals ?? 6,\n )\n }\n />\n <LtvWidget\n showDiff={typeof quantity !== \"undefined\" && Number(quantity) > 0}\n currentLtv={currentLTV}\n nextLTV={nextLTV}\n />\n <Fee dstGasFee={\"0\"} />\n </Flex>\n </Box>\n <Flex itemAlign={\"center\"} justify=\"center\">\n <ConvertAction\n networkId={props.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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n useChains,\n useConfig,\n useConvert,\n useComputedLTV,\n useLocalStorage,\n useOdosQuote,\n useWalletConnector,\n useWalletSubscription,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { account } from \"@orderly.network/perp\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { nativeETHAddress, nativeTokenAddress } from \"@orderly.network/types\";\nimport type { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal, praseChainIdToNumber } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\nimport type { CurrentChain } from \"../depositForm/hooks\";\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 [crossChainTrans, setCrossChainTrans] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n\n const config = useConfig();\n\n const brokerName = config.get(\"brokerName\");\n const networkId = config.get(\"networkId\") as NetworkId;\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n\n const { wrongNetwork } = useAppContext();\n\n const [, { findByChainId }] = useChains(networkId, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { connectedChain, wallet } = 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, sourceTokens, onSourceTokenChange, targetToken } =\n useToken(\n { currentChain, defaultValue: defaultToken },\n (token) => token.symbol === \"USDC\" || token.is_collateral,\n );\n\n const token = useMemo<API.TokenInfo>(() => {\n const _token = {\n ...sourceToken!,\n precision: sourceToken?.precision ?? 6,\n };\n if (\n _token.symbol === \"ETH\" &&\n (!_token.address || _token.address === nativeTokenAddress)\n ) {\n _token.address = nativeETHAddress;\n }\n return _token;\n }, [sourceToken]);\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: wallet?.accounts?.[0].address,\n }),\n [wallet],\n );\n\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n };\n\n const [slippage, setSlippage] = useLocalStorage(\n ORDERLY_CONVERT_SLIPPAGE_KEY,\n 1,\n );\n\n const 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 { maxAmount, convert } = useConvert({ token: token.symbol });\n\n const onConvert = async () => {\n if (loading) {\n return;\n }\n if (inputStatus !== \"default\") {\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 const convertRate = useMemo(() => {\n if (!quoteData || isQuoteLoading) {\n return \"-\";\n }\n const rate = new Decimal(\n unnormalizeAmount(quoteData.outAmounts[0], targetToken?.decimals ?? 6),\n )\n .div(unnormalizeAmount(quoteData.inAmounts[0], token.decimals))\n .toString();\n return rate;\n }, [quoteData]);\n\n useEffect(() => {\n if (quantity && currentChain?.id && token.address && targetToken?.address) {\n postQuote({\n // chainId: 8453,\n chainId: currentChain.id,\n inputTokens: [\n {\n amount: normalizeAmount(quantity, token.decimals),\n // tokenAddress: \"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2\",\n tokenAddress: token.address,\n },\n ],\n outputTokens: [\n {\n proportion: 1,\n // tokenAddress: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n tokenAddress: targetToken.address,\n },\n ],\n });\n }\n }, [quantity, currentChain?.id, token, targetToken]);\n\n const minimumReceived = 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?.symbol,\n });\n\n const disabled =\n !quantity ||\n Number(quantity) === 0 ||\n [\"error\", \"warning\"].includes(inputStatus);\n\n useWalletSubscription({\n onMessage(data: any) {\n if (!crossChainTrans) {\n return;\n }\n\n const { trxId, transStatus } = data;\n if (trxId === crossChainTrans && transStatus === \"COMPLETED\") {\n setCrossChainTrans(false);\n }\n },\n });\n\n const { hasPositions, onSettlePnl } = useSettlePnl();\n\n return {\n walletName,\n address,\n quantity,\n onQuantityChange,\n token: token,\n sourceTokens,\n onSourceTokenChange,\n targetToken,\n inputStatus,\n hintMessage,\n balanceRevalidating: false,\n maxQuantity: maxAmount,\n disabled,\n loading,\n wrongNetwork,\n onConvert,\n crossChainTrans,\n networkId,\n checkIsBridgeless,\n hasPositions,\n onSettlePnl,\n brokerName,\n slippage,\n onSlippageChange: setSlippage,\n convertRate,\n minimumReceived: minimumReceived,\n isQuoteLoading,\n currentLTV: currentLtv,\n nextLTV: nextLTV,\n };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport type { API } from \"@orderly.network/types\";\nimport type { CurrentChain } from \"../../depositForm/hooks\";\n\nconst splitTokenBySymbol = <T extends API.TokenInfo>(items: T[]) => {\n return items.reduce<Record<\"usdc\" | \"others\", T[]>>(\n (result, item) => {\n if (item.symbol.toUpperCase() === \"USDC\") {\n result.usdc.push(item);\n } else {\n result.others.push(item);\n }\n return result;\n },\n { usdc: [], others: [] },\n );\n};\n\ninterface Options {\n currentChain?: CurrentChain | null;\n defaultValue?: string;\n}\n\nexport const useToken = (\n options: Options,\n predicate: (\n value: API.TokenInfo,\n index: number,\n array: API.TokenInfo[],\n ) => boolean = () => true,\n) => {\n const { currentChain, defaultValue } = options;\n\n const [sourceToken, setSourceToken] = useState<API.TokenInfo>();\n const [targetToken, setTargetToken] = useState<API.TokenInfo>();\n const [sourceTokens, setSourceTokens] = useState<API.TokenInfo[]>([]);\n\n // when chain changed and chain data ready then call this function\n const onChainInited = useCallback((chainInfo?: API.Chain) => {\n if (chainInfo && chainInfo?.token_infos?.length > 0) {\n const { usdc, others } = splitTokenBySymbol(\n chainInfo.token_infos.filter(predicate),\n );\n setSourceToken(() => {\n if (defaultValue) {\n const defaultToken = others.find(\n ({ symbol }) => symbol === defaultValue,\n );\n return defaultToken ? defaultToken : others[0];\n }\n return others[0];\n });\n setSourceTokens(others);\n setTargetToken(usdc[0]);\n }\n }, []);\n\n useEffect(() => {\n onChainInited(currentChain?.info);\n }, [currentChain?.id, onChainInited]);\n\n return {\n sourceToken,\n sourceTokens,\n onSourceTokenChange: setSourceToken,\n targetToken,\n };\n};\n","import React from \"react\";\n// import pick from \"ramda/es/pick\";\nimport { i18n } from \"@orderly.network/i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@orderly.network/ui\";\nimport type { ConvertFormScriptOptions } from \"./convertForm.script\";\nimport { useConvertFormScript } from \"./convertForm.script\";\nimport { ConvertFormUI } from \"./convertForm.ui\";\n\nexport const ConvertDialogId = \"ConvertDialogId\";\nexport const ConverSheetId = \"ConverSheetId\";\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(ConverSheetId, ConvertFormWidget, {\n title: () => i18n.t(\"transfer.convert\"),\n});\n"]}
|