@orderly.network/ui-transfer 2.0.0-alpha.1

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.
@@ -0,0 +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/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/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","Fragment","QuantityInput","ref","tokens","classNames","label","status","hintMessage","value","onValueChange","placeholder","rest","inputRef","open","setOpen","width","setWidth","tokenOptions","rect","_onTokenChange","find","item","optionRenderer","prefix","selectable","suffix","event","message","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","DepositAction","ActionButton","disabled","actionType","onDeposit","onApprove","networkId","buttonParams","DepositForm","quantity","onQuantityChange","inputStatus","currentChain","settingChain","onChainChange","balanceRevalidating","fee","useCallback","useAccount","useDeposit","useIndexPrice","ChainNamespace","useAppContext","useActionType","options","isNativeToken","allowance","allowanceNum","qty","maxQty","useChains","toast","int2hex","praseChainIdToNumber","useChainSelect","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","AccountStatusEnum","WithdrawWarningMessage","checkIsBridgeless","chainVaultBalance","maxAmount","crossChainTrans","networkName","showVaultWarning","ExclamationFillIcon","Tooltip","UnsettlePnlInfo","hasPositions","unsettledPnl","onSettlle","settlePnlDialog","CrossWithdrawConfirm","ChainSelectorId","SwitchChainButton","switchChain","r","WithdrawAction","onWithdraw","crossChainWithdraw","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 <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 />\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\n <Flex justify=\"center\" mt={8}>\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 { Decimal } from \"@orderly.network/utils\";\nimport { InputStatus } from \"../../types\";\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} & 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 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 || \"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=\"oui-testid-withdraw_deposit-dialog-quantity-input\"\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-bg-base-5 oui-rounded-lg\",\n \"oui-border oui-border-line\",\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\"\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\";\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\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={600}\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 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 lowest fee\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=\"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=\"M3.496 1.495a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2zm2.5 2a.5.5 0 0 1 .5.5v2.5h1.5l-2 2-2-2h1.5v-2.5a.5.5 0 0 1 .5-.5\" />\n </svg>\n);\n\nexport const WithdrawIcon: 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=\"M3.495 10.495a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h5a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2zm2.5-2a.5.5 0 0 0 .5-.5v-2.5h1.5l-2-2-2 2h1.5v2.5a.5.5 0 0 0 .5.5\" />\n </svg>\n);\n\nexport const RefreshIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n 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 fill=\"#608CFF\"/>\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\";\n\nexport const Web3Wallet: FC = () => {\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\">Your Web3 Wallet</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\";\n\nexport const BrokerWallet: FC = () => {\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\">{`Your ${brokerName} account`}</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\";\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\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 Available:{\" \"}\n <Text.numeral rm={Decimal.ROUND_DOWN} dp={dp} padding={false} data-testid=\"oui-testid-withdraw_deposit-dialog-available-value\">\n {maxQuantity!}\n </Text.numeral>{\" \"}\n {name}\n </Text>\n\n {loading && <Spinner size=\"sm\" />}\n\n <Text\n size=\"2xs\"\n color=\"primaryLight\"\n className=\"oui-cursor-pointer oui-select-none\"\n onClick={props.onClick}\n >\n 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\";\n\ntype FeeProps = UseFeeReturn;\n\nexport const Fee: FC<FeeProps> = (props) => {\n const { dstGasFee, feeQty, feeAmount, dp, nativeSymbol } = props;\n\n const onShowFee = () => {\n const content = (\n <div className=\"oui-text-2xs\">\n <Flex gapX={1}>\n <Text intensity={54}>Destination gas fee:</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 Additional gas tokens are required to cover operations on the\n destination chain.\n </Text>\n </Box>\n </div>\n );\n\n modal.alert({\n title: \"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 {`Fee ≈ `}\n\n <Text size=\"xs\" intensity={80}>\n $\n <Text.numeral dp={2} padding={false} rm={Decimal.ROUND_UP}>\n {feeAmount}\n </Text.numeral>\n {` `}\n </Text>\n\n {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 { NetworkId } from \"@orderly.network/types\";\nimport { DepositAction } from \"../../types\";\n\nexport type ActionButtonProps = {\n disabled?: boolean;\n loading?: boolean;\n actionType: DepositAction;\n symbol?: string;\n onDeposit?: () => void;\n onApprove?: () => void;\n 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\n const buttonParams = useMemo(() => {\n const params: Record<DepositAction, ButtonProps> = {\n [DepositAction.Approve]: {\n children: `Approve ${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: `increase ${symbol} authorized amount`,\n onClick: onApprove,\n \"data-testid\": \"oui-testid-deposit-dialog-increase-btn\"\n },\n [DepositAction.Deposit]: {\n children: \"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]);\n\n return (\n <Box className=\"oui-min-w-[184px]\">\n <AuthGuard networkId={networkId} buttonProps={{ fullWidth: true }}>\n <Button\n fullWidth\n disabled={disabled}\n loading={loading}\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 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\";\n\nexport type CurrentChain = Pick<ConnectedChain, \"namespace\"> & {\n id: number;\n info?: Chain;\n};\n\nexport function useChainSelect() {\n const networkId = useConfig(\"networkId\") as NetworkId;\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 = praseChainIdToNumber(connectedChain.id);\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [connectedChain, findByChainId]);\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 setChain({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n switched\n ? toast.success(\"Network switched\")\n : toast.error(\"Switch chain failed\");\n })\n .catch((error) => {\n toast.error(`Switch chain failed: ${error.message}`);\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\";\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\n const ee = useEventEmitter();\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(\"Approve success\");\n })\n .catch((error) => {\n console.log(\"approve error\", error);\n toast.error(error?.errorCode || \"Approve failed\");\n })\n .finally(() => {\n setSubmitting(false);\n });\n }, [approve, submitting, quantity, allowance]);\n\n const doDeposit = useCallback(async () => {\n return deposit()\n .then((res: any) => {\n toast.success(\"Deposit requested\");\n ee.emit(\"deposit:requested\");\n onSuccess?.();\n })\n .catch((error) => {\n toast.error(error?.errorCode || \"Deposit failed\");\n });\n }, [deposit, onSuccess, ee]);\n\n const onDeposit = useCallback(() => {\n const num = Number(quantity);\n\n if (isNaN(num) || num <= 0) {\n toast.error(\"Please input a valid number\");\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]);\n\n return { submitting, onApprove, onDeposit };\n}\n","import { Decimal } from \"@orderly.network/utils\";\nimport { useEffect, useState } from \"react\";\nimport { InputStatus } from \"../../../types\";\n\ntype Options = { quantity: string; maxQuantity: string };\n\nexport function useInputStatus(options: Options) {\n const { quantity, maxQuantity } = options;\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(\"Insufficient balance\");\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 {useWithdrawForm, UseWithdrawFormScriptReturn} from \"./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\";\n\nexport type WithdrawFormProps = ReturnType<typeof useWithdrawForm> & {\n onClose?: () => void;\n}\n\n\nexport const WithdrawFormUI = (\n {\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) => {\n return (\n <Box id=\"oui-withdraw-form\" className={textVariants({weight: \"semibold\"})}>\n <Box mb={5}>\n\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={token}\n onTokenChange={() => {\n }}\n status={inputStatus}\n hintMessage={hintMessage}\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 unsettledPnl={unsettledPnL} hasPositions={hasPositions} onSettlle={onSettlePnl}/>\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 />\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\n size=\"xs\"\n intensity={36}\n >\n {`Fee ≈ `}\n <Text size=\"xs\" intensity={80}>\n {`${fee} `}\n </Text>\n <Text>\n USDC\n </Text>\n\n </Text>\n </Flex>\n </Box>\n\n <WithdrawWarningMessage checkIsBridgeless={checkIsBridgeless} chainVaultBalance={chainVaultBalance} currentChain={currentChain} quantity={quantity} maxAmount={maxQuantity} crossChainTrans={crossChainTrans}/>\n\n <Flex justify=\"center\" mt={3}>\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}","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\";\n\ninterface IProps{\n quantity: string;\n chainVaultBalance: number;\n currentChain: any;\n maxAmount: number;\n crossChainTrans: boolean;\n checkIsBridgeless: boolean;\n}\n\nexport const WithdrawWarningMessage = ({checkIsBridgeless, quantity, chainVaultBalance, currentChain, maxAmount, crossChainTrans}: IProps) => {\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\n\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\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 Withdrawals are not supported on {networkName ?? \"this chain\"}. Please switch to any of the bridgeless networks.\n </Box>\n )\n }\n if (crossChainTrans) {\n return `Your cross-chain withdrawal is being processed...`;\n }\n if (showVaultWarning) {\n return `Withdrawal exceeds the balance of the ${networkName} vault ( ${chainVaultBalance} USDC ). Cross-chain rebalancing fee will be charged for withdrawal to ${networkName}.`\n }\n }\n\n return (\n <Flex className='oui-text-warning oui-text-xs oui-text-center'>\n {renderContent()}\n </Flex>\n )\n}","import {Box, Button, ExclamationFillIcon, Flex, modal, Text, Tooltip} from \"@orderly.network/ui\"\nimport {RefreshIcon} from \"../../icons\";\n\ninterface IProps {\n hasPositions: boolean;\n unsettledPnl: number;\n onSettlle: () => Promise<any>;\n}\n\nexport const UnsettlePnlInfo = ({hasPositions, unsettledPnl, onSettlle}: IProps) => {\n if (unsettledPnl === 0 && !hasPositions) {\n return <></>\n }\n const settlePnlDialog = () => {\n modal.confirm({\n title: 'Settle PnL',\n content: <Box>Are you sure you want to settle your PnL?<br/> Settlement will take up to 1 minute before you\n can withdraw your available balance.</Box>,\n onOk: () => {\n return onSettlle();\n }\n\n })\n }\n return (\n <Flex justify='between' className='oui-text-2xs oui-text-base-contrast-36 oui-mt-1 oui-mx-2'>\n <Flex itemAlign='center' justify='start' gap={1}>\n\n <Tooltip\n className='oui-max-w-[274px]'\n content={'Unsettled balance can not be withdrawn. In order to withdraw, please settle your balance first.'}\n >\n\n <Flex itemAlign='center' justify='start' gap={1}>\n <ExclamationFillIcon size={14} className='oui-text-warning'/>\n <Text\n className=\"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer\"\n >\n Unsettled:\n </Text>\n </Flex>\n </Tooltip>\n <Text.numeral showIdentifier coloring weight=\"semibold\" dp={6} data-testid=\"oui-testid-withdraw-dialog-unsettledPnl-value\">\n {unsettledPnl}\n </Text.numeral>\n <Text>USDC</Text>\n </Flex>\n <Flex itemAlign='center' gap={1} className='oui-cursor-pointer'>\n <RefreshIcon/>\n <Text\n data-testid=\"oui-testid-withdraw-dialog-settle-text\"\n size=\"2xs\"\n color=\"primaryLight\"\n className=\" oui-select-none\"\n onClick={settlePnlDialog}\n >\n Settle\n </Text>\n\n </Flex>\n </Flex>\n )\n}","import {Box, Button, ButtonProps, modal} from \"@orderly.network/ui\";\nimport {AuthGuard} from \"@orderly.network/ui-connector\";\nimport React, {useMemo} from \"react\";\nimport {NetworkId} from \"@orderly.network/types\";\nimport {CrossWithdrawConfirm} from \"../crossWithdrawConfirm\";\nimport {Decimal} from \"@orderly.network/utils\";\nimport SwitchChainButton from \"./SwitchChainButton\";\n\ninterface IProps {\n disabled?: boolean;\n loading?: boolean;\n onWithdraw: () => Promise<void>;\n networkId?: NetworkId;\n crossChainWithdraw: boolean;\n address?: string;\n currentChain?: any;\n quantity: string;\n fee: number;\n checkIsBridgeless: boolean;\n\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\n const amount = useMemo(() => {\n if (!quantity) {\n return 0;\n }\n return new Decimal(quantity).minus(fee ?? 0).toNumber();\n\n }, [quantity, fee])\n\n const preWithdraw = () => {\n if (crossChainWithdraw) {\n modal.confirm({\n title: \"Confirm to withdraw\",\n content: <CrossWithdrawConfirm address={address!} amount={amount} currentChain={currentChain}/>,\n bodyClassName: 'oui-p-0',\n onOk: async () => {\n onWithdraw();\n },\n\n })\n return;\n }\n onWithdraw();\n\n }\n\n return (\n <Box width={184}>\n <AuthGuard networkId={networkId} bridgeLessOnly buttonProps={{fullWidth: true}}>\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 >\n Withdraw\n </Button>\n :\n <SwitchChainButton networkId={networkId}/>\n }\n </AuthGuard>\n </Box>\n );\n}","import {Box, ChainIcon, Flex, Text} from \"@orderly.network/ui\"\nimport {useMemo} from \"react\";\n\ninterface IProps {\n currentChain: any;\n amount: number;\n address: string;\n\n}\n\nexport const CrossWithdrawConfirm = ({address, amount, currentChain}: IProps) => {\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\n\n }, [currentChain]) ;\n return (\n <Flex direction='column' itemAlign='start' justify='start' gap={3}>\n <Flex direction='column' itemAlign='start' gap={3} mb={5}>\n <Flex direction=\"column\" justify='start' itemAlign='start'>\n <Text size='2xs' intensity={36}>\n Recipient address\n </Text>\n <Text size='sm' intensity={98}>\n {address}\n </Text>\n </Flex>\n <Flex direction=\"column\" justify='start' itemAlign='start'>\n <Text size='2xs' intensity={36}>\n Recipient network\n </Text>\n <Flex gap={1}>\n <ChainIcon className='oui-h-[18px] oui-w-[18px]' size={'sm'} chainId={currentChain.id}/>\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 Withdraw amount (USDC)\n </Text>\n <Text.numeral size='sm' intensity={98} dp={2}>\n {amount}\n </Text.numeral>\n </Flex>\n\n </Flex>\n <Flex justify='center' className='oui-text-warning oui-text-xs oui-text-center'>\n Withdrawals that require cross-chain rebalancing can't be cancelled or followed up with more withdrawals\n until they've been processed.\n </Flex>\n\n </Flex>\n )\n}","import {Box, Button, Flex, modal, Text, toast} from \"@orderly.network/ui\";\nimport {useAccount} from \"@orderly.network/hooks\";\nimport { ChainSelectorId } from \"@orderly.network/ui-chain-selector\";\nimport { AccountStatusEnum, NetworkId } from \"@orderly.network/types\";\n\ninterface IProps{\n networkId?:NetworkId;\n}\nexport default function SwitchChainButton(props:IProps) {\n const { account } = useAccount();\n const switchChain = () => {\n\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorId, {\n networkId: props.networkId,\n bridgeLessOnly: true,\n })\n .then(\n (r) => {\n toast.success(\"Network switched\");\n\n },\n (error) => console.log(\"[switchChain error]\", error)\n );\n };\n\n\n return (\n\n <Flex direction={\"column\"}>\n <Button\n color=\"warning\"\n // size=\"md\"\n // fullWidth\n onClick={() => {\n switchChain();\n }}\n >\n Switch Network\n </Button>\n\n </Flex>\n )\n}","import {useCallback, useContext, useEffect, useMemo, useState} from \"react\";\nimport {\n OrderlyContext,\n useAccount,\n useChains,\n useConfig,\n useEventEmitter,\n usePositionStream, usePrivateQuery, useQuery,\n useWalletConnector, 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\";\n\nexport type UseWithdrawFormScriptReturn = ReturnType<typeof useWithdrawForm>\n\n\nconst markPrice = 1;\n\nexport const useWithdrawForm = ({onClose}: {onClose:(() => void) | undefined}) => {\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 {data: balanceList} = useQuery<any>(\n `/v1/public/vault_balance`,\n {\n revalidateOnMount: true,\n }\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\n const onQuantityChange = (qty: string) => {\n setQuantity(qty);\n\n }\n const amount = useMemo(() => {\n return (\n new Decimal(quantity || 0)\n .mul(markPrice)\n .toNumber()\n );\n }, [quantity, markPrice]);\n\n const {dst, withdraw, isLoading, maxAmount, availableBalance, availableWithdraw, unsettledPnL} = 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\n }, [allChains, networkId]);\n\n const {\n configStore,\n } = 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\n\n const currentChain = useMemo(() => {\n if (!connectedChain) return null;\n\n const chainId = praseChainIdToNumber(connectedChain.id);\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [connectedChain, findByChainId]);\n\n\n const checkIsBridgeless = useMemo(() => {\n if (wrongNetwork) {\n return false;\n }\n if (!currentChain) {\n return false;\n }\n if (networkId=== 'testnet') {\n return true;\n }\n if (!currentChain.info) {\n return false;\n }\n if (!currentChain.info.network_infos || !currentChain.info.network_infos.bridgeless) {\n return false;\n }\n return true;\n\n }, [currentChain, wrongNetwork]);\n\n\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(\"Network switched\");\n // clean input value\n cleanData();\n } else {\n toast.error(\"Switch chain failed\");\n }\n })\n .catch((error) => {\n toast.error(`Switch chain failed: ${error.message}`);\n });\n },\n [currentChain, switchChain, findByChainId]\n );\n\n const hasPositions = useMemo(() => positionData?.rows?.length! > 0, [positionData]);\n\n const onSettlePnl = async () => {\n return account\n .settle()\n .catch((e) => {\n if (e.code == -1104) {\n toast.error(\n \"Settlement is only allowed once every 10 minutes. Please try again later.\"\n );\n }\n if (e.message.indexOf('user rejected') !== -1) {\n toast.error('REJECTED_TRANSACTION');\n }\n return Promise.reject(e);\n })\n .then((res) => {\n toast.success(\"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\n const minAmount = useMemo(() => {\n // @ts-ignore;\n return chains.minimum_withdraw_amount ?? 1;\n\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(`quantity must large than ${minAmount}`);\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 }).then(res => {\n toast.success('Withdraw requested');\n ee.emit(\"withdraw:requested\");\n\n if (onClose) {\n onClose();\n }\n setQuantity('');\n }).catch(e => {\n if (e.message.indexOf('user rejected') !== -1) {\n toast.error('REJECTED_TRANSACTION');\n return;\n }\n toast.error(e.message);\n }).finally(() => {\n setLoading(false);\n });\n }\n\n\n const fee = useMemo(() => {\n if (!currentChain) return 0;\n\n\n const item = tokenChainsRes?.find((c: any) => parseInt(c.chain_id) ===currentChain!.id);\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\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\n if (unsettledPnL < 0) {\n if (qty.gt(maxAmount)) {\n\n setInputStatus('error');\n setHintMessage('Insufficient balance');\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('Insufficient balance');\n setDisabled(true);\n } else if (qty.gt(new Decimal(maxAmount).minus(unsettledPnL)) && qty.lessThanOrEqualTo(maxAmount)) {\n setInputStatus(\"warning\");\n setHintMessage(\"Please settle your balance\");\n setDisabled(true);\n } else {\n setInputStatus('default')\n setHintMessage('');\n setDisabled(false);\n }\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}","import {WithdrawFormUI} from \"./ui\";\nimport {useWithdrawForm} from \"./script\";\nimport {DepositAndWithdrawProps} from \"../depositAndWithdraw\";\n\nexport const WithdrawFormWidget = (dialogProps: DepositAndWithdrawProps) => {\n const props = useWithdrawForm({\n onClose: dialogProps.close,\n });\n return (\n <WithdrawFormUI {...props} />\n )\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\";\n\nexport const DepositAndWithdrawWithDialogId = \"DepositAndWithdrawWithDialogId\";\nexport const DepositAndWithdrawWithSheetId = \"DepositAndWithdrawWithSheetId\";\n\nexport type DepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n};\n\nexport const DepositAndWithdraw: FC<DepositAndWithdrawProps> = (props) => {\n console.log(\"DepositAndWithdraw\", props);\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\"\n );\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel title=\"Deposit\" icon={<DepositIcon />} value=\"deposit\">\n <DepositSlot onClose={props.close} />\n </TabPanel>\n <TabPanel title=\"Withdraw\" icon={<WithdrawIcon />} value=\"withdraw\">\n <WithdrawFormWidget {...props} />\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(DepositAndWithdrawWithDialogId, DepositAndWithdraw, {\n size: \"md\",\n bodyClassName: \"oui-pt-3\",\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"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,15 @@
1
+ import { Box, Text, Spinner, Select, Flex, cn, Input, inputFormatter, registerSimpleDialog, registerSimpleSheet, ChainIcon, DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, ScrollArea, WalletIcon, Button, textVariants, toast, installExtension, ExtensionPositionEnum, Tabs, TabPanel, TokenIcon, modal, Tooltip, ExclamationFillIcon, ExtensionSlot } from '@orderly.network/ui';
2
+ import { forwardRef, useRef, useState, useMemo, useEffect, useCallback, useContext } from 'react';
3
+ import { Decimal, praseChainIdToNumber, int2hex } from '@orderly.network/utils';
4
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
+ import { useWalletConnector, useConfig, useChains, useEventEmitter, useDeposit, useAccount, useIndexPrice, usePositionStream, usePrivateQuery, useQuery, useWithdraw, OrderlyContext, useWalletSubscription } from '@orderly.network/hooks';
6
+ import { useAppConfig, useAppContext } from '@orderly.network/react-app';
7
+ import { AuthGuard } from '@orderly.network/ui-connector';
8
+ import { ChainNamespace, AccountStatusEnum } from '@orderly.network/types';
9
+ import { ChainSelectorId } from '@orderly.network/ui-chain-selector';
10
+
11
+ function gt(e,o){let[n,t]=useState(""),[r,a]=useState(!1);return useEffect(()=>{r||typeof o!="function"||(a(!0),o(e.address,e.decimals).then(i=>{t(i);}).catch(i=>{}).finally(()=>{a(!1);}));},[e]),{balance:n,loading:r}}var Ct=e=>{let{token:o,isActive:n,onTokenChange:t,fetchBalance:r}=e,{symbol:a,precision:i,decimals:s}=o,{balance:l,loading:c}=gt(o,r),m=typeof r=="function",w=i??2,h=()=>m?c?jsx(Spinner,{size:"sm"}):jsx(Text.numeral,{rule:"price",dp:w,rm:Decimal.ROUND_DOWN,className:cn("oui-text-base-contrast-80 group-hover:oui-text-base-contrast-54",n&&"oui-text-base-contrast-54"),children:l}):null;return jsxs(Flex,{justify:"between",px:2,r:"base",className:cn("group","oui-h-[30px] hover:oui-bg-base-5","oui-text-2xs oui-font-semibold","oui-cursor-pointer",n&&"oui-bg-base-5",e.index!==0&&"oui-mt-[2px]"),onClick:()=>{t?.(o);},children:[jsxs(Flex,{gapX:1,children:[jsx(TokenIcon,{name:a,className:"oui-w-[16px] oui-h-[16px]"}),jsx(Text,{className:cn("oui-text-base-contrast-54 group-hover:oui-text-base-contrast-80",n&&"oui-text-base-contrast-80"),children:a})]}),h()]},a)};var L=forwardRef((e,o)=>{let{token:n,tokens:t=[],classNames:r,label:a,status:i,hintMessage:s,value:l,onValueChange:c,onTokenChange:m,fetchBalance:w,loading:h,placeholder:f,...p}=e,d=useRef(null),[b,I]=useState(!1),[N,T]=useState(0),v=useMemo(()=>t.map(g=>({...g,name:g.display_name||g.symbol})),[t]);useEffect(()=>{let g=d?.current?.getBoundingClientRect();T(g?.width||0);},[d]);let S=g=>{let V=t.find(q=>q.symbol===g);V&&m?.(V);},F=g=>{let V=g.symbol===n?.symbol;return jsx(Ct,{token:g,fetchBalance:w,onTokenChange:q=>{m?.(q),I(!1);},isActive:V})},A=jsxs(Box,{children:[jsx(Box,{className:"oui-absolute oui-top-0",children:jsx(Text,{size:"2xs",intensity:36,children:a||"Quantity"})}),h&&jsx(Box,{className:"oui-absolute oui-bottom-1",children:jsx(Spinner,{size:"sm"})})]}),U=t.length>1,E=jsx("div",{className:"oui-absolute oui-right-0",children:jsx(Select.tokens,{open:U?b:!1,onOpenChange:I,disabled:p.disabled,variant:"text",tokens:v,value:n?.display_name||n?.symbol,size:p.size,onValueChange:S,showIcon:!0,optionRenderer:F,contentProps:{onCloseAutoFocus:g=>{g.preventDefault(),d.current?.focus();},onClick:g=>{g.preventDefault(),d.current?.focus();},style:{width:N},align:"end",sideOffset:5,className:"oui-border oui-border-line-6"}})}),z=jsxs(Flex,{mt:1,gapX:1,px:1,children:[jsx(Box,{width:4,height:4,r:"full",className:cn(i==="error"&&"oui-bg-danger-light",i==="warning"&&"oui-bg-warning-light")}),jsx(Text,{size:"2xs",className:cn(i==="error"&&"oui-text-danger-light",i==="warning"&&"oui-text-warning-light"),children:s})]});return jsxs(Fragment,{children:[jsx(Input,{"data-testid":"oui-testid-withdraw_deposit-dialog-quantity-input",ref:d,autoComplete:"off",placeholder:f??(h?"":"0"),prefix:A,suffix:E,value:l,onValueChange:g=>{e.onValueChange?.(g);},formatters:[inputFormatter.numberFormatter,inputFormatter.dpFormatter(n?.precision??2),inputFormatter.currencyFormatter],...p,classNames:{...r,root:cn("oui-h-[54px] oui-relative oui-px-3","oui-bg-base-5 oui-rounded-lg","oui-border oui-border-line",i==="error"&&"focus-within:oui-outline-danger-light oui-outline-danger-light",i==="warning"&&"focus-within:oui-outline-warning-light oui-outline-warning-light",e.readOnly?"oui-bg-base-6 focus-within:oui-outline-0":"oui-bg-base-5",r?.root),input:cn("oui-absolute oui-bottom-0",r?.input)}}),s&&z]})});var It=e=>jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("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"})}),vt=e=>jsx("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("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"})});var Ft=e=>jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("path",{d:"M3.496 1.495a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2zm2.5 2a.5.5 0 0 1 .5.5v2.5h1.5l-2 2-2-2h1.5v-2.5a.5.5 0 0 1 .5-.5"})}),Tt=e=>jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",...e,children:jsx("path",{d:"M3.495 10.495a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h5a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2zm2.5-2a.5.5 0 0 0 .5-.5v-2.5h1.5l-2-2-2 2h1.5v2.5a.5.5 0 0 0 .5.5"})}),St=e=>jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:jsx("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",fill:"#608CFF"})});var se=e=>{let{chains:o,value:n,wrongNetwork:t,loading:r}=e,[a,i]=useState(!1),s=t||o?.length>1,l=t?jsx(Flex,{width:18,height:18,intensity:100,r:"full",justify:"center",itemAlign:"center",children:jsx(Text,{size:"2xs",intensity:80,children:"U"})}):jsx(ChainIcon,{className:"oui-w-[18px] oui-h-[18px]",chainId:n?.id}),c=t?"Unknown":n?.info?.network_infos?.name,m=()=>{if(r)return jsx(Spinner,{size:"sm"});if(s)return jsx(It,{className:"oui-text-base-contrast-54"})},w=jsxs(Flex,{intensity:600,className:cn("oui-rounded-t-xl oui-rounded-b-sm oui-border oui-border-line",s?"oui-cursor-pointer":"oui-cursor-auto"),height:54,px:3,justify:"between",itemAlign:"center",children:[jsxs("div",{children:[jsx(Flex,{children:jsx(Text,{size:"2xs",intensity:54,children:"Network"})}),jsxs(Flex,{gapX:1,children:[l,jsx(Text,{size:"sm",intensity:80,children:c})]})]}),m()]}),h=o.map((f,p)=>{let d=f.chain_id===n?.id;return jsxs(Flex,{px:2,r:"base",justify:"between",className:cn("oui-deposit-network-select-item","hover:oui-bg-base-5 oui-h-[30px] oui-cursor-pointer",d&&"oui-bg-base-5",p!==0&&"oui-mt-[2px]"),onClick:async()=>{i(!1),await e.onValueChange(f);},children:[jsxs(Flex,{gapX:1,itemAlign:"center",children:[jsx(ChainIcon,{className:"oui-w-[18px] oui-h-[18px]",chainId:f.chain_id}),jsx(Text,{size:"2xs",intensity:54,children:f.name}),f.bridgeless&&jsx(Flex,{className:"oui-bg-success-light/15",height:18,px:2,r:"base",justify:"center",itemAlign:"center",children:jsx(Text,{size:"2xs",className:"oui-text-success-light",children:"lowest fee"})})]}),d&&jsx(Box,{width:4,height:4,r:"full",className:"oui-deposit-network-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]"})]},f.chain_id)});return jsxs(DropdownMenuRoot,{open:s?a:!1,onOpenChange:i,children:[jsx(DropdownMenuTrigger,{asChild:!0,children:w}),jsx(DropdownMenuPortal,{children:jsx(DropdownMenuContent,{onCloseAutoFocus:f=>f.preventDefault(),align:"start",sideOffset:2,className:cn("oui-deposit-token-select-dropdown-menu-content","oui-bg-base-8 oui-p-1","oui-w-[var(--radix-dropdown-menu-trigger-width)]","oui-rounded-md oui-select-none"),children:jsx(ScrollArea,{children:jsxs("div",{className:"oui-max-h-[254px]",children:[h," "]})})})})]})};var ae=()=>jsxs(Flex,{height:40,gapX:3,children:[jsx(Flex,{height:1,className:"oui-bg-base-contrast-12 oui-flex-1"}),jsx(vt,{className:"oui-text-primary-light"}),jsx(Flex,{height:1,className:"oui-bg-base-contrast-12 oui-flex-1"})]});function Dt(e){return e?e.replace(/^(.{6})(.*)(.{4})$/,"$1......$3"):"--"}var Nt=(e=[])=>{let o=e.reduce((n,t)=>(n[t.symbol]=t,n),{});return o.USDC||o.USDbC||e[0]},At=e=>(e??2)+3;var le=()=>{let{wallet:e}=useWalletConnector(),{walletName:o,address:n}=useMemo(()=>({walletName:e?.label,address:Dt(e?.accounts?.[0].address)}),[e]);return jsxs(Flex,{justify:"between",children:[jsx(Text,{size:"sm",children:"Your Web3 Wallet"}),jsxs(Flex,{gapX:1,children:[jsx(WalletIcon,{size:"xs",name:o}),jsx(Text,{size:"sm",intensity:54,children:n})]})]})};var ue=()=>{let{appIcons:e}=useAppConfig(),o=useConfig("brokerName"),n=useMemo(()=>{let{secondary:t}=e||{};if(!t?.img&&t?.component)return null;if(t?.img)return jsx("img",{src:t?.img,className:"oui-w-5 oui-h-5"});if(t?.component)return jsx(Fragment,{children:t.component})},[e]);return jsxs(Flex,{justify:"between",children:[jsx(Text,{size:"sm",children:`Your ${o} account`}),n]})};var me=e=>{let{amount:o,maxQuantity:n,token:t,loading:r}=e,a=t?.display_name||t?.symbol||"",i=t?.precision??2;return jsxs(Flex,{justify:"between",px:2,children:[jsxs(Text,{size:"2xs",intensity:36,children:["$",jsx(Text.numeral,{dp:2,padding:!1,rm:Decimal.ROUND_DOWN,children:o})]}),jsxs(Flex,{gapX:2,children:[jsxs(Text,{size:"2xs",intensity:36,children:["Available:"," ",jsx(Text.numeral,{rm:Decimal.ROUND_DOWN,dp:i,padding:!1,"data-testid":"oui-testid-withdraw_deposit-dialog-available-value",children:n})," ",a]}),r&&jsx(Spinner,{size:"sm"}),jsx(Text,{size:"2xs",color:"primaryLight",className:"oui-cursor-pointer oui-select-none",onClick:e.onClick,children:"Max"})]})]})};var Qe=e=>{let{token:o,dst:n,price:t}=e,r=o?.display_name||o?.symbol||"USDC";return jsx(Flex,{children:jsxs(Text,{size:"xs",intensity:36,className:e.className,children:[jsx(Text,{size:"xs",intensity:80,children:"1"}),` ${r} = `,t?jsx(Text.numeral,{size:"xs",intensity:80,dp:3,padding:!1,children:t}):"-",` ${n?.symbol}`]})})};var Ge=e=>{let{dstGasFee:o,feeQty:n,feeAmount:t,dp:r,nativeSymbol:a}=e,i=()=>{let l=jsxs("div",{className:"oui-text-2xs",children:[jsxs(Flex,{gapX:1,children:[jsx(Text,{intensity:54,children:"Destination gas fee:"}),jsx(Text.numeral,{intensity:80,dp:r,rm:Decimal.ROUND_UP,padding:!1,children:n}),jsx(Text,{intensity:54,children:a})]}),jsx(Box,{mt:2,children:jsx(Text,{intensity:36,children:"Additional gas tokens are required to cover operations on the destination chain."})})]});modal.alert({title:"Fee",message:l});},s=!!o&&o!=="0";return jsxs(Text,{size:"xs",intensity:36,className:"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer",onClick:i,children:["Fee \u2248 ",jsxs(Text,{size:"xs",intensity:80,children:["$",jsx(Text.numeral,{dp:2,padding:!1,rm:Decimal.ROUND_UP,children:t})," "]}),s&&jsxs("span",{children:["(",jsxs(Text,{intensity:54,children:[jsx(Text.numeral,{dp:r,padding:!1,rm:Decimal.ROUND_UP,children:n}),a]}),")"]})]})};var Le=(t=>(t[t.Deposit=0]="Deposit",t[t.Approve=1]="Approve",t[t.Increase=2]="Increase",t))(Le||{});var He=e=>{let{disabled:o,loading:n,actionType:t,symbol:r="USDC",onDeposit:a,onApprove:i,networkId:s}=e,l=useMemo(()=>({1:{children:`Approve ${r}`,onClick:i,disabled:!1,"data-testid":"oui-testid-deposit-dialog-approve-btn"},2:{children:`increase ${r} authorized amount`,onClick:i,"data-testid":"oui-testid-deposit-dialog-increase-btn"},0:{children:"Deposit",onClick:a,"data-testid":"oui-testid-deposit-dialog-deposit-btn"}})[t],[i,a,t,r]);return jsx(Box,{className:"oui-min-w-[184px]",children:jsx(AuthGuard,{networkId:s,buttonProps:{fullWidth:!0},children:jsx(Button,{fullWidth:!0,disabled:o,loading:n,...l})})})};var Ye=e=>{let{token:o,tokens:n,onTokenChange:t,amount:r,quantity:a,maxQuantity:i,onQuantityChange:s,hintMessage:l,inputStatus:c,chains:m,currentChain:w,settingChain:h,onChainChange:f,actionType:p,onDeposit:d,onApprove:b,fetchBalance:I,dst:N,wrongNetwork:T,balanceRevalidating:v,loading:S,disabled:F,networkId:A,fee:U}=e;return jsxs(Box,{id:"oui-deposit-form",className:textVariants({weight:"semibold"}),children:[jsx(le,{}),jsxs(Box,{mt:3,mb:1,children:[jsx(se,{chains:m,value:w,onValueChange:f,wrongNetwork:T,loading:h}),jsx(L,{classNames:{root:"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl"},value:a,onValueChange:s,tokens:n,token:o,onTokenChange:t,status:c,hintMessage:l,fetchBalance:I})]}),jsx(me,{token:o,amount:r,maxQuantity:i,loading:v,onClick:()=>{s(i);}}),jsx(ae,{}),jsx(ue,{}),jsx(L,{readOnly:!0,token:N,value:a,classNames:{root:"oui-mt-3 oui-border-transparent focus-within:oui-outline-transparent"}}),jsxs(Flex,{direction:"column",mt:1,gapY:1,itemAlign:"start",children:[jsx(Qe,{token:o,dst:N,price:1}),jsx(Ge,{...U})]}),jsx(Flex,{justify:"center",mt:8,children:jsx(He,{actionType:p,symbol:o?.symbol,disabled:F,loading:S,onDeposit:d,onApprove:b,networkId:A})})]})};function Je(e){let{isNativeToken:o,allowance:n,quantity:t,maxQuantity:r}=e;return useMemo(()=>{let i=o?Number.MAX_VALUE:Number(n);if(i<=0)return 1;let s=Number(t),l=Number(r);return i<s&&s<=l?2:0},[o,n,t,r])}function je(){let e=useConfig("networkId"),{connectedChain:o,settingChain:n,setChain:t}=useWalletConnector(),[r,{findByChainId:a}]=useChains(e,{pick:"network_infos",filter:l=>l.network_infos?.bridge_enable||l.network_infos?.bridgeless}),i=useMemo(()=>{if(!o)return null;let l=praseChainIdToNumber(o.id),c=a(l);return {...o,id:l,info:c}},[o,a]),s=useCallback(async l=>{let c=a(l.chain_id);return !c||c.network_infos?.chain_id===i?.id?Promise.resolve():t({chainId:int2hex(Number(c.network_infos?.chain_id))}).then(m=>{m?toast.success("Network switched"):toast.error("Switch chain failed");}).catch(m=>{toast.error(`Switch chain failed: ${m.message}`);})},[i,t,a]);return {chains:r,currentChain:i,settingChain:n,onChainChange:s}}function et(e){let{quantity:o,allowance:n,approve:t,deposit:r,enableCustomDeposit:a,customDeposit:i,onSuccess:s}=e,[l,c]=useState(!1),m=useEventEmitter(),w=useCallback(async()=>{if(!l)return c(!0),t(o).then(p=>{toast.success("Approve success");}).catch(p=>{toast.error(p?.errorCode||"Approve failed");}).finally(()=>{c(!1);})},[t,l,o,n]),h=useCallback(async()=>r().then(p=>{toast.success("Deposit requested"),m.emit("deposit:requested"),s?.();}).catch(p=>{toast.error(p?.errorCode||"Deposit failed");}),[r,s,m]),f=useCallback(()=>{let p=Number(o);if(isNaN(p)||p<=0){toast.error("Please input a valid number");return}if(l)return;c(!0),(a?i:h)?.()?.finally(()=>{c(!1);});},[o,l,h,a,i]);return {submitting:l,onApprove:w,onDeposit:f}}function tt(e){let{quantity:o,maxQuantity:n}=e,[t,r]=useState("default"),[a,i]=useState();return useEffect(()=>{if(!o){r("default"),i("");return}new Decimal(o).gt(n)?(r("error"),i("Insufficient balance")):(r("default"),i(""));},[o,n]),{inputStatus:t,hintMessage:a}}function ot(e){let{currentChain:o,tokensFilter:n}=e,[t,r]=useState(),[a,i]=useState([]),s=useCallback(l=>{if(l&&l?.token_infos?.length>0){let c=typeof n=="function"?n(l):l.token_infos;i(c);let m=Nt(c);if(!m)return;r(m);}},[n]);return useEffect(()=>{s(o?.info);},[o?.id,s]),{token:t,tokens:a,onTokenChange:r}}var rt=e=>{let{wrongNetwork:o}=useAppContext(),n=useConfig("networkId"),{chains:t,currentChain:r,settingChain:a,onChainChange:i}=je(),{token:s,tokens:l,onTokenChange:c}=ot({currentChain:r}),{dst:m,balance:w,allowance:h,depositFeeRevalidating:f,depositFee:p,quantity:d,setQuantity:b,approve:I,deposit:N,isNativeToken:T,balanceRevalidating:v,fetchBalance:S}=useDeposit({address:s?.address,decimals:s?.decimals,srcChainId:r?.id,srcToken:s?.symbol}),F=useMemo(()=>new Decimal(w||0).todp(s?.precision??2,Decimal.ROUND_DOWN).toString(),[w,s]),{inputStatus:A,hintMessage:U}=tt({quantity:d,maxQuantity:F}),E=()=>{b("");},z=useCallback(()=>{E(),e.onClose?.();},[e.onClose]),{submitting:ge,onApprove:g,onDeposit:V}=et({quantity:d,allowance:h,approve:I,deposit:N,onSuccess:z}),q=ge||f,ct=!d||Number(d)===0||!s||A==="error"||f,W=useMemo(()=>new Decimal(d||0).mul(1).toNumber(),[d]),mt=Je({isNativeToken:T,allowance:h,quantity:d,maxQuantity:F}),pt=Pn({nativeToken:r?.info?.nativeToken,depositFee:p});return useEffect(()=>{E();},[s,r?.id]),{token:s,tokens:l,onTokenChange:c,amount:W,quantity:d,maxQuantity:F,onQuantityChange:b,hintMessage:U,inputStatus:A,chains:t,currentChain:r,settingChain:a,onChainChange:i,actionType:mt,onDeposit:V,onApprove:g,fetchBalance:S,dst:m,wrongNetwork:o,balanceRevalidating:v,loading:q,disabled:ct,networkId:n,fee:pt}};function Pn(e){let{nativeToken:o,depositFee:n=0}=e,{account:t}=useAccount(),r=o?.symbol,{data:a}=useIndexPrice(`SPOT_${r}_USDC`);return {...useMemo(()=>{let s=new Decimal(n.toString()).div(new Decimal(10).pow(t.walletAdapter?.chainNamespace===ChainNamespace.solana?9:18)).toString(),l=new Decimal(s).mul(a||0).toString();return {dstGasFee:s,feeQty:s,feeAmount:l,dp:At(4)}},[n,a]),nativeSymbol:r}}var Fe=e=>{let o=rt(e);return jsx(Ye,{...o})};var Gt=({checkIsBridgeless:e,quantity:o,chainVaultBalance:n,currentChain:t,maxAmount:r,crossChainTrans:a})=>{let{wrongNetwork:i}=useAppContext(),{state:s}=useAccount(),l=useMemo(()=>{if(t&&t.info&&t.info.network_infos)return t.info.network_infos.name},[t]),c=useMemo(()=>!n||!r||!o||new Decimal(o).gt(r)?!1:!!new Decimal(o).gt(n),[o,n]);return jsx(Flex,{className:"oui-text-warning oui-text-xs oui-text-center",children:(()=>{if(s.status===AccountStatusEnum.NotConnected)return jsx(Fragment,{});if(i||!e)return jsxs(Box,{children:["Withdrawals are not supported on ",l??"this chain",". Please switch to any of the bridgeless networks."]});if(a)return "Your cross-chain withdrawal is being processed...";if(c)return `Withdrawal exceeds the balance of the ${l} vault ( ${n} USDC ). Cross-chain rebalancing fee will be charged for withdrawal to ${l}.`})()})};var Lt=({hasPositions:e,unsettledPnl:o,onSettlle:n})=>{if(o===0&&!e)return jsx(Fragment,{});let t=()=>{modal.confirm({title:"Settle PnL",content:jsxs(Box,{children:["Are you sure you want to settle your PnL?",jsx("br",{})," Settlement will take up to 1 minute before you can withdraw your available balance."]}),onOk:()=>n()});};return jsxs(Flex,{justify:"between",className:"oui-text-2xs oui-text-base-contrast-36 oui-mt-1 oui-mx-2",children:[jsxs(Flex,{itemAlign:"center",justify:"start",gap:1,children:[jsx(Tooltip,{className:"oui-max-w-[274px]",content:"Unsettled balance can not be withdrawn. In order to withdraw, please settle your balance first.",children:jsxs(Flex,{itemAlign:"center",justify:"start",gap:1,children:[jsx(ExclamationFillIcon,{size:14,className:"oui-text-warning"}),jsx(Text,{className:"oui-border-dashed oui-border-b oui-border-line-12 oui-cursor-pointer",children:"Unsettled:"})]})}),jsx(Text.numeral,{showIdentifier:!0,coloring:!0,weight:"semibold",dp:6,"data-testid":"oui-testid-withdraw-dialog-unsettledPnl-value",children:o}),jsx(Text,{children:"USDC"})]}),jsxs(Flex,{itemAlign:"center",gap:1,className:"oui-cursor-pointer",children:[jsx(St,{}),jsx(Text,{"data-testid":"oui-testid-withdraw-dialog-settle-text",size:"2xs",color:"primaryLight",className:" oui-select-none",onClick:t,children:"Settle"})]})]})};var $t=({address:e,amount:o,currentChain:n})=>{let t=useMemo(()=>{if(n&&n.info&&n.info.network_infos)return n.info.network_infos.name},[n]);return jsxs(Flex,{direction:"column",itemAlign:"start",justify:"start",gap:3,children:[jsxs(Flex,{direction:"column",itemAlign:"start",gap:3,mb:5,children:[jsxs(Flex,{direction:"column",justify:"start",itemAlign:"start",children:[jsx(Text,{size:"2xs",intensity:36,children:"Recipient address"}),jsx(Text,{size:"sm",intensity:98,children:e})]}),jsxs(Flex,{direction:"column",justify:"start",itemAlign:"start",children:[jsx(Text,{size:"2xs",intensity:36,children:"Recipient network"}),jsxs(Flex,{gap:1,children:[jsx(ChainIcon,{className:"oui-h-[18px] oui-w-[18px]",size:"sm",chainId:n.id}),jsx(Text,{size:"sm",intensity:98,children:t})]})]}),jsxs(Flex,{direction:"column",justify:"start",itemAlign:"start",children:[jsx(Text,{size:"2xs",intensity:36,children:"Withdraw amount (USDC)"}),jsx(Text.numeral,{size:"sm",intensity:98,dp:2,children:o})]})]}),jsx(Flex,{justify:"center",className:"oui-text-warning oui-text-xs oui-text-center",children:"Withdrawals that require cross-chain rebalancing can't be cancelled or followed up with more withdrawals until they've been processed."})]})};function it(e){useAccount();let n=()=>{modal.show(ChainSelectorId,{networkId:e.networkId,bridgeLessOnly:!0}).then(t=>{toast.success("Network switched");},t=>{});};return jsx(Flex,{direction:"column",children:jsx(Button,{color:"warning",onClick:()=>{n();},children:"Switch Network"})})}var Xt=e=>{let{disabled:o,loading:n,onWithdraw:t,networkId:r,crossChainWithdraw:a,address:i,currentChain:s,quantity:l,fee:c,checkIsBridgeless:m}=e,w=useMemo(()=>l?new Decimal(l).minus(c??0).toNumber():0,[l,c]);return jsx(Box,{width:184,children:jsx(AuthGuard,{networkId:r,bridgeLessOnly:!0,buttonProps:{fullWidth:!0},children:m?jsx(Button,{"data-testid":"oui-testid-withdraw-dialog-withdraw-btn",fullWidth:!0,disabled:o,loading:n,onClick:()=>{if(a){modal.confirm({title:"Confirm to withdraw",content:jsx($t,{address:i,amount:w,currentChain:s}),bodyClassName:"oui-p-0",onOk:async()=>{t();}});return}t();},children:"Withdraw"}):jsx(it,{networkId:r})})})};var at=({address:e,loading:o,disabled:n,quantity:t,onQuantityChange:r,token:a,inputStatus:i,hintMessage:s,amount:l,maxQuantity:c,balanceRevalidating:m,chains:w,currentChain:h,onChainChange:f,fee:p,settingChain:d,wrongNetwork:b,hasPositions:I,unsettledPnL:N,onSettlePnl:T,onWithdraw:v,chainVaultBalance:S,crossChainWithdraw:F,crossChainTrans:A,showQty:U,networkId:E,checkIsBridgeless:z})=>jsxs(Box,{id:"oui-withdraw-form",className:textVariants({weight:"semibold"}),children:[jsxs(Box,{mb:5,children:[jsx(ue,{}),jsx(Box,{mt:3,mb:1,children:jsx(L,{value:t,onValueChange:r,token:a,onTokenChange:()=>{},status:i,hintMessage:s})}),jsx(me,{token:a,amount:l,maxQuantity:c.toString(),loading:m,onClick:()=>{r(c.toString());}}),jsx(Lt,{unsettledPnl:N,hasPositions:I,onSettlle:T}),jsx(ae,{}),jsx(le,{}),jsxs(Box,{mt:3,children:[jsx(se,{chains:w,value:h,onValueChange:f,wrongNetwork:b,loading:d}),jsx(L,{classNames:{root:"oui-mt-[2px] oui-rounded-t-sm oui-rounded-b-xl"},token:a,value:U,readOnly:!0})]}),jsx(Flex,{direction:"column",mt:1,gapY:1,itemAlign:"start",children:jsxs(Text,{size:"xs",intensity:36,children:["Fee \u2248 ",jsx(Text,{size:"xs",intensity:80,children:`${p} `}),jsx(Text,{children:"USDC"})]})})]}),jsx(Gt,{checkIsBridgeless:z,chainVaultBalance:S,currentChain:h,quantity:t,maxAmount:c,crossChainTrans:A}),jsx(Flex,{justify:"center",mt:3,children:jsx(Xt,{checkIsBridgeless:z,networkId:E,disabled:n,loading:o,onWithdraw:v,crossChainWithdraw:F,currentChain:h,address:e,quantity:t,fee:p})})]});var Kt=1,lt=({onClose:e})=>{let [o]=usePositionStream(),[n,t]=useState(!1),[r,a]=useState(!1),{data:i}=usePrivateQuery("/v1/asset/history",{revalidateOnMount:!0}),s=useConfig("networkId"),l=useEventEmitter(),[c,m]=useState(""),[w,h]=useState({symbol:"USDC",decimals:6,address:"",display_name:"",precision:6}),[f,p]=useState("default"),[d,b]=useState(),{wrongNetwork:I}=useAppContext(),{account:N}=useAccount(),{data:T}=useQuery("/v1/public/vault_balance",{revalidateOnMount:!0}),{connectedChain:v,wallet:S,setChain:F,settingChain:A}=useWalletConnector();useConfig();let {walletName:E,address:z}=useMemo(()=>({walletName:S?.label,address:S?.accounts?.[0].address}),[S]),ge=u=>{m(u);},g=useMemo(()=>new Decimal(c||0).mul(Kt).toNumber(),[c,Kt]),{dst:V,withdraw:q,isLoading:ct,maxAmount:W,availableBalance:mt,availableWithdraw:pt,unsettledPnL:oe}=useWithdraw(),[io,G]=useState(!0),[Ne,{findByChainId:we}]=useChains(s,{pick:"network_infos",filter:u=>u.network_infos?.bridge_enable||u.network_infos?.bridgeless}),ne=useMemo(()=>s==="mainnet"?Ne.filter(u=>u.bridgeless):Ne,[Ne,s]),{configStore:so}=useContext(OrderlyContext),ao=so.get("apiBaseUrl"),{data:dt}=useQuery(`${ao}/v1/public/token?t=withdraw`,{revalidateIfStale:!1,revalidateOnFocus:!1,revalidateOnReconnect:!1,revalidateOnMount:!0,dedupingInterval:36e5,formatter:u=>{if(u.rows.length===1)return u.rows[0].chain_details}}),C=useMemo(()=>{if(!v)return null;let u=praseChainIdToNumber(v.id),k=we(u);return {...v,id:u,info:k}},[v,we]),lo=useMemo(()=>I||!C?!1:s==="testnet"?!0:!(!C.info||!C.info.network_infos||!C.info.network_infos.bridgeless),[C,I]),uo=()=>{m("");},co=useCallback(async u=>{let k=we(u.chain_id);return !k||k.network_infos?.chain_id===C?.id?Promise.resolve():F?.({chainId:int2hex(Number(k.network_infos?.chain_id))}).then(re=>{re?(toast.success("Network switched"),uo()):toast.error("Switch chain failed");}).catch(re=>{toast.error(`Switch chain failed: ${re.message}`);})},[C,F,we]),mo=useMemo(()=>o?.rows?.length>0,[o]),po=async()=>N.settle().catch(u=>(u.code==-1104&&toast.error("Settlement is only allowed once every 10 minutes. Please try again later."),u.message.indexOf("user rejected")!==-1&&toast.error("REJECTED_TRANSACTION"),Promise.reject(u))).then(u=>(toast.success("Settlement requested"),Promise.resolve(u))),xe=useMemo(()=>{if(!T||!C)return null;let u=T.find(k=>parseInt(k.chain_id)===C?.id);return u?u.balance:null},[ne,C,T]),be=useMemo(()=>{if(xe!==null){let u=parseFloat(c);return u>xe&&u<=W}return !1},[c,W,xe]),ft=useMemo(()=>ne.minimum_withdraw_amount??1,[ne]),fo=async()=>{if(!r&&f==="default"){if(new Decimal(c).lt(ft)){toast.error(`quantity must large than ${ft}`);return}return a(!0),q({amount:c,token:"USDC",chainId:C?.id,allowCrossChainWithdraw:be}).then(u=>{toast.success("Withdraw requested"),l.emit("withdraw:requested"),e&&e(),m("");}).catch(u=>{if(u.message.indexOf("user rejected")!==-1){toast.error("REJECTED_TRANSACTION");return}toast.error(u.message);}).finally(()=>{a(!1);})}},Ae=useMemo(()=>{if(!C)return 0;let u=dt?.find(k=>parseInt(k.chain_id)===C.id);return u?be?(u.withdrawal_fee||0)+(u.cross_chain_withdrawal_fee||0):u.withdrawal_fee||0:0},[C,dt,ne,be]),ho=useMemo(()=>{if(!c)return "";let u=new Decimal(c).sub(Ae??0);return u.isNegative()?"":u.toNumber()},[Ae,c]);return useEffect(()=>{if(n&&G(!0),!c){p("default"),b(""),G(!0);return}let u=new Decimal(c??0);oe<0?u.gt(W)?(p("error"),b("Insufficient balance"),G(!0)):(p("default"),b(""),G(!1)):u.gt(W)?(p("error"),b("Insufficient balance"),G(!0)):u.gt(new Decimal(W).minus(oe))&&u.lessThanOrEqualTo(W)?(p("warning"),b("Please settle your balance"),G(!0)):(p("default"),b(""),G(!1));},[c,W,oe,n]),useEffect(()=>{let u=i?.find(k=>k.trans_status==="pending_rebalance".toUpperCase());t(!!u);},[i]),useWalletSubscription({onMessage(u){if(!n)return;let{trxId:k,transStatus:re}=u;k===n&&re==="COMPLETED"&&t(!1);}}),{walletName:E,address:z,quantity:c,onQuantityChange:ge,token:w,inputStatus:f,hintMessage:d,dst:V,amount:g,balanceRevalidating:!1,maxQuantity:W,disabled:io,loading:r,hasPositions:mo,unsettledPnL:oe,wrongNetwork:I,settingChain:A,chains:ne,currentChain:C,onChainChange:co,onSettlePnl:po,onWithdraw:fo,chainVaultBalance:xe,fee:Ae,crossChainWithdraw:be,crossChainTrans:n,showQty:ho,networkId:s,checkIsBridgeless:lo}};var ut=e=>{let o=lt({onClose:e.close});return jsx(at,{...o})};function Cr(){installExtension({name:"deposit-form",scope:["*"],positions:[ExtensionPositionEnum.DepositForm],__isInternal:!0})(e=>jsx(Fe,{onClose:e.onClose}));}var to=e=>jsx(ExtensionSlot,{position:ExtensionPositionEnum.DepositForm,defaultWidget:Fe,...e});var Fr="DepositAndWithdrawWithDialogId",Tr="DepositAndWithdrawWithSheetId",ro=e=>{let[o,n]=useState(e.activeTab||"deposit");return jsxs(Tabs,{value:o,onValueChange:n,variant:"contained",classNames:{tabsList:"oui-px-0",tabsContent:"oui-pt-5"},children:[jsx(TabPanel,{title:"Deposit",icon:jsx(Ft,{}),value:"deposit",children:jsx(to,{onClose:e.close})}),jsx(TabPanel,{title:"Withdraw",icon:jsx(Tt,{}),value:"withdraw",children:jsx(ut,{...e})})]})};registerSimpleDialog(Fr,ro,{size:"md",bodyClassName:"oui-pt-3"});registerSimpleSheet(Tr,ro);
12
+
13
+ export { He as ActionButton, me as AvailableQuantity, ue as BrokerWallet, se as ChainSelect, Le as DepositAction, ro as DepositAndWithdraw, Fr as DepositAndWithdrawWithDialogId, Tr as DepositAndWithdrawWithSheetId, Ye as DepositForm, Fe as DepositFormWidget, ae as ExchangeDivider, Ge as Fee, L as QuantityInput, Qe as SwapCoin, le as Web3Wallet, at as WithdrawFormUI, ut as WithdrawFormWidget, At as feeDecimalsOffset, Dt as formatAddress, Nt as getTokenByTokenList, Cr as installDeposit, Je as useActionType, je as useChainSelect, et as useDepositAction, rt as useDepositFormScript, tt as useInputStatus, ot as useToken, lt as useWithdrawForm };
14
+ //# sourceMappingURL=out.js.map
15
+ //# sourceMappingURL=index.mjs.map