@orderly.network/ui-transfer 2.3.1 → 2.3.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.js.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/utils.ts","../src/components/depositForm/depositForm.script.tsx","../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/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","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","DepositIcon","WithdrawIcon","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","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","formatAddress","address","getTokenByTokenList","tokenObj","acc","feeDecimalsOffset","origin","Web3Wallet","wallet","connectedChain","accountState","account","walletName","DepositForm","quantity","onQuantityChange","inputStatus","currentChain","settingChain","onChainChange","balanceRevalidating","fee","useCallback","useDeposit","useIndexPrice","useAppContext","ChainNamespace","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","ExclamationFillIcon","Tooltip","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlePnl","tooltipContent","dialogContent","settlePnlDialog","CrossWithdrawConfirm","networkName","ChainSelectorDialogId","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","checkIsBridgeless","preWithdraw","WithdrawWarningMessage","chainVaultBalance","maxAmount","crossChainTrans","showVaultWarning","WithdrawForm","unsettledPnL","showQty","useContext","OrderlyContext","usePrivateQuery","useQuery","useWalletSubscription","useWithdraw","usePositionStream","useSettlePnl","subAccountId","positionData","markPrice","useWithdrawFormScript","setCrossChainTrans","assetHistory","setDisabled","allChains","balanceList","_token","withdraw","isLoading","availableBalance","availableWithdraw","configStore","apiBaseUrl","vaultBalance","qtyNum","minAmount","useWithdrawFee","data","trxId","transStatus","tokenChainsRes","WithdrawFormWidget","dialogProps","registerSimpleDialog","registerSimpleSheet","TabPanel","Tabs","ExtensionPositionEnum","ExtensionSlot","installExtension","installDeposit","DepositSlot","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","DepositAndWithdraw","activeTab","setActiveTab","AccountSelect","subAccounts","subAccount","asset","TransferForm","onTransfer","toAccountAsset","fromAccounts","toAccounts","fromAccount","onFromAccountChange","toAccount","onToAccountChange","onExchange","useSubAccountDataObserver","useTransfer","DEFAULT_TOKEN","useTransferFormScript","setFromAccount","setToAccount","mainAccount","setMainAccount","isMainAccount","transfer","currentMaxAmount","currentUnsettledPnL","currentHolding","mainAccountId","accountId","observerAccountId","currentHasPositions","portfolio","positions","formHasPositions","holding","_mainAccount","firstSubAccount","selectAccount","i18n","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 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 DepositIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.078 1.744a2.333 2.333 0 0 0-2.333 2.333v5.834a2.333 2.333 0 0 0 2.333 2.333h5.833a2.333 2.333 0 0 0 2.334-2.333V4.077A2.333 2.333 0 0 0 9.91 1.744zm2.917 2.333c.322 0 .583.262.583.584v2.916h1.75L6.995 9.911 4.66 7.577h1.75V4.661c0-.322.262-.584.584-.584\" />\n </svg>\n);\n\nexport const WithdrawIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.078 12.244a2.333 2.333 0 0 1-2.333-2.333V4.077a2.333 2.333 0 0 1 2.333-2.333h5.833a2.333 2.333 0 0 1 2.334 2.333v5.834a2.333 2.333 0 0 1-2.334 2.333zm2.917-2.333a.584.584 0 0 0 .583-.584V6.411h1.75L6.995 4.077 4.66 6.411h1.75v2.916c0 .322.262.584.584.584\" />\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} 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} & 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 ...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 inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(token?.precision ?? 2),\n inputFormatter.currencyFormatter,\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\";\nimport { formatAddress } from \"../../utils\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const { walletName, 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 return {\n walletName: wallet?.label,\n address: formatAddress(address),\n };\n }, [wallet, accountState, account, connectedChain]);\n\n return (\n <Flex justify=\"between\">\n <Text size=\"sm\" intensity={98}>\n {t(\"transfer.web3Wallet\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"xs\"} name={walletName ?? \"\"} />\n <Text size=\"sm\" intensity={54}>\n {address}\n </Text>\n </Flex>\n </Flex>\n );\n};\n","import { API } from \"@orderly.network/types\";\n\nexport function formatAddress(address?: string) {\n if (!address) return \"--\";\n return address.replace(/^(.{6})(.*)(.{4})$/, \"$1......$3\");\n}\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","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 { 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 { Box, Flex, Text, textVariants } from \"@orderly.network/ui\";\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 { Web3Wallet } from \"../web3Wallet\";\nimport { WithdrawAction } from \"../withdrawAction\";\nimport { WithdrawWarningMessage } from \"../withdrawWarningMessage\";\nimport { WithdrawFormScriptReturn } from \"./withdrawForm.script\";\n\nexport type WithdrawFormProps = WithdrawFormScriptReturn;\n\nexport const WithdrawForm = ({\n address,\n loading,\n disabled,\n quantity,\n onQuantityChange,\n token,\n inputStatus,\n hintMessage,\n amount,\n maxQuantity,\n balanceRevalidating,\n chains,\n currentChain,\n onChainChange,\n fee,\n settingChain,\n wrongNetwork,\n hasPositions,\n unsettledPnL,\n onSettlePnl,\n onWithdraw,\n chainVaultBalance,\n crossChainWithdraw,\n crossChainTrans,\n showQty,\n networkId,\n checkIsBridgeless,\n}: WithdrawFormProps) => {\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={inputStatus}\n hintMessage={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={balanceRevalidating}\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(\"settle.unsettled.tooltip\")}\n // @ts-ignore\n dialogContent={<Trans i18nKey=\"settle.settlePnl.description\" />}\n />\n </Box>\n\n <ExchangeDivider />\n <Web3Wallet />\n <Box mt={3}>\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 token={token}\n value={showQty}\n readOnly\n />\n </Box>\n <Flex direction=\"column\" mt={1} gapY={1} itemAlign=\"start\">\n <Text size=\"xs\" intensity={36}>\n {`${t(\"common.fee\")} ≈ `}\n <Text size=\"xs\" intensity={80}>\n {`${fee} `}\n </Text>\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={networkId}\n disabled={disabled}\n loading={loading}\n onWithdraw={onWithdraw}\n crossChainWithdraw={crossChainWithdraw}\n currentChain={currentChain}\n address={address}\n quantity={quantity}\n fee={fee}\n />\n </Flex>\n </Box>\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 { Box, Button, modal } from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\nimport { CrossWithdrawConfirm } from \"../crossWithdrawConfirm\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport SwitchChainButton from \"./SwitchChainButton\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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}\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 } = 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 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 {checkIsBridgeless ? (\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 <SwitchChainButton networkId={networkId} size={buttonSize} />\n )}\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 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 } from \"../../types\";\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 networkId = useConfig(\"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 const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\n\n const [disabled, setDisabled] = useState<boolean>(true);\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 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 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 (crossChainTrans) {\n setDisabled(true);\n }\n if (!quantity) {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n setDisabled(true);\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 setDisabled(true);\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n setDisabled(false);\n }\n } else {\n if (qty.gt(maxAmount)) {\n setInputStatus(\"error\");\n setHintMessage(t(\"transfer.insufficientBalance\"));\n setDisabled(true);\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 setDisabled(true);\n } else {\n setInputStatus(\"default\");\n setHintMessage(\"\");\n setDisabled(false);\n }\n }\n }, [quantity, maxAmount, unsettledPnL, crossChainTrans]);\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 };\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 registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { DepositIcon, WithdrawIcon } from \"../../icons\";\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={<DepositIcon />}\n value=\"deposit\"\n >\n <DepositSlot onClose={props.close} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<WithdrawIcon />}\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 { 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 if (err.code === 34) {\n toast.error(t(\"transfer.internalTransfer.failed.transferInProgress\"));\n } else if (err.code === 17) {\n toast.error(\n t(\"transfer.internalTransfer.failed.withdrawalInProgress\"),\n );\n } else {\n toast.error(t(\"transfer.internalTransfer.failed\"));\n }\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/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"]}