@orderly.network/ui-transfer 2.1.3 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +10 -10
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/depositForm/depositForm.ui.tsx","../src/components/quantityInput/index.tsx","../src/components/quantityInput/tokenOption.tsx","../src/components/quantityInput/useBalance.ts","../src/components/chainSelect/index.tsx","../src/icons.tsx","../src/components/exchangeDivider/index.tsx","../src/components/web3Wallet/index.tsx","../src/utils.ts","../src/components/brokerWallet/index.tsx","../src/components/availableQuantity/index.tsx","../src/components/swapCoin/index.tsx","../src/components/fee/index.tsx","../src/components/actionButton/index.tsx","../src/types.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/widget.tsx","../src/components/withdrawForm/withdrawForm.ui.tsx","../src/components/withdrawWarningMessage/index.tsx","../src/components/unsettlePnlInfo/index.tsx","../src/components/withdrawAction/index.tsx","../src/components/crossWithdrawConfirm/index.tsx","../src/components/withdrawAction/SwitchChainButton.tsx","../src/components/withdrawForm/withdrawForm.script.tsx","../src/components/withdrawForm/widget.tsx","../src/components/depositAndWithdraw/index.tsx","../src/components/depositAndWithdraw/plugin.tsx"],"names":["Box","Flex","textVariants","forwardRef","useEffect","useMemo","useRef","useState","Input","Select","cn","Text","inputFormatter","Spinner","TokenIcon","useBalance","token","fetchBalance","balance","setBalance","loading","setLoading","err","Decimal","jsx","jsxs","TokenOption","props","isActive","onTokenChange","symbol","precision","decimals","showBalance","dp","renderValue","useTranslation","Fragment","QuantityInput","ref","tokens","classNames","label","status","hintMessage","value","onValueChange","placeholder","rest","t","inputRef","open","setOpen","width","setWidth","tokenOptions","rect","_onTokenChange","find","item","optionRenderer","prefix","selectable","suffix","event","message","_placeholder","ChainIcon","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","ScrollArea","ExchangeIcon","ArrowDownIcon","DepositIcon","WithdrawIcon","RefreshIcon","ChainSelect","chains","wrongNetwork","chainIcon","chainName","renderRightIcon","trigger","content","chain","index","e","ExchangeDivider","WalletIcon","useWalletConnector","formatAddress","address","getTokenByTokenList","tokenObj","acc","feeDecimalsOffset","origin","Web3Wallet","wallet","walletName","useAppConfig","useConfig","BrokerWallet","appIcons","brokerName","icon","secondary","AvailableQuantity","amount","maxQuantity","name","SwapCoin","dst","price","srcSymbol","modal","Fee","dstGasFee","feeQty","feeAmount","nativeSymbol","onShowFee","showFeeQty","Button","AuthGuard","AccountStatusEnum","DepositAction","ActionButton","disabled","actionType","onDeposit","onApprove","networkId","buttonParams","buttonSize","DepositForm","quantity","onQuantityChange","inputStatus","currentChain","settingChain","onChainChange","balanceRevalidating","fee","useCallback","useAccount","useDeposit","useIndexPrice","ChainNamespace","useAppContext","useActionType","options","isNativeToken","allowance","allowanceNum","qty","maxQty","useChains","useLocalStorage","toast","int2hex","praseChainIdToNumber","useChainSelect","linkDeviceStorage","connectedChain","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","account","symbolPrice","DepositFormWidget","state","WithdrawWarningMessage","checkIsBridgeless","chainVaultBalance","maxAmount","crossChainTrans","networkName","showVaultWarning","ExclamationFillIcon","Tooltip","Trans","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlle","settlePnlDialog","CrossWithdrawConfirm","ChainSelectorDialogId","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","preWithdraw","WithdrawFormUI","unsettledPnL","onSettlePnl","showQty","useContext","OrderlyContext","usePositionStream","usePrivateQuery","useQuery","useWalletSubscription","useWithdraw","markPrice","useWithdrawForm","onClose","positionData","setCrossChainTrans","assetHistory","balanceList","config","withdraw","isLoading","availableBalance","availableWithdraw","setDisabled","allChains","configStore","apiBaseUrl","tokenChainsRes","data","vaultBalance","qtyNum","minAmount","c","trxId","transStatus","WithdrawFormWidget","dialogProps","registerSimpleDialog","registerSimpleSheet","TabPanel","Tabs","ExtensionPositionEnum","ExtensionSlot","installExtension","installDeposit","DepositSlot","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","DepositAndWithdraw","activeTab","setActiveTab"],"mappings":"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","sourcesContent":["import { FC } from \"react\";\nimport { UseDepositFormScriptReturn } from \"./depositForm.script\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { Fee } from \"../fee\";\nimport { ActionButton } from \"../actionButton\";\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 { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\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 { API } from \"@orderly.network/types\";\nimport { TokenOption } from \"./tokenOption\";\nimport { InputStatus } from \"../../types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 onTokenChange,\n fetchBalance,\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 props.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-h-[54px] oui-relative oui-px-3\",\n \"oui-border oui-border-line oui-rounded-lg\",\n status === \"error\" &&\n \"focus-within:oui-outline-danger-light oui-outline-danger-light\",\n status === \"warning\" &&\n \"focus-within:oui-outline-warning-light oui-outline-warning-light\",\n props.readOnly\n ? \"oui-bg-base-6 focus-within:oui-outline-0 oui-border-none\"\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 { cn, Flex, Spinner, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { useBalance } from \"./useBalance\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\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, decimals } = 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 { 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","import { FC } from \"react\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../../icons\";\n\nexport const ExchangeDivider: FC = () => {\n return (\n <Flex height={40} gapX={3}>\n <Flex height={1} className=\"oui-bg-base-contrast-12 oui-flex-1\"></Flex>\n <ArrowDownIcon className=\"oui-text-primary-light\" />\n <Flex height={1} className=\"oui-bg-base-contrast-12 oui-flex-1\"></Flex>\n </Flex>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { Flex, Text, WalletIcon } from \"@orderly.network/ui\";\nimport { useWalletConnector } from \"@orderly.network/hooks\";\nimport { formatAddress } from \"../../utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport const Web3Wallet: FC = () => {\n const { t } = useTranslation();\n const { wallet } = useWalletConnector();\n\n const { walletName, address } = useMemo(\n () => ({\n walletName: wallet?.label,\n address: formatAddress(wallet?.accounts?.[0].address),\n }),\n [wallet]\n );\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 { 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 { FC } from \"react\";\nimport { Flex, Spinner, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type AvailableQuantityProps = {\n token?: API.TokenInfo;\n amount: number;\n maxQuantity?: 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 } 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 } 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 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 {useCallback, useEffect, useMemo} from \"react\";\nimport {useAccount, useConfig, useDeposit, useIndexPrice} from \"@orderly.network/hooks\";\nimport {API, NetworkId, ChainNamespace} from \"@orderly.network/types\";\nimport {Decimal} from \"@orderly.network/utils\";\nimport {useAppContext} from \"@orderly.network/react-app\";\nimport {feeDecimalsOffset} from \"../../utils\";\nimport {useActionType, useChainSelect, useDepositAction, useInputStatus, useToken,} 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(new Decimal(10).pow(account.walletAdapter?.chainNamespace === ChainNamespace.solana ? 9:18))\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 { Decimal } from \"@orderly.network/utils\";\nimport { useEffect, useState } from \"react\";\nimport { InputStatus } from \"../../../types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype Options = { quantity: string; maxQuantity: string };\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 d = new Decimal(quantity);\n\n if (d.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 { Box, Flex, Text, textVariants } from \"@orderly.network/ui\";\nimport {\n useWithdrawForm,\n UseWithdrawFormScriptReturn,\n} from \"./withdrawForm.script\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { WithdrawWarningMessage } from \"../withdrawWarningMessage\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { WithdrawAction } from \"../withdrawAction\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type WithdrawFormProps = ReturnType<typeof useWithdrawForm> & {\n onClose?: () => void;\n};\n\nexport const WithdrawFormUI = ({\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}: UseWithdrawFormScriptReturn) => {\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 <UnsettlePnlInfo\n unsettledPnl={unsettledPnL}\n hasPositions={hasPositions}\n onSettlle={onSettlePnl}\n />\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 { 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 {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { RefreshIcon } from \"../../icons\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n hasPositions: boolean;\n unsettledPnl: number;\n onSettlle: () => Promise<any>;\n}\n\nexport const UnsettlePnlInfo = ({\n hasPositions,\n unsettledPnl,\n onSettlle,\n}: IProps) => {\n const { t } = useTranslation();\n\n if (unsettledPnl === 0 && !hasPositions) {\n return <></>;\n }\n const settlePnlDialog = () => {\n modal.confirm({\n title: t(\"settle.settlePnl\"),\n // @ts-ignore\n content: <Trans i18nKey=\"settle.settlePnl.description\" />,\n onOk: () => {\n return onSettlle();\n },\n });\n };\n return (\n <Flex\n justify=\"between\"\n className=\"oui-text-2xs oui-text-base-contrast-36 oui-mt-1 oui-mx-2\"\n >\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <Tooltip\n className=\"oui-max-w-[274px]\"\n content={t(\"settle.unsettled.tooltip\")}\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-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\">\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 { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n OrderlyContext,\n useAccount,\n useChains,\n useConfig,\n useEventEmitter,\n useLocalStorage,\n usePositionStream,\n usePrivateQuery,\n useQuery,\n useWalletConnector,\n useWalletSubscription,\n useWithdraw,\n} from \"@orderly.network/hooks\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { Decimal, int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { InputStatus } from \"../../types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type UseWithdrawFormScriptReturn = ReturnType<typeof useWithdrawForm>;\n\nconst markPrice = 1;\n\nexport const useWithdrawForm = ({\n onClose,\n}: {\n onClose: (() => void) | undefined;\n}) => {\n const { t } = useTranslation();\n const [positionData] = usePositionStream();\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 [token, setToken] = useState<API.TokenInfo>({\n symbol: \"USDC\",\n decimals: 6,\n address: \"\",\n display_name: \"\",\n precision: 6,\n });\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\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 const config = useConfig();\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 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 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 { 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 formatter: (data) => {\n console.log(\"-- data\", data);\n if (data.rows.length === 1) {\n return data.rows[0].chain_details;\n }\n },\n }\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 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 hasPositions = useMemo(\n () => positionData?.rows?.length! > 0,\n [positionData]\n );\n\n const onSettlePnl = async () => {\n return account\n .settle()\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\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 }\n\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n }\n return Promise.reject(e);\n })\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\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 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 if (onClose) {\n onClose();\n }\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 = useMemo(() => {\n if (!currentChain) return 0;\n\n const item = tokenChainsRes?.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 }, [currentChain, tokenChainsRes, chains, crossChainWithdraw]);\n\n const showQty = useMemo(() => {\n console.log(\"quanty\", quantity);\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 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 hasPositions,\n unsettledPnL,\n wrongNetwork,\n settingChain,\n chains,\n currentChain,\n onChainChange,\n onSettlePnl,\n onWithdraw,\n chainVaultBalance,\n fee,\n crossChainWithdraw,\n crossChainTrans,\n showQty,\n networkId,\n checkIsBridgeless,\n };\n};\n","import { WithdrawFormUI } from \"./withdrawForm.ui\";\nimport { useWithdrawForm } from \"./withdrawForm.script\";\nimport { DepositAndWithdrawProps } from \"../depositAndWithdraw\";\n\nexport const WithdrawFormWidget = (dialogProps: DepositAndWithdrawProps) => {\n const props = useWithdrawForm({\n onClose: dialogProps.close,\n });\n return <WithdrawFormUI {...props} />;\n};\n","import { FC, useState } from \"react\";\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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/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"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/depositForm/depositForm.ui.tsx","../src/components/quantityInput/index.tsx","../src/components/quantityInput/tokenOption.tsx","../src/components/quantityInput/useBalance.ts","../src/components/chainSelect/index.tsx","../src/icons.tsx","../src/components/exchangeDivider/index.tsx","../src/components/web3Wallet/index.tsx","../src/utils.ts","../src/components/brokerWallet/index.tsx","../src/components/availableQuantity/index.tsx","../src/components/swapCoin/index.tsx","../src/components/fee/index.tsx","../src/components/actionButton/index.tsx","../src/types.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/widget.tsx","../src/components/withdrawForm/withdrawForm.ui.tsx","../src/components/withdrawWarningMessage/index.tsx","../src/components/unsettlePnlInfo/index.tsx","../src/components/withdrawAction/index.tsx","../src/components/crossWithdrawConfirm/index.tsx","../src/components/withdrawAction/SwitchChainButton.tsx","../src/components/withdrawForm/withdrawForm.script.tsx","../src/components/withdrawForm/widget.tsx","../src/components/depositAndWithdraw/index.tsx","../src/components/depositAndWithdraw/plugin.tsx"],"names":["Box","Flex","textVariants","forwardRef","useEffect","useMemo","useRef","useState","Input","Select","cn","Text","inputFormatter","Spinner","TokenIcon","useBalance","token","fetchBalance","balance","setBalance","loading","setLoading","err","Decimal","jsx","jsxs","TokenOption","props","isActive","onTokenChange","symbol","precision","decimals","showBalance","dp","renderValue","useTranslation","Fragment","QuantityInput","ref","tokens","classNames","label","status","hintMessage","value","onValueChange","placeholder","rest","t","inputRef","open","setOpen","width","setWidth","tokenOptions","rect","_onTokenChange","find","item","optionRenderer","prefix","selectable","suffix","event","message","_placeholder","ChainIcon","DropdownMenuContent","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","ScrollArea","ExchangeIcon","ArrowDownIcon","DepositIcon","WithdrawIcon","RefreshIcon","ChainSelect","chains","wrongNetwork","chainIcon","chainName","renderRightIcon","trigger","content","chain","index","e","ExchangeDivider","useAccount","useWalletConnector","ABSTRACT_CHAIN_ID_MAP","WalletIcon","formatAddress","address","getTokenByTokenList","tokenObj","acc","feeDecimalsOffset","origin","Web3Wallet","wallet","connectedChain","accountState","account","walletName","useAppConfig","useConfig","BrokerWallet","appIcons","brokerName","icon","secondary","AvailableQuantity","amount","maxQuantity","name","SwapCoin","dst","price","srcSymbol","modal","Fee","dstGasFee","feeQty","feeAmount","nativeSymbol","onShowFee","showFeeQty","Button","AuthGuard","AccountStatusEnum","DepositAction","ActionButton","disabled","actionType","onDeposit","onApprove","networkId","buttonParams","buttonSize","DepositForm","quantity","onQuantityChange","inputStatus","currentChain","settingChain","onChainChange","balanceRevalidating","fee","useCallback","useDeposit","useIndexPrice","ChainNamespace","useAppContext","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","WithdrawWarningMessage","checkIsBridgeless","chainVaultBalance","maxAmount","crossChainTrans","networkName","showVaultWarning","ExclamationFillIcon","Tooltip","Trans","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlle","settlePnlDialog","CrossWithdrawConfirm","ChainSelectorDialogId","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","preWithdraw","WithdrawFormUI","unsettledPnL","onSettlePnl","showQty","useContext","OrderlyContext","usePositionStream","usePrivateQuery","useQuery","useWalletSubscription","useWithdraw","markPrice","useWithdrawForm","onClose","positionData","setCrossChainTrans","assetHistory","balanceList","config","withdraw","isLoading","availableBalance","availableWithdraw","setDisabled","allChains","configStore","apiBaseUrl","tokenChainsRes","data","vaultBalance","qtyNum","minAmount","c","trxId","transStatus","WithdrawFormWidget","dialogProps","registerSimpleDialog","registerSimpleSheet","TabPanel","Tabs","ExtensionPositionEnum","ExtensionSlot","installExtension","installDeposit","DepositSlot","DepositAndWithdrawWithDialogId","DepositAndWithdrawWithSheetId","DepositAndWithdraw","activeTab","setActiveTab"],"mappings":"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","sourcesContent":["import { FC } from \"react\";\nimport { UseDepositFormScriptReturn } from \"./depositForm.script\";\nimport { Box, Flex, textVariants } from \"@orderly.network/ui\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { SwapCoin } from \"../swapCoin\";\nimport { Fee } from \"../fee\";\nimport { ActionButton } from \"../actionButton\";\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 { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\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 { API } from \"@orderly.network/types\";\nimport { TokenOption } from \"./tokenOption\";\nimport { InputStatus } from \"../../types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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 onTokenChange,\n fetchBalance,\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 props.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-h-[54px] oui-relative oui-px-3\",\n \"oui-border oui-border-line oui-rounded-lg\",\n status === \"error\" &&\n \"focus-within:oui-outline-danger-light oui-outline-danger-light\",\n status === \"warning\" &&\n \"focus-within:oui-outline-warning-light oui-outline-warning-light\",\n props.readOnly\n ? \"oui-bg-base-6 focus-within:oui-outline-0 oui-border-none\"\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 { cn, Flex, Spinner, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { useBalance } from \"./useBalance\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\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, decimals } = 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 { 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","import { FC } from \"react\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../../icons\";\n\nexport const ExchangeDivider: FC = () => {\n return (\n <Flex height={40} gapX={3}>\n <Flex height={1} className=\"oui-bg-base-contrast-12 oui-flex-1\"></Flex>\n <ArrowDownIcon className=\"oui-text-primary-light\" />\n <Flex height={1} className=\"oui-bg-base-contrast-12 oui-flex-1\"></Flex>\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 { 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 { FC } from \"react\";\nimport { Flex, Spinner, Text } from \"@orderly.network/ui\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type AvailableQuantityProps = {\n token?: API.TokenInfo;\n amount: number;\n maxQuantity?: 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 } 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 } 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 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 {useCallback, useEffect, useMemo} from \"react\";\nimport {useAccount, useConfig, useDeposit, useIndexPrice} from \"@orderly.network/hooks\";\nimport {API, NetworkId, ChainNamespace} from \"@orderly.network/types\";\nimport {Decimal} from \"@orderly.network/utils\";\nimport {useAppContext} from \"@orderly.network/react-app\";\nimport {feeDecimalsOffset} from \"../../utils\";\nimport {useActionType, useChainSelect, useDepositAction, useInputStatus, useToken,} 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(new Decimal(10).pow(account.walletAdapter?.chainNamespace === ChainNamespace.solana ? 9:18))\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 { Decimal } from \"@orderly.network/utils\";\nimport { useEffect, useState } from \"react\";\nimport { InputStatus } from \"../../../types\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\ntype Options = { quantity: string; maxQuantity: string };\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 d = new Decimal(quantity);\n\n if (d.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 { Box, Flex, Text, textVariants } from \"@orderly.network/ui\";\nimport {\n useWithdrawForm,\n UseWithdrawFormScriptReturn,\n} from \"./withdrawForm.script\";\nimport { Web3Wallet } from \"../web3Wallet\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { BrokerWallet } from \"../brokerWallet\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { QuantityInput } from \"../quantityInput\";\nimport { AvailableQuantity } from \"../availableQuantity\";\nimport { WithdrawWarningMessage } from \"../withdrawWarningMessage\";\nimport { UnsettlePnlInfo } from \"../unsettlePnlInfo\";\nimport { WithdrawAction } from \"../withdrawAction\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type WithdrawFormProps = ReturnType<typeof useWithdrawForm> & {\n onClose?: () => void;\n};\n\nexport const WithdrawFormUI = ({\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}: UseWithdrawFormScriptReturn) => {\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 <UnsettlePnlInfo\n unsettledPnl={unsettledPnL}\n hasPositions={hasPositions}\n onSettlle={onSettlePnl}\n />\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 { 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 {\n ExclamationFillIcon,\n Flex,\n modal,\n Text,\n Tooltip,\n} from \"@orderly.network/ui\";\nimport { RefreshIcon } from \"../../icons\";\nimport { Trans, useTranslation } from \"@orderly.network/i18n\";\ninterface IProps {\n hasPositions: boolean;\n unsettledPnl: number;\n onSettlle: () => Promise<any>;\n}\n\nexport const UnsettlePnlInfo = ({\n hasPositions,\n unsettledPnl,\n onSettlle,\n}: IProps) => {\n const { t } = useTranslation();\n\n if (unsettledPnl === 0 && !hasPositions) {\n return <></>;\n }\n const settlePnlDialog = () => {\n modal.confirm({\n title: t(\"settle.settlePnl\"),\n // @ts-ignore\n content: <Trans i18nKey=\"settle.settlePnl.description\" />,\n onOk: () => {\n return onSettlle();\n },\n });\n };\n return (\n <Flex\n justify=\"between\"\n className=\"oui-text-2xs oui-text-base-contrast-36 oui-mt-1 oui-mx-2\"\n >\n <Flex itemAlign=\"center\" justify=\"start\" gap={1}>\n <Tooltip\n className=\"oui-max-w-[274px]\"\n content={t(\"settle.unsettled.tooltip\")}\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-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\">\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 { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n OrderlyContext,\n useAccount,\n useChains,\n useConfig,\n useEventEmitter,\n useLocalStorage,\n usePositionStream,\n usePrivateQuery,\n useQuery,\n useWalletConnector,\n useWalletSubscription,\n useWithdraw,\n} from \"@orderly.network/hooks\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { Decimal, int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { InputStatus } from \"../../types\";\nimport { CurrentChain } from \"../depositForm/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\n\nexport type UseWithdrawFormScriptReturn = ReturnType<typeof useWithdrawForm>;\n\nconst markPrice = 1;\n\nexport const useWithdrawForm = ({\n onClose,\n}: {\n onClose: (() => void) | undefined;\n}) => {\n const { t } = useTranslation();\n const [positionData] = usePositionStream();\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 [token, setToken] = useState<API.TokenInfo>({\n symbol: \"USDC\",\n decimals: 6,\n address: \"\",\n display_name: \"\",\n precision: 6,\n });\n const [inputStatus, setInputStatus] = useState<InputStatus>(\"default\");\n const [hintMessage, setHintMessage] = useState<string>();\n const { wrongNetwork } = useAppContext();\n const { account } = useAccount();\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 const config = useConfig();\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 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 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 { 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 formatter: (data) => {\n console.log(\"-- data\", data);\n if (data.rows.length === 1) {\n return data.rows[0].chain_details;\n }\n },\n }\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 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 hasPositions = useMemo(\n () => positionData?.rows?.length! > 0,\n [positionData]\n );\n\n const onSettlePnl = async () => {\n return account\n .settle()\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(t(\"settle.settlement.error\"));\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 }\n\n if (e.message.indexOf(\"user rejected\") !== -1) {\n toast.error(t(\"transfer.rejectTransaction\"));\n }\n return Promise.reject(e);\n })\n .then((res) => {\n toast.success(t(\"settle.settlement.requested\"));\n return Promise.resolve(res);\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 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 if (onClose) {\n onClose();\n }\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 = useMemo(() => {\n if (!currentChain) return 0;\n\n const item = tokenChainsRes?.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 }, [currentChain, tokenChainsRes, chains, crossChainWithdraw]);\n\n const showQty = useMemo(() => {\n console.log(\"quanty\", quantity);\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 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 hasPositions,\n unsettledPnL,\n wrongNetwork,\n settingChain,\n chains,\n currentChain,\n onChainChange,\n onSettlePnl,\n onWithdraw,\n chainVaultBalance,\n fee,\n crossChainWithdraw,\n crossChainTrans,\n showQty,\n networkId,\n checkIsBridgeless,\n };\n};\n","import { WithdrawFormUI } from \"./withdrawForm.ui\";\nimport { useWithdrawForm } from \"./withdrawForm.script\";\nimport { DepositAndWithdrawProps } from \"../depositAndWithdraw\";\n\nexport const WithdrawFormWidget = (dialogProps: DepositAndWithdrawProps) => {\n const props = useWithdrawForm({\n onClose: dialogProps.close,\n });\n return <WithdrawFormUI {...props} />;\n};\n","import { FC, useState } from \"react\";\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\";\nimport { useTranslation } from \"@orderly.network/i18n\";\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/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"]}
|