@kodiak-finance/orderly-vaults 2.8.18 → 2.8.19-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,17 +1,2933 @@
1
- import Q, { useState, useMemo, useEffect } from 'react';
1
+ import React, { useState, useMemo, useEffect } from 'react';
2
2
  import { useCollateral, useMaxWithdrawal, useTokenInfo, useAccount, useGetEnv, useTrack, useMutation, useConfig, usePrivateQuery } from '@kodiak-finance/orderly-hooks';
3
3
  import { create } from 'zustand';
4
4
  import { useTranslation } from '@kodiak-finance/orderly-i18n';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
6
  import { uniqBy } from 'ramda';
7
- import { registerSimpleDialog, registerSimpleSheet, Tabs, TabPanel, ArrowDownSquareFillIcon, ArrowUpSquareFillIcon, Box, Text, Button, useScreen, cn, modal, useModal, SimpleDialog, SimpleSheet, toast, ArrowRightUpSquareFillIcon, Divider, TokenIcon } from '@kodiak-finance/orderly-ui';
7
+ import { registerSimpleDialog, registerSimpleSheet, Tabs, TabPanel, ArrowDownSquareFillIcon, ArrowUpSquareFillIcon, Box, Text, Button, useScreen, cn, modal, useModal, SimpleDialog, SimpleSheet, toast, ArrowRightUpSquareFillIcon, Tooltip, InfoCircleIcon, Divider, TokenIcon } from '@kodiak-finance/orderly-ui';
8
8
  import { TrackerEventName, EMPTY_LIST } from '@kodiak-finance/orderly-types';
9
9
  import { Decimal } from '@kodiak-finance/orderly-utils';
10
10
  import { BrokerWallet, QuantityInput, AvailableQuantity } from '@kodiak-finance/orderly-ui-transfer';
11
11
  import { AuthGuard } from '@kodiak-finance/orderly-ui-connector';
12
12
 
13
- var So=Object.defineProperty;var n=(t,o)=>()=>(t&&(o=t(t=0)),o);var pt=(t,o)=>{for(var e in o)So(t,e,{get:o[e],enumerable:true});};var ee,oe,ct=n(()=>{ee={prod:"https://api-sv.orderly.org",staging:"https://testnet-api-sv.orderly.org",qa:"https://qa-api-sv-aliyun.orderly.org",dev:"https://dev-api-sv.orderly.org"},oe={prod:"https://app.orderly.network",staging:"https://staging-app.orderly.network",qa:"https://qa-app.orderly.network",dev:"https://dev-app.orderly.network"};});function X(){let t=useGetEnv();return useMemo(()=>ee[t],[t])}var dt=n(()=>{ct();});function _o(t){let o=Ro(t),e=new URLSearchParams;return Object.entries(o).forEach(([r,a])=>{a!=null&&e.append(r,String(a));}),e.toString()}function Ro(t){let o={};return Object.entries(t).forEach(([e,r])=>{r!=null&&(typeof r=="string"||typeof r=="number"||typeof r=="boolean"?o[e]=r:typeof r=="object"&&r!==null&&Object.entries(r).forEach(([s,i])=>{i!=null&&(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(o[s]=i);}));}),o}function Wo(t,o){if(!o||Object.keys(o).length===0)return t;let e=_o(o);if(!e)return t;let r=t.includes("?")?"&":"?";return `${t}${r}${e}`}var O,mt,Do,Z,re=n(()=>{O=class extends Error{constructor(e,r,a,s){super(e);this.code=r;this.status=a;this.response=s;this.name="VaultsApiError";}};mt=class{constructor(){this.requestInterceptors=[];this.responseInterceptors=[];this.defaultConfig={timeout:1e4,retry:3,retryDelay:1e3,validateStatus:o=>o>=200&&o<300,headers:{"Content-Type":"application/json"}};}addRequestInterceptor(o){this.requestInterceptors.push(o);}addResponseInterceptor(o){this.responseInterceptors.push(o);}createTimeoutController(o){let e=new AbortController;return setTimeout(()=>e.abort(),o),e}mergeHeaders(o={},e={}){return {...o,...e}}sleep(o){return new Promise(e=>setTimeout(e,o))}async request(o,e={}){let a={...this.defaultConfig,...e,headers:this.mergeHeaders(this.defaultConfig.headers,e.headers)};for(let S of this.requestInterceptors)a=await S(a);let s=o;typeof o=="string"&&!o.startsWith("http")&&a.baseURL&&(s=`${a.baseURL}${o.startsWith("/")?"":"/"}${o}`),a.params&&(s=typeof s=="string"?Wo(s,a.params):s);let i;a.timeout&&a.timeout>0&&(i=this.createTimeoutController(a.timeout),a.signal=i.signal);let{retry:u=0,retryDelay:m=1e3,validateStatus:h,params:l,baseURL:v,timeout:P,data:f,method:I,...C}=a,x={...C,method:I};f!==void 0&&(x.body=typeof f=="string"?f:JSON.stringify(f));let p;for(let S=0;S<=u;S++)try{let b=await fetch(s,x);if(!h(b.status)){let L=b.statusText,te;try{let lt=await b.json();L=lt.message||lt.code||L,te=lt.code;}catch{}throw new O(L,te,b.status,b)}let J;try{J=await b.json();}catch{throw new O("Invalid JSON response","PARSE_ERROR",b.status,b)}let V=J;for(let L of this.responseInterceptors)V=await L(b,V);if(typeof V=="object"&&V!==null&&"success"in V){let L=V;if(L.success)return L.data;throw new O(L.message||"API request failed",L.code,b.status,b)}return V}catch(b){if(p=b instanceof Error?b:new Error(String(b)),b instanceof O||b?.name==="AbortError"||S===u)throw p;S<u&&await this.sleep(m);}finally{i?.abort();}throw p}async get(o,e={}){return this.request(o,{...e,method:"GET"})}async post(o,e={}){return this.request(o,{...e,method:"POST"})}async put(o,e={}){return this.request(o,{...e,method:"PUT"})}async delete(o,e={}){return this.request(o,{...e,method:"DELETE"})}async patch(o,e={}){return this.request(o,{...e,method:"PATCH"})}},Do=new mt,Z=Do;});async function ae(t){return Z.get("/v1/public/strategy_vault/vault/info",{baseURL:t})}async function ie(t,o){return Z.get("/v1/public/strategy_vault/vault/performance",{params:o,baseURL:t})}async function se(t,o){return Z.get("/v1/public/strategy_vault/lp/info",{params:o,baseURL:t})}var ft=n(()=>{re();});var g,ne,La,Sa,Ca,Ta,_a,Ra,j,Wa,Da,Na,Aa,$=n(()=>{ft();g=create((t,o)=>({baseUrl:"",vaultInfo:{data:[],loading:false,error:null,lastUpdated:null},vaultLpPerformance:{data:{},loading:false,error:null,lastUpdated:null,params:null},vaultLpInfo:{data:{},loading:false,error:null,lastUpdated:null,params:null},vaultsPageConfig:null,setBaseUrl:e=>{t({baseUrl:e});},fetchVaultInfo:async e=>{let r=o(),a=e||r.baseUrl;if(!a){t(s=>({vaultInfo:{...s.vaultInfo,error:"Base URL is required"}}));return}t(s=>({baseUrl:e||s.baseUrl,vaultInfo:{...s.vaultInfo,loading:true,error:null}}));try{let s=await ae(a);t(i=>({vaultInfo:{...i.vaultInfo,data:s.rows,loading:!1,error:null,lastUpdated:Date.now()}}));}catch(s){t(i=>({vaultInfo:{...i.vaultInfo,loading:false,error:s instanceof Error?s.message:"Failed to fetch vault info"}}));}},refreshVaultInfo:async()=>{let e=o();e.vaultInfo.lastUpdated&&e.baseUrl&&await e.fetchVaultInfo();},fetchVaultLpPerformance:async(e,r)=>{let a=o(),s=r||a.baseUrl;if(!s){t(i=>({vaultLpPerformance:{...i.vaultLpPerformance,error:"Base URL is required"}}));return}t(i=>({baseUrl:r||i.baseUrl,vaultLpPerformance:{...i.vaultLpPerformance,loading:true,error:null,params:e}}));try{let i=await ie(s,e);t(u=>({vaultLpPerformance:{...u.vaultLpPerformance,data:{...u.vaultLpPerformance.data,[e.vault_id]:i.rows},loading:!1,error:null,lastUpdated:Date.now()}}));}catch(i){t(u=>({vaultLpPerformance:{...u.vaultLpPerformance,loading:false,error:i instanceof Error?i.message:"Failed to fetch vault LP performance"}}));}},refreshVaultLpPerformance:async()=>{let e=o();e.vaultLpPerformance.lastUpdated&&e.vaultLpPerformance.params&&e.baseUrl&&await e.fetchVaultLpPerformance(e.vaultLpPerformance.params);},fetchVaultLpInfo:async(e,r)=>{let a=o(),s=r||a.baseUrl;if(!s){t(i=>({vaultLpInfo:{...i.vaultLpInfo,error:"Base URL is required"}}));return}t(i=>({baseUrl:r||i.baseUrl,vaultLpInfo:{...i.vaultLpInfo,loading:true,error:null,params:e}}));try{let i=await se(s,e);t(u=>({vaultLpInfo:{...u.vaultLpInfo,data:{...u.vaultLpInfo.data,[e.vault_id]:i.rows},loading:!1,error:null,lastUpdated:Date.now()}}));}catch(i){t(u=>({vaultLpInfo:{...u.vaultLpInfo,loading:false,error:i instanceof Error?i.message:"Failed to fetch vault LP info"}}));}},refreshVaultLpInfo:async()=>{let e=o();e.vaultLpInfo.lastUpdated&&e.vaultLpInfo.params&&e.baseUrl&&await e.fetchVaultLpInfo(e.vaultLpInfo.params);},setVaultsPageConfig:e=>{t({vaultsPageConfig:e});}})),ne=()=>g(t=>t.vaultInfo),La=()=>g(t=>t.vaultLpPerformance),Sa=()=>g(t=>t.vaultLpInfo),Ca=()=>g(t=>({fetchVaultInfo:t.fetchVaultInfo,refreshVaultInfo:t.refreshVaultInfo})),Ta=()=>g(t=>({fetchVaultLpPerformance:t.fetchVaultLpPerformance,refreshVaultLpPerformance:t.refreshVaultLpPerformance})),_a=()=>g(t=>({fetchVaultLpInfo:t.fetchVaultLpInfo,refreshVaultLpInfo:t.refreshVaultLpInfo})),Ra=t=>g(o=>o.vaultLpPerformance.data[t]),j=t=>g(o=>o.vaultLpInfo.data[t]),Wa=()=>g(t=>Object.keys(t.vaultLpPerformance.data)),Da=()=>g(t=>Object.keys(t.vaultLpInfo.data)),Na=()=>g(t=>Object.values(t.vaultLpPerformance.data).flat()),Aa=()=>g(t=>Object.values(t.vaultLpInfo.data).flat());});var F=n(()=>{$();});var vt,ht=n(()=>{vt=t=>{let{supportVaults:o,headerImage:e,brokerName:r}=t,{t:a}=useTranslation(),s=useMemo(()=>jsx("div",{className:"oui-flex oui-items-center",children:o.map((u,m)=>jsx("img",{src:`https://oss.orderly.network/static/network_logo/${u.chain_id}.png`,alt:u.chain_id,className:"oui-relative oui-size-5",style:{marginLeft:m>0?"-4px":"0",zIndex:o.length-m}},u.chain_id))}),[o]),i=useMemo(()=>typeof e=="string"?jsx("img",{src:e,alt:"header",className:"oui-bg-contain oui-bg-center oui-bg-no-repeat"}):e,[e]);return jsxs("div",{className:"oui-flex oui-items-center oui-justify-between",children:[jsxs("div",{className:"oui-flex oui-max-w-[726px] oui-flex-col",children:[jsxs("div",{className:"oui-flex oui-items-center oui-gap-1 oui-text-[18px] oui-font-normal oui-text-base-contrast-54",children:[a("vaults.availableOn")," ",s]}),jsx("div",{className:"oui-mb-6 oui-mt-8 oui-text-5xl oui-font-bold oui-leading-[44px] oui-text-base-contrast",children:a("vaults.header.title")}),jsx("div",{className:"oui-text-xl oui-font-normal oui-text-base-contrast-54",children:a("vaults.header.description",{brokerName:r})})]}),jsx("div",{className:"oui-h-[238px] oui-w-[360px]",children:i})]})};});var de,me=n(()=>{de=t=>{let{supportVaults:o,headerImage:e}=t,{t:r}=useTranslation(),a=useConfig("brokerName"),s=useMemo(()=>jsx("div",{className:"oui-flex oui-items-center",children:o.map((u,m)=>jsx("img",{src:`https://oss.orderly.network/static/network_logo/${u.chain_id}.png`,alt:u.chain_id,className:"oui-relative oui-size-[18px]",style:{marginLeft:m>0?"-4px":"0",zIndex:o.length-m}},u.chain_id))}),[o]),i=useMemo(()=>typeof e=="string"?jsx("img",{src:e,alt:"header",className:"oui-bg-contain oui-bg-center oui-bg-no-repeat"}):e,[e]);return jsxs("div",{className:"oui-relative",children:[jsxs("div",{className:"oui-flex oui-flex-col",children:[jsxs("div",{className:"oui-flex oui-items-center oui-gap-1 oui-text-2xs oui-font-semibold oui-text-base-contrast-54",children:[r("vaults.availableOn")," ",s]}),jsx("div",{className:"oui-mb-4 oui-mt-6 oui-min-h-[56px] oui-max-w-[calc(100%-187px)] oui-text-xl oui-font-bold oui-text-base-contrast",children:r("vaults.header.title")}),jsx("div",{className:"oui-max-w-[450px] oui-text-2xs oui-font-normal oui-text-base-contrast-54",children:r("vaults.header.description",{brokerName:a})})]}),jsx("div",{className:"oui-absolute -oui-right-3 -oui-top-4 oui-h-[124px] oui-w-[187px]",children:i})]})};});var bt,yt=n(()=>{F();bt=()=>{let{vaultInfo:t,vaultsPageConfig:o}=g(),e=useConfig("brokerName");return {supportVaults:useMemo(()=>{let a=[];return t.data.forEach(s=>{a.push(...s.supported_chains);}),uniqBy(s=>s.chain_id,a)},[t.data]),headerImage:o?.headerImage,brokerName:e}};});var Bo,ge=n(()=>{ht();me();yt();Bo=()=>{let t=bt(),{isMobile:o}=useScreen();return o?jsx(de,{...t}):jsx(vt,{...t})};});var ve={};pt(ve,{VaultsHeaderDesktop:()=>vt,VaultsHeaderWidget:()=>Bo,useVaultsHeaderScript:()=>bt});var It=n(()=>{ge();ht();yt();});var xe,Vt,ye=n(()=>{xe=t=>{let{t:o}=useTranslation(),{isMobile:e}=useScreen(),{vaultsInfo:r}=t;return jsxs("div",{className:cn("oui-flex oui-items-center ","oui-via-21.6% oui-via-83.23% oui-bg-gradient-to-r oui-from-[rgba(var(--oui-gradient-neutral-end)/1)] oui-to-[rgba(var(--oui-gradient-neutral-start)/1)]",e?"oui-gap-3 oui-rounded-xl oui-p-3":"oui-gap-6 oui-rounded-2xl oui-p-6"),children:[jsx(Vt,{title:o("vaults.introduction.tvl"),value:r.tvl,textProps:{currency:"$"},isMobile:e}),jsx(Divider,{direction:"vertical",className:cn("oui-bg-white/[0.12]",e?"oui-h-[44px]":"oui-h-[64px]")}),jsx(Vt,{title:o("common.vaults"),value:r.vaultsCount,isMobile:e}),jsx(Divider,{direction:"vertical",className:cn("oui-bg-white/[0.12]",e?"oui-h-[44px]":"oui-h-[64px]")}),jsx(Vt,{title:o("vaults.introduction.depositors"),value:r.lpCount,isMobile:e})]})},Vt=t=>{let{title:o,value:e,textProps:r,isMobile:a}=t;return jsxs("div",{className:cn("oui-flex oui-flex-1 oui-flex-col oui-items-center ",a?"oui-gap-0.5":"oui-gap-3"),children:[jsx("div",{className:cn("oui-font-normal oui-text-base-contrast-54",a?"oui-text-2xs":"oui-text-base"),children:o}),jsx(Text.numeral,{className:cn("oui-font-semibold",a?"oui-text-base":"oui-text-xl"),dp:0,...r,children:e})]})};});var Ie,Ve=n(()=>{F();Ie=()=>{let{vaultInfo:t}=g();return {vaultsInfo:useMemo(()=>{let e=t.data.reduce((a,s)=>a+s.tvl,0),r=t.data.reduce((a,s)=>a+s.lp_counts,0);return {tvl:e,lpCount:r,vaultsCount:t.data.length}},[t.data])}};});var Go,we=n(()=>{ye();Ve();Go=()=>{let t=Ie();return jsx(xe,{...t})};});var Pe={};pt(Pe,{VaultsIntroductionWidget:()=>Go});var wt=n(()=>{we();});var Pt,D,T=n(()=>{Pt=(e=>(e.LP="lp",e.SP="sp",e))(Pt||{}),D=(e=>(e.DEPOSIT="deposit",e.WITHDRAWAL="withdrawal",e))(D||{});});var Le,Se=n(()=>{Le={prod:{vaultProtocol:"0x70Fe7d65Ac7c1a1732f64d2E6fC0E33622D0C991",vaultCrossChainManager:"0x58c9747ccAAE56182C7d9c814F5eaca395D8c93B",vaultPvLedger:"0xB7E792f0da9104A27288421583748215AefFFd78",vaultId:"0xa3426a1cef4052c056fced18099be899d93f1427d13b9a1df1806b91fad3d0c2",spAddress:"0x8bAA309D93FFFB54A64444FD98E10d92D4d9Eb22"},staging:{vaultProtocol:"0x6B6059259B4096ea6420Eb5e08a22214d2303aE9",vaultCrossChainManager:"0x510dD61a988797114A9a51b0d228E894037BD9cb",vaultPvLedger:"0x20AFe57C75D1C548A9Da265fBFC5416c43783589",vaultId:"0x95514fb145354f07bb889f711e856481b5ed52fce52200148aa834b3b29544c8",spAddress:"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"},qa:{vaultProtocol:"0xF5b12d5F1db6DAB8C7c0561152b5e4bb8fD5eb38",vaultCrossChainManager:"0xB8a3245407571804b4db5219cBe8D9F2EA1828DE",vaultPvLedger:"0x15c9B5705CaCB4eb140dfd7a8c651E18027e5146",vaultId:"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099",spAddress:"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"},dev:{vaultProtocol:"0xA292E1126703F804FBD5671F034c7226538C54C7",vaultCrossChainManager:"0x7568ACC147Af12b02713143C3177D7e89C28A9A6",vaultPvLedger:"0x2a5909498d85650744dD5CF964F2136962e5AE6E",vaultId:"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099",spAddress:"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"}};});var Ce,Te=n(()=>{T();Ce=(t,o)=>t==="deposit"&&o==="lp"?0:t==="withdrawal"&&o==="lp"?1:t==="deposit"&&o==="sp"?2:t==="withdrawal"&&o==="sp"?3:1;});var q,tt=n(()=>{q=t=>{let{type:o,vaultId:e}=t,{data:r,mutate:a}=usePrivateQuery(`/v1/account_sv_transaction_history?type=${o}&vault_id=${e}&size=1`,{formatter:i=>i?.rows||EMPTY_LIST,revalidateOnFocus:false});return {latestOperation:useMemo(()=>r?.[0],[r]),refetch:a}};});var et,Lt=n(()=>{Se();T();Te();tt();et=t=>{let{account:o,state:e}=useAccount(),r=useGetEnv(),{track:a}=useTrack(),s=useMemo(()=>Le[r].vaultPvLedger,[r]),[i]=useMutation("/v1/sv_operation_request"),{refetch:u}=q({type:t.type,vaultId:t.vaultId}),m=useMemo(()=>e?.accountId!==e?.mainAccountId,[e?.accountId,e?.mainAccountId]);return {handleOperation:async({amount:l,vaultId:v})=>{if(e.accountId!==e.mainAccountId){toast.error("Please switch to the main account to perform this operation.");return}if(t.type==="deposit"&&new Decimal(l).lt(10)){toast.error("Deposit amount is less than the minimum 10 USDC.");return}let f={payloadType:Ce(t.type,"lp"),amount:new Decimal(Number(l)).mul(10**6).toString(),vaultId:v,token:"USDC",domain:{name:"Orderly",version:"1",chainId:e.connectWallet?.chainId,verifyingContract:s}},{message:I,signatured:C}=await o.generateDexRequest(f);try{let x=await i({message:{...I,chainId:e.connectWallet?.chainId},signature:C,userAddress:e.address,verifyingContract:s});if(!x.success){t.type==="deposit"?a(TrackerEventName.vaultDepositFailed,{msg:x.message}):a(TrackerEventName.vaultWithdrawFailed,{msg:x.message}),toast.error(x.message);return}await u(),t.type==="deposit"?a(TrackerEventName.vaultDepositSuccess,{quantity:l,vaultId:v}):a(TrackerEventName.vaultWithdrawSuccess,{quantity:l,vaultId:v}),toast.success(`${t.type} successful`);}catch(x){let p=x instanceof Error?x.message:String(x);t.type==="deposit"?a(TrackerEventName.vaultDepositFailed,{msg:p}):a(TrackerEventName.vaultWithdrawFailed,{msg:p}),toast.error(p);}},disabledOperation:m}};});var We,De=n(()=>{$();T();Lt();We=t=>{let{vaultId:o}=t,[e,r]=useState(""),{vaultInfo:a}=g(),{handleOperation:s,disabledOperation:i}=et({type:"deposit",vaultId:o}),{holding:u}=useCollateral(),{t:m}=useTranslation(),h=a.data[0]?.min_deposit_amount||0,l=useMaxWithdrawal("USDC"),v=useMemo(()=>u?.find(V=>V.token==="USDC")?.holding||0,[u]),P=useMemo(()=>Math.min(l,v),[l,v]),f=useMemo(()=>a.data.find(L=>L.vault_id===o)?.est_main_share_price,[a.data,o]),I=useMemo(()=>!f||!e?"-":new Decimal(e).div(f).toString(),[e,f]),C=async()=>{!I||I==="-"||(await s({amount:e,vaultId:o}),r(""));},x=useTokenInfo("USDC"),p=useMemo(()=>({...x,display_name:x?.token,symbol:x?.token}),[x]),S=V=>{if(V&&new Decimal(V).gt(P)){r(P.toString());return}r(V);},b=useMemo(()=>!e||e==="0"||i||!!e&&new Decimal(e).lt(h),[e,i]),J=useMemo(()=>e&&new Decimal(e).lt(h)?{hintMessage:m("vaults.operation.error.minDeposit",{amount:h}),status:"error"}:{hintMessage:"",status:""},[e,m,l,v]);return {quantity:e,onQuantityChange:S,sourceToken:p,maxQuantity:P,sharePrice:f,shares:I,handleDeposit:C,vaultId:o,disabledDeposit:b,disabledOperation:i,inputHint:J}};});var Ne,Ae=n(()=>{T();tt();Ne=({vaultId:t})=>{let{latestOperation:o}=q({type:"deposit",vaultId:t});return {latestOperation:o}};});var rt,St=n(()=>{rt=t=>t==="completed"?"success":t==="rejected"||t==="failed"?"danger":"primary";});var Ue,Ee=n(()=>{St();Ue=t=>{let{latestOperation:o}=t,{t:e}=useTranslation();return o?jsxs("div",{className:"oui-mt-3 oui-flex oui-flex-col oui-gap-2",children:[jsx("div",{className:"oui-text-xs oui-font-normal oui-text-base-contrast-54",children:e("vaults.deposit.latestDeposit")}),jsx("div",{className:"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3",children:jsxs("div",{className:"oui-flex oui-items-center",children:[jsx("div",{className:cn("oui-mr-1 oui-size-1 oui-rounded-full",o.status==="completed"&&"oui-bg-success",o.status==="rejected"&&"oui-bg-danger",o.status==="failed"&&"oui-bg-danger",(o.status==="pending"||o.status==="new")&&"oui-bg-primary")}),jsx(Text,{color:rt(o.status),className:"oui-text-xs oui-font-normal",children:o.status.slice(0,1).toUpperCase()+o.status.slice(1)}),jsx(TokenIcon,{name:"USDC",className:"oui-ml-auto oui-mr-1 oui-size-4"}),jsx(Text.numeral,{className:"oui-text-sm oui-font-semibold oui-text-base-contrast-80",children:o.amount_change})]})})]}):null};});var ke,Ct=n(()=>{Ae();Ee();ke=t=>{let{vaultId:o}=t,e=Ne({vaultId:o});return jsx(Ue,{...e})};});var qe,Me=n(()=>{Ct();qe=t=>{let{quantity:o,onQuantityChange:e,sourceToken:r,maxQuantity:a,shares:s,handleDeposit:i,vaultId:u,disabledDeposit:m,disabledOperation:h,inputHint:l}=t,{t:v}=useTranslation();return jsxs("div",{children:[jsx(BrokerWallet,{}),jsx(Box,{mt:3,mb:1,children:jsx(QuantityInput,{value:o,onValueChange:e,token:{...r,precision:6},testId:"oui-testid-vault-deposit-dialog-quantity-input",hintMessage:l.hintMessage,status:l.status})}),jsx(AvailableQuantity,{maxQuantity:a?.toString()||"0",onClick:()=>{e(a?.toString()||"0");}}),jsxs(Box,{mt:5,mb:1,className:"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",children:[jsx("div",{children:v("vaults.deposit.estShares")}),jsx(Text.numeral,{dp:6,padding:false,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-54",children:v("vaults.deposit.shares")}),children:s})]}),jsxs(Box,{mb:5,className:"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",children:[jsx("div",{children:v("vaults.deposit.lockupDuration")}),jsx(Text.numeral,{suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-54",children:"hrs"}),children:"48"})]}),h&&jsx("div",{className:"oui-mt-3 oui-text-center",children:jsx(Text,{color:"warning",className:"oui-text-sm oui-font-semibold",children:v("vaults.operation.error.switchAccount")})}),jsx(Button,{fullWidth:true,color:"primary",disabled:m,className:"oui-mt-3",onClick:i,children:v("common.deposit")}),jsx(ke,{vaultId:u})]})};});var Be,He=n(()=>{De();Me();Be=t=>{let{vaultId:o}=t,e=We({vaultId:o});return jsx(qe,{...e})};});var Wt=n(()=>{He();});var ze,Qe=n(()=>{F();T();Lt();ze=t=>{let{vaultId:o}=t,[e,r]=useState(""),{handleOperation:a,disabledOperation:s}=et({type:"withdrawal",vaultId:o}),i=j(o),{vaultInfo:u}=g(),{t:m}=useTranslation(),h=useMemo(()=>u.data.find(S=>S.vault_id===o)?.est_main_share_price||0,[u.data,o]),l=i?.[0]?.available_main_shares||0,v=useMemo(()=>!e||!h?"-":new Decimal(e).mul(h).toString(),[e,h]),P=async()=>{await a({amount:e,vaultId:o});},f=p=>{p&&new Decimal(p).gt(l)?r(l.toString()):r(p);},I=useMemo(()=>!e||!u.data[0]?.est_main_share_price||!u.data[0]?.min_withdrawal_amount||e===l.toString()?false:new Decimal(e).mul(u.data[0]?.est_main_share_price).lt(u.data[0]?.min_withdrawal_amount),[e,u,l]),C=useMemo(()=>!e||e==="0"||s||!!e&&I,[e,s]),x=useMemo(()=>e&&I?{hintMessage:m("vaults.operation.error.minWithdrawal",{amount:u.data[0]?.min_withdrawal_amount}),status:"error"}:{hintMessage:"",status:""},[e,m]);return {quantity:e,onQuantityChange:f,maxQuantity:l,handleWithdraw:P,vaultId:o,sharePrice:h,receivingAmount:v,disabledWithdraw:C,disabledOperation:s,inputHint:x}};});var $e,Ge=n(()=>{T();tt();$e=({vaultId:t})=>{let{latestOperation:o}=q({type:"withdrawal",vaultId:t});return {latestOperation:o}};});var Nt,Ye,At,Ir,at,Ot=n(()=>{Nt=()=>jsx("div",{className:"oui-size-2 oui-rounded-full oui-bg-white/[0.54]"}),Ye=()=>jsx("div",{className:"oui-h-px oui-flex-1 oui-bg-white/[0.2]"}),At=({children:t,className:o})=>jsx("div",{className:cn("oui-flex-1 oui-text-2xs oui-font-normal oui-text-base-contrast-80",o),children:t}),Ir=()=>{let{t}=useTranslation();return jsxs(Fragment,{children:[jsxs("div",{className:"oui-flex oui-items-center",children:[jsx(Nt,{}),jsx("div",{className:"oui-flex-1",children:jsx(Ye,{})}),jsx(Nt,{}),jsx("div",{className:"oui-flex-1",children:jsx(Ye,{})}),jsx(Nt,{})]}),jsxs("div",{className:"oui-mt-1 oui-flex oui-justify-between",children:[jsx(At,{children:t("vaults.withdraw.process.initiate")}),jsx(At,{className:"oui-text-center",children:t("vaults.withdraw.process.vaultProcess")}),jsx(At,{className:"oui-text-right",children:t("vaults.withdraw.process.transferred")})]})]})},at=()=>{let{t}=useTranslation();return jsxs("div",{className:"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-border oui-border-white/[0.12] oui-p-3",children:[jsxs("div",{className:"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",children:[jsx("div",{children:t("vaults.withdraw.process.withdrawProcess")}),jsx(Text,{color:"primary",children:t("vaults.withdraw.process.upTo")})]}),jsx(Ir,{})]})};});var Ze,je=n(()=>{St();Ot();Ze=t=>{let{latestOperation:o}=t,{t:e}=useTranslation();return o?jsxs("div",{className:"oui-mt-3 oui-flex oui-flex-col oui-gap-2",children:[jsx("div",{className:"oui-text-xs oui-font-normal oui-text-base-contrast-54",children:e("vaults.withdraw.latestWithdraw")}),jsx("div",{className:"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3",children:jsxs("div",{className:"oui-flex oui-items-center",children:[jsx("div",{className:cn("oui-mr-1 oui-size-1 oui-rounded-full",o.status==="completed"&&"oui-bg-success",o.status==="rejected"&&"oui-bg-danger",o.status==="failed"&&"oui-bg-danger",(o.status==="pending"||o.status==="new")&&"oui-bg-primary")}),jsx(Text,{color:rt(o.status),className:"oui-text-xs oui-font-normal",children:o.status.slice(0,1).toUpperCase()+o.status.slice(1)}),jsx(TokenIcon,{name:"USDC",className:"oui-ml-auto oui-mr-1 oui-size-4"}),jsx(Text.numeral,{className:"oui-text-sm oui-font-semibold oui-text-base-contrast-80",children:o.amount_change||"-"})]})})]}):jsx(at,{})};});var to,eo=n(()=>{Ge();je();to=t=>{let{vaultId:o}=t,e=$e({vaultId:o});return jsx(Ze,{...e})};});var Ft=n(()=>{eo();});var ao,it,io,Or,Fr,so=n(()=>{Ft();Ot();ao=t=>{let{quantity:o,onQuantityChange:e,maxQuantity:r,handleWithdraw:a,vaultId:s,sharePrice:i,receivingAmount:u,disabledWithdraw:m,disabledOperation:h,inputHint:l}=t,{isMobile:v}=useScreen(),P=()=>{modal.show(v?Fr:Or,{quantity:o,receivingAmount:u,handleWithdraw:a});},{t:f}=useTranslation();return jsxs("div",{children:[jsx(BrokerWallet,{}),jsx(Box,{mt:3,mb:1,children:jsx(QuantityInput,{value:o,onValueChange:e,token:{display_name:"Shares",precision:6},testId:"oui-testid-vault-withdraw-dialog-quantity-input",hintMessage:l.hintMessage,status:l.status})}),jsx(AvailableQuantity,{maxQuantity:r,onClick:()=>{e(r.toString());}}),jsx(it,{label:f("vaults.withdraw.estPricePerShare"),currency:"$",value:i||"-",className:"oui-mb-1 oui-mt-5"}),jsx(it,{label:f("vaults.withdraw.estReceivingAmount"),value:u,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"USDC"}),className:"oui-mb-5"}),h&&jsx("div",{className:"oui-mt-3 oui-text-center",children:jsx(Text,{color:"warning",className:"oui-text-sm oui-font-semibold",children:f("vaults.operation.error.switchAccount")})}),jsx(Button,{fullWidth:true,color:"primary",disabled:m,className:"oui-mt-3",onClick:P,children:f("common.withdraw")}),jsx("div",{className:"oui-mt-3",children:jsx(to,{vaultId:s})})]})},it=({label:t,value:o,suffix:e,currency:r,className:a})=>jsxs("div",{className:cn("oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",a),children:[jsx("div",{children:t}),jsx(Text.numeral,{currency:r,className:"oui-text-base-contrast",suffix:e,children:o})]}),io=t=>{let{quantity:o,receivingAmount:e,handleWithdraw:r,hide:a}=t,{t:s}=useTranslation();return jsxs("div",{className:"oui-flex oui-flex-col",children:[jsx(it,{label:s("vaults.withdraw.dialog.withdrawalAmount"),value:o,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"Shares"})}),jsx(it,{label:s("vaults.withdraw.dialog.estimatedReceiving"),value:e,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"USDC"}),className:"oui-mt-1"}),jsx(Text,{color:"warning",className:"oui-my-5 oui-text-sm oui-font-semibold",children:s("vaults.withdraw.dialog.note")}),jsx(at,{}),jsx(Button,{fullWidth:true,color:"primary",className:"oui-mt-5",onClick:async()=>{await r(),a?.();},children:s("vaults.withdraw.dialog.initiateWithdrawal")})]})},Or=modal.create(({quantity:t,receivingAmount:o,handleWithdraw:e})=>{let{visible:r,hide:a,onOpenChange:s}=useModal(),{t:i}=useTranslation();return jsx(SimpleDialog,{title:i("vaults.withdraw.dialog.title"),open:r,onOpenChange:s,children:jsx(io,{quantity:t,receivingAmount:o,handleWithdraw:e,hide:a})})}),Fr=modal.create(({quantity:t,receivingAmount:o,handleWithdraw:e})=>{let{visible:r,hide:a,onOpenChange:s}=useModal(),{t:i}=useTranslation();return jsx(SimpleSheet,{title:i("vaults.withdraw.dialog.title"),open:r,onOpenChange:s,children:jsx(io,{quantity:t,receivingAmount:o,handleWithdraw:e,hide:a})})});});var no,uo=n(()=>{Qe();so();no=t=>{let{vaultId:o}=t,e=ze({vaultId:o});return jsx(ao,{...e})};});var qt=n(()=>{uo();});var Mt,Bt,po,Ht=n(()=>{Wt();qt();Mt="VaultDepositAndWithdrawWithDialogId",Bt="VaultDepositAndWithdrawWithSheetId",po=t=>{let[o,e]=useState(t.activeTab||"deposit"),{vaultId:r}=t,{t:a}=useTranslation();return jsxs(Tabs,{value:o,onValueChange:e,variant:"contained",size:"lg",classNames:{tabsList:"oui-px-0",tabsContent:"oui-pt-5"},children:[jsx(TabPanel,{title:a("common.deposit"),icon:jsx(ArrowDownSquareFillIcon,{}),value:"deposit",children:jsx(Be,{vaultId:r})}),jsx(TabPanel,{title:a("common.withdraw"),icon:jsx(ArrowUpSquareFillIcon,{}),value:"withdraw",children:jsx(no,{vaultId:r})})]})};registerSimpleDialog(Mt,po,{size:"md",classNames:{content:"oui-border oui-border-line-6"}});registerSimpleSheet(Bt,po);});var co,wn,Pn,zt=n(()=>{co="https://oss.orderly.network/static/symbol_logo/ORDER.png",wn="Orderly OmniVault",Pn="Earn passive yields effortlessly, no trading expertise required. OmniVault deploys market-making strategies, taking on liquidations, and accrue platform fees.";});var mo,Qt=n(()=>{ct();dt();$();Ht();zt();mo=t=>{let{t:o}=useTranslation(),e=j(t.vault_id),{fetchVaultLpInfo:r}=g(),a=useGetEnv(),{isMobile:s}=useScreen(),{state:i}=useAccount(),u=X(),{holding:m}=useCollateral(),h=useMemo(()=>m?.find(p=>p.token==="USDC")?.holding||0,[m]);useEffect(()=>{!i.address||!u||!t.vault_id||r({vault_id:t.vault_id,wallet_address:i.address},u);},[t.vault_id,i.address,u]);let l=useMemo(()=>h,[h]),v=useMemo(()=>{let p=e?.[0];return p?{deposits:p.lp_tvl-p.potential_pnl,earnings:p.potential_pnl}:{deposits:"--",earnings:"--"}},[e]),P=useMemo(()=>i.chainNamespace==="EVM",[i.chainNamespace]),f=useMemo(()=>i.chainNamespace==="SOL",[i.chainNamespace]),I=useMemo(()=>i.chainNamespace!=="EVM"&&i.chainNamespace!=="SOL"&&i.accountId!==i.mainAccountId,[i.chainNamespace,i.accountId,i.mainAccountId]),C=p=>{modal.show(s?Bt:Mt,{activeTab:p,vaultId:t.vault_id});},x=()=>{let p=oe[a];window.open(`${p}/vaults`,"_blank");};return {title:o("vaults.card.orderly.title"),description:o("vaults.card.orderly.description"),icon:co,vaultInfo:t,lpInfo:v,isEVMConnected:P,isSOLConnected:f,openDepositAndWithdraw:C,availableBalance:l,openVaultWebsite:x,isWrongNetwork:I}};});var ho,fo,Gt,ra,Kt=n(()=>{ho=t=>{let{title:o,vaultInfo:e,lpInfo:r,description:a,isEVMConnected:s,isSOLConnected:i,openDepositAndWithdraw:u,availableBalance:m,openVaultWebsite:h}=t,{t:l}=useTranslation(),{isMobile:v}=useScreen(),P=useMemo(()=>jsx("div",{className:"oui-flex oui-items-center",children:e.supported_chains.map((f,I)=>jsx("img",{src:`https://oss.orderly.network/static/network_logo/${f.chain_id}.png`,alt:f.chain_id,className:cn("oui-relative",v?"oui-size-[18px]":"oui-size-5"),style:{marginLeft:I>0?"-4px":"0",zIndex:e.supported_chains.length-I}},f.chain_id))}),[e.supported_chains]);return jsxs("div",{className:"oui-relative oui-h-[388px] oui-overflow-hidden oui-rounded-2xl oui-border oui-border-solid oui-border-white/[0.12] oui-bg-base-9",children:[jsx("div",{style:{position:"absolute",top:0,right:0,width:"100%",height:"180px",backdropFilter:"blur(2px)",zIndex:1,background:"linear-gradient(180deg, rgba(44, 5, 69, 0.80) 0%, rgba(19, 21, 25, 0.80) 63.46%, #131519 100%)"}}),jsx("img",{src:"/vaults/orderly_vault_card_bg.png",alt:"",style:{position:"absolute",top:0,right:0,width:"100%",height:"180px",zIndex:0}}),jsxs("div",{className:"oui-absolute oui-left-0 oui-top-0 oui-z-20 oui-flex oui-flex-col oui-gap-3 oui-p-6",children:[jsxs("div",{className:"oui-flex oui-items-center oui-gap-2",children:[jsx("img",{src:"https://oss.orderly.network/static/symbol_logo/ORDER.png",alt:"",className:"oui-size-8"}),jsx("div",{className:"oui-text-[18px] oui-font-semibold oui-text-white",children:o}),P,jsx("div",{className:"oui-z-50 oui-ml-auto oui-cursor-pointer",onClick:h,children:jsx(ArrowRightUpSquareFillIcon,{color:"white",width:18,height:18,viewBox:"0 0 18 18"})})]}),jsx("div",{className:"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54",children:a}),jsxs("div",{className:"oui-flex oui-items-center oui-gap-2",children:[jsx(fo,{label:l("vaults.card.tvl"),value:e.tvl,textProps:{currency:"$",dp:0,type:"numeral"}}),jsx(fo,{label:l("vaults.card.apy"),value:(e["30d_apy"]*100).toFixed(2)+"%",textProps:{color:"brand",type:"gradient"}})]}),jsxs("div",{className:"oui-mt-3 oui-flex oui-flex-col oui-items-center oui-gap-2 oui-rounded-lg oui-bg-white/[0.06] oui-p-3",children:[jsx(Gt,{label:l("vaults.card.myDeposits"),value:r.deposits}),jsx(Gt,{label:l("vaults.card.myEarnings"),value:r.earnings})]}),jsx(Gt,{label:l("vaults.card.accountBalance"),value:m}),jsx(ra,{isEVMConnected:s,isSOLConnected:i,openDepositAndWithdraw:u})]})]})},fo=t=>{let{label:o,value:e,textProps:r}=t;return jsxs("div",{className:cn("oui-flex oui-flex-1 oui-flex-col oui-items-center oui-justify-center oui-px-3 oui-py-2","oui-rounded-lg oui-border oui-border-solid oui-border-white/[0.12]"),children:[jsx("div",{className:"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54",children:o}),r.type==="gradient"?jsx(Text.gradient,{className:"oui-text-base oui-font-semibold",...r,children:e}):jsx(Text.numeral,{className:"oui-text-base oui-font-semibold",...r,children:e})]})},Gt=t=>{let{label:o,value:e,textProps:r}=t;return jsxs("div",{className:"oui-flex oui-w-full oui-items-center oui-justify-between oui-text-2xs oui-font-normal",children:[jsx("div",{className:"oui-text-base-contrast-54",children:o}),jsx(Text.numeral,{className:"oui-text-base-contrast-80",...r,dp:2,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"USDC"}),children:e})]})},ra=t=>{let{isEVMConnected:o,isSOLConnected:e,openDepositAndWithdraw:r}=t,{t:a}=useTranslation();return jsx(AuthGuard,{buttonProps:{size:"md",fullWidth:true},children:o||e?jsxs("div",{className:"oui-flex oui-items-center oui-gap-2",children:[jsx(Button,{className:"oui-flex-1",size:"md",onClick:()=>r("deposit"),children:a("common.deposit")}),jsx(Button,{className:"oui-flex-1",size:"md",color:"secondary",onClick:()=>r("withdraw"),children:a("common.withdraw")})]}):jsx(Button,{size:"md",color:"warning",children:a("connector.wrongNetwork")})})};});var nt,xo=n(()=>{Qt();Kt();nt=t=>{let{vault:o}=t,e=mo(o);return jsx(ho,{...e})};});var ut=n(()=>{xo();Qt();Kt();zt();});var Xt,Zt=n(()=>{ut();Xt=t=>{let{vaults:o}=t,{t:e}=useTranslation();return jsxs("div",{className:"oui-flex oui-flex-col oui-gap-6",children:[jsx("div",{className:"oui-text-xl oui-font-normal oui-text-base-contrast",children:e("vaults.allVaults")}),jsx("div",{className:"oui-grid oui-grid-cols-3 oui-gap-4 min-[1024px]:oui-grid-cols-3",children:o.map(r=>jsx(nt,{vault:r},r.vault_id))})]})};});var yo,Io=n(()=>{ut();yo=t=>{let{vaults:o}=t;return jsx("div",{className:"oui-flex oui-flex-col oui-gap-3",children:o.map(e=>jsx(nt,{vault:e},e.vault_id))})};});var ua,wo=n(()=>{$();Zt();Io();ua=()=>{let{data:t}=ne(),{isMobile:o}=useScreen();return o?jsx(yo,{vaults:t}):jsx(Xt,{vaults:t})};});var Po={};pt(Po,{AllVaultsDesktop:()=>Xt,AllVaultsWidget:()=>ua});var jt=n(()=>{wo();Zt();});dt();F();var le=t=>{let o=X(),{fetchVaultInfo:e,setVaultsPageConfig:r}=g();return useEffect(()=>{t.config&&r(t.config);},[t.config]),useEffect(()=>{o&&e(o);},[o]),jsx("div",{children:t.children})};var pa=Q.lazy(()=>Promise.resolve().then(()=>(It(),ve)).then(t=>({default:t.VaultsHeaderWidget}))),ca=Q.lazy(()=>Promise.resolve().then(()=>(wt(),Pe)).then(t=>({default:t.VaultsIntroductionWidget}))),da=Q.lazy(()=>Promise.resolve().then(()=>(jt(),Po)).then(t=>({default:t.AllVaultsWidget}))),hu=t=>{let{isMobile:o}=useScreen();return jsx(le,{...t,children:jsx("div",{className:cn("oui-relative oui-min-h-screen ","oui-bg-base-10",o?"oui-px-3 oui-py-6":"oui-px-6 oui-py-12",t?.className),children:jsxs("div",{id:"vaults-content",className:cn("oui-mx-auto oui-flex oui-max-w-[1200px] oui-flex-col",o?"oui-gap-6":"oui-gap-12"),children:[jsx(Q.Suspense,{fallback:null,children:jsx(pa,{})}),jsx(Q.Suspense,{fallback:null,children:jsx(ca,{})}),jsx(Q.Suspense,{fallback:null,children:jsx(da,{})})]})})})};T();ft();F();jt();ut();It();wt();Ht();Wt();qt();Ct();Ft();
13
+ var __defProp = Object.defineProperty;
14
+ var __getOwnPropNames = Object.getOwnPropertyNames;
15
+ var __esm = (fn, res) => function __init() {
16
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
17
+ };
18
+ var __export = (target, all) => {
19
+ for (var name in all)
20
+ __defProp(target, name, { get: all[name], enumerable: true });
21
+ };
14
22
 
15
- export { Xt as AllVaultsDesktop, ua as AllVaultsWidget, ke as LatestDepositWidget, to as LatestWithdrawWidget, co as ORDERLY_ICON, Pn as ORDERLY_VAULT_DESCRIPTION, wn as ORDERLY_VAULT_TITLE, D as OperationType, Pt as RoleType, ho as VaultCard, nt as VaultCardWidget, po as VaultDepositAndWithdraw, Mt as VaultDepositAndWithdrawWithDialogId, Bt as VaultDepositAndWithdrawWithSheetId, Be as VaultDepositWidget, no as VaultWithdrawWidget, vt as VaultsHeaderDesktop, Bo as VaultsHeaderWidget, Go as VaultsIntroductionWidget, hu as VaultsPage, ae as getVaultInfo, se as getVaultLpInfo, ie as getVaultLpPerformance, mo as useVaultCardScript, Ca as useVaultInfoActions, ne as useVaultInfoState, _a as useVaultLpInfoActions, Aa as useVaultLpInfoArray, j as useVaultLpInfoById, Da as useVaultLpInfoIds, Sa as useVaultLpInfoState, Ta as useVaultLpPerformanceActions, Na as useVaultLpPerformanceArray, Ra as useVaultLpPerformanceById, Wa as useVaultLpPerformanceIds, La as useVaultLpPerformanceState, bt as useVaultsHeaderScript, g as useVaultsStore };
23
+ // src/api/env.ts
24
+ var VAULTS_API_URLS, VAULTS_WEBSITE_URLS;
25
+ var init_env = __esm({
26
+ "src/api/env.ts"() {
27
+ VAULTS_API_URLS = {
28
+ prod: "https://api-sv.orderly.org",
29
+ staging: "https://testnet-api-sv.orderly.org",
30
+ qa: "https://qa-api-sv-aliyun.orderly.org",
31
+ dev: "https://dev-api-sv.orderly.org"
32
+ };
33
+ VAULTS_WEBSITE_URLS = {
34
+ prod: "https://app.orderly.network",
35
+ staging: "https://staging-app.orderly.network",
36
+ qa: "https://qa-app.orderly.network",
37
+ dev: "https://dev-app.orderly.network"
38
+ };
39
+ }
40
+ });
41
+ function useSVApiUrl() {
42
+ const env = useGetEnv();
43
+ const apiUrl = useMemo(() => {
44
+ return VAULTS_API_URLS[env];
45
+ }, [env]);
46
+ return apiUrl;
47
+ }
48
+ var init_useSVAPIUrl = __esm({
49
+ "src/hooks/useSVAPIUrl.ts"() {
50
+ init_env();
51
+ }
52
+ });
53
+
54
+ // src/api/request.ts
55
+ function buildQueryString(params) {
56
+ const filteredParams = filterUndefinedParams(params);
57
+ const searchParams = new URLSearchParams();
58
+ Object.entries(filteredParams).forEach(([key, value]) => {
59
+ if (value !== null && value !== void 0) {
60
+ searchParams.append(key, String(value));
61
+ }
62
+ });
63
+ return searchParams.toString();
64
+ }
65
+ function filterUndefinedParams(params) {
66
+ const filtered = {};
67
+ Object.entries(params).forEach(([key, value]) => {
68
+ if (value !== void 0 && value !== null) {
69
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
70
+ filtered[key] = value;
71
+ } else if (typeof value === "object" && value !== null) {
72
+ const objEntries = Object.entries(value);
73
+ objEntries.forEach(([objKey, objValue]) => {
74
+ if (objValue !== void 0 && objValue !== null && (typeof objValue === "string" || typeof objValue === "number" || typeof objValue === "boolean")) {
75
+ filtered[objKey] = objValue;
76
+ }
77
+ });
78
+ }
79
+ }
80
+ });
81
+ return filtered;
82
+ }
83
+ function appendQueryParams(url, params) {
84
+ if (!params || Object.keys(params).length === 0) {
85
+ return url;
86
+ }
87
+ const queryString = buildQueryString(params);
88
+ if (!queryString) {
89
+ return url;
90
+ }
91
+ const separator = url.includes("?") ? "&" : "?";
92
+ return `${url}${separator}${queryString}`;
93
+ }
94
+ var VaultsApiError, RequestClient, defaultClient, request_default;
95
+ var init_request = __esm({
96
+ "src/api/request.ts"() {
97
+ VaultsApiError = class extends Error {
98
+ constructor(message, code, status, response) {
99
+ super(message);
100
+ this.code = code;
101
+ this.status = status;
102
+ this.response = response;
103
+ this.name = "VaultsApiError";
104
+ }
105
+ };
106
+ RequestClient = class {
107
+ constructor() {
108
+ this.requestInterceptors = [];
109
+ this.responseInterceptors = [];
110
+ this.defaultConfig = {
111
+ timeout: 1e4,
112
+ retry: 3,
113
+ retryDelay: 1e3,
114
+ validateStatus: (status) => status >= 200 && status < 300,
115
+ // mode: 'cors',
116
+ // credentials: 'include',
117
+ headers: {
118
+ "Content-Type": "application/json"
119
+ }
120
+ };
121
+ }
122
+ // Add request interceptor
123
+ addRequestInterceptor(interceptor) {
124
+ this.requestInterceptors.push(interceptor);
125
+ }
126
+ // Add response interceptor
127
+ addResponseInterceptor(interceptor) {
128
+ this.responseInterceptors.push(interceptor);
129
+ }
130
+ // Create timeout controller
131
+ createTimeoutController(timeout) {
132
+ const controller = new AbortController();
133
+ setTimeout(() => controller.abort(), timeout);
134
+ return controller;
135
+ }
136
+ // Merge headers
137
+ mergeHeaders(defaultHeaders = {}, customHeaders = {}) {
138
+ return {
139
+ ...defaultHeaders,
140
+ ...customHeaders
141
+ };
142
+ }
143
+ // Sleep utility for retry delay
144
+ sleep(ms) {
145
+ return new Promise((resolve) => setTimeout(resolve, ms));
146
+ }
147
+ // Main request method
148
+ async request(url, config = {}) {
149
+ const finalConfig = {
150
+ ...this.defaultConfig,
151
+ ...config,
152
+ headers: this.mergeHeaders(this.defaultConfig.headers, config.headers)
153
+ };
154
+ let processedConfig = finalConfig;
155
+ for (const interceptor of this.requestInterceptors) {
156
+ processedConfig = await interceptor(processedConfig);
157
+ }
158
+ let fullUrl = url;
159
+ if (typeof url === "string" && !url.startsWith("http") && processedConfig.baseURL) {
160
+ fullUrl = `${processedConfig.baseURL}${url.startsWith("/") ? "" : "/"}${url}`;
161
+ }
162
+ if (processedConfig.params) {
163
+ fullUrl = typeof fullUrl === "string" ? appendQueryParams(fullUrl, processedConfig.params) : fullUrl;
164
+ }
165
+ let timeoutController;
166
+ if (processedConfig.timeout && processedConfig.timeout > 0) {
167
+ timeoutController = this.createTimeoutController(processedConfig.timeout);
168
+ processedConfig.signal = timeoutController.signal;
169
+ }
170
+ const {
171
+ retry = 0,
172
+ retryDelay = 1e3,
173
+ validateStatus,
174
+ params,
175
+ baseURL,
176
+ timeout,
177
+ data,
178
+ method,
179
+ ...fetchOptions
180
+ } = processedConfig;
181
+ const finalFetchOptions = {
182
+ ...fetchOptions,
183
+ method
184
+ };
185
+ if (data !== void 0) {
186
+ finalFetchOptions.body = typeof data === "string" ? data : JSON.stringify(data);
187
+ }
188
+ let lastError;
189
+ for (let attempt = 0; attempt <= retry; attempt++) {
190
+ try {
191
+ const response = await fetch(fullUrl, finalFetchOptions);
192
+ if (!validateStatus(response.status)) {
193
+ let errorMessage = response.statusText;
194
+ let errorCode;
195
+ try {
196
+ const errorData = await response.json();
197
+ errorMessage = errorData.message || errorData.code || errorMessage;
198
+ errorCode = errorData.code;
199
+ } catch {
200
+ }
201
+ throw new VaultsApiError(
202
+ errorMessage,
203
+ errorCode,
204
+ response.status,
205
+ response
206
+ );
207
+ }
208
+ let responseData;
209
+ try {
210
+ responseData = await response.json();
211
+ } catch {
212
+ throw new VaultsApiError(
213
+ "Invalid JSON response",
214
+ "PARSE_ERROR",
215
+ response.status,
216
+ response
217
+ );
218
+ }
219
+ let processedData = responseData;
220
+ for (const interceptor of this.responseInterceptors) {
221
+ processedData = await interceptor(response, processedData);
222
+ }
223
+ if (typeof processedData === "object" && processedData !== null) {
224
+ if ("success" in processedData) {
225
+ const apiResponse = processedData;
226
+ if (apiResponse.success) {
227
+ return apiResponse.data;
228
+ } else {
229
+ throw new VaultsApiError(
230
+ apiResponse.message || "API request failed",
231
+ apiResponse.code,
232
+ response.status,
233
+ response
234
+ );
235
+ }
236
+ }
237
+ }
238
+ return processedData;
239
+ } catch (error) {
240
+ lastError = error instanceof Error ? error : new Error(String(error));
241
+ if (error instanceof VaultsApiError || error?.name === "AbortError" || attempt === retry) {
242
+ throw lastError;
243
+ }
244
+ if (attempt < retry) {
245
+ await this.sleep(retryDelay);
246
+ }
247
+ } finally {
248
+ timeoutController?.abort();
249
+ }
250
+ }
251
+ throw lastError;
252
+ }
253
+ // Simplified HTTP methods - all accept a single config object
254
+ async get(url, config = {}) {
255
+ return this.request(url, { ...config, method: "GET" });
256
+ }
257
+ async post(url, config = {}) {
258
+ return this.request(url, { ...config, method: "POST" });
259
+ }
260
+ async put(url, config = {}) {
261
+ return this.request(url, { ...config, method: "PUT" });
262
+ }
263
+ async delete(url, config = {}) {
264
+ return this.request(url, { ...config, method: "DELETE" });
265
+ }
266
+ async patch(url, config = {}) {
267
+ return this.request(url, { ...config, method: "PATCH" });
268
+ }
269
+ };
270
+ defaultClient = new RequestClient();
271
+ request_default = defaultClient;
272
+ }
273
+ });
274
+
275
+ // src/api/api.ts
276
+ async function getVaultInfo(baseUrl, params) {
277
+ return request_default.get(
278
+ "/v1/public/strategy_vault/vault/info",
279
+ {
280
+ params,
281
+ baseURL: baseUrl
282
+ }
283
+ );
284
+ }
285
+ async function getVaultLpPerformance(baseUrl, params) {
286
+ return request_default.get(
287
+ "/v1/public/strategy_vault/vault/performance",
288
+ {
289
+ params,
290
+ baseURL: baseUrl
291
+ }
292
+ );
293
+ }
294
+ async function getVaultLpInfo(baseUrl, params) {
295
+ return request_default.get(
296
+ "/v1/public/strategy_vault/lp/info",
297
+ {
298
+ params,
299
+ baseURL: baseUrl
300
+ }
301
+ );
302
+ }
303
+ async function getVaultOverallInfo(baseUrl, params) {
304
+ return request_default.get(
305
+ "/v1/public/strategy_vault/vault/overall_info",
306
+ {
307
+ params,
308
+ baseURL: baseUrl
309
+ }
310
+ );
311
+ }
312
+ var init_api = __esm({
313
+ "src/api/api.ts"() {
314
+ init_request();
315
+ }
316
+ });
317
+ var useVaultsStore, useVaultInfoState, useVaultLpPerformanceState, useVaultLpInfoState, useVaultOverallInfoState, useVaultInfoActions, useVaultLpPerformanceActions, useVaultLpInfoActions, useVaultOverallInfoActions, useVaultLpPerformanceById, useVaultLpInfoById, useVaultLpPerformanceIds, useVaultLpInfoIds, useVaultLpPerformanceArray, useVaultLpInfoArray;
318
+ var init_vaultsStore = __esm({
319
+ "src/store/vaultsStore.ts"() {
320
+ init_api();
321
+ useVaultsStore = create((set, get) => ({
322
+ // Initial state
323
+ baseUrl: "",
324
+ vaultInfo: {
325
+ data: [],
326
+ loading: false,
327
+ error: null,
328
+ lastUpdated: null,
329
+ params: null
330
+ },
331
+ vaultLpPerformance: {
332
+ data: {},
333
+ loading: false,
334
+ error: null,
335
+ lastUpdated: null,
336
+ params: null
337
+ },
338
+ vaultLpInfo: {
339
+ data: {},
340
+ loading: false,
341
+ error: null,
342
+ lastUpdated: null,
343
+ params: null
344
+ },
345
+ vaultOverallInfo: {
346
+ data: null,
347
+ loading: false,
348
+ error: null,
349
+ lastUpdated: null,
350
+ params: null
351
+ },
352
+ vaultsPageConfig: null,
353
+ // Set base URL
354
+ setBaseUrl: (baseUrl) => {
355
+ set({ baseUrl });
356
+ },
357
+ // Vault info actions
358
+ fetchVaultInfo: async (params, baseUrl) => {
359
+ const state = get();
360
+ const url = baseUrl || state.baseUrl;
361
+ if (!url) {
362
+ set((state2) => ({
363
+ vaultInfo: {
364
+ ...state2.vaultInfo,
365
+ error: "Base URL is required"
366
+ }
367
+ }));
368
+ return;
369
+ }
370
+ set((state2) => ({
371
+ baseUrl: baseUrl || state2.baseUrl,
372
+ vaultInfo: {
373
+ ...state2.vaultInfo,
374
+ loading: true,
375
+ error: null,
376
+ params: params || null
377
+ }
378
+ }));
379
+ try {
380
+ const response = await getVaultInfo(url, params);
381
+ set((state2) => ({
382
+ vaultInfo: {
383
+ ...state2.vaultInfo,
384
+ data: response.rows,
385
+ loading: false,
386
+ error: null,
387
+ lastUpdated: Date.now()
388
+ }
389
+ }));
390
+ } catch (error) {
391
+ set((state2) => ({
392
+ vaultInfo: {
393
+ ...state2.vaultInfo,
394
+ loading: false,
395
+ error: error instanceof Error ? error.message : "Failed to fetch vault info"
396
+ }
397
+ }));
398
+ }
399
+ },
400
+ refreshVaultInfo: async () => {
401
+ const state = get();
402
+ if (state.vaultInfo.lastUpdated && state.baseUrl) {
403
+ await state.fetchVaultInfo(state.vaultInfo.params || void 0);
404
+ }
405
+ },
406
+ // Vault LP performance actions
407
+ fetchVaultLpPerformance: async (params, baseUrl) => {
408
+ const state = get();
409
+ const url = baseUrl || state.baseUrl;
410
+ if (!url) {
411
+ set((state2) => ({
412
+ vaultLpPerformance: {
413
+ ...state2.vaultLpPerformance,
414
+ error: "Base URL is required"
415
+ }
416
+ }));
417
+ return;
418
+ }
419
+ set((state2) => ({
420
+ baseUrl: baseUrl || state2.baseUrl,
421
+ vaultLpPerformance: {
422
+ ...state2.vaultLpPerformance,
423
+ loading: true,
424
+ error: null,
425
+ params
426
+ }
427
+ }));
428
+ try {
429
+ const response = await getVaultLpPerformance(
430
+ url,
431
+ params
432
+ );
433
+ set((state2) => ({
434
+ vaultLpPerformance: {
435
+ ...state2.vaultLpPerformance,
436
+ data: {
437
+ ...state2.vaultLpPerformance.data,
438
+ [params.vault_id]: response.rows
439
+ },
440
+ loading: false,
441
+ error: null,
442
+ lastUpdated: Date.now()
443
+ }
444
+ }));
445
+ } catch (error) {
446
+ set((state2) => ({
447
+ vaultLpPerformance: {
448
+ ...state2.vaultLpPerformance,
449
+ loading: false,
450
+ error: error instanceof Error ? error.message : "Failed to fetch vault LP performance"
451
+ }
452
+ }));
453
+ }
454
+ },
455
+ refreshVaultLpPerformance: async () => {
456
+ const state = get();
457
+ if (state.vaultLpPerformance.lastUpdated && state.vaultLpPerformance.params && state.baseUrl) {
458
+ await state.fetchVaultLpPerformance(state.vaultLpPerformance.params);
459
+ }
460
+ },
461
+ // Vault LP info actions
462
+ fetchVaultLpInfo: async (params, baseUrl) => {
463
+ const state = get();
464
+ const url = baseUrl || state.baseUrl;
465
+ if (!url) {
466
+ set((state2) => ({
467
+ vaultLpInfo: {
468
+ ...state2.vaultLpInfo,
469
+ error: "Base URL is required"
470
+ }
471
+ }));
472
+ return;
473
+ }
474
+ set((state2) => ({
475
+ baseUrl: baseUrl || state2.baseUrl,
476
+ vaultLpInfo: {
477
+ ...state2.vaultLpInfo,
478
+ loading: true,
479
+ error: null,
480
+ params
481
+ }
482
+ }));
483
+ try {
484
+ const response = await getVaultLpInfo(url, params);
485
+ set((state2) => ({
486
+ vaultLpInfo: {
487
+ ...state2.vaultLpInfo,
488
+ data: {
489
+ ...state2.vaultLpInfo.data,
490
+ [params.vault_id]: response.rows
491
+ },
492
+ loading: false,
493
+ error: null,
494
+ lastUpdated: Date.now()
495
+ }
496
+ }));
497
+ } catch (error) {
498
+ set((state2) => ({
499
+ vaultLpInfo: {
500
+ ...state2.vaultLpInfo,
501
+ loading: false,
502
+ error: error instanceof Error ? error.message : "Failed to fetch vault LP info"
503
+ }
504
+ }));
505
+ }
506
+ },
507
+ refreshVaultLpInfo: async () => {
508
+ const state = get();
509
+ if (state.vaultLpInfo.lastUpdated && state.vaultLpInfo.params && state.baseUrl) {
510
+ await state.fetchVaultLpInfo(state.vaultLpInfo.params);
511
+ }
512
+ },
513
+ // Vault overall info actions
514
+ fetchVaultOverallInfo: async (params, baseUrl) => {
515
+ const state = get();
516
+ const url = baseUrl || state.baseUrl;
517
+ if (!url) {
518
+ set((state2) => ({
519
+ vaultOverallInfo: {
520
+ ...state2.vaultOverallInfo,
521
+ error: "Base URL is required"
522
+ }
523
+ }));
524
+ return;
525
+ }
526
+ set((state2) => ({
527
+ baseUrl: baseUrl || state2.baseUrl,
528
+ vaultOverallInfo: {
529
+ ...state2.vaultOverallInfo,
530
+ loading: true,
531
+ error: null,
532
+ params: params || null
533
+ }
534
+ }));
535
+ try {
536
+ const response = await getVaultOverallInfo(
537
+ url,
538
+ params
539
+ );
540
+ set((state2) => ({
541
+ vaultOverallInfo: {
542
+ ...state2.vaultOverallInfo,
543
+ data: response,
544
+ loading: false,
545
+ error: null,
546
+ lastUpdated: Date.now()
547
+ }
548
+ }));
549
+ } catch (error) {
550
+ set((state2) => ({
551
+ vaultOverallInfo: {
552
+ ...state2.vaultOverallInfo,
553
+ loading: false,
554
+ error: error instanceof Error ? error.message : "Failed to fetch vault overall info"
555
+ }
556
+ }));
557
+ }
558
+ },
559
+ refreshVaultOverallInfo: async () => {
560
+ const state = get();
561
+ if (state.vaultOverallInfo.lastUpdated && state.baseUrl) {
562
+ await state.fetchVaultOverallInfo(
563
+ state.vaultOverallInfo.params || void 0
564
+ );
565
+ }
566
+ },
567
+ setVaultsPageConfig: (config) => {
568
+ set({ vaultsPageConfig: config });
569
+ }
570
+ }));
571
+ useVaultInfoState = () => useVaultsStore((state) => state.vaultInfo);
572
+ useVaultLpPerformanceState = () => useVaultsStore((state) => state.vaultLpPerformance);
573
+ useVaultLpInfoState = () => useVaultsStore((state) => state.vaultLpInfo);
574
+ useVaultOverallInfoState = () => useVaultsStore((state) => state.vaultOverallInfo);
575
+ useVaultInfoActions = () => useVaultsStore((state) => ({
576
+ fetchVaultInfo: state.fetchVaultInfo,
577
+ refreshVaultInfo: state.refreshVaultInfo
578
+ }));
579
+ useVaultLpPerformanceActions = () => useVaultsStore((state) => ({
580
+ fetchVaultLpPerformance: state.fetchVaultLpPerformance,
581
+ refreshVaultLpPerformance: state.refreshVaultLpPerformance
582
+ }));
583
+ useVaultLpInfoActions = () => useVaultsStore((state) => ({
584
+ fetchVaultLpInfo: state.fetchVaultLpInfo,
585
+ refreshVaultLpInfo: state.refreshVaultLpInfo
586
+ }));
587
+ useVaultOverallInfoActions = () => useVaultsStore((state) => ({
588
+ fetchVaultOverallInfo: state.fetchVaultOverallInfo,
589
+ refreshVaultOverallInfo: state.refreshVaultOverallInfo
590
+ }));
591
+ useVaultLpPerformanceById = (vaultId) => useVaultsStore((state) => state.vaultLpPerformance.data[vaultId]);
592
+ useVaultLpInfoById = (vaultId) => useVaultsStore((state) => state.vaultLpInfo.data[vaultId]);
593
+ useVaultLpPerformanceIds = () => useVaultsStore((state) => Object.keys(state.vaultLpPerformance.data));
594
+ useVaultLpInfoIds = () => useVaultsStore((state) => Object.keys(state.vaultLpInfo.data));
595
+ useVaultLpPerformanceArray = () => useVaultsStore(
596
+ (state) => Object.values(state.vaultLpPerformance.data).flat()
597
+ );
598
+ useVaultLpInfoArray = () => useVaultsStore((state) => Object.values(state.vaultLpInfo.data).flat());
599
+ }
600
+ });
601
+
602
+ // src/store/index.ts
603
+ var init_store = __esm({
604
+ "src/store/index.ts"() {
605
+ init_vaultsStore();
606
+ }
607
+ });
608
+ var VaultsHeaderDesktop;
609
+ var init_vaults_header_desktop = __esm({
610
+ "src/components/vaults-header/vaults-header.desktop.tsx"() {
611
+ VaultsHeaderDesktop = (props) => {
612
+ const { supportVaults, headerImage, brokerName } = props;
613
+ const { t } = useTranslation();
614
+ const supportVaultsList = useMemo(() => {
615
+ return /* @__PURE__ */ jsx("div", { className: "oui-flex oui-items-center", children: supportVaults.map((chain, index) => /* @__PURE__ */ jsx(
616
+ "img",
617
+ {
618
+ src: `https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`,
619
+ alt: chain.chain_id,
620
+ className: "oui-relative oui-size-5",
621
+ style: {
622
+ marginLeft: index > 0 ? "-4px" : "0",
623
+ zIndex: supportVaults.length - index
624
+ }
625
+ },
626
+ chain.chain_id
627
+ )) });
628
+ }, [supportVaults]);
629
+ const headerImageElement = useMemo(() => {
630
+ if (typeof headerImage === "string") {
631
+ return /* @__PURE__ */ jsx(
632
+ "img",
633
+ {
634
+ src: headerImage,
635
+ alt: "header",
636
+ className: "oui-bg-contain oui-bg-center oui-bg-no-repeat"
637
+ }
638
+ );
639
+ }
640
+ return headerImage;
641
+ }, [headerImage]);
642
+ return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-justify-between", children: [
643
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-max-w-[726px] oui-flex-col", children: [
644
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-gap-1 oui-text-[18px] oui-font-normal oui-text-base-contrast-54", children: [
645
+ t("vaults.availableOn"),
646
+ " ",
647
+ supportVaultsList
648
+ ] }),
649
+ /* @__PURE__ */ jsx("div", { className: "oui-mb-6 oui-mt-8 oui-text-5xl oui-font-bold oui-leading-[44px] oui-text-base-contrast", children: t("vaults.header.title") }),
650
+ /* @__PURE__ */ jsx("div", { className: "oui-text-xl oui-font-normal oui-text-base-contrast-54", children: t("vaults.header.description", { brokerName }) })
651
+ ] }),
652
+ /* @__PURE__ */ jsx("div", { className: "oui-h-[238px] oui-w-[360px]", children: headerImageElement })
653
+ ] });
654
+ };
655
+ }
656
+ });
657
+ var VaultsHeaderMobile;
658
+ var init_vaults_header_mobile = __esm({
659
+ "src/components/vaults-header/vaults-header.mobile.tsx"() {
660
+ VaultsHeaderMobile = (props) => {
661
+ const { supportVaults, headerImage } = props;
662
+ const { t } = useTranslation();
663
+ const brokerName = useConfig("brokerName");
664
+ const supportVaultsList = useMemo(() => {
665
+ return /* @__PURE__ */ jsx("div", { className: "oui-flex oui-items-center", children: supportVaults.map((chain, index) => /* @__PURE__ */ jsx(
666
+ "img",
667
+ {
668
+ src: `https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`,
669
+ alt: chain.chain_id,
670
+ className: "oui-relative oui-size-[18px]",
671
+ style: {
672
+ marginLeft: index > 0 ? "-4px" : "0",
673
+ zIndex: supportVaults.length - index
674
+ }
675
+ },
676
+ chain.chain_id
677
+ )) });
678
+ }, [supportVaults]);
679
+ const headerImageElement = useMemo(() => {
680
+ if (typeof headerImage === "string") {
681
+ return /* @__PURE__ */ jsx(
682
+ "img",
683
+ {
684
+ src: headerImage,
685
+ alt: "header",
686
+ className: "oui-bg-contain oui-bg-center oui-bg-no-repeat"
687
+ }
688
+ );
689
+ }
690
+ return headerImage;
691
+ }, [headerImage]);
692
+ return /* @__PURE__ */ jsxs("div", { className: "oui-relative", children: [
693
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col", children: [
694
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-gap-1 oui-text-2xs oui-font-semibold oui-text-base-contrast-54", children: [
695
+ t("vaults.availableOn"),
696
+ " ",
697
+ supportVaultsList
698
+ ] }),
699
+ /* @__PURE__ */ jsx("div", { className: "oui-mb-4 oui-mt-6 oui-min-h-[56px] oui-max-w-[calc(100%-187px)] oui-text-xl oui-font-bold oui-text-base-contrast", children: t("vaults.header.title") }),
700
+ /* @__PURE__ */ jsx("div", { className: "oui-max-w-[450px] oui-text-2xs oui-font-normal oui-text-base-contrast-54", children: t("vaults.header.description", { brokerName }) })
701
+ ] }),
702
+ /* @__PURE__ */ jsx("div", { className: "oui-absolute -oui-right-3 -oui-top-4 oui-h-[124px] oui-w-[187px]", children: headerImageElement })
703
+ ] });
704
+ };
705
+ }
706
+ });
707
+ var useVaultsHeaderScript;
708
+ var init_vaults_header_script = __esm({
709
+ "src/components/vaults-header/vaults-header.script.ts"() {
710
+ init_store();
711
+ useVaultsHeaderScript = () => {
712
+ const { vaultInfo, vaultsPageConfig } = useVaultsStore();
713
+ const brokerName = useConfig("brokerName");
714
+ const supportVaults = useMemo(() => {
715
+ const array = [];
716
+ vaultInfo.data.forEach((vault) => {
717
+ array.push(...vault.supported_chains);
718
+ });
719
+ return uniqBy((item) => item.chain_id, array);
720
+ }, [vaultInfo.data]);
721
+ return {
722
+ supportVaults,
723
+ headerImage: vaultsPageConfig?.headerImage,
724
+ brokerName
725
+ };
726
+ };
727
+ }
728
+ });
729
+ var VaultsHeaderWidget;
730
+ var init_vaults_header_widget = __esm({
731
+ "src/components/vaults-header/vaults-header.widget.tsx"() {
732
+ init_vaults_header_desktop();
733
+ init_vaults_header_mobile();
734
+ init_vaults_header_script();
735
+ VaultsHeaderWidget = () => {
736
+ const state = useVaultsHeaderScript();
737
+ const { isMobile } = useScreen();
738
+ return isMobile ? /* @__PURE__ */ jsx(VaultsHeaderMobile, { ...state }) : /* @__PURE__ */ jsx(VaultsHeaderDesktop, { ...state });
739
+ };
740
+ }
741
+ });
742
+
743
+ // src/components/vaults-header/index.ts
744
+ var vaults_header_exports = {};
745
+ __export(vaults_header_exports, {
746
+ VaultsHeaderDesktop: () => VaultsHeaderDesktop,
747
+ VaultsHeaderWidget: () => VaultsHeaderWidget,
748
+ useVaultsHeaderScript: () => useVaultsHeaderScript
749
+ });
750
+ var init_vaults_header = __esm({
751
+ "src/components/vaults-header/index.ts"() {
752
+ init_vaults_header_widget();
753
+ init_vaults_header_desktop();
754
+ init_vaults_header_script();
755
+ }
756
+ });
757
+ var VaultsIntroductionDesktop, VaultsIntroductionItem;
758
+ var init_vaults_introduction_desktop = __esm({
759
+ "src/components/vaults-introduction/vaults-introduction.desktop.tsx"() {
760
+ VaultsIntroductionDesktop = (props) => {
761
+ const { t } = useTranslation();
762
+ const { isMobile } = useScreen();
763
+ const { vaultsInfo } = props;
764
+ return /* @__PURE__ */ jsxs(
765
+ "div",
766
+ {
767
+ className: cn(
768
+ "oui-flex oui-items-center ",
769
+ "oui-bg-gradient-to-b oui-from-[#26292E] oui-to-[#1B1D22]",
770
+ isMobile ? "oui-gap-3 oui-rounded-xl oui-p-3" : "oui-gap-6 oui-rounded-2xl oui-p-6"
771
+ ),
772
+ children: [
773
+ /* @__PURE__ */ jsx(
774
+ VaultsIntroductionItem,
775
+ {
776
+ title: t("vaults.introduction.tvl"),
777
+ value: vaultsInfo.tvl,
778
+ textProps: { currency: "$" },
779
+ isMobile
780
+ }
781
+ ),
782
+ /* @__PURE__ */ jsx(
783
+ Divider,
784
+ {
785
+ direction: "vertical",
786
+ className: cn(
787
+ "oui-bg-white/[0.12]",
788
+ isMobile ? "oui-h-[44px]" : "oui-h-[64px]"
789
+ )
790
+ }
791
+ ),
792
+ /* @__PURE__ */ jsx(
793
+ VaultsIntroductionItem,
794
+ {
795
+ title: t("common.vaults"),
796
+ value: vaultsInfo.vaultsCount,
797
+ isMobile
798
+ }
799
+ ),
800
+ /* @__PURE__ */ jsx(
801
+ Divider,
802
+ {
803
+ direction: "vertical",
804
+ className: cn(
805
+ "oui-bg-white/[0.12]",
806
+ isMobile ? "oui-h-[44px]" : "oui-h-[64px]"
807
+ )
808
+ }
809
+ ),
810
+ /* @__PURE__ */ jsx(
811
+ VaultsIntroductionItem,
812
+ {
813
+ title: t("vaults.introduction.depositors"),
814
+ value: vaultsInfo.lpCount,
815
+ isMobile
816
+ }
817
+ )
818
+ ]
819
+ }
820
+ );
821
+ };
822
+ VaultsIntroductionItem = (props) => {
823
+ const { title, value, textProps, isMobile } = props;
824
+ return /* @__PURE__ */ jsxs(
825
+ "div",
826
+ {
827
+ className: cn(
828
+ "oui-flex oui-flex-1 oui-flex-col oui-items-center ",
829
+ isMobile ? "oui-gap-0.5" : "oui-gap-3"
830
+ ),
831
+ children: [
832
+ /* @__PURE__ */ jsx(
833
+ "div",
834
+ {
835
+ className: cn(
836
+ "oui-font-normal oui-text-base-contrast-54",
837
+ isMobile ? "oui-text-2xs" : "oui-text-base"
838
+ ),
839
+ children: title
840
+ }
841
+ ),
842
+ /* @__PURE__ */ jsx(
843
+ Text.numeral,
844
+ {
845
+ className: cn(
846
+ "oui-font-semibold",
847
+ isMobile ? "oui-text-base" : "oui-text-xl"
848
+ ),
849
+ dp: 0,
850
+ ...textProps,
851
+ children: value
852
+ }
853
+ )
854
+ ]
855
+ }
856
+ );
857
+ };
858
+ }
859
+ });
860
+ var useVaultsIntroductionScript;
861
+ var init_vaults_introduction_script = __esm({
862
+ "src/components/vaults-introduction/vaults-introduction.script.ts"() {
863
+ init_store();
864
+ useVaultsIntroductionScript = () => {
865
+ const { data: overallInfo, loading, error } = useVaultOverallInfoState();
866
+ const vaultsInfo = useMemo(() => {
867
+ if (!overallInfo) {
868
+ return {
869
+ tvl: 0,
870
+ lpCount: 0,
871
+ vaultsCount: 0
872
+ };
873
+ }
874
+ return {
875
+ tvl: overallInfo.strategy_vaults_tvl,
876
+ lpCount: overallInfo.strategy_vaults_lp_count,
877
+ vaultsCount: overallInfo.strategy_vaults_count
878
+ };
879
+ }, [overallInfo]);
880
+ return {
881
+ vaultsInfo,
882
+ loading,
883
+ error
884
+ };
885
+ };
886
+ }
887
+ });
888
+ var VaultsIntroductionWidget;
889
+ var init_vaults_introduction_widget = __esm({
890
+ "src/components/vaults-introduction/vaults-introduction.widget.tsx"() {
891
+ init_vaults_introduction_desktop();
892
+ init_vaults_introduction_script();
893
+ VaultsIntroductionWidget = () => {
894
+ const state = useVaultsIntroductionScript();
895
+ return /* @__PURE__ */ jsx(VaultsIntroductionDesktop, { ...state });
896
+ };
897
+ }
898
+ });
899
+
900
+ // src/components/vaults-introduction/index.ts
901
+ var vaults_introduction_exports = {};
902
+ __export(vaults_introduction_exports, {
903
+ VaultsIntroductionWidget: () => VaultsIntroductionWidget
904
+ });
905
+ var init_vaults_introduction = __esm({
906
+ "src/components/vaults-introduction/index.ts"() {
907
+ init_vaults_introduction_widget();
908
+ }
909
+ });
910
+
911
+ // src/types/vault.ts
912
+ var RoleType, OperationType;
913
+ var init_vault = __esm({
914
+ "src/types/vault.ts"() {
915
+ RoleType = /* @__PURE__ */ ((RoleType2) => {
916
+ RoleType2["LP"] = "lp";
917
+ RoleType2["SP"] = "sp";
918
+ return RoleType2;
919
+ })(RoleType || {});
920
+ OperationType = /* @__PURE__ */ ((OperationType2) => {
921
+ OperationType2["DEPOSIT"] = "deposit";
922
+ OperationType2["WITHDRAWAL"] = "withdrawal";
923
+ return OperationType2;
924
+ })(OperationType || {});
925
+ }
926
+ });
927
+
928
+ // src/contract/index.ts
929
+ var VAULTS_CONTRACT_ADDRESSES;
930
+ var init_contract = __esm({
931
+ "src/contract/index.ts"() {
932
+ VAULTS_CONTRACT_ADDRESSES = {
933
+ prod: {
934
+ vaultProtocol: "0x70Fe7d65Ac7c1a1732f64d2E6fC0E33622D0C991",
935
+ vaultCrossChainManager: "0x58c9747ccAAE56182C7d9c814F5eaca395D8c93B",
936
+ vaultPvLedger: "0xB7E792f0da9104A27288421583748215AefFFd78",
937
+ vaultId: "0xa3426a1cef4052c056fced18099be899d93f1427d13b9a1df1806b91fad3d0c2",
938
+ spAddress: "0x8bAA309D93FFFB54A64444FD98E10d92D4d9Eb22"
939
+ },
940
+ staging: {
941
+ vaultProtocol: "0x6B6059259B4096ea6420Eb5e08a22214d2303aE9",
942
+ vaultCrossChainManager: "0x510dD61a988797114A9a51b0d228E894037BD9cb",
943
+ vaultPvLedger: "0x20AFe57C75D1C548A9Da265fBFC5416c43783589",
944
+ vaultId: "0x95514fb145354f07bb889f711e856481b5ed52fce52200148aa834b3b29544c8",
945
+ spAddress: "0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"
946
+ },
947
+ qa: {
948
+ vaultProtocol: "0xF5b12d5F1db6DAB8C7c0561152b5e4bb8fD5eb38",
949
+ vaultCrossChainManager: "0xB8a3245407571804b4db5219cBe8D9F2EA1828DE",
950
+ vaultPvLedger: "0x15c9B5705CaCB4eb140dfd7a8c651E18027e5146",
951
+ vaultId: "0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099",
952
+ spAddress: "0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"
953
+ },
954
+ dev: {
955
+ vaultProtocol: "0xA292E1126703F804FBD5671F034c7226538C54C7",
956
+ vaultCrossChainManager: "0x7568ACC147Af12b02713143C3177D7e89C28A9A6",
957
+ vaultPvLedger: "0x2a5909498d85650744dD5CF964F2136962e5AE6E",
958
+ vaultId: "0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099",
959
+ spAddress: "0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"
960
+ }
961
+ };
962
+ }
963
+ });
964
+
965
+ // src/utils/operationPayload.ts
966
+ var getToAccountPayloadType;
967
+ var init_operationPayload = __esm({
968
+ "src/utils/operationPayload.ts"() {
969
+ init_vault();
970
+ getToAccountPayloadType = (type, role) => {
971
+ if (type === "deposit" /* DEPOSIT */ && role === "lp" /* LP */) {
972
+ return 0;
973
+ }
974
+ if (type === "withdrawal" /* WITHDRAWAL */ && role === "lp" /* LP */) {
975
+ return 1;
976
+ }
977
+ if (type === "deposit" /* DEPOSIT */ && role === "sp" /* SP */) {
978
+ return 2;
979
+ }
980
+ if (type === "withdrawal" /* WITHDRAWAL */ && role === "sp" /* SP */) {
981
+ return 3;
982
+ }
983
+ return 1;
984
+ };
985
+ }
986
+ });
987
+ var useLatestOperationScript;
988
+ var init_latest_script = __esm({
989
+ "src/components/vault-operation/depositAndWithdraw/latest.script.ts"() {
990
+ useLatestOperationScript = (props) => {
991
+ const { type, vaultId } = props;
992
+ const { data: operationHistory, mutate: mutateOperationHistory } = usePrivateQuery(
993
+ `/v1/account_sv_transaction_history?type=${type}&vault_id=${vaultId}&size=1`,
994
+ {
995
+ formatter: (response) => {
996
+ return response?.rows || EMPTY_LIST;
997
+ },
998
+ revalidateOnFocus: false
999
+ }
1000
+ );
1001
+ const latestOperation = useMemo(() => {
1002
+ return operationHistory?.[0];
1003
+ }, [operationHistory]);
1004
+ return {
1005
+ latestOperation,
1006
+ refetch: mutateOperationHistory
1007
+ };
1008
+ };
1009
+ }
1010
+ });
1011
+ var useOperationScript;
1012
+ var init_operation_script = __esm({
1013
+ "src/components/vault-operation/depositAndWithdraw/operation.script.ts"() {
1014
+ init_contract();
1015
+ init_vault();
1016
+ init_operationPayload();
1017
+ init_latest_script();
1018
+ useOperationScript = (props) => {
1019
+ const { account, state } = useAccount();
1020
+ const env = useGetEnv();
1021
+ const { track } = useTrack();
1022
+ const verifyingContract = useMemo(() => {
1023
+ return VAULTS_CONTRACT_ADDRESSES[env].vaultPvLedger;
1024
+ }, [env]);
1025
+ const [postVaultOperation] = useMutation("/v1/sv_operation_request");
1026
+ const { refetch: refetchOperationHistory } = useLatestOperationScript({
1027
+ type: props.type,
1028
+ vaultId: props.vaultId
1029
+ });
1030
+ const disabledOperation = useMemo(() => {
1031
+ return state?.accountId !== state?.mainAccountId;
1032
+ }, [state?.accountId, state?.mainAccountId]);
1033
+ const handleOperation = async ({
1034
+ amount,
1035
+ vaultId
1036
+ }) => {
1037
+ if (state.accountId !== state.mainAccountId) {
1038
+ toast.error(
1039
+ "Please switch to the main account to perform this operation."
1040
+ );
1041
+ return;
1042
+ }
1043
+ if (props.type === "deposit" /* DEPOSIT */) {
1044
+ if (new Decimal(amount).lt(10)) {
1045
+ toast.error("Deposit amount is less than the minimum 10 USDC.");
1046
+ return;
1047
+ }
1048
+ }
1049
+ const payloadType = getToAccountPayloadType(props.type, "lp" /* LP */);
1050
+ const requestParams = {
1051
+ payloadType,
1052
+ amount: new Decimal(Number(amount)).mul(10 ** 6).toString(),
1053
+ vaultId,
1054
+ token: "USDC",
1055
+ domain: {
1056
+ name: "Orderly",
1057
+ version: "1",
1058
+ chainId: state.connectWallet?.chainId,
1059
+ verifyingContract
1060
+ }
1061
+ };
1062
+ const { message, signatured } = await account.generateDexRequest(requestParams);
1063
+ try {
1064
+ const res = await postVaultOperation({
1065
+ message: {
1066
+ ...message,
1067
+ chainId: state.connectWallet?.chainId
1068
+ },
1069
+ signature: signatured,
1070
+ userAddress: state.address,
1071
+ verifyingContract
1072
+ });
1073
+ if (!res.success) {
1074
+ if (props.type === "deposit" /* DEPOSIT */) {
1075
+ track(TrackerEventName.vaultDepositFailed, {
1076
+ msg: res.message
1077
+ });
1078
+ } else {
1079
+ track(TrackerEventName.vaultWithdrawFailed, {
1080
+ msg: res.message
1081
+ });
1082
+ }
1083
+ toast.error(res.message);
1084
+ return;
1085
+ }
1086
+ await refetchOperationHistory();
1087
+ if (props.type === "deposit" /* DEPOSIT */) {
1088
+ track(TrackerEventName.vaultDepositSuccess, {
1089
+ quantity: amount,
1090
+ vaultId
1091
+ });
1092
+ } else {
1093
+ track(TrackerEventName.vaultWithdrawSuccess, {
1094
+ quantity: amount,
1095
+ vaultId
1096
+ });
1097
+ }
1098
+ toast.success(`${props.type} successful`);
1099
+ } catch (error) {
1100
+ const errorMessage = error instanceof Error ? error.message : String(error);
1101
+ if (props.type === "deposit" /* DEPOSIT */) {
1102
+ track(TrackerEventName.vaultDepositFailed, {
1103
+ msg: errorMessage
1104
+ });
1105
+ } else {
1106
+ track(TrackerEventName.vaultWithdrawFailed, {
1107
+ msg: errorMessage
1108
+ });
1109
+ }
1110
+ toast.error(errorMessage);
1111
+ }
1112
+ };
1113
+ return {
1114
+ handleOperation,
1115
+ disabledOperation
1116
+ };
1117
+ };
1118
+ }
1119
+ });
1120
+ var useVaultDepositFormScript;
1121
+ var init_vault_deposit_form_script = __esm({
1122
+ "src/components/vault-operation/deposit/vault-deposit-form.script.ts"() {
1123
+ init_vaultsStore();
1124
+ init_vault();
1125
+ init_operation_script();
1126
+ useVaultDepositFormScript = (props) => {
1127
+ const { vaultId } = props;
1128
+ const [quantity, setQuantity] = useState("");
1129
+ const { vaultInfo } = useVaultsStore();
1130
+ const { handleOperation, disabledOperation } = useOperationScript({
1131
+ type: "deposit" /* DEPOSIT */,
1132
+ vaultId
1133
+ });
1134
+ const { holding } = useCollateral();
1135
+ const { t } = useTranslation();
1136
+ const minDepositAmount = vaultInfo.data[0]?.min_deposit_amount || 0;
1137
+ const maxWithdrawalAmount = useMaxWithdrawal("USDC");
1138
+ const availableBalance = useMemo(() => {
1139
+ return holding?.find((h) => h.token === "USDC")?.holding || 0;
1140
+ }, [holding]);
1141
+ const maxQuantity = useMemo(() => {
1142
+ return Math.min(maxWithdrawalAmount, availableBalance);
1143
+ }, [maxWithdrawalAmount, availableBalance]);
1144
+ const sharePrice = useMemo(() => {
1145
+ const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);
1146
+ return vault?.est_main_share_price;
1147
+ }, [vaultInfo.data, vaultId]);
1148
+ const shares = useMemo(() => {
1149
+ if (!sharePrice || !quantity) {
1150
+ return "-";
1151
+ }
1152
+ return new Decimal(quantity).div(sharePrice).toString();
1153
+ }, [quantity, sharePrice]);
1154
+ const handleDeposit = async () => {
1155
+ if (!shares || shares === "-") {
1156
+ return;
1157
+ }
1158
+ await handleOperation({
1159
+ amount: quantity,
1160
+ vaultId
1161
+ });
1162
+ setQuantity("");
1163
+ };
1164
+ const token = useTokenInfo("USDC");
1165
+ const sourceToken = useMemo(() => {
1166
+ return {
1167
+ ...token,
1168
+ display_name: token?.token,
1169
+ symbol: token?.token
1170
+ };
1171
+ }, [token]);
1172
+ const onQuantityChange = (value) => {
1173
+ if (value && new Decimal(value).gt(maxQuantity)) {
1174
+ setQuantity(maxQuantity.toString());
1175
+ return;
1176
+ }
1177
+ setQuantity(value);
1178
+ };
1179
+ const disabledDeposit = useMemo(() => {
1180
+ return !quantity || quantity === "0" || disabledOperation || !!quantity && new Decimal(quantity).lt(minDepositAmount);
1181
+ }, [quantity, disabledOperation]);
1182
+ const inputHint = useMemo(() => {
1183
+ if (quantity && new Decimal(quantity).lt(minDepositAmount)) {
1184
+ return {
1185
+ hintMessage: t("vaults.operation.error.minDeposit", {
1186
+ amount: minDepositAmount
1187
+ }),
1188
+ status: "error"
1189
+ };
1190
+ }
1191
+ return {
1192
+ hintMessage: "",
1193
+ status: ""
1194
+ };
1195
+ }, [quantity, t, maxWithdrawalAmount, availableBalance]);
1196
+ return {
1197
+ quantity,
1198
+ onQuantityChange,
1199
+ sourceToken,
1200
+ maxQuantity,
1201
+ sharePrice,
1202
+ shares,
1203
+ handleDeposit,
1204
+ vaultId,
1205
+ disabledDeposit,
1206
+ disabledOperation,
1207
+ inputHint
1208
+ };
1209
+ };
1210
+ }
1211
+ });
1212
+
1213
+ // src/components/vault-operation/latest-deposit/latest-deposit.script.ts
1214
+ var useLatestDepositScript;
1215
+ var init_latest_deposit_script = __esm({
1216
+ "src/components/vault-operation/latest-deposit/latest-deposit.script.ts"() {
1217
+ init_vault();
1218
+ init_latest_script();
1219
+ useLatestDepositScript = ({ vaultId }) => {
1220
+ const { latestOperation } = useLatestOperationScript({
1221
+ type: "deposit" /* DEPOSIT */,
1222
+ vaultId
1223
+ });
1224
+ return {
1225
+ latestOperation
1226
+ };
1227
+ };
1228
+ }
1229
+ });
1230
+
1231
+ // src/utils/getOperationStatusColor.ts
1232
+ var getOperationStatusColor;
1233
+ var init_getOperationStatusColor = __esm({
1234
+ "src/utils/getOperationStatusColor.ts"() {
1235
+ getOperationStatusColor = (status) => {
1236
+ if (status === "completed") {
1237
+ return "success";
1238
+ }
1239
+ if (status === "rejected" || status === "failed") {
1240
+ return "danger";
1241
+ }
1242
+ return "primary";
1243
+ };
1244
+ }
1245
+ });
1246
+ var LatestDepositUI;
1247
+ var init_latest_deposit_ui = __esm({
1248
+ "src/components/vault-operation/latest-deposit/latest-deposit.ui.tsx"() {
1249
+ init_getOperationStatusColor();
1250
+ LatestDepositUI = (props) => {
1251
+ const { latestOperation } = props;
1252
+ const { t } = useTranslation();
1253
+ if (!latestOperation) {
1254
+ return null;
1255
+ }
1256
+ return /* @__PURE__ */ jsxs("div", { className: "oui-mt-3 oui-flex oui-flex-col oui-gap-2", children: [
1257
+ /* @__PURE__ */ jsx("div", { className: "oui-text-xs oui-font-normal oui-text-base-contrast-54", children: t("vaults.deposit.latestDeposit") }),
1258
+ /* @__PURE__ */ jsx("div", { className: "oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3", children: /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center", children: [
1259
+ /* @__PURE__ */ jsx(
1260
+ "div",
1261
+ {
1262
+ className: cn(
1263
+ "oui-mr-1 oui-size-1 oui-rounded-full",
1264
+ latestOperation.status === "completed" && "oui-bg-success",
1265
+ latestOperation.status === "rejected" && "oui-bg-danger",
1266
+ latestOperation.status === "failed" && "oui-bg-danger",
1267
+ (latestOperation.status === "pending" || latestOperation.status === "new") && "oui-bg-primary"
1268
+ )
1269
+ }
1270
+ ),
1271
+ /* @__PURE__ */ jsx(
1272
+ Text,
1273
+ {
1274
+ color: getOperationStatusColor(latestOperation.status),
1275
+ className: "oui-text-xs oui-font-normal",
1276
+ children: latestOperation.status.slice(0, 1).toUpperCase() + latestOperation.status.slice(1)
1277
+ }
1278
+ ),
1279
+ /* @__PURE__ */ jsx(TokenIcon, { name: "USDC", className: "oui-ml-auto oui-mr-1 oui-size-4" }),
1280
+ /* @__PURE__ */ jsx(Text.numeral, { className: "oui-text-sm oui-font-semibold oui-text-base-contrast-80", children: latestOperation.amount_change })
1281
+ ] }) })
1282
+ ] });
1283
+ };
1284
+ }
1285
+ });
1286
+ var LatestDepositWidget;
1287
+ var init_latest_deposit_widget = __esm({
1288
+ "src/components/vault-operation/latest-deposit/latest-deposit.widget.tsx"() {
1289
+ init_latest_deposit_script();
1290
+ init_latest_deposit_ui();
1291
+ LatestDepositWidget = (props) => {
1292
+ const { vaultId } = props;
1293
+ const state = useLatestDepositScript({ vaultId });
1294
+ return /* @__PURE__ */ jsx(LatestDepositUI, { ...state });
1295
+ };
1296
+ }
1297
+ });
1298
+ var VaultDepositForm;
1299
+ var init_vault_deposit_form_ui = __esm({
1300
+ "src/components/vault-operation/deposit/vault-deposit-form.ui.tsx"() {
1301
+ init_latest_deposit_widget();
1302
+ VaultDepositForm = (props) => {
1303
+ const {
1304
+ quantity,
1305
+ onQuantityChange,
1306
+ sourceToken,
1307
+ maxQuantity,
1308
+ shares,
1309
+ handleDeposit,
1310
+ vaultId,
1311
+ disabledDeposit,
1312
+ disabledOperation,
1313
+ inputHint
1314
+ } = props;
1315
+ const { t } = useTranslation();
1316
+ return /* @__PURE__ */ jsxs("div", { children: [
1317
+ /* @__PURE__ */ jsx(BrokerWallet, {}),
1318
+ /* @__PURE__ */ jsx(Box, { mt: 3, mb: 1, children: /* @__PURE__ */ jsx(
1319
+ QuantityInput,
1320
+ {
1321
+ value: quantity,
1322
+ onValueChange: onQuantityChange,
1323
+ token: { ...sourceToken, precision: 6 },
1324
+ testId: "oui-testid-vault-deposit-dialog-quantity-input",
1325
+ hintMessage: inputHint.hintMessage,
1326
+ status: inputHint.status
1327
+ }
1328
+ ) }),
1329
+ /* @__PURE__ */ jsx(
1330
+ AvailableQuantity,
1331
+ {
1332
+ maxQuantity: maxQuantity?.toString() || "0",
1333
+ onClick: () => {
1334
+ onQuantityChange(maxQuantity?.toString() || "0");
1335
+ }
1336
+ }
1337
+ ),
1338
+ /* @__PURE__ */ jsxs(
1339
+ Box,
1340
+ {
1341
+ mt: 5,
1342
+ mb: 1,
1343
+ className: "oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",
1344
+ children: [
1345
+ /* @__PURE__ */ jsx("div", { children: t("vaults.deposit.estShares") }),
1346
+ /* @__PURE__ */ jsx(
1347
+ Text.numeral,
1348
+ {
1349
+ dp: 6,
1350
+ padding: false,
1351
+ suffix: /* @__PURE__ */ jsx("span", { className: "oui-ml-1 oui-text-base-contrast-54", children: t("vaults.deposit.shares") }),
1352
+ children: shares
1353
+ }
1354
+ )
1355
+ ]
1356
+ }
1357
+ ),
1358
+ /* @__PURE__ */ jsxs(
1359
+ Box,
1360
+ {
1361
+ mb: 5,
1362
+ className: "oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",
1363
+ children: [
1364
+ /* @__PURE__ */ jsx("div", { children: t("vaults.deposit.lockupDuration") }),
1365
+ /* @__PURE__ */ jsx(
1366
+ Text.numeral,
1367
+ {
1368
+ suffix: /* @__PURE__ */ jsx("span", { className: "oui-ml-1 oui-text-base-contrast-54", children: "hrs" }),
1369
+ children: "48"
1370
+ }
1371
+ )
1372
+ ]
1373
+ }
1374
+ ),
1375
+ disabledOperation && /* @__PURE__ */ jsx("div", { className: "oui-mt-3 oui-text-center", children: /* @__PURE__ */ jsx(Text, { color: "warning", className: "oui-text-sm oui-font-semibold", children: t("vaults.operation.error.switchAccount") }) }),
1376
+ /* @__PURE__ */ jsx(
1377
+ Button,
1378
+ {
1379
+ fullWidth: true,
1380
+ color: "primary",
1381
+ disabled: disabledDeposit,
1382
+ className: "oui-mt-3",
1383
+ onClick: handleDeposit,
1384
+ children: t("common.deposit")
1385
+ }
1386
+ ),
1387
+ /* @__PURE__ */ jsx(LatestDepositWidget, { vaultId })
1388
+ ] });
1389
+ };
1390
+ }
1391
+ });
1392
+ var VaultDepositWidget;
1393
+ var init_vault_deposit_form_widget = __esm({
1394
+ "src/components/vault-operation/deposit/vault-deposit-form.widget.tsx"() {
1395
+ init_vault_deposit_form_script();
1396
+ init_vault_deposit_form_ui();
1397
+ VaultDepositWidget = (props) => {
1398
+ const { vaultId } = props;
1399
+ const state = useVaultDepositFormScript({ vaultId });
1400
+ return /* @__PURE__ */ jsx(VaultDepositForm, { ...state });
1401
+ };
1402
+ }
1403
+ });
1404
+
1405
+ // src/components/vault-operation/deposit/index.ts
1406
+ var init_deposit = __esm({
1407
+ "src/components/vault-operation/deposit/index.ts"() {
1408
+ init_vault_deposit_form_widget();
1409
+ }
1410
+ });
1411
+ var useVaultWithdrawFormScript;
1412
+ var init_vault_withdraw_form_script = __esm({
1413
+ "src/components/vault-operation/withdraw/vault-withdraw-form.script.ts"() {
1414
+ init_store();
1415
+ init_vault();
1416
+ init_operation_script();
1417
+ useVaultWithdrawFormScript = (props) => {
1418
+ const { vaultId } = props;
1419
+ const [quantity, setQuantity] = useState("");
1420
+ const { handleOperation, disabledOperation } = useOperationScript({
1421
+ type: "withdrawal" /* WITHDRAWAL */,
1422
+ vaultId
1423
+ });
1424
+ const vaultLpInfo = useVaultLpInfoById(vaultId);
1425
+ const { vaultInfo } = useVaultsStore();
1426
+ const { t } = useTranslation();
1427
+ const sharePrice = useMemo(() => {
1428
+ const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);
1429
+ return vault?.est_main_share_price || 0;
1430
+ }, [vaultInfo.data, vaultId]);
1431
+ const maxQuantity = vaultLpInfo?.[0]?.available_main_shares || 0;
1432
+ const receivingAmount = useMemo(() => {
1433
+ if (!quantity || !sharePrice) {
1434
+ return "-";
1435
+ }
1436
+ return new Decimal(quantity).mul(sharePrice).toString();
1437
+ }, [quantity, sharePrice]);
1438
+ const handleWithdraw = async () => {
1439
+ await handleOperation({
1440
+ amount: quantity,
1441
+ vaultId
1442
+ });
1443
+ };
1444
+ const onQuantityChange = (value) => {
1445
+ if (value && new Decimal(value).gt(maxQuantity)) {
1446
+ setQuantity(maxQuantity.toString());
1447
+ } else {
1448
+ setQuantity(value);
1449
+ }
1450
+ };
1451
+ const isMinAmount = useMemo(() => {
1452
+ if (!quantity || !vaultInfo.data[0]?.est_main_share_price || !vaultInfo.data[0]?.min_withdrawal_amount)
1453
+ return false;
1454
+ const isAll = quantity === maxQuantity.toString();
1455
+ if (isAll) {
1456
+ return false;
1457
+ }
1458
+ const receiving = new Decimal(quantity).mul(
1459
+ vaultInfo.data[0]?.est_main_share_price
1460
+ );
1461
+ return receiving.lt(vaultInfo.data[0]?.min_withdrawal_amount);
1462
+ }, [quantity, vaultInfo, maxQuantity]);
1463
+ const disabledWithdraw = useMemo(() => {
1464
+ return !quantity || quantity === "0" || disabledOperation || !!quantity && isMinAmount;
1465
+ }, [quantity, disabledOperation]);
1466
+ const inputHint = useMemo(() => {
1467
+ if (quantity && isMinAmount) {
1468
+ return {
1469
+ hintMessage: t("vaults.operation.error.minWithdrawal", {
1470
+ amount: vaultInfo.data[0]?.min_withdrawal_amount
1471
+ }),
1472
+ status: "error"
1473
+ };
1474
+ }
1475
+ return {
1476
+ hintMessage: "",
1477
+ status: ""
1478
+ };
1479
+ }, [quantity, t]);
1480
+ return {
1481
+ quantity,
1482
+ onQuantityChange,
1483
+ maxQuantity,
1484
+ handleWithdraw,
1485
+ vaultId,
1486
+ sharePrice,
1487
+ receivingAmount,
1488
+ disabledWithdraw,
1489
+ disabledOperation,
1490
+ inputHint
1491
+ };
1492
+ };
1493
+ }
1494
+ });
1495
+
1496
+ // src/components/vault-operation/latest-withdraw/latest-withdraw-script.ts
1497
+ var useLatestWithdrawScript;
1498
+ var init_latest_withdraw_script = __esm({
1499
+ "src/components/vault-operation/latest-withdraw/latest-withdraw-script.ts"() {
1500
+ init_vault();
1501
+ init_latest_script();
1502
+ useLatestWithdrawScript = ({ vaultId }) => {
1503
+ const { latestOperation } = useLatestOperationScript({
1504
+ type: "withdrawal" /* WITHDRAWAL */,
1505
+ vaultId
1506
+ });
1507
+ return {
1508
+ latestOperation
1509
+ };
1510
+ };
1511
+ }
1512
+ });
1513
+ var ProcessDot, ProcessLine, ProcessText, WithdrawProcess, WithdrawProcessWidget;
1514
+ var init_withdraw_process_ui = __esm({
1515
+ "src/components/vault-operation/withdraw/withdraw-process.ui.tsx"() {
1516
+ ProcessDot = () => {
1517
+ return /* @__PURE__ */ jsx("div", { className: "oui-size-2 oui-rounded-full oui-bg-white/[0.54]" });
1518
+ };
1519
+ ProcessLine = () => {
1520
+ return /* @__PURE__ */ jsx("div", { className: "oui-h-px oui-flex-1 oui-bg-white/[0.2]" });
1521
+ };
1522
+ ProcessText = ({
1523
+ children,
1524
+ className
1525
+ }) => {
1526
+ return /* @__PURE__ */ jsx(
1527
+ "div",
1528
+ {
1529
+ className: cn(
1530
+ "oui-flex-1 oui-text-2xs oui-font-normal oui-text-base-contrast-80",
1531
+ className
1532
+ ),
1533
+ children
1534
+ }
1535
+ );
1536
+ };
1537
+ WithdrawProcess = () => {
1538
+ const { t } = useTranslation();
1539
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1540
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center", children: [
1541
+ /* @__PURE__ */ jsx(ProcessDot, {}),
1542
+ /* @__PURE__ */ jsx("div", { className: "oui-flex-1", children: /* @__PURE__ */ jsx(ProcessLine, {}) }),
1543
+ /* @__PURE__ */ jsx(ProcessDot, {}),
1544
+ /* @__PURE__ */ jsx("div", { className: "oui-flex-1", children: /* @__PURE__ */ jsx(ProcessLine, {}) }),
1545
+ /* @__PURE__ */ jsx(ProcessDot, {})
1546
+ ] }),
1547
+ /* @__PURE__ */ jsxs("div", { className: "oui-mt-1 oui-flex oui-justify-between", children: [
1548
+ /* @__PURE__ */ jsx(ProcessText, { children: t("vaults.withdraw.process.initiate") }),
1549
+ /* @__PURE__ */ jsx(ProcessText, { className: "oui-text-center", children: t("vaults.withdraw.process.vaultProcess") }),
1550
+ /* @__PURE__ */ jsx(ProcessText, { className: "oui-text-right", children: t("vaults.withdraw.process.transferred") })
1551
+ ] })
1552
+ ] });
1553
+ };
1554
+ WithdrawProcessWidget = () => {
1555
+ const { t } = useTranslation();
1556
+ return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-border oui-border-white/[0.12] oui-p-3", children: [
1557
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54", children: [
1558
+ /* @__PURE__ */ jsx("div", { children: t("vaults.withdraw.process.withdrawProcess") }),
1559
+ /* @__PURE__ */ jsx(Text, { color: "primary", children: t("vaults.withdraw.process.upTo") })
1560
+ ] }),
1561
+ /* @__PURE__ */ jsx(WithdrawProcess, {})
1562
+ ] });
1563
+ };
1564
+ }
1565
+ });
1566
+ var LatestWithdrawUI;
1567
+ var init_latest_withdraw_ui = __esm({
1568
+ "src/components/vault-operation/latest-withdraw/latest-withdraw-ui.tsx"() {
1569
+ init_getOperationStatusColor();
1570
+ init_withdraw_process_ui();
1571
+ LatestWithdrawUI = (props) => {
1572
+ const { latestOperation } = props;
1573
+ const { t } = useTranslation();
1574
+ if (!latestOperation) {
1575
+ return /* @__PURE__ */ jsx(WithdrawProcessWidget, {});
1576
+ }
1577
+ return /* @__PURE__ */ jsxs("div", { className: "oui-mt-3 oui-flex oui-flex-col oui-gap-2", children: [
1578
+ /* @__PURE__ */ jsx("div", { className: "oui-text-xs oui-font-normal oui-text-base-contrast-54", children: t("vaults.withdraw.latestWithdraw") }),
1579
+ /* @__PURE__ */ jsx("div", { className: "oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3", children: /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center", children: [
1580
+ /* @__PURE__ */ jsx(
1581
+ "div",
1582
+ {
1583
+ className: cn(
1584
+ "oui-mr-1 oui-size-1 oui-rounded-full",
1585
+ latestOperation.status === "completed" && "oui-bg-success",
1586
+ latestOperation.status === "rejected" && "oui-bg-danger",
1587
+ latestOperation.status === "failed" && "oui-bg-danger",
1588
+ (latestOperation.status === "pending" || latestOperation.status === "new") && "oui-bg-primary"
1589
+ )
1590
+ }
1591
+ ),
1592
+ /* @__PURE__ */ jsx(
1593
+ Text,
1594
+ {
1595
+ color: getOperationStatusColor(latestOperation.status),
1596
+ className: "oui-text-xs oui-font-normal",
1597
+ children: latestOperation.status.slice(0, 1).toUpperCase() + latestOperation.status.slice(1)
1598
+ }
1599
+ ),
1600
+ /* @__PURE__ */ jsx(TokenIcon, { name: "USDC", className: "oui-ml-auto oui-mr-1 oui-size-4" }),
1601
+ /* @__PURE__ */ jsx(Text.numeral, { className: "oui-text-sm oui-font-semibold oui-text-base-contrast-80", children: latestOperation.amount_change || "-" })
1602
+ ] }) })
1603
+ ] });
1604
+ };
1605
+ }
1606
+ });
1607
+ var LatestWithdrawWidget;
1608
+ var init_latest_withdraw_widget = __esm({
1609
+ "src/components/vault-operation/latest-withdraw/latest-withdraw-widget.tsx"() {
1610
+ init_latest_withdraw_script();
1611
+ init_latest_withdraw_ui();
1612
+ LatestWithdrawWidget = (props) => {
1613
+ const { vaultId } = props;
1614
+ const state = useLatestWithdrawScript({ vaultId });
1615
+ return /* @__PURE__ */ jsx(LatestWithdrawUI, { ...state });
1616
+ };
1617
+ }
1618
+ });
1619
+
1620
+ // src/components/vault-operation/latest-withdraw/index.ts
1621
+ var init_latest_withdraw = __esm({
1622
+ "src/components/vault-operation/latest-withdraw/index.ts"() {
1623
+ init_latest_withdraw_widget();
1624
+ }
1625
+ });
1626
+ var VaultWithdrawForm, WithdrawKVItem, WithdrawInitialContent, WithdrawInitialDialog, WithdrawInitialSheet;
1627
+ var init_vault_withdraw_form_ui = __esm({
1628
+ "src/components/vault-operation/withdraw/vault-withdraw-form.ui.tsx"() {
1629
+ init_latest_withdraw();
1630
+ init_withdraw_process_ui();
1631
+ VaultWithdrawForm = (props) => {
1632
+ const {
1633
+ quantity,
1634
+ onQuantityChange,
1635
+ maxQuantity,
1636
+ handleWithdraw,
1637
+ vaultId,
1638
+ sharePrice,
1639
+ receivingAmount,
1640
+ disabledWithdraw,
1641
+ disabledOperation,
1642
+ inputHint
1643
+ } = props;
1644
+ const { isMobile } = useScreen();
1645
+ const handleInitialWithdraw = () => {
1646
+ modal.show(isMobile ? WithdrawInitialSheet : WithdrawInitialDialog, {
1647
+ quantity,
1648
+ receivingAmount,
1649
+ handleWithdraw
1650
+ });
1651
+ };
1652
+ const { t } = useTranslation();
1653
+ return /* @__PURE__ */ jsxs("div", { children: [
1654
+ /* @__PURE__ */ jsx(BrokerWallet, {}),
1655
+ /* @__PURE__ */ jsx(Box, { mt: 3, mb: 1, children: /* @__PURE__ */ jsx(
1656
+ QuantityInput,
1657
+ {
1658
+ value: quantity,
1659
+ onValueChange: onQuantityChange,
1660
+ token: { display_name: "Shares", precision: 6 },
1661
+ testId: "oui-testid-vault-withdraw-dialog-quantity-input",
1662
+ hintMessage: inputHint.hintMessage,
1663
+ status: inputHint.status
1664
+ }
1665
+ ) }),
1666
+ /* @__PURE__ */ jsx(
1667
+ AvailableQuantity,
1668
+ {
1669
+ maxQuantity,
1670
+ onClick: () => {
1671
+ onQuantityChange(maxQuantity.toString());
1672
+ }
1673
+ }
1674
+ ),
1675
+ /* @__PURE__ */ jsx(
1676
+ WithdrawKVItem,
1677
+ {
1678
+ label: t("vaults.withdraw.estPricePerShare"),
1679
+ currency: "$",
1680
+ value: sharePrice || "-",
1681
+ className: "oui-mb-1 oui-mt-5"
1682
+ }
1683
+ ),
1684
+ /* @__PURE__ */ jsx(
1685
+ WithdrawKVItem,
1686
+ {
1687
+ label: t("vaults.withdraw.estReceivingAmount"),
1688
+ value: receivingAmount,
1689
+ suffix: /* @__PURE__ */ jsx("span", { className: "oui-ml-1 oui-text-base-contrast-36", children: "USDC" }),
1690
+ className: "oui-mb-5"
1691
+ }
1692
+ ),
1693
+ disabledOperation && /* @__PURE__ */ jsx("div", { className: "oui-mt-3 oui-text-center", children: /* @__PURE__ */ jsx(Text, { color: "warning", className: "oui-text-sm oui-font-semibold", children: t("vaults.operation.error.switchAccount") }) }),
1694
+ /* @__PURE__ */ jsx(
1695
+ Button,
1696
+ {
1697
+ fullWidth: true,
1698
+ color: "primary",
1699
+ disabled: disabledWithdraw,
1700
+ className: "oui-mt-3",
1701
+ onClick: handleInitialWithdraw,
1702
+ children: t("common.withdraw")
1703
+ }
1704
+ ),
1705
+ /* @__PURE__ */ jsx("div", { className: "oui-mt-3", children: /* @__PURE__ */ jsx(LatestWithdrawWidget, { vaultId }) })
1706
+ ] });
1707
+ };
1708
+ WithdrawKVItem = ({
1709
+ label,
1710
+ value,
1711
+ suffix,
1712
+ currency,
1713
+ className
1714
+ }) => {
1715
+ return /* @__PURE__ */ jsxs(
1716
+ "div",
1717
+ {
1718
+ className: cn(
1719
+ "oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",
1720
+ className
1721
+ ),
1722
+ children: [
1723
+ /* @__PURE__ */ jsx("div", { children: label }),
1724
+ /* @__PURE__ */ jsx(
1725
+ Text.numeral,
1726
+ {
1727
+ currency,
1728
+ className: "oui-text-base-contrast",
1729
+ suffix,
1730
+ children: value
1731
+ }
1732
+ )
1733
+ ]
1734
+ }
1735
+ );
1736
+ };
1737
+ WithdrawInitialContent = (props) => {
1738
+ const { quantity, receivingAmount, handleWithdraw, hide } = props;
1739
+ const { t } = useTranslation();
1740
+ return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col", children: [
1741
+ /* @__PURE__ */ jsx(
1742
+ WithdrawKVItem,
1743
+ {
1744
+ label: t("vaults.withdraw.dialog.withdrawalAmount"),
1745
+ value: quantity,
1746
+ suffix: /* @__PURE__ */ jsx("span", { className: "oui-ml-1 oui-text-base-contrast-36", children: "Shares" })
1747
+ }
1748
+ ),
1749
+ /* @__PURE__ */ jsx(
1750
+ WithdrawKVItem,
1751
+ {
1752
+ label: t("vaults.withdraw.dialog.estimatedReceiving"),
1753
+ value: receivingAmount,
1754
+ suffix: /* @__PURE__ */ jsx("span", { className: "oui-ml-1 oui-text-base-contrast-36", children: "USDC" }),
1755
+ className: "oui-mt-1"
1756
+ }
1757
+ ),
1758
+ /* @__PURE__ */ jsx(Text, { color: "warning", className: "oui-my-5 oui-text-sm oui-font-semibold", children: t("vaults.withdraw.dialog.note") }),
1759
+ /* @__PURE__ */ jsx(WithdrawProcessWidget, {}),
1760
+ /* @__PURE__ */ jsx(
1761
+ Button,
1762
+ {
1763
+ fullWidth: true,
1764
+ color: "primary",
1765
+ className: "oui-mt-5",
1766
+ onClick: async () => {
1767
+ await handleWithdraw();
1768
+ hide?.();
1769
+ },
1770
+ children: t("vaults.withdraw.dialog.initiateWithdrawal")
1771
+ }
1772
+ )
1773
+ ] });
1774
+ };
1775
+ WithdrawInitialDialog = modal.create(
1776
+ ({
1777
+ quantity,
1778
+ receivingAmount,
1779
+ handleWithdraw
1780
+ }) => {
1781
+ const { visible, hide, onOpenChange } = useModal();
1782
+ const { t } = useTranslation();
1783
+ return /* @__PURE__ */ jsx(
1784
+ SimpleDialog,
1785
+ {
1786
+ title: t("vaults.withdraw.dialog.title"),
1787
+ open: visible,
1788
+ onOpenChange,
1789
+ children: /* @__PURE__ */ jsx(
1790
+ WithdrawInitialContent,
1791
+ {
1792
+ quantity,
1793
+ receivingAmount,
1794
+ handleWithdraw,
1795
+ hide
1796
+ }
1797
+ )
1798
+ }
1799
+ );
1800
+ }
1801
+ );
1802
+ WithdrawInitialSheet = modal.create(
1803
+ ({
1804
+ quantity,
1805
+ receivingAmount,
1806
+ handleWithdraw
1807
+ }) => {
1808
+ const { visible, hide, onOpenChange } = useModal();
1809
+ const { t } = useTranslation();
1810
+ return /* @__PURE__ */ jsx(
1811
+ SimpleSheet,
1812
+ {
1813
+ title: t("vaults.withdraw.dialog.title"),
1814
+ open: visible,
1815
+ onOpenChange,
1816
+ children: /* @__PURE__ */ jsx(
1817
+ WithdrawInitialContent,
1818
+ {
1819
+ quantity,
1820
+ receivingAmount,
1821
+ handleWithdraw,
1822
+ hide
1823
+ }
1824
+ )
1825
+ }
1826
+ );
1827
+ }
1828
+ );
1829
+ }
1830
+ });
1831
+ var VaultWithdrawWidget;
1832
+ var init_vault_withdraw_form_widget = __esm({
1833
+ "src/components/vault-operation/withdraw/vault-withdraw-form.widget.tsx"() {
1834
+ init_vault_withdraw_form_script();
1835
+ init_vault_withdraw_form_ui();
1836
+ VaultWithdrawWidget = (props) => {
1837
+ const { vaultId } = props;
1838
+ const state = useVaultWithdrawFormScript({ vaultId });
1839
+ return /* @__PURE__ */ jsx(VaultWithdrawForm, { ...state });
1840
+ };
1841
+ }
1842
+ });
1843
+
1844
+ // src/components/vault-operation/withdraw/index.ts
1845
+ var init_withdraw = __esm({
1846
+ "src/components/vault-operation/withdraw/index.ts"() {
1847
+ init_vault_withdraw_form_widget();
1848
+ }
1849
+ });
1850
+ var VaultDepositAndWithdrawWithDialogId, VaultDepositAndWithdrawWithSheetId, VaultDepositAndWithdraw;
1851
+ var init_depositAndWithdraw = __esm({
1852
+ "src/components/vault-operation/depositAndWithdraw/index.tsx"() {
1853
+ init_deposit();
1854
+ init_withdraw();
1855
+ VaultDepositAndWithdrawWithDialogId = "VaultDepositAndWithdrawWithDialogId";
1856
+ VaultDepositAndWithdrawWithSheetId = "VaultDepositAndWithdrawWithSheetId";
1857
+ VaultDepositAndWithdraw = (props) => {
1858
+ const [activeTab, setActiveTab] = useState(
1859
+ props.activeTab || "deposit"
1860
+ );
1861
+ const { vaultId } = props;
1862
+ const { t } = useTranslation();
1863
+ return /* @__PURE__ */ jsxs(
1864
+ Tabs,
1865
+ {
1866
+ value: activeTab,
1867
+ onValueChange: setActiveTab,
1868
+ variant: "contained",
1869
+ size: "lg",
1870
+ classNames: {
1871
+ tabsList: "oui-px-0",
1872
+ tabsContent: "oui-pt-5"
1873
+ },
1874
+ children: [
1875
+ /* @__PURE__ */ jsx(
1876
+ TabPanel,
1877
+ {
1878
+ title: t("common.deposit"),
1879
+ icon: /* @__PURE__ */ jsx(ArrowDownSquareFillIcon, {}),
1880
+ value: "deposit",
1881
+ children: /* @__PURE__ */ jsx(VaultDepositWidget, { vaultId })
1882
+ }
1883
+ ),
1884
+ /* @__PURE__ */ jsx(
1885
+ TabPanel,
1886
+ {
1887
+ title: t("common.withdraw"),
1888
+ icon: /* @__PURE__ */ jsx(ArrowUpSquareFillIcon, {}),
1889
+ value: "withdraw",
1890
+ children: /* @__PURE__ */ jsx(VaultWithdrawWidget, { vaultId })
1891
+ }
1892
+ )
1893
+ ]
1894
+ }
1895
+ );
1896
+ };
1897
+ registerSimpleDialog(
1898
+ VaultDepositAndWithdrawWithDialogId,
1899
+ VaultDepositAndWithdraw,
1900
+ {
1901
+ size: "md",
1902
+ classNames: {
1903
+ content: "oui-border oui-border-line-6"
1904
+ }
1905
+ }
1906
+ );
1907
+ registerSimpleSheet(
1908
+ VaultDepositAndWithdrawWithSheetId,
1909
+ VaultDepositAndWithdraw
1910
+ );
1911
+ }
1912
+ });
1913
+
1914
+ // src/components/vault-card/constants.ts
1915
+ var ORDERLY_ICON, ORDERLY_VAULT_TITLE, ORDERLY_VAULT_DESCRIPTION, getBrokerIconUrl;
1916
+ var init_constants = __esm({
1917
+ "src/components/vault-card/constants.ts"() {
1918
+ ORDERLY_ICON = "https://oss.orderly.network/static/symbol_logo/ORDER.png";
1919
+ ORDERLY_VAULT_TITLE = "Orderly OmniVault";
1920
+ ORDERLY_VAULT_DESCRIPTION = "Earn passive yields effortlessly, no trading expertise required. OmniVault deploys market-making strategies, taking on liquidations, and accrue platform fees.";
1921
+ getBrokerIconUrl = (brokerId) => {
1922
+ switch (brokerId) {
1923
+ case "kodiak":
1924
+ return "https://oss.orderly.network/static/symbol_logo/kodiak.png";
1925
+ case "orderly":
1926
+ return "https://oss.orderly.network/static/symbol_logo/ORDER.png";
1927
+ case "woofi_pro":
1928
+ return "https://oss.orderly.network/static/broker_logo/woofi_pro.png";
1929
+ case "aden":
1930
+ return "/vaults/broker/aden.png";
1931
+ case "vooi":
1932
+ return "https://oss.orderly.network/static/broker_logo/vooi.png";
1933
+ default:
1934
+ return `https://oss.orderly.network/static/broker_logo/${brokerId}.png`;
1935
+ }
1936
+ };
1937
+ }
1938
+ });
1939
+ var useVaultCardScript;
1940
+ var init_vaultCard_script = __esm({
1941
+ "src/components/vault-card/vaultCard.script.ts"() {
1942
+ init_env();
1943
+ init_useSVAPIUrl();
1944
+ init_vaultsStore();
1945
+ init_depositAndWithdraw();
1946
+ init_constants();
1947
+ useVaultCardScript = (vault) => {
1948
+ const { t } = useTranslation();
1949
+ const vaultLpInfo = useVaultLpInfoById(vault.vault_id);
1950
+ const { fetchVaultLpInfo } = useVaultsStore();
1951
+ const env = useGetEnv();
1952
+ const { isMobile } = useScreen();
1953
+ const { state } = useAccount();
1954
+ const svApiUrl = useSVApiUrl();
1955
+ const { holding } = useCollateral();
1956
+ const availableBalance = useMemo(() => {
1957
+ return holding?.find((h) => h.token === "USDC")?.holding || 0;
1958
+ }, [holding]);
1959
+ useEffect(() => {
1960
+ if (!state.address || !svApiUrl || !vault.vault_id) {
1961
+ return;
1962
+ }
1963
+ fetchVaultLpInfo(
1964
+ { vault_id: vault.vault_id, wallet_address: state.address },
1965
+ svApiUrl
1966
+ );
1967
+ }, [vault.vault_id, state.address, svApiUrl]);
1968
+ const memoizedAvailableBalance = useMemo(() => {
1969
+ return availableBalance;
1970
+ }, [availableBalance]);
1971
+ const lpInfo = useMemo(() => {
1972
+ const info = vaultLpInfo?.[0];
1973
+ if (!info) {
1974
+ return {
1975
+ deposits: "--",
1976
+ earnings: "--"
1977
+ };
1978
+ }
1979
+ return {
1980
+ deposits: info.lp_tvl - info.potential_pnl,
1981
+ earnings: info.potential_pnl
1982
+ };
1983
+ }, [vaultLpInfo]);
1984
+ const isEVMConnected = useMemo(() => {
1985
+ return state.chainNamespace === "EVM";
1986
+ }, [state.chainNamespace]);
1987
+ const isSOLConnected = useMemo(() => {
1988
+ return state.chainNamespace === "SOL";
1989
+ }, [state.chainNamespace]);
1990
+ const isWrongNetwork = useMemo(() => {
1991
+ return state.chainNamespace !== "EVM" && state.chainNamespace !== "SOL" && state.accountId !== state.mainAccountId;
1992
+ }, [state.chainNamespace, state.accountId, state.mainAccountId]);
1993
+ const isButtonsDisabled = useMemo(() => {
1994
+ return vault.status !== "live";
1995
+ }, [vault.status]);
1996
+ const openDepositAndWithdraw = (activeTab) => {
1997
+ modal.show(
1998
+ isMobile ? VaultDepositAndWithdrawWithSheetId : VaultDepositAndWithdrawWithDialogId,
1999
+ {
2000
+ activeTab,
2001
+ vaultId: vault.vault_id
2002
+ }
2003
+ );
2004
+ };
2005
+ const openVaultWebsite = () => {
2006
+ const baseUrl = VAULTS_WEBSITE_URLS[env] || VAULTS_WEBSITE_URLS.prod;
2007
+ window.open(`${baseUrl}/vaults/${vault.vault_address}`, "_blank");
2008
+ };
2009
+ return {
2010
+ title: vault.vault_name,
2011
+ description: vault.description,
2012
+ icon: getBrokerIconUrl(vault.broker_id),
2013
+ vaultInfo: vault,
2014
+ lpInfo,
2015
+ isEVMConnected,
2016
+ isSOLConnected,
2017
+ openDepositAndWithdraw,
2018
+ availableBalance: memoizedAvailableBalance,
2019
+ openVaultWebsite,
2020
+ isWrongNetwork,
2021
+ isButtonsDisabled
2022
+ };
2023
+ };
2024
+ }
2025
+ });
2026
+ var parseMarkdownLinks;
2027
+ var init_parseMarkdownLinks = __esm({
2028
+ "src/utils/parseMarkdownLinks.tsx"() {
2029
+ parseMarkdownLinks = (text) => {
2030
+ if (!text) {
2031
+ return [""];
2032
+ }
2033
+ const markdownLinkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
2034
+ const parts = [];
2035
+ let lastIndex = 0;
2036
+ let match;
2037
+ while ((match = markdownLinkRegex.exec(text)) !== null) {
2038
+ const [fullMatch, linkText, url] = match;
2039
+ const matchIndex = match.index;
2040
+ if (matchIndex > lastIndex) {
2041
+ parts.push(text.substring(lastIndex, matchIndex));
2042
+ }
2043
+ parts.push(
2044
+ /* @__PURE__ */ jsx(
2045
+ "a",
2046
+ {
2047
+ href: url,
2048
+ target: "_blank",
2049
+ rel: "noopener noreferrer",
2050
+ className: "oui-underline hover:oui-text-base-contrast-80",
2051
+ children: linkText
2052
+ },
2053
+ matchIndex
2054
+ )
2055
+ );
2056
+ lastIndex = matchIndex + fullMatch.length;
2057
+ }
2058
+ if (lastIndex < text.length) {
2059
+ parts.push(text.substring(lastIndex));
2060
+ }
2061
+ return parts.length > 0 ? parts : [text];
2062
+ };
2063
+ }
2064
+ });
2065
+ var formatAllTimeReturn, VaultCard, VaultInfoItem, LpInfoItem, VaultCardOperation;
2066
+ var init_vaultCard_ui = __esm({
2067
+ "src/components/vault-card/vaultCard.ui.tsx"() {
2068
+ init_parseMarkdownLinks();
2069
+ formatAllTimeReturn = (status, vaultAge, lifetimeApy) => {
2070
+ if (status === "pre_launch" || vaultAge !== null && vaultAge < 7) {
2071
+ return "--";
2072
+ }
2073
+ if (lifetimeApy > 100) {
2074
+ return ">10000%";
2075
+ }
2076
+ return new Decimal(lifetimeApy).mul(100).toDecimalPlaces(2, Decimal.ROUND_UP).toFixed(2) + "%";
2077
+ };
2078
+ VaultCard = (props) => {
2079
+ const {
2080
+ title,
2081
+ vaultInfo,
2082
+ lpInfo,
2083
+ description,
2084
+ isEVMConnected,
2085
+ isSOLConnected,
2086
+ openDepositAndWithdraw,
2087
+ availableBalance,
2088
+ openVaultWebsite,
2089
+ icon,
2090
+ isButtonsDisabled
2091
+ } = props;
2092
+ const { t } = useTranslation();
2093
+ const { isMobile } = useScreen();
2094
+ const formattedAllTimeReturn = useMemo(
2095
+ () => formatAllTimeReturn(
2096
+ vaultInfo.status,
2097
+ vaultInfo.vault_age,
2098
+ vaultInfo.lifetime_apy
2099
+ ),
2100
+ [vaultInfo.status, vaultInfo.vault_age, vaultInfo.lifetime_apy]
2101
+ );
2102
+ const getStatusTag = () => {
2103
+ const { status } = vaultInfo;
2104
+ if (status === "live") {
2105
+ return {
2106
+ text: t("vaults.card.status.active"),
2107
+ color: "#00C076",
2108
+ bgColor: "rgba(0, 192, 118, 0.15)"
2109
+ };
2110
+ } else if (status === "pre_launch") {
2111
+ return {
2112
+ text: t("vaults.card.launchingSoon"),
2113
+ color: "#E88800",
2114
+ bgColor: "rgba(232, 136, 0, 0.15)"
2115
+ };
2116
+ } else if (status === "closing") {
2117
+ return {
2118
+ text: t("vaults.card.status.closing"),
2119
+ color: "#FF6B6B",
2120
+ bgColor: "rgba(255, 107, 107, 0.15)"
2121
+ };
2122
+ } else if (status === "closed") {
2123
+ return {
2124
+ text: t("vaults.card.status.closed"),
2125
+ color: "#999999",
2126
+ bgColor: "rgba(153, 153, 153, 0.15)"
2127
+ };
2128
+ }
2129
+ return null;
2130
+ };
2131
+ const statusTag = getStatusTag();
2132
+ useMemo(() => {
2133
+ const chains = Array.isArray(vaultInfo?.supported_chains) ? vaultInfo.supported_chains : [];
2134
+ return /* @__PURE__ */ jsx("div", { className: "oui-flex oui-items-center", children: chains.map((chain, index) => /* @__PURE__ */ jsx(
2135
+ "img",
2136
+ {
2137
+ src: `https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`,
2138
+ alt: chain.chain_id,
2139
+ className: cn(
2140
+ "oui-relative",
2141
+ isMobile ? "oui-size-[18px]" : "oui-size-5"
2142
+ ),
2143
+ style: {
2144
+ marginLeft: index > 0 ? "-4px" : "0",
2145
+ zIndex: chains.length - index
2146
+ }
2147
+ },
2148
+ chain.chain_id
2149
+ )) });
2150
+ }, [vaultInfo.supported_chains, isMobile]);
2151
+ return /* @__PURE__ */ jsx("div", { className: "oui-relative oui-h-[435px] oui-overflow-hidden oui-rounded-2xl oui-bg-base-9", children: /* @__PURE__ */ jsx(
2152
+ "div",
2153
+ {
2154
+ className: cn(
2155
+ "oui-absolute oui-left-0 oui-top-0 oui-z-20 oui-size-full oui-p-6",
2156
+ "oui-overflow-y-auto oui-custom-scrollbar"
2157
+ ),
2158
+ children: /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-2", children: [
2159
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-1", children: [
2160
+ /* @__PURE__ */ jsx("div", { className: "oui-text-[18px] oui-font-semibold oui-text-white oui-break-words", children: title }),
2161
+ statusTag && /* @__PURE__ */ jsx(
2162
+ "div",
2163
+ {
2164
+ className: "oui-flex oui-w-fit oui-items-center oui-gap-[10px] oui-px-2",
2165
+ style: {
2166
+ height: "18px",
2167
+ borderRadius: "4px",
2168
+ background: statusTag.bgColor,
2169
+ color: statusTag.color,
2170
+ fontSize: "12px",
2171
+ fontWeight: 600,
2172
+ lineHeight: "18px",
2173
+ letterSpacing: "0.36px"
2174
+ },
2175
+ children: statusTag.text
2176
+ }
2177
+ )
2178
+ ] }),
2179
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-1", children: [
2180
+ /* @__PURE__ */ jsx("div", { className: "oui-h-[54px]", children: /* @__PURE__ */ jsx("div", { className: "oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54 oui-line-clamp-3", children: parseMarkdownLinks(description) }) }),
2181
+ /* @__PURE__ */ jsxs(
2182
+ "button",
2183
+ {
2184
+ onClick: openVaultWebsite,
2185
+ className: "oui-flex oui-w-fit oui-items-center oui-gap-1 oui-text-xs oui-font-medium",
2186
+ style: { color: "#608CFF" },
2187
+ children: [
2188
+ /* @__PURE__ */ jsx("span", { children: t("vaults.card.viewMore") }),
2189
+ /* @__PURE__ */ jsx(
2190
+ ArrowRightUpSquareFillIcon,
2191
+ {
2192
+ style: { color: "#608CFF" },
2193
+ width: 16,
2194
+ height: 16,
2195
+ viewBox: "0 0 18 18"
2196
+ }
2197
+ )
2198
+ ]
2199
+ }
2200
+ )
2201
+ ] }),
2202
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-6", children: [
2203
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-gap-2", children: [
2204
+ /* @__PURE__ */ jsx(
2205
+ VaultInfoItem,
2206
+ {
2207
+ label: t("vaults.card.tvl"),
2208
+ value: vaultInfo.tvl,
2209
+ textProps: {
2210
+ currency: "$",
2211
+ dp: 0,
2212
+ type: "numeral"
2213
+ }
2214
+ }
2215
+ ),
2216
+ /* @__PURE__ */ jsx(
2217
+ VaultInfoItem,
2218
+ {
2219
+ label: t("vaults.card.allTimeReturn"),
2220
+ value: formattedAllTimeReturn,
2221
+ textProps: {
2222
+ color: "brand",
2223
+ type: "gradient"
2224
+ },
2225
+ showTooltip: vaultInfo.status === "pre_launch" || vaultInfo.vault_age !== null && vaultInfo.vault_age < 7,
2226
+ tooltipContent: t("vaults.card.allTimeReturnTooltip")
2227
+ }
2228
+ )
2229
+ ] }),
2230
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-items-center oui-gap-2 oui-rounded-lg oui-bg-white/[0.06] oui-p-3", children: [
2231
+ /* @__PURE__ */ jsx(
2232
+ LpInfoItem,
2233
+ {
2234
+ label: t("vaults.card.myDeposits"),
2235
+ value: lpInfo.deposits
2236
+ }
2237
+ ),
2238
+ /* @__PURE__ */ jsx(
2239
+ LpInfoItem,
2240
+ {
2241
+ label: t("vaults.card.myEarnings"),
2242
+ value: lpInfo.earnings
2243
+ }
2244
+ )
2245
+ ] })
2246
+ ] }),
2247
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-4 oui-mt-2", children: [
2248
+ /* @__PURE__ */ jsx(
2249
+ LpInfoItem,
2250
+ {
2251
+ label: t("vaults.card.accountBalance"),
2252
+ value: availableBalance
2253
+ }
2254
+ ),
2255
+ /* @__PURE__ */ jsx(
2256
+ VaultCardOperation,
2257
+ {
2258
+ isEVMConnected,
2259
+ isSOLConnected,
2260
+ openDepositAndWithdraw,
2261
+ isButtonsDisabled
2262
+ }
2263
+ )
2264
+ ] })
2265
+ ] })
2266
+ }
2267
+ ) });
2268
+ };
2269
+ VaultInfoItem = (props) => {
2270
+ const { label, value, textProps, showTooltip, tooltipContent } = props;
2271
+ return /* @__PURE__ */ jsxs(
2272
+ "div",
2273
+ {
2274
+ className: cn(
2275
+ "oui-flex oui-flex-1 oui-flex-col oui-items-center oui-justify-center oui-px-3 oui-py-2",
2276
+ "oui-rounded-lg oui-border oui-border-solid oui-border-white/[0.12]"
2277
+ ),
2278
+ children: [
2279
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-gap-1 oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54", children: [
2280
+ label,
2281
+ showTooltip && tooltipContent && /* @__PURE__ */ jsx(Tooltip, { content: tooltipContent, delayDuration: 100, children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
2282
+ InfoCircleIcon,
2283
+ {
2284
+ size: 12,
2285
+ opacity: 0.54,
2286
+ className: "oui-text-base-contrast"
2287
+ }
2288
+ ) }) })
2289
+ ] }),
2290
+ textProps.type === "gradient" ? /* @__PURE__ */ jsx(
2291
+ Text.gradient,
2292
+ {
2293
+ className: "oui-text-base oui-font-semibold",
2294
+ ...textProps,
2295
+ children: value
2296
+ }
2297
+ ) : /* @__PURE__ */ jsx(
2298
+ Text.numeral,
2299
+ {
2300
+ className: "oui-text-base oui-font-semibold",
2301
+ ...textProps,
2302
+ children: value
2303
+ }
2304
+ )
2305
+ ]
2306
+ }
2307
+ );
2308
+ };
2309
+ LpInfoItem = (props) => {
2310
+ const { label, value, textProps } = props;
2311
+ return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-w-full oui-items-center oui-justify-between oui-text-2xs oui-font-normal", children: [
2312
+ /* @__PURE__ */ jsx("div", { className: "oui-text-base-contrast-54", children: label }),
2313
+ /* @__PURE__ */ jsx(
2314
+ Text.numeral,
2315
+ {
2316
+ className: "oui-text-base-contrast-80",
2317
+ ...textProps,
2318
+ dp: 2,
2319
+ suffix: /* @__PURE__ */ jsx("span", { className: "oui-ml-1 oui-text-base-contrast-36", children: "USDC" }),
2320
+ children: value
2321
+ }
2322
+ )
2323
+ ] });
2324
+ };
2325
+ VaultCardOperation = (props) => {
2326
+ const {
2327
+ isEVMConnected,
2328
+ isSOLConnected,
2329
+ openDepositAndWithdraw,
2330
+ isButtonsDisabled
2331
+ } = props;
2332
+ const { t } = useTranslation();
2333
+ return /* @__PURE__ */ jsx(AuthGuard, { buttonProps: { size: "md", fullWidth: true }, children: isEVMConnected || isSOLConnected ? /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-gap-2", children: [
2334
+ /* @__PURE__ */ jsx(
2335
+ Button,
2336
+ {
2337
+ className: "oui-flex-1",
2338
+ size: "md",
2339
+ disabled: isButtonsDisabled,
2340
+ onClick: () => openDepositAndWithdraw("deposit"),
2341
+ children: t("common.deposit")
2342
+ }
2343
+ ),
2344
+ /* @__PURE__ */ jsx(
2345
+ Button,
2346
+ {
2347
+ className: "oui-flex-1",
2348
+ size: "md",
2349
+ color: "secondary",
2350
+ disabled: isButtonsDisabled,
2351
+ onClick: () => openDepositAndWithdraw("withdraw"),
2352
+ children: t("common.withdraw")
2353
+ }
2354
+ )
2355
+ ] }) : /* @__PURE__ */ jsx(Button, { size: "md", color: "warning", children: t("connector.wrongNetwork") }) });
2356
+ };
2357
+ }
2358
+ });
2359
+ var VaultCardWidget;
2360
+ var init_vaultCard_widget = __esm({
2361
+ "src/components/vault-card/vaultCard.widget.tsx"() {
2362
+ init_vaultCard_script();
2363
+ init_vaultCard_ui();
2364
+ VaultCardWidget = (props) => {
2365
+ const { vault } = props;
2366
+ const state = useVaultCardScript(vault);
2367
+ return /* @__PURE__ */ jsx(VaultCard, { ...state });
2368
+ };
2369
+ }
2370
+ });
2371
+
2372
+ // src/components/vault-card/index.ts
2373
+ var init_vault_card = __esm({
2374
+ "src/components/vault-card/index.ts"() {
2375
+ init_vaultCard_widget();
2376
+ init_vaultCard_script();
2377
+ init_vaultCard_ui();
2378
+ init_constants();
2379
+ }
2380
+ });
2381
+ var VaultsList, VaultListRow;
2382
+ var init_vaults_list = __esm({
2383
+ "src/components/all-vaults/vaults-list.tsx"() {
2384
+ init_vaultCard_script();
2385
+ init_vaultCard_ui();
2386
+ VaultsList = ({ vaults }) => {
2387
+ const { t } = useTranslation();
2388
+ const [sortField, setSortField] = useState("apy");
2389
+ const [sortDirection, setSortDirection] = useState("desc");
2390
+ const shouldShowApyTooltip = useMemo(() => {
2391
+ return vaults.some(
2392
+ (vault) => vault.status === "pre_launch" || vault.vault_age !== null && vault.vault_age < 7
2393
+ );
2394
+ }, [vaults]);
2395
+ const handleSort = (field) => {
2396
+ if (sortField === field) {
2397
+ setSortDirection(sortDirection === "asc" ? "desc" : "asc");
2398
+ } else {
2399
+ setSortField(field);
2400
+ setSortDirection("desc");
2401
+ }
2402
+ };
2403
+ const sortedVaults = useMemo(() => {
2404
+ return [...vaults].sort((a, b) => {
2405
+ let aValue = 0;
2406
+ let bValue = 0;
2407
+ switch (sortField) {
2408
+ case "tvl":
2409
+ aValue = a.tvl;
2410
+ bValue = b.tvl;
2411
+ break;
2412
+ case "apy":
2413
+ aValue = a.lifetime_apy;
2414
+ bValue = b.lifetime_apy;
2415
+ break;
2416
+ default:
2417
+ return 0;
2418
+ }
2419
+ return sortDirection === "asc" ? aValue - bValue : bValue - aValue;
2420
+ });
2421
+ }, [vaults, sortField, sortDirection]);
2422
+ const SortIcon = ({ field }) => {
2423
+ const isActive = sortField === field;
2424
+ return /* @__PURE__ */ jsxs(
2425
+ "svg",
2426
+ {
2427
+ width: "12",
2428
+ height: "12",
2429
+ viewBox: "0 0 12 12",
2430
+ fill: "none",
2431
+ xmlns: "http://www.w3.org/2000/svg",
2432
+ className: cn(
2433
+ "oui-ml-1 oui-transition-colors",
2434
+ isActive ? "oui-text-base-contrast" : "oui-text-base-contrast-36"
2435
+ ),
2436
+ children: [
2437
+ /* @__PURE__ */ jsx(
2438
+ "path",
2439
+ {
2440
+ d: "M6 2L8 4H4L6 2Z",
2441
+ fill: "currentColor",
2442
+ opacity: isActive && sortDirection === "asc" ? 1 : 0.3
2443
+ }
2444
+ ),
2445
+ /* @__PURE__ */ jsx(
2446
+ "path",
2447
+ {
2448
+ d: "M6 10L4 8H8L6 10Z",
2449
+ fill: "currentColor",
2450
+ opacity: isActive && sortDirection === "desc" ? 1 : 0.3
2451
+ }
2452
+ )
2453
+ ]
2454
+ }
2455
+ );
2456
+ };
2457
+ return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-3", children: [
2458
+ /* @__PURE__ */ jsxs("div", { className: "oui-grid oui-grid-cols-[2fr_1fr_1fr_1fr_1fr_1fr_1.5fr] oui-gap-4 oui-px-4 oui-py-3", children: [
2459
+ /* @__PURE__ */ jsx("div", { className: "oui-text-2xs oui-font-normal oui-text-base-contrast-54", children: t("vaults.list.poolName") }),
2460
+ /* @__PURE__ */ jsxs(
2461
+ "button",
2462
+ {
2463
+ onClick: () => handleSort("tvl"),
2464
+ className: "oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast",
2465
+ children: [
2466
+ "TVL",
2467
+ /* @__PURE__ */ jsx(SortIcon, { field: "tvl" })
2468
+ ]
2469
+ }
2470
+ ),
2471
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-gap-1", children: [
2472
+ /* @__PURE__ */ jsxs(
2473
+ "button",
2474
+ {
2475
+ onClick: () => handleSort("apy"),
2476
+ className: "oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast",
2477
+ children: [
2478
+ t("vaults.card.allTimeReturn"),
2479
+ /* @__PURE__ */ jsx(SortIcon, { field: "apy" })
2480
+ ]
2481
+ }
2482
+ ),
2483
+ shouldShowApyTooltip && /* @__PURE__ */ jsx(
2484
+ Tooltip,
2485
+ {
2486
+ content: t("vaults.card.allTimeReturnTooltip"),
2487
+ delayDuration: 100,
2488
+ children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
2489
+ InfoCircleIcon,
2490
+ {
2491
+ size: 12,
2492
+ opacity: 0.54,
2493
+ className: "oui-text-base-contrast"
2494
+ }
2495
+ ) })
2496
+ }
2497
+ )
2498
+ ] }),
2499
+ /* @__PURE__ */ jsxs(
2500
+ "button",
2501
+ {
2502
+ onClick: () => handleSort("deposits"),
2503
+ className: "oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast",
2504
+ children: [
2505
+ t("vaults.list.myDeposits"),
2506
+ /* @__PURE__ */ jsx(SortIcon, { field: "deposits" })
2507
+ ]
2508
+ }
2509
+ ),
2510
+ /* @__PURE__ */ jsxs(
2511
+ "button",
2512
+ {
2513
+ onClick: () => handleSort("pnl"),
2514
+ className: "oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast",
2515
+ children: [
2516
+ t("vaults.list.allTimePnl"),
2517
+ /* @__PURE__ */ jsx(SortIcon, { field: "pnl" })
2518
+ ]
2519
+ }
2520
+ ),
2521
+ /* @__PURE__ */ jsx("div", { className: "oui-text-2xs oui-font-normal oui-text-base-contrast-54", children: t("vaults.card.accountBalance") }),
2522
+ /* @__PURE__ */ jsx("div", { className: "oui-text-2xs oui-font-normal oui-text-base-contrast-54", children: t("vaults.list.operate") })
2523
+ ] }),
2524
+ /* @__PURE__ */ jsx("div", { className: "oui-flex oui-flex-col oui-gap-2", children: sortedVaults.map((vault) => /* @__PURE__ */ jsx(VaultListRow, { vault }, vault.vault_id)) })
2525
+ ] });
2526
+ };
2527
+ VaultListRow = ({ vault }) => {
2528
+ const { t } = useTranslation();
2529
+ const script = useVaultCardScript(vault);
2530
+ const {
2531
+ title,
2532
+ vaultInfo,
2533
+ lpInfo,
2534
+ isEVMConnected,
2535
+ isSOLConnected,
2536
+ openDepositAndWithdraw,
2537
+ availableBalance,
2538
+ openVaultWebsite,
2539
+ icon,
2540
+ isButtonsDisabled
2541
+ } = script;
2542
+ vaultInfo.status === "pre_launch";
2543
+ const { isMobile } = useScreen();
2544
+ const getStatusTag = () => {
2545
+ const { status } = vaultInfo;
2546
+ if (status === "live") {
2547
+ return {
2548
+ text: t("vaults.card.status.active"),
2549
+ color: "#00C076",
2550
+ bgColor: "rgba(0, 192, 118, 0.15)"
2551
+ };
2552
+ } else if (status === "pre_launch") {
2553
+ return {
2554
+ text: t("vaults.card.launchingSoon"),
2555
+ color: "#E88800",
2556
+ bgColor: "rgba(232, 136, 0, 0.15)"
2557
+ };
2558
+ } else if (status === "closing") {
2559
+ return {
2560
+ text: t("vaults.card.status.closing"),
2561
+ color: "#FF6B6B",
2562
+ bgColor: "rgba(255, 107, 107, 0.15)"
2563
+ };
2564
+ } else if (status === "closed") {
2565
+ return {
2566
+ text: t("vaults.card.status.closed"),
2567
+ color: "#999999",
2568
+ bgColor: "rgba(153, 153, 153, 0.15)"
2569
+ };
2570
+ }
2571
+ return null;
2572
+ };
2573
+ const statusTag = getStatusTag();
2574
+ const formattedAllTimeReturn = useMemo(
2575
+ () => formatAllTimeReturn(
2576
+ vaultInfo.status,
2577
+ vaultInfo.vault_age,
2578
+ vaultInfo.lifetime_apy
2579
+ ),
2580
+ [vaultInfo.status, vaultInfo.vault_age, vaultInfo.lifetime_apy]
2581
+ );
2582
+ useMemo(() => {
2583
+ const chains = Array.isArray(vaultInfo?.supported_chains) ? vaultInfo.supported_chains : [];
2584
+ const ICON_SIZE = isMobile ? 18 : 20;
2585
+ return /* @__PURE__ */ jsx("div", { className: "oui-flex oui-items-center", children: chains.map((chain, index) => /* @__PURE__ */ jsx(
2586
+ "img",
2587
+ {
2588
+ src: `https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`,
2589
+ alt: chain.chain_id,
2590
+ className: cn(
2591
+ "oui-relative",
2592
+ isMobile ? "oui-size-[18px]" : "oui-size-5"
2593
+ ),
2594
+ style: {
2595
+ marginLeft: index > 0 ? "-4px" : "0",
2596
+ zIndex: chains.length - index,
2597
+ width: ICON_SIZE,
2598
+ height: ICON_SIZE
2599
+ }
2600
+ },
2601
+ chain.chain_id
2602
+ )) });
2603
+ }, [vaultInfo.supported_chains, isMobile]);
2604
+ return /* @__PURE__ */ jsxs("div", { className: "oui-relative oui-grid oui-grid-cols-[2fr_1fr_1fr_1fr_1fr_1fr_1.5fr] oui-gap-4 oui-rounded-2xl oui-bg-base-9 oui-px-4 oui-py-4 oui-items-center oui-overflow-hidden", children: [
2605
+ /* @__PURE__ */ jsx("div", { className: "oui-relative oui-z-10 oui-flex oui-items-center oui-gap-2", children: /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-1", children: [
2606
+ /* @__PURE__ */ jsx("div", { className: "oui-text-sm oui-font-semibold oui-text-base-contrast", children: title }),
2607
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-wrap oui-items-center oui-gap-2", children: [
2608
+ statusTag && /* @__PURE__ */ jsx(
2609
+ "div",
2610
+ {
2611
+ className: "oui-flex oui-items-center oui-gap-[10px] oui-px-2 oui-whitespace-nowrap oui-flex-shrink-0",
2612
+ style: {
2613
+ height: "18px",
2614
+ borderRadius: "4px",
2615
+ background: statusTag.bgColor,
2616
+ color: statusTag.color,
2617
+ fontSize: "12px",
2618
+ fontWeight: 600,
2619
+ lineHeight: "18px",
2620
+ letterSpacing: "0.36px"
2621
+ },
2622
+ children: statusTag.text
2623
+ }
2624
+ ),
2625
+ /* @__PURE__ */ jsxs(
2626
+ "button",
2627
+ {
2628
+ onClick: openVaultWebsite,
2629
+ className: "oui-flex oui-items-center oui-gap-1 oui-text-xs oui-font-medium",
2630
+ style: { color: "#608CFF" },
2631
+ children: [
2632
+ /* @__PURE__ */ jsx("span", { children: t("vaults.card.viewMore") }),
2633
+ /* @__PURE__ */ jsx(
2634
+ ArrowRightUpSquareFillIcon,
2635
+ {
2636
+ style: { color: "#608CFF" },
2637
+ width: 16,
2638
+ height: 16,
2639
+ viewBox: "0 0 18 18"
2640
+ }
2641
+ )
2642
+ ]
2643
+ }
2644
+ )
2645
+ ] })
2646
+ ] }) }),
2647
+ /* @__PURE__ */ jsx("div", { className: "oui-relative oui-z-10", children: /* @__PURE__ */ jsx(
2648
+ Text.numeral,
2649
+ {
2650
+ className: "oui-text-sm oui-font-normal oui-text-base-contrast",
2651
+ currency: "$",
2652
+ dp: 0,
2653
+ children: vaultInfo.tvl
2654
+ }
2655
+ ) }),
2656
+ /* @__PURE__ */ jsx("div", { className: "oui-relative oui-z-10", children: /* @__PURE__ */ jsx(Text.gradient, { className: "oui-text-sm oui-font-semibold", color: "brand", children: formattedAllTimeReturn }) }),
2657
+ /* @__PURE__ */ jsx("div", { className: "oui-relative oui-z-10", children: /* @__PURE__ */ jsx(
2658
+ Text.numeral,
2659
+ {
2660
+ className: "oui-text-sm oui-font-normal oui-text-base-contrast",
2661
+ dp: 2,
2662
+ children: lpInfo.deposits
2663
+ }
2664
+ ) }),
2665
+ /* @__PURE__ */ jsx("div", { className: "oui-relative oui-z-10", children: /* @__PURE__ */ jsx(
2666
+ Text.numeral,
2667
+ {
2668
+ className: "oui-text-sm oui-font-normal oui-text-base-contrast",
2669
+ dp: 2,
2670
+ children: lpInfo.earnings
2671
+ }
2672
+ ) }),
2673
+ /* @__PURE__ */ jsx("div", { className: "oui-relative oui-z-10", children: /* @__PURE__ */ jsx(
2674
+ Text.numeral,
2675
+ {
2676
+ className: "oui-text-sm oui-font-normal oui-text-base-contrast",
2677
+ dp: 2,
2678
+ children: availableBalance
2679
+ }
2680
+ ) }),
2681
+ /* @__PURE__ */ jsx("div", { className: "oui-relative oui-z-10 oui-flex oui-items-center oui-gap-2", children: /* @__PURE__ */ jsx(AuthGuard, { buttonProps: { size: "sm" }, children: isEVMConnected || isSOLConnected ? /* @__PURE__ */ jsxs(Fragment, { children: [
2682
+ /* @__PURE__ */ jsx(
2683
+ Button,
2684
+ {
2685
+ size: "sm",
2686
+ className: "oui-flex-1",
2687
+ disabled: isButtonsDisabled,
2688
+ onClick: () => openDepositAndWithdraw("deposit"),
2689
+ children: t("common.deposit")
2690
+ }
2691
+ ),
2692
+ /* @__PURE__ */ jsx(
2693
+ Button,
2694
+ {
2695
+ size: "sm",
2696
+ color: "secondary",
2697
+ className: "oui-flex-1",
2698
+ disabled: isButtonsDisabled,
2699
+ onClick: () => openDepositAndWithdraw("withdraw"),
2700
+ children: t("common.withdraw")
2701
+ }
2702
+ )
2703
+ ] }) : /* @__PURE__ */ jsx(Button, { size: "sm", color: "warning", fullWidth: true, children: t("connector.wrongNetwork") }) }) })
2704
+ ] });
2705
+ };
2706
+ }
2707
+ });
2708
+ var ViewModeToggle;
2709
+ var init_view_mode_toggle = __esm({
2710
+ "src/components/all-vaults/view-mode-toggle.tsx"() {
2711
+ ViewModeToggle = ({ mode, onChange }) => {
2712
+ const toggleMode = () => {
2713
+ onChange(mode === "grid" ? "list" : "grid");
2714
+ };
2715
+ return /* @__PURE__ */ jsx(
2716
+ "button",
2717
+ {
2718
+ onClick: toggleMode,
2719
+ className: "oui-flex oui-h-8 oui-w-8 oui-items-center oui-justify-center oui-rounded oui-transition-colors hover:oui-bg-base-6",
2720
+ "aria-label": mode === "grid" ? "Switch to list view" : "Switch to grid view",
2721
+ children: mode === "grid" ? /* @__PURE__ */ jsx(
2722
+ "svg",
2723
+ {
2724
+ width: "18",
2725
+ height: "18",
2726
+ viewBox: "0 0 18 18",
2727
+ fill: "none",
2728
+ xmlns: "http://www.w3.org/2000/svg",
2729
+ children: /* @__PURE__ */ jsx(
2730
+ "path",
2731
+ {
2732
+ d: "M2 4h14v2H2V4zm0 4h14v2H2V8zm0 4h14v2H2v-2z",
2733
+ fill: "currentColor",
2734
+ opacity: "0.54"
2735
+ }
2736
+ )
2737
+ }
2738
+ ) : /* @__PURE__ */ jsx(
2739
+ "svg",
2740
+ {
2741
+ width: "18",
2742
+ height: "18",
2743
+ viewBox: "0 0 18 18",
2744
+ fill: "none",
2745
+ xmlns: "http://www.w3.org/2000/svg",
2746
+ children: /* @__PURE__ */ jsx(
2747
+ "path",
2748
+ {
2749
+ d: "M2 2h6v6H2V2zm0 8h6v6H2v-6zm8-8h6v6h-6V2zm0 8h6v6h-6v-6z",
2750
+ fill: "currentColor",
2751
+ opacity: "0.54"
2752
+ }
2753
+ )
2754
+ }
2755
+ )
2756
+ }
2757
+ );
2758
+ };
2759
+ }
2760
+ });
2761
+ var AllVaultsDesktop;
2762
+ var init_all_vaults_desktop = __esm({
2763
+ "src/components/all-vaults/all-vaults.desktop.tsx"() {
2764
+ init_vault_card();
2765
+ init_vaults_list();
2766
+ init_view_mode_toggle();
2767
+ AllVaultsDesktop = (props) => {
2768
+ const { vaults } = props;
2769
+ const { t } = useTranslation();
2770
+ const [viewMode, setViewMode] = useState("grid");
2771
+ return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-6", children: [
2772
+ /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-items-center oui-justify-between", children: [
2773
+ /* @__PURE__ */ jsx("div", { className: "oui-text-xl oui-font-normal oui-text-base-contrast", children: t("vaults.allVaults") }),
2774
+ /* @__PURE__ */ jsx(ViewModeToggle, { mode: viewMode, onChange: setViewMode })
2775
+ ] }),
2776
+ viewMode === "grid" ? /* @__PURE__ */ jsx("div", { className: "oui-grid oui-grid-cols-3 oui-gap-4 min-[1024px]:oui-grid-cols-3", children: vaults.map((vault) => /* @__PURE__ */ jsx(VaultCardWidget, { vault }, vault.vault_id)) }) : /* @__PURE__ */ jsx(VaultsList, { vaults })
2777
+ ] });
2778
+ };
2779
+ }
2780
+ });
2781
+ var AllVaultsMobile;
2782
+ var init_all_vaults_mobile = __esm({
2783
+ "src/components/all-vaults/all-vaults.mobile.tsx"() {
2784
+ init_vault_card();
2785
+ AllVaultsMobile = (props) => {
2786
+ const { vaults } = props;
2787
+ return /* @__PURE__ */ jsx("div", { className: "oui-flex oui-flex-col oui-gap-3", children: vaults.map((vault) => /* @__PURE__ */ jsx(VaultCardWidget, { vault }, vault.vault_id)) });
2788
+ };
2789
+ }
2790
+ });
2791
+ var AllVaultsWidget;
2792
+ var init_all_vaults_widget = __esm({
2793
+ "src/components/all-vaults/all-vaults.widget.tsx"() {
2794
+ init_vaultsStore();
2795
+ init_all_vaults_desktop();
2796
+ init_all_vaults_mobile();
2797
+ AllVaultsWidget = () => {
2798
+ const { data } = useVaultInfoState();
2799
+ const { isMobile } = useScreen();
2800
+ return isMobile ? /* @__PURE__ */ jsx(AllVaultsMobile, { vaults: data }) : /* @__PURE__ */ jsx(AllVaultsDesktop, { vaults: data });
2801
+ };
2802
+ }
2803
+ });
2804
+
2805
+ // src/components/all-vaults/index.ts
2806
+ var all_vaults_exports = {};
2807
+ __export(all_vaults_exports, {
2808
+ AllVaultsDesktop: () => AllVaultsDesktop,
2809
+ AllVaultsWidget: () => AllVaultsWidget,
2810
+ VaultsList: () => VaultsList,
2811
+ ViewModeToggle: () => ViewModeToggle
2812
+ });
2813
+ var init_all_vaults = __esm({
2814
+ "src/components/all-vaults/index.ts"() {
2815
+ init_all_vaults_widget();
2816
+ init_all_vaults_desktop();
2817
+ init_view_mode_toggle();
2818
+ init_vaults_list();
2819
+ }
2820
+ });
2821
+
2822
+ // src/components/provider/vaults-provider.tsx
2823
+ init_useSVAPIUrl();
2824
+ init_store();
2825
+ var VaultsProvider = (props) => {
2826
+ const svApiUrl = useSVApiUrl();
2827
+ const brokerId = useConfig("brokerId");
2828
+ const {
2829
+ fetchVaultInfo,
2830
+ fetchVaultOverallInfo,
2831
+ setVaultsPageConfig,
2832
+ vaultsPageConfig
2833
+ } = useVaultsStore();
2834
+ useEffect(() => {
2835
+ if (props.config) {
2836
+ setVaultsPageConfig(props.config);
2837
+ }
2838
+ }, [props.config]);
2839
+ useEffect(() => {
2840
+ if (!svApiUrl) {
2841
+ return;
2842
+ }
2843
+ fetchVaultInfo(void 0, svApiUrl);
2844
+ }, [svApiUrl]);
2845
+ useEffect(() => {
2846
+ if (!svApiUrl || !brokerId) {
2847
+ return;
2848
+ }
2849
+ const brokerIds = vaultsPageConfig?.overallInfoBrokerIds ? vaultsPageConfig.overallInfoBrokerIds : `orderly,${brokerId}`;
2850
+ fetchVaultOverallInfo(
2851
+ brokerIds ? { broker_ids: brokerIds } : void 0,
2852
+ svApiUrl
2853
+ );
2854
+ }, [
2855
+ svApiUrl,
2856
+ brokerId,
2857
+ vaultsPageConfig?.overallInfoBrokerIds,
2858
+ fetchVaultOverallInfo
2859
+ ]);
2860
+ return /* @__PURE__ */ jsx("div", { children: props.children });
2861
+ };
2862
+ var LazyVaultsHeaderWidget = React.lazy(
2863
+ () => Promise.resolve().then(() => (init_vaults_header(), vaults_header_exports)).then((mod) => {
2864
+ return { default: mod.VaultsHeaderWidget };
2865
+ })
2866
+ );
2867
+ var LazyVaultsIntroductionWidget = React.lazy(
2868
+ () => Promise.resolve().then(() => (init_vaults_introduction(), vaults_introduction_exports)).then((mod) => {
2869
+ return { default: mod.VaultsIntroductionWidget };
2870
+ })
2871
+ );
2872
+ var LazyAllVaultsWidget = React.lazy(
2873
+ () => Promise.resolve().then(() => (init_all_vaults(), all_vaults_exports)).then((mod) => {
2874
+ return { default: mod.AllVaultsWidget };
2875
+ })
2876
+ );
2877
+ var VaultsPage = (props) => {
2878
+ const { isMobile } = useScreen();
2879
+ return /* @__PURE__ */ jsx(VaultsProvider, { ...props, children: /* @__PURE__ */ jsx(
2880
+ "div",
2881
+ {
2882
+ className: cn(
2883
+ "oui-relative oui-min-h-screen ",
2884
+ "oui-bg-base-10",
2885
+ isMobile ? "oui-px-3 oui-py-6" : "oui-px-6 oui-py-12",
2886
+ props?.className
2887
+ ),
2888
+ children: /* @__PURE__ */ jsxs(
2889
+ "div",
2890
+ {
2891
+ id: "vaults-content",
2892
+ className: cn(
2893
+ "oui-mx-auto oui-flex oui-max-w-[1200px] oui-flex-col",
2894
+ isMobile ? "oui-gap-6" : "oui-gap-12"
2895
+ ),
2896
+ children: [
2897
+ /* @__PURE__ */ jsx(React.Suspense, { fallback: null, children: /* @__PURE__ */ jsx(LazyVaultsHeaderWidget, {}) }),
2898
+ /* @__PURE__ */ jsx(React.Suspense, { fallback: null, children: /* @__PURE__ */ jsx(LazyVaultsIntroductionWidget, {}) }),
2899
+ /* @__PURE__ */ jsx(React.Suspense, { fallback: null, children: /* @__PURE__ */ jsx(LazyAllVaultsWidget, {}) })
2900
+ ]
2901
+ }
2902
+ )
2903
+ }
2904
+ ) });
2905
+ };
2906
+
2907
+ // src/types/index.ts
2908
+ init_vault();
2909
+
2910
+ // src/index.ts
2911
+ init_api();
2912
+ init_store();
2913
+
2914
+ // src/components/index.ts
2915
+ init_all_vaults();
2916
+ init_vault_card();
2917
+ init_vaults_header();
2918
+ init_vaults_introduction();
2919
+
2920
+ // src/components/vault-operation/index.ts
2921
+ init_depositAndWithdraw();
2922
+ init_deposit();
2923
+ init_withdraw();
2924
+
2925
+ // src/components/vault-operation/latest-deposit/index.ts
2926
+ init_latest_deposit_widget();
2927
+
2928
+ // src/components/vault-operation/index.ts
2929
+ init_latest_withdraw();
2930
+
2931
+ export { AllVaultsDesktop, AllVaultsWidget, LatestDepositWidget, LatestWithdrawWidget, ORDERLY_ICON, ORDERLY_VAULT_DESCRIPTION, ORDERLY_VAULT_TITLE, OperationType, RoleType, VaultCard, VaultCardWidget, VaultDepositAndWithdraw, VaultDepositAndWithdrawWithDialogId, VaultDepositAndWithdrawWithSheetId, VaultDepositWidget, VaultWithdrawWidget, VaultsHeaderDesktop, VaultsHeaderWidget, VaultsIntroductionWidget, VaultsList, VaultsPage, ViewModeToggle, formatAllTimeReturn, getBrokerIconUrl, getVaultInfo, getVaultLpInfo, getVaultLpPerformance, getVaultOverallInfo, useVaultCardScript, useVaultInfoActions, useVaultInfoState, useVaultLpInfoActions, useVaultLpInfoArray, useVaultLpInfoById, useVaultLpInfoIds, useVaultLpInfoState, useVaultLpPerformanceActions, useVaultLpPerformanceArray, useVaultLpPerformanceById, useVaultLpPerformanceIds, useVaultLpPerformanceState, useVaultOverallInfoActions, useVaultOverallInfoState, useVaultsHeaderScript, useVaultsStore };
16
2932
  //# sourceMappingURL=out.js.map
17
2933
  //# sourceMappingURL=index.mjs.map