@liberfi.io/ui-portfolio 2.0.13 → 2.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +7 -15
- package/dist/index.d.ts +7 -15
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +14 -14
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {createContext,useContext,useMemo,useCallback,useState,useRef,useEffect}from'react';import {useCurrentChain}from'@liberfi.io/ui-chain-select';import {getNativeToken,formatAmountUSD,formatAmount,formatAmountUSDCompact,formatPriceUSD,formatPercent,SafeBigNumber}from'@liberfi.io/utils';import {useAuth,useConnectedWallet}from'@liberfi.io/wallet-connector';import {useTranslation}from'@liberfi.io/i18n';import {useScreen,useDisclosure,useCopyToClipboard,toast,Button,SignInIcon,StyledPopover,PopoverTrigger,TokenIcon,ChevronDownIcon,cn as cn$1,WalletIcon,PopoverContent,StyledTooltip,CopyIcon,Divider,SignOutIcon,Skeleton}from'@liberfi.io/ui';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {ResponsiveContainer,AreaChart,XAxis,YAxis,ReferenceLine,Area,PieChart,Pie,Cell}from'recharts';import {useQuery}from'@tanstack/react-query';import {useWalletPortfoliosByTokensQuery,useWalletPortfolioPnlsByTokensQuery,useWalletPortfoliosSubscription,useWalletPortfolioPnlsSubscription,useWalletActivitiesQuery,useWalletActivitiesSubscription,useWalletPortfoliosQuery,useWalletPortfolioPnlsQuery,useWalletPnlQuery,useWalletPnlSubscription}from'@liberfi.io/react';typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-portfolio"]="2.0.13");var Ho="2.0.13";var xe=createContext(null);var ge=createContext({}),De=createContext({});function ye(){let e=useContext(ge);if(!e)throw new Error("usePortfolioContext must be used within a PortfolioProvider");return e}function $e(){let{summary:e,summaryStatus:t}=ye();return {data:e,...t}}function ze(){let{status:e,signIn:t,signOut:o}=useAuth(),{data:r}=$e(),{chain:n,chainNamespace:a}=useCurrentChain(),i=useConnectedWallet(n),s=useMemo(()=>getNativeToken(n),[n]),l=useMemo(()=>r?.balanceInUsd?formatAmountUSD(r.balanceInUsd):"--",[r?.balanceInUsd]),p=useMemo(()=>r?.balanceInNative?formatAmount(r.balanceInNative):"--",[r?.balanceInNative]);return {status:e,signIn:t,signOut:o,balanceUsdFormatted:l,balanceNativeFormatted:p,nativeToken:s,chainNamespace:a,walletAddress:i?.address??""}}function Ye({status:e,signIn:t,signOut:o,balanceUsdFormatted:r,balanceNativeFormatted:n,nativeToken:a,chainNamespace:i,walletAddress:s,actions:l}){let{t:p}=useTranslation(),{isMobile:c}=useScreen(),{isOpen:d,onClose:m,onOpenChange:f}=useDisclosure(),v=useCopyToClipboard(),u=useCallback(()=>{v(s,()=>toast.success(p("common.primaryAddressCopied",{network:i.toUpperCase()})));},[v,i,s]);return e==="unauthenticated"?jsx(Button,{isIconOnly:c,size:"sm",color:"primary",radius:"full",disableRipple:true,onPress:t,startContent:c?void 0:jsx(SignInIcon,{width:16,height:16}),"aria-label":p("common.signIn"),children:c?jsx(SignInIcon,{width:16,height:16}):p("common.signIn")}):e==="authenticating"?jsx(Button,{isIconOnly:c,size:"sm",color:"primary",radius:"full",disableRipple:true,isLoading:true,isDisabled:true,"aria-label":p("common.signingIn"),children:p("common.signingIn")}):e==="deauthenticating"?jsx(Button,{isIconOnly:c,size:"sm",color:"primary",radius:"full",disableRipple:true,isLoading:true,isDisabled:true,"aria-label":p("common.signingOut"),children:p("common.signingOut")}):jsxs(StyledPopover,{placement:c?"bottom":"bottom-end",isOpen:d,onOpenChange:f,triggerScaleOnOpen:false,children:[jsx(PopoverTrigger,{children:jsx(Button,{size:"sm",className:"bg-content2",radius:"full",disableRipple:true,startContent:jsx(WalletIcon,{width:16,height:16,className:"text-neutral"}),endContent:jsx(ChevronDownIcon,{width:16,height:16,className:cn$1("text-neutral transition-transform",d&&"rotate-180")}),children:a&&jsxs("div",{className:"flex items-center gap-1.5",children:[jsx(TokenIcon,{symbol:a.symbol,size:16}),jsx("span",{className:"text-xs text-foreground",children:c?n:`${n} ${a.symbol}`})]})})}),jsx(PopoverContent,{children:jsxs("div",{className:"w-70 flex flex-col gap-3 py-4",children:[jsxs("div",{className:"px-4 flex items-start justify-between",children:[jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-xs text-neutral",children:p("common.totalValue")}),jsx("span",{className:"text-base font-semibold text-foreground",children:r})]}),jsx("div",{className:"flex items-start justify-end gap-0.5",children:jsx(StyledTooltip,{content:p("common.copyPrimaryAddress",{network:i.toUpperCase()}),children:jsx(Button,{className:"text-xs bg-transparent text-neutral hover:text-foreground h-4 min-h-4 gap-1",startContent:jsx(CopyIcon,{width:14,height:14}),disableRipple:true,disableAnimation:true,onPress:u,children:i.toUpperCase()})})})]}),jsx(Divider,{}),jsxs("div",{className:"grid grid-cols-4 gap-2 px-4",children:[l?.map(x=>jsxs("button",{type:"button",className:"flex cursor-pointer flex-col items-center justify-center gap-1 rounded-md py-2 text-foreground transition-colors hover:text-primary",onClick:()=>{x.onPress(),m();},children:[x.icon,jsx("span",{className:"w-full truncate text-center text-xs",children:x.label})]},x.key)),jsxs("button",{type:"button",className:"flex cursor-pointer flex-col items-center justify-center gap-1 rounded-md py-2 text-danger transition-colors hover:text-danger/80",onClick:()=>{o(),m();},children:[jsx(SignOutIcon,{width:16,height:16}),jsx("span",{className:"w-full truncate text-center text-xs",children:p("common.signOut")})]})]})]})})]})}function ar({actions:e}){let t=ze();return jsx(Ye,{status:t.status,signIn:t.signIn,signOut:t.signOut,balanceUsdFormatted:t.balanceUsdFormatted,balanceNativeFormatted:t.balanceNativeFormatted,nativeToken:t.nativeToken,chainNamespace:t.chainNamespace,walletAddress:t.walletAddress,actions:e})}function qs(e){if(!e)return 0;let t=Number(e);return Number.isFinite(t)?t:0}function I(e){let t=Math.abs(e),o=e<0?"-":"";return t>=1e6?`${o}$${(t/1e6).toFixed(1)}M`:t>=1e4?`${o}$${(t/1e3).toFixed(1)}K`:t>=1?`${o}$${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`:t>=.01?`${o}$${t.toFixed(2)}`:t>0?`${o}<$0.01`:"$0.00"}function Pe(e){let t=I(Math.abs(e));return e>0?`+${t}`:e<0?`-${t.replace("-","")}`:t}function Dt(e){return `${e>0?"+":""}${e.toFixed(2)}%`}function Ut(e){let o=Math.abs(e).toFixed(2).split("."),r=Number(o[0]).toLocaleString("en-US"),n=`.${o[1]}`;return {sign:e<0?"-$":"$",integer:r,decimal:n}}function ue(e,t=4,o=4){return e.length<=t+o+3?e:`${e.slice(0,t)}\u2026${e.slice(-o)}`}function Ge(e){return e===0?"0":e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?e.toLocaleString("en-US",{maximumFractionDigits:2}):e>=1?e.toFixed(2):e>=1e-4?e.toFixed(4):"<0.0001"}function Bt(e,t){return `https://solscan.io/tx/${e}`}var Rt=["#C8FF00","#00E676","#0066FF","#FF6B9D","#8B7BFF","#FF5252","#FFB74D","#4DD0E1"],pr="#3A3A4E";function Ht(e){let t=e.reduce((i,s)=>i+s.value,0);if(t<=0)return {items:[]};let o=[...e].sort((i,s)=>s.value-i.value),r=[],n=0,a=0;for(let i of o){let s=i.value/t*100;s<2?n+=i.value:(r.push({name:i.name,symbol:i.symbol,percent:s,value:i.value,color:Rt[a%Rt.length]}),a++);}return n>0&&r.push({name:"Other",symbol:"OTHER",percent:n/t*100,value:n,color:pr}),{items:r}}function Ot(e){return new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:false})}function je({walletId:e,wallets:t,isViewing:o,viewingAddress:r,onSelectWallet:n,onCopyAddress:a,onSearch:i}){let[s,l]=useState(false),[p,c]=useState(""),d=useRef(null),m=!e&&!o,f=t.find(S=>S.id===e),v=o?"External":m?"All Wallets":f?.name??"",u=o?ue(r??""):m?"Aggregated":ue(f?.address??""),x=o?"bg-[#5C5C72]":m?"bg-[#C8FF00]":"bg-[#00E676]",g=useCallback(()=>{let S=p.trim();S.length>=32&&(i(S),c(""));},[p,i]),w=useCallback(S=>{S.key==="Enter"&&g();},[g]);return jsxs("div",{className:"flex items-center justify-between gap-4 pb-4",children:[jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[jsxs("div",{className:"relative",ref:d,children:[jsxs("button",{type:"button",className:cn$1("flex items-center gap-2 rounded-lg border px-2.5 py-1.5 transition-colors",o?"border-[rgba(200,255,0,0.2)] bg-[rgba(200,255,0,0.04)]":"border-[#252530] bg-[#16161E] hover:border-[#35354A] hover:bg-[#1C1C26]",o&&"pointer-events-none"),onClick:()=>!o&&l(S=>!S),children:[jsx("span",{className:cn$1("h-[7px] w-[7px] flex-shrink-0 rounded-full",x)}),jsx("span",{className:"text-[11px] font-medium text-[#A0A0B8]",children:v}),jsx("span",{className:"font-mono text-xs text-foreground",children:u}),!o&&jsx("svg",{className:cn$1("text-[#5C5C72] transition-transform",s&&"rotate-180"),width:"10",height:"10",viewBox:"0 0 12 12",fill:"none",children:jsx("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})]}),s&&jsxs(Fragment,{children:[jsx("div",{className:"fixed inset-0 z-40",onClick:()=>l(false)}),jsxs("div",{className:"absolute left-0 top-[calc(100%+4px)] z-50 min-w-[260px] rounded-lg border border-[#252530] bg-[#16161E] p-1 shadow-[0_8px_32px_rgba(0,0,0,0.4)]",children:[jsxs("button",{type:"button",className:cn$1("flex w-full items-center gap-2 rounded-[5px] px-2.5 py-2 transition-colors hover:bg-[#1C1C26]",m&&"bg-[rgba(200,255,0,0.07)]"),onClick:()=>{n(void 0),l(false);},children:[jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-[#C8FF00]"}),jsx("span",{className:"min-w-[60px] text-[11px] font-medium text-[#A0A0B8]",children:"All Wallets"}),jsx("span",{className:"text-[11px] text-[#3A3A4E]",children:"Aggregated"})]}),t.map(S=>jsxs("button",{type:"button",className:cn$1("flex w-full items-center gap-2 rounded-[5px] px-2.5 py-2 transition-colors hover:bg-[#1C1C26]",e===S.id&&"bg-[rgba(200,255,0,0.07)]"),onClick:()=>{n(S.id),l(false);},children:[jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-[#00E676]"}),jsx("span",{className:"min-w-[60px] text-[11px] font-medium text-[#A0A0B8]",children:S.name}),jsx("span",{className:"font-mono text-[11px] text-[#5C5C72]",children:ue(S.address)}),jsx("span",{className:"ml-auto font-mono text-[11px] font-medium text-foreground",children:S.balance})]},S.id))]})]})]}),jsx("button",{type:"button",className:cn$1("rounded p-1 text-[#5C5C72] transition-colors hover:bg-[#1C1C26] hover:text-[#C8FF00]",m&&!o&&"pointer-events-none opacity-40"),onClick:a,disabled:m&&!o,children:jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:[jsx("rect",{x:"4.5",y:"4.5",width:"7",height:"7",rx:"1.5",stroke:"currentColor",strokeWidth:"1.2"}),jsx("path",{d:"M9.5 4.5V3a1.5 1.5 0 0 0-1.5-1.5H3A1.5 1.5 0 0 0 1.5 3v5A1.5 1.5 0 0 0 3 9.5h1.5",stroke:"currentColor",strokeWidth:"1.2"})]})}),jsx("span",{className:cn$1("flex-shrink-0 rounded-[3px] px-1.5 py-[3px] text-[9px] font-semibold uppercase tracking-wider",o?"bg-[rgba(200,255,0,0.07)] text-[#C8FF00] animate-[pulse-glow_2s_ease-in-out_infinite]":"bg-[rgba(0,230,118,0.1)] text-[#00E676]"),children:o?"Viewing":"Owner"})]}),jsxs("div",{className:"flex flex-shrink-0 items-center gap-1.5",children:[jsxs("div",{className:"flex h-[34px] w-[240px] items-center gap-1.5 rounded-lg border border-[#252530] bg-[#16161E] px-2.5 transition-all focus-within:w-[300px] focus-within:border-[#C8FF00]",children:[jsxs("svg",{className:"flex-shrink-0 text-[#5C5C72]",width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",children:[jsx("circle",{cx:"7",cy:"7",r:"5.5",stroke:"currentColor",strokeWidth:"1.5"}),jsx("path",{d:"M11 11L14.5 14.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),jsx("input",{className:"flex-1 border-none bg-transparent font-mono text-xs text-foreground caret-[#C8FF00] outline-none placeholder:font-sans placeholder:text-[11px] placeholder:text-[#5C5C72]",placeholder:"Search wallet address\u2026",spellCheck:false,value:p,onChange:S=>c(S.target.value),onKeyDown:w})]}),jsx("button",{type:"button",className:"whitespace-nowrap rounded-[5px] border border-[#252530] bg-[#1C1C26] px-3 py-1.5 text-[11px] font-medium text-[#A0A0B8] transition-colors hover:border-[#C8FF00] hover:bg-[#C8FF00] hover:text-black",onClick:g,children:"View"})]})]})}var he=(r=>(r.SPOT="spot",r.PERPS="perps",r.PREDICTION="prediction",r))(he||{}),Xe=(o=>(o.NET_WORTH="networth",o.PNL="pnl",o))(Xe||{}),Ze=(n=>(n.ONE_DAY="1D",n.SEVEN_DAY="7D",n.THIRTY_DAY="30D",n.MAX="Max",n))(Ze||{}),Wt={"1D":1,"7D":7,"30D":30,Max:365},Lt=(o=>(o.LONG="long",o.SHORT="short",o))(Lt||{}),Mt=(r=>(r.SWAP="swap",r.SEND="send",r.RECEIVE="receive",r))(Mt||{}),_t=(o=>(o.ACTIVE="active",o.PENDING="pending",o))(_t||{}),Vt=(o=>(o.WON="won",o.LOST="lost",o))(Vt||{}),Kt=(r=>(r.POLYMARKET="polymarket",r.DRIFT="drift",r.METADAO="metadao",r))(Kt||{});var fr=[{key:"spot",label:"Spot"},{key:"perps",label:"Perps"},{key:"prediction",label:"Prediction"}];function mr(e,t,o,r){switch(e){case "spot":return t;case "perps":return o;case "prediction":return r}}function Je({activeTab:e,onTabChange:t,spotValue:o=0,perpsValue:r=0,predictionValue:n=0}){return jsx("div",{className:"flex gap-1 border-b border-[#252530] pb-0 pt-5",children:fr.map(({key:a,label:i})=>{let s=e===a,l=mr(a,o,r,n);return jsxs("button",{type:"button",className:cn$1("relative flex items-center gap-2 border-b-2 px-4 pb-3 pt-2.5 text-[13px] font-medium transition-colors",s?"border-[#C8FF00] text-foreground":"border-transparent text-[#5C5C72] hover:text-[#A0A0B8]"),onClick:()=>t(a),children:[i,!s&&jsx("span",{className:"rounded-[10px] bg-[#16161E] px-2 py-0.5 font-mono text-[11px] text-[#5C5C72]",children:I(l)})]},a)})})}function tt({overview:e}){let t=e?.totalValue??0,o=e?.uPnl??0,r=e?.realizedPnl??0,n=e?.totalProfit??0,{sign:a,integer:i,decimal:s}=Ut(t);return jsxs("div",{className:"flex items-center gap-4 pb-4",children:[jsx("div",{className:"flex items-baseline gap-3",children:jsxs("div",{className:"font-mono text-[26px] font-bold leading-none tracking-tight",children:[jsx("span",{className:"mr-px text-lg font-medium text-[#C8FF00]",children:a}),i,jsx("span",{className:"text-base font-normal text-[#5C5C72]",children:s})]})}),jsxs("div",{className:"ml-auto flex items-center gap-3",children:[jsx(et,{label:"uPNL",value:o}),jsx(qt,{}),jsx(et,{label:"Realized",value:r}),jsx(qt,{}),jsx(et,{label:"Total Profit",value:n})]})]})}function et({label:e,value:t}){return jsxs("div",{className:"flex items-center gap-1.5",children:[jsx("span",{className:"text-[11px] text-[#5C5C72]",children:e}),jsx("span",{className:cn$1("font-mono text-xs font-medium",t>0?"text-[#00E676]":t<0?"text-[#FF5252]":"text-[#5C5C72]"),children:Pe(t)})]})}function qt(){return jsx("div",{className:"h-3.5 w-px bg-[#252530]"})}var Sr=["1D","7D","30D","Max"];function zt(e,t){let o=new Date(e);return t==="1D"?o.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:false}):o.toLocaleDateString("en-US",{month:"short",day:"numeric"})}function Nr(e){return e==="pnl"?"change":"netWorth"}function rt({curveType:e,curvePeriod:t,data:o,isLoading:r,onTypeChange:n,onPeriodChange:a}){let i=o?.points??[],s=Nr(e),l=e==="pnl",p=useMemo(()=>i.map(u=>l?u.change:u.netWorth),[i,l]),c=p.some(u=>u<0),{minVal:d,maxVal:m}=useMemo(()=>{if(p.length===0)return {minVal:0,maxVal:100};let u=Math.min(...p),x=Math.max(...p),g=x-u||1;return {minVal:u-g*.1,maxVal:x+g*.1}},[p]),f=useMemo(()=>{if(i.length===0)return [];let u=Math.min(7,i.length),x=Math.max(1,Math.floor((i.length-1)/(u-1))),g=[];for(let S=0;S<i.length;S+=x)g.push({ts:i[S].timestamp,label:zt(i[S].timestamp,t)});let w=i[i.length-1];return g[g.length-1]?.ts!==w.timestamp&&g.push({ts:w.timestamp,label:zt(w.timestamp,t)}),g},[i,t]),v=p[p.length-1]??0;return jsxs("div",{className:"overflow-hidden rounded-lg border border-[#252530] bg-[#0F0F16]",children:[jsxs("div",{className:"flex items-center justify-between px-4 pt-3",children:[jsxs("div",{className:"flex gap-0.5 rounded-[5px] bg-[#16161E] p-0.5",children:[jsx(Yt,{label:"Net Worth",active:e==="networth",onClick:()=>n("networth")}),jsx(Yt,{label:"PNL",active:e==="pnl",onClick:()=>n("pnl")})]}),jsx("div",{className:"flex gap-0.5",children:Sr.map(u=>jsx("button",{type:"button",className:cn$1("rounded-[3px] px-2 py-1 text-[10px] font-medium transition-colors",t===u?"bg-[rgba(200,255,0,0.07)] text-[#C8FF00]":"text-[#5C5C72] hover:bg-[#16161E] hover:text-[#A0A0B8]"),onClick:()=>a(u),children:u},u))})]}),jsx("div",{className:"h-[180px] px-4 pt-2",children:r||i.length<2?jsx("div",{className:"flex h-full items-center justify-center",children:jsx("span",{className:"text-xs text-[#5C5C72]",children:r?"":"Not enough data"})}):jsx(ResponsiveContainer,{width:"100%",height:"100%",children:jsxs(AreaChart,{data:i,margin:{top:8,right:0,left:0,bottom:0},children:[jsxs("defs",{children:[jsxs("linearGradient",{id:"gradAccent",x1:"0",y1:"0",x2:"0",y2:"1",children:[jsx("stop",{offset:"0%",stopColor:"#C8FF00",stopOpacity:.12}),jsx("stop",{offset:"100%",stopColor:"#C8FF00",stopOpacity:0})]}),jsxs("linearGradient",{id:"gradGreen",x1:"0",y1:"0",x2:"0",y2:"1",children:[jsx("stop",{offset:"0%",stopColor:"#00E676",stopOpacity:.12}),jsx("stop",{offset:"100%",stopColor:"#00E676",stopOpacity:0})]}),jsxs("linearGradient",{id:"gradRed",x1:"0",y1:"0",x2:"0",y2:"1",children:[jsx("stop",{offset:"0%",stopColor:"#FF5252",stopOpacity:0}),jsx("stop",{offset:"100%",stopColor:"#FF5252",stopOpacity:.1})]})]}),jsx(XAxis,{dataKey:"timestamp",hide:true}),jsx(YAxis,{hide:true,domain:[d,m]}),l&&c&&jsx(ReferenceLine,{y:0,stroke:"rgba(255,255,255,0.06)",strokeDasharray:"4 4"}),jsx(Area,{type:"monotone",dataKey:s,stroke:l?v>=0?"#00E676":"#FF5252":"#C8FF00",strokeWidth:1.5,fill:l?v>=0?"url(#gradGreen)":"url(#gradRed)":"url(#gradAccent)",dot:false,isAnimationActive:false})]})})}),jsx("div",{className:"flex justify-between px-4 pb-2.5 pt-1",children:f.map(({ts:u,label:x})=>jsx("span",{className:"font-mono text-[9px] text-[#3A3A4E]",children:x},u))})]})}function Yt({label:e,active:t,onClick:o}){return jsx("button",{type:"button",className:cn$1("rounded px-2.5 py-1 text-[11px] font-medium transition-colors",t?"bg-[#1C1C26] text-foreground":"text-[#5C5C72] hover:text-[#A0A0B8]"),onClick:o,children:e})}function st({data:e,isLoading:t}){let o=e?.items??[],r=useMemo(()=>o.map(n=>({name:n.name,value:n.percent})),[o]);return jsxs("div",{className:"flex flex-col overflow-hidden rounded-lg border border-[#252530] bg-[#0F0F16]",children:[jsx("div",{className:"px-4 pb-2 pt-3",children:jsx("span",{className:"text-xs font-semibold text-[#A0A0B8]",children:"Distribution"})}),jsx("div",{className:"flex flex-1 items-center justify-center px-4",children:t||o.length===0?jsx("div",{className:"flex h-[140px] w-[140px] items-center justify-center",children:jsx("span",{className:"text-xs text-[#5C5C72]",children:t?"":"No data"})}):jsx(ResponsiveContainer,{width:140,height:140,children:jsx(PieChart,{children:jsx(Pie,{data:r,cx:"50%",cy:"50%",innerRadius:32,outerRadius:55,dataKey:"value",stroke:"none",isAnimationActive:false,children:o.map((n,a)=>jsx(Cell,{fill:n.color},a))})})})}),jsx("div",{className:"px-4 pb-3 pt-2",children:o.map((n,a)=>jsxs("div",{className:"flex items-center gap-1.5 py-[3px] text-[11px]",children:[jsx("span",{className:"h-[7px] w-[7px] flex-shrink-0 rounded-[2px]",style:{background:n.color}}),jsx("span",{className:"min-w-0 flex-1 truncate text-[#A0A0B8]",children:n.name}),jsxs("span",{className:"font-mono text-[10px] text-[#5C5C72]",children:[n.percent.toFixed(1),"%"]}),jsx("span",{className:"min-w-[55px] text-right font-mono text-[10px] text-foreground",children:I(n.value)})]},a))})]})}function H(){let e=useContext(xe);if(!e)throw new Error("usePortfolioClient must be used within a PortfolioClientProvider");return e}function jt(e){return ["portfolio","overview",e??{}]}async function Dr(e,t){return await e.getOverview(t)}function it(e,t={}){let o=H();return useQuery({queryKey:jt(e),queryFn:async()=>Dr(o,e),...t})}function Xt(e){return ["portfolio","spot","holdings",e??{}]}async function Br(e,t){return await e.getSpotHoldings(t)}function ve(e,t={}){let o=H();return useQuery({queryKey:Xt(e),queryFn:async()=>Br(o,e),...t})}function Zt(e){return ["portfolio","spot","history",e??{}]}async function Or(e,t){return await e.getSpotHistory(t)}function at(e,t={}){let o=H();return useQuery({queryKey:Zt(e),queryFn:async()=>Or(o,e),...t})}function Jt(e){return ["portfolio","perps","positions",e??{}]}async function Qr(e,t){return await e.getPerpsPositions(t)}function lt(e,t={}){let o=H();return useQuery({queryKey:Jt(e),queryFn:async()=>Qr(o,e),...t})}function eo(e){return ["portfolio","perps","history",e??{}]}async function Lr(e,t){return await e.getPerpsHistory(t)}function pt(e,t={}){let o=H();return useQuery({queryKey:eo(e),queryFn:async()=>Lr(o,e),...t})}function to(e){return ["portfolio","prediction","active",e??{}]}async function _r(e,t){return await e.getPredictionBets(t)}function dt(e,t={}){let o=H();return useQuery({queryKey:to(e),queryFn:async()=>_r(o,e),...t})}function oo(e){return ["portfolio","prediction","settled",e??{}]}async function Kr(e,t){return await e.getPredictionSettled(t)}function ct(e,t={}){let o=H();return useQuery({queryKey:oo(e),queryFn:async()=>Kr(o,e),...t})}function ro(e){return ["portfolio","chart",e]}async function qr(e,t){return await e.getChartData(t)}function ut(e,t={}){let o=H();return useQuery({queryKey:ro(e),queryFn:async()=>qr(o,e),...t})}function Yr(){return ["portfolio","distribution"]}function ft(e){return {data:useMemo(()=>Ht(e),[e])}}function Gr(){let{refetchSummary:e}=ye();return e}var rn=15e3;function so(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function nn({chain:e,address:t,tokenAddresses:o,pollMs:r=rn}){let n=!!t&&o.length>0,[a,i]=useState({}),s=useWalletPortfoliosByTokensQuery({chain:e,address:t,tokenAddresses:o},{enabled:n,refetchInterval:r}),l=useWalletPortfolioPnlsByTokensQuery({chain:e,address:t,tokenAddresses:o},{enabled:n,refetchInterval:r});useEffect(()=>{let v=s.data??[],u=new Map;if(l.data)for(let g of l.data)u.set(g.address,g);let x={};for(let g of v)x[g.address]={...g,pnl:u.get(g.address)??null};i(x);},[s.data,l.data]);let p=useRef(""),c=useRef(new Set),d=o.slice().sort().join(",");d!==p.current&&(p.current=d,c.current=new Set(o));let m=c.current;useWalletPortfoliosSubscription({chain:e,address:t},v=>{i(u=>{let x=u;for(let g of v){if(!m.has(g.tokenAddress))continue;let w=x[g.tokenAddress];if(!w)continue;let{chain:S,walletAddress:B,tokenAddress:O,...E}=g,V=so(E);Object.keys(V).length!==0&&(x=x===u?{...u}:x,x[g.tokenAddress]={...w,...V});}return x});},{enabled:n}),useWalletPortfolioPnlsSubscription({chain:e,address:t},v=>{i(u=>{let x=u;for(let g of v){if(!m.has(g.tokenAddress))continue;let w=x[g.tokenAddress];if(!w||!w.pnl)continue;let{walletAddress:S,tokenAddress:B,...O}=g,E=so(O);Object.keys(E).length!==0&&(x=x===u?{...u}:x,x[g.tokenAddress]={...w,pnl:{...w.pnl,...E}});}return x});},{enabled:n});let f=useCallback(async()=>{await Promise.all([s.refetch(),l.refetch()]);},[s.refetch,l.refetch]);return {tokens:a,isPending:s.isPending,isFetching:s.isFetching||l.isFetching,isError:s.isError,isSuccess:s.isSuccess,error:s.error,refetch:f}}function xt(e){let{defaultTab:t="spot",walletAddresses:o,chain:r}=e??{},[n,a]=useState(t),[i,s]=useState(void 0),[l,p]=useState(void 0),[c,d]=useState("networth"),[m,f]=useState("7D"),v=l!==void 0,u=useMemo(()=>{if(l)return {walletAddresses:[l],chain:r};if(o?.length)return {walletAddresses:o,chain:r}},[o,l,r]),x=it(u),g=ve(u),w=ut({period:Wt[m],...u}),S=ft(g.data?.holdings??[]),B=useMemo(()=>g.data?.holdings.reduce((W,U)=>W+U.value,0)??0,[g.data]),O=useCallback(W=>{p(W);},[]),E=useCallback(()=>{p(void 0);},[]),V=useCallback(W=>{s(W);},[]);return {activeTab:n,setActiveTab:a,walletId:i,selectWallet:V,viewingAddress:l,isViewing:v,curveType:c,setCurveType:d,curvePeriod:m,setCurvePeriod:f,portfolioQuery:u,overviewQuery:x,curveQuery:w,distributionQuery:S,spotHoldingsQuery:g,spotValue:B,perpsValue:0,predictionValue:0,enterViewing:O,exitViewing:E}}function gt(){return jsxs("div",{className:"mx-auto max-w-[1280px] px-6",children:[jsxs("div",{className:"flex gap-4 border-b border-[#252530] pb-0 pt-5",children:[jsx(Skeleton,{className:"h-9 w-16 rounded-md"}),jsx(Skeleton,{className:"h-9 w-28 rounded-md"}),jsx(Skeleton,{className:"h-9 w-32 rounded-md"})]}),jsxs("div",{className:"flex items-center justify-between gap-4 py-4",children:[jsxs("div",{className:"flex items-center gap-2.5",children:[jsx(Skeleton,{className:"h-8 w-48 rounded-lg"}),jsx(Skeleton,{className:"h-6 w-6 rounded"}),jsx(Skeleton,{className:"h-5 w-14 rounded-[3px]"})]}),jsxs("div",{className:"flex items-center gap-1.5",children:[jsx(Skeleton,{className:"h-[34px] w-[240px] rounded-lg"}),jsx(Skeleton,{className:"h-[34px] w-12 rounded-[5px]"})]})]}),jsxs("div",{className:"flex items-center gap-4 pb-4",children:[jsxs("div",{className:"flex items-baseline gap-3",children:[jsx(Skeleton,{className:"h-8 w-48 rounded-md"}),jsx(Skeleton,{className:"h-6 w-16 rounded"})]}),jsxs("div",{className:"ml-auto flex items-center gap-3",children:[jsx(Skeleton,{className:"h-4 w-28 rounded"}),jsx("div",{className:"h-3.5 w-px bg-[#252530]"}),jsx(Skeleton,{className:"h-4 w-28 rounded"}),jsx("div",{className:"h-3.5 w-px bg-[#252530]"}),jsx(Skeleton,{className:"h-4 w-20 rounded"})]})]}),jsxs("div",{className:"grid grid-cols-[1fr_340px] gap-3 pb-4",children:[jsxs("div",{className:"rounded-lg border border-[#252530] bg-[#0F0F16] p-4",children:[jsxs("div",{className:"flex items-center justify-between pb-4",children:[jsx(Skeleton,{className:"h-7 w-40 rounded-[5px]"}),jsx(Skeleton,{className:"h-6 w-32 rounded"})]}),jsx(Skeleton,{className:"h-[180px] w-full rounded-md"}),jsx("div",{className:"mt-2 flex justify-between",children:Array.from({length:7}).map((e,t)=>jsx(Skeleton,{className:"h-3 w-8 rounded"},t))})]}),jsxs("div",{className:"rounded-lg border border-[#252530] bg-[#0F0F16] p-4",children:[jsx(Skeleton,{className:"mb-3 h-4 w-24 rounded"}),jsx("div",{className:"flex items-center justify-center py-4",children:jsx(Skeleton,{className:"h-[140px] w-[140px] rounded-full"})}),jsx("div",{className:"space-y-1.5 pt-2",children:Array.from({length:5}).map((e,t)=>jsx(Skeleton,{className:"h-4 w-full rounded"},t))})]})]}),jsxs("div",{className:"pb-6",children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsx(Skeleton,{className:"h-8 w-40 rounded-[5px]"}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(Skeleton,{className:"h-7 w-40 rounded-[5px]"}),jsx(Skeleton,{className:"h-7 w-24 rounded-[5px]"})]})]}),jsx(Skeleton,{className:"mb-3 h-5 w-full rounded"}),Array.from({length:5}).map((e,t)=>jsx(Skeleton,{className:"mb-2 h-12 w-full rounded-[5px]"},t))]})]})}function yt({viewingAddress:e,onBack:t}){return jsxs("div",{className:"flex items-center justify-between border-b border-[rgba(200,255,0,0.12)] bg-[rgba(200,255,0,0.06)] px-6 py-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex h-[18px] w-[18px] items-center justify-center rounded-full border border-[rgba(200,255,0,0.25)] bg-[rgba(200,255,0,0.07)]",children:jsxs("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:[jsx("path",{d:"M8 3C4.36 3 1.26 5.28 0 8.5c1.26 3.22 4.36 5.5 8 5.5s6.74-2.28 8-5.5C14.74 5.28 11.64 3 8 3z",stroke:"#C8FF00",strokeWidth:"1.3",fill:"none"}),jsx("circle",{cx:"8",cy:"8.5",r:"2.5",stroke:"#C8FF00",strokeWidth:"1.3",fill:"none"})]})}),jsx("span",{className:"text-xs font-medium text-[#C8FF00]",children:"Viewing external portfolio"}),jsx("span",{className:"ml-1 font-mono text-[11px] text-[#A0A0B8]",children:ue(e)})]}),jsxs("button",{type:"button",className:"flex items-center gap-1.5 rounded-[5px] border border-[#252530] bg-[#1C1C26] px-3 py-1.5 text-[11px] font-medium text-[#A0A0B8] transition-colors hover:border-[#C8FF00] hover:bg-[#C8FF00] hover:text-black",onClick:t,children:[jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:jsx("path",{d:"M10 2L4 8l6 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"Back to My Portfolio"]})]})}function sn({wallets:e=[],onCopyAddress:t,renderHoldings:o,isLoading:r,...n}){let a=xt(n),{activeTab:i,setActiveTab:s,walletId:l,selectWallet:p,viewingAddress:c,isViewing:d,curveType:m,setCurveType:f,curvePeriod:v,setCurvePeriod:u,portfolioQuery:x,overviewQuery:g,curveQuery:w,distributionQuery:S,spotValue:B,perpsValue:O,predictionValue:E,enterViewing:V,exitViewing:W}=a;return r||g.isLoading&&!g.data?jsx(gt,{}):jsxs("div",{children:[d&&c&&jsx(yt,{viewingAddress:c,onBack:W}),jsxs("div",{className:"mx-auto max-w-[1280px] px-6",children:[jsx(Je,{activeTab:i,onTabChange:s,spotValue:B,perpsValue:O,predictionValue:E}),jsx(je,{walletId:l,wallets:e,isViewing:d,viewingAddress:c,onSelectWallet:p,onCopyAddress:()=>{if(d&&c)t?.(c);else {let J=e.find(C=>C.id===l);J&&t?.(J.address);}},onSearch:V}),jsx(tt,{overview:g.data}),jsxs("div",{className:"grid grid-cols-[1fr_340px] gap-3 pb-4",children:[jsx(rt,{curveType:m,curvePeriod:v,data:w.data,isLoading:w.isLoading,onTypeChange:f,onPeriodChange:u}),jsx(st,{data:S.data,isLoading:false})]}),o?.({activeTab:i,portfolioQuery:x,isViewing:d})]})]})}function He({open:e,title:t,message:o,confirmLabel:r,cancelLabel:n,onConfirm:a,onCancel:i}){return e?jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[jsx("div",{className:"absolute inset-0 bg-black/60",onClick:i,onKeyDown:s=>{s.key==="Escape"&&i();},role:"button",tabIndex:-1,"aria-label":"Close dialog"}),jsxs("div",{className:"relative z-10 w-full max-w-sm rounded-xl border border-[#252530] bg-[#12121A] p-6 shadow-2xl",children:[jsx("h3",{className:"text-sm font-semibold text-foreground",children:t}),jsx("p",{className:"mt-2 text-xs leading-relaxed text-[#A0A0B8]",children:o}),jsxs("div",{className:"mt-5 flex items-center justify-end gap-2",children:[jsx("button",{type:"button",className:"rounded-lg px-4 py-2 text-xs font-medium text-[#5C5C72] transition-colors hover:bg-[#1C1C26] hover:text-foreground",onClick:i,children:n}),jsx("button",{type:"button",className:cn$1("rounded-lg border px-4 py-2 text-xs font-medium transition-colors","border-[rgba(255,82,82,0.25)] text-[#FF5252]","hover:border-[#FF5252] hover:bg-[rgba(255,82,82,0.1)]"),onClick:a,children:r})]})]})]}):null}function vt({activeTab:e,portfolioQuery:t,isViewing:o}){let[r,n]=useState("holdings"),[a,i]=useState("positions"),[s,l]=useState("active"),[p,c]=useState(""),[d,m]=useState(""),[f,v]=useState(""),[u,x]=useState(false),[g,w]=useState(false),S=useCallback(()=>{w(Q=>!Q);},[]),B=ve(t,{enabled:e==="spot"}),O=at(t,{enabled:e==="spot"&&r==="history"}),E=lt(t,{enabled:e==="perps"}),V=pt(t,{enabled:e==="perps"&&a==="history"}),W=dt(t,{enabled:e==="prediction"}),U=ct(t,{enabled:e==="prediction"&&s==="settled"}),ce=useMemo(()=>(B.data?.holdings??[]).filter(Y=>{if(u&&Y.value<1&&!Y.verified)return false;if(p){let L=p.toLowerCase();return Y.name.toLowerCase().includes(L)||Y.symbol.toLowerCase().includes(L)}return true}),[B.data?.holdings,u,p]),J=useMemo(()=>{let Q=E.data?.positions??[];if(!d)return Q;let Y=d.toLowerCase();return Q.filter(L=>L.pair.toLowerCase().includes(Y))},[E.data?.positions,d]),C=useMemo(()=>{let Q=W.data?.bets??[];if(!f)return Q;let Y=f.toLowerCase();return Q.filter(L=>L.market.toLowerCase().includes(Y))},[W.data?.bets,f]);return {spotSubTab:r,setSpotSubTab:n,perpsSubTab:a,setPerpsSubTab:i,predictionSubTab:s,setPredictionSubTab:l,spotSearch:p,setSpotSearch:c,perpsSearch:d,setPerpsSearch:m,predictionSearch:f,setPredictionSearch:v,hideSmall:u,setHideSmall:x,groupCollapsed:g,toggleGroupCollapsed:S,spotHoldingsQuery:B,spotHistoryQuery:O,perpsPositionsQuery:E,perpsHistoryQuery:V,predictionBetsQuery:W,predictionSettledQuery:U,filteredSpotHoldings:ce,filteredPerpsPositions:J,filteredPredictionBets:C,isViewing:o}}function le({tabs:e,activeKey:t,onTabChange:o}){return jsx("div",{className:"flex gap-0.5",children:e.map(r=>jsx("button",{type:"button",className:cn$1("rounded-[5px] px-3 py-1.5 text-xs font-medium transition-colors",t===r.key?"bg-[#1C1C26] text-foreground":"text-[#5C5C72] hover:bg-[#16161E] hover:text-[#A0A0B8]"),onClick:()=>o(r.key),children:r.label},r.key))})}function pe({value:e,onChange:t,placeholder:o}){return jsxs("div",{className:"flex h-7 w-40 items-center gap-1 rounded-[5px] border border-[#252530] bg-[#16161E] px-2 transition-all focus-within:w-[200px] focus-within:border-[#C8FF00]",children:[jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",className:"flex-shrink-0 text-[#5C5C72]",children:[jsx("circle",{cx:"7",cy:"7",r:"5.5",stroke:"currentColor",strokeWidth:"1.5"}),jsx("path",{d:"M11 11L14.5 14.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),jsx("input",{type:"text",className:"flex-1 border-none bg-transparent font-mono text-[11px] text-foreground caret-[#C8FF00] outline-none placeholder:font-sans placeholder:text-[10px] placeholder:text-[#5C5C72]",placeholder:o,spellCheck:false,value:e,onChange:r=>t(r.target.value)})]})}function j({title:e,hint:t}){return jsxs("div",{className:"flex flex-col items-center justify-center py-16 text-center",children:[jsx("span",{className:"text-sm text-[#5C5C72]",children:e}),t&&jsx("span",{className:"mt-1 text-xs text-[#3A3A4E]",children:t})]})}function Ne({label:e,disabled:t,onClick:o}){return jsxs("button",{type:"button",className:cn$1("flex items-center gap-1 whitespace-nowrap rounded-[5px] border px-3 py-1.5 text-[11px] font-medium transition-colors",t?"pointer-events-none border-[#252530] text-[#3A3A4E]":"border-[rgba(255,82,82,0.25)] text-[#FF5252] hover:border-[#FF5252] hover:bg-[rgba(255,82,82,0.1)]"),onClick:o,disabled:t,children:[jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",children:jsx("path",{d:"M4 4l8 8M12 4l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})}),e]})}function Ct({state:e,onClosePosition:t,onCloseAll:o}){let{t:r}=useTranslation(),{perpsSubTab:n,setPerpsSubTab:a,perpsSearch:i,setPerpsSearch:s,filteredPerpsPositions:l,perpsHistoryQuery:p,isViewing:c}=e,d=l.length>0;return jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsxs("div",{className:"flex items-center gap-3",children:[jsx(le,{tabs:[{key:"positions",label:r("portfolio.perps.openPositions")},{key:"history",label:r("portfolio.perps.tradeHistory")}],activeKey:n,onTabChange:m=>a(m)}),n==="positions"&&!c&&jsx(Ne,{label:r("portfolio.perps.closeAll"),disabled:!d,onClick:()=>o?.()})]}),jsx(pe,{value:i,onChange:s,placeholder:r("portfolio.perps.search.placeholder")})]}),n==="positions"?jsx(pn,{positions:l,isViewing:c,onClose:t}):jsx(cn,{records:p.data?.records??[],isLoading:p.isLoading})]})}function pn({positions:e,isViewing:t,onClose:o}){let{t:r}=useTranslation();return e.length===0?jsx(j,{title:r("portfolio.perps.empty"),hint:r("portfolio.perps.empty.hint")}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:t?"2fr 1fr .8fr .8fr 1fr":"2fr 1fr .8fr .8fr 1fr 80px"},children:[jsx("span",{children:r("portfolio.perps.header.pair")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.size")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.entry")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.mark")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.uPnl")}),!t&&jsx("span",{className:"text-right"})]}),jsx("div",{className:"flex flex-col",children:e.map(n=>jsx(dn,{position:n,isViewing:t,onClose:o},n.id))})]})}function dn({position:e,isViewing:t,onClose:o}){let{t:r}=useTranslation(),n=e.side==="long",a=e.uPnl>=0;return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:t?"2fr 1fr .8fr .8fr 1fr":"2fr 1fr .8fr .8fr 1fr 80px"},children:[jsxs("div",{className:"flex items-center gap-2",children:[e.icon?jsx("img",{src:e.icon,alt:e.pair,className:"h-6 w-6 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[9px] font-bold text-[#5C5C72]",children:e.pair.slice(0,2)}),jsxs("div",{className:"flex items-center gap-1.5",children:[jsx("span",{className:"text-xs font-medium text-foreground",children:e.pair}),jsx("span",{className:cn$1("rounded px-1.5 py-0.5 text-[10px] font-medium",n?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(255,82,82,0.12)] text-[#FF5252]"),children:r(n?"perpetuals.positions.long":"perpetuals.positions.short")}),jsxs("span",{className:"rounded bg-[rgba(200,255,0,0.1)] px-1.5 py-0.5 text-[10px] font-medium text-[#C8FF00]",children:[e.leverage,"\xD7"]})]})]}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:I(e.size)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:I(e.entryPrice)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:I(e.markPrice)}),jsx("span",{className:cn$1("text-right font-mono text-xs",a?"text-[#00E676]":"text-[#FF5252]"),children:Pe(e.uPnl)}),!t&&jsx("div",{className:"flex justify-end",children:jsx("button",{type:"button",className:"rounded-[5px] border border-[#252530] px-2.5 py-1 text-[10px] font-medium text-[#5C5C72] transition-colors hover:border-[#FF5252] hover:text-[#FF5252]",onClick:()=>o?.(e),children:r("portfolio.perps.close")})})]})}function cn({records:e,isLoading:t}){let{t:o}=useTranslation();return t?jsx("div",{className:"flex items-center justify-center py-16",children:jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-[#C8FF00] border-t-transparent"})}):e.length===0?jsx(j,{title:o("portfolio.perps.history.empty"),hint:o("portfolio.perps.history.empty.hint")}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"1.5fr 80px 1fr 1fr 1fr 100px"},children:[jsx("span",{children:o("portfolio.perps.history.header.pair")}),jsx("span",{children:o("portfolio.perps.history.header.side")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.size")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.pnl")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.closePrice")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.time")})]}),jsx("div",{className:"flex flex-col",children:e.map(r=>jsx(un,{record:r},r.id))})]})}function un({record:e}){let{t}=useTranslation(),o=e.side==="long",r=e.pnl>=0;return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"1.5fr 80px 1fr 1fr 1fr 100px"},children:[jsxs("div",{className:"flex items-center gap-2",children:[e.icon?jsx("img",{src:e.icon,alt:e.pair,className:"h-5 w-5 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[8px] font-bold text-[#5C5C72]",children:e.pair.slice(0,2)}),jsx("span",{className:"text-xs font-medium text-foreground",children:e.pair})]}),jsx("span",{children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",o?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(255,82,82,0.12)] text-[#FF5252]"),children:t(o?"perpetuals.positions.long":"perpetuals.positions.short")})}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:I(e.size)}),jsx("span",{className:cn$1("text-right font-mono text-xs",r?"text-[#00E676]":"text-[#FF5252]"),children:Pe(e.pnl)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:I(e.closePrice)}),jsx("span",{className:"text-right text-[11px] text-[#5C5C72]",children:e.time})]})}function St({state:e,onSellBet:t,onSellAll:o}){let{predictionSubTab:r,setPredictionSubTab:n,predictionSearch:a,setPredictionSearch:i,filteredPredictionBets:s,predictionSettledQuery:l,isViewing:p}=e,c=s.length>0;return jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsxs("div",{className:"flex items-center gap-3",children:[jsx(le,{tabs:[{key:"active",label:"Active Bets"},{key:"settled",label:"Settled"}],activeKey:r,onTabChange:d=>n(d)}),r==="active"&&!p&&jsx(Ne,{label:"Sell All",disabled:!c,onClick:()=>o?.()})]}),jsx(pe,{value:a,onChange:i,placeholder:"Search market\u2026"})]}),r==="active"?jsx(xn,{bets:s,isViewing:p,onSell:t}):jsx(yn,{records:l.data?.records??[],isLoading:l.isLoading})]})}var fn={polymarket:"bg-[rgba(0,102,255,0.12)] text-[#0066FF]",drift:"bg-[rgba(200,255,0,0.1)] text-[#C8FF00]",metadao:"bg-[rgba(255,107,157,0.1)] text-[#FF6B9D]"},mn={polymarket:"Polymarket",drift:"Drift",metadao:"MetaDAO"};function lo({source:e}){return jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",fn[e]),children:mn[e]})}function xn({bets:e,isViewing:t,onSell:o}){return e.length===0?jsx(j,{title:"No active bets",hint:"Explore prediction markets \u2192"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:t?"2.2fr .6fr .7fr .7fr .7fr":"2.2fr .6fr .7fr .7fr .7fr 80px"},children:[jsx("span",{children:"Market / Source"}),jsx("span",{className:"text-right",children:"Position"}),jsx("span",{className:"text-right",children:"Stake"}),jsx("span",{className:"text-right",children:"Potential"}),jsx("span",{className:"text-right",children:"Status"}),!t&&jsx("span",{className:"text-right"})]}),jsx("div",{className:"flex flex-col",children:e.map(r=>jsx(gn,{bet:r,isViewing:t,onSell:o},r.id))})]})}function gn({bet:e,isViewing:t,onSell:o}){return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:t?"2.2fr .6fr .7fr .7fr .7fr":"2.2fr .6fr .7fr .7fr .7fr 80px"},children:[jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[e.icon?jsx("img",{src:e.icon,alt:e.market,className:"h-6 w-6 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[9px] font-bold text-[#5C5C72]",children:"?"}),jsxs("div",{className:"flex flex-col overflow-hidden",children:[jsx("span",{className:"truncate text-xs font-medium text-foreground",children:e.market}),jsx(lo,{source:e.source})]})]}),jsx("span",{className:cn$1("text-right text-xs font-medium",e.position==="Yes"?"text-[#00E676]":"text-[#FF5252]"),children:e.position}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:I(e.stake)}),jsx("span",{className:"text-right font-mono text-xs text-[#00E676]",children:I(e.potential)}),jsx("span",{className:"text-right",children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",e.status==="active"?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(200,255,0,0.1)] text-[#C8FF00]"),children:e.status==="active"?"Active":"Pending"})}),!t&&jsx("div",{className:"flex justify-end",children:jsx("button",{type:"button",className:"rounded-[5px] border border-[#252530] px-2.5 py-1 text-[10px] font-medium text-[#5C5C72] transition-colors hover:border-[#FF5252] hover:text-[#FF5252]",onClick:()=>o?.(e),children:"Sell"})})]})}function yn({records:e,isLoading:t}){return t?jsx("div",{className:"flex items-center justify-center py-16",children:jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-[#C8FF00] border-t-transparent"})}):e.length===0?jsx(j,{title:"No settled bets",hint:"Settled predictions will appear here"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"1.5fr .8fr .6fr .7fr .6fr .7fr"},children:[jsx("span",{children:"Market"}),jsx("span",{children:"Source"}),jsx("span",{className:"text-right",children:"Position"}),jsx("span",{className:"text-right",children:"Stake"}),jsx("span",{className:"text-right",children:"Result"}),jsx("span",{className:"text-right",children:"Payout"})]}),jsx("div",{className:"flex flex-col",children:e.map(o=>jsx(bn,{record:o},o.id))})]})}function bn({record:e}){let t=e.result==="won";return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"1.5fr .8fr .6fr .7fr .6fr .7fr"},children:[jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[e.icon?jsx("img",{src:e.icon,alt:e.market,className:"h-5 w-5 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[8px] font-bold text-[#5C5C72]",children:"?"}),jsx("span",{className:"truncate text-xs font-medium text-foreground",children:e.market})]}),jsx(lo,{source:e.source}),jsx("span",{className:cn$1("text-right text-xs font-medium",e.position==="Yes"?"text-[#00E676]":"text-[#FF5252]"),children:e.position}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:I(e.stake)}),jsx("span",{className:"text-right",children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",t?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(255,82,82,0.12)] text-[#FF5252]"),children:t?"Won":"Lost"})}),jsx("span",{className:cn$1("text-right font-mono text-xs",t?"text-[#00E676]":"text-[#5C5C72]"),children:t?`+${I(e.payout)}`:I(e.payout)})]})}function At({state:e}){let{spotSubTab:t,setSpotSubTab:o,spotSearch:r,setSpotSearch:n,hideSmall:a,setHideSmall:i,groupCollapsed:s,toggleGroupCollapsed:l,filteredSpotHoldings:p,spotHistoryQuery:c}=e;return jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsx(le,{tabs:[{key:"holdings",label:"Holdings"},{key:"history",label:"History"}],activeKey:t,onTabChange:d=>o(d)}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(pe,{value:r,onChange:n,placeholder:"Search token\u2026"}),t==="holdings"&&jsxs("label",{className:"flex cursor-pointer items-center gap-1.5 text-[11px] text-[#5C5C72] select-none",children:[jsx("input",{type:"checkbox",className:"accent-[#C8FF00]",checked:a,onChange:d=>i(d.target.checked)}),"Hide small"]})]})]}),t==="holdings"?jsx(Pn,{holdings:p,groupCollapsed:s,onToggleGroup:l}):jsx(vn,{records:c.data?.trades??[],isLoading:c.isLoading})]})}function Pn({holdings:e,groupCollapsed:t,onToggleGroup:o}){return e.length===0?jsx(j,{title:"No tokens found",hint:"Your spot tokens will appear here"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"2fr 1fr 1fr 1fr 1fr"},children:[jsx("span",{children:"Asset"}),jsx("span",{className:"text-right",children:"Balance"}),jsx("span",{className:"text-right",children:"Price"}),jsx("span",{className:"text-right",children:"Value"}),jsx("span",{className:"text-right",children:"24h"})]}),jsxs("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72] transition-colors hover:text-[#A0A0B8]",onClick:o,children:[jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",className:cn$1("transition-transform",t&&"-rotate-90"),children:jsx("path",{d:"M4 6l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),jsx("span",{children:"Tokens"}),jsx("span",{className:"text-[#3A3A4E]",children:e.length})]}),!t&&jsx("div",{className:"flex flex-col",children:e.map(r=>jsx(hn,{holding:r},r.tokenAddress))})]})}function hn({holding:e}){let t=e.change24h>=0;return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"2fr 1fr 1fr 1fr 1fr"},children:[jsxs("div",{className:"flex items-center gap-2.5 overflow-hidden",children:[e.image?jsx("img",{src:e.image,alt:e.symbol,className:"h-7 w-7 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[10px] font-bold text-[#5C5C72]",children:e.symbol.slice(0,2)}),jsxs("div",{className:"flex flex-col overflow-hidden",children:[jsx("span",{className:"truncate text-xs font-medium text-foreground",children:e.name}),jsx("span",{className:"text-[10px] text-[#5C5C72]",children:e.symbol})]})]}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:Ge(e.balance)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:I(e.price)}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:I(e.value)}),jsx("span",{className:cn$1("text-right font-mono text-xs",t?"text-[#00E676]":"text-[#FF5252]"),children:Dt(e.change24h)})]})}function vn({records:e,isLoading:t}){return t?jsx("div",{className:"flex items-center justify-center py-16",children:jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-[#C8FF00] border-t-transparent"})}):e.length===0?jsx(j,{title:"No history found",hint:"Transaction history will appear here"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"80px 1.5fr 1fr 1fr 100px 80px"},children:[jsx("span",{children:"Type"}),jsx("span",{children:"Detail"}),jsx("span",{className:"text-right",children:"Amount"}),jsx("span",{className:"text-right",children:"Value"}),jsx("span",{className:"text-right",children:"Time"}),jsx("span",{className:"text-right",children:"TxHash"})]}),jsx("div",{className:"flex flex-col",children:e.map(o=>jsx(An,{record:o},`${o.txHash}-${o.tokenAddress}`))})]})}var Cn={swap:"bg-[rgba(139,123,255,0.12)] text-[#8B7BFF]",send:"bg-[rgba(255,82,82,0.12)] text-[#FF5252]",receive:"bg-[rgba(0,230,118,0.12)] text-[#00E676]"},Sn={swap:"Swap",send:"Send",receive:"Receive"};function Nn(e){return e.type==="swap"&&e.sideTokenSymbol?`${e.tokenSymbol} \u2192 ${e.sideTokenSymbol}`:e.tokenName||e.tokenSymbol}function An({record:e}){let t=Bt(e.txHash,e.chain);return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"80px 1.5fr 1fr 1fr 100px 80px"},children:[jsx("span",{children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",Cn[e.type]),children:Sn[e.type]})}),jsx("span",{className:"truncate text-xs text-foreground",children:Nn(e)}),jsxs("span",{className:"text-right font-mono text-xs text-foreground",children:[Ge(e.tokenAmount)," ",e.tokenSymbol]}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:I(e.valueUsd)}),jsx("span",{className:"text-right text-[11px] text-[#5C5C72]",children:e.timestamp?Ot(e.timestamp):"\u2014"}),jsx("span",{className:"text-right",children:e.txHash?jsxs("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-[11px] text-[#5C5C72] transition-colors hover:text-[#C8FF00]",children:[e.txHash.slice(0,4),"\u2026",e.txHash.slice(-3)]}):jsx("span",{className:"font-mono text-[11px] text-[#3A3A4E]",children:"\u2014"})})]})}function Tn({onClosePosition:e,onCloseAllPositions:t,onSellBet:o,onSellAllBets:r,...n}){let a=vt(n),[i,s]=useState(null),l=useCallback(()=>{s("closeAll");},[]),p=useCallback(()=>{s("sellAll");},[]),c=useCallback(()=>{i==="closeAll"?t?.():i==="sellAll"&&r?.(),s(null);},[i,t,r]),d=useCallback(()=>{s(null);},[]);return jsxs("div",{className:"rounded-xl border border-[#1C1C26] bg-[#0E0E16] p-4",children:[(()=>{switch(n.activeTab){case "spot":return jsx(At,{state:a});case "perps":return jsx(Ct,{state:a,onClosePosition:e,onCloseAll:l});case "prediction":return jsx(St,{state:a,onSellBet:o,onSellAll:p});default:return null}})(),jsx(He,{open:i==="closeAll",title:"Close All Positions",message:"Close all positions? This will route to each protocol to execute.",confirmLabel:"Confirm Close All",cancelLabel:"Cancel",onConfirm:c,onCancel:d}),jsx(He,{open:i==="sellAll",title:"Sell All Positions",message:"Sell all positions? This will route to each platform to execute.",confirmLabel:"Confirm Sell All",cancelLabel:"Cancel",onConfirm:c,onCancel:d})]})}function de(e,t=Date.now()){if(e==null)return "--";let o=typeof e=="string"||typeof e=="number"?new Date(e):e,r=typeof t=="number"?new Date(t):t,n=Math.max(0,Math.floor((r.getTime()-o.getTime())/1e3));if(n<60)return `${n}s`;let a=Math.floor(n/60);if(a<60)return `${a}m`;let i=Math.floor(a/60);if(i<24)return `${i}h`;let s=Math.floor(i/24);if(s<30)return `${s}d`;let l=Math.floor(s/30);return l<12?`${l}mo`:`${Math.floor(s/365)}y`}function me(e,t=4,o=4){return e?e.length<=t+o+1?e:`${e.slice(0,t)}\u2026${e.slice(-o)}`:"--"}var Fn={kol:{label:"KOL",bgClass:"bg-yellow-500/15",textClass:"text-yellow-400"},smart:{label:"Smart",bgClass:"bg-sky-500/15",textClass:"text-sky-400"},sniper:{label:"Sniper",bgClass:"bg-red-500/15",textClass:"text-red-400"},dev:{label:"Dev",bgClass:"bg-orange-500/15",textClass:"text-orange-400"},bundle:{label:"Bundle",bgClass:"bg-purple-500/15",textClass:"text-purple-400"},bluechip:{label:"Bluechip",bgClass:"bg-emerald-500/15",textClass:"text-emerald-400"},insider:{label:"Insider",bgClass:"bg-fuchsia-500/15",textClass:"text-fuchsia-400"},fresh:{label:"Fresh",bgClass:"bg-teal-500/15",textClass:"text-teal-400"}};function In({tag:e,className:t}){let o=Fn[e]??{label:e,bgClass:"bg-default/20",textClass:"text-default-500"};return jsx("span",{className:cn$1("inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium uppercase leading-none tracking-wide",o.bgClass,o.textClass,t),children:o.label})}function We({tags:e,className:t,max:o}){if(!e||e.length===0)return null;let r=o!=null&&o>0?e.slice(0,o):e,n=e.length-r.length;return jsxs("div",{className:cn$1("flex flex-wrap items-center gap-1",t),children:[r.map(a=>jsx(In,{tag:a},a)),n>0&&jsxs("span",{className:"inline-flex items-center rounded bg-default/20 px-1.5 py-0.5 text-[10px] font-medium text-default-500",children:["+",n]})]})}var Dn=[{value:"timestamp",label:"Latest"},{value:"totalUsd",label:"Top USD"}],Un=[{value:"all",label:"All"},{value:"buy",label:"Buys"},{value:"sell",label:"Sells"}];function mo({activities:e,isLoading:t,sortBy:o,onSortByChange:r,typeFilter:n="all",onTypeFilterChange:a,onLoadMore:i,hasMore:s,now:l=Date.now(),nativeDecimals:p=9,nativeSymbol:c="SOL",className:d,onRowClick:m}){return jsxs("div",{className:cn$1("flex flex-col",d),children:[jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 px-3 py-2",children:[jsx("div",{className:"flex items-center gap-1",children:Un.map(f=>jsx("button",{type:"button",onClick:()=>a?.(f.value),className:cn$1("rounded px-2 py-1 text-[11px] transition-colors",n===f.value?"bg-default-100 text-foreground":"text-default-400 hover:text-foreground"),children:f.label},f.value))}),jsx("div",{className:"flex items-center gap-1",children:Dn.map(f=>jsx("button",{type:"button",onClick:()=>r(f.value),className:cn$1("rounded px-2 py-1 text-[11px] transition-colors",o===f.value?"bg-default-100 text-foreground":"text-default-400 hover:text-foreground"),children:f.label},f.value))})]}),jsx("div",{className:"overflow-x-auto",children:jsxs("table",{className:"w-full min-w-[780px] table-fixed text-[12px]",children:[jsx("thead",{className:"text-default-400",children:jsxs("tr",{className:"border-b border-default-100",children:[jsx("th",{className:"w-[10%] px-3 py-2 text-left font-normal",children:"Side"}),jsx("th",{className:"w-[25%] px-3 py-2 text-left font-normal",children:"Token"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"Amount"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"USD"}),jsx("th",{className:"w-[15%] px-3 py-2 text-left font-normal",children:"Tags"}),jsx("th",{className:"w-[10%] px-3 py-2 text-right font-normal",children:"Gas"}),jsx("th",{className:"w-[10%] px-3 py-2 text-right font-normal",children:"Age"})]})}),jsxs("tbody",{children:[e.length===0&&!t&&jsx("tr",{children:jsx("td",{colSpan:7,className:"py-8 text-center text-default-400",children:"No activities"})}),e.map(f=>jsx(On,{activity:f,now:l,nativeDecimals:p,nativeSymbol:c,onRowClick:m},`${f.txHash}-${f.walletAddress}`)),t&&jsx("tr",{children:jsx("td",{colSpan:7,className:"py-4 text-center text-default-400",children:"Loading\u2026"})})]})]})}),s&&jsx("div",{className:"flex justify-center px-3 py-2",children:jsx("button",{type:"button",onClick:i,disabled:t,className:"rounded bg-default-100 px-3 py-1 text-[11px] text-default-600 transition-colors hover:bg-default-200 disabled:opacity-50",children:"Load more"})})]})}function Bn(e){return e.type==="buy"?e.to:e.type==="sell"?e.from:e.to}function Hn(e,t,o){if(!e)return "--";let r=Number(e)/Math.pow(10,t);return Number.isFinite(r)?`${formatAmount(r)} ${o}`:"--"}function On({activity:e,now:t,nativeDecimals:o,nativeSymbol:r,onRowClick:n}){let a=Bn(e),i=e.type==="buy"?"Buy":e.type==="sell"?"Sell":e.type.replace(/_/g," "),s=e.type==="buy"?"text-bullish":e.type==="sell"?"text-bearish":"text-default-500";return jsxs("tr",{className:cn$1("border-b border-default-50 hover:bg-default-50/60",n&&"cursor-pointer"),onClick:n?()=>n(e):void 0,children:[jsx("td",{className:cn$1("px-3 py-2 align-middle font-medium capitalize",s),children:i}),jsx("td",{className:"px-3 py-2 align-middle",children:jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-foreground",children:a.symbol}),jsx("span",{className:"font-mono text-[10px] text-default-400",children:me(a.address,6,6)})]})}),jsxs("td",{className:"px-3 py-2 text-right align-middle text-default-500",children:[formatAmount(a.amount)," ",a.symbol]}),jsx("td",{className:"px-3 py-2 text-right align-middle text-foreground",children:a.amountInUsd?formatAmountUSDCompact(a.amountInUsd):"--"}),jsx("td",{className:"px-3 py-2 align-middle",children:jsx(We,{tags:e.traderTags,max:2})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:Hn(e.gasFee,o,r)}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:de(e.time,t)})]})}function yo({chain:e,address:t,limit:o=50,initialSortBy:r="timestamp",initialTypeFilter:n="all"}){let[a,i]=useState(r),[s,l]=useState(n),[p,c]=useState(void 0),[d,m]=useState([]),[f,v]=useState([]),u=useCallback(()=>{c(void 0),m([]),v([]);},[]),x=useCallback(C=>{C!==a&&(i(C),u());},[a,u]),g=useCallback(C=>{C!==s&&(l(C),u());},[s,u]);useEffect(()=>{u();},[e,t,u]);let w=s==="all"?void 0:s,S=useMemo(()=>({chain:e,address:t,cursor:p,limit:o,sortBy:a,type:w}),[e,t,p,o,a,w]),{data:B,isPending:O,isFetching:E}=useWalletActivitiesQuery(S);useEffect(()=>{B&&m(C=>p==null?[B]:C[C.length-1]?.endCursor===B.endCursor?C:[...C,B]);},[B,p]);let V=a==="timestamp"&&s==="all"&&p==null;useWalletActivitiesSubscription({chain:e,address:t},C=>{!V||!C?.length||v(Q=>{let Y=new Set(Q.map(Ke=>Ke.txHash)),L=C.filter(Ke=>!Y.has(Ke.txHash));return L.length===0?Q:[...L,...Q].slice(0,100)});});let W=useMemo(()=>{let C=d.flatMap(L=>L.data);if(!V||f.length===0)return C;let Q=new Set(C.map(L=>L.txHash));return [...f.filter(L=>!Q.has(L.txHash)),...C]},[d,f,V]),U=d[d.length-1],ce=!!(U?.hasNext&&U.endCursor),J=useCallback(()=>{!U?.endCursor||!U.hasNext||c(U.endCursor);},[U]);return {activities:W,isLoading:O||E,sortBy:a,setSortBy:x,typeFilter:s,setTypeFilter:g,hasMore:ce,loadMore:J}}function tp({chain:e,address:t,limit:o,initialSortBy:r,initialTypeFilter:n,nativeDecimals:a,nativeSymbol:i,className:s,onRowClick:l}){let{activities:p,isLoading:c,sortBy:d,setSortBy:m,typeFilter:f,setTypeFilter:v,hasMore:u,loadMore:x}=yo({chain:e,address:t,limit:o,initialSortBy:r,initialTypeFilter:n});return jsx(mo,{activities:p,isLoading:c,sortBy:d,onSortByChange:m,typeFilter:f,onTypeFilterChange:v,hasMore:u,onLoadMore:x,className:s,nativeDecimals:a,nativeSymbol:i,onRowClick:l})}function ho({data:e,isLoading:t,className:o,now:r=Date.now(),onRowClick:n,onLoadMore:a,hasMore:i}){return jsxs("div",{className:cn$1("flex flex-col",o),children:[jsx("div",{className:"flex items-baseline justify-between px-3 py-2",children:jsxs("span",{className:"text-xs font-medium text-default-500",children:["Holdings",e&&jsxs("span",{className:"ml-2 text-[10px] text-default-400",children:["Net worth ",formatAmountUSDCompact(e.balanceInUsd)]})]})}),jsx("div",{className:"overflow-x-auto",children:jsxs("table",{className:"w-full min-w-[720px] table-fixed text-[12px]",children:[jsx("thead",{className:"text-default-400",children:jsxs("tr",{className:"border-b border-default-100",children:[jsx("th",{className:"w-[28%] px-3 py-2 text-left font-normal",children:"Token"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"Amount"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"Value"}),jsx("th",{className:"w-[14%] px-3 py-2 text-right font-normal",children:"Avg cost"}),jsx("th",{className:"w-[16%] px-3 py-2 text-left font-normal",children:"Tags"}),jsx("th",{className:"w-[12%] px-3 py-2 text-right font-normal",children:"Last active"})]})}),jsxs("tbody",{children:[(!e||e.portfolios.length===0)&&!t&&jsx("tr",{children:jsx("td",{colSpan:6,className:"py-8 text-center text-default-400",children:"No holdings"})}),e?.portfolios.map(s=>jsx(_n,{portfolio:s,now:r,onRowClick:n},`${s.chain}-${s.address}`)),t&&jsx("tr",{children:jsx("td",{colSpan:6,className:"py-4 text-center text-default-400",children:"Loading\u2026"})})]})]})}),i&&jsx("div",{className:"flex justify-center px-3 py-2",children:jsx("button",{type:"button",onClick:a,disabled:t,className:"rounded bg-default-100 px-3 py-1 text-[11px] text-default-600 transition-colors hover:bg-default-200 disabled:opacity-50",children:"Load more"})})]})}function _n({portfolio:e,now:t,onRowClick:o}){return jsxs("tr",{className:cn$1("border-b border-default-50 hover:bg-default-50/60",o&&"cursor-pointer"),onClick:o?()=>o(e):void 0,children:[jsx("td",{className:"px-3 py-2 align-middle",children:jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-foreground",children:e.symbol}),jsx("span",{className:"font-mono text-[10px] text-default-400",children:me(e.address,6,6)})]})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-500",children:formatAmount(e.amount)}),jsx("td",{className:"px-3 py-2 text-right align-middle text-foreground",children:formatAmountUSDCompact(e.amountInUsd)}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.avgCostUsd?formatPriceUSD(e.avgCostUsd):"--"}),jsx("td",{className:"px-3 py-2 align-middle",children:jsx(We,{tags:e.walletTokenTags,max:2})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.lastActiveAt?de(e.lastActiveAt,t):"--"})]})}function So({chain:e,address:t,limit:o=50}){let[r,n]=useState(void 0),[a,i]=useState([]);useEffect(()=>{i([]),n(void 0);},[e,t]);let{data:s,isPending:l,isFetching:p}=useWalletPortfoliosQuery({chain:e,address:t,cursor:r,limit:o});useEffect(()=>{s&&i(v=>r==null?[s]:v[v.length-1]?.endCursor===s.endCursor?v:[...v,s]);},[s,r]);let c=useMemo(()=>a.length===0?void 0:{...a[0],portfolios:a.flatMap(u=>u.portfolios)},[a]),d=a[a.length-1],m=!!(d?.hasNext&&d.endCursor),f=useCallback(()=>{!d?.endCursor||!d.hasNext||n(d.endCursor);},[d]);return {data:c,isLoading:l||p,hasMore:m,loadMore:f}}function bp({chain:e,address:t,limit:o,className:r,onRowClick:n}){let{data:a,isLoading:i,hasMore:s,loadMore:l}=So({chain:e,address:t,limit:o});return jsx(ho,{data:a,isLoading:i,className:r,hasMore:s,onLoadMore:l,onRowClick:n})}var zn=[{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"90d",label:"90D"}],Yn=[{value:"open",label:"Open"},{value:"closed",label:"Closed"},{value:"all",label:"All"}],Gn=[{value:"totalPnl",label:"Total"},{value:"realizedPnl",label:"Realized"},{value:"unrealizedPnl",label:"Unrealized"}];function To({data:e,isLoading:t,resolution:o,onResolutionChange:r,positionState:n,onPositionStateChange:a,sortBy:i,onSortByChange:s,hasMore:l,onLoadMore:p,now:c=Date.now(),className:d,onRowClick:m}){return jsxs("div",{className:cn$1("flex flex-col gap-2",d),children:[jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 px-3 py-2",children:[jsx(wt,{label:"Window",options:zn,value:o,onChange:r}),jsx(wt,{label:"Status",options:Yn,value:n,onChange:a}),jsx(wt,{label:"Sort",options:Gn,value:i,onChange:s})]}),e&&jsx(jn,{data:e}),jsx("div",{className:"overflow-x-auto",children:jsxs("table",{className:"w-full min-w-[780px] table-fixed text-[12px]",children:[jsx("thead",{className:"text-default-400",children:jsxs("tr",{className:"border-b border-default-100",children:[jsx("th",{className:"w-[22%] px-3 py-2 text-left font-normal",children:"Token"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Holding"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Total PnL"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Realized"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Unrealized"}),jsx("th",{className:"w-[8%] px-3 py-2 text-right font-normal",children:"State"}),jsx("th",{className:"w-[9%] px-3 py-2 text-right font-normal",children:"First buy"}),jsx("th",{className:"w-[9%] px-3 py-2 text-right font-normal",children:"Last sell"})]})}),jsxs("tbody",{children:[(!e||e.portfolios.length===0)&&!t&&jsx("tr",{children:jsx("td",{colSpan:8,className:"py-8 text-center text-default-400",children:"No positions"})}),e?.portfolios.map(f=>jsx(Xn,{pnl:f,now:c,onRowClick:m},`${f.chain}-${f.address}`)),t&&jsx("tr",{children:jsx("td",{colSpan:8,className:"py-4 text-center text-default-400",children:"Loading\u2026"})})]})]})}),l&&jsx("div",{className:"flex justify-center px-3 py-2",children:jsx("button",{type:"button",onClick:p,disabled:t,className:"rounded bg-default-100 px-3 py-1 text-[11px] text-default-600 transition-colors hover:bg-default-200 disabled:opacity-50",children:"Load more"})})]})}function wt({label:e,options:t,value:o,onChange:r}){return jsxs("div",{className:"flex items-center gap-2",children:[jsx("span",{className:"text-[10px] uppercase tracking-wide text-default-400",children:e}),jsx("div",{className:"flex items-center gap-1",children:t.map(n=>jsx("button",{type:"button",onClick:()=>r(n.value),className:cn$1("rounded px-2 py-1 text-[11px] transition-colors",o===n.value?"bg-default-100 text-foreground":"text-default-400 hover:text-foreground"),children:n.label},n.value))})]})}function jn({data:e}){let t=e.totalProfitInUsd,o=e.totalProfitRatio,r=e.winRate;return jsxs("div",{className:"mx-3 flex flex-wrap items-center gap-x-6 gap-y-2 rounded border border-default-100 bg-default-50 px-4 py-2 text-xs",children:[jsx(Me,{label:"Total PnL",value:t?formatAmountUSDCompact(t,{showPlusGtThanZero:true}):"--",tone:t?Ao(t):void 0}),jsx(Me,{label:"Return",value:o?formatPercent(o,{showPlusGtThanZero:true}):"--",tone:o?Ao(o):void 0}),jsx(Me,{label:"Win rate",value:r?formatPercent(r):"--"}),jsx(Me,{label:"Trades",value:e.totalTrades!=null?e.totalTrades.toString():"--"})]})}function Ao(e){let t=new SafeBigNumber(e);if(t.gt(0))return "bullish";if(t.lt(0))return "bearish"}function Me({label:e,value:t,tone:o}){return jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"text-[10px] uppercase tracking-wide text-default-400",children:e}),jsx("span",{className:cn$1("text-sm font-medium",o==="bullish"?"text-bullish":o==="bearish"?"text-bearish":"text-foreground"),children:t})]})}function Tt({value:e}){if(!e)return jsx("span",{className:"text-default-400",children:"--"});let t=new SafeBigNumber(e),o=t.gt(0)?"text-bullish":t.lt(0)?"text-bearish":"text-default-500";return jsx("span",{className:o,children:formatAmountUSDCompact(e,{showPlusGtThanZero:true})})}function Xn({pnl:e,now:t,onRowClick:o}){return jsxs("tr",{className:cn$1("border-b border-default-50 hover:bg-default-50/60",o&&"cursor-pointer"),onClick:o?()=>o(e):void 0,children:[jsx("td",{className:"px-3 py-2 align-middle",children:jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-foreground",children:e.symbol}),jsx("span",{className:"font-mono text-[10px] text-default-400",children:me(e.address,6,6)})]})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-foreground",children:formatAmountUSDCompact(e.amountInUsd)}),jsx("td",{className:"px-3 py-2 text-right align-middle",children:jsx(Tt,{value:e.totalProfitInUsd})}),jsx("td",{className:"px-3 py-2 text-right align-middle",children:jsx(Tt,{value:e.realizedProfitInUsd})}),jsx("td",{className:"px-3 py-2 text-right align-middle",children:jsx(Tt,{value:e.unrealizedProfitInUsd})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-[10px]",children:jsx("span",{className:cn$1("rounded px-1.5 py-0.5",e.isClosed?"bg-default/20 text-default-500":"bg-bullish/15 text-bullish"),children:e.isClosed?"Closed":"Open"})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.firstBuyAt?de(e.firstBuyAt,t):"--"}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.lastSellAt?de(e.lastSellAt,t):"--"})]})}function Io({chain:e,address:t,limit:o=50,initialResolution:r="30d",initialPositionState:n="open",initialSortBy:a="totalPnl"}){let[i,s]=useState(r),[l,p]=useState(n),[c,d]=useState(a),[m,f]=useState(void 0),[v,u]=useState([]),x=useCallback(()=>{f(void 0),u([]);},[]),g=useCallback(C=>{C!==i&&(s(C),x());},[i,x]),w=useCallback(C=>{C!==l&&(p(C),x());},[l,x]),S=useCallback(C=>{C!==c&&(d(C),x());},[c,x]);useEffect(()=>{x();},[e,t,x]);let B=useMemo(()=>({chain:e,address:t,cursor:m,limit:o,resolution:i,positionState:l,sortBy:c}),[e,t,m,o,i,l,c]),{data:O,isPending:E,isFetching:V}=useWalletPortfolioPnlsQuery(B);useEffect(()=>{O&&u(C=>m==null?[O]:C[C.length-1]?.endCursor===O.endCursor?C:[...C,O]);},[O,m]);let W=useMemo(()=>v.length===0?void 0:{...v[0],portfolios:v.flatMap(Q=>Q.portfolios)},[v]),U=v[v.length-1],ce=!!(U?.hasNext&&U.endCursor),J=useCallback(()=>{!U?.endCursor||!U.hasNext||f(U.endCursor);},[U]);return {data:W,isLoading:E||V,resolution:i,setResolution:g,positionState:l,setPositionState:w,sortBy:c,setSortBy:S,hasMore:ce,loadMore:J}}function Hp({chain:e,address:t,limit:o,initialResolution:r,initialPositionState:n,initialSortBy:a,className:i,onRowClick:s}){let{data:l,isLoading:p,resolution:c,setResolution:d,positionState:m,setPositionState:f,sortBy:v,setSortBy:u,hasMore:x,loadMore:g}=Io({chain:e,address:t,limit:o,initialResolution:r,initialPositionState:n,initialSortBy:a});return jsx(To,{data:l,isLoading:p,resolution:c,onResolutionChange:d,positionState:m,onPositionStateChange:f,sortBy:v,onSortByChange:u,hasMore:x,onLoadMore:g,className:i,onRowClick:s})}function es({client:e,children:t}){return jsx(xe.Provider,{value:e,children:t})}var as=15e3;function ls(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Ro({chain:e,address:t,enabled:o=true,summaryPollMs:r=as}){let{setSummary:n,setSummaryStatus:a,setRefetchSummary:i}=useContext(De),s=useWalletPortfoliosQuery({chain:e,address:t},{enabled:o,refetchInterval:r}),l=useWalletPnlQuery({chain:e,address:t},{enabled:o,refetchInterval:r});useEffect(()=>{n(null);},[e,t,n]),useEffect(()=>{let c=s.isPending||l.isPending,d=s.isFetching||l.isFetching,m=s.isError||l.isError,f=s.isSuccess&&l.isSuccess;a({status:m?"error":f?"success":"pending",fetchStatus:d?"fetching":"idle",isLoading:c&&d,isPending:c,isFetching:d,isRefetching:f&&d,isError:m,isSuccess:f,error:s.error??l.error,dataUpdatedAt:Math.max(s.dataUpdatedAt,l.dataUpdatedAt)});},[s.isPending,s.isFetching,s.isError,s.isSuccess,s.error,s.dataUpdatedAt,l.isPending,l.isFetching,l.isError,l.isSuccess,l.error,l.dataUpdatedAt,a]),useEffect(()=>{let c=s.data,d=l.data;!c||!d||n({...d,balanceInUsd:c.balanceInUsd,balanceInNative:c.balanceInNative});},[s.data,l.data,n]),useWalletPnlSubscription({chain:e,address:t},c=>{n(d=>{if(!d)return d;let m=d;for(let f of c)m={...m,...ls(f)};return m});},{enabled:o});let p=useCallback(async()=>{await Promise.all([s.refetch(),l.refetch()]);},[s,l]);useEffect(()=>{i(p);},[p,i]);}function ds({chain:e,address:t,children:o}){let[r,n]=useState(null),[a,i]=useState(us),s=useRef(()=>Promise.resolve()),l=useCallback(()=>s.current(),[]),p=useCallback(m=>{s.current=m;},[]),c=useMemo(()=>({summary:r,summaryStatus:a,refetchSummary:l}),[r,a,l]),d=useMemo(()=>({setSummary:n,setSummaryStatus:i,setRefetchSummary:p}),[n,i,p]);return jsx(De.Provider,{value:d,children:jsx(ge.Provider,{value:c,children:jsx(cs,{chain:e,address:t,children:o})})})}function cs({chain:e,address:t,children:o}){return Ro({chain:e,address:t,enabled:!!t}),jsx(Fragment,{children:o})}var us={status:"pending",fetchStatus:"idle",isLoading:false,isPending:true,isFetching:false,isRefetching:false,isError:false,isSuccess:false,error:null,dataUpdatedAt:0};
|
|
2
|
-
export{Ye as AccountInfoUI,
|
|
1
|
+
import {createContext,useContext,useMemo,useCallback,useState,useRef,useEffect}from'react';import {useCurrentChain}from'@liberfi.io/ui-chain-select';import {getNativeToken,formatAmountUSD,formatAmount,formatAmountUSDCompact,formatPriceUSD,formatPercent,SafeBigNumber}from'@liberfi.io/utils';import {useAuth,useConnectedWallet}from'@liberfi.io/wallet-connector';import {useTranslation}from'@liberfi.io/i18n';import {useScreen,useDisclosure,useCopyToClipboard,toast,Button,SignInIcon,StyledPopover,PopoverTrigger,TokenIcon,ChevronDownIcon,cn as cn$1,WalletIcon,PopoverContent,StyledTooltip,CopyIcon,Divider,SignOutIcon,Skeleton}from'@liberfi.io/ui';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {ResponsiveContainer,AreaChart,XAxis,YAxis,ReferenceLine,Area,PieChart,Pie,Cell}from'recharts';import {useQuery}from'@tanstack/react-query';import {useWalletPortfoliosByTokensQuery,useWalletPortfolioPnlsByTokensQuery,useWalletPortfoliosSubscription,useWalletPortfolioPnlsSubscription,useWalletActivitiesQuery,useWalletActivitiesSubscription,useWalletPortfoliosQuery,useWalletPortfolioPnlsQuery,useWalletPnlQuery,useWalletPnlSubscription}from'@liberfi.io/react';var xe=createContext(null);var ge=createContext({}),Re=createContext({});function ye(){let e=useContext(ge);if(!e)throw new Error("usePortfolioContext must be used within a PortfolioProvider");return e}function $e(){let{summary:e,summaryStatus:t}=ye();return {data:e,...t}}function ze(){let{status:e,signIn:t,signOut:o}=useAuth(),{data:r}=$e(),{chain:n,chainNamespace:a}=useCurrentChain(),i=useConnectedWallet(n),s=useMemo(()=>getNativeToken(n),[n]),l=useMemo(()=>r?.balanceInUsd?formatAmountUSD(r.balanceInUsd):"--",[r?.balanceInUsd]),p=useMemo(()=>r?.balanceInNative?formatAmount(r.balanceInNative):"--",[r?.balanceInNative]);return {status:e,signIn:t,signOut:o,balanceUsdFormatted:l,balanceNativeFormatted:p,nativeToken:s,chainNamespace:a,walletAddress:i?.address??""}}function Ye({status:e,signIn:t,signOut:o,balanceUsdFormatted:r,balanceNativeFormatted:n,nativeToken:a,chainNamespace:i,walletAddress:s,actions:l}){let{t:p}=useTranslation(),{isMobile:c}=useScreen(),{isOpen:d,onClose:m,onOpenChange:f}=useDisclosure(),v=useCopyToClipboard(),u=useCallback(()=>{v(s,()=>toast.success(p("common.primaryAddressCopied",{network:i.toUpperCase()})));},[v,i,s]);return e==="unauthenticated"?jsx(Button,{isIconOnly:c,size:"sm",color:"primary",radius:"full",disableRipple:true,onPress:t,startContent:c?void 0:jsx(SignInIcon,{width:16,height:16}),"aria-label":p("common.signIn"),children:c?jsx(SignInIcon,{width:16,height:16}):p("common.signIn")}):e==="authenticating"?jsx(Button,{isIconOnly:c,size:"sm",color:"primary",radius:"full",disableRipple:true,isLoading:true,isDisabled:true,"aria-label":p("common.signingIn"),children:p("common.signingIn")}):e==="deauthenticating"?jsx(Button,{isIconOnly:c,size:"sm",color:"primary",radius:"full",disableRipple:true,isLoading:true,isDisabled:true,"aria-label":p("common.signingOut"),children:p("common.signingOut")}):jsxs(StyledPopover,{placement:c?"bottom":"bottom-end",isOpen:d,onOpenChange:f,triggerScaleOnOpen:false,children:[jsx(PopoverTrigger,{children:jsx(Button,{size:"sm",className:"bg-content2",radius:"full",disableRipple:true,startContent:jsx(WalletIcon,{width:16,height:16,className:"text-neutral"}),endContent:jsx(ChevronDownIcon,{width:16,height:16,className:cn$1("text-neutral transition-transform",d&&"rotate-180")}),children:a&&jsxs("div",{className:"flex items-center gap-1.5",children:[jsx(TokenIcon,{symbol:a.symbol,size:16}),jsx("span",{className:"text-xs text-foreground",children:c?n:`${n} ${a.symbol}`})]})})}),jsx(PopoverContent,{children:jsxs("div",{className:"w-70 flex flex-col gap-3 py-4",children:[jsxs("div",{className:"px-4 flex items-start justify-between",children:[jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-xs text-neutral",children:p("common.totalValue")}),jsx("span",{className:"text-base font-semibold text-foreground",children:r})]}),jsx("div",{className:"flex items-start justify-end gap-0.5",children:jsx(StyledTooltip,{content:p("common.copyPrimaryAddress",{network:i.toUpperCase()}),children:jsx(Button,{className:"text-xs bg-transparent text-neutral hover:text-foreground h-4 min-h-4 gap-1",startContent:jsx(CopyIcon,{width:14,height:14}),disableRipple:true,disableAnimation:true,onPress:u,children:i.toUpperCase()})})})]}),jsx(Divider,{}),jsxs("div",{className:"grid grid-cols-4 gap-2 px-4",children:[l?.map(x=>jsxs("button",{type:"button",className:"flex cursor-pointer flex-col items-center justify-center gap-1 rounded-md py-2 text-foreground transition-colors hover:text-primary",onClick:()=>{x.onPress(),m();},children:[x.icon,jsx("span",{className:"w-full truncate text-center text-xs",children:x.label})]},x.key)),jsxs("button",{type:"button",className:"flex cursor-pointer flex-col items-center justify-center gap-1 rounded-md py-2 text-danger transition-colors hover:text-danger/80",onClick:()=>{o(),m();},children:[jsx(SignOutIcon,{width:16,height:16}),jsx("span",{className:"w-full truncate text-center text-xs",children:p("common.signOut")})]})]})]})})]})}function ir({actions:e}){let t=ze();return jsx(Ye,{status:t.status,signIn:t.signIn,signOut:t.signOut,balanceUsdFormatted:t.balanceUsdFormatted,balanceNativeFormatted:t.balanceNativeFormatted,nativeToken:t.nativeToken,chainNamespace:t.chainNamespace,walletAddress:t.walletAddress,actions:e})}function Ks(e){if(!e)return 0;let t=Number(e);return Number.isFinite(t)?t:0}function D(e){let t=Math.abs(e),o=e<0?"-":"";return t>=1e6?`${o}$${(t/1e6).toFixed(1)}M`:t>=1e4?`${o}$${(t/1e3).toFixed(1)}K`:t>=1?`${o}$${t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`:t>=.01?`${o}$${t.toFixed(2)}`:t>0?`${o}<$0.01`:"$0.00"}function Pe(e){let t=D(Math.abs(e));return e>0?`+${t}`:e<0?`-${t.replace("-","")}`:t}function Rt(e){return `${e>0?"+":""}${e.toFixed(2)}%`}function It(e){let o=Math.abs(e).toFixed(2).split("."),r=Number(o[0]).toLocaleString("en-US"),n=`.${o[1]}`;return {sign:e<0?"-$":"$",integer:r,decimal:n}}function ue(e,t=4,o=4){return e.length<=t+o+3?e:`${e.slice(0,t)}\u2026${e.slice(-o)}`}function Ge(e){return e===0?"0":e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?e.toLocaleString("en-US",{maximumFractionDigits:2}):e>=1?e.toFixed(2):e>=1e-4?e.toFixed(4):"<0.0001"}function Bt(e,t){return `https://solscan.io/tx/${e}`}var Ut=["#C8FF00","#00E676","#0066FF","#FF6B9D","#8B7BFF","#FF5252","#FFB74D","#4DD0E1"],lr="#3A3A4E";function Ht(e){let t=e.reduce((i,s)=>i+s.value,0);if(t<=0)return {items:[]};let o=[...e].sort((i,s)=>s.value-i.value),r=[],n=0,a=0;for(let i of o){let s=i.value/t*100;s<2?n+=i.value:(r.push({name:i.name,symbol:i.symbol,percent:s,value:i.value,color:Ut[a%Ut.length]}),a++);}return n>0&&r.push({name:"Other",symbol:"OTHER",percent:n/t*100,value:n,color:lr}),{items:r}}function Ot(e){return new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:false})}function je({walletId:e,wallets:t,isViewing:o,viewingAddress:r,onSelectWallet:n,onCopyAddress:a,onSearch:i}){let[s,l]=useState(false),[p,c]=useState(""),d=useRef(null),m=!e&&!o,f=t.find(S=>S.id===e),v=o?"External":m?"All Wallets":f?.name??"",u=o?ue(r??""):m?"Aggregated":ue(f?.address??""),x=o?"bg-[#5C5C72]":m?"bg-[#C8FF00]":"bg-[#00E676]",g=useCallback(()=>{let S=p.trim();S.length>=32&&(i(S),c(""));},[p,i]),w=useCallback(S=>{S.key==="Enter"&&g();},[g]);return jsxs("div",{className:"flex items-center justify-between gap-4 pb-4",children:[jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[jsxs("div",{className:"relative",ref:d,children:[jsxs("button",{type:"button",className:cn$1("flex items-center gap-2 rounded-lg border px-2.5 py-1.5 transition-colors",o?"border-[rgba(200,255,0,0.2)] bg-[rgba(200,255,0,0.04)]":"border-[#252530] bg-[#16161E] hover:border-[#35354A] hover:bg-[#1C1C26]",o&&"pointer-events-none"),onClick:()=>!o&&l(S=>!S),children:[jsx("span",{className:cn$1("h-[7px] w-[7px] flex-shrink-0 rounded-full",x)}),jsx("span",{className:"text-[11px] font-medium text-[#A0A0B8]",children:v}),jsx("span",{className:"font-mono text-xs text-foreground",children:u}),!o&&jsx("svg",{className:cn$1("text-[#5C5C72] transition-transform",s&&"rotate-180"),width:"10",height:"10",viewBox:"0 0 12 12",fill:"none",children:jsx("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})]}),s&&jsxs(Fragment,{children:[jsx("div",{className:"fixed inset-0 z-40",onClick:()=>l(false)}),jsxs("div",{className:"absolute left-0 top-[calc(100%+4px)] z-50 min-w-[260px] rounded-lg border border-[#252530] bg-[#16161E] p-1 shadow-[0_8px_32px_rgba(0,0,0,0.4)]",children:[jsxs("button",{type:"button",className:cn$1("flex w-full items-center gap-2 rounded-[5px] px-2.5 py-2 transition-colors hover:bg-[#1C1C26]",m&&"bg-[rgba(200,255,0,0.07)]"),onClick:()=>{n(void 0),l(false);},children:[jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-[#C8FF00]"}),jsx("span",{className:"min-w-[60px] text-[11px] font-medium text-[#A0A0B8]",children:"All Wallets"}),jsx("span",{className:"text-[11px] text-[#3A3A4E]",children:"Aggregated"})]}),t.map(S=>jsxs("button",{type:"button",className:cn$1("flex w-full items-center gap-2 rounded-[5px] px-2.5 py-2 transition-colors hover:bg-[#1C1C26]",e===S.id&&"bg-[rgba(200,255,0,0.07)]"),onClick:()=>{n(S.id),l(false);},children:[jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-[#00E676]"}),jsx("span",{className:"min-w-[60px] text-[11px] font-medium text-[#A0A0B8]",children:S.name}),jsx("span",{className:"font-mono text-[11px] text-[#5C5C72]",children:ue(S.address)}),jsx("span",{className:"ml-auto font-mono text-[11px] font-medium text-foreground",children:S.balance})]},S.id))]})]})]}),jsx("button",{type:"button",className:cn$1("rounded p-1 text-[#5C5C72] transition-colors hover:bg-[#1C1C26] hover:text-[#C8FF00]",m&&!o&&"pointer-events-none opacity-40"),onClick:a,disabled:m&&!o,children:jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:[jsx("rect",{x:"4.5",y:"4.5",width:"7",height:"7",rx:"1.5",stroke:"currentColor",strokeWidth:"1.2"}),jsx("path",{d:"M9.5 4.5V3a1.5 1.5 0 0 0-1.5-1.5H3A1.5 1.5 0 0 0 1.5 3v5A1.5 1.5 0 0 0 3 9.5h1.5",stroke:"currentColor",strokeWidth:"1.2"})]})}),jsx("span",{className:cn$1("flex-shrink-0 rounded-[3px] px-1.5 py-[3px] text-[9px] font-semibold uppercase tracking-wider",o?"bg-[rgba(200,255,0,0.07)] text-[#C8FF00] animate-[pulse-glow_2s_ease-in-out_infinite]":"bg-[rgba(0,230,118,0.1)] text-[#00E676]"),children:o?"Viewing":"Owner"})]}),jsxs("div",{className:"flex flex-shrink-0 items-center gap-1.5",children:[jsxs("div",{className:"flex h-[34px] w-[240px] items-center gap-1.5 rounded-lg border border-[#252530] bg-[#16161E] px-2.5 transition-all focus-within:w-[300px] focus-within:border-[#C8FF00]",children:[jsxs("svg",{className:"flex-shrink-0 text-[#5C5C72]",width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",children:[jsx("circle",{cx:"7",cy:"7",r:"5.5",stroke:"currentColor",strokeWidth:"1.5"}),jsx("path",{d:"M11 11L14.5 14.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),jsx("input",{className:"flex-1 border-none bg-transparent font-mono text-xs text-foreground caret-[#C8FF00] outline-none placeholder:font-sans placeholder:text-[11px] placeholder:text-[#5C5C72]",placeholder:"Search wallet address\u2026",spellCheck:false,value:p,onChange:S=>c(S.target.value),onKeyDown:w})]}),jsx("button",{type:"button",className:"whitespace-nowrap rounded-[5px] border border-[#252530] bg-[#1C1C26] px-3 py-1.5 text-[11px] font-medium text-[#A0A0B8] transition-colors hover:border-[#C8FF00] hover:bg-[#C8FF00] hover:text-black",onClick:g,children:"View"})]})]})}var he=(r=>(r.SPOT="spot",r.PERPS="perps",r.PREDICTION="prediction",r))(he||{}),Xe=(o=>(o.NET_WORTH="networth",o.PNL="pnl",o))(Xe||{}),Ze=(n=>(n.ONE_DAY="1D",n.SEVEN_DAY="7D",n.THIRTY_DAY="30D",n.MAX="Max",n))(Ze||{}),Wt={"1D":1,"7D":7,"30D":30,Max:365},Lt=(o=>(o.LONG="long",o.SHORT="short",o))(Lt||{}),Mt=(r=>(r.SWAP="swap",r.SEND="send",r.RECEIVE="receive",r))(Mt||{}),Vt=(o=>(o.ACTIVE="active",o.PENDING="pending",o))(Vt||{}),_t=(o=>(o.WON="won",o.LOST="lost",o))(_t||{}),Kt=(r=>(r.POLYMARKET="polymarket",r.DRIFT="drift",r.METADAO="metadao",r))(Kt||{});var ur=[{key:"spot",label:"Spot"},{key:"perps",label:"Perps"},{key:"prediction",label:"Prediction"}];function fr(e,t,o,r){switch(e){case "spot":return t;case "perps":return o;case "prediction":return r}}function Je({activeTab:e,onTabChange:t,spotValue:o=0,perpsValue:r=0,predictionValue:n=0}){return jsx("div",{className:"flex gap-1 border-b border-[#252530] pb-0 pt-5",children:ur.map(({key:a,label:i})=>{let s=e===a,l=fr(a,o,r,n);return jsxs("button",{type:"button",className:cn$1("relative flex items-center gap-2 border-b-2 px-4 pb-3 pt-2.5 text-[13px] font-medium transition-colors",s?"border-[#C8FF00] text-foreground":"border-transparent text-[#5C5C72] hover:text-[#A0A0B8]"),onClick:()=>t(a),children:[i,!s&&jsx("span",{className:"rounded-[10px] bg-[#16161E] px-2 py-0.5 font-mono text-[11px] text-[#5C5C72]",children:D(l)})]},a)})})}function tt({overview:e}){let t=e?.totalValue??0,o=e?.uPnl??0,r=e?.realizedPnl??0,n=e?.totalProfit??0,{sign:a,integer:i,decimal:s}=It(t);return jsxs("div",{className:"flex items-center gap-4 pb-4",children:[jsx("div",{className:"flex items-baseline gap-3",children:jsxs("div",{className:"font-mono text-[26px] font-bold leading-none tracking-tight",children:[jsx("span",{className:"mr-px text-lg font-medium text-[#C8FF00]",children:a}),i,jsx("span",{className:"text-base font-normal text-[#5C5C72]",children:s})]})}),jsxs("div",{className:"ml-auto flex items-center gap-3",children:[jsx(et,{label:"uPNL",value:o}),jsx(qt,{}),jsx(et,{label:"Realized",value:r}),jsx(qt,{}),jsx(et,{label:"Total Profit",value:n})]})]})}function et({label:e,value:t}){return jsxs("div",{className:"flex items-center gap-1.5",children:[jsx("span",{className:"text-[11px] text-[#5C5C72]",children:e}),jsx("span",{className:cn$1("font-mono text-xs font-medium",t>0?"text-[#00E676]":t<0?"text-[#FF5252]":"text-[#5C5C72]"),children:Pe(t)})]})}function qt(){return jsx("div",{className:"h-3.5 w-px bg-[#252530]"})}var Cr=["1D","7D","30D","Max"];function zt(e,t){let o=new Date(e);return t==="1D"?o.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:false}):o.toLocaleDateString("en-US",{month:"short",day:"numeric"})}function Sr(e){return e==="pnl"?"change":"netWorth"}function rt({curveType:e,curvePeriod:t,data:o,isLoading:r,onTypeChange:n,onPeriodChange:a}){let i=o?.points??[],s=Sr(e),l=e==="pnl",p=useMemo(()=>i.map(u=>l?u.change:u.netWorth),[i,l]),c=p.some(u=>u<0),{minVal:d,maxVal:m}=useMemo(()=>{if(p.length===0)return {minVal:0,maxVal:100};let u=Math.min(...p),x=Math.max(...p),g=x-u||1;return {minVal:u-g*.1,maxVal:x+g*.1}},[p]),f=useMemo(()=>{if(i.length===0)return [];let u=Math.min(7,i.length),x=Math.max(1,Math.floor((i.length-1)/(u-1))),g=[];for(let S=0;S<i.length;S+=x)g.push({ts:i[S].timestamp,label:zt(i[S].timestamp,t)});let w=i[i.length-1];return g[g.length-1]?.ts!==w.timestamp&&g.push({ts:w.timestamp,label:zt(w.timestamp,t)}),g},[i,t]),v=p[p.length-1]??0;return jsxs("div",{className:"overflow-hidden rounded-lg border border-[#252530] bg-[#0F0F16]",children:[jsxs("div",{className:"flex items-center justify-between px-4 pt-3",children:[jsxs("div",{className:"flex gap-0.5 rounded-[5px] bg-[#16161E] p-0.5",children:[jsx(Yt,{label:"Net Worth",active:e==="networth",onClick:()=>n("networth")}),jsx(Yt,{label:"PNL",active:e==="pnl",onClick:()=>n("pnl")})]}),jsx("div",{className:"flex gap-0.5",children:Cr.map(u=>jsx("button",{type:"button",className:cn$1("rounded-[3px] px-2 py-1 text-[10px] font-medium transition-colors",t===u?"bg-[rgba(200,255,0,0.07)] text-[#C8FF00]":"text-[#5C5C72] hover:bg-[#16161E] hover:text-[#A0A0B8]"),onClick:()=>a(u),children:u},u))})]}),jsx("div",{className:"h-[180px] px-4 pt-2",children:r||i.length<2?jsx("div",{className:"flex h-full items-center justify-center",children:jsx("span",{className:"text-xs text-[#5C5C72]",children:r?"":"Not enough data"})}):jsx(ResponsiveContainer,{width:"100%",height:"100%",children:jsxs(AreaChart,{data:i,margin:{top:8,right:0,left:0,bottom:0},children:[jsxs("defs",{children:[jsxs("linearGradient",{id:"gradAccent",x1:"0",y1:"0",x2:"0",y2:"1",children:[jsx("stop",{offset:"0%",stopColor:"#C8FF00",stopOpacity:.12}),jsx("stop",{offset:"100%",stopColor:"#C8FF00",stopOpacity:0})]}),jsxs("linearGradient",{id:"gradGreen",x1:"0",y1:"0",x2:"0",y2:"1",children:[jsx("stop",{offset:"0%",stopColor:"#00E676",stopOpacity:.12}),jsx("stop",{offset:"100%",stopColor:"#00E676",stopOpacity:0})]}),jsxs("linearGradient",{id:"gradRed",x1:"0",y1:"0",x2:"0",y2:"1",children:[jsx("stop",{offset:"0%",stopColor:"#FF5252",stopOpacity:0}),jsx("stop",{offset:"100%",stopColor:"#FF5252",stopOpacity:.1})]})]}),jsx(XAxis,{dataKey:"timestamp",hide:true}),jsx(YAxis,{hide:true,domain:[d,m]}),l&&c&&jsx(ReferenceLine,{y:0,stroke:"rgba(255,255,255,0.06)",strokeDasharray:"4 4"}),jsx(Area,{type:"monotone",dataKey:s,stroke:l?v>=0?"#00E676":"#FF5252":"#C8FF00",strokeWidth:1.5,fill:l?v>=0?"url(#gradGreen)":"url(#gradRed)":"url(#gradAccent)",dot:false,isAnimationActive:false})]})})}),jsx("div",{className:"flex justify-between px-4 pb-2.5 pt-1",children:f.map(({ts:u,label:x})=>jsx("span",{className:"font-mono text-[9px] text-[#3A3A4E]",children:x},u))})]})}function Yt({label:e,active:t,onClick:o}){return jsx("button",{type:"button",className:cn$1("rounded px-2.5 py-1 text-[11px] font-medium transition-colors",t?"bg-[#1C1C26] text-foreground":"text-[#5C5C72] hover:text-[#A0A0B8]"),onClick:o,children:e})}function st({data:e,isLoading:t}){let o=e?.items??[],r=useMemo(()=>o.map(n=>({name:n.name,value:n.percent})),[o]);return jsxs("div",{className:"flex flex-col overflow-hidden rounded-lg border border-[#252530] bg-[#0F0F16]",children:[jsx("div",{className:"px-4 pb-2 pt-3",children:jsx("span",{className:"text-xs font-semibold text-[#A0A0B8]",children:"Distribution"})}),jsx("div",{className:"flex flex-1 items-center justify-center px-4",children:t||o.length===0?jsx("div",{className:"flex h-[140px] w-[140px] items-center justify-center",children:jsx("span",{className:"text-xs text-[#5C5C72]",children:t?"":"No data"})}):jsx(ResponsiveContainer,{width:140,height:140,children:jsx(PieChart,{children:jsx(Pie,{data:r,cx:"50%",cy:"50%",innerRadius:32,outerRadius:55,dataKey:"value",stroke:"none",isAnimationActive:false,children:o.map((n,a)=>jsx(Cell,{fill:n.color},a))})})})}),jsx("div",{className:"px-4 pb-3 pt-2",children:o.map((n,a)=>jsxs("div",{className:"flex items-center gap-1.5 py-[3px] text-[11px]",children:[jsx("span",{className:"h-[7px] w-[7px] flex-shrink-0 rounded-[2px]",style:{background:n.color}}),jsx("span",{className:"min-w-0 flex-1 truncate text-[#A0A0B8]",children:n.name}),jsxs("span",{className:"font-mono text-[10px] text-[#5C5C72]",children:[n.percent.toFixed(1),"%"]}),jsx("span",{className:"min-w-[55px] text-right font-mono text-[10px] text-foreground",children:D(n.value)})]},a))})]})}function H(){let e=useContext(xe);if(!e)throw new Error("usePortfolioClient must be used within a PortfolioClientProvider");return e}function jt(e){return ["portfolio","overview",e??{}]}async function Ur(e,t){return await e.getOverview(t)}function it(e,t={}){let o=H();return useQuery({queryKey:jt(e),queryFn:async()=>Ur(o,e),...t})}function Xt(e){return ["portfolio","spot","holdings",e??{}]}async function Ir(e,t){return await e.getSpotHoldings(t)}function ve(e,t={}){let o=H();return useQuery({queryKey:Xt(e),queryFn:async()=>Ir(o,e),...t})}function Zt(e){return ["portfolio","spot","history",e??{}]}async function Hr(e,t){return await e.getSpotHistory(t)}function at(e,t={}){let o=H();return useQuery({queryKey:Zt(e),queryFn:async()=>Hr(o,e),...t})}function Jt(e){return ["portfolio","perps","positions",e??{}]}async function Er(e,t){return await e.getPerpsPositions(t)}function lt(e,t={}){let o=H();return useQuery({queryKey:Jt(e),queryFn:async()=>Er(o,e),...t})}function eo(e){return ["portfolio","perps","history",e??{}]}async function Wr(e,t){return await e.getPerpsHistory(t)}function pt(e,t={}){let o=H();return useQuery({queryKey:eo(e),queryFn:async()=>Wr(o,e),...t})}function to(e){return ["portfolio","prediction","active",e??{}]}async function Mr(e,t){return await e.getPredictionBets(t)}function dt(e,t={}){let o=H();return useQuery({queryKey:to(e),queryFn:async()=>Mr(o,e),...t})}function oo(e){return ["portfolio","prediction","settled",e??{}]}async function _r(e,t){return await e.getPredictionSettled(t)}function ct(e,t={}){let o=H();return useQuery({queryKey:oo(e),queryFn:async()=>_r(o,e),...t})}function ro(e){return ["portfolio","chart",e]}async function $r(e,t){return await e.getChartData(t)}function ut(e,t={}){let o=H();return useQuery({queryKey:ro(e),queryFn:async()=>$r(o,e),...t})}function zr(){return ["portfolio","distribution"]}function ft(e){return {data:useMemo(()=>Ht(e),[e])}}function Yr(){let{refetchSummary:e}=ye();return e}var on=15e3;function so(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function rn({chain:e,address:t,tokenAddresses:o,pollMs:r=on}){let n=!!t&&o.length>0,[a,i]=useState({}),s=useWalletPortfoliosByTokensQuery({chain:e,address:t,tokenAddresses:o},{enabled:n,refetchInterval:r}),l=useWalletPortfolioPnlsByTokensQuery({chain:e,address:t,tokenAddresses:o},{enabled:n,refetchInterval:r});useEffect(()=>{let v=s.data??[],u=new Map;if(l.data)for(let g of l.data)u.set(g.address,g);let x={};for(let g of v)x[g.address]={...g,pnl:u.get(g.address)??null};i(x);},[s.data,l.data]);let p=useRef(""),c=useRef(new Set),d=o.slice().sort().join(",");d!==p.current&&(p.current=d,c.current=new Set(o));let m=c.current;useWalletPortfoliosSubscription({chain:e,address:t},v=>{i(u=>{let x=u;for(let g of v){if(!m.has(g.tokenAddress))continue;let w=x[g.tokenAddress];if(!w)continue;let{chain:S,walletAddress:B,tokenAddress:O,...E}=g,_=so(E);Object.keys(_).length!==0&&(x=x===u?{...u}:x,x[g.tokenAddress]={...w,..._});}return x});},{enabled:n}),useWalletPortfolioPnlsSubscription({chain:e,address:t},v=>{i(u=>{let x=u;for(let g of v){if(!m.has(g.tokenAddress))continue;let w=x[g.tokenAddress];if(!w||!w.pnl)continue;let{walletAddress:S,tokenAddress:B,...O}=g,E=so(O);Object.keys(E).length!==0&&(x=x===u?{...u}:x,x[g.tokenAddress]={...w,pnl:{...w.pnl,...E}});}return x});},{enabled:n});let f=useCallback(async()=>{await Promise.all([s.refetch(),l.refetch()]);},[s.refetch,l.refetch]);return {tokens:a,isPending:s.isPending,isFetching:s.isFetching||l.isFetching,isError:s.isError,isSuccess:s.isSuccess,error:s.error,refetch:f}}function xt(e){let{defaultTab:t="spot",walletAddresses:o,chain:r}=e??{},[n,a]=useState(t),[i,s]=useState(void 0),[l,p]=useState(void 0),[c,d]=useState("networth"),[m,f]=useState("7D"),v=l!==void 0,u=useMemo(()=>{if(l)return {walletAddresses:[l],chain:r};if(o?.length)return {walletAddresses:o,chain:r}},[o,l,r]),x=it(u),g=ve(u),w=ut({period:Wt[m],...u}),S=ft(g.data?.holdings??[]),B=useMemo(()=>g.data?.holdings.reduce((W,I)=>W+I.value,0)??0,[g.data]),O=useCallback(W=>{p(W);},[]),E=useCallback(()=>{p(void 0);},[]),_=useCallback(W=>{s(W);},[]);return {activeTab:n,setActiveTab:a,walletId:i,selectWallet:_,viewingAddress:l,isViewing:v,curveType:c,setCurveType:d,curvePeriod:m,setCurvePeriod:f,portfolioQuery:u,overviewQuery:x,curveQuery:w,distributionQuery:S,spotHoldingsQuery:g,spotValue:B,perpsValue:0,predictionValue:0,enterViewing:O,exitViewing:E}}function gt(){return jsxs("div",{className:"mx-auto max-w-[1280px] px-6",children:[jsxs("div",{className:"flex gap-4 border-b border-[#252530] pb-0 pt-5",children:[jsx(Skeleton,{className:"h-9 w-16 rounded-md"}),jsx(Skeleton,{className:"h-9 w-28 rounded-md"}),jsx(Skeleton,{className:"h-9 w-32 rounded-md"})]}),jsxs("div",{className:"flex items-center justify-between gap-4 py-4",children:[jsxs("div",{className:"flex items-center gap-2.5",children:[jsx(Skeleton,{className:"h-8 w-48 rounded-lg"}),jsx(Skeleton,{className:"h-6 w-6 rounded"}),jsx(Skeleton,{className:"h-5 w-14 rounded-[3px]"})]}),jsxs("div",{className:"flex items-center gap-1.5",children:[jsx(Skeleton,{className:"h-[34px] w-[240px] rounded-lg"}),jsx(Skeleton,{className:"h-[34px] w-12 rounded-[5px]"})]})]}),jsxs("div",{className:"flex items-center gap-4 pb-4",children:[jsxs("div",{className:"flex items-baseline gap-3",children:[jsx(Skeleton,{className:"h-8 w-48 rounded-md"}),jsx(Skeleton,{className:"h-6 w-16 rounded"})]}),jsxs("div",{className:"ml-auto flex items-center gap-3",children:[jsx(Skeleton,{className:"h-4 w-28 rounded"}),jsx("div",{className:"h-3.5 w-px bg-[#252530]"}),jsx(Skeleton,{className:"h-4 w-28 rounded"}),jsx("div",{className:"h-3.5 w-px bg-[#252530]"}),jsx(Skeleton,{className:"h-4 w-20 rounded"})]})]}),jsxs("div",{className:"grid grid-cols-[1fr_340px] gap-3 pb-4",children:[jsxs("div",{className:"rounded-lg border border-[#252530] bg-[#0F0F16] p-4",children:[jsxs("div",{className:"flex items-center justify-between pb-4",children:[jsx(Skeleton,{className:"h-7 w-40 rounded-[5px]"}),jsx(Skeleton,{className:"h-6 w-32 rounded"})]}),jsx(Skeleton,{className:"h-[180px] w-full rounded-md"}),jsx("div",{className:"mt-2 flex justify-between",children:Array.from({length:7}).map((e,t)=>jsx(Skeleton,{className:"h-3 w-8 rounded"},t))})]}),jsxs("div",{className:"rounded-lg border border-[#252530] bg-[#0F0F16] p-4",children:[jsx(Skeleton,{className:"mb-3 h-4 w-24 rounded"}),jsx("div",{className:"flex items-center justify-center py-4",children:jsx(Skeleton,{className:"h-[140px] w-[140px] rounded-full"})}),jsx("div",{className:"space-y-1.5 pt-2",children:Array.from({length:5}).map((e,t)=>jsx(Skeleton,{className:"h-4 w-full rounded"},t))})]})]}),jsxs("div",{className:"pb-6",children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsx(Skeleton,{className:"h-8 w-40 rounded-[5px]"}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(Skeleton,{className:"h-7 w-40 rounded-[5px]"}),jsx(Skeleton,{className:"h-7 w-24 rounded-[5px]"})]})]}),jsx(Skeleton,{className:"mb-3 h-5 w-full rounded"}),Array.from({length:5}).map((e,t)=>jsx(Skeleton,{className:"mb-2 h-12 w-full rounded-[5px]"},t))]})]})}function yt({viewingAddress:e,onBack:t}){return jsxs("div",{className:"flex items-center justify-between border-b border-[rgba(200,255,0,0.12)] bg-[rgba(200,255,0,0.06)] px-6 py-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex h-[18px] w-[18px] items-center justify-center rounded-full border border-[rgba(200,255,0,0.25)] bg-[rgba(200,255,0,0.07)]",children:jsxs("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",children:[jsx("path",{d:"M8 3C4.36 3 1.26 5.28 0 8.5c1.26 3.22 4.36 5.5 8 5.5s6.74-2.28 8-5.5C14.74 5.28 11.64 3 8 3z",stroke:"#C8FF00",strokeWidth:"1.3",fill:"none"}),jsx("circle",{cx:"8",cy:"8.5",r:"2.5",stroke:"#C8FF00",strokeWidth:"1.3",fill:"none"})]})}),jsx("span",{className:"text-xs font-medium text-[#C8FF00]",children:"Viewing external portfolio"}),jsx("span",{className:"ml-1 font-mono text-[11px] text-[#A0A0B8]",children:ue(e)})]}),jsxs("button",{type:"button",className:"flex items-center gap-1.5 rounded-[5px] border border-[#252530] bg-[#1C1C26] px-3 py-1.5 text-[11px] font-medium text-[#A0A0B8] transition-colors hover:border-[#C8FF00] hover:bg-[#C8FF00] hover:text-black",onClick:t,children:[jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",children:jsx("path",{d:"M10 2L4 8l6 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"Back to My Portfolio"]})]})}function nn({wallets:e=[],onCopyAddress:t,renderHoldings:o,isLoading:r,...n}){let a=xt(n),{activeTab:i,setActiveTab:s,walletId:l,selectWallet:p,viewingAddress:c,isViewing:d,curveType:m,setCurveType:f,curvePeriod:v,setCurvePeriod:u,portfolioQuery:x,overviewQuery:g,curveQuery:w,distributionQuery:S,spotValue:B,perpsValue:O,predictionValue:E,enterViewing:_,exitViewing:W}=a;return r||g.isLoading&&!g.data?jsx(gt,{}):jsxs("div",{children:[d&&c&&jsx(yt,{viewingAddress:c,onBack:W}),jsxs("div",{className:"mx-auto max-w-[1280px] px-6",children:[jsx(Je,{activeTab:i,onTabChange:s,spotValue:B,perpsValue:O,predictionValue:E}),jsx(je,{walletId:l,wallets:e,isViewing:d,viewingAddress:c,onSelectWallet:p,onCopyAddress:()=>{if(d&&c)t?.(c);else {let J=e.find(C=>C.id===l);J&&t?.(J.address);}},onSearch:_}),jsx(tt,{overview:g.data}),jsxs("div",{className:"grid grid-cols-[1fr_340px] gap-3 pb-4",children:[jsx(rt,{curveType:m,curvePeriod:v,data:w.data,isLoading:w.isLoading,onTypeChange:f,onPeriodChange:u}),jsx(st,{data:S.data,isLoading:false})]}),o?.({activeTab:i,portfolioQuery:x,isViewing:d})]})]})}function He({open:e,title:t,message:o,confirmLabel:r,cancelLabel:n,onConfirm:a,onCancel:i}){return e?jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[jsx("div",{className:"absolute inset-0 bg-black/60",onClick:i,onKeyDown:s=>{s.key==="Escape"&&i();},role:"button",tabIndex:-1,"aria-label":"Close dialog"}),jsxs("div",{className:"relative z-10 w-full max-w-sm rounded-xl border border-[#252530] bg-[#12121A] p-6 shadow-2xl",children:[jsx("h3",{className:"text-sm font-semibold text-foreground",children:t}),jsx("p",{className:"mt-2 text-xs leading-relaxed text-[#A0A0B8]",children:o}),jsxs("div",{className:"mt-5 flex items-center justify-end gap-2",children:[jsx("button",{type:"button",className:"rounded-lg px-4 py-2 text-xs font-medium text-[#5C5C72] transition-colors hover:bg-[#1C1C26] hover:text-foreground",onClick:i,children:n}),jsx("button",{type:"button",className:cn$1("rounded-lg border px-4 py-2 text-xs font-medium transition-colors","border-[rgba(255,82,82,0.25)] text-[#FF5252]","hover:border-[#FF5252] hover:bg-[rgba(255,82,82,0.1)]"),onClick:a,children:r})]})]})]}):null}function vt({activeTab:e,portfolioQuery:t,isViewing:o}){let[r,n]=useState("holdings"),[a,i]=useState("positions"),[s,l]=useState("active"),[p,c]=useState(""),[d,m]=useState(""),[f,v]=useState(""),[u,x]=useState(false),[g,w]=useState(false),S=useCallback(()=>{w(Q=>!Q);},[]),B=ve(t,{enabled:e==="spot"}),O=at(t,{enabled:e==="spot"&&r==="history"}),E=lt(t,{enabled:e==="perps"}),_=pt(t,{enabled:e==="perps"&&a==="history"}),W=dt(t,{enabled:e==="prediction"}),I=ct(t,{enabled:e==="prediction"&&s==="settled"}),ce=useMemo(()=>(B.data?.holdings??[]).filter(Y=>{if(u&&Y.value<1&&!Y.verified)return false;if(p){let L=p.toLowerCase();return Y.name.toLowerCase().includes(L)||Y.symbol.toLowerCase().includes(L)}return true}),[B.data?.holdings,u,p]),J=useMemo(()=>{let Q=E.data?.positions??[];if(!d)return Q;let Y=d.toLowerCase();return Q.filter(L=>L.pair.toLowerCase().includes(Y))},[E.data?.positions,d]),C=useMemo(()=>{let Q=W.data?.bets??[];if(!f)return Q;let Y=f.toLowerCase();return Q.filter(L=>L.market.toLowerCase().includes(Y))},[W.data?.bets,f]);return {spotSubTab:r,setSpotSubTab:n,perpsSubTab:a,setPerpsSubTab:i,predictionSubTab:s,setPredictionSubTab:l,spotSearch:p,setSpotSearch:c,perpsSearch:d,setPerpsSearch:m,predictionSearch:f,setPredictionSearch:v,hideSmall:u,setHideSmall:x,groupCollapsed:g,toggleGroupCollapsed:S,spotHoldingsQuery:B,spotHistoryQuery:O,perpsPositionsQuery:E,perpsHistoryQuery:_,predictionBetsQuery:W,predictionSettledQuery:I,filteredSpotHoldings:ce,filteredPerpsPositions:J,filteredPredictionBets:C,isViewing:o}}function le({tabs:e,activeKey:t,onTabChange:o}){return jsx("div",{className:"flex gap-0.5",children:e.map(r=>jsx("button",{type:"button",className:cn$1("rounded-[5px] px-3 py-1.5 text-xs font-medium transition-colors",t===r.key?"bg-[#1C1C26] text-foreground":"text-[#5C5C72] hover:bg-[#16161E] hover:text-[#A0A0B8]"),onClick:()=>o(r.key),children:r.label},r.key))})}function pe({value:e,onChange:t,placeholder:o}){return jsxs("div",{className:"flex h-7 w-40 items-center gap-1 rounded-[5px] border border-[#252530] bg-[#16161E] px-2 transition-all focus-within:w-[200px] focus-within:border-[#C8FF00]",children:[jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",className:"flex-shrink-0 text-[#5C5C72]",children:[jsx("circle",{cx:"7",cy:"7",r:"5.5",stroke:"currentColor",strokeWidth:"1.5"}),jsx("path",{d:"M11 11L14.5 14.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]}),jsx("input",{type:"text",className:"flex-1 border-none bg-transparent font-mono text-[11px] text-foreground caret-[#C8FF00] outline-none placeholder:font-sans placeholder:text-[10px] placeholder:text-[#5C5C72]",placeholder:o,spellCheck:false,value:e,onChange:r=>t(r.target.value)})]})}function j({title:e,hint:t}){return jsxs("div",{className:"flex flex-col items-center justify-center py-16 text-center",children:[jsx("span",{className:"text-sm text-[#5C5C72]",children:e}),t&&jsx("span",{className:"mt-1 text-xs text-[#3A3A4E]",children:t})]})}function Ne({label:e,disabled:t,onClick:o}){return jsxs("button",{type:"button",className:cn$1("flex items-center gap-1 whitespace-nowrap rounded-[5px] border px-3 py-1.5 text-[11px] font-medium transition-colors",t?"pointer-events-none border-[#252530] text-[#3A3A4E]":"border-[rgba(255,82,82,0.25)] text-[#FF5252] hover:border-[#FF5252] hover:bg-[rgba(255,82,82,0.1)]"),onClick:o,disabled:t,children:[jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",children:jsx("path",{d:"M4 4l8 8M12 4l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})}),e]})}function Ct({state:e,onClosePosition:t,onCloseAll:o}){let{t:r}=useTranslation(),{perpsSubTab:n,setPerpsSubTab:a,perpsSearch:i,setPerpsSearch:s,filteredPerpsPositions:l,perpsHistoryQuery:p,isViewing:c}=e,d=l.length>0;return jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsxs("div",{className:"flex items-center gap-3",children:[jsx(le,{tabs:[{key:"positions",label:r("portfolio.perps.openPositions")},{key:"history",label:r("portfolio.perps.tradeHistory")}],activeKey:n,onTabChange:m=>a(m)}),n==="positions"&&!c&&jsx(Ne,{label:r("portfolio.perps.closeAll"),disabled:!d,onClick:()=>o?.()})]}),jsx(pe,{value:i,onChange:s,placeholder:r("portfolio.perps.search.placeholder")})]}),n==="positions"?jsx(ln,{positions:l,isViewing:c,onClose:t}):jsx(dn,{records:p.data?.records??[],isLoading:p.isLoading})]})}function ln({positions:e,isViewing:t,onClose:o}){let{t:r}=useTranslation();return e.length===0?jsx(j,{title:r("portfolio.perps.empty"),hint:r("portfolio.perps.empty.hint")}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:t?"2fr 1fr .8fr .8fr 1fr":"2fr 1fr .8fr .8fr 1fr 80px"},children:[jsx("span",{children:r("portfolio.perps.header.pair")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.size")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.entry")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.mark")}),jsx("span",{className:"text-right",children:r("portfolio.perps.header.uPnl")}),!t&&jsx("span",{className:"text-right"})]}),jsx("div",{className:"flex flex-col",children:e.map(n=>jsx(pn,{position:n,isViewing:t,onClose:o},n.id))})]})}function pn({position:e,isViewing:t,onClose:o}){let{t:r}=useTranslation(),n=e.side==="long",a=e.uPnl>=0;return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:t?"2fr 1fr .8fr .8fr 1fr":"2fr 1fr .8fr .8fr 1fr 80px"},children:[jsxs("div",{className:"flex items-center gap-2",children:[e.icon?jsx("img",{src:e.icon,alt:e.pair,className:"h-6 w-6 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[9px] font-bold text-[#5C5C72]",children:e.pair.slice(0,2)}),jsxs("div",{className:"flex items-center gap-1.5",children:[jsx("span",{className:"text-xs font-medium text-foreground",children:e.pair}),jsx("span",{className:cn$1("rounded px-1.5 py-0.5 text-[10px] font-medium",n?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(255,82,82,0.12)] text-[#FF5252]"),children:r(n?"perpetuals.positions.long":"perpetuals.positions.short")}),jsxs("span",{className:"rounded bg-[rgba(200,255,0,0.1)] px-1.5 py-0.5 text-[10px] font-medium text-[#C8FF00]",children:[e.leverage,"\xD7"]})]})]}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:D(e.size)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:D(e.entryPrice)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:D(e.markPrice)}),jsx("span",{className:cn$1("text-right font-mono text-xs",a?"text-[#00E676]":"text-[#FF5252]"),children:Pe(e.uPnl)}),!t&&jsx("div",{className:"flex justify-end",children:jsx("button",{type:"button",className:"rounded-[5px] border border-[#252530] px-2.5 py-1 text-[10px] font-medium text-[#5C5C72] transition-colors hover:border-[#FF5252] hover:text-[#FF5252]",onClick:()=>o?.(e),children:r("portfolio.perps.close")})})]})}function dn({records:e,isLoading:t}){let{t:o}=useTranslation();return t?jsx("div",{className:"flex items-center justify-center py-16",children:jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-[#C8FF00] border-t-transparent"})}):e.length===0?jsx(j,{title:o("portfolio.perps.history.empty"),hint:o("portfolio.perps.history.empty.hint")}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"1.5fr 80px 1fr 1fr 1fr 100px"},children:[jsx("span",{children:o("portfolio.perps.history.header.pair")}),jsx("span",{children:o("portfolio.perps.history.header.side")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.size")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.pnl")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.closePrice")}),jsx("span",{className:"text-right",children:o("portfolio.perps.history.header.time")})]}),jsx("div",{className:"flex flex-col",children:e.map(r=>jsx(cn,{record:r},r.id))})]})}function cn({record:e}){let{t}=useTranslation(),o=e.side==="long",r=e.pnl>=0;return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"1.5fr 80px 1fr 1fr 1fr 100px"},children:[jsxs("div",{className:"flex items-center gap-2",children:[e.icon?jsx("img",{src:e.icon,alt:e.pair,className:"h-5 w-5 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[8px] font-bold text-[#5C5C72]",children:e.pair.slice(0,2)}),jsx("span",{className:"text-xs font-medium text-foreground",children:e.pair})]}),jsx("span",{children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",o?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(255,82,82,0.12)] text-[#FF5252]"),children:t(o?"perpetuals.positions.long":"perpetuals.positions.short")})}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:D(e.size)}),jsx("span",{className:cn$1("text-right font-mono text-xs",r?"text-[#00E676]":"text-[#FF5252]"),children:Pe(e.pnl)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:D(e.closePrice)}),jsx("span",{className:"text-right text-[11px] text-[#5C5C72]",children:e.time})]})}function St({state:e,onSellBet:t,onSellAll:o}){let{predictionSubTab:r,setPredictionSubTab:n,predictionSearch:a,setPredictionSearch:i,filteredPredictionBets:s,predictionSettledQuery:l,isViewing:p}=e,c=s.length>0;return jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsxs("div",{className:"flex items-center gap-3",children:[jsx(le,{tabs:[{key:"active",label:"Active Bets"},{key:"settled",label:"Settled"}],activeKey:r,onTabChange:d=>n(d)}),r==="active"&&!p&&jsx(Ne,{label:"Sell All",disabled:!c,onClick:()=>o?.()})]}),jsx(pe,{value:a,onChange:i,placeholder:"Search market\u2026"})]}),r==="active"?jsx(mn,{bets:s,isViewing:p,onSell:t}):jsx(gn,{records:l.data?.records??[],isLoading:l.isLoading})]})}var un={polymarket:"bg-[rgba(0,102,255,0.12)] text-[#0066FF]",drift:"bg-[rgba(200,255,0,0.1)] text-[#C8FF00]",metadao:"bg-[rgba(255,107,157,0.1)] text-[#FF6B9D]"},fn={polymarket:"Polymarket",drift:"Drift",metadao:"MetaDAO"};function lo({source:e}){return jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",un[e]),children:fn[e]})}function mn({bets:e,isViewing:t,onSell:o}){return e.length===0?jsx(j,{title:"No active bets",hint:"Explore prediction markets \u2192"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:t?"2.2fr .6fr .7fr .7fr .7fr":"2.2fr .6fr .7fr .7fr .7fr 80px"},children:[jsx("span",{children:"Market / Source"}),jsx("span",{className:"text-right",children:"Position"}),jsx("span",{className:"text-right",children:"Stake"}),jsx("span",{className:"text-right",children:"Potential"}),jsx("span",{className:"text-right",children:"Status"}),!t&&jsx("span",{className:"text-right"})]}),jsx("div",{className:"flex flex-col",children:e.map(r=>jsx(xn,{bet:r,isViewing:t,onSell:o},r.id))})]})}function xn({bet:e,isViewing:t,onSell:o}){return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:t?"2.2fr .6fr .7fr .7fr .7fr":"2.2fr .6fr .7fr .7fr .7fr 80px"},children:[jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[e.icon?jsx("img",{src:e.icon,alt:e.market,className:"h-6 w-6 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[9px] font-bold text-[#5C5C72]",children:"?"}),jsxs("div",{className:"flex flex-col overflow-hidden",children:[jsx("span",{className:"truncate text-xs font-medium text-foreground",children:e.market}),jsx(lo,{source:e.source})]})]}),jsx("span",{className:cn$1("text-right text-xs font-medium",e.position==="Yes"?"text-[#00E676]":"text-[#FF5252]"),children:e.position}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:D(e.stake)}),jsx("span",{className:"text-right font-mono text-xs text-[#00E676]",children:D(e.potential)}),jsx("span",{className:"text-right",children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",e.status==="active"?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(200,255,0,0.1)] text-[#C8FF00]"),children:e.status==="active"?"Active":"Pending"})}),!t&&jsx("div",{className:"flex justify-end",children:jsx("button",{type:"button",className:"rounded-[5px] border border-[#252530] px-2.5 py-1 text-[10px] font-medium text-[#5C5C72] transition-colors hover:border-[#FF5252] hover:text-[#FF5252]",onClick:()=>o?.(e),children:"Sell"})})]})}function gn({records:e,isLoading:t}){return t?jsx("div",{className:"flex items-center justify-center py-16",children:jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-[#C8FF00] border-t-transparent"})}):e.length===0?jsx(j,{title:"No settled bets",hint:"Settled predictions will appear here"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"1.5fr .8fr .6fr .7fr .6fr .7fr"},children:[jsx("span",{children:"Market"}),jsx("span",{children:"Source"}),jsx("span",{className:"text-right",children:"Position"}),jsx("span",{className:"text-right",children:"Stake"}),jsx("span",{className:"text-right",children:"Result"}),jsx("span",{className:"text-right",children:"Payout"})]}),jsx("div",{className:"flex flex-col",children:e.map(o=>jsx(yn,{record:o},o.id))})]})}function yn({record:e}){let t=e.result==="won";return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"1.5fr .8fr .6fr .7fr .6fr .7fr"},children:[jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[e.icon?jsx("img",{src:e.icon,alt:e.market,className:"h-5 w-5 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[8px] font-bold text-[#5C5C72]",children:"?"}),jsx("span",{className:"truncate text-xs font-medium text-foreground",children:e.market})]}),jsx(lo,{source:e.source}),jsx("span",{className:cn$1("text-right text-xs font-medium",e.position==="Yes"?"text-[#00E676]":"text-[#FF5252]"),children:e.position}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:D(e.stake)}),jsx("span",{className:"text-right",children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",t?"bg-[rgba(0,230,118,0.12)] text-[#00E676]":"bg-[rgba(255,82,82,0.12)] text-[#FF5252]"),children:t?"Won":"Lost"})}),jsx("span",{className:cn$1("text-right font-mono text-xs",t?"text-[#00E676]":"text-[#5C5C72]"),children:t?`+${D(e.payout)}`:D(e.payout)})]})}function At({state:e}){let{spotSubTab:t,setSpotSubTab:o,spotSearch:r,setSpotSearch:n,hideSmall:a,setHideSmall:i,groupCollapsed:s,toggleGroupCollapsed:l,filteredSpotHoldings:p,spotHistoryQuery:c}=e;return jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between pb-3",children:[jsx(le,{tabs:[{key:"holdings",label:"Holdings"},{key:"history",label:"History"}],activeKey:t,onTabChange:d=>o(d)}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(pe,{value:r,onChange:n,placeholder:"Search token\u2026"}),t==="holdings"&&jsxs("label",{className:"flex cursor-pointer items-center gap-1.5 text-[11px] text-[#5C5C72] select-none",children:[jsx("input",{type:"checkbox",className:"accent-[#C8FF00]",checked:a,onChange:d=>i(d.target.checked)}),"Hide small"]})]})]}),t==="holdings"?jsx(bn,{holdings:p,groupCollapsed:s,onToggleGroup:l}):jsx(hn,{records:c.data?.trades??[],isLoading:c.isLoading})]})}function bn({holdings:e,groupCollapsed:t,onToggleGroup:o}){return e.length===0?jsx(j,{title:"No tokens found",hint:"Your spot tokens will appear here"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"2fr 1fr 1fr 1fr 1fr"},children:[jsx("span",{children:"Asset"}),jsx("span",{className:"text-right",children:"Balance"}),jsx("span",{className:"text-right",children:"Price"}),jsx("span",{className:"text-right",children:"Value"}),jsx("span",{className:"text-right",children:"24h"})]}),jsxs("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72] transition-colors hover:text-[#A0A0B8]",onClick:o,children:[jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",className:cn$1("transition-transform",t&&"-rotate-90"),children:jsx("path",{d:"M4 6l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),jsx("span",{children:"Tokens"}),jsx("span",{className:"text-[#3A3A4E]",children:e.length})]}),!t&&jsx("div",{className:"flex flex-col",children:e.map(r=>jsx(Pn,{holding:r},r.tokenAddress))})]})}function Pn({holding:e}){let t=e.change24h>=0;return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"2fr 1fr 1fr 1fr 1fr"},children:[jsxs("div",{className:"flex items-center gap-2.5 overflow-hidden",children:[e.image?jsx("img",{src:e.image,alt:e.symbol,className:"h-7 w-7 flex-shrink-0 rounded-full"}):jsx("div",{className:"flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-full bg-[#1C1C26] text-[10px] font-bold text-[#5C5C72]",children:e.symbol.slice(0,2)}),jsxs("div",{className:"flex flex-col overflow-hidden",children:[jsx("span",{className:"truncate text-xs font-medium text-foreground",children:e.name}),jsx("span",{className:"text-[10px] text-[#5C5C72]",children:e.symbol})]})]}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:Ge(e.balance)}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:D(e.price)}),jsx("span",{className:"text-right font-mono text-xs text-foreground",children:D(e.value)}),jsx("span",{className:cn$1("text-right font-mono text-xs",t?"text-[#00E676]":"text-[#FF5252]"),children:Rt(e.change24h)})]})}function hn({records:e,isLoading:t}){return t?jsx("div",{className:"flex items-center justify-center py-16",children:jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-[#C8FF00] border-t-transparent"})}):e.length===0?jsx(j,{title:"No history found",hint:"Transaction history will appear here"}):jsxs("div",{children:[jsxs("div",{className:"grid gap-2 px-3 pb-2 text-[10px] font-medium uppercase tracking-wider text-[#5C5C72]",style:{gridTemplateColumns:"80px 1.5fr 1fr 1fr 100px 80px"},children:[jsx("span",{children:"Type"}),jsx("span",{children:"Detail"}),jsx("span",{className:"text-right",children:"Amount"}),jsx("span",{className:"text-right",children:"Value"}),jsx("span",{className:"text-right",children:"Time"}),jsx("span",{className:"text-right",children:"TxHash"})]}),jsx("div",{className:"flex flex-col",children:e.map(o=>jsx(Nn,{record:o},`${o.txHash}-${o.tokenAddress}`))})]})}var vn={swap:"bg-[rgba(139,123,255,0.12)] text-[#8B7BFF]",send:"bg-[rgba(255,82,82,0.12)] text-[#FF5252]",receive:"bg-[rgba(0,230,118,0.12)] text-[#00E676]"},Cn={swap:"Swap",send:"Send",receive:"Receive"};function Sn(e){return e.type==="swap"&&e.sideTokenSymbol?`${e.tokenSymbol} \u2192 ${e.sideTokenSymbol}`:e.tokenName||e.tokenSymbol}function Nn({record:e}){let t=Bt(e.txHash,e.chain);return jsxs("div",{className:"grid items-center gap-2 rounded-[5px] px-3 py-2.5 transition-colors hover:bg-[#16161E]",style:{gridTemplateColumns:"80px 1.5fr 1fr 1fr 100px 80px"},children:[jsx("span",{children:jsx("span",{className:cn$1("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium",vn[e.type]),children:Cn[e.type]})}),jsx("span",{className:"truncate text-xs text-foreground",children:Sn(e)}),jsxs("span",{className:"text-right font-mono text-xs text-foreground",children:[Ge(e.tokenAmount)," ",e.tokenSymbol]}),jsx("span",{className:"text-right font-mono text-xs text-[#A0A0B8]",children:D(e.valueUsd)}),jsx("span",{className:"text-right text-[11px] text-[#5C5C72]",children:e.timestamp?Ot(e.timestamp):"\u2014"}),jsx("span",{className:"text-right",children:e.txHash?jsxs("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"font-mono text-[11px] text-[#5C5C72] transition-colors hover:text-[#C8FF00]",children:[e.txHash.slice(0,4),"\u2026",e.txHash.slice(-3)]}):jsx("span",{className:"font-mono text-[11px] text-[#3A3A4E]",children:"\u2014"})})]})}function wn({onClosePosition:e,onCloseAllPositions:t,onSellBet:o,onSellAllBets:r,...n}){let a=vt(n),[i,s]=useState(null),l=useCallback(()=>{s("closeAll");},[]),p=useCallback(()=>{s("sellAll");},[]),c=useCallback(()=>{i==="closeAll"?t?.():i==="sellAll"&&r?.(),s(null);},[i,t,r]),d=useCallback(()=>{s(null);},[]);return jsxs("div",{className:"rounded-xl border border-[#1C1C26] bg-[#0E0E16] p-4",children:[(()=>{switch(n.activeTab){case "spot":return jsx(At,{state:a});case "perps":return jsx(Ct,{state:a,onClosePosition:e,onCloseAll:l});case "prediction":return jsx(St,{state:a,onSellBet:o,onSellAll:p});default:return null}})(),jsx(He,{open:i==="closeAll",title:"Close All Positions",message:"Close all positions? This will route to each protocol to execute.",confirmLabel:"Confirm Close All",cancelLabel:"Cancel",onConfirm:c,onCancel:d}),jsx(He,{open:i==="sellAll",title:"Sell All Positions",message:"Sell all positions? This will route to each platform to execute.",confirmLabel:"Confirm Sell All",cancelLabel:"Cancel",onConfirm:c,onCancel:d})]})}function de(e,t=Date.now()){if(e==null)return "--";let o=typeof e=="string"||typeof e=="number"?new Date(e):e,r=typeof t=="number"?new Date(t):t,n=Math.max(0,Math.floor((r.getTime()-o.getTime())/1e3));if(n<60)return `${n}s`;let a=Math.floor(n/60);if(a<60)return `${a}m`;let i=Math.floor(a/60);if(i<24)return `${i}h`;let s=Math.floor(i/24);if(s<30)return `${s}d`;let l=Math.floor(s/30);return l<12?`${l}mo`:`${Math.floor(s/365)}y`}function me(e,t=4,o=4){return e?e.length<=t+o+1?e:`${e.slice(0,t)}\u2026${e.slice(-o)}`:"--"}var kn={kol:{label:"KOL",bgClass:"bg-yellow-500/15",textClass:"text-yellow-400"},smart:{label:"Smart",bgClass:"bg-sky-500/15",textClass:"text-sky-400"},sniper:{label:"Sniper",bgClass:"bg-red-500/15",textClass:"text-red-400"},dev:{label:"Dev",bgClass:"bg-orange-500/15",textClass:"text-orange-400"},bundle:{label:"Bundle",bgClass:"bg-purple-500/15",textClass:"text-purple-400"},bluechip:{label:"Bluechip",bgClass:"bg-emerald-500/15",textClass:"text-emerald-400"},insider:{label:"Insider",bgClass:"bg-fuchsia-500/15",textClass:"text-fuchsia-400"},fresh:{label:"Fresh",bgClass:"bg-teal-500/15",textClass:"text-teal-400"}};function Fn({tag:e,className:t}){let o=kn[e]??{label:e,bgClass:"bg-default/20",textClass:"text-default-500"};return jsx("span",{className:cn$1("inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium uppercase leading-none tracking-wide",o.bgClass,o.textClass,t),children:o.label})}function We({tags:e,className:t,max:o}){if(!e||e.length===0)return null;let r=o!=null&&o>0?e.slice(0,o):e,n=e.length-r.length;return jsxs("div",{className:cn$1("flex flex-wrap items-center gap-1",t),children:[r.map(a=>jsx(Fn,{tag:a},a)),n>0&&jsxs("span",{className:"inline-flex items-center rounded bg-default/20 px-1.5 py-0.5 text-[10px] font-medium text-default-500",children:["+",n]})]})}var Un=[{value:"timestamp",label:"Latest"},{value:"totalUsd",label:"Top USD"}],Rn=[{value:"all",label:"All"},{value:"buy",label:"Buys"},{value:"sell",label:"Sells"}];function mo({activities:e,isLoading:t,sortBy:o,onSortByChange:r,typeFilter:n="all",onTypeFilterChange:a,onLoadMore:i,hasMore:s,now:l=Date.now(),nativeDecimals:p=9,nativeSymbol:c="SOL",className:d,onRowClick:m}){return jsxs("div",{className:cn$1("flex flex-col",d),children:[jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 px-3 py-2",children:[jsx("div",{className:"flex items-center gap-1",children:Rn.map(f=>jsx("button",{type:"button",onClick:()=>a?.(f.value),className:cn$1("rounded px-2 py-1 text-[11px] transition-colors",n===f.value?"bg-default-100 text-foreground":"text-default-400 hover:text-foreground"),children:f.label},f.value))}),jsx("div",{className:"flex items-center gap-1",children:Un.map(f=>jsx("button",{type:"button",onClick:()=>r(f.value),className:cn$1("rounded px-2 py-1 text-[11px] transition-colors",o===f.value?"bg-default-100 text-foreground":"text-default-400 hover:text-foreground"),children:f.label},f.value))})]}),jsx("div",{className:"overflow-x-auto",children:jsxs("table",{className:"w-full min-w-[780px] table-fixed text-[12px]",children:[jsx("thead",{className:"text-default-400",children:jsxs("tr",{className:"border-b border-default-100",children:[jsx("th",{className:"w-[10%] px-3 py-2 text-left font-normal",children:"Side"}),jsx("th",{className:"w-[25%] px-3 py-2 text-left font-normal",children:"Token"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"Amount"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"USD"}),jsx("th",{className:"w-[15%] px-3 py-2 text-left font-normal",children:"Tags"}),jsx("th",{className:"w-[10%] px-3 py-2 text-right font-normal",children:"Gas"}),jsx("th",{className:"w-[10%] px-3 py-2 text-right font-normal",children:"Age"})]})}),jsxs("tbody",{children:[e.length===0&&!t&&jsx("tr",{children:jsx("td",{colSpan:7,className:"py-8 text-center text-default-400",children:"No activities"})}),e.map(f=>jsx(Hn,{activity:f,now:l,nativeDecimals:p,nativeSymbol:c,onRowClick:m},`${f.txHash}-${f.walletAddress}`)),t&&jsx("tr",{children:jsx("td",{colSpan:7,className:"py-4 text-center text-default-400",children:"Loading\u2026"})})]})]})}),s&&jsx("div",{className:"flex justify-center px-3 py-2",children:jsx("button",{type:"button",onClick:i,disabled:t,className:"rounded bg-default-100 px-3 py-1 text-[11px] text-default-600 transition-colors hover:bg-default-200 disabled:opacity-50",children:"Load more"})})]})}function In(e){return e.type==="buy"?e.to:e.type==="sell"?e.from:e.to}function Bn(e,t,o){if(!e)return "--";let r=Number(e)/Math.pow(10,t);return Number.isFinite(r)?`${formatAmount(r)} ${o}`:"--"}function Hn({activity:e,now:t,nativeDecimals:o,nativeSymbol:r,onRowClick:n}){let a=In(e),i=e.type==="buy"?"Buy":e.type==="sell"?"Sell":e.type.replace(/_/g," "),s=e.type==="buy"?"text-bullish":e.type==="sell"?"text-bearish":"text-default-500";return jsxs("tr",{className:cn$1("border-b border-default-50 hover:bg-default-50/60",n&&"cursor-pointer"),onClick:n?()=>n(e):void 0,children:[jsx("td",{className:cn$1("px-3 py-2 align-middle font-medium capitalize",s),children:i}),jsx("td",{className:"px-3 py-2 align-middle",children:jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-foreground",children:a.symbol}),jsx("span",{className:"font-mono text-[10px] text-default-400",children:me(a.address,6,6)})]})}),jsxs("td",{className:"px-3 py-2 text-right align-middle text-default-500",children:[formatAmount(a.amount)," ",a.symbol]}),jsx("td",{className:"px-3 py-2 text-right align-middle text-foreground",children:a.amountInUsd?formatAmountUSDCompact(a.amountInUsd):"--"}),jsx("td",{className:"px-3 py-2 align-middle",children:jsx(We,{tags:e.traderTags,max:2})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:Bn(e.gasFee,o,r)}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:de(e.time,t)})]})}function yo({chain:e,address:t,limit:o=50,initialSortBy:r="timestamp",initialTypeFilter:n="all"}){let[a,i]=useState(r),[s,l]=useState(n),[p,c]=useState(void 0),[d,m]=useState([]),[f,v]=useState([]),u=useCallback(()=>{c(void 0),m([]),v([]);},[]),x=useCallback(C=>{C!==a&&(i(C),u());},[a,u]),g=useCallback(C=>{C!==s&&(l(C),u());},[s,u]);useEffect(()=>{u();},[e,t,u]);let w=s==="all"?void 0:s,S=useMemo(()=>({chain:e,address:t,cursor:p,limit:o,sortBy:a,type:w}),[e,t,p,o,a,w]),{data:B,isPending:O,isFetching:E}=useWalletActivitiesQuery(S);useEffect(()=>{B&&m(C=>p==null?[B]:C[C.length-1]?.endCursor===B.endCursor?C:[...C,B]);},[B,p]);let _=a==="timestamp"&&s==="all"&&p==null;useWalletActivitiesSubscription({chain:e,address:t},C=>{!_||!C?.length||v(Q=>{let Y=new Set(Q.map(Ke=>Ke.txHash)),L=C.filter(Ke=>!Y.has(Ke.txHash));return L.length===0?Q:[...L,...Q].slice(0,100)});});let W=useMemo(()=>{let C=d.flatMap(L=>L.data);if(!_||f.length===0)return C;let Q=new Set(C.map(L=>L.txHash));return [...f.filter(L=>!Q.has(L.txHash)),...C]},[d,f,_]),I=d[d.length-1],ce=!!(I?.hasNext&&I.endCursor),J=useCallback(()=>{!I?.endCursor||!I.hasNext||c(I.endCursor);},[I]);return {activities:W,isLoading:O||E,sortBy:a,setSortBy:x,typeFilter:s,setTypeFilter:g,hasMore:ce,loadMore:J}}function Jl({chain:e,address:t,limit:o,initialSortBy:r,initialTypeFilter:n,nativeDecimals:a,nativeSymbol:i,className:s,onRowClick:l}){let{activities:p,isLoading:c,sortBy:d,setSortBy:m,typeFilter:f,setTypeFilter:v,hasMore:u,loadMore:x}=yo({chain:e,address:t,limit:o,initialSortBy:r,initialTypeFilter:n});return jsx(mo,{activities:p,isLoading:c,sortBy:d,onSortByChange:m,typeFilter:f,onTypeFilterChange:v,hasMore:u,onLoadMore:x,className:s,nativeDecimals:a,nativeSymbol:i,onRowClick:l})}function ho({data:e,isLoading:t,className:o,now:r=Date.now(),onRowClick:n,onLoadMore:a,hasMore:i}){return jsxs("div",{className:cn$1("flex flex-col",o),children:[jsx("div",{className:"flex items-baseline justify-between px-3 py-2",children:jsxs("span",{className:"text-xs font-medium text-default-500",children:["Holdings",e&&jsxs("span",{className:"ml-2 text-[10px] text-default-400",children:["Net worth ",formatAmountUSDCompact(e.balanceInUsd)]})]})}),jsx("div",{className:"overflow-x-auto",children:jsxs("table",{className:"w-full min-w-[720px] table-fixed text-[12px]",children:[jsx("thead",{className:"text-default-400",children:jsxs("tr",{className:"border-b border-default-100",children:[jsx("th",{className:"w-[28%] px-3 py-2 text-left font-normal",children:"Token"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"Amount"}),jsx("th",{className:"w-[15%] px-3 py-2 text-right font-normal",children:"Value"}),jsx("th",{className:"w-[14%] px-3 py-2 text-right font-normal",children:"Avg cost"}),jsx("th",{className:"w-[16%] px-3 py-2 text-left font-normal",children:"Tags"}),jsx("th",{className:"w-[12%] px-3 py-2 text-right font-normal",children:"Last active"})]})}),jsxs("tbody",{children:[(!e||e.portfolios.length===0)&&!t&&jsx("tr",{children:jsx("td",{colSpan:6,className:"py-8 text-center text-default-400",children:"No holdings"})}),e?.portfolios.map(s=>jsx(Mn,{portfolio:s,now:r,onRowClick:n},`${s.chain}-${s.address}`)),t&&jsx("tr",{children:jsx("td",{colSpan:6,className:"py-4 text-center text-default-400",children:"Loading\u2026"})})]})]})}),i&&jsx("div",{className:"flex justify-center px-3 py-2",children:jsx("button",{type:"button",onClick:a,disabled:t,className:"rounded bg-default-100 px-3 py-1 text-[11px] text-default-600 transition-colors hover:bg-default-200 disabled:opacity-50",children:"Load more"})})]})}function Mn({portfolio:e,now:t,onRowClick:o}){return jsxs("tr",{className:cn$1("border-b border-default-50 hover:bg-default-50/60",o&&"cursor-pointer"),onClick:o?()=>o(e):void 0,children:[jsx("td",{className:"px-3 py-2 align-middle",children:jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-foreground",children:e.symbol}),jsx("span",{className:"font-mono text-[10px] text-default-400",children:me(e.address,6,6)})]})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-500",children:formatAmount(e.amount)}),jsx("td",{className:"px-3 py-2 text-right align-middle text-foreground",children:formatAmountUSDCompact(e.amountInUsd)}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.avgCostUsd?formatPriceUSD(e.avgCostUsd):"--"}),jsx("td",{className:"px-3 py-2 align-middle",children:jsx(We,{tags:e.walletTokenTags,max:2})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.lastActiveAt?de(e.lastActiveAt,t):"--"})]})}function So({chain:e,address:t,limit:o=50}){let[r,n]=useState(void 0),[a,i]=useState([]);useEffect(()=>{i([]),n(void 0);},[e,t]);let{data:s,isPending:l,isFetching:p}=useWalletPortfoliosQuery({chain:e,address:t,cursor:r,limit:o});useEffect(()=>{s&&i(v=>r==null?[s]:v[v.length-1]?.endCursor===s.endCursor?v:[...v,s]);},[s,r]);let c=useMemo(()=>a.length===0?void 0:{...a[0],portfolios:a.flatMap(u=>u.portfolios)},[a]),d=a[a.length-1],m=!!(d?.hasNext&&d.endCursor),f=useCallback(()=>{!d?.endCursor||!d.hasNext||n(d.endCursor);},[d]);return {data:c,isLoading:l||p,hasMore:m,loadMore:f}}function gp({chain:e,address:t,limit:o,className:r,onRowClick:n}){let{data:a,isLoading:i,hasMore:s,loadMore:l}=So({chain:e,address:t,limit:o});return jsx(ho,{data:a,isLoading:i,className:r,hasMore:s,onLoadMore:l,onRowClick:n})}var qn=[{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"90d",label:"90D"}],zn=[{value:"open",label:"Open"},{value:"closed",label:"Closed"},{value:"all",label:"All"}],Yn=[{value:"totalPnl",label:"Total"},{value:"realizedPnl",label:"Realized"},{value:"unrealizedPnl",label:"Unrealized"}];function To({data:e,isLoading:t,resolution:o,onResolutionChange:r,positionState:n,onPositionStateChange:a,sortBy:i,onSortByChange:s,hasMore:l,onLoadMore:p,now:c=Date.now(),className:d,onRowClick:m}){return jsxs("div",{className:cn$1("flex flex-col gap-2",d),children:[jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 px-3 py-2",children:[jsx(wt,{label:"Window",options:qn,value:o,onChange:r}),jsx(wt,{label:"Status",options:zn,value:n,onChange:a}),jsx(wt,{label:"Sort",options:Yn,value:i,onChange:s})]}),e&&jsx(Gn,{data:e}),jsx("div",{className:"overflow-x-auto",children:jsxs("table",{className:"w-full min-w-[780px] table-fixed text-[12px]",children:[jsx("thead",{className:"text-default-400",children:jsxs("tr",{className:"border-b border-default-100",children:[jsx("th",{className:"w-[22%] px-3 py-2 text-left font-normal",children:"Token"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Holding"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Total PnL"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Realized"}),jsx("th",{className:"w-[13%] px-3 py-2 text-right font-normal",children:"Unrealized"}),jsx("th",{className:"w-[8%] px-3 py-2 text-right font-normal",children:"State"}),jsx("th",{className:"w-[9%] px-3 py-2 text-right font-normal",children:"First buy"}),jsx("th",{className:"w-[9%] px-3 py-2 text-right font-normal",children:"Last sell"})]})}),jsxs("tbody",{children:[(!e||e.portfolios.length===0)&&!t&&jsx("tr",{children:jsx("td",{colSpan:8,className:"py-8 text-center text-default-400",children:"No positions"})}),e?.portfolios.map(f=>jsx(jn,{pnl:f,now:c,onRowClick:m},`${f.chain}-${f.address}`)),t&&jsx("tr",{children:jsx("td",{colSpan:8,className:"py-4 text-center text-default-400",children:"Loading\u2026"})})]})]})}),l&&jsx("div",{className:"flex justify-center px-3 py-2",children:jsx("button",{type:"button",onClick:p,disabled:t,className:"rounded bg-default-100 px-3 py-1 text-[11px] text-default-600 transition-colors hover:bg-default-200 disabled:opacity-50",children:"Load more"})})]})}function wt({label:e,options:t,value:o,onChange:r}){return jsxs("div",{className:"flex items-center gap-2",children:[jsx("span",{className:"text-[10px] uppercase tracking-wide text-default-400",children:e}),jsx("div",{className:"flex items-center gap-1",children:t.map(n=>jsx("button",{type:"button",onClick:()=>r(n.value),className:cn$1("rounded px-2 py-1 text-[11px] transition-colors",o===n.value?"bg-default-100 text-foreground":"text-default-400 hover:text-foreground"),children:n.label},n.value))})]})}function Gn({data:e}){let t=e.totalProfitInUsd,o=e.totalProfitRatio,r=e.winRate;return jsxs("div",{className:"mx-3 flex flex-wrap items-center gap-x-6 gap-y-2 rounded border border-default-100 bg-default-50 px-4 py-2 text-xs",children:[jsx(Me,{label:"Total PnL",value:t?formatAmountUSDCompact(t,{showPlusGtThanZero:true}):"--",tone:t?Ao(t):void 0}),jsx(Me,{label:"Return",value:o?formatPercent(o,{showPlusGtThanZero:true}):"--",tone:o?Ao(o):void 0}),jsx(Me,{label:"Win rate",value:r?formatPercent(r):"--"}),jsx(Me,{label:"Trades",value:e.totalTrades!=null?e.totalTrades.toString():"--"})]})}function Ao(e){let t=new SafeBigNumber(e);if(t.gt(0))return "bullish";if(t.lt(0))return "bearish"}function Me({label:e,value:t,tone:o}){return jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"text-[10px] uppercase tracking-wide text-default-400",children:e}),jsx("span",{className:cn$1("text-sm font-medium",o==="bullish"?"text-bullish":o==="bearish"?"text-bearish":"text-foreground"),children:t})]})}function Tt({value:e}){if(!e)return jsx("span",{className:"text-default-400",children:"--"});let t=new SafeBigNumber(e),o=t.gt(0)?"text-bullish":t.lt(0)?"text-bearish":"text-default-500";return jsx("span",{className:o,children:formatAmountUSDCompact(e,{showPlusGtThanZero:true})})}function jn({pnl:e,now:t,onRowClick:o}){return jsxs("tr",{className:cn$1("border-b border-default-50 hover:bg-default-50/60",o&&"cursor-pointer"),onClick:o?()=>o(e):void 0,children:[jsx("td",{className:"px-3 py-2 align-middle",children:jsxs("div",{className:"flex flex-col gap-0.5",children:[jsx("span",{className:"text-foreground",children:e.symbol}),jsx("span",{className:"font-mono text-[10px] text-default-400",children:me(e.address,6,6)})]})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-foreground",children:formatAmountUSDCompact(e.amountInUsd)}),jsx("td",{className:"px-3 py-2 text-right align-middle",children:jsx(Tt,{value:e.totalProfitInUsd})}),jsx("td",{className:"px-3 py-2 text-right align-middle",children:jsx(Tt,{value:e.realizedProfitInUsd})}),jsx("td",{className:"px-3 py-2 text-right align-middle",children:jsx(Tt,{value:e.unrealizedProfitInUsd})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-[10px]",children:jsx("span",{className:cn$1("rounded px-1.5 py-0.5",e.isClosed?"bg-default/20 text-default-500":"bg-bullish/15 text-bullish"),children:e.isClosed?"Closed":"Open"})}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.firstBuyAt?de(e.firstBuyAt,t):"--"}),jsx("td",{className:"px-3 py-2 text-right align-middle text-default-400",children:e.lastSellAt?de(e.lastSellAt,t):"--"})]})}function Do({chain:e,address:t,limit:o=50,initialResolution:r="30d",initialPositionState:n="open",initialSortBy:a="totalPnl"}){let[i,s]=useState(r),[l,p]=useState(n),[c,d]=useState(a),[m,f]=useState(void 0),[v,u]=useState([]),x=useCallback(()=>{f(void 0),u([]);},[]),g=useCallback(C=>{C!==i&&(s(C),x());},[i,x]),w=useCallback(C=>{C!==l&&(p(C),x());},[l,x]),S=useCallback(C=>{C!==c&&(d(C),x());},[c,x]);useEffect(()=>{x();},[e,t,x]);let B=useMemo(()=>({chain:e,address:t,cursor:m,limit:o,resolution:i,positionState:l,sortBy:c}),[e,t,m,o,i,l,c]),{data:O,isPending:E,isFetching:_}=useWalletPortfolioPnlsQuery(B);useEffect(()=>{O&&u(C=>m==null?[O]:C[C.length-1]?.endCursor===O.endCursor?C:[...C,O]);},[O,m]);let W=useMemo(()=>v.length===0?void 0:{...v[0],portfolios:v.flatMap(Q=>Q.portfolios)},[v]),I=v[v.length-1],ce=!!(I?.hasNext&&I.endCursor),J=useCallback(()=>{!I?.endCursor||!I.hasNext||f(I.endCursor);},[I]);return {data:W,isLoading:E||_,resolution:i,setResolution:g,positionState:l,setPositionState:w,sortBy:c,setSortBy:S,hasMore:ce,loadMore:J}}function Ip({chain:e,address:t,limit:o,initialResolution:r,initialPositionState:n,initialSortBy:a,className:i,onRowClick:s}){let{data:l,isLoading:p,resolution:c,setResolution:d,positionState:m,setPositionState:f,sortBy:v,setSortBy:u,hasMore:x,loadMore:g}=Do({chain:e,address:t,limit:o,initialResolution:r,initialPositionState:n,initialSortBy:a});return jsx(To,{data:l,isLoading:p,resolution:c,onResolutionChange:d,positionState:m,onPositionStateChange:f,sortBy:v,onSortByChange:u,hasMore:x,onLoadMore:g,className:i,onRowClick:s})}function Jn({client:e,children:t}){return jsx(xe.Provider,{value:e,children:t})}var is=15e3;function as(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Uo({chain:e,address:t,enabled:o=true,summaryPollMs:r=is}){let{setSummary:n,setSummaryStatus:a,setRefetchSummary:i}=useContext(Re),s=useWalletPortfoliosQuery({chain:e,address:t},{enabled:o,refetchInterval:r}),l=useWalletPnlQuery({chain:e,address:t},{enabled:o,refetchInterval:r});useEffect(()=>{n(null);},[e,t,n]),useEffect(()=>{let c=s.isPending||l.isPending,d=s.isFetching||l.isFetching,m=s.isError||l.isError,f=s.isSuccess&&l.isSuccess;a({status:m?"error":f?"success":"pending",fetchStatus:d?"fetching":"idle",isLoading:c&&d,isPending:c,isFetching:d,isRefetching:f&&d,isError:m,isSuccess:f,error:s.error??l.error,dataUpdatedAt:Math.max(s.dataUpdatedAt,l.dataUpdatedAt)});},[s.isPending,s.isFetching,s.isError,s.isSuccess,s.error,s.dataUpdatedAt,l.isPending,l.isFetching,l.isError,l.isSuccess,l.error,l.dataUpdatedAt,a]),useEffect(()=>{let c=s.data,d=l.data;!c||!d||n({...d,balanceInUsd:c.balanceInUsd,balanceInNative:c.balanceInNative});},[s.data,l.data,n]),useWalletPnlSubscription({chain:e,address:t},c=>{n(d=>{if(!d)return d;let m=d;for(let f of c)m={...m,...as(f)};return m});},{enabled:o});let p=useCallback(async()=>{await Promise.all([s.refetch(),l.refetch()]);},[s,l]);useEffect(()=>{i(p);},[p,i]);}function ps({chain:e,address:t,children:o}){let[r,n]=useState(null),[a,i]=useState(cs),s=useRef(()=>Promise.resolve()),l=useCallback(()=>s.current(),[]),p=useCallback(m=>{s.current=m;},[]),c=useMemo(()=>({summary:r,summaryStatus:a,refetchSummary:l}),[r,a,l]),d=useMemo(()=>({setSummary:n,setSummaryStatus:i,setRefetchSummary:p}),[n,i,p]);return jsx(Re.Provider,{value:d,children:jsx(ge.Provider,{value:c,children:jsx(ds,{chain:e,address:t,children:o})})})}function ds({chain:e,address:t,children:o}){return Uo({chain:e,address:t,enabled:!!t}),jsx(Fragment,{children:o})}var cs={status:"pending",fetchStatus:"idle",isLoading:false,isPending:true,isFetching:false,isRefetching:false,isError:false,isSuccess:false,error:null,dataUpdatedAt:0};
|
|
2
|
+
export{Ye as AccountInfoUI,ir as AccountInfoWidget,je as AddressRowUI,he as AssetTab,Je as AssetTabsUI,tt as BalanceRowUI,Ne as BatchActionButton,Wt as CURVE_PERIOD_VALUE,He as ConfirmDialog,rt as CurveCardUI,Ze as CurvePeriod,Xe as CurveType,st as DistributionCardUI,j as HoldingsEmpty,pe as HoldingsSearch,wn as HoldingsSectionWidget,le as HoldingsSubTabs,Ct as PerpsPanelUI,Lt as PerpsPositionSide,mo as PortfolioActivities,Jl as PortfolioActivitiesWidget,xe as PortfolioClientContext,Jn as PortfolioClientProvider,ge as PortfolioContext,ho as PortfolioNetWorthTokens,gp as PortfolioNetWorthTokensWidget,gt as PortfolioPageSkeleton,nn as PortfolioPageWidget,To as PortfolioPnlDetails,Ip as PortfolioPnlDetailsWidget,ps as PortfolioProvider,Vt as PredictionBetStatus,St as PredictionPanelUI,_t as PredictionResult,Kt as PredictionSource,Mt as SpotHistoryType,At as SpotPanelUI,Fn as TagBadge,We as TagBadgeList,yt as ViewingBannerUI,Ht as computeDistribution,ro as curveDataQueryKey,zr as distributionQueryKey,de as formatAgeShort,Rt as formatPercent,Pe as formatSignedUsd,Ot as formatTime,Ge as formatTokenBalance,D as formatUsd,Bt as getExplorerUrl,jt as overviewQueryKey,Ks as parseDecimal,eo as perpsHistoryQueryKey,Jt as perpsPositionsQueryKey,to as predictionBetsQueryKey,oo as predictionSettledQueryKey,It as splitUsd,Zt as spotHistoryQueryKey,Xt as spotHoldingsQueryKey,ue as truncateAddress,me as truncateMiddle,ze as useAccountInfo,ut as useCurveDataQuery,ft as useDistributionQuery,vt as useHoldingsSection,it as useOverviewQuery,pt as usePerpsHistoryQuery,lt as usePerpsPositionsQuery,yo as usePortfolioActivitiesScript,H as usePortfolioClient,ye as usePortfolioContext,So as usePortfolioNetWorthTokensScript,xt as usePortfolioPage,Do as usePortfolioPnlDetailsScript,dt as usePredictionBetsQuery,ct as usePredictionSettledQuery,Yr as useRefetchWalletSummary,at as useSpotHistoryQuery,ve as useSpotHoldingsQuery,rn as useWalletPortfolios,$e as useWalletSummary};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|