UNPKG

@orderly.network/ui-positions

Version:

16 lines (15 loc) 69.7 kB
import { registerSimpleDialog, Flex, Text, CloseIcon, Button, ThrottledButton, useScreen, Grid, Statistic, DataTable, cn as cn$1, ListView, SimpleSheet, SimpleDialog, usePagination, DataFilter, Badge, formatAddress, Box, Tooltip, HoverCard, Divider, toast, capitalizeFirstLetter, ShareIcon, PopoverRoot, PopoverTrigger, Input, inputFormatter, PopoverContent, Slider, DropdownMenuRoot, DropdownMenuTrigger, CaretDownIcon, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, Select, modal, EditIcon } from '@orderly.network/ui'; import hr, { createContext, useCallback, useMemo, useEffect, useState, useRef, useContext } from 'react'; import { useTranslation, i18n } from '@orderly.network/i18n'; import { AccountStatusEnum, OrderType, AlgoOrderType, OrderSide } from '@orderly.network/types'; import { commifyOptional, Decimal, getTimestamp, commify } from '@orderly.network/utils'; import { jsxs, jsx, Fragment } from 'react/jsx-runtime'; import { usePrivateInfiniteQuery, useBoolean, useAccount, usePrivateQuery, usePositionStream, useSymbolsInfo, usePositionClose, useSWR, fetcher, useLocalStorage, useConfig, useReferralInfo, useSymbolLeverage, useAccountInfo, utils } from '@orderly.network/hooks'; import { produce } from 'immer'; import { positions, account } from '@orderly.network/perp'; import { useDataTap, useOrderEntryFormErrorMsg } from '@orderly.network/react-app'; import { AuthGuardDataTable } from '@orderly.network/ui-connector'; import { SharePnLDialogId, SharePnLBottomSheetId } from '@orderly.network/ui-share'; import { PositionTPSLPopover, PositionTPSLSheet } from '@orderly.network/ui-tpsl'; import { subDays, differenceInDays } from 'date-fns'; var ko=t=>{let{hideCloseIcon:e=false}=t;return jsxs("div",{className:"oui-relative oui-w-full oui-border-b oui-border-line-4 oui-pb-3",children:[jsx(Text,{size:"base",children:t.title}),!e&&jsx("button",{onClick:t.onClose,className:"oui-absolute oui-right-0 oui-top-0 oui-p-2 oui-text-base-contrast-54 hover:oui-text-base-contrast-80",children:jsx(CloseIcon,{size:18,color:"white"})})]})},ne=t=>{let{t:e}=useTranslation();return jsxs(Flex,{id:"oui-positions-confirm-footer",gap:2,width:"100%",className:"oui-mt-3 oui-pb-1",children:[jsx(Button,{id:"oui-positions-confirm-footer-cancel-button",color:"secondary",fullWidth:true,onClick:t.onCancel,size:"md",children:e("common.cancel")}),jsx(ThrottledButton,{id:"oui-positions-confirm-footer-confirm-button",onClick:t.onConfirm,fullWidth:true,loading:t.submitting,disabled:t.disabled,size:"md",children:e("common.confirm")})]})},Rn=t=>{let{quantity:e,price:o,quoteDp:i,side:r}=t,{t:n}=useTranslation(),s=useMemo(()=>o&&e?new Decimal(o).mul(e).toFixed(i,Decimal.ROUND_DOWN):"--",[o,e]);return jsxs(Flex,{direction:"column",gap:1,width:"100%",className:"oui-text-sm oui-text-base-contrast-54",py:5,children:[jsxs(Flex,{justify:"between",width:"100%",gap:1,children:[jsx(Text,{children:n("common.qty")}),jsx(Text,{color:r===OrderSide.BUY?"success":"danger",children:e})]}),jsxs(Flex,{justify:"between",width:"100%",gap:1,children:[jsx(Text,{children:n("common.price")}),jsx(Text.formatted,{intensity:98,suffix:jsx(Text,{intensity:54,children:"USDC"}),children:o})]}),jsxs(Flex,{justify:"between",width:"100%",gap:1,children:[jsx(Text,{children:n("common.notional")}),jsx(Text.formatted,{intensity:98,suffix:jsx(Text,{intensity:54,children:"USDC"}),children:s})]})]})},It=t=>{let{t:e}=useTranslation(),o=()=>{(t?.onClose??t.close)?.();};return jsxs(Flex,{direction:"column",className:t.classNames?.root,children:[jsx(ko,{onClose:o,title:e("positions.marketClose"),hideCloseIcon:t.hideCloseIcon}),jsx(Text,{intensity:54,size:"sm",className:"oui-my-5",children:e("positions.marketClose.description",{quantity:commifyOptional(t.quantity),base:t.base})}),jsx(ne,{onCancel:o,onConfirm:async()=>{await t.onConfirm?.(),o();},submitting:t.submitting})]})},re=t=>{let{order:e,quoteDp:o,quantity:i,price:r}=t,{side:n}=e,{t:s}=useTranslation(),a=()=>{t.onClose?.();};return jsxs(Fragment,{children:[jsx(ko,{onClose:a,title:s("positions.limitClose"),hideCloseIcon:t.hideCloseIcon}),jsx(Box,{mt:5,children:jsx(Text,{intensity:54,size:"sm",children:s("positions.limitClose.description",{quantity:commify(t.quantity),base:t.base})})}),jsxs(Flex,{gap:2,mb:4,mt:5,justify:"between",children:[jsx(Text.formatted,{rule:"symbol",formatString:"base-type",size:"base",showIcon:true,children:e.symbol}),jsxs(Flex,{gap:1,children:[jsx(Badge,{color:"neutral",size:"xs",children:s("orderEntry.orderType.limit")}),jsx(Badge,{color:n===OrderSide.BUY?"success":"danger",size:"xs",children:n===OrderSide.BUY?s("common.buy"):s("common.sell")})]})]}),jsx(Divider,{className:"oui-w-full"}),jsx(Rn,{className:"oui-text-sm",price:r,quantity:i,side:e.side,quoteDp:o??2}),jsx(ne,{onCancel:a,onConfirm:t.onConfirm,submitting:t.submitting})]})};function zo(t,e){let o=useRef(),i=useRef(e);i.current=e,useEffect(()=>{let r={root:null,rootMargin:"0px",threshold:0},n=s=>{s.forEach(a=>{a.isIntersecting&&i.current?.();});};return o.current=new IntersectionObserver(n,r),()=>{o.current?.disconnect();}},[]),useEffect(()=>{o.current?.observe(t.current);},[]);}var Eo=t=>{let e=useRef(null),{onEndReached:o}=t;return zo(e,()=>{o?.();}),jsxs(Fragment,{children:[t.children,jsx("div",{ref:e,className:"oui-relative oui-invisible oui-h-[25px] oui-bg-red-400 oui-top-[-300px]"})]})};var se=({total:t,symbol:e,start_t:o,end_t:i})=>{let{t:r}=useTranslation(),{isMobile:n}=useScreen(),{isLoading:s,data:a,setSize:l}=usePrivateInfiniteQuery((p,P)=>P&&!P.length?null:`/v1/funding_fee/history?page=${p}&symbol=${e}&start_t=${o}&end_t=${i}`,{revalidateFirstPage:false}),m=useCallback(()=>{l(p=>p+1);},[l]),u=useMemo(()=>Array.isArray(a)?a.flat().map(p=>({...p,funding_fee:-p.funding_fee})):[],[a]),c=useMemo(()=>n?jsx(Gn,{data:u??[],isLoading:s,loadMore:m}):jsx(Vn,{data:u??[],isLoading:s,loadMore:m}),[n,u,s]);return jsxs("div",{children:[jsxs(Grid,{cols:2,gapX:3,className:"oui-sticky oui-top-0 oui-z-10 oui-bg-base-8 oui-py-4",children:[jsx("div",{className:"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3",children:jsxs(Flex,{direction:"column",gap:1,itemAlign:"start",children:[jsx("span",{className:"oui-text-2xs oui-text-base-contrast-36",children:r("common.symbol")}),jsx(Text.formatted,{rule:"symbol",className:"oui-font-semibold",intensity:98,children:e})]})}),jsx("div",{className:"oui-rounded-lg oui-border oui-border-line-6 oui-bg-base-9 oui-p-3",children:jsx(Statistic,{label:`${r("funding.fundingFee")} (USDC)`,valueProps:{ignoreDP:true,coloring:true,showIdentifier:true},children:t})})]}),c]})},Vn=({isLoading:t,data:e,loadMore:o})=>{let{t:i}=useTranslation(),r=useMemo(()=>[{title:i("common.time"),dataIndex:"created_time",width:120,render:n=>jsx(Text.formatted,{rule:"date",children:n})},{title:i("funding.fundingRate"),dataIndex:"funding_rate",formatter:n=>new Decimal(n).mul(100).toString(),render:n=>jsx("span",{children:`${n}%`})},{title:i("funding.paymentType"),dataIndex:"payment_type",formatter:n=>i(n==="Pay"?"funding.paymentType.paid":"funding.paymentType.received"),render:n=>jsx("span",{children:n})},{title:`${i("funding.fundingFee")} (USDC)`,dataIndex:"funding_fee",render:n=>jsx(Text.numeral,{rule:"price",coloring:true,showIdentifier:true,ignoreDP:true,children:n})}],[i]);return jsx("div",{className:"oui-h-[calc(80vh_-_132px_-_8px)] oui-overflow-y-auto",children:jsx(Eo,{onEndReached:o,children:jsx(DataTable,{classNames:{root:cn$1("oui-h-auto oui-bg-base-8 oui-text-sm")},columns:r,dataSource:e??[],loading:t})})})},Gn=({data:t,isLoading:e,loadMore:o})=>{let i=useCallback(r=>jsx(Kn,{item:r}),[]);return jsx("div",{className:"oui-h-[calc(80vh_-_104px)] oui-overflow-y-auto",children:jsx(ListView,{dataSource:t,renderItem:i,isLoading:e,contentClassName:"oui-space-y-0",loadMore:o})})},Kn=({item:t})=>{let{t:e}=useTranslation();return jsxs("div",{className:"oui-flex oui-flex-col oui-space-y-2 oui-border-t oui-border-line-6 oui-py-2",children:[jsxs(Flex,{justify:"between",children:[jsx(Statistic,{label:e("funding.fundingRate"),classNames:{label:"oui-text-2xs"},valueProps:{ignoreDP:true,rule:"percentages",className:"oui-text-xs"},children:t.funding_rate}),jsx(Statistic,{label:e("common.amount"),className:"oui-items-end",classNames:{label:"oui-text-2xs"},valueProps:{ignoreDP:true,coloring:true,as:"div",className:"oui-text-xs",showIdentifier:true},children:t.funding_fee})]}),jsxs(Flex,{justify:"between",children:[jsx(Text.formatted,{rule:"date",className:"oui-text-base-contrast-36",size:"2xs",children:t.created_time}),jsx(Text,{size:"sm",intensity:80,children:t.payment_type==="Pay"?e("funding.paymentType.paid"):e("funding.paymentType.received")})]})]})};var at=({fee:t,symbol:e,start_t:o,end_t:i})=>{let{t:r}=useTranslation(),[n,{setTrue:s,setFalse:a}]=useBoolean(false),{isMobile:l}=useScreen();return jsxs(Fragment,{children:[jsx("button",{onClick:s,children:jsx(Text.numeral,{rule:"price",coloring:true,showIdentifier:true,ignoreDP:true,className:"oui-border-b oui-border-line-16 oui-border-dashed oui-py-0.5",children:t})}),l?jsx(SimpleSheet,{open:n,onOpenChange:a,title:r("funding.fundingFee"),classNames:{body:"oui-max-h-[80vh] oui-py-0"},children:jsx(se,{total:t,symbol:e,start_t:o,end_t:i})}):jsx(SimpleDialog,{open:n,onOpenChange:a,title:r("funding.fundingFee"),classNames:{content:"lg:oui-max-w-[640px]",body:"oui-max-h-[80vh] oui-bg-base-8 lg:oui-py-0"},children:jsx(se,{total:t,symbol:e,start_t:o,end_t:i})})]})};var lr=(t,e)=>{let o=useConfig("apiBaseUrl");return i=>(r,n,s)=>{try{return i(r,async l=>{let m=Array.isArray(l)?l[0]:l,u=`${o}${m}`,c=t.signer,p={method:"GET",url:m},P=await c.sign(p,getTimestamp()),f=Array.isArray(e)?e:[e];return Promise.all(f.map(x=>n(u,{headers:{...P,"orderly-account-id":x}})))},s)}catch(a){throw a}}},Uo=(t,e)=>{let{formatter:o,accountId:i,...r}=e||{},{state:n,account:s}=useAccount(),a=Array.isArray(e?.use)?e?.use??[]:[],l=Array.isArray(i)?i:[i],m=l.filter(Boolean).length&&(n.status>=AccountStatusEnum.EnableTrading||n.status===AccountStatusEnum.EnableTradingWithoutConnected);return useSWR(()=>m?[t,l]:null,(u,c)=>fetcher(u,c,{formatter:o}),{...r,use:[...a,lr(s,l)],onError:()=>{}})};var $o=t=>{let{symbol:e,calcMode:o,includedPendingOrder:i,pnlNotionalDecimalPrecision:r,sharePnLConfig:n,onSymbolChange:s,selectedAccount:a}=t,{pagination:l,setPage:m}=usePagination({pageSize:50});useEffect(()=>{m(1);},[e]);let u=useSymbolsInfo(),{state:c}=useAccount(),[p,,{isLoading:P}]=usePositionStream(e,{calcMode:o,includedPendingOrder:i}),{data:f=[],isLoading:x,mutate:T}=usePrivateQuery("/v1/client/aggregate/positions",{errorRetryCount:3}),{data:q=[],isLoading:_}=Uo("/v1/client/info",{accountId:f.map(N=>N.account_id),revalidateOnFocus:false}),y=produce(f.filter(N=>N.account_id!==c.mainAccountId),N=>{for(let d of N){let X=u[d.symbol],pt=positions.notional(d.position_qty,d.mark_price),Y=q.find(Ut=>Ut.account_id===d.account_id),J=positions.MMR({baseMMR:X?.("base_mmr"),baseIMR:X?.("base_imr"),IMRFactor:Y?.imr_factor[d.symbol]??0,positionNotional:pt,IMR_factor_power:4/5}),Zt=positions.maintenanceMargin({positionQty:d.position_qty,markPrice:d.mark_price,MMR:J}),jt=positions.unrealizedPnL({qty:d.position_qty,openPrice:d?.average_open_price,markPrice:d.mark_price}),te=account.IMR({maxLeverage:Y?.max_leverage??1,baseIMR:X?.("base_imr"),IMR_Factor:Y?.imr_factor[d.symbol]??0,positionNotional:pt,ordersNotional:0,IMR_factor_power:4/5}),ee=positions.unrealizedPnLROI({positionQty:d.position_qty,openPrice:d.average_open_price,IMR:te,unrealizedPnL:jt}),Qt=0,oe=0;d.index_price&&(Qt=positions.unrealizedPnL({qty:d.position_qty,openPrice:d?.average_open_price,markPrice:d.index_price}),oe=positions.unrealizedPnLROI({positionQty:d.position_qty,openPrice:d.average_open_price,IMR:te,unrealizedPnL:Qt})),d.mmr=J,d.mm=Zt,d.notional=pt,d.unrealized_pnl=jt,d.unrealized_pnl_ROI=ee,d.unrealized_pnl_ROI_index=oe;}}),F=useDataTap([...p?.rows,...y].filter(N=>N.position_qty!==0))??[],k=useMemo(()=>!a||a==="All accounts"?F:F.filter(N=>a==="Main accounts"?N.account_id===c.mainAccountId||!N.account_id:N.account_id===a),[F,a,c.mainAccountId]),W=useMemo(()=>Cr(k,{mainAccountId:c.mainAccountId,subAccounts:c.subAccounts}),[k,c.mainAccountId,c.subAccounts]),st=useMemo(()=>P||x||_,[P,x,_]);return {tableData:W,isLoading:st,pnlNotionalDecimalPrecision:r,sharePnLConfig:n,symbol:e,onSymbolChange:s,pagination:l,mutatePositions:T}},Cr=(t,e)=>{let{mainAccountId:o="",subAccounts:i=[]}=e,r=new Map;for(let n of t){let s=n.account_id||o,a=i.find(l=>l.id===s);r.has(s)?r.get(s)?.children?.push(n):r.set(s,{id:s,description:s===o?i18n.t("common.mainAccount"):a?.description||formatAddress(a?.id||""),children:[n]});}return {expanded:Array.from(r.keys()),dataSource:Array.from(r.values())}};var ze=t=>{let{symbol:e,calcMode:o,includedPendingOrder:i,pnlNotionalDecimalPrecision:r,sharePnLConfig:n,onSymbolChange:s}=t,{pagination:a,setPage:l}=usePagination({pageSize:50});hr.useEffect(()=>{l(1);},[e]);let[m,,{isLoading:u}]=usePositionStream(e,{calcMode:o,includedPendingOrder:i});return {dataSource:useDataTap(m?.rows,{fallbackData:[]})??void 0,isLoading:u,pnlNotionalDecimalPrecision:r,sharePnLConfig:n,symbol:e,onSymbolChange:s,pagination:a}};var Vo=createContext({}),B=()=>useContext(Vo),_t=t=>{let e=useSymbolsInfo()[t.symbol];return jsx(Vo.Provider,{value:{symbol:t.symbol,base_dp:e("base_dp"),quote_dp:e("quote_dp"),base_tick:e("base_tick"),quote_tick:e("quote_tick"),base:e("base"),quote:e("quote"),origin:e(),quote_max:e("quote_max"),quote_min:e("quote_min")},children:t.children})};var le=t=>{let{t:e}=useTranslation();return jsxs(Fragment,{children:[jsx(Slider,{showTip:true,markCount:4,value:[t.value],color:"primary",onValueChange:o=>{t.onValueChange(o[0]);}}),jsxs(Flex,{width:"100%",justify:"between",children:[jsx(Text,{color:"primary",size:"2xs",children:`${t.value}%`}),jsxs(Flex,{gap:1,onClick:t.onMax,className:"oui-cursor-pointer",children:[jsx(Text,{size:"2xs",color:"primary",children:e("common.max")}),jsx(Text.numeral,{intensity:54,size:"2xs",dp:t.base_dp,padding:false,children:t.max})]})]})]})};var Ue=t=>{let{base:e,base_dp:o,quote:i,quote_dp:r,sheetOpen:n,setSheetOpen:s,dialogOpen:a,setDialogOpen:l,quantity:m,price:u,submitting:c,priceErrorMsg:p,quantityErrorMsg:P,disabled:f,isMarketClose:x,position:T,maxQty:q,isBuy:_}=t,{t:y}=useTranslation(),F=y(x?"positions.marketClose":"positions.limitClose"),k=y(x?"orderEntry.orderType.market":"orderEntry.orderType.limit"),W=_?jsx(Badge,{color:"success",size:"xs",children:y("common.buy")}):jsx(Badge,{color:"danger",size:"xs",children:y("common.sell")}),st=jsxs(Flex,{width:"100%",justify:"between",children:[jsx(Text.formatted,{rule:"symbol",showIcon:true,children:T.symbol}),jsxs(Flex,{gap:1,children:[jsx(Badge,{color:"neutral",size:"xs",children:k}),W]})]}),N=jsxs(Flex,{width:"100%",justify:"between",children:[jsx(Text,{intensity:54,children:y("common.lastPrice")}),jsx(Text.numeral,{dp:r,suffix:jsxs(Text,{intensity:36,children:[" ",i]}),children:T.mark_price})]}),d=!x&&jsx(Fragment,{children:jsxs(Flex,{width:"100%",direction:"column",gap:2,children:[jsx(Input.tooltip,{prefix:y("common.price"),suffix:i,align:"right",fullWidth:true,autoComplete:"off",formatters:[inputFormatter.numberFormatter,inputFormatter.dpFormatter(r)],triggerClassName:"oui-w-full",tooltip:p,color:p?"danger":void 0,value:u,onValueChange:t.updatePriceChange,classNames:{prefix:"oui-text-base-contrast-54",suffix:"oui-text-base-contrast-54",root:cn$1("oui-w-full oui-outline-line-12",p?"oui-outline-danger":void 0)}}),jsx(Input.tooltip,{prefix:y("common.quantity"),suffix:e,align:"right",fullWidth:true,autoComplete:"off",formatters:[inputFormatter.numberFormatter,inputFormatter.dpFormatter(o)],triggerClassName:"oui-w-full",tooltip:P,color:P?"danger":void 0,value:m,onBlur:()=>t.formatQuantityToBaseTick(m),onValueChange:t.updateQuantity,classNames:{prefix:"oui-text-base-contrast-54",suffix:"oui-text-base-contrast-54",root:cn$1("oui-w-full oui-outline-line-12",P?"oui-outline-danger":void 0)}})]})}),X=jsx(le,{value:t.sliderValue,onValueChange:t.onSliderValueChange,base_dp:o,max:q,onMax:t.onMax}),pt=jsxs(Flex,{width:"100%",gap:3,mt:2,children:[jsx(Button,{fullWidth:true,color:"secondary",onClick:t.onCloseSheet,children:y("common.cancel")}),jsx(ThrottledButton,{fullWidth:true,disabled:c||f,loading:c,onClick:Y=>{Y.stopPropagation(),Y.preventDefault(),t.onDoubleConfirm();},children:y("common.confirm")})]});return jsxs(Fragment,{children:[jsx(Button,{variant:"outlined",color:"secondary",size:"sm",className:"oui-border-base-contrast-36",onClick:Y=>{Y.stopPropagation(),Y.preventDefault(),s(true);},children:F}),jsx(SimpleSheet,{title:F,open:n,onOpenChange:s,children:jsxs(Flex,{direction:"column",gap:3,width:"100%",itemAlign:"start",className:"oui-text-sm",children:[st,jsx(Divider,{className:"oui-w-full"}),N,d,X,pt]})}),jsx(SimpleDialog,{open:a,onOpenChange:l,size:"xs",children:x?jsx(It,{base:e,quantity:m,submitting:c,onClose:t.onCloseDialog,onConfirm:t.onConfirm,hideCloseIcon:true}):jsx(re,{base:e,quoteDp:r,quantity:m,price:u,submitting:c,order:t.closeOrderData,onClose:t.onCloseDialog,onConfirm:t.onConfirm,hideCloseIcon:true})})]})};var $e=t=>{let{position:e,base:o,base_dp:i,quote_dp:r,price:n,quantity:s,submitting:a,dialogOpen:l,setDialogOpen:m,isMarketClose:u,popoverOpen:c,setPopoverOpen:p,maxQty:P,quantityErrorMsg:f,priceErrorMsg:x,isEntirePosition:T}=t,{t:q}=useTranslation(),_=jsxs(Flex,{width:"100%",gap:2,mb:1,children:[jsx(Input.tooltip,{ref:t.quantityInputRef,prefix:q("common.quantity"),suffix:T?jsx(Text,{size:"2xs",intensity:54,className:"oui-cursor-pointer oui-px-3",onClick:t.onEntirePosition,children:q("tpsl.entirePosition")}):o,align:"right",size:"md",fullWidth:true,autoComplete:"off",formatters:[inputFormatter.numberFormatter,inputFormatter.dpFormatter(i)],triggerClassName:"oui-w-full",tooltip:f,color:f?"danger":void 0,value:T?"":s,onBlur:()=>t.formatQuantityToBaseTick(s),onValueChange:t.updateQuantity,classNames:{prefix:"oui-text-base-contrast-54",suffix:"oui-text-base-contrast-54",root:cn$1("oui-w-full oui-outline-line-12",f?"oui-outline-danger":void 0)}}),jsx(Button,{onClick:t.onMax,size:"md",variant:"outlined",className:cn$1("oui-text-2xs",T?"oui-border-primary-light oui-text-primary-light hover:oui-bg-primary-light/20":"oui-border-line-12 oui-bg-base-6 oui-text-base-contrast-54 hover:oui-bg-base-5"),children:q("common.position")})]}),y=jsx(Select.options,{variant:"text",size:"md",options:[{label:q("orderEntry.orderType.limit"),value:OrderType.LIMIT},{label:q("orderEntry.orderType.market"),value:OrderType.MARKET}],classNames:{trigger:"oui-w-[--radix-select-content-available-width]"},value:t.type,onValueChange:W=>{t.updateOrderType(W);},contentProps:{align:"end",className:"oui-border oui-border-line-6"}}),F=u,k=jsx(Input.tooltip,{suffix:y,size:"md",fullWidth:true,autoComplete:"off",formatters:[inputFormatter.numberFormatter,inputFormatter.dpFormatter(r)],triggerClassName:"oui-w-full",tooltip:x,color:x?"danger":void 0,value:n,onValueChange:t.updatePriceChange,placeholder:F?"--":"",disabled:F,classNames:{prefix:"oui-text-base-contrast-54",suffix:"oui-text-base-contrast-54",root:cn$1("oui-w-full oui-outline-line-12",x?"oui-outline-danger":void 0,F?"focus-within:oui-outline-line-12":void 0)}});return jsxs(Fragment,{children:[jsxs(PopoverRoot,{open:c,onOpenChange:p,children:[jsx(PopoverTrigger,{asChild:true,onClick:()=>{p(true);},children:jsx(Button,{variant:"outlined",size:"sm",color:"secondary",children:q("positions.column.close")})}),jsx(PopoverContent,{className:cn$1("oui-w-[360px] oui-p-5",c?"oui-visible":"oui-invisible"),align:"end",side:"top",onOpenAutoFocus:W=>W.preventDefault(),children:jsxs(Flex,{gapY:2,direction:"column",children:[_,jsx(le,{value:t.sliderValue,onValueChange:t.onSliderValueChange,base_dp:i,max:P,onMax:t.onMax}),jsx(Divider,{my:2,intensity:8,className:"oui-w-full"}),k,jsx(ne,{onConfirm:t.onDoubleConfirm,onCancel:t.onClosePopover,submitting:a,disabled:t.disabled})]})})]}),jsx(SimpleDialog,{open:l,onOpenChange:m,size:"sm",children:u?jsx(It,{base:o,quantity:s,submitting:a,onClose:t.onCloseDialog,onConfirm:t.onConfirm,classNames:{root:"oui-items-start"},hideCloseIcon:true}):jsx(re,{base:o,quoteDp:r,quantity:s,price:n,submitting:a,order:t.closeOrderData,onClose:t.onCloseDialog,onConfirm:t.onConfirm,hideCloseIcon:true})})]})};var Ve=createContext({}),Q=()=>useContext(Ve);var Ge=t=>{let[e,o]=useState(false),[i,r]=useState(false),[n,s]=useState(false),[a,l]=useState(100),m=useRef(null),[u]=useLocalStorage("orderly_order_confirm",true),{position:c,onSubmit:p,price:P,quantity:f,closeOrderData:x,submitting:T,updatePriceChange:q,updateOrderType:_,updateQuantity:y,errors:F,baseTick:k,type:W}=Q(),{quote_dp:st,base_dp:N,base:d,quote:X}=B(),{parseErrorMsg:pt}=useOrderEntryFormErrorMsg(F),Y=c.position_qty>0,J=Math.abs(c.position_qty),Zt=t.type||W,jt=Zt===OrderType.MARKET,te=J?.toString()===f.toString();useEffect(()=>{e&&_(t.type);},[t.type,e]);let{priceErrorMsg:ee,quantityErrorMsg:Qt}=useMemo(()=>({priceErrorMsg:pt("order_price"),quantityErrorMsg:pt("order_quantity")}),[F]),oe=!!(ee||Qt),Ut=useCallback(ft=>{if(k&&k>0){let $t=utils.formatNumber(ft,k)??ft;y($t);}},[k,y]),bn=useCallback(ft=>{l(ft);let $t=new Decimal(ft).div(100).mul(J).toFixed(N,Decimal.ROUND_DOWN);Ut($t);},[J,N,Ut]);useEffect(()=>{let ft=Math.min(Number(f||0),J),$t=new Decimal(ft).div(J).mul(100).toDecimalPlaces(2,Decimal.ROUND_DOWN).toNumber();l($t);},[f]);let Pn=useCallback(()=>{y(J?.toString());},[J,y]),Re=useCallback(()=>p().then(ft=>{o(false),r(false),s(false);}),[p]),Cn=useCallback(()=>u?(r(true),Promise.resolve()):Re(),[Re,u]),hn=useCallback(()=>{o(false);},[]),Sn=useCallback(()=>{r(false);},[]),_n=useCallback(()=>{s(false);},[]),Tn=useCallback(()=>{y("0"),m.current?.focus(),setTimeout(()=>{m.current?.setSelectionRange(0,1);},0);},[y]);return {position:c,closeOrderData:x,quote_dp:st,base_dp:N,base:d,quote:X,price:P,quantity:f,submitting:T,onConfirm:Re,onDoubleConfirm:Cn,updatePriceChange:q,updateQuantity:y,formatQuantityToBaseTick:Ut,updateOrderType:_,sliderValue:a,onSliderValueChange:bn,priceErrorMsg:ee,quantityErrorMsg:Qt,disabled:oe,isMarketClose:jt,maxQty:J,onMax:Pn,isBuy:Y,isEntirePosition:te,type:Zt,quantityInputRef:m,onEntirePosition:Tn,sheetOpen:e,onCloseSheet:hn,setSheetOpen:o,dialogOpen:i,setDialogOpen:r,onCloseDialog:Sn,popoverOpen:n,setPopoverOpen:s,onClosePopover:_n}};var qt=t=>{let e=Ge(t),{isMobile:o}=useScreen();return o?jsx(Ue,{...e}):jsx($e,{...e})};var si=()=>{let{position:t,baseDp:e,quoteDp:o,tpslOrder:i}=Q(),{t:r}=useTranslation();return jsx(PositionTPSLPopover,{position:t,order:i,label:r("common.tpsl"),baseDP:e,quoteDP:o,isEditing:false})},ai=()=>{let{position:t,baseDp:e,quoteDp:o,tpslOrder:i}=Q();return jsx(PositionTPSLPopover,{position:t,order:i,baseDP:e,quoteDP:o,isEditing:true,children:jsx(EditIcon,{opacity:1,className:"oui-cursor-pointer oui-text-base-contrast-54",size:16})})},ge=({symbol:t})=>t?jsxs("div",{className:"oui-flex oui-h-[18px] oui-items-center oui-gap-1 oui-rounded oui-bg-white/[0.06] oui-px-2 oui-text-2xs oui-font-semibold oui-text-base-contrast-36",children:[jsx(Text,{children:"Cross"}),jsx(ns,{symbol:t})]}):null,ns=({symbol:t})=>{let e=useSymbolLeverage(t);return jsx(Text.numeral,{dp:0,size:"2xs",unit:"X",children:e!=="-"?e:"--"})};var mi=()=>{let{type:t,quoteDp:e,price:o,updatePriceChange:i,updateOrderType:r}=Q(),{t:n}=useTranslation();return jsxs(DropdownMenuRoot,{children:[jsx(Input,{size:"sm",value:t===OrderType.LIMIT?o:n("orderEntry.orderType.market"),onValueChange:s=>i(s),formatters:[inputFormatter.numberFormatter,...e?[inputFormatter.dpFormatter(e)]:[]],onFocus:()=>{t===OrderType.MARKET&&r(OrderType.LIMIT);},suffix:jsx(DropdownMenuTrigger,{asChild:true,children:jsx("button",{className:"oui-h-full oui-px-1",children:jsx(CaretDownIcon,{size:12,color:"white"})})}),classNames:{root:cn$1("oui-border oui-border-solid oui-border-white/[0.12] oui-outline-none focus-within:oui-outline-primary-light")}}),jsx(DropdownMenuContent,{align:"end",className:"oui-w-[96px] oui-min-w-[96px]",onCloseAutoFocus:s=>s.preventDefault(),children:jsx(DropdownMenuGroup,{children:jsx(DropdownMenuItem,{size:"xs",onSelect:()=>{r(OrderType.MARKET);},children:jsx("span",{children:n("common.marketPrice")})})})})]})};var di=t=>{let[e,o]=useState(100),{baseDp:i,updateQuantity:r,quantity:n,baseTick:s}=Q(),a=m=>{l(`${t.value*m}`);},l=m=>{if(s&&s>0){let u=utils.formatNumber(m,s)??m;r(u);}};return useEffect(()=>{let m=Math.abs(t.value),u=Math.min(Number(n||0),m),c=new Decimal(u).div(m).mul(100).todp(2,Decimal.ROUND_DOWN).toNumber();o(c);},[n,t.value]),jsxs(PopoverRoot,{children:[jsx(PopoverTrigger,{children:jsx(Input,{size:"sm",classNames:{root:"oui-outline-none oui-border oui-border-solid oui-border-white/[0.12] focus-within:oui-outline-primary-light"},formatters:[inputFormatter.numberFormatter,...i?[inputFormatter.dpFormatter(i)]:[]],value:n,onBlur:m=>l(m.target.value),onValueChange:r})}),jsx(PopoverContent,{className:"oui-w-[360px] oui-rounded-xl",align:"start",side:"bottom",onOpenAutoFocus:m=>{m.preventDefault();},children:jsxs(Flex,{p:1,gap:2,width:"100%",itemAlign:"start",children:[jsx(Text,{size:"xs",intensity:98,className:"oui-min-w-[40px]",children:`${e}%`}),jsxs(Flex,{direction:"column",width:"100%",gap:2,children:[jsx(Slider,{markCount:4,value:[e],onValueChange:m=>{a(m[0]/100);}}),jsx(vs,{onClick:a})]})]})})]})},vs=t=>{let{t:e}=useTranslation(),o=[{label:"0%",value:0},{label:"25%",value:.25},{label:"50%",value:.5},{label:"75%",value:.75},{label:e("common.max"),value:1}];return jsx(Flex,{gap:2,width:"100%",children:o.map((i,r)=>jsx(Button,{variant:"outlined",color:"secondary",size:"xs",onClick:n=>{n.stopPropagation(),t.onClick(i.value);},className:"oui-w-1/5",children:i.label},r))})};var pi=t=>{let e=B();return jsx(Text.numeral,{dp:e.base_dp,rm:Decimal.ROUND_DOWN,padding:false,coloring:true,children:t})},fi=(t,e)=>jsx(di,{value:e.position_qty}),yi=t=>jsx(mi,{});var be=t=>{let{tick:e="quote_dp",children:o,...i}=t,r=B();if(!r)throw new Error("NumeralWithCtx must be used inside SymbolProvider");return jsx(Text.numeral,{as:"span",dp:r[e],...i,children:o})};var Ze=t=>{if(t.sharePnLConfig==null)return jsx(Fragment,{});let{position:e}=t,o=useSymbolsInfo(),{data:i}=useAccountInfo(),r=()=>{let n=t.isPositionHistory?(()=>{let s=e.netPnL||0,a=Math.abs(e.avg_open_price),l=Math.abs(e.closed_position_qty),m;if(s!==0&&l!==0&&a!==0&&i&&typeof t.leverage=="number"){let u=o[e.symbol],c=u("base_imr"),p=i.imr_factor[e.symbol]||1;if(c){let P=positions.notional(l,a),f=account.IMR({maxLeverage:i.max_leverage,baseIMR:c,IMR_Factor:p,positionNotional:P,ordersNotional:0,IMR_factor_power:4/5}),x=positions.unrealizedPnLROI({positionQty:l,openPrice:a,IMR:f,unrealizedPnL:s});m=new Decimal(x*100).toFixed(2,Decimal.ROUND_DOWN);}}return {side:e.side,pnl:s,roi:m,openPrice:a,closePrice:Math.abs(e.avg_close_price),openTime:e.open_timestamp,closeTime:e.close_timestamp,quantity:e.closed_position_qty}})():{side:e.position_qty>0?"LONG":"SHORT",pnl:e.unrealized_pnl,roi:new Decimal(e.unrealized_pnl_ROI*100).toFixed(2,Decimal.ROUND_DOWN),openPrice:Math.abs(e.average_open_price),markPrice:e.mark_price,openTime:e.timestamp,quantity:e.position_qty};modal.show(t.modalId,{pnl:{entity:{symbol:e.symbol,...n},refCode:t.refCode,...t.sharePnLConfig}});};return jsx("button",{type:"button",onClick:n=>{n.stopPropagation(),r();},children:jsx(ShareIcon,{color:"white",opacity:.54,size:t.iconSize??16})})};var xi=t=>{let{sharePnLConfig:e,position:o,modalId:i,iconSize:r,isPositionHistory:n}=t,{getFirstRefCode:s}=useReferralInfo(),a=useMemo(()=>s()?.code,[s]),l=useSymbolLeverage(t.position.symbol);return {iconSize:r,position:o,refCode:a,leverage:l,sharePnLConfig:e,modalId:i,isPositionHistory:n}};var mt=t=>{let e=xi(t);return jsx(Ze,{...e})};var hi=t=>{let{stopLossPrice:e,takeProfitPrice:o}=t,{tpslOrder:i,position:r}=Q();return jsx(Vs,{stopLossPrice:e,takeProfitPrice:o,direction:"column",order:i,position:r,tooltip:true})},Pi=t=>{let{qty:e,price:o,entryPrice:i,orderSide:r,orderType:n,symbolInfo:s}=t,a=utils.priceToPnl({qty:e,price:o,entryPrice:i,orderSide:r,orderType:n},{symbol:s}),l=n===AlgoOrderType.TAKE_PROFIT?"TP":"SL";return jsxs(Flex,{children:[jsx(Text,{intensity:54,className:"oui-mr-1",children:`${l} PnL:`}),jsx(Text.formatted,{rule:"price",className:a===0?"oui-text-base-contrast-36":a>0?"oui-text-trade-profit oui-gap-0":"oui-text-trade-loss oui-gap-0",prefix:jsx(Text,{children:a===0?"":a>0?"+":"-"}),suffix:jsx(Text,{intensity:36,className:"oui-ml-1",children:"USDC"}),children:`${Math.abs(a)}`})]})},Vs=t=>{let{direction:e="row",order:o,position:i}=t,r=useSymbolsInfo(),{t:n}=useTranslation(),s=useMemo(()=>{let u=[];if(!t.tooltip||!o||!i)return;let c=o.quantity;return c===0&&o.child_orders[0].type==="CLOSE_POSITION"&&(c=i.position_qty),t.takeProfitPrice&&u.push(jsx(Pi,{qty:c,price:t.takeProfitPrice,entryPrice:i.average_open_price,orderSide:o.side,orderType:AlgoOrderType.TAKE_PROFIT,symbolInfo:r[o.symbol]()},"tp")),t.stopLossPrice&&u.push(jsx(Pi,{qty:c,price:t.stopLossPrice,entryPrice:i.average_open_price,orderSide:o.side,orderType:AlgoOrderType.STOP_LOSS,symbolInfo:r[o.symbol]()},"sl")),jsx("div",{children:u})},[t.takeProfitPrice,t.stopLossPrice,i?.average_open_price,o?.side,o?.quantity,o?.algo_type]),a=useMemo(()=>{let u=[];if(!o?.symbol)return jsx("span",{children:"-"});return t.takeProfitPrice&&u.push(jsx(Text.formatted,{className:cn$1("oui-text-trade-profit oui-gap-0 oui-decoration-white/20"),rule:"price",dp:r[o.symbol]("quote_dp",2),children:t.takeProfitPrice,prefix:!t.stopLossPrice||e==="column"?jsx(Text,{intensity:54,children:`${n("tpsl.tp")} - `}):""},"tp")),t.stopLossPrice&&u.push(jsx(Text.formatted,{className:cn$1("oui-text-trade-loss oui-gap-0 oui-decoration-white/20 "),rule:"price",dp:r[o.symbol]("quote_dp",2),children:t.stopLossPrice,prefix:!t.takeProfitPrice||e==="column"?jsx(Text,{intensity:54,children:`${n("tpsl.sl")} - `}):""},"sl")),u.length===0?jsx(Text,{children:"-"}):(u.length===2&&e==="row"&&u.splice(1,0,jsx(Text,{children:"/"},"split")),u)},[t.takeProfitPrice,t.stopLossPrice,o?.symbol,n]),l=jsx("div",{className:cn$1("oui-inline-flex oui-text-base-contrast-36",t.direction==="column"?"oui-flex-col":"oui-flex-row oui-gap-1",t.className),children:a}),m=Array.isArray(a)?!!a.length:!a;return t.tooltip?jsxs(Flex,{gapX:2,children:[jsx(Tooltip,{content:s,children:l}),m&&jsx(ai,{})]}):l};var wi=t=>{let[e,o]=useLocalStorage("unPnlPriceBasis","markPrice"),{t:i}=useTranslation();return jsxs(Flex,{direction:"column",gap:3,className:"oui-text-base-contrast-54 oui-items-start",children:[jsx(Text,{children:i("positions.column.unrealPnl.tooltip")}),jsx(Divider,{className:"oui-w-full"}),jsx("div",{className:"oui-mb-0",children:i("positions.column.unrealPnl.priceBasis")}),jsx(Xs,{value:e,onValueChange:o})]})},Xs=t=>{let{value:e,onValueChange:o}=t,{t:i}=useTranslation();return jsxs(Flex,{gap:2,children:[jsx(_i,{sel:e==="markPrice",label:i("common.markPrice"),value:"markPrice",onCheckChange:o}),jsx(_i,{sel:e==="lastPrice",label:i("common.lastPrice"),value:"lastPrice",onCheckChange:o})]})},_i=t=>{let{sel:e,label:o,value:i,onCheckChange:r}=t;return jsxs(Flex,{onClick:n=>{r(i),n.stopPropagation();},gap:1,className:"oui-cursor-pointer",children:[e?jsx(Ys,{}):jsx(Js,{}),jsx(Text,{size:"xs",intensity:e?98:54,children:o})]})},Ys=()=>jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",className:"oui-fill-white",children:[jsx("path",{d:"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667",fill:"#fff",fillOpacity:".36"}),jsx("circle",{cx:"8",cy:"8",r:"3.333"})]}),Js=()=>jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:jsx("path",{d:"M8.01 1.333a6.667 6.667 0 1 0 0 13.333 6.667 6.667 0 0 0 0-13.333m0 1.333a5.334 5.334 0 1 1-.001 10.667 5.334 5.334 0 0 1 0-10.667",fill:"#fff",fillOpacity:".54"})});var oo=t=>{let{pnlNotionalDecimalPrecision:e,sharePnLConfig:o,onSymbolChange:i}=t,{t:r}=useTranslation(),n=useRef(Date.now().toString());return useMemo(()=>[{title:r("common.symbol"),dataIndex:"symbol",fixed:"left",width:140,onSort:(a,l)=>a.symbol.localeCompare(l.symbol),render:(a,l)=>jsxs(Flex,{gap:2,children:[jsx(Box,{width:4,height:20,className:cn$1("oui-h-[38px] oui-rounded-[1px]",l.position_qty>0?"oui-bg-trade-profit":"oui-bg-trade-loss")}),jsxs(Flex,{direction:"column",itemAlign:"start",children:[jsx(Text.formatted,{formatString:"base-type",className:"oui-cursor-pointer",onClick:m=>{i?.({symbol:a}),m.stopPropagation(),m.preventDefault();},children:`${a.split("_")[1]}-PERP`}),jsx(ge,{symbol:a})]})]})},{title:r("common.quantity"),dataIndex:"position_qty",onSort:(a,l)=>a.position_qty-l.position_qty,width:120,className:"oui-pl-6",render:pi},{title:r("common.avgOpen"),className:"oui-h-[48px]",width:120,onSort:true,dataIndex:"average_open_price",render:a=>jsx(be,{rm:Decimal.ROUND_DOWN,children:a})},{title:r("common.markPrice"),dataIndex:"mark_price",width:120,onSort:true,className:"oui-h-[48px]",render:a=>jsx(be,{rm:Decimal.ROUND_DOWN,children:a})},{title:jsx(Tooltip,{className:"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54",content:r("positions.column.liqPrice.tooltip"),children:jsx(Text,{children:r("positions.column.liqPrice")})}),width:100,onSort:true,dataIndex:"est_liq_price",render:a=>Number(a)===0?"--":jsx(be,{rm:Decimal.ROUND_DOWN,className:Number(a)>0?"oui-text-warning-light":"",children:a??"--"})},{title:jsx(HoverCard,{content:jsx(wi,{}),side:"top",align:"center",className:"oui-max-w-[280px] oui-text-2xs",children:jsx(Text,{children:r("common.unrealizedPnl")})}),dataIndex:"unrealized_pnl",width:180,onSort:true,rule:"price",numeralProps:{coloring:true},render:(a,l)=>jsxs(Flex,{gap:2,children:[jsxs(Flex,{children:[jsx(Text.numeral,{dp:e,rm:Decimal.ROUND_DOWN,coloring:true,className:"oui-font-semibold",children:a}),jsx(Text.numeral,{rule:"percentages",dp:e,rm:Decimal.ROUND_DOWN,coloring:true,className:"oui-font-semibold",prefix:"(",suffix:")",children:l.unrealized_pnl_ROI})]}),jsx(mt,{position:l,sharePnLConfig:o,modalId:SharePnLDialogId})]})},{title:r("common.tpsl"),dataIndex:"__",width:150,render:(a,l)=>jsx(hi,{stopLossPrice:l.sl_trigger_price,takeProfitPrice:l.tp_trigger_price})},{title:r("common.notional"),dataIndex:"notional",className:"oui-h-[48px]",width:100,onSort:true,render:a=>jsx(Text.numeral,{dp:e,children:a})},{title:jsx(Tooltip,{className:"oui-max-w-[280px] oui-bg-base-8 oui-p-3 oui-text-2xs oui-text-base-contrast-54",content:jsxs(Flex,{direction:"column",gap:3,className:"oui-rounded-sm oui-bg-base-8 oui-text-base-contrast-54",children:[jsx("span",{children:r("positions.column.margin.tooltip")}),jsx(Divider,{className:"oui-w-full"}),jsx("span",{children:r("positions.column.margin.formula")})]}),children:jsx(Text,{children:r("positions.column.margin")})}),dataIndex:"mm",onSort:true,width:100,rule:"price",render:a=>jsx(Text.numeral,{children:a})},{title:r("funding.fundingFee"),dataIndex:"fundingFee",width:100,render:(a,l)=>jsx(at,{fee:a,symbol:l.symbol,start_t:l.timestamp.toString(),end_t:n.current})},{title:r("common.qty"),dataIndex:"close_qty",width:100,fixed:"right",render:fi},{title:r("common.price"),dataIndex:"close_price",width:100,fixed:"right",render:yi},{title:null,dataIndex:"close_position",align:"left",width:136,fixed:"right",render(){return jsxs(Flex,{gapX:2,justify:"end",children:[jsx(qt,{}),jsx(si,{})]})}}],[e,o,r])};var io=t=>{let{t:e}=useTranslation();return jsx(Button,{variant:"outlined",color:"secondary",size:"sm",className:"oui-border-base-contrast-36",onClick:o=>{o.stopPropagation(),o.preventDefault(),t.openTP_SL();},children:e("common.tpsl")})};var no=t=>{let e=useSymbolsInfo()[t.state.item.symbol](),{tpslOrder:o}=Q(),{t:i}=useTranslation();return {openTP_SL:()=>{modal.sheet({title:i("common.tpsl"),content:jsx(PositionTPSLSheet,{position:t.state.item,symbolInfo:e,order:o,isEditing:false})});},...t,...e}};var ro=t=>{let e=no(t);return jsx(io,{...e})};var Ii=t=>{let{item:e}=t,o=e.position_qty>0,{t:i}=useTranslation();return jsx(Text.formatted,{rule:"symbol",formatString:"base-type",size:"2xs",suffix:jsxs("div",{className:"oui-flex oui-items-center oui-gap-1",children:[jsx(Badge,{color:o?"success":"danger",size:"xs",children:i(o?"common.long":"common.short")}),jsx(ge,{symbol:e.symbol})]}),showIcon:true,onClick:()=>{t.onSymbolChange?.({symbol:e.symbol});},children:e.symbol})},Di=t=>{let{item:e}=t,{t:o}=useTranslation();return jsxs(Flex,{gap:3,children:[jsxs(Flex,{direction:"column",className:"oui-text-2xs",itemAlign:"end",children:[jsxs("div",{children:[jsx(Text,{intensity:36,children:o("common.unrealizedPnl")}),jsx(Text,{intensity:20,children:"(USDC)"})]}),jsx(Text.numeral,{size:"xs",dp:t.pnlNotionalDecimalPrecision,rm:Decimal.ROUND_DOWN,coloring:true,className:"orderly-font-semibold",suffix:jsx(Text.numeral,{rule:"percentages",dp:t.pnlNotionalDecimalPrecision,rm:Decimal.ROUND_DOWN,prefix:"(",suffix:")",className:cn$1("oui-ml-1",e.unrealized_pnl_ROI>0?"oui-text-success-darken":"oui-text-danger-darken"),children:e.unrealized_pnl_ROI}),children:e.unrealized_pnl})]}),jsx(mt,{position:e,sharePnLConfig:t.sharePnLConfig,modalId:SharePnLBottomSheetId,iconSize:12})]})},Ni=t=>{let{item:e}=t,{t:o}=useTranslation();return jsx(Statistic,{label:o("common.qty"),classNames:{root:"oui-text-xs",label:"oui-text-2xs"},children:jsx(Text.numeral,{dp:t.base_dp,padding:false,coloring:true,children:e.position_qty})})},Li=t=>{let{item:e}=t,{t:o}=useTranslation();return jsx(Statistic,{label:jsxs("span",{children:[o("positions.column.margin"),jsx(Text,{intensity:20,children:"(USDC)"})]}),classNames:{root:"oui-text-xs",label:"oui-text-2xs"},children:jsx(Text.numeral,{dp:t.quote_dp,intensity:80,children:e.mm})})},qi=t=>{let{item:e}=t,{t:o}=useTranslation();return jsx(Statistic,{align:"end",label:jsxs("span",{children:[o("common.notional"),jsx(Text,{intensity:20,children:"(USDC)"})]}),classNames:{root:"oui-text-xs",label:"oui-text-2xs"},children:jsx(Text.numeral,{dp:t.quote_dp,intensity:80,children:e.notional})})},Ri=t=>{let{item:e}=t,{t:o}=useTranslation();return jsx(Statistic,{label:o("common.avgOpen"),classNames:{root:"oui-text-xs",label:"oui-text-2xs"},children:jsx(Text.numeral,{dp:t.quote_dp,rm:Decimal.ROUND_DOWN,intensity:80,children:e.average_open_price})})},Mi=t=>{let{item:e}=t,{t:o}=useTranslation();return jsx(Statistic,{label:o("common.markPrice"),classNames:{root:"oui-text-xs",label:"oui-text-2xs"},children:jsx(Text.numeral,{dp:t.quote_dp,rm:Decimal.ROUND_DOWN,intensity:80,children:e.mark_price})})},Oi=t=>{let{item:e}=t,{t:o}=useTranslation(),i=e.est_liq_price&&e.est_liq_price>0?e.est_liq_price:"-";return jsx(Statistic,{label:o("positions.column.liqPrice"),align:"end",classNames:{root:"oui-text-xs",label:"oui-text-2xs"},children:jsx(Text.numeral,{dp:t.quote_dp,rm:Decimal.ROUND_DOWN,color:"warning",children:i})})},Ai=t=>{let{item:e}=t,{t:o}=useTranslation();return e.tp_trigger_price==null&&e.sl_trigger_price==null?jsx(Fragment,{}):jsxs(Flex,{className:"oui-text-2xs oui-text-base-contrast-36",children:[jsxs(Text,{children:[`${o("common.tpsl")}:`,"\xA0"]}),jsxs(Flex,{className:"oui-gap-[2px]",children:[e.tp_trigger_price&&jsx(Text.numeral,{color:"buy",children:e.tp_trigger_price}),e.sl_trigger_price&&"/",e.sl_trigger_price&&jsx(Text.numeral,{color:"sell",children:e.sl_trigger_price})]})]})},ki=t=>{let{t:e}=useTranslation(),o=useRef(Date.now().toString());return jsxs(Flex,{justify:"end",className:"oui-w-full oui-text-2xs",children:[jsxs(Text,{intensity:36,children:[e("funding.fundingFee"),": "]}),jsx(at,{fee:t.item.fundingFee,symbol:t.item.symbol,start_t:t.item.timestamp.toString(),end_t:o.current})]})};var so=t=>{let{className:e,...o}=t,i=jsxs(Flex,{justify:"between",width:"100%",children:[jsx(Ii,{...t}),jsx(Di,{...t})]}),r=jsxs(Grid,{cols:3,rows:2,gap:2,width:"100%",children:[jsx(Ni,{...t}),jsx(Li,{...t}),jsx(qi,{...t}),jsx(Ri,{...t}),jsx(Mi,{...t}),jsx(Oi,{...t})]}),n=jsxs(Grid,{width:"100%",gap:2,cols:3,rows:1,children:[jsx(ro,{state:t}),jsx(qt,{type:OrderType.LIMIT}),jsx(qt,{type:OrderType.MARKET})]});return jsxs(Flex,{direction:"column",width:"100%",gap:2,p:2,r:"xl",itemAlign:"start",className:cn$1(e,"oui-bg-base-9"),children:[i,jsx(Divider,{intensity:6,className:"oui-w-full"}),r,jsx(Ai,{...o}),jsx(ki,{...o}),n]})};var ao=t=>{let e=B();return {...t,...e}};var lo=t=>{let e=ao(t);return jsx(so,{...e,className:t.className})};var _e=t=>{let{position:e}=t,{t:o}=useTranslation(),[i,r]=useState(Math.abs(e.position_qty).toString()),[n,s]=useState(""),[a,l]=useState(OrderType.MARKET);useEffect(()=>{r(Math.abs(e.position_qty).toString());},[e.position_qty]);let m=e.symbol,u=useSymbolsInfo(),c=u?.[m],p=c("quote_dp"),P=c("base_dp"),f=c("base_tick"),{side:x,closeOrderData:T,submit:q,isMutating:_,errors:y,calculate:F}=usePositionClose({position:e,order:{type:a,quantity:i,price:n}}),k=useCallback(d=>{let X=F({},"order_quantity",d,e.mark_price,c());r(X.order_quantity);},[F,u,e.mark_price]),W=useCallback(d=>{let X=F({},"order_price",d,e.mark_price,c());s(X.order_price);},[F,u,e.mark_price]),st=useCallback(d=>{l(d),s(d===OrderType.LIMIT?e.mark_price?.toString():"");},[e.mark_price]),N=useCallback(async()=>{if(Number(i)>c("base_max")){toast.error(jsxs("div",{children:[o("positions.limitClose.errors.exceed.title"),jsx("br",{}),jsx("div",{className:"oui-break-normal",children:o("positions.limitClose.errors.exceed.description",{quantity:i,symbol:va(m,"base"),maxQuantity:c("base_max")})})]}));return}return q().then(d=>{if(d.success)return t.mutatePositions?.(),d;throw d.message&&toast.error(d.message),true}).catch(d=>(d.message&&toast.error(d.message),false))},[q]);return jsx(Ve.Provider,{value:{quantity:i,price:n,type:a,side:x,position:e,updatePriceChange:W,updateQuantity:k,updateOrderType:st,tpslOrder:e.algo_order,onSubmit:N,submitting:_,closeOrderData:T,quoteDp:p,baseDp:P,baseTick:f,errors:y},children:t.children})};function va(t,e="base"){let o=t.split("_"),i=o[0],r=o[1],n=o[2];return (e??"base-quote").replace("type",i).replace("base",r).replace("quote",n)}var Qi=t=>{let{pnlNotionalDecimalPrecision:e,sharePnLConfig:o,pagination:i,isLoading:r,dataSource:n,onSymbolChange:s}=t,a=oo({pnlNotionalDecimalPrecision:e,sharePnLConfig:o,onSymbolChange:s});return jsx(AuthGuardDataTable,{loading:r,id:"oui-desktop-positions-content",columns:a,bordered:true,dataSource:n,generatedRowKey:l=>l.symbol,renderRowContainer:(l,m,u)=>jsx(_t,{symbol:l.symbol,children:jsx(_e,{position:l,children:u})}),manualPagination:false,pagination:i,testIds:{body:"oui-testid-dataList-position-tab-body"}})},Ui=t=>{let{pnlNotionalDecimalPrecision:e,sharePnLConfig:o,dataSource:i,onSymbolChange:r}=t;return jsx(ListView,{className:"oui-hide-scrollbar oui-w-full oui-space-y-0 oui-overflow-y-hidden",contentClassName:"!oui-space-y-1",dataSource:i,renderItem:(n,s)=>jsx(_t,{symbol:n.symbol,children:jsx(_e,{position:n,children:jsx(lo,{item:n,index:s,pnlNotionalDecimalPrecision:e,sharePnLConfig:o,onSymbolChange:r})})})})},$i=t=>{let{pnlNotionalDecimalPrecision:e,sharePnLConfig:o,pagination:i,isLoading:r,tableData:n,onSymbolChange:s,mutatePositions:a}=t,l=oo({pnlNotionalDecimalPrecision:e,sharePnLConfig:o,onSymbolChange:s}),{dataSource:m=[]}=n;return jsx(AuthGuardDataTable,{bordered:true,loading:r,id:"oui-desktop-positions-content",columns:l,dataSource:m,expanded:true,getSubRows:u=>u.children,generatedRowKey:u=>u.id,onCell:(u,c)=>{if((c.children??[]).length>0)return {children:u.id==="symbol"?jsx(Badge,{color:"neutral",size:"xs",children:c?.description||formatAddress(c?.id)}):null}},renderRowContainer:(u,c,p)=>u.symbol?jsx(_t,{symbol:u.symbol,children:jsx(_e,{position:u,mutatePositions:a,children:p})}):p,manualPagination:false,pagination:i,testIds:{body:"oui-testid-dataList-position-tab-body"}})};var qa=t=>{let e=ze(t);return jsx(Qi,{...e})},Ra=t=>{let e=ze(t);return jsx(Ui,{...e})},Ma=t=>{let e=$o(t);return jsx($i,{...e})};var Ki=t=>{let{onSymbolChange:e,pnlNotionalDecimalPrecision:o}=t,{t:i}=useTranslation();return useMemo(()=>[{title:i("common.symbol"),dataIndex:"symbol",fixed:"left",width:200,onSort:(n,s)=>n.symbol.localeCompare(s.symbol),render:(n,s)=>jsx(Ha,{record:s,onSymbolChange:e})},{title:i("positions.history.column.closed&maxClosed"),dataIndex:"close_maxClose",width:200,render:(n,s)=>jsx(za,{record:s})},{title:i("positions.history.column.netPnl"),dataIndex:"netPnL",width:140,onSort:(n,s)=>n.netPnL==null||s.netPnL==null?-1:(n.netPnL??0)-(s.netPnL??0),render:(n,s)=>jsxs(Flex,{gapX:1,children:[jsx(Ea,{record:s,pnlNotionalDecimalPrecision:o}),jsx(mt,{position:s,sharePnLConfig:t.sharePnLConfig,modalId:SharePnLDialogId,isPositionHistory:true})]})},{title:i("common.avgPrice"),dataIndex:"avg_open",width:140,render:(n,s)=>{let a=s.avg_open_price!=null?Math.abs(s.avg_open_price):"--",{quote_dp:l}=B();return jsx(Text.numeral,{dp:l,padding:false,children:a})}},{title:i("common.avgClose"),dataIndex:"avg_close",width:175,render:(n,s)=>{let a=s.avg_close_price!=null?Math.abs(s.avg_close_price):"--",{quote_dp:l}=B();return jsx(Text.numeral,{dp:l,padding:false,children:a})}},{title:i("funding.fundingFee"),dataIndex:"accumulated_funding_fee",render:(n,s)=>jsx(at,{fee:-n,symbol:s.symbol,start_t:s.open_timestamp.toString(),end_t:s.close_timestamp?.toString()})},{title:i("positions.history.column.timeOpened"),dataIndex:"open_timestamp",width:175,onSort:true,render:(n,s)=>jsx(Text.formatted,{rule:"date",formatString:"yyyy-MM-dd HH:mm:ss",children:s.open_timestamp})},{title:i("positions.history.column.timeClosed"),dataIndex:"close_timestamp",width:175,onSort:true,render:(n,s)=>s.position_status=="closed"&&s.close_timestamp?jsx(Text.formatted,{rule:"date",formatString:"yyyy-MM-dd HH:mm:ss",children:s.close_timestamp??"--"}):"--"},{title:i("positions.history.column.updatedTime"),dataIndex:"last_update_time",width:175,onSort:true,render:(n,s)=>jsx(Text.formatted,{rule:"date",formatString:"yyyy-MM-dd HH:mm:ss",children:s.last_update_time})}],[o,i])},Ha=t=>{let{record:e,onSymbolChange:o}=t,{t:i}=useTranslation(),r=useMemo(()=>{let n=[],s=e.position_status,a=()=>s==="closed"?i("positions.history.status.closed"):s==="partial_closed"?i("positions.history.status.partialClosed"):capitalizeFirstLetter(s.replace("_"," "));return n.push(jsx(Badge,{color:s!=="closed"?"primaryLight":"neutral",size:"xs",className:"oui-break-normal oui-whitespace-nowrap",children:a()})),e.type==="adl"?n.push(jsx(Badge,{color:"danger",size:"xs",children:i("positions.history.type.adl")})):e.type==="liquidated"&&n.push(jsx(Tooltip,{className:"oui-min-w-[204px] oui-bg-base-5",arrow:{className:"oui-fill-base-5"},content:jsxs(Flex,{direction:"column",itemAlign:"start",className:"oui-text-2xs",children:[e.liquidation_id!=null&&jsxs(Flex,{justify:"between",width:"100%",gap:2,children:[jsx(Text,{intensity:54,children:i("positions.history.liquidated.liquidationId")}),jsx(Text,{intensity:98,children:e.liquidation_id})]}),jsxs(Flex,{justify:"between",width:"100%",gap:2,children:[jsx(Text,{intensity:54,children:i("positions.history.liquidated.liquidatorFee")}),jsxs(Text,{color:"lose",children:[e.liquidator_fee>0&&"-",commifyOptional(e.liquidator_fee)]})]}),jsxs(Flex,{justify:"between",width:"100%",gap:2,children:[jsx(Text,{intensity:54,children:i("positions.history.liquidated.insFundFee")}),jsxs(Text,{color:"lose",children:[e.insurance_fund_fee>0&&"-",commifyOptional(e.insurance_fund_fee)]})]})]}),children:jsx("div",{children:jsx(Badge,{size:"xs",color:"danger",className:"oui-cursor-pointer",children:jsx("span",{className:"oui-underline oui-decoration-dashed oui-decoration-[1px]",children:i("positions.history.type.liquidated")})})})})),n},[e,i]);return jsxs(Flex,{gap:2,height:48,children:[jsx(Box,{width:4,height:38,className:cn$1("oui-rounded-[1px] oui-shrink-0",e.side==="LONG"?"oui-bg-trade-profit":"oui-bg-trade-loss")}),jsxs(Flex,{direction:"column",itemAlign:"start",children:[jsx(Text.formatted,{formatString:"base-type",className:"oui-cursor-pointer",onClick:n=>{o?.({symbol:e.symbol}),n.stopPropagation(),n.preventDefault();},children:`${e.symbol.split("_")[1]}-PERP`}),jsx(Flex,{gap:1,children:r})]})]})},za=t=>{let{record:e}=t,{base_dp:o}=B();return jsxs(Flex,{gap:1,direction:"column",itemAlign:"start",className:"oui-overflow-hidden oui-whitespace-nowrap oui-text-ellipsis",children:[jsx(Text.numeral,{dp:o,padding:false,children:Math.abs(e.closed_position_qty)}),jsx(Text.numeral,{dp:o,padding:false,className:"oui-truncate",children:Math.abs(e.max_position_qty)})]})},Ea=t=>{let{record:e,pnlNotionalDecimalPrecision:o}=t,{t:i}=useTranslation(),r=e.netPnL!=null?e.netPnL:void 0,n=()=>jsx(Text.numeral,{dp:o,color:e.netPnL!=null?e.netPnL>0?"profit":"lose":void 0,className:r==null?"":"oui-cursor-pointer oui-border-b oui-border-dashed oui-border-line-12",children:r??"--"});return e.netPnL==null?n():jsx(Tooltip,{delayDuration:200,content:jsxs(Flex,{direction:"column",itemAlign:"start",className:"oui-text-2xs",children:[jsx(Text,{intensity:80,children:i("positions.history.column.netPnl")}),jsxs(Flex,{justify:"between",width:"100%",gap:2,children:[jsx(Text,{intensity:54,children:i("common.realizedPnl")}),jsx(Text,{color:e.realized_pnl>=0?"profit":"lose",className:"oui-cursor-pointer",children:commifyOptional(e.realized_pnl)})]}),jsxs(Flex,{justify:"between",width:"100%",gap:2,children:[jsx(Text,{intensity:54,children:i("funding.fundingFee")}),jsx(Text,{color:e.accumulated_funding_fee>0?"lose":"profit",className:"oui-cursor-pointer",children:commifyOptional(-e.accumulated_funding_fee)})]}),jsxs(Flex,{justify:"between",width:"100%",gap:2,children:[jsx(Text,{intensity:54,children:i("positions.history.netPnl.tradingFee")}),jsx(Text,{color:e.trading_fee>0?"lose":"profit",className:"oui-cursor-pointer",children:commifyOptional(-e.trading_fee)})]})]}),className:"oui-min-w-[204px] oui-bg-base-5",arro