@liberfi.io/ui-perpetuals 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +8 -15
- package/dist/index.d.ts +8 -15
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime'),reactQuery=require('@tanstack/react-query'),ui=require('@liberfi.io/ui'),reactWindow=require('react-window'),hooks=require('@liberfi.io/hooks'),reactHookForm=require('react-hook-form'),walletConnector=require('@liberfi.io/wallet-connector'),i18n=require('@liberfi.io/i18n');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-perpetuals"]="0.3.0");var Ti="0.3.0";var Oi=new Set(["userFills","userFillsByTime","userFunding","userNonFundingLedgerUpdates","frontendOpenOrders","userRateLimit","historicalOrders","userTwapSliceFills","predictedFundings"]);function Gt(e){return e&&Oi.has(e)?20:2}var Cs=1,rt=class{capacity;windowMs;tokens;lastRefill;constructor(t={}){this.capacity=t.capacity??1200,this.windowMs=t.windowMs??6e4,this.tokens=this.capacity,this.lastRefill=Date.now();}reset(){this.tokens=this.capacity,this.lastRefill=Date.now();}async waitForToken(t){let r=Math.max(1,Math.floor(t));for(;;){if(this.refill(),this.tokens>=r){this.tokens-=r;return}let s=Math.max(25,this.windowMs-(Date.now()-this.lastRefill));await new Promise(n=>setTimeout(n,s));}}refill(){let t=Date.now();t-this.lastRefill>=this.windowMs&&(this.tokens=this.capacity,this.lastRefill=t);}};function Di(e,t,r){if(e!=="orderBook"||!r||r.nSigFigs===void 0)return `${e}:${t}`;let s=r.nSigFigs===5&&r.mantissa&&r.mantissa!==1?`:m${r.mantissa}`:"";return `${e}:${t}:n${r.nSigFigs}${s}`}var We=class{ws=null;wsEndpoint;subscriptions=new Map;reconnectAttempts=0;maxReconnectAttempts=10;reconnectDelay=1e3;heartbeatInterval=null;messageQueue=[];isConnected=false;pingInterval=3e4;reconnectTimeout=null;isReconnecting=false;connectPromise=null;manuallyDisconnected=false;constructor(t){this.wsEndpoint=t;}async connect(){if(!(this.isConnected&&this.ws?.readyState===WebSocket.OPEN))return this.connectPromise?this.connectPromise:(this.manuallyDisconnected=false,this.connectPromise=new Promise((t,r)=>{let s=false,n=i=>{s||(s=true,this.connectPromise=null,i());};try{let i=new WebSocket(this.wsEndpoint);this.ws=i,i.onopen=()=>{this.ws===i&&(console.log("[WebSocket] Connected to Hyperliquid"),this.isConnected=!0,this.reconnectAttempts=0,this.isReconnecting=!1,this.startHeartbeat(),this.flushMessageQueue(),n(t));},i.onmessage=o=>{this.ws===i&&this.handleMessage(o.data);},i.onerror=o=>{this.ws===i&&(console.error("[WebSocket] Error:",o),this.isConnected=!1,n(()=>r(new Error("WebSocket connection failed"))));},i.onclose=o=>{this.ws===i&&(console.log(`[WebSocket] Closed: ${o.code} - ${o.reason||"No reason provided"}`),this.isConnected=!1,this.stopHeartbeat(),this.connectPromise=null,s||n(()=>r(new Error(`WebSocket closed before connection was established: ${o.code}`))),!this.manuallyDisconnected&&o.code!==1e3&&this.attemptReconnect());};}catch(i){n(()=>r(i));}}),this.connectPromise)}disconnect(){this.manuallyDisconnected=true,this.stopHeartbeat(),this.subscriptions.clear(),this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&(this.ws.close(1e3,"Normal closure"),this.ws=null),this.isConnected=false,this.isReconnecting=false,this.reconnectAttempts=0;}attemptReconnect(){if(this.isReconnecting)return;if(this.reconnectAttempts>=this.maxReconnectAttempts){console.error("[WebSocket] Max reconnection attempts reached");return}this.isReconnecting=true,this.reconnectAttempts++;let t=Math.min(this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1),3e4);console.log(`[WebSocket] Reconnecting in ${t}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`),this.reconnectTimeout=window.setTimeout(()=>{this.connect().then(()=>{this.resubscribeAll();}).catch(r=>{console.error("[WebSocket] Reconnection failed:",r),this.isReconnecting=false;});},t);}startHeartbeat(){this.heartbeatInterval=window.setInterval(()=>{this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN&&this.send({method:"ping"});},this.pingInterval);}stopHeartbeat(){this.heartbeatInterval!==null&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null);}send(t){this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(t)):this.messageQueue.push(t);}flushMessageQueue(){for(;this.messageQueue.length>0;){let t=this.messageQueue.shift();t&&this.send(t);}}resubscribeAll(){this.subscriptions.forEach(t=>{this.sendSubscription(t.type,t.param,t.aggregation);});}handleMessage(t){try{let r=JSON.parse(t);r.channel?this.handleChannelMessage(r):r.method;}catch(r){console.error("[WebSocket] Failed to parse message:",r,t);}}handleChannelMessage(t){let r=t.channel;this.subscriptions.forEach((s,n)=>{if(this.isChannelMatch(r,s.type,s.param,t))try{let i=this.transformData(s.type,t.data,s.param);s.callback(i);}catch(i){console.error(`[WebSocket] Error in subscription callback (${n}):`,i);}});}isChannelMatch(t,r,s,n){if(r==="ticker"){if(t!=="activeAssetCtx")return false;let i=s.split("-")[0],o=n?.data?.coin;return typeof o=="string"&&o===i}else if(r==="trades"){if(t!=="trades")return false;let i=s.split("-")[0],o=Array.isArray(n?.data)?n.data[0]?.coin:void 0;return typeof o!="string"||o===i}else if(r==="orderBook"){if(t!=="l2Book")return false;let i=s.split("-")[0],o=n?.data?.coin;return typeof o=="string"&&o===i}else {if(r==="candle")return t==="candle";if(r==="userFills")return t==="userFills";if(r==="userEvents")return t==="userEvents";if(r==="accountState")return t==="webData2"}return false}transformData(t,r,s){return t==="ticker"?this.transformTickerData(r,s):t==="trades"?this.transformTradesData(r,s):t==="orderBook"?this.transformOrderBookData(r,s):t==="candle"?this.transformCandleData(r,s):t==="userFills"?this.transformUserFillsData(r):t==="userEvents"?this.transformUserEventsData(r):r}transformTickerData(t,r){let n=`${t?.coin??r.split("-")[0]}-USDC`,i=t?.ctx??{},o=parseFloat(i.midPx??i.markPx??"0"),a=parseFloat(i.markPx??i.midPx??"0"),l=i.prevDayPx?parseFloat(i.prevDayPx):o,u=l>0?(o-l)/l*100:0;return {symbol:n,price:o,change24h:u,volume24h:parseFloat(i.dayNtlVlm??"0"),fundingRate:parseFloat(i.funding??"0"),openInterest:parseFloat(i.openInterest??"0"),markPrice:a,indexPrice:parseFloat(i.oraclePx??i.midPx??"0")}}transformTradesData(t,r){return Array.isArray(t)?t.map(s=>({symbol:r,side:s.side==="B"?"buy":"sell",price:parseFloat(s.px),quantity:parseFloat(s.sz),timestamp:s.time,tradeId:s.tid})):[]}transformOrderBookData(t,r){let[s,n]=t.levels||[[],[]];return {symbol:r,bids:s.map(i=>({price:parseFloat(i.px),quantity:parseFloat(i.sz),count:i.n})),asks:n.map(i=>({price:parseFloat(i.px),quantity:parseFloat(i.sz),count:i.n})),timestamp:t.time||Date.now()}}transformCandleData(t,r){let[s]=r.split(":");return {symbol:s,open:parseFloat(t.o),high:parseFloat(t.h),low:parseFloat(t.l),close:parseFloat(t.c),volume:parseFloat(t.v),timestamp:t.t,closeTimestamp:t.T}}transformUserFillsData(t){return Array.isArray(t)?t.map(r=>({tradeId:r.tid?.toString(),orderId:r.oid?.toString(),symbol:`${r.coin}-USDC`,side:r.dir?.includes("Long")?"long":"short",price:parseFloat(r.px),quantity:parseFloat(r.sz),fee:parseFloat(r.fee||"0"),feeCurrency:r.feeToken||"USDC",isMaker:r.side==="M",timestamp:r.time})):[]}transformUserEventsData(t){return t}sendSubscription(t,r,s){let n;if(t==="ticker")n={method:"subscribe",subscription:{type:"activeAssetCtx",coin:r.split("-")[0]}};else if(t==="trades")n={method:"subscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook"){let o={type:"l2Book",coin:r.split("-")[0]};s?.nSigFigs!==void 0&&(o.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(o.mantissa=s.mantissa)),n={method:"subscribe",subscription:o};}else if(t==="candle"){let[i,o]=r.split(":");n={method:"subscribe",subscription:{type:"candle",coin:i.split("-")[0],interval:o}};}else t==="userFills"?n={method:"subscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"?n={method:"subscribe",subscription:{type:"userEvents",user:r}}:t==="accountState"&&(n={method:"subscribe",subscription:{type:"webData2",user:r}});n&&this.send(n);}sendUnsubscription(t,r,s){let n;if(t==="ticker")n={method:"unsubscribe",subscription:{type:"activeAssetCtx",coin:r.split("-")[0]}};else if(t==="trades")n={method:"unsubscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook"){let o={type:"l2Book",coin:r.split("-")[0]};s?.nSigFigs!==void 0&&(o.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(o.mantissa=s.mantissa)),n={method:"unsubscribe",subscription:o};}else if(t==="candle"){let[i,o]=r.split(":");n={method:"unsubscribe",subscription:{type:"candle",coin:i.split("-")[0],interval:o}};}else t==="userFills"?n={method:"unsubscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"?n={method:"unsubscribe",subscription:{type:"userEvents",user:r}}:t==="accountState"&&(n={method:"unsubscribe",subscription:{type:"webData2",user:r}});n&&this.send(n);}subscribe(t,r,s,n){let i=Di(t,r,n);return this.subscriptions.set(i,{type:t,param:r,callback:s,aggregation:n}),this.sendSubscription(t,r,n),i}unsubscribe(t){let r=this.subscriptions.get(t);r&&(this.sendUnsubscription(r.type,r.param,r.aggregation),this.subscriptions.delete(t));}isConnectedNow(){return this.isConnected}};var Ts={testnet:{api:"https://api.hyperliquid-testnet.xyz",ws:"wss://api.hyperliquid-testnet.xyz/ws"},mainnet:{api:"https://api.hyperliquid.xyz",ws:"wss://api.hyperliquid.xyz/ws"}},wi=60*1e3,ki=1500,Ei=1500,jt=class{apiEndpoint;_wsEndpoint;timeout;environment;wsManager=null;wsRefCount=0;assetMetaCache=null;assetMetaPending=null;universeSnapshotCache=null;universeSnapshotPending=null;userStateCache=new Map;userStatePending=new Map;rateLimiter;constructor(t={}){this.environment=t.environment||"testnet",this.apiEndpoint=t.apiEndpoint||Ts[this.environment].api,this._wsEndpoint=t.wsEndpoint||Ts[this.environment].ws,this.timeout=t.timeout||3e4,t.rateLimit===false?this.rateLimiter=null:t.rateLimit instanceof rt?this.rateLimiter=t.rateLimit:this.rateLimiter=new rt(t.rateLimit);}weightFor(t,r){if(t.startsWith("/exchange"))return Cs;if(t.startsWith("/info")){let s=r&&typeof r=="object"&&typeof r.type=="string"?r.type:void 0;return Gt(s)}return Gt(void 0)}async request(t,r){let s=`${this.apiEndpoint}${t}`;this.rateLimiter&&await this.rateLimiter.waitForToken(this.weightFor(t,r));try{let n=new AbortController,i=setTimeout(()=>n.abort(),this.timeout),o=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r),signal:n.signal});if(clearTimeout(i),!o.ok)throw new Pe(`HTTP ${o.status}: ${o.statusText}`,o.status,await o.text());return await o.json()}catch(n){throw n.name==="AbortError"?new Pe(`Request timeout after ${this.timeout}ms`,408,""):n instanceof Pe?n:new Pe(`Network error: ${n.message}`,0,"")}}symbolToCoin(t){return t.split("-")[0]}parseInterval(t){return {"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"1d":864e5,"1w":6048e5}[t]}async getSupportedCoins(){return (await this.getUniverseSnapshot()).assets.map(r=>r.symbol)}async getMarket(t){let r=await this.getMarkets([t]);return r.length>0?r[0]:null}async getMarkets(t){let r=await this.getUniverseSnapshot();if(t&&t.length>0){let s=new Set(t);return r.assets.map(n=>n.market).filter(n=>s.has(n.symbol))}return r.assets.map(s=>s.market)}async getUniverseSnapshot(){let t=Date.now();if(this.universeSnapshotCache&&t-this.universeSnapshotCache.fetchedAt<ki)return this.universeSnapshotCache.snapshot;if(this.universeSnapshotPending)return this.universeSnapshotPending;let r=this.fetchUniverseSnapshot();this.universeSnapshotPending=r;try{let s=await r;return this.universeSnapshotCache={fetchedAt:Date.now(),snapshot:s},s}finally{this.universeSnapshotPending=null;}}async fetchUniverseSnapshot(){let[t,r]=await this.request("/info",{type:"metaAndAssetCtxs"}),s=t.universe.map((i,o)=>{let a=r[o]??{},l=`${i.name}-USDC`,u=parseFloat(a.midPx||a.markPx||"0"),p=a.prevDayPx?parseFloat(a.prevDayPx):u,c=p>0?(u-p)/p*100:0,d={symbol:l,price:u,change24h:c,volume24h:parseFloat(a.dayNtlVlm||"0"),fundingRate:parseFloat(a.funding||"0"),openInterest:parseFloat(a.openInterest||"0"),markPrice:parseFloat(a.markPx||"0"),indexPrice:parseFloat(a.oraclePx||a.midPx||"0")},y=typeof i.szDecimals=="number"?{szDecimals:i.szDecimals,maxLeverage:i.maxLeverage}:null;return {coin:i.name,symbol:l,market:d,meta:y}}),n=new Map;for(let i of s)n.set(i.symbol,i);return {assets:s,bySymbol:n,fetchedAt:Date.now()}}async getUserStateSnapshot(t){let r=t.toLowerCase(),s=Date.now(),n=this.userStateCache.get(r);if(n&&s-n.fetchedAt<Ei)return n.snapshot;let i=this.userStatePending.get(r);if(i)return i;let o=(async()=>{let[a,l]=await Promise.all([this.request("/info",{type:"clearinghouseState",user:t}),this.request("/info",{type:"frontendOpenOrders",user:t}).catch(()=>{})]);return {clearinghouse:a,openOrders:l,fetchedAt:Date.now()}})();this.userStatePending.set(r,o);try{let a=await o;return this.userStateCache.set(r,{fetchedAt:Date.now(),snapshot:a}),a}finally{this.userStatePending.delete(r);}}async getKlines(t,r,s=100){let n=this.symbolToCoin(t),i=typeof s=="number"?{limit:s}:s,o=this.parseInterval(r),a=i.limit,l,u;i.from!==void 0&&i.to!==void 0?(l=i.from,u=i.to):i.to!==void 0&&a?(u=i.to,l=u-o*a):i.from!==void 0&&a?(l=i.from,u=l+o*a):(u=Date.now(),l=u-o*(a??100));let c=(await this.request("/info",{type:"candleSnapshot",req:{coin:n,interval:r,startTime:l,endTime:u}})).map(d=>({symbol:t,open:parseFloat(d.o),high:parseFloat(d.h),low:parseFloat(d.l),close:parseFloat(d.c),volume:parseFloat(d.v),timestamp:d.t,closeTimestamp:d.T}));return a&&c.length>a&&(c=c.slice(c.length-a)),c}async getOrderBook(t,r=10,s){let i={type:"l2Book",coin:this.symbolToCoin(t)};s?.nSigFigs!==void 0&&(i.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(i.mantissa=s.mantissa));let o=await this.request("/info",i),[a,l]=o.levels;return {symbol:t,bids:a.slice(0,r).map(u=>({price:parseFloat(u.px),quantity:parseFloat(u.sz),count:u.n})),asks:l.slice(0,r).map(u=>({price:parseFloat(u.px),quantity:parseFloat(u.sz),count:u.n})),timestamp:o.time}}async getRecentTrades(t,r=50){let s=this.symbolToCoin(t);return (await this.request("/info",{type:"recentTrades",coin:s})).slice(0,r).map(i=>({symbol:t,side:i.side==="B"?"buy":"sell",price:parseFloat(i.px),quantity:parseFloat(i.sz),timestamp:i.time,tradeId:i.tid}))}async placeOrder(t){throw new Error("placeOrder() requires wallet private key configuration for EIP-712 signature. Please configure authentication before calling this method. See: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint")}async cancelOrder(t){throw new Error("cancelOrder() requires wallet private key configuration for EIP-712 signature. Please configure authentication before calling this method. See: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint")}async getPositions(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let[r,s]=await Promise.all([this.getUserStateSnapshot(t.userAddress),this.getUniverseSnapshot()]),n=Ds(r.clearinghouse,t.symbol),i=Os(s);return n.positions=Es(n.positions,r.openOrders??[],i),n.totalUnrealizedPnl=n.positions.reduce((o,a)=>o+a.unrealizedPnl,0),n}async getActiveAssetLeverage(t){let r=this.symbolToCoin(t.symbol);try{let n=(await this.request("/info",{type:"activeAssetData",coin:r,user:t.userAddress}))?.leverage;return !n||typeof n.value!="number"?null:{value:n.value,type:n.type}}catch(s){if(s instanceof Pe&&(s.statusCode===422||s.statusCode===400))return null;throw s}}async getAssetMeta(t){let r=await this.fetchAssetUniverse(),s=this.symbolToCoin(t.symbol);return r.get(s)??null}async fetchAssetUniverse(){let t=Date.now();if(this.assetMetaCache&&t-this.assetMetaCache.fetchedAt<wi)return this.assetMetaCache.map;if(this.assetMetaPending)return this.assetMetaPending;let r=(async()=>{let s=await this.request("/info",{type:"meta"}),n=new Map;for(let i of s.universe)!i||typeof i.name!="string"||typeof i.szDecimals=="number"&&n.set(i.name,{szDecimals:i.szDecimals,maxLeverage:i.maxLeverage});return this.assetMetaCache={fetchedAt:Date.now(),map:n},n})();this.assetMetaPending=r;try{return await r}finally{this.assetMetaPending=null;}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let[r,s]=await Promise.all([this.getUserStateSnapshot(t.userAddress).catch(()=>null),this.getUniverseSnapshot().catch(()=>{})]),n=r?.openOrders??[],i={leverageByCoin:ks(r?.clearinghouse),markByCoin:s?Os(s):void 0},o=n.map(l=>ws(l,i)),a=t.symbol?o.filter(l=>l.symbol===t.symbol):o;return {orders:a,totalCount:a.length,raw:n}}async getTrades(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"userFills",user:t.userAddress}),s=r.map(n=>{let i=`${n.coin}-USDC`,o=n.dir.includes("Long");return {tradeId:n.tid.toString(),orderId:n.oid.toString(),symbol:i,side:o?"long":"short",price:parseFloat(n.px),quantity:parseFloat(n.sz),fee:parseFloat(n.fee||"0"),feeCurrency:n.feeToken||"USDC",isMaker:n.side==="M",timestamp:n.time,dir:n.dir,closedPnl:parseFloat(n.closedPnl||"0")}});return t.symbol&&(s=s.filter(n=>n.symbol===t.symbol)),t.startTime&&(s=s.filter(n=>n.timestamp>=t.startTime)),t.endTime&&(s=s.filter(n=>n.timestamp<=t.endTime)),t.limit&&(s=s.slice(0,t.limit)),{trades:s,totalCount:s.length,raw:r}}async connectWebSocket(){this.wsRefCount+=1,this.wsManager||(this.wsManager=new We(this._wsEndpoint)),!this.wsManager.isConnectedNow()&&await this.wsManager.connect();}disconnectWebSocket(){this.wsRefCount=Math.max(0,this.wsRefCount-1),this.wsRefCount===0&&this.wsManager&&(this.wsManager.disconnect(),this.wsManager=null);}subscribeMarketData(t,r,s,n){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe(t,r,s,n?.aggregation)}subscribeCandles(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=`${t}:${r}`;return this.wsManager.subscribe("candle",n,s)}subscribeUserData(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=t==="fills"?"userFills":"userEvents";return this.wsManager.subscribe(n,r,s)}subscribeAccountState(t,r){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe("accountState",t,s=>{r(Ni(s));})}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}};function Ds(e,t){let r=e.assetPositions.map(o=>{let a=o.position,l=`${a.coin}-USDC`,u=parseFloat(a.szi);if(u===0)return null;let p=parseFloat(a.entryPx),c=parseFloat(a.unrealizedPnl),d=parseFloat(a.positionValue);return {symbol:l,side:u>0?"long":"short",quantity:Math.abs(u),quantityRaw:a.szi.startsWith("-")?a.szi.slice(1):a.szi,entryPrice:p,markPrice:p,unrealizedPnl:c,unrealizedPnlPercent:parseFloat(a.returnOnEquity)*100,leverage:a.leverage.value,liquidationPrice:a.liquidationPx?parseFloat(a.liquidationPx):void 0,margin:parseFloat(a.marginUsed),notionalValue:Math.abs(d)}}).filter(o=>o!==null),s=t?r.filter(o=>o.symbol===t):r,n=e.withdrawable,i=typeof n=="string"&&n.length>0?parseFloat(n):parseFloat(e.marginSummary.accountValue)-parseFloat(e.marginSummary.totalMarginUsed);return {positions:s,totalEquity:parseFloat(e.marginSummary.accountValue),availableBalance:i,totalUnrealizedPnl:s.reduce((o,a)=>o+a.unrealizedPnl,0),raw:e}}function Ri(e){if(!e.children||e.children.length===0)return {};let t,r;for(let s of e.children){let n=typeof s.orderType=="string"?s.orderType:"",i=s.triggerPx;if(typeof i!="string"||i.length===0)continue;let o=parseFloat(i);!Number.isFinite(o)||o<=0||(/take\s*profit/i.test(n)?t=o:/stop/i.test(n)&&(r=o));}return {takeProfitPrice:t,stopLossPrice:r}}function ws(e,t){let r=`${e.coin}-USDC`,s=parseFloat(e.origSz),n=parseFloat(e.sz),i=s-n,o=e.side===true||e.side==="B",a=typeof e.orderType=="string"?e.orderType:"Limit",u=/^market$/i.test(a)?"market":"limit",p=e.isTrigger===true,c;p&&(/take\s*profit/i.test(a)?c="tp":/stop/i.test(a)&&(c="sl"));let d=typeof e.triggerPx=="string"&&e.triggerPx.length>0?parseFloat(e.triggerPx):void 0,y=typeof e.triggerCondition=="string"&&e.triggerCondition!=="N/A"?e.triggerCondition:void 0,{takeProfitPrice:m,stopLossPrice:f}=Ri(e),x=t?.leverageByCoin?.get(e.coin),h=t?.markByCoin?.get(e.coin);return {orderId:e.oid.toString(),clientOrderId:e.cloid??void 0,symbol:r,side:o?"long":"short",orderType:u,price:parseFloat(e.limitPx),quantity:s,filledQuantity:i,remainingQuantity:n,status:i>0&&n>0?"partially_filled":"pending",timestamp:e.timestamp,updateTimestamp:e.timestamp,leverage:x,reduceOnly:e.reduceOnly===true,isTrigger:p||void 0,triggerPx:d,triggerType:c,triggerCondition:y,markPrice:h,takeProfitPrice:m,stopLossPrice:f}}function ks(e){let t=new Map;if(!e)return t;for(let r of e.assetPositions??[]){let s=r.position?.leverage?.value;typeof s=="number"&&Number.isFinite(s)&&s>0&&t.set(r.position.coin,s);}return t}function Ai(e){return e?e.map(t=>({coin:t.coin,total:parseFloat(t.total),totalRaw:t.total,hold:parseFloat(t.hold),entryNotional:t.entryNtl?parseFloat(t.entryNtl):void 0})):[]}function Ni(e){let t=e.clearinghouseState,r=t?Ds(t):{positions:[],totalEquity:0,availableBalance:0},s=e.openOrders??[],n=Ai(e.spotState?.balances),i=e.meta&&e.assetCtxs?Ii([e.meta,e.assetCtxs]):null,o=ks(t),a=s.map(d=>ws(d,{leverageByCoin:o,markByCoin:i??void 0})),l=Es(r.positions,s,i),u=l.reduce((d,y)=>d+y.unrealizedPnl,0),p=e.meta&&e.assetCtxs?Ui(e.meta,e.assetCtxs,e.serverTime):void 0,c=t?Mi(t):void 0;return {positions:l,openOrders:a,spotBalances:n,totalEquity:r.totalEquity??0,availableBalance:r.availableBalance??0,totalUnrealizedPnl:u,serverTime:e.serverTime,leverageByCoin:c,universe:p,raw:e}}function Ui(e,t,r){let s=e.universe.map((i,o)=>{let a=t[o]??{},l=`${i.name}-USDC`,u=parseFloat(a.midPx||a.markPx||"0"),p=a.prevDayPx,c=p?parseFloat(p):u,d=c>0?(u-c)/c*100:0,y={symbol:l,price:u,change24h:d,volume24h:parseFloat(a.dayNtlVlm||"0"),fundingRate:parseFloat(a.funding||"0"),openInterest:parseFloat(a.openInterest||"0"),markPrice:parseFloat(a.markPx||"0"),indexPrice:parseFloat(a.oraclePx||a.midPx||"0")},m=i.szDecimals,f=i.maxLeverage,x=typeof m=="number"?{szDecimals:m,maxLeverage:f}:null;return {coin:i.name,symbol:l,market:y,meta:x}}),n=new Map;for(let i of s)n.set(i.symbol,i);return {assets:s,bySymbol:n,fetchedAt:r??Date.now()}}function Mi(e){let t={};for(let r of e.assetPositions??[]){let s=r.position?.leverage;if(!s||typeof s.value!="number")continue;let n=s.type==="isolated"||s.type==="cross"?s.type:"cross";t[r.position.coin]={value:s.value,type:n};}return t}function Ii(e){let[t,r]=e,s=new Map;return t.universe.forEach((n,i)=>{let o=r[i];if(!o)return;let a=o.markPx??o.midPx??o.oraclePx;if(typeof a!="string"||a.length===0)return;let l=parseFloat(a);Number.isFinite(l)&&l>0&&s.set(n.name,l);}),s}function Os(e){let t=new Map;for(let r of e.assets){let s=r.market.markPrice&&r.market.markPrice>0?r.market.markPrice:r.market.price;Number.isFinite(s)&&s>0&&t.set(r.coin,s);}return t}function Li(e,t){let r=e.symbol.split("-")[0],s=e.side==="long"?"A":"B",n=s==="B",i,o;for(let a of t){if(a.coin!==r||a.reduceOnly!==true||a.isTrigger!==true||!(a.side===s||a.side===n))continue;let u=typeof a.orderType=="string"?a.orderType:"",p=/take\s*profit/i.test(u),c=/stop/i.test(u);p?(!i||a.timestamp>i.timestamp)&&(i=a):c&&(!o||a.timestamp>o.timestamp)&&(o=a);}return {tp:i?.triggerPx?parseFloat(i.triggerPx):void 0,sl:o?.triggerPx?parseFloat(o.triggerPx):void 0}}function Es(e,t,r){return e.map(s=>{let n={...s},{tp:i,sl:o}=Li(s,t);n.takeProfitPrice=i,n.stopLossPrice=o;let a=s.symbol.split("-")[0],l=r?.get(a);if(l&&Number.isFinite(l)&&l>0){n.markPrice=l;let u=s.side==="long"?1:-1,p=(l-s.entryPrice)*s.quantity*u;n.unrealizedPnl=p,n.notionalValue=l*s.quantity,s.margin>0&&(n.unrealizedPnlPercent=p/s.margin*100);}return n})}var Pe=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="HyperliquidApiError";}};var pe=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="LiberFiApiError";}},Fi=3e4,Ue=class{baseUrl;timeout;headers;defaultQuery;fetchImpl;constructor(t){if(!t.baseUrl)throw new Error("LiberFiHttpTransport: `baseUrl` is required (e.g. https://api.liberfi.io/perpetuals).");this.baseUrl=t.baseUrl.replace(/\/+$/,""),this.timeout=t.timeout??Fi,this.headers=t.headers,this.defaultQuery=t.defaultQuery,this.fetchImpl=t.fetchImpl??globalThis.fetch.bind(globalThis);}getBaseUrl(){return this.baseUrl}buildUrl(t,r){let s=new URLSearchParams;if(this.defaultQuery)for(let[i,o]of Object.entries(this.defaultQuery))o===void 0||o===""||s.set(i,o);if(r)for(let[i,o]of Object.entries(r))o===void 0||o===""||s.set(i,o);let n=s.toString();return `${this.baseUrl}${t}${n?`?${n}`:""}`}async request(t,r){let s=this.buildUrl(r.path,r.query),n=new AbortController,i=r.timeoutMs??this.timeout,o=setTimeout(()=>n.abort(),i);try{let a=await this.fetchImpl(s,{method:t,headers:{Accept:"application/json",...t==="POST"?{"Content-Type":"application/json"}:{},...this.headers,...r.headers},body:t==="POST"?JSON.stringify(r.body??{}):void 0,signal:n.signal});if(!a.ok){let l=await qi(a);throw new pe(`HTTP ${a.status} ${a.statusText} from ${t} ${s}`,a.status,l)}return a.status===204?void 0:await a.json()}catch(a){if(a instanceof pe)throw a;if(a instanceof Error&&a.name==="AbortError")throw new pe(`Request timeout after ${i}ms: ${t} ${s}`,408,"");let l=a instanceof Error?a.message:String(a);throw new pe(`Network error: ${t} ${s}: ${l}`,0,"")}finally{clearTimeout(o);}}};async function qi(e){try{return await e.text()}catch{return ""}}var Hi="wss://api.hyperliquid.xyz/ws",Yt=class{transport;wsEndpoint;signTypedData;wsManager=null;wsRefCount=0;constructor(t){if(t.transport)this.transport=t.transport;else {if(!t.baseUrl)throw new Error("LiberFiPerpetualsClient: either `baseUrl` or a pre-built `transport` is required.");this.transport=new Ue({baseUrl:t.baseUrl,timeout:t.timeout,headers:t.headers,defaultQuery:t.provider?{provider:t.provider}:void 0});}this.wsEndpoint=t.wsEndpoint??Hi,this.signTypedData=t.signTypedData;}async getSupportedCoins(){return (await this.transport.request("GET",{path:"/v1/coins"})).map(r=>r.symbol)}async getMarket(t){try{return await this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}`})}catch(r){if(r instanceof pe&&r.statusCode===404)return null;throw r}}async getMarkets(t){return this.transport.request("GET",{path:"/v1/markets",query:t&&t.length>0?{symbols:t.join(",")}:void 0})}async getUniverseSnapshot(){let r=(await this.getMarkets()).map(n=>({coin:n.symbol.split("-")[0],symbol:n.symbol,market:n,meta:null})),s=new Map;for(let n of r)s.set(n.symbol,n);return {assets:r,bySymbol:s,fetchedAt:Date.now()}}async getKlines(t,r,s=100){let n=typeof s=="number"?{limit:s}:s,i={interval:r};return n.limit!==void 0&&(i.limit=String(n.limit)),n.from!==void 0&&(i.start=String(n.from)),n.to!==void 0&&(i.end=String(n.to)),this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/klines`,query:i})}async getOrderBook(t,r=10,s){let n={maxLevel:String(r)};return s?.nSigFigs!==void 0&&(n.nSigFigs=String(s.nSigFigs),s.nSigFigs===5&&s.mantissa&&s.mantissa!==1&&(n.mantissa=String(s.mantissa))),this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/orderbook`,query:n})}async getRecentTrades(t,r=50){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/trades`,query:{limit:String(r)}})}async getPositions(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getPositions requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/positions`,query:{symbol:t.symbol}});return {positions:r.positions,totalEquity:r.account?.totalEquity,availableBalance:r.account?.availableBalance,totalUnrealizedPnl:r.account?.totalUnrealizedPnl,raw:r}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getOpenOrders requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/orders`,query:{symbol:t.symbol}});return {orders:r,totalCount:r.length,raw:r}}async getTrades(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getTrades requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/fills`,query:{symbol:t.symbol,limit:t.limit!==void 0?String(t.limit):void 0,startTime:t.startTime!==void 0?String(t.startTime):void 0,endTime:t.endTime!==void 0?String(t.endTime):void 0}}),s=r.map(n=>({tradeId:n.tradeId,orderId:n.orderId,symbol:n.symbol,side:n.side,price:n.price,quantity:n.quantity,fee:n.fee,feeCurrency:n.feeCurrency,isMaker:n.isMaker,timestamp:n.timestamp}));return {trades:s,totalCount:s.length,raw:r}}async getActiveAssetLeverage(t){return null}async getAssetMeta(t){return null}async placeOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.placeOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.placeOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,side:t.side,orderType:t.orderType,amount:t.amount,price:t.price,leverage:t.leverage,reduceOnly:t.reduceOnly,takeProfitPrice:t.takeProfitPrice,stopLossPrice:t.stopLossPrice,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async cancelOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/cancel/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,orderId:t.orderId,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/cancel/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async connectWebSocket(){this.wsRefCount+=1,this.wsManager||(this.wsManager=new We(this.wsEndpoint)),!this.wsManager.isConnectedNow()&&await this.wsManager.connect();}disconnectWebSocket(){this.wsRefCount=Math.max(0,this.wsRefCount-1),this.wsRefCount===0&&this.wsManager&&(this.wsManager.disconnect(),this.wsManager=null);}subscribeMarketData(t,r,s,n){return this.requireWS().subscribe(t,r,s,n?.aggregation)}subscribeCandles(t,r,s){return this.requireWS().subscribe("candle",`${t}:${r}`,s)}subscribeUserData(t,r,s){let n=t==="fills"?"userFills":"userEvents";return this.requireWS().subscribe(n,r,s)}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}requireWS(){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager}};var Xt=class{transport;constructor(t){this.transport="transport"in t?t.transport:new Ue(t);}getBaseUrl(){return this.transport.getBaseUrl()}async quote(t){return this.transport.request("POST",{path:"/v1/deposits/quote",body:t})}async submit(t){return this.transport.request("POST",{path:"/v1/deposits/submit",body:t})}async status(t){if(!t)throw new Error("intentId is required");return this.transport.request("GET",{path:`/v1/deposits/${encodeURIComponent(t)}`})}async refresh(t){if(!t)throw new Error("intentId is required");return this.transport.request("POST",{path:`/v1/deposits/${encodeURIComponent(t)}/refresh`})}};var st=new Set(["settled","refunded","failed"]);var ht={phase:"idle"};function Jt(e,t){switch(t.type){case "RESET":return ht;case "QUOTE_REQUEST":return e.phase==="idle"||e.phase==="ready_to_sign"||e.phase==="expired"||e.phase==="failed"?{phase:"quoting"}:e;case "QUOTE_RECEIVED":return e.phase==="quoting"?{phase:"ready_to_sign",quote:t.quote,expiresAtMs:Date.parse(t.quote.expiresAt)}:e;case "QUOTE_FAILED":return e.phase==="quoting"?{phase:"failed",error:t.error}:e;case "QUOTE_EXPIRED":return e.phase==="ready_to_sign"?{phase:"expired",quote:e.quote}:e;case "SIGN_START":return e.phase==="ready_to_sign"?{phase:"signing",quote:e.quote}:e;case "SIGN_FAILED":return e.phase==="signing"?{phase:"failed",error:t.error}:e;case "BROADCAST_START":return e.phase==="signing"?{phase:"broadcasting",quote:e.quote}:e;case "BROADCAST_FAILED":return e.phase==="broadcasting"||e.phase==="signing"?{phase:"failed",error:t.error}:e;case "SUBMIT_OK":return e.phase==="broadcasting"?{phase:"submitted",quote:e.quote,intentId:t.intentId,solanaTxHash:t.solanaTxHash}:e;case "SUBMIT_FAILED":return e.phase==="broadcasting"?{phase:"failed",error:t.error}:e;case "STATUS_UPDATE":{if(e.phase!=="submitted"&&e.phase!=="tracking")return e;let r=(e.phase==="submitted",e.intentId);return _i(t.status,r)}}}function _i(e,t){switch(e.status){case "settled":return {phase:"succeeded",intentId:t,status:e};case "refunded":return {phase:"refunded",intentId:t,status:e};case "failed":case "stuck":return {phase:"failed",error:e.lastError??{code:e.status==="stuck"?"STUCK":"FAILED",message:e.status==="stuck"?"Deposit hasn't been observed by Relay yet \u2014 please contact support if this persists.":"Deposit failed. Funds will be refunded to your wallet shortly.",recoverable:false},intentId:t,status:e};default:return {phase:"tracking",intentId:t,status:e}}}function Bi(e){return e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"}function Qi(e){return e.phase==="submitted"||e.phase==="tracking"}function Ki(e){if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.status}function zi(e){if(e.phase==="ready_to_sign"||e.phase==="signing"||e.phase==="broadcasting"||e.phase==="submitted"||e.phase==="expired")return e.quote.breakdown;if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.breakdown}function Wi(e){return e!==void 0&&st.has(e)}var Ce=react.createContext({});function Gi({client:e,depositClient:t,children:r}){let s=react.useMemo(()=>({client:e,depositClient:t}),[e,t]);return jsxRuntime.jsx(Ce.Provider,{value:s,children:r})}function A(){let e=react.useContext(Ce);if(!e||!e.client)throw new Error("usePerpetualsClient must be used within a PerpetualsProvider");return e}function Rs(){return ["perps","coins"]}async function As(e){return await e.getSupportedCoins()}function Zt(e={}){let{client:t}=A();return reactQuery.useQuery({queryKey:Rs(),queryFn:async()=>As(t),staleTime:300*1e3,...e})}var Ns=6e4;function ye(){return ["perps","universe"]}async function Te(e){if(typeof e.getUniverseSnapshot!="function")throw new Error("useUniverseQuery: the active perpetuals client does not implement getUniverseSnapshot()");return e.getUniverseSnapshot()}function Oe(e){return typeof e.getUniverseSnapshot=="function"}function Zi(e={}){let{client:t}=A(),r=Oe(t)&&e.enabled!==false;return reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(t),refetchInterval:Ns,staleTime:Ns/2,...e,enabled:r})}var xt=6e4;function Ms(e){return ["perps","market",e.symbol]}async function Is(e,{symbol:t}){return await e.getMarket(t)}function nt(e,t={}){let{client:r}=A(),s=Oe(r),n=reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(r),refetchInterval:xt,staleTime:xt/2,enabled:s&&t.enabled!==false&&!!e.symbol,select:o=>o.bySymbol.get(e.symbol)?.market??null}),i=reactQuery.useQuery({queryKey:Ms(e),queryFn:async()=>Is(r,e),staleTime:xt/2,refetchInterval:xt,...t,enabled:!s&&t.enabled!==false&&!!e.symbol});return s?n:i}var St=6e4;function Fs(e={}){return ["perps","markets",JSON.stringify((e.symbols??[]).sort())]}async function qs(e,{symbols:t}={}){return await e.getMarkets(t)}function er(e={},t={}){let{client:r}=A(),s=Oe(r),n=reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(r),refetchInterval:St,staleTime:St/2,enabled:s&&t.enabled!==false,select:o=>{if(!e.symbols||e.symbols.length===0)return o.assets.map(l=>l.market);let a=new Set(e.symbols);return o.assets.filter(l=>a.has(l.symbol)).map(l=>l.market)}}),i=reactQuery.useQuery({queryKey:Fs(e),queryFn:async()=>qs(r,e),staleTime:St/2,refetchInterval:St,...t,enabled:!s&&t.enabled!==false});return s?n:i}function Hs(e){return ["perps","klines",e.symbol,e.interval,String(e.limit??100)]}async function _s(e,{symbol:t,interval:r,limit:s}){return await e.getKlines(t,r,s)}function to(e,t={}){let{client:r}=A();return reactQuery.useQuery({queryKey:Hs(e),queryFn:async()=>_s(r,e),staleTime:30*1e3,...t})}function Bs(e){let t=e.aggregation,r=t?.nSigFigs!==void 0?`n${t.nSigFigs}${t.nSigFigs===5&&t.mantissa&&t.mantissa!==1?`m${t.mantissa}`:""}`:"raw";return ["perps","orderBook",e.symbol,String(e.maxLevel??20),r]}async function Qs(e,{symbol:t,maxLevel:r,aggregation:s}){return await e.getOrderBook(t,r,s)}function tr(e,t={}){let{client:r}=A();return reactQuery.useQuery({queryKey:Bs(e),queryFn:async()=>Qs(r,e),staleTime:5*1e3,...t})}function Ks(e){return ["perps","recentTrades",e.symbol,String(e.limit??50)]}async function zs(e,{symbol:t,limit:r}){return await e.getRecentTrades(t,r)}function rr(e,t={}){let{client:r}=A();return reactQuery.useQuery({queryKey:Ks(e),queryFn:async()=>zs(r,e),staleTime:5*1e3,...t})}function $e(e){return ["perps","positions",e.userAddress??""]}async function Ws(e,t){return await e.getPositions(t)}function io(e,t){return {...e,positions:e.positions.filter(r=>r.symbol===t)}}function it(e,t={}){let{client:r}=A(),{enabled:s=true,userAddress:n,symbol:i}=e;return reactQuery.useQuery({queryKey:$e({userAddress:n}),queryFn:async()=>Ws(r,{userAddress:n}),enabled:s&&!!n,staleTime:10*1e3,select:i?o=>io(o,i):void 0,...t})}function Ve(e){return ["perps","orders",e.userAddress??""]}async function $s(e,t){return await e.getOpenOrders(t)}function ao(e,t){let r=e.orders.filter(s=>s.symbol===t);return {...e,orders:r,totalCount:r.length}}function sr(e,t={}){let{client:r}=A(),{enabled:s=true,userAddress:n,symbol:i}=e;return reactQuery.useQuery({queryKey:Ve({userAddress:n}),queryFn:async()=>$s(r,{userAddress:n}),enabled:s&&!!n,staleTime:5*1e3,select:i?o=>ao(o,i):void 0,...t})}function Vs(e){return ["perps","trades",e.userAddress??"",e.symbol??"",String(e.limit??50),String(e.startTime??""),String(e.endTime??"")]}async function Gs(e,t){return await e.getTrades(t)}function nr(e,t={}){let{client:r}=A(),{enabled:s=true,...n}=e;return reactQuery.useQuery({queryKey:Vs(n),queryFn:async()=>Gs(r,n),enabled:s&&!!n.userAddress,staleTime:30*1e3,...t})}function vt(e){return ["perps","activeAssetLeverage",e.userAddress??"",e.symbol??""]}async function js(e,t){return await e.getActiveAssetLeverage(t)}function ir(e,t={}){let{client:r}=A(),{enabled:s=true,userAddress:n,symbol:i}=e;return reactQuery.useQuery({queryKey:vt({userAddress:n,symbol:i}),queryFn:async()=>{if(!n)throw new Error("useActiveAssetLeverageQuery: userAddress is required");return js(r,{userAddress:n,symbol:i})},enabled:s&&!!n&&!!i,staleTime:30*1e3,...t})}var or=6e4;function Xs(e){return ["perps","assetMeta",e.symbol??""]}async function Js(e,t){return await e.getAssetMeta(t)}function ar(e,t={}){let{client:r}=A(),{enabled:s=true,symbol:n}=e,i=Oe(r),o=reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(r),refetchInterval:or,staleTime:or/2,enabled:i&&s&&!!n,select:l=>n?l.bySymbol.get(n)?.meta??null:null}),a=reactQuery.useQuery({queryKey:Xs({symbol:n}),queryFn:async()=>{if(!n)throw new Error("useAssetMetaQuery: symbol is required");return Js(r,{symbol:n})},enabled:!i&&s&&!!n,staleTime:or,...t});return i?o:a}async function Zs(e,t){return await e.placeOrder(t)}function ot(e={}){let{client:t}=A();return reactQuery.useMutation({mutationFn:async r=>Zs(t,r),...e})}async function en(e,t){return await e.cancelOrder(t)}function lr(e={}){let{client:t}=A();return reactQuery.useMutation({mutationFn:async r=>en(t,r),...e})}function Me(e){let{type:t,symbol:r,enabled:s=true,aggregation:n,throttleMs:i}=e,{client:o}=A(),[a,l]=react.useState(null),[u,p]=react.useState(false),[c,d]=react.useState(null),y=react.useRef(null),m=react.useRef(null),f=react.useRef(i);f.current=i;let x=react.useCallback(P=>{let S=f.current;if(!S||S<=0){l(P);return}y.current=P,m.current===null&&(m.current=setTimeout(()=>{if(m.current=null,y.current!==null){let N=y.current;y.current=null,l(N);}},S));},[]),h=n?.nSigFigs!==void 0?`n${n.nSigFigs}${n.nSigFigs===5&&n.mantissa&&n.mantissa!==1?`m${n.mantissa}`:""}`:"";return react.useEffect(()=>{if(!s)return;let P=null,S=true;return (async()=>{try{if(await o.connectWebSocket(),!S)return;p(!0),d(null),P=o.subscribeMarketData(t,r,x,t==="orderBook"&&n?{aggregation:n}:void 0);}catch(w){S&&(d(w instanceof Error?w:new Error("Connection failed")),p(false));}})(),()=>{if(S=false,P)try{o.unsubscribe(P);}catch(w){console.error("Failed to unsubscribe:",w);}o.disconnectWebSocket(),m.current!==null&&(clearTimeout(m.current),m.current=null),y.current=null,p(false),l(null);}},[o,t,r,s,x,h]),{data:a,isConnected:u,error:c}}function bo(e){let{symbol:t,interval:r,enabled:s=true}=e,{client:n}=A(),[i,o]=react.useState(null),[a,l]=react.useState(false),[u,p]=react.useState(null),c=react.useCallback(d=>{o(d);},[]);return react.useEffect(()=>{if(!s)return;let d=null,y=true;return (async()=>{try{if(await n.connectWebSocket(),!y)return;l(!0),p(null),d=n.subscribeCandles(t,r,c);}catch(f){y&&(p(f instanceof Error?f:new Error("Connection failed")),l(false));}})(),()=>{if(y=false,d)try{n.unsubscribe(d);}catch(f){console.error("Failed to unsubscribe:",f);}n.disconnectWebSocket(),l(false),o(null);}},[n,t,r,s,c]),{data:i,isConnected:a,error:u}}function So(e){let{type:t,userAddress:r,enabled:s=true}=e,{client:n}=A(),[i,o]=react.useState(null),[a,l]=react.useState(false),[u,p]=react.useState(null),c=react.useCallback(d=>{o(d);},[]);return react.useEffect(()=>{if(!s||!r)return;let d=null,y=true;return (async()=>{try{if(await n.connectWebSocket(),!y)return;l(!0),p(null),d=n.subscribeUserData(t,r,c);}catch(f){y&&(p(f instanceof Error?f:new Error("Connection failed")),l(false));}})(),()=>{if(y=false,d)try{n.unsubscribe(d);}catch(f){console.error("Failed to unsubscribe:",f);}n.disconnectWebSocket(),l(false),o(null);}},[n,t,r,s,c]),{data:i,isConnected:a,error:u}}function Ge(e){return ["perps","accountState",e.userAddress??""]}function mr(e,t={}){let{enabled:r=true,...s}=e;return reactQuery.useQuery({queryKey:Ge(s),queryFn:()=>null,enabled:r&&!!s.userAddress,staleTime:1/0,refetchOnWindowFocus:false,refetchOnReconnect:false,...t})}function To(e){let{userAddress:t,enabled:r=true}=e,{client:s}=A(),n=reactQuery.useQueryClient(),[i,o]=react.useState(null),[a,l]=react.useState(false),[u,p]=react.useState(null);return react.useEffect(()=>{if(!r||!t||typeof s.subscribeAccountState!="function")return;let c=null,d=true,y=f=>{if(!d)return;o(f),n.setQueryData(Ge({userAddress:t}),f);let x={positions:f.positions,totalEquity:f.totalEquity,availableBalance:f.availableBalance,totalUnrealizedPnl:f.totalUnrealizedPnl,raw:f.raw};n.setQueryData($e({userAddress:t}),x);let h={orders:f.openOrders,totalCount:f.openOrders.length,raw:f.raw};if(n.setQueryData(Ve({userAddress:t}),h),f.universe&&n.setQueryData(ye(),f.universe),f.leverageByCoin)for(let[P,S]of Object.entries(f.leverageByCoin))n.setQueryData(vt({userAddress:t,symbol:`${P}-USDC`}),S);};return (async()=>{try{if(await s.connectWebSocket(),!d)return;l(!0),p(null),c=s.subscribeAccountState(t,y);}catch(f){if(!d)return;l(false),p(f instanceof Error?f:new Error("WebSocket connect failed"));}})(),()=>{if(d=false,c)try{s.unsubscribe(c);}catch(f){console.error("[useAccountStateSubscription] unsubscribe failed:",f);}s.disconnectWebSocket(),l(false);}},[s,n,t,r]),{data:i,isConnected:a,error:u}}function wo(e){let{userAddress:t,enabled:r=true,timeoutMs:s=3e3}=e,{client:n}=A(),i=reactQuery.useQueryClient();react.useEffect(()=>{if(!r||!t)return;let o=false,a=setTimeout(()=>{o||i.getQueryData(Ge({userAddress:t}))||(async()=>{try{let[u,p]=await Promise.all([n.getPositions({userAddress:t}),n.getOpenOrders({userAddress:t})]);if(o)return;i.setQueryData($e({userAddress:t}),u),i.setQueryData(Ve({userAddress:t}),p);}catch(u){process.env.NODE_ENV!=="production"&&console.warn("[useHyperliquidUserBootstrap] fallback REST failed:",u);}})();},s);return ()=>{o=true,clearTimeout(a);}},[n,i,t,r,s]);}function ko(){let e=react.useContext(Ce);if(!e||!e.client)throw new Error("usePerpDepositClient must be used within a <PerpetualsProvider>.");if(!e.depositClient)throw new Error("usePerpDepositClient: <PerpetualsProvider> was rendered without a `depositClient` prop. Pass a `LiberFiPerpDepositClient` instance to enable the deposit flow.");return e.depositClient}function Ie(){return react.useContext(Ce)?.depositClient}function rn(e){return ["perps","deposit","quote",e]}async function sn(e,t){return e.quote(t)}function yr(e,t={}){let r=Ie(),s=(t.enabled??!!Ro(e))&&!!r;return reactQuery.useQuery({queryKey:rn(e??null),queryFn:async()=>sn(r,e),enabled:s,staleTime:0,gcTime:3e4,refetchOnWindowFocus:false,...t})}function Ro(e){return !!(e&&e.userSolanaAddress&&e.hyperliquidRecipient&&e.grossLamports&&e.source)}function gr(e){let t=Ie(),[r,s]=react.useReducer(Jt,ht),n=react.useCallback(()=>{s({type:"RESET"});},[]),i=react.useCallback(async o=>{let{quote:a}=o;s({type:"SIGN_START"});let l;try{if(l=await e(a.serializedTxBase64,{isVersioned:a.isVersioned,sizeBytes:a.sizeBytes}),!l)throw new Error("wallet returned an empty tx hash")}catch(p){let c=on(p,"WALLET_SIGN_OR_BROADCAST_FAILED");throw s({type:"SIGN_FAILED",error:c}),p}s({type:"BROADCAST_START"});let u={userSolanaAddress:o.userSolanaAddress,hyperliquidRecipient:o.hyperliquidRecipient,solanaTxHash:l,breakdown:a.breakdown,userId:o.userId,source:o.source,campaign:o.campaign,quoteIssuedAt:a.issuedAt};if(!t)throw s({type:"SUBMIT_FAILED",error:{code:"DEPOSIT_CLIENT_NOT_CONFIGURED",message:"Deposit client is not configured.",recoverable:false}}),new Error("Deposit client is not configured.");try{let p=await t.submit(u);return s({type:"SUBMIT_OK",intentId:p.intentId,solanaTxHash:l}),p.intentId}catch(p){let c=on(p,"DEPOSIT_SUBMIT_FAILED");throw s({type:"SUBMIT_FAILED",error:c}),p}},[t,e]);return {state:r,execute:i,reset:n,dispatch:s}}function on(e,t){if(e instanceof pe){let r=No(e.responseBody);return {code:r?.code??t,message:r?.message??e.message,recoverable:e.statusCode>=500||e.statusCode===408}}return e instanceof Error?{code:t,message:e.message,recoverable:true}:{code:t,message:String(e),recoverable:true}}function No(e){if(e)try{return JSON.parse(e)}catch{return}}function an(e){return ["perps","deposit","status",e??null]}async function ln(e,t){return e.status(t)}function br(e,t={}){let r=Ie(),s=(t.enabled??!!e)&&!!r,n=t.pollIntervalMs??3e3;return reactQuery.useQuery({queryKey:an(e??void 0),queryFn:async()=>ln(r,e),enabled:s,refetchInterval:i=>{let o=i.state.data;return o&&st.has(o.status)?false:n},refetchOnWindowFocus:false,staleTime:0,...t})}var at={phase:"idle",steps:[]};function Pt(e,t){switch(e.id){case "approveBuilderFee":{let r=t.builderApproval;return r&&Mo(r.builder,e.params.builder)&&r.maxFeeRate>=e.params.maxFeeRate?"skipped":"pending"}case "setReferrer":return t.referrer?"skipped":"pending";case "updateLeverage":return t.leverage[e.params.asset]===e.params.leverage?"skipped":"pending"}}function Ct(e,t){switch(t.type){case "START_LOADING":return {phase:"loading",steps:e.steps,accountState:e.accountState};case "LOAD_SUCCESS":return {phase:t.steps.every(s=>s.status==="skipped"||s.status==="done")?"done":"ready",accountState:t.accountState,steps:t.steps};case "LOAD_ERROR":return {phase:"error",steps:e.steps,error:t.error};case "RUN_STEP":return {phase:"executing",steps:e.steps.map((s,n)=>n===t.index?{...s,status:"running",error:void 0}:s),accountState:e.accountState,currentIndex:t.index};case "STEP_SUCCESS":{let r=e.steps.map((i,o)=>o===t.index?{...i,status:"done",txHash:t.txHash,error:void 0}:i),s=t.accountState&&e.accountState?Io(e.accountState,t.accountState):t.accountState??e.accountState;return {phase:r.every(i=>i.status==="skipped"||i.status==="done")?"done":"ready",steps:r,accountState:s,currentIndex:void 0}}case "STEP_ERROR":return {phase:"ready",steps:e.steps.map((s,n)=>n===t.index?{...s,status:"error",error:t.error}:s),accountState:e.accountState,currentIndex:void 0};case "RESET":return at}}function Tt(e){for(let t=0;t<e.steps.length;t++){let r=e.steps[t].status;if(r==="pending"||r==="error")return t}return null}function Mo(e,t){return e.toLowerCase()===t.toLowerCase()}function Io(e,t){return {builderApproval:t.builderApproval!==void 0?t.builderApproval:e.builderApproval,referrer:t.referrer!==void 0?t.referrer:e.referrer,leverage:{...e.leverage,...t.leverage??{}}}}function Dt(e){let{adapter:t,userAddress:r,steps:s,autoLoad:n=true,onComplete:i,onError:o}=e,[a,l]=react.useReducer(Ct,at),u=react.useRef(t),p=react.useRef(s),c=react.useRef(i),d=react.useRef(o);u.current=t,p.current=s,c.current=i,d.current=o;let y=react.useCallback(async()=>{if(r){l({type:"START_LOADING"});try{let P=await u.current.getAccountState(r),S=p.current.map(N=>({step:N,status:Pt(N,P)}));l({type:"LOAD_SUCCESS",accountState:P,steps:S});}catch(P){let S=pn(P);l({type:"LOAD_ERROR",error:S.message}),d.current?.(S,{});}}},[r]);react.useEffect(()=>{n&&r&&y();},[n,r,y]);let m=react.useCallback(async P=>{let S=a.steps[P];if(S){l({type:"RUN_STEP",index:P});try{let N=await Fo(u.current,S.step);l({type:"STEP_SUCCESS",index:P,txHash:N.txHash,accountState:N.state});}catch(N){let w=pn(N);l({type:"STEP_ERROR",index:P,error:w.message}),d.current?.(w,{stepId:S.step.id});}}},[a.steps]),f=react.useCallback(async()=>{let P=Tt(a);P!=null&&await m(P);},[a,m]),x=react.useCallback(()=>l({type:"RESET"}),[]),h=react.useRef(false);return react.useEffect(()=>{a.phase==="done"&&!h.current?(h.current=true,c.current?.(a)):a.phase!=="done"&&(h.current=false);},[a]),{state:a,reload:y,runNext:f,runStep:m,reset:x}}function Fo(e,t){switch(t.id){case "approveBuilderFee":return e.approveBuilderFee(t.params);case "setReferrer":return e.setReferrer(t.params);case "updateLeverage":return e.updateLeverage(t.params)}}function pn(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error")}function hr(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center px-4 py-3 bg-neutral-900 border-b border-neutral-800",children:jsxRuntime.jsx("span",{className:"text-neutral-400 text-sm",children:"Market data not available"})})}var dn="liberfi-perp-shimmer",qo=`
|
|
1
|
+
'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime'),reactQuery=require('@tanstack/react-query'),ui=require('@liberfi.io/ui'),reactWindow=require('react-window'),hooks=require('@liberfi.io/hooks'),reactHookForm=require('react-hook-form'),walletConnector=require('@liberfi.io/wallet-connector'),i18n=require('@liberfi.io/i18n');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-perpetuals"]="0.3.1");var Ti="0.3.1";var Oi=new Set(["userFills","userFillsByTime","userFunding","userNonFundingLedgerUpdates","frontendOpenOrders","userRateLimit","historicalOrders","userTwapSliceFills","predictedFundings"]);function Gt(e){return e&&Oi.has(e)?20:2}var Cs=1,st=class{capacity;windowMs;tokens;lastRefill;constructor(t={}){this.capacity=t.capacity??1200,this.windowMs=t.windowMs??6e4,this.tokens=this.capacity,this.lastRefill=Date.now();}reset(){this.tokens=this.capacity,this.lastRefill=Date.now();}async waitForToken(t){let r=Math.max(1,Math.floor(t));for(;;){if(this.refill(),this.tokens>=r){this.tokens-=r;return}let s=Math.max(25,this.windowMs-(Date.now()-this.lastRefill));await new Promise(n=>setTimeout(n,s));}}refill(){let t=Date.now();t-this.lastRefill>=this.windowMs&&(this.tokens=this.capacity,this.lastRefill=t);}};function Di(e,t,r){if(e!=="orderBook"||!r||r.nSigFigs===void 0)return `${e}:${t}`;let s=r.nSigFigs===5&&r.mantissa&&r.mantissa!==1?`:m${r.mantissa}`:"";return `${e}:${t}:n${r.nSigFigs}${s}`}var Ve=class{ws=null;wsEndpoint;subscriptions=new Map;reconnectAttempts=0;maxReconnectAttempts=10;reconnectDelay=1e3;heartbeatInterval=null;messageQueue=[];isConnected=false;pingInterval=3e4;reconnectTimeout=null;isReconnecting=false;connectPromise=null;manuallyDisconnected=false;constructor(t){this.wsEndpoint=t;}async connect(){if(!(this.isConnected&&this.ws?.readyState===WebSocket.OPEN))return this.connectPromise?this.connectPromise:(this.manuallyDisconnected=false,this.connectPromise=new Promise((t,r)=>{let s=false,n=i=>{s||(s=true,this.connectPromise=null,i());};try{let i=new WebSocket(this.wsEndpoint);this.ws=i,i.onopen=()=>{this.ws===i&&(console.log("[WebSocket] Connected to Hyperliquid"),this.isConnected=!0,this.reconnectAttempts=0,this.isReconnecting=!1,this.startHeartbeat(),this.flushMessageQueue(),n(t));},i.onmessage=o=>{this.ws===i&&this.handleMessage(o.data);},i.onerror=o=>{this.ws===i&&(console.error("[WebSocket] Error:",o),this.isConnected=!1,n(()=>r(new Error("WebSocket connection failed"))));},i.onclose=o=>{this.ws===i&&(console.log(`[WebSocket] Closed: ${o.code} - ${o.reason||"No reason provided"}`),this.isConnected=!1,this.stopHeartbeat(),this.connectPromise=null,s||n(()=>r(new Error(`WebSocket closed before connection was established: ${o.code}`))),!this.manuallyDisconnected&&o.code!==1e3&&this.attemptReconnect());};}catch(i){n(()=>r(i));}}),this.connectPromise)}disconnect(){this.manuallyDisconnected=true,this.stopHeartbeat(),this.subscriptions.clear(),this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&(this.ws.close(1e3,"Normal closure"),this.ws=null),this.isConnected=false,this.isReconnecting=false,this.reconnectAttempts=0;}attemptReconnect(){if(this.isReconnecting)return;if(this.reconnectAttempts>=this.maxReconnectAttempts){console.error("[WebSocket] Max reconnection attempts reached");return}this.isReconnecting=true,this.reconnectAttempts++;let t=Math.min(this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1),3e4);console.log(`[WebSocket] Reconnecting in ${t}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`),this.reconnectTimeout=window.setTimeout(()=>{this.connect().then(()=>{this.resubscribeAll();}).catch(r=>{console.error("[WebSocket] Reconnection failed:",r),this.isReconnecting=false;});},t);}startHeartbeat(){this.heartbeatInterval=window.setInterval(()=>{this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN&&this.send({method:"ping"});},this.pingInterval);}stopHeartbeat(){this.heartbeatInterval!==null&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null);}send(t){this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(t)):this.messageQueue.push(t);}flushMessageQueue(){for(;this.messageQueue.length>0;){let t=this.messageQueue.shift();t&&this.send(t);}}resubscribeAll(){this.subscriptions.forEach(t=>{this.sendSubscription(t.type,t.param,t.aggregation);});}handleMessage(t){try{let r=JSON.parse(t);r.channel?this.handleChannelMessage(r):r.method;}catch(r){console.error("[WebSocket] Failed to parse message:",r,t);}}handleChannelMessage(t){let r=t.channel;this.subscriptions.forEach((s,n)=>{if(this.isChannelMatch(r,s.type,s.param,t))try{let i=this.transformData(s.type,t.data,s.param);s.callback(i);}catch(i){console.error(`[WebSocket] Error in subscription callback (${n}):`,i);}});}isChannelMatch(t,r,s,n){if(r==="ticker"){if(t!=="activeAssetCtx")return false;let i=s.split("-")[0],o=n?.data?.coin;return typeof o=="string"&&o===i}else if(r==="trades"){if(t!=="trades")return false;let i=s.split("-")[0],o=Array.isArray(n?.data)?n.data[0]?.coin:void 0;return typeof o!="string"||o===i}else if(r==="orderBook"){if(t!=="l2Book")return false;let i=s.split("-")[0],o=n?.data?.coin;return typeof o=="string"&&o===i}else {if(r==="candle")return t==="candle";if(r==="userFills")return t==="userFills";if(r==="userEvents")return t==="userEvents";if(r==="accountState")return t==="webData2"}return false}transformData(t,r,s){return t==="ticker"?this.transformTickerData(r,s):t==="trades"?this.transformTradesData(r,s):t==="orderBook"?this.transformOrderBookData(r,s):t==="candle"?this.transformCandleData(r,s):t==="userFills"?this.transformUserFillsData(r):t==="userEvents"?this.transformUserEventsData(r):r}transformTickerData(t,r){let n=`${t?.coin??r.split("-")[0]}-USDC`,i=t?.ctx??{},o=parseFloat(i.midPx??i.markPx??"0"),a=parseFloat(i.markPx??i.midPx??"0"),l=i.prevDayPx?parseFloat(i.prevDayPx):o,u=l>0?(o-l)/l*100:0;return {symbol:n,price:o,change24h:u,volume24h:parseFloat(i.dayNtlVlm??"0"),fundingRate:parseFloat(i.funding??"0"),openInterest:parseFloat(i.openInterest??"0"),markPrice:a,indexPrice:parseFloat(i.oraclePx??i.midPx??"0")}}transformTradesData(t,r){return Array.isArray(t)?t.map(s=>({symbol:r,side:s.side==="B"?"buy":"sell",price:parseFloat(s.px),quantity:parseFloat(s.sz),timestamp:s.time,tradeId:s.tid})):[]}transformOrderBookData(t,r){let[s,n]=t.levels||[[],[]];return {symbol:r,bids:s.map(i=>({price:parseFloat(i.px),quantity:parseFloat(i.sz),count:i.n})),asks:n.map(i=>({price:parseFloat(i.px),quantity:parseFloat(i.sz),count:i.n})),timestamp:t.time||Date.now()}}transformCandleData(t,r){let[s]=r.split(":");return {symbol:s,open:parseFloat(t.o),high:parseFloat(t.h),low:parseFloat(t.l),close:parseFloat(t.c),volume:parseFloat(t.v),timestamp:t.t,closeTimestamp:t.T}}transformUserFillsData(t){return Array.isArray(t)?t.map(r=>({tradeId:r.tid?.toString(),orderId:r.oid?.toString(),symbol:`${r.coin}-USDC`,side:r.dir?.includes("Long")?"long":"short",price:parseFloat(r.px),quantity:parseFloat(r.sz),fee:parseFloat(r.fee||"0"),feeCurrency:r.feeToken||"USDC",isMaker:r.side==="M",timestamp:r.time})):[]}transformUserEventsData(t){return t}sendSubscription(t,r,s){let n;if(t==="ticker")n={method:"subscribe",subscription:{type:"activeAssetCtx",coin:r.split("-")[0]}};else if(t==="trades")n={method:"subscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook"){let o={type:"l2Book",coin:r.split("-")[0]};s?.nSigFigs!==void 0&&(o.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(o.mantissa=s.mantissa)),n={method:"subscribe",subscription:o};}else if(t==="candle"){let[i,o]=r.split(":");n={method:"subscribe",subscription:{type:"candle",coin:i.split("-")[0],interval:o}};}else t==="userFills"?n={method:"subscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"?n={method:"subscribe",subscription:{type:"userEvents",user:r}}:t==="accountState"&&(n={method:"subscribe",subscription:{type:"webData2",user:r}});n&&this.send(n);}sendUnsubscription(t,r,s){let n;if(t==="ticker")n={method:"unsubscribe",subscription:{type:"activeAssetCtx",coin:r.split("-")[0]}};else if(t==="trades")n={method:"unsubscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook"){let o={type:"l2Book",coin:r.split("-")[0]};s?.nSigFigs!==void 0&&(o.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(o.mantissa=s.mantissa)),n={method:"unsubscribe",subscription:o};}else if(t==="candle"){let[i,o]=r.split(":");n={method:"unsubscribe",subscription:{type:"candle",coin:i.split("-")[0],interval:o}};}else t==="userFills"?n={method:"unsubscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"?n={method:"unsubscribe",subscription:{type:"userEvents",user:r}}:t==="accountState"&&(n={method:"unsubscribe",subscription:{type:"webData2",user:r}});n&&this.send(n);}subscribe(t,r,s,n){let i=Di(t,r,n);return this.subscriptions.set(i,{type:t,param:r,callback:s,aggregation:n}),this.sendSubscription(t,r,n),i}unsubscribe(t){let r=this.subscriptions.get(t);r&&(this.sendUnsubscription(r.type,r.param,r.aggregation),this.subscriptions.delete(t));}isConnectedNow(){return this.isConnected}};var Ts={testnet:{api:"https://api.hyperliquid-testnet.xyz",ws:"wss://api.hyperliquid-testnet.xyz/ws"},mainnet:{api:"https://api.hyperliquid.xyz",ws:"wss://api.hyperliquid.xyz/ws"}},wi=60*1e3,ki=1500,Ei=1500,jt=class{apiEndpoint;_wsEndpoint;timeout;environment;wsManager=null;wsRefCount=0;assetMetaCache=null;assetMetaPending=null;universeSnapshotCache=null;universeSnapshotPending=null;userStateCache=new Map;userStatePending=new Map;rateLimiter;constructor(t={}){this.environment=t.environment||"testnet",this.apiEndpoint=t.apiEndpoint||Ts[this.environment].api,this._wsEndpoint=t.wsEndpoint||Ts[this.environment].ws,this.timeout=t.timeout||3e4,t.rateLimit===false?this.rateLimiter=null:t.rateLimit instanceof st?this.rateLimiter=t.rateLimit:this.rateLimiter=new st(t.rateLimit);}weightFor(t,r){if(t.startsWith("/exchange"))return Cs;if(t.startsWith("/info")){let s=r&&typeof r=="object"&&typeof r.type=="string"?r.type:void 0;return Gt(s)}return Gt(void 0)}async request(t,r){let s=`${this.apiEndpoint}${t}`;this.rateLimiter&&await this.rateLimiter.waitForToken(this.weightFor(t,r));try{let n=new AbortController,i=setTimeout(()=>n.abort(),this.timeout),o=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r),signal:n.signal});if(clearTimeout(i),!o.ok)throw new Pe(`HTTP ${o.status}: ${o.statusText}`,o.status,await o.text());return await o.json()}catch(n){throw n.name==="AbortError"?new Pe(`Request timeout after ${this.timeout}ms`,408,""):n instanceof Pe?n:new Pe(`Network error: ${n.message}`,0,"")}}symbolToCoin(t){return t.split("-")[0]}parseInterval(t){return {"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"1d":864e5,"1w":6048e5}[t]}async getSupportedCoins(){return (await this.getUniverseSnapshot()).assets.map(r=>r.symbol)}async getMarket(t){let r=await this.getMarkets([t]);return r.length>0?r[0]:null}async getMarkets(t){let r=await this.getUniverseSnapshot();if(t&&t.length>0){let s=new Set(t);return r.assets.map(n=>n.market).filter(n=>s.has(n.symbol))}return r.assets.map(s=>s.market)}async getUniverseSnapshot(){let t=Date.now();if(this.universeSnapshotCache&&t-this.universeSnapshotCache.fetchedAt<ki)return this.universeSnapshotCache.snapshot;if(this.universeSnapshotPending)return this.universeSnapshotPending;let r=this.fetchUniverseSnapshot();this.universeSnapshotPending=r;try{let s=await r;return this.universeSnapshotCache={fetchedAt:Date.now(),snapshot:s},s}finally{this.universeSnapshotPending=null;}}async fetchUniverseSnapshot(){let[t,r]=await this.request("/info",{type:"metaAndAssetCtxs"}),s=t.universe.map((i,o)=>{let a=r[o]??{},l=`${i.name}-USDC`,u=parseFloat(a.midPx||a.markPx||"0"),p=a.prevDayPx?parseFloat(a.prevDayPx):u,c=p>0?(u-p)/p*100:0,d={symbol:l,price:u,change24h:c,volume24h:parseFloat(a.dayNtlVlm||"0"),fundingRate:parseFloat(a.funding||"0"),openInterest:parseFloat(a.openInterest||"0"),markPrice:parseFloat(a.markPx||"0"),indexPrice:parseFloat(a.oraclePx||a.midPx||"0")},y=typeof i.szDecimals=="number"?{szDecimals:i.szDecimals,maxLeverage:i.maxLeverage}:null;return {coin:i.name,symbol:l,market:d,meta:y}}),n=new Map;for(let i of s)n.set(i.symbol,i);return {assets:s,bySymbol:n,fetchedAt:Date.now()}}async getUserStateSnapshot(t){let r=t.toLowerCase(),s=Date.now(),n=this.userStateCache.get(r);if(n&&s-n.fetchedAt<Ei)return n.snapshot;let i=this.userStatePending.get(r);if(i)return i;let o=(async()=>{let[a,l]=await Promise.all([this.request("/info",{type:"clearinghouseState",user:t}),this.request("/info",{type:"frontendOpenOrders",user:t}).catch(()=>{})]);return {clearinghouse:a,openOrders:l,fetchedAt:Date.now()}})();this.userStatePending.set(r,o);try{let a=await o;return this.userStateCache.set(r,{fetchedAt:Date.now(),snapshot:a}),a}finally{this.userStatePending.delete(r);}}async getKlines(t,r,s=100){let n=this.symbolToCoin(t),i=typeof s=="number"?{limit:s}:s,o=this.parseInterval(r),a=i.limit,l,u;i.from!==void 0&&i.to!==void 0?(l=i.from,u=i.to):i.to!==void 0&&a?(u=i.to,l=u-o*a):i.from!==void 0&&a?(l=i.from,u=l+o*a):(u=Date.now(),l=u-o*(a??100));let c=(await this.request("/info",{type:"candleSnapshot",req:{coin:n,interval:r,startTime:l,endTime:u}})).map(d=>({symbol:t,open:parseFloat(d.o),high:parseFloat(d.h),low:parseFloat(d.l),close:parseFloat(d.c),volume:parseFloat(d.v),timestamp:d.t,closeTimestamp:d.T}));return a&&c.length>a&&(c=c.slice(c.length-a)),c}async getOrderBook(t,r=10,s){let i={type:"l2Book",coin:this.symbolToCoin(t)};s?.nSigFigs!==void 0&&(i.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(i.mantissa=s.mantissa));let o=await this.request("/info",i),[a,l]=o.levels;return {symbol:t,bids:a.slice(0,r).map(u=>({price:parseFloat(u.px),quantity:parseFloat(u.sz),count:u.n})),asks:l.slice(0,r).map(u=>({price:parseFloat(u.px),quantity:parseFloat(u.sz),count:u.n})),timestamp:o.time}}async getRecentTrades(t,r=50){let s=this.symbolToCoin(t);return (await this.request("/info",{type:"recentTrades",coin:s})).slice(0,r).map(i=>({symbol:t,side:i.side==="B"?"buy":"sell",price:parseFloat(i.px),quantity:parseFloat(i.sz),timestamp:i.time,tradeId:i.tid}))}async placeOrder(t){throw new Error("placeOrder() requires wallet private key configuration for EIP-712 signature. Please configure authentication before calling this method. See: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint")}async cancelOrder(t){throw new Error("cancelOrder() requires wallet private key configuration for EIP-712 signature. Please configure authentication before calling this method. See: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint")}async getPositions(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let[r,s]=await Promise.all([this.getUserStateSnapshot(t.userAddress),this.getUniverseSnapshot()]),n=Ds(r.clearinghouse,t.symbol),i=Os(s);return n.positions=Es(n.positions,r.openOrders??[],i),n.totalUnrealizedPnl=n.positions.reduce((o,a)=>o+a.unrealizedPnl,0),n}async getActiveAssetLeverage(t){let r=this.symbolToCoin(t.symbol);try{let n=(await this.request("/info",{type:"activeAssetData",coin:r,user:t.userAddress}))?.leverage;return !n||typeof n.value!="number"?null:{value:n.value,type:n.type}}catch(s){if(s instanceof Pe&&(s.statusCode===422||s.statusCode===400))return null;throw s}}async getAssetMeta(t){let r=await this.fetchAssetUniverse(),s=this.symbolToCoin(t.symbol);return r.get(s)??null}async fetchAssetUniverse(){let t=Date.now();if(this.assetMetaCache&&t-this.assetMetaCache.fetchedAt<wi)return this.assetMetaCache.map;if(this.assetMetaPending)return this.assetMetaPending;let r=(async()=>{let s=await this.request("/info",{type:"meta"}),n=new Map;for(let i of s.universe)!i||typeof i.name!="string"||typeof i.szDecimals=="number"&&n.set(i.name,{szDecimals:i.szDecimals,maxLeverage:i.maxLeverage});return this.assetMetaCache={fetchedAt:Date.now(),map:n},n})();this.assetMetaPending=r;try{return await r}finally{this.assetMetaPending=null;}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let[r,s]=await Promise.all([this.getUserStateSnapshot(t.userAddress).catch(()=>null),this.getUniverseSnapshot().catch(()=>{})]),n=r?.openOrders??[],i={leverageByCoin:ks(r?.clearinghouse),markByCoin:s?Os(s):void 0},o=n.map(l=>ws(l,i)),a=t.symbol?o.filter(l=>l.symbol===t.symbol):o;return {orders:a,totalCount:a.length,raw:n}}async getTrades(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"userFills",user:t.userAddress}),s=r.map(n=>{let i=`${n.coin}-USDC`,o=n.dir.includes("Long");return {tradeId:n.tid.toString(),orderId:n.oid.toString(),symbol:i,side:o?"long":"short",price:parseFloat(n.px),quantity:parseFloat(n.sz),fee:parseFloat(n.fee||"0"),feeCurrency:n.feeToken||"USDC",isMaker:n.side==="M",timestamp:n.time,dir:n.dir,closedPnl:parseFloat(n.closedPnl||"0")}});return t.symbol&&(s=s.filter(n=>n.symbol===t.symbol)),t.startTime&&(s=s.filter(n=>n.timestamp>=t.startTime)),t.endTime&&(s=s.filter(n=>n.timestamp<=t.endTime)),t.limit&&(s=s.slice(0,t.limit)),{trades:s,totalCount:s.length,raw:r}}async connectWebSocket(){this.wsRefCount+=1,this.wsManager||(this.wsManager=new Ve(this._wsEndpoint)),!this.wsManager.isConnectedNow()&&await this.wsManager.connect();}disconnectWebSocket(){this.wsRefCount=Math.max(0,this.wsRefCount-1),this.wsRefCount===0&&this.wsManager&&(this.wsManager.disconnect(),this.wsManager=null);}subscribeMarketData(t,r,s,n){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe(t,r,s,n?.aggregation)}subscribeCandles(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=`${t}:${r}`;return this.wsManager.subscribe("candle",n,s)}subscribeUserData(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=t==="fills"?"userFills":"userEvents";return this.wsManager.subscribe(n,r,s)}subscribeAccountState(t,r){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe("accountState",t,s=>{r(Ni(s));})}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}};function Ds(e,t){let r=e.assetPositions.map(o=>{let a=o.position,l=`${a.coin}-USDC`,u=parseFloat(a.szi);if(u===0)return null;let p=parseFloat(a.entryPx),c=parseFloat(a.unrealizedPnl),d=parseFloat(a.positionValue);return {symbol:l,side:u>0?"long":"short",quantity:Math.abs(u),quantityRaw:a.szi.startsWith("-")?a.szi.slice(1):a.szi,entryPrice:p,markPrice:p,unrealizedPnl:c,unrealizedPnlPercent:parseFloat(a.returnOnEquity)*100,leverage:a.leverage.value,liquidationPrice:a.liquidationPx?parseFloat(a.liquidationPx):void 0,margin:parseFloat(a.marginUsed),notionalValue:Math.abs(d)}}).filter(o=>o!==null),s=t?r.filter(o=>o.symbol===t):r,n=e.withdrawable,i=typeof n=="string"&&n.length>0?parseFloat(n):parseFloat(e.marginSummary.accountValue)-parseFloat(e.marginSummary.totalMarginUsed);return {positions:s,totalEquity:parseFloat(e.marginSummary.accountValue),availableBalance:i,totalUnrealizedPnl:s.reduce((o,a)=>o+a.unrealizedPnl,0),raw:e}}function Ri(e){if(!e.children||e.children.length===0)return {};let t,r;for(let s of e.children){let n=typeof s.orderType=="string"?s.orderType:"",i=s.triggerPx;if(typeof i!="string"||i.length===0)continue;let o=parseFloat(i);!Number.isFinite(o)||o<=0||(/take\s*profit/i.test(n)?t=o:/stop/i.test(n)&&(r=o));}return {takeProfitPrice:t,stopLossPrice:r}}function ws(e,t){let r=`${e.coin}-USDC`,s=parseFloat(e.origSz),n=parseFloat(e.sz),i=s-n,o=e.side===true||e.side==="B",a=typeof e.orderType=="string"?e.orderType:"Limit",u=/^market$/i.test(a)?"market":"limit",p=e.isTrigger===true,c;p&&(/take\s*profit/i.test(a)?c="tp":/stop/i.test(a)&&(c="sl"));let d=typeof e.triggerPx=="string"&&e.triggerPx.length>0?parseFloat(e.triggerPx):void 0,y=typeof e.triggerCondition=="string"&&e.triggerCondition!=="N/A"?e.triggerCondition:void 0,{takeProfitPrice:m,stopLossPrice:f}=Ri(e),T=t?.leverageByCoin?.get(e.coin),h=t?.markByCoin?.get(e.coin);return {orderId:e.oid.toString(),clientOrderId:e.cloid??void 0,symbol:r,side:o?"long":"short",orderType:u,price:parseFloat(e.limitPx),quantity:s,filledQuantity:i,remainingQuantity:n,status:i>0&&n>0?"partially_filled":"pending",timestamp:e.timestamp,updateTimestamp:e.timestamp,leverage:T,reduceOnly:e.reduceOnly===true,isTrigger:p||void 0,triggerPx:d,triggerType:c,triggerCondition:y,markPrice:h,takeProfitPrice:m,stopLossPrice:f}}function ks(e){let t=new Map;if(!e)return t;for(let r of e.assetPositions??[]){let s=r.position?.leverage?.value;typeof s=="number"&&Number.isFinite(s)&&s>0&&t.set(r.position.coin,s);}return t}function Ai(e){return e?e.map(t=>({coin:t.coin,total:parseFloat(t.total),totalRaw:t.total,hold:parseFloat(t.hold),entryNotional:t.entryNtl?parseFloat(t.entryNtl):void 0})):[]}function Ni(e){let t=e.clearinghouseState,r=t?Ds(t):{positions:[],totalEquity:0,availableBalance:0},s=e.openOrders??[],n=Ai(e.spotState?.balances),i=e.meta&&e.assetCtxs?Ii([e.meta,e.assetCtxs]):null,o=ks(t),a=s.map(d=>ws(d,{leverageByCoin:o,markByCoin:i??void 0})),l=Es(r.positions,s,i),u=l.reduce((d,y)=>d+y.unrealizedPnl,0),p=e.meta&&e.assetCtxs?Ui(e.meta,e.assetCtxs,e.serverTime):void 0,c=t?Mi(t):void 0;return {positions:l,openOrders:a,spotBalances:n,totalEquity:r.totalEquity??0,availableBalance:r.availableBalance??0,totalUnrealizedPnl:u,serverTime:e.serverTime,leverageByCoin:c,universe:p,raw:e}}function Ui(e,t,r){let s=e.universe.map((i,o)=>{let a=t[o]??{},l=`${i.name}-USDC`,u=parseFloat(a.midPx||a.markPx||"0"),p=a.prevDayPx,c=p?parseFloat(p):u,d=c>0?(u-c)/c*100:0,y={symbol:l,price:u,change24h:d,volume24h:parseFloat(a.dayNtlVlm||"0"),fundingRate:parseFloat(a.funding||"0"),openInterest:parseFloat(a.openInterest||"0"),markPrice:parseFloat(a.markPx||"0"),indexPrice:parseFloat(a.oraclePx||a.midPx||"0")},m=i.szDecimals,f=i.maxLeverage,T=typeof m=="number"?{szDecimals:m,maxLeverage:f}:null;return {coin:i.name,symbol:l,market:y,meta:T}}),n=new Map;for(let i of s)n.set(i.symbol,i);return {assets:s,bySymbol:n,fetchedAt:r??Date.now()}}function Mi(e){let t={};for(let r of e.assetPositions??[]){let s=r.position?.leverage;if(!s||typeof s.value!="number")continue;let n=s.type==="isolated"||s.type==="cross"?s.type:"cross";t[r.position.coin]={value:s.value,type:n};}return t}function Ii(e){let[t,r]=e,s=new Map;return t.universe.forEach((n,i)=>{let o=r[i];if(!o)return;let a=o.markPx??o.midPx??o.oraclePx;if(typeof a!="string"||a.length===0)return;let l=parseFloat(a);Number.isFinite(l)&&l>0&&s.set(n.name,l);}),s}function Os(e){let t=new Map;for(let r of e.assets){let s=r.market.markPrice&&r.market.markPrice>0?r.market.markPrice:r.market.price;Number.isFinite(s)&&s>0&&t.set(r.coin,s);}return t}function Li(e,t){let r=e.symbol.split("-")[0],s=e.side==="long"?"A":"B",n=s==="B",i,o;for(let a of t){if(a.coin!==r||a.reduceOnly!==true||a.isTrigger!==true||!(a.side===s||a.side===n))continue;let u=typeof a.orderType=="string"?a.orderType:"",p=/take\s*profit/i.test(u),c=/stop/i.test(u);p?(!i||a.timestamp>i.timestamp)&&(i=a):c&&(!o||a.timestamp>o.timestamp)&&(o=a);}return {tp:i?.triggerPx?parseFloat(i.triggerPx):void 0,sl:o?.triggerPx?parseFloat(o.triggerPx):void 0}}function Es(e,t,r){return e.map(s=>{let n={...s},{tp:i,sl:o}=Li(s,t);n.takeProfitPrice=i,n.stopLossPrice=o;let a=s.symbol.split("-")[0],l=r?.get(a);if(l&&Number.isFinite(l)&&l>0){n.markPrice=l;let u=s.side==="long"?1:-1,p=(l-s.entryPrice)*s.quantity*u;n.unrealizedPnl=p,n.notionalValue=l*s.quantity,s.margin>0&&(n.unrealizedPnlPercent=p/s.margin*100);}return n})}var Pe=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="HyperliquidApiError";}};var pe=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="LiberFiApiError";}},Fi=3e4,Ne=class{baseUrl;timeout;headers;defaultQuery;fetchImpl;constructor(t){if(!t.baseUrl)throw new Error("LiberFiHttpTransport: `baseUrl` is required (e.g. https://api.liberfi.io/perpetuals).");this.baseUrl=t.baseUrl.replace(/\/+$/,""),this.timeout=t.timeout??Fi,this.headers=t.headers,this.defaultQuery=t.defaultQuery,this.fetchImpl=t.fetchImpl??globalThis.fetch.bind(globalThis);}getBaseUrl(){return this.baseUrl}buildUrl(t,r){let s=new URLSearchParams;if(this.defaultQuery)for(let[i,o]of Object.entries(this.defaultQuery))o===void 0||o===""||s.set(i,o);if(r)for(let[i,o]of Object.entries(r))o===void 0||o===""||s.set(i,o);let n=s.toString();return `${this.baseUrl}${t}${n?`?${n}`:""}`}async request(t,r){let s=this.buildUrl(r.path,r.query),n=new AbortController,i=r.timeoutMs??this.timeout,o=setTimeout(()=>n.abort(),i);try{let a=await this.fetchImpl(s,{method:t,headers:{Accept:"application/json",...t==="POST"?{"Content-Type":"application/json"}:{},...this.headers,...r.headers},body:t==="POST"?JSON.stringify(r.body??{}):void 0,signal:n.signal});if(!a.ok){let l=await qi(a);throw new pe(`HTTP ${a.status} ${a.statusText} from ${t} ${s}`,a.status,l)}return a.status===204?void 0:await a.json()}catch(a){if(a instanceof pe)throw a;if(a instanceof Error&&a.name==="AbortError")throw new pe(`Request timeout after ${i}ms: ${t} ${s}`,408,"");let l=a instanceof Error?a.message:String(a);throw new pe(`Network error: ${t} ${s}: ${l}`,0,"")}finally{clearTimeout(o);}}};async function qi(e){try{return await e.text()}catch{return ""}}var Hi="wss://api.hyperliquid.xyz/ws",Yt=class{transport;wsEndpoint;signTypedData;wsManager=null;wsRefCount=0;constructor(t){if(t.transport)this.transport=t.transport;else {if(!t.baseUrl)throw new Error("LiberFiPerpetualsClient: either `baseUrl` or a pre-built `transport` is required.");this.transport=new Ne({baseUrl:t.baseUrl,timeout:t.timeout,headers:t.headers,defaultQuery:t.provider?{provider:t.provider}:void 0});}this.wsEndpoint=t.wsEndpoint??Hi,this.signTypedData=t.signTypedData;}async getSupportedCoins(){return (await this.transport.request("GET",{path:"/v1/coins"})).map(r=>r.symbol)}async getMarket(t){try{return await this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}`})}catch(r){if(r instanceof pe&&r.statusCode===404)return null;throw r}}async getMarkets(t){return this.transport.request("GET",{path:"/v1/markets",query:t&&t.length>0?{symbols:t.join(",")}:void 0})}async getUniverseSnapshot(){let r=(await this.getMarkets()).map(n=>({coin:n.symbol.split("-")[0],symbol:n.symbol,market:n,meta:null})),s=new Map;for(let n of r)s.set(n.symbol,n);return {assets:r,bySymbol:s,fetchedAt:Date.now()}}async getKlines(t,r,s=100){let n=typeof s=="number"?{limit:s}:s,i={interval:r};return n.limit!==void 0&&(i.limit=String(n.limit)),n.from!==void 0&&(i.start=String(n.from)),n.to!==void 0&&(i.end=String(n.to)),this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/klines`,query:i})}async getOrderBook(t,r=10,s){let n={maxLevel:String(r)};return s?.nSigFigs!==void 0&&(n.nSigFigs=String(s.nSigFigs),s.nSigFigs===5&&s.mantissa&&s.mantissa!==1&&(n.mantissa=String(s.mantissa))),this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/orderbook`,query:n})}async getRecentTrades(t,r=50){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/trades`,query:{limit:String(r)}})}async getPositions(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getPositions requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/positions`,query:{symbol:t.symbol}});return {positions:r.positions,totalEquity:r.account?.totalEquity,availableBalance:r.account?.availableBalance,totalUnrealizedPnl:r.account?.totalUnrealizedPnl,raw:r}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getOpenOrders requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/orders`,query:{symbol:t.symbol}});return {orders:r,totalCount:r.length,raw:r}}async getTrades(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getTrades requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/fills`,query:{symbol:t.symbol,limit:t.limit!==void 0?String(t.limit):void 0,startTime:t.startTime!==void 0?String(t.startTime):void 0,endTime:t.endTime!==void 0?String(t.endTime):void 0}}),s=r.map(n=>({tradeId:n.tradeId,orderId:n.orderId,symbol:n.symbol,side:n.side,price:n.price,quantity:n.quantity,fee:n.fee,feeCurrency:n.feeCurrency,isMaker:n.isMaker,timestamp:n.timestamp}));return {trades:s,totalCount:s.length,raw:r}}async getActiveAssetLeverage(t){return null}async getAssetMeta(t){return null}async placeOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.placeOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.placeOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,side:t.side,orderType:t.orderType,amount:t.amount,price:t.price,leverage:t.leverage,reduceOnly:t.reduceOnly,takeProfitPrice:t.takeProfitPrice,stopLossPrice:t.stopLossPrice,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async cancelOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/cancel/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,orderId:t.orderId,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/cancel/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async connectWebSocket(){this.wsRefCount+=1,this.wsManager||(this.wsManager=new Ve(this.wsEndpoint)),!this.wsManager.isConnectedNow()&&await this.wsManager.connect();}disconnectWebSocket(){this.wsRefCount=Math.max(0,this.wsRefCount-1),this.wsRefCount===0&&this.wsManager&&(this.wsManager.disconnect(),this.wsManager=null);}subscribeMarketData(t,r,s,n){return this.requireWS().subscribe(t,r,s,n?.aggregation)}subscribeCandles(t,r,s){return this.requireWS().subscribe("candle",`${t}:${r}`,s)}subscribeUserData(t,r,s){let n=t==="fills"?"userFills":"userEvents";return this.requireWS().subscribe(n,r,s)}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}requireWS(){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager}};var Xt=class{transport;constructor(t){this.transport="transport"in t?t.transport:new Ne(t);}getBaseUrl(){return this.transport.getBaseUrl()}async quote(t){return this.transport.request("POST",{path:"/v1/deposits/quote",body:t})}async submit(t){return this.transport.request("POST",{path:"/v1/deposits/submit",body:t})}async status(t){if(!t)throw new Error("intentId is required");return this.transport.request("GET",{path:`/v1/deposits/${encodeURIComponent(t)}`})}async refresh(t){if(!t)throw new Error("intentId is required");return this.transport.request("POST",{path:`/v1/deposits/${encodeURIComponent(t)}/refresh`})}};var nt=new Set(["settled","refunded","failed"]);var xt={phase:"idle"};function Jt(e,t){switch(t.type){case "RESET":return xt;case "QUOTE_REQUEST":return e.phase==="idle"||e.phase==="ready_to_sign"||e.phase==="expired"||e.phase==="failed"?{phase:"quoting"}:e;case "QUOTE_RECEIVED":return e.phase==="quoting"?{phase:"ready_to_sign",quote:t.quote,expiresAtMs:Date.parse(t.quote.expiresAt)}:e;case "QUOTE_FAILED":return e.phase==="quoting"?{phase:"failed",error:t.error}:e;case "QUOTE_EXPIRED":return e.phase==="ready_to_sign"?{phase:"expired",quote:e.quote}:e;case "SIGN_START":return e.phase==="ready_to_sign"?{phase:"signing",quote:e.quote}:e;case "SIGN_FAILED":return e.phase==="signing"?{phase:"failed",error:t.error}:e;case "BROADCAST_START":return e.phase==="signing"?{phase:"broadcasting",quote:e.quote}:e;case "BROADCAST_FAILED":return e.phase==="broadcasting"||e.phase==="signing"?{phase:"failed",error:t.error}:e;case "SUBMIT_OK":return e.phase==="broadcasting"?{phase:"submitted",quote:e.quote,intentId:t.intentId,solanaTxHash:t.solanaTxHash}:e;case "SUBMIT_FAILED":return e.phase==="broadcasting"?{phase:"failed",error:t.error}:e;case "STATUS_UPDATE":{if(e.phase!=="submitted"&&e.phase!=="tracking")return e;let r=(e.phase==="submitted",e.intentId);return _i(t.status,r)}}}function _i(e,t){switch(e.status){case "settled":return {phase:"succeeded",intentId:t,status:e};case "refunded":return {phase:"refunded",intentId:t,status:e};case "failed":case "stuck":return {phase:"failed",error:e.lastError??{code:e.status==="stuck"?"STUCK":"FAILED",message:e.status==="stuck"?"Deposit hasn't been observed by Relay yet \u2014 please contact support if this persists.":"Deposit failed. Funds will be refunded to your wallet shortly.",recoverable:false},intentId:t,status:e};default:return {phase:"tracking",intentId:t,status:e}}}function Bi(e){return e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"}function Qi(e){return e.phase==="submitted"||e.phase==="tracking"}function Ki(e){if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.status}function zi(e){if(e.phase==="ready_to_sign"||e.phase==="signing"||e.phase==="broadcasting"||e.phase==="submitted"||e.phase==="expired")return e.quote.breakdown;if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.breakdown}function Wi(e){return e!==void 0&&nt.has(e)}var Ce=react.createContext({});function Gi({client:e,depositClient:t,children:r}){let s=react.useMemo(()=>({client:e,depositClient:t}),[e,t]);return jsxRuntime.jsx(Ce.Provider,{value:s,children:r})}function E(){let e=react.useContext(Ce);if(!e||!e.client)throw new Error("usePerpetualsClient must be used within a PerpetualsProvider");return e}function Rs(){return ["perps","coins"]}async function As(e){return await e.getSupportedCoins()}function Zt(e={}){let{client:t}=E();return reactQuery.useQuery({queryKey:Rs(),queryFn:async()=>As(t),staleTime:300*1e3,...e})}var Ns=6e4;function ye(){return ["perps","universe"]}async function Te(e){if(typeof e.getUniverseSnapshot!="function")throw new Error("useUniverseQuery: the active perpetuals client does not implement getUniverseSnapshot()");return e.getUniverseSnapshot()}function Oe(e){return typeof e.getUniverseSnapshot=="function"}function Zi(e={}){let{client:t}=E(),r=Oe(t)&&e.enabled!==false;return reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(t),refetchInterval:Ns,staleTime:Ns/2,...e,enabled:r})}var St=6e4;function Ms(e){return ["perps","market",e.symbol]}async function Is(e,{symbol:t}){return await e.getMarket(t)}function it(e,t={}){let{client:r}=E(),s=Oe(r),n=reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(r),refetchInterval:St,staleTime:St/2,enabled:s&&t.enabled!==false&&!!e.symbol,select:o=>o.bySymbol.get(e.symbol)?.market??null}),i=reactQuery.useQuery({queryKey:Ms(e),queryFn:async()=>Is(r,e),staleTime:St/2,refetchInterval:St,...t,enabled:!s&&t.enabled!==false&&!!e.symbol});return s?n:i}var vt=6e4;function Fs(e={}){return ["perps","markets",JSON.stringify((e.symbols??[]).sort())]}async function qs(e,{symbols:t}={}){return await e.getMarkets(t)}function er(e={},t={}){let{client:r}=E(),s=Oe(r),n=reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(r),refetchInterval:vt,staleTime:vt/2,enabled:s&&t.enabled!==false,select:o=>{if(!e.symbols||e.symbols.length===0)return o.assets.map(l=>l.market);let a=new Set(e.symbols);return o.assets.filter(l=>a.has(l.symbol)).map(l=>l.market)}}),i=reactQuery.useQuery({queryKey:Fs(e),queryFn:async()=>qs(r,e),staleTime:vt/2,refetchInterval:vt,...t,enabled:!s&&t.enabled!==false});return s?n:i}function Hs(e){return ["perps","klines",e.symbol,e.interval,String(e.limit??100)]}async function _s(e,{symbol:t,interval:r,limit:s}){return await e.getKlines(t,r,s)}function to(e,t={}){let{client:r}=E();return reactQuery.useQuery({queryKey:Hs(e),queryFn:async()=>_s(r,e),staleTime:30*1e3,...t})}function Bs(e){let t=e.aggregation,r=t?.nSigFigs!==void 0?`n${t.nSigFigs}${t.nSigFigs===5&&t.mantissa&&t.mantissa!==1?`m${t.mantissa}`:""}`:"raw";return ["perps","orderBook",e.symbol,String(e.maxLevel??20),r]}async function Qs(e,{symbol:t,maxLevel:r,aggregation:s}){return await e.getOrderBook(t,r,s)}function tr(e,t={}){let{client:r}=E();return reactQuery.useQuery({queryKey:Bs(e),queryFn:async()=>Qs(r,e),staleTime:5*1e3,...t})}function Ks(e){return ["perps","recentTrades",e.symbol,String(e.limit??50)]}async function zs(e,{symbol:t,limit:r}){return await e.getRecentTrades(t,r)}function rr(e,t={}){let{client:r}=E();return reactQuery.useQuery({queryKey:Ks(e),queryFn:async()=>zs(r,e),staleTime:5*1e3,...t})}function Ge(e){return ["perps","positions",e.userAddress??""]}async function Ws(e,t){return await e.getPositions(t)}function io(e,t){return {...e,positions:e.positions.filter(r=>r.symbol===t)}}function ot(e,t={}){let{client:r}=E(),{enabled:s=true,userAddress:n,symbol:i}=e;return reactQuery.useQuery({queryKey:Ge({userAddress:n}),queryFn:async()=>Ws(r,{userAddress:n}),enabled:s&&!!n,staleTime:10*1e3,select:i?o=>io(o,i):void 0,...t})}function je(e){return ["perps","orders",e.userAddress??""]}async function $s(e,t){return await e.getOpenOrders(t)}function ao(e,t){let r=e.orders.filter(s=>s.symbol===t);return {...e,orders:r,totalCount:r.length}}function sr(e,t={}){let{client:r}=E(),{enabled:s=true,userAddress:n,symbol:i}=e;return reactQuery.useQuery({queryKey:je({userAddress:n}),queryFn:async()=>$s(r,{userAddress:n}),enabled:s&&!!n,staleTime:5*1e3,select:i?o=>ao(o,i):void 0,...t})}function Vs(e){return ["perps","trades",e.userAddress??"",e.symbol??"",String(e.limit??50),String(e.startTime??""),String(e.endTime??"")]}async function Gs(e,t){return await e.getTrades(t)}function nr(e,t={}){let{client:r}=E(),{enabled:s=true,...n}=e;return reactQuery.useQuery({queryKey:Vs(n),queryFn:async()=>Gs(r,n),enabled:s&&!!n.userAddress,staleTime:30*1e3,...t})}function Pt(e){return ["perps","activeAssetLeverage",e.userAddress??"",e.symbol??""]}async function js(e,t){return await e.getActiveAssetLeverage(t)}function ir(e,t={}){let{client:r}=E(),{enabled:s=true,userAddress:n,symbol:i}=e;return reactQuery.useQuery({queryKey:Pt({userAddress:n,symbol:i}),queryFn:async()=>{if(!n)throw new Error("useActiveAssetLeverageQuery: userAddress is required");return js(r,{userAddress:n,symbol:i})},enabled:s&&!!n&&!!i,staleTime:30*1e3,...t})}var or=6e4;function Xs(e){return ["perps","assetMeta",e.symbol??""]}async function Js(e,t){return await e.getAssetMeta(t)}function at(e,t={}){let{client:r}=E(),{enabled:s=true,symbol:n}=e,i=Oe(r),o=reactQuery.useQuery({queryKey:ye(),queryFn:()=>Te(r),refetchInterval:or,staleTime:or/2,enabled:i&&s&&!!n,select:l=>n?l.bySymbol.get(n)?.meta??null:null}),a=reactQuery.useQuery({queryKey:Xs({symbol:n}),queryFn:async()=>{if(!n)throw new Error("useAssetMetaQuery: symbol is required");return Js(r,{symbol:n})},enabled:!i&&s&&!!n,staleTime:or,...t});return i?o:a}async function Zs(e,t){return await e.placeOrder(t)}function ar(e={}){let{client:t}=E();return reactQuery.useMutation({mutationFn:async r=>Zs(t,r),...e})}async function en(e,t){return await e.cancelOrder(t)}function lr(e={}){let{client:t}=E();return reactQuery.useMutation({mutationFn:async r=>en(t,r),...e})}function Ue(e){let{type:t,symbol:r,enabled:s=true,aggregation:n,throttleMs:i}=e,{client:o}=E(),[a,l]=react.useState(null),[u,p]=react.useState(false),[c,d]=react.useState(null),y=react.useRef(null),m=react.useRef(null),f=react.useRef(i);f.current=i;let T=react.useCallback(C=>{let v=f.current;if(!v||v<=0){l(C);return}y.current=C,m.current===null&&(m.current=setTimeout(()=>{if(m.current=null,y.current!==null){let R=y.current;y.current=null,l(R);}},v));},[]),h=n?.nSigFigs!==void 0?`n${n.nSigFigs}${n.nSigFigs===5&&n.mantissa&&n.mantissa!==1?`m${n.mantissa}`:""}`:"";return react.useEffect(()=>{if(!s)return;let C=null,v=true;return (async()=>{try{if(await o.connectWebSocket(),!v)return;p(!0),d(null),C=o.subscribeMarketData(t,r,T,t==="orderBook"&&n?{aggregation:n}:void 0);}catch(D){v&&(d(D instanceof Error?D:new Error("Connection failed")),p(false));}})(),()=>{if(v=false,C)try{o.unsubscribe(C);}catch(D){console.error("Failed to unsubscribe:",D);}o.disconnectWebSocket(),m.current!==null&&(clearTimeout(m.current),m.current=null),y.current=null,p(false),l(null);}},[o,t,r,s,T,h]),{data:a,isConnected:u,error:c}}function bo(e){let{symbol:t,interval:r,enabled:s=true}=e,{client:n}=E(),[i,o]=react.useState(null),[a,l]=react.useState(false),[u,p]=react.useState(null),c=react.useCallback(d=>{o(d);},[]);return react.useEffect(()=>{if(!s)return;let d=null,y=true;return (async()=>{try{if(await n.connectWebSocket(),!y)return;l(!0),p(null),d=n.subscribeCandles(t,r,c);}catch(f){y&&(p(f instanceof Error?f:new Error("Connection failed")),l(false));}})(),()=>{if(y=false,d)try{n.unsubscribe(d);}catch(f){console.error("Failed to unsubscribe:",f);}n.disconnectWebSocket(),l(false),o(null);}},[n,t,r,s,c]),{data:i,isConnected:a,error:u}}function So(e){let{type:t,userAddress:r,enabled:s=true}=e,{client:n}=E(),[i,o]=react.useState(null),[a,l]=react.useState(false),[u,p]=react.useState(null),c=react.useCallback(d=>{o(d);},[]);return react.useEffect(()=>{if(!s||!r)return;let d=null,y=true;return (async()=>{try{if(await n.connectWebSocket(),!y)return;l(!0),p(null),d=n.subscribeUserData(t,r,c);}catch(f){y&&(p(f instanceof Error?f:new Error("Connection failed")),l(false));}})(),()=>{if(y=false,d)try{n.unsubscribe(d);}catch(f){console.error("Failed to unsubscribe:",f);}n.disconnectWebSocket(),l(false),o(null);}},[n,t,r,s,c]),{data:i,isConnected:a,error:u}}function Ye(e){return ["perps","accountState",e.userAddress??""]}function mr(e,t={}){let{enabled:r=true,...s}=e;return reactQuery.useQuery({queryKey:Ye(s),queryFn:()=>null,enabled:r&&!!s.userAddress,staleTime:1/0,refetchOnWindowFocus:false,refetchOnReconnect:false,...t})}function To(e){let{userAddress:t,enabled:r=true}=e,{client:s}=E(),n=reactQuery.useQueryClient(),[i,o]=react.useState(null),[a,l]=react.useState(false),[u,p]=react.useState(null);return react.useEffect(()=>{if(!r||!t||typeof s.subscribeAccountState!="function")return;let c=null,d=true,y=f=>{if(!d)return;o(f),n.setQueryData(Ye({userAddress:t}),f);let T={positions:f.positions,totalEquity:f.totalEquity,availableBalance:f.availableBalance,totalUnrealizedPnl:f.totalUnrealizedPnl,raw:f.raw};n.setQueryData(Ge({userAddress:t}),T);let h={orders:f.openOrders,totalCount:f.openOrders.length,raw:f.raw};if(n.setQueryData(je({userAddress:t}),h),f.universe&&n.setQueryData(ye(),f.universe),f.leverageByCoin)for(let[C,v]of Object.entries(f.leverageByCoin))n.setQueryData(Pt({userAddress:t,symbol:`${C}-USDC`}),v);};return (async()=>{try{if(await s.connectWebSocket(),!d)return;l(!0),p(null),c=s.subscribeAccountState(t,y);}catch(f){if(!d)return;l(false),p(f instanceof Error?f:new Error("WebSocket connect failed"));}})(),()=>{if(d=false,c)try{s.unsubscribe(c);}catch(f){console.error("[useAccountStateSubscription] unsubscribe failed:",f);}s.disconnectWebSocket(),l(false);}},[s,n,t,r]),{data:i,isConnected:a,error:u}}function wo(e){let{userAddress:t,enabled:r=true,timeoutMs:s=3e3}=e,{client:n}=E(),i=reactQuery.useQueryClient();react.useEffect(()=>{if(!r||!t)return;let o=false,a=setTimeout(()=>{o||i.getQueryData(Ye({userAddress:t}))||(async()=>{try{let[u,p]=await Promise.all([n.getPositions({userAddress:t}),n.getOpenOrders({userAddress:t})]);if(o)return;i.setQueryData(Ge({userAddress:t}),u),i.setQueryData(je({userAddress:t}),p);}catch(u){process.env.NODE_ENV!=="production"&&console.warn("[useHyperliquidUserBootstrap] fallback REST failed:",u);}})();},s);return ()=>{o=true,clearTimeout(a);}},[n,i,t,r,s]);}function ko(){let e=react.useContext(Ce);if(!e||!e.client)throw new Error("usePerpDepositClient must be used within a <PerpetualsProvider>.");if(!e.depositClient)throw new Error("usePerpDepositClient: <PerpetualsProvider> was rendered without a `depositClient` prop. Pass a `LiberFiPerpDepositClient` instance to enable the deposit flow.");return e.depositClient}function Me(){return react.useContext(Ce)?.depositClient}function rn(e){return ["perps","deposit","quote",e]}async function sn(e,t){return e.quote(t)}function yr(e,t={}){let r=Me(),s=(t.enabled??!!Ro(e))&&!!r;return reactQuery.useQuery({queryKey:rn(e??null),queryFn:async()=>sn(r,e),enabled:s,staleTime:0,gcTime:3e4,refetchOnWindowFocus:false,...t})}function Ro(e){return !!(e&&e.userSolanaAddress&&e.hyperliquidRecipient&&e.grossLamports&&e.source)}function gr(e){let t=Me(),[r,s]=react.useReducer(Jt,xt),n=react.useCallback(()=>{s({type:"RESET"});},[]),i=react.useCallback(async o=>{let{quote:a}=o;s({type:"SIGN_START"});let l;try{if(l=await e(a.serializedTxBase64,{isVersioned:a.isVersioned,sizeBytes:a.sizeBytes}),!l)throw new Error("wallet returned an empty tx hash")}catch(p){let c=on(p,"WALLET_SIGN_OR_BROADCAST_FAILED");throw s({type:"SIGN_FAILED",error:c}),p}s({type:"BROADCAST_START"});let u={userSolanaAddress:o.userSolanaAddress,hyperliquidRecipient:o.hyperliquidRecipient,solanaTxHash:l,breakdown:a.breakdown,userId:o.userId,source:o.source,campaign:o.campaign,quoteIssuedAt:a.issuedAt};if(!t)throw s({type:"SUBMIT_FAILED",error:{code:"DEPOSIT_CLIENT_NOT_CONFIGURED",message:"Deposit client is not configured.",recoverable:false}}),new Error("Deposit client is not configured.");try{let p=await t.submit(u);return s({type:"SUBMIT_OK",intentId:p.intentId,solanaTxHash:l}),p.intentId}catch(p){let c=on(p,"DEPOSIT_SUBMIT_FAILED");throw s({type:"SUBMIT_FAILED",error:c}),p}},[t,e]);return {state:r,execute:i,reset:n,dispatch:s}}function on(e,t){if(e instanceof pe){let r=No(e.responseBody);return {code:r?.code??t,message:r?.message??e.message,recoverable:e.statusCode>=500||e.statusCode===408}}return e instanceof Error?{code:t,message:e.message,recoverable:true}:{code:t,message:String(e),recoverable:true}}function No(e){if(e)try{return JSON.parse(e)}catch{return}}function an(e){return ["perps","deposit","status",e??null]}async function ln(e,t){return e.status(t)}function br(e,t={}){let r=Me(),s=(t.enabled??!!e)&&!!r,n=t.pollIntervalMs??3e3;return reactQuery.useQuery({queryKey:an(e??void 0),queryFn:async()=>ln(r,e),enabled:s,refetchInterval:i=>{let o=i.state.data;return o&&nt.has(o.status)?false:n},refetchOnWindowFocus:false,staleTime:0,...t})}var lt={phase:"idle",steps:[]};function Ct(e,t){switch(e.id){case "approveBuilderFee":{let r=t.builderApproval;return r&&Mo(r.builder,e.params.builder)&&r.maxFeeRate>=e.params.maxFeeRate?"skipped":"pending"}case "setReferrer":return t.referrer?"skipped":"pending";case "updateLeverage":return t.leverage[e.params.asset]===e.params.leverage?"skipped":"pending"}}function Tt(e,t){switch(t.type){case "START_LOADING":return {phase:"loading",steps:e.steps,accountState:e.accountState};case "LOAD_SUCCESS":return {phase:t.steps.every(s=>s.status==="skipped"||s.status==="done")?"done":"ready",accountState:t.accountState,steps:t.steps};case "LOAD_ERROR":return {phase:"error",steps:e.steps,error:t.error};case "RUN_STEP":return {phase:"executing",steps:e.steps.map((s,n)=>n===t.index?{...s,status:"running",error:void 0}:s),accountState:e.accountState,currentIndex:t.index};case "STEP_SUCCESS":{let r=e.steps.map((i,o)=>o===t.index?{...i,status:"done",txHash:t.txHash,error:void 0}:i),s=t.accountState&&e.accountState?Io(e.accountState,t.accountState):t.accountState??e.accountState;return {phase:r.every(i=>i.status==="skipped"||i.status==="done")?"done":"ready",steps:r,accountState:s,currentIndex:void 0}}case "STEP_ERROR":return {phase:"ready",steps:e.steps.map((s,n)=>n===t.index?{...s,status:"error",error:t.error}:s),accountState:e.accountState,currentIndex:void 0};case "RESET":return lt}}function Ot(e){for(let t=0;t<e.steps.length;t++){let r=e.steps[t].status;if(r==="pending"||r==="error")return t}return null}function Mo(e,t){return e.toLowerCase()===t.toLowerCase()}function Io(e,t){return {builderApproval:t.builderApproval!==void 0?t.builderApproval:e.builderApproval,referrer:t.referrer!==void 0?t.referrer:e.referrer,leverage:{...e.leverage,...t.leverage??{}}}}function wt(e){let{adapter:t,userAddress:r,steps:s,autoLoad:n=true,onComplete:i,onError:o}=e,[a,l]=react.useReducer(Tt,lt),u=react.useRef(t),p=react.useRef(s),c=react.useRef(i),d=react.useRef(o);u.current=t,p.current=s,c.current=i,d.current=o;let y=react.useCallback(async()=>{if(r){l({type:"START_LOADING"});try{let C=await u.current.getAccountState(r),v=p.current.map(R=>({step:R,status:Ct(R,C)}));l({type:"LOAD_SUCCESS",accountState:C,steps:v});}catch(C){let v=pn(C);l({type:"LOAD_ERROR",error:v.message}),d.current?.(v,{});}}},[r]);react.useEffect(()=>{n&&r&&y();},[n,r,y]);let m=react.useCallback(async C=>{let v=a.steps[C];if(v){l({type:"RUN_STEP",index:C});try{let R=await Fo(u.current,v.step);l({type:"STEP_SUCCESS",index:C,txHash:R.txHash,accountState:R.state});}catch(R){let D=pn(R);l({type:"STEP_ERROR",index:C,error:D.message}),d.current?.(D,{stepId:v.step.id});}}},[a.steps]),f=react.useCallback(async()=>{let C=Ot(a);C!=null&&await m(C);},[a,m]),T=react.useCallback(()=>l({type:"RESET"}),[]),h=react.useRef(false);return react.useEffect(()=>{a.phase==="done"&&!h.current?(h.current=true,c.current?.(a)):a.phase!=="done"&&(h.current=false);},[a]),{state:a,reload:y,runNext:f,runStep:m,reset:T}}function Fo(e,t){switch(t.id){case "approveBuilderFee":return e.approveBuilderFee(t.params);case "setReferrer":return e.setReferrer(t.params);case "updateLeverage":return e.updateLeverage(t.params)}}function pn(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error")}function hr(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center px-4 py-3 bg-neutral-900 border-b border-neutral-800",children:jsxRuntime.jsx("span",{className:"text-neutral-400 text-sm",children:"Market data not available"})})}var dn="liberfi-perp-shimmer",qo=`
|
|
2
2
|
@keyframes ${dn}{0%{background-position:200% 0}100%{background-position:-200% 0}}
|
|
3
|
-
`;function De(){return jsxRuntime.jsx("style",{children:qo})}var xr={backgroundColor:"rgba(255, 255, 255, 0.16)",backgroundImage:"linear-gradient(90deg, rgba(255,255,255,0) 25%, rgba(255,255,255,0.18) 50%, rgba(255,255,255,0) 75%)",backgroundSize:"200% 100%",animation:`${dn} 1.8s ease-in-out infinite`,borderRadius:6};function ce(e){return {...xr,animationDelay:`${e}ms`}}function vr(){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:24},children:[jsxRuntime.jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsxRuntime.jsx("div",{style:Fe(0,84,23)}),jsxRuntime.jsx("div",{style:Fe(60,52,16)})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsx(Sr,{labelWidth:72,valueWidth:64,delay:120}),jsxRuntime.jsx(Sr,{labelWidth:72,valueWidth:48,delay:180}),jsxRuntime.jsx(Sr,{labelWidth:84,valueWidth:56,delay:240}),jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:Fe(300,132,16)}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx("div",{style:Fe(330,64,17)}),jsxRuntime.jsx("div",{style:Fe(360,64,17)})]})]})]})]})]})}function Sr({labelWidth:e,valueWidth:t,delay:r}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:Fe(r,e,16)}),jsxRuntime.jsx("div",{style:Fe(r+30,t,17)})]})}function Fe(e,t,r){return {...ce(e),width:t,height:r}}function Cr(e){let[t,r]=react.useState(),[s,n]=react.useState(0),{data:i,isPending:o}=nt({symbol:e}),{data:a,isConnected:l}=Me({type:"ticker",symbol:e,enabled:!!i});return react.useEffect(()=>{i&&r(i);},[i]),react.useEffect(()=>{if(!a)return;let u=Bo(a,e);u&&r(p=>Qo(p??i??void 0,u,e));},[a,i,e]),react.useEffect(()=>{let u=()=>{let c=Date.now(),d=3600*1e3,y=c%d,m=d-y;return Math.floor(m/1e3)};n(u());let p=setInterval(()=>{n(u());},1e3);return ()=>clearInterval(p)},[]),{marketData:t,isLoading:o,fundingCountdown:s}}function Bo(e,t){if(Array.isArray(e)){let r=e.find(s=>!s||typeof s!="object"?false:s.symbol===t);return r&&typeof r=="object"?r:null}return e&&typeof e=="object"?e:null}function je(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Qo(e,t,r){return {symbol:t.symbol??e?.symbol??r,price:je(t.price,e?.price??0),change24h:je(t.change24h,e?.change24h??0),volume24h:je(t.volume24h,e?.volume24h??0),fundingRate:je(t.fundingRate,e?.fundingRate??0),openInterest:je(t.openInterest,e?.openInterest??0),markPrice:je(t.markPrice,e?.markPrice??0),indexPrice:typeof t.indexPrice=="number"&&Number.isFinite(t.indexPrice)?t.indexPrice:e?.indexPrice,high24h:typeof t.high24h=="number"&&Number.isFinite(t.high24h)?t.high24h:e?.high24h,low24h:typeof t.low24h=="number"&&Number.isFinite(t.low24h)?t.low24h:e?.low24h}}function Ko(e){let t=Math.floor(e/3600),r=Math.floor(e%3600/60),s=e%60;return `${String(t).padStart(2,"0")}:${String(r).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function fn(e,t=2){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function yn(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function Tr({marketData:e,fundingCountdown:t}){let{symbol:r,price:s,change24h:n,indexPrice:i,volume24h:o,openInterest:a,fundingRate:l}=e,u=typeof n=="number"&&Number.isFinite(n)?n:0,p=typeof l=="number"&&Number.isFinite(l)?l:0,c=u>=0,d=u.toFixed(2);return jsxRuntime.jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:24},children:[jsxRuntime.jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsxRuntime.jsx("span",{style:{fontSize:18,fontWeight:500,lineHeight:"23px",letterSpacing:"-0.36px",color:"#ffffff"},children:yn(s)}),jsxRuntime.jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:c?"#C7FF2E":"#F76816"},children:[c?"+":"",d,"%"]})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Oracle Price"}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:i?yn(i):"-"})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"24h Volume"}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:fn(o,0)})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Open Interest"}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:fn(a*(e.markPrice||s))})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Funding / Countdown"}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsxs("span",{style:{fontSize:13,lineHeight:"17px",color:p>=0?"#C7FF2E":"#F76816"},children:[(p*100).toFixed(5),"%"]}),jsxRuntime.jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"#ffffff"},children:Ko(t)})]})]})]})]})}function zo({symbol:e}){let{marketData:t,isLoading:r,fundingCountdown:s}=Cr(e);return r?jsxRuntime.jsx(vr,{}):t?jsxRuntime.jsx(Tr,{marketData:t,fundingCountdown:s}):jsxRuntime.jsx(hr,{})}function Dr({onSelectCoin:e}={}){let[t,r]=react.useState(""),[s,n]=react.useState([]),{data:i,isPending:o}=Zt(),{data:a,isPending:l}=er({symbols:i},{enabled:!!i&&i.length>0});react.useEffect(()=>{a&&n(a);},[a]);let u=react.useMemo(()=>{if(!t.trim())return s;let c=t.toLowerCase().trim();return s.filter(d=>d.symbol.toLowerCase().includes(c))},[s,t]);return {coins:s,isLoading:o||l,searchQuery:t,setSearchQuery:r,filteredCoins:u,handleSelectCoin:c=>{e?.(c);}}}function bn(e,t=2){return e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function Go(e){return e>=1e3?e.toFixed(2):e>=1?e.toFixed(4):e.toFixed(6)}function wr({coins:e,searchQuery:t,onSearchChange:r,onSelectCoin:s,isLoading:n}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{backgroundColor:"#1A1A1A",flex:"1 1 0",minHeight:0},children:[jsxRuntime.jsx("div",{style:{padding:"16px 16px 12px"},children:jsxRuntime.jsxs("div",{className:"flex items-center",style:{height:32,border:"1px solid #2a2a2a",borderRadius:4,padding:"0 6px 0 12px",gap:8},children:[jsxRuntime.jsx(ui.SearchIcon,{className:"flex-shrink-0",style:{width:14,height:14,color:"#6b6b6b"}}),jsxRuntime.jsx("input",{type:"text",placeholder:"Search coins...",value:t,onChange:i=>r(i.target.value),className:"flex-1 bg-transparent outline-none",style:{fontSize:12,color:"#ffffff",border:"none"}})]})}),jsxRuntime.jsxs("div",{className:"flex-1 overflow-auto",children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{height:28,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)",position:"sticky",top:0,backgroundColor:"#1A1A1A",zIndex:1},children:[jsxRuntime.jsx("span",{style:{flex:"0 0 140px",fontSize:12,color:"#6b6b6b"},children:"Token"}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Last Price"}),jsxRuntime.jsx("span",{style:{flex:"0 0 120px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Change"}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"8h Funding"}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Volume"}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Open Interest"})]}),n?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Loading..."})}):e.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:t?"No coins found":"No coins available"})}):e.map(i=>{let o=i.change24h>=0,a=i.change24h.toFixed(2),l=(i.fundingRate*100).toFixed(4),u=i.fundingRate>=0,p=i.symbol.split("-")[0];return jsxRuntime.jsxs("div",{className:"flex items-center cursor-pointer transition-colors",style:{height:36,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)"},onClick:()=>s(i.symbol),onMouseEnter:c=>{c.currentTarget.style.backgroundColor="rgba(255,255,255,0.03)";},onMouseLeave:c=>{c.currentTarget.style.backgroundColor="transparent";},children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{flex:"0 0 140px",gap:8},children:[jsxRuntime.jsx("img",{src:`https://app.hyperliquid.xyz/coins/${p}.svg`,alt:p,className:"rounded-full",style:{width:20,height:20},onError:c=>{let d=c.target;d.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"#ffffff"},children:p})]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#ffffff",textAlign:"right"},children:Go(i.price)}),jsxRuntime.jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:o?"#C7FF2E":"#F76816",textAlign:"right"},children:[o?"+":"",a,"%"]}),jsxRuntime.jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:u?"#C7FF2E":"#F76816",textAlign:"right"},children:[l,"%"]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:bn(i.volume24h)}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:bn(i.openInterest*i.price)})]},i.symbol)})]})]})}function jo({onSelectCoin:e,className:t}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:i,handleSelectCoin:o}=Dr({onSelectCoin:e});return jsxRuntime.jsx("div",{className:t,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsxRuntime.jsx(wr,{coins:r,searchQuery:n,onSearchChange:i,onSelectCoin:o,isLoading:s})})}function Cn(e,t){if(!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0)return {};let r=Math.floor(Math.log10(e)),s=[{nSigFigs:2,step:Math.pow(10,r-1)},{nSigFigs:3,step:Math.pow(10,r-2)},{nSigFigs:4,step:Math.pow(10,r-3)},{nSigFigs:5,mantissa:5,step:5*Math.pow(10,r-4)},{nSigFigs:5,mantissa:2,step:2*Math.pow(10,r-4)},{nSigFigs:5,step:Math.pow(10,r-4)}],n=1e-9,i=null;for(let o of s)o.step<=t+n&&(!i||o.step>i.step)&&(i=o);return i?i.mantissa&&i.mantissa!==1?{nSigFigs:i.nSigFigs,mantissa:i.mantissa}:{nSigFigs:i.nSigFigs}:{nSigFigs:5}}function vn(e,t,r){if(t<=0)return e;let s=new Map,n=r==="ask"?Math.ceil:Math.floor;return e.forEach(i=>{let o=n(i.price/t)*t,a=s.get(o);a?(a.quantity+=i.quantity,i.count&&(a.count=(a.count||0)+i.count)):s.set(o,{price:o,quantity:i.quantity,count:i.count});}),Array.from(s.values())}function Pn(e){let t=0,r=e.map(n=>{let i=n.quantity*n.price;return t+=i,{...n,quantity:i,total:t,percentage:0}}),s=t;return r.map(n=>({...n,percentage:s>0?n.total/s*100:0}))}function Er({symbol:e,maxLevel:t=20,precision:r=1}){let[s,n]=react.useState(null),[i,o]=react.useState(r);react.useEffect(()=>{o(r);},[r]);let{data:a,isPending:l}=tr({symbol:e,maxLevel:t}),u=react.useMemo(()=>{let y=s?.bids[0]?.price??a?.bids[0]?.price,m=s?.asks[0]?.price??a?.asks[0]?.price,f=y&&m?(y+m)/2:m??y??0;return f>0?Math.floor(Math.log10(f)):null},[s,a]),p=react.useMemo(()=>{if(u===null)return;let y=Math.pow(10,u);return Cn(y,i)},[i,u]),{data:c}=Me({type:"orderBook",symbol:e,enabled:!!a,aggregation:p,throttleMs:100});return react.useEffect(()=>{c?n(c):a&&n(a);},[c,a]),{...react.useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let y=vn(s.bids,i,"bid"),m=vn(s.asks,i,"ask"),f=y.sort((I,g)=>g.price-I.price).slice(0,t),x=m.sort((I,g)=>I.price-g.price).slice(0,t),h=Pn(f),P=Pn(x),S=h[0]?.price||0,w=(P[0]?.price||0)-S,B=S>0?w/S*100:0;return {bids:h,asks:P,spread:w,spreadPercentage:B}},[s,i,t]),isLoading:l,precision:i,setPrecision:o}}var On={scrollbarWidth:"thin",scrollbarColor:"rgba(63,63,70,0.6) transparent"},Jo={backgroundColor:"#000000",fontSize:11},Zo={height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},Rr={flex:"1 1 0%"},ea={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},ta={height:20,background:"linear-gradient(to right, rgba(247,104,22,0), #F76816)",opacity:.15},ra={height:20,background:"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15},sa={color:"#F76816",fontWeight:400},na={color:"#C7FF2E",fontWeight:400},Dn={flex:"1 1 0%",color:"#ffffff"},ia={flex:"1 1 0%"},oa={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},aa={gap:12,fontSize:12,color:"#ffffff"},la={color:"#ffffff"},ua={color:"#ffffff",fontWeight:500},pa={color:"#ffffff",fontWeight:400,background:"none",border:"none",padding:0,gap:4},ca={top:"calc(100% + 4px)",minWidth:64,backgroundColor:"#0a0a0a",border:"1px solid rgba(63,63,70,0.6)",borderRadius:6,padding:4,boxShadow:"0 4px 16px rgba(0,0,0,0.5)"},Rn={padding:"4px 10px",fontSize:12,color:"#ffffff",background:"transparent",border:"none",borderRadius:4,textAlign:"left"},da={...Rn,color:"#C7FF2E"};function ma(e){return e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function wn(e){return Math.round(e).toLocaleString("en-US")}function kn(e){return e>=1?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e.toString()}var En=react.memo(function({price:t,quantity:r,total:s,percentage:n,side:i,onPriceClick:o}){let a=i==="ask",l=react.useMemo(()=>a?{...ta,width:`${n}%`}:{...ra,width:`${n}%`},[a,n]),u=react.useMemo(()=>o?()=>o(t):void 0,[o,t]);return jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:ea,onClick:u,children:[jsxRuntime.jsx("div",{className:"absolute left-0 top-0",style:l}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:ia,children:jsxRuntime.jsx("span",{style:a?sa:na,children:ma(t)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Dn,children:wn(r)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Dn,children:wn(s)})]})},(e,t)=>e.price===t.price&&e.quantity===t.quantity&&e.total===t.total&&e.percentage===t.percentage&&e.side===t.side&&e.onPriceClick===t.onPriceClick);function fa({spreadPercentage:e,precision:t,precisionOptions:r,onPrecisionChange:s}){let[n,i]=react.useState(false),o=react.useRef(null);react.useEffect(()=>{if(!n)return;let l=u=>{o.current?.contains(u.target)||i(false);};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[n]);let a=react.useMemo(()=>({color:"#6b6b6b",transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s"}),[n]);return jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:oa,children:jsxRuntime.jsxs("div",{className:"flex items-center",style:aa,children:[jsxRuntime.jsx("span",{style:la,children:"Spread:"}),jsxRuntime.jsxs("div",{ref:o,className:"relative",children:[jsxRuntime.jsxs("button",{type:"button",className:"flex items-center cursor-pointer hover:text-white/80 transition-colors",style:pa,onClick:()=>i(l=>!l),"aria-haspopup":"listbox","aria-expanded":n,children:[jsxRuntime.jsx("span",{children:kn(t)}),jsxRuntime.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",style:a,children:jsxRuntime.jsx("path",{d:"M1 2.5L4 5.5L7 2.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]}),n&&jsxRuntime.jsx("div",{role:"listbox",className:"absolute left-1/2 -translate-x-1/2 z-20 flex flex-col",style:ca,children:r.map(l=>{let u=l===t;return jsxRuntime.jsx("button",{type:"button",role:"option","aria-selected":u,className:"cursor-pointer transition-colors",style:u?da:Rn,onMouseEnter:p=>{p.currentTarget.style.backgroundColor="rgba(255,255,255,0.06)";},onMouseLeave:p=>{p.currentTarget.style.backgroundColor="transparent";},onClick:()=>{s(l),i(false);},children:kn(l)},l)})})]}),jsxRuntime.jsxs("span",{style:ua,children:[e.toFixed(3),"%"]})]})})}function Nr({bids:e,asks:t,spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i,onPriceClick:o}){let a=react.useRef(null),l=react.useRef(null),u=react.useRef(true),p=react.useRef(true),c=react.useMemo(()=>[...t].reverse(),[t]);react.useEffect(()=>{let m=a.current;if(!m||!u.current)return;let f=m.scrollHeight;m.scrollTop!==f&&(m.scrollTop=f);},[c]),react.useEffect(()=>{let m=l.current;!m||!p.current||m.scrollTop!==0&&(m.scrollTop=0);},[e]);let d=react.useCallback(()=>{let m=a.current;if(!m)return;let f=m.scrollHeight-m.scrollTop-m.clientHeight;u.current=f<=24;},[]),y=react.useCallback(()=>{let m=l.current;m&&(p.current=m.scrollTop<=24);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:Jo,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Zo,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:Rr,children:"Price"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Rr,children:"Amount (USD)"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Rr,children:"Total (USD)"})]}),jsxRuntime.jsx("div",{ref:a,onScroll:d,className:"flex-1 min-h-0 overflow-y-auto",style:On,children:c.map((m,f)=>jsxRuntime.jsx(En,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"ask",onPriceClick:o},`ask-${m.price}-${f}`))}),jsxRuntime.jsx("div",{className:"flex-none",children:jsxRuntime.jsx(fa,{spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i})}),jsxRuntime.jsx("div",{ref:l,onScroll:y,className:"flex-1 min-h-0 overflow-y-auto",style:On,children:e.map((m,f)=>jsxRuntime.jsx(En,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"bid",onPriceClick:o},`bid-${m.price}-${f}`))})]})}var Nn=[1,2,5,10,100,1e3],ya={backgroundColor:"#000000",fontSize:11},ga={height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},Ye={flex:"1 1 0%"},ba={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16},ha={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"};function An({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:ba,children:[jsxRuntime.jsx("div",{style:Ye,children:jsxRuntime.jsx("div",{style:{...ce(e),height:11,width:56}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:Ye,children:jsxRuntime.jsx("div",{style:{...ce(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:Ye,children:jsxRuntime.jsx("div",{style:{...ce(e+60),height:11,width:64}})})]})}function xa(){let e=Array.from({length:8},(r,s)=>s),t=Array.from({length:8},(r,s)=>s);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:ya,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:ga,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:Ye,children:"Price"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Ye,children:"Amount (USD)"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Ye,children:"Total (USD)"})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(r=>jsxRuntime.jsx(An,{delay:r*40},`ask-${r}`))}),jsxRuntime.jsx("div",{className:"flex-none flex items-center justify-center",style:ha,children:jsxRuntime.jsx("div",{style:{...ce(0),width:96,height:12}})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:t.map(r=>jsxRuntime.jsx(An,{delay:200+r*40},`bid-${r}`))})]})]})}function Sa(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-neutral-400 text-sm",children:"No order book data available"})})}function va({symbol:e,maxLevel:t=40,precisionOptions:r=Nn,defaultPrecision:s,onPriceClick:n,className:i}){let o=s??r[0]??1,{bids:a,asks:l,spreadPercentage:u,isLoading:p,precision:c,setPrecision:d}=Er({symbol:e,maxLevel:t,precision:o});return p?jsxRuntime.jsx(xa,{}):a.length===0&&l.length===0?jsxRuntime.jsx(Sa,{}):jsxRuntime.jsx("div",{className:i,children:jsxRuntime.jsx(Nr,{bids:a,asks:l,spreadPercentage:u,precision:c,precisionOptions:r,onPrecisionChange:d,onPriceClick:n})})}var Ta=200;function Ir({symbol:e,limit:t=50}){let[r,s]=react.useState([]),{data:n,isPending:i}=rr({symbol:e,limit:t}),{data:o}=Me({type:"trades",symbol:e,enabled:!!n});react.useEffect(()=>{n&&s(n.filter(Un));},[n]);let a=react.useRef([]),l=react.useRef(null),u=react.useRef(t);return u.current=t,react.useEffect(()=>{if(!o)return;let p=Oa(o);p.length!==0&&(a.current.push(...p),l.current===null&&(l.current=setTimeout(()=>{l.current=null;let c=a.current;a.current=[],c.length!==0&&s(d=>{let y=c.filter(m=>!d.some(f=>f.timestamp===m.timestamp&&f.price===m.price&&f.quantity===m.quantity));return y.length===0?d:[...y.reverse(),...d].slice(0,u.current)});},Ta)));},[o]),react.useEffect(()=>()=>{l.current!==null&&(clearTimeout(l.current),l.current=null),a.current=[];},[e]),{trades:r,isLoading:i}}function Oa(e){return (Array.isArray(e)?e:[e]).filter(Un)}function Un(e){return e?typeof e.symbol=="string"&&(e.side==="buy"||e.side==="sell")&&typeof e.price=="number"&&Number.isFinite(e.price)&&typeof e.quantity=="number"&&Number.isFinite(e.quantity)&&typeof e.timestamp=="number"&&Number.isFinite(e.timestamp):false}var Et=22,Mn=28,In=100,Ln=120,Ra={backgroundColor:"#000000",fontSize:11},Aa={height:Mn,minHeight:Mn,padding:"0 16px",color:"#6b6b6b",fontSize:11},Na={flex:"1 1 0%",maxWidth:In},Ua={flex:"1 1 0%",marginLeft:20},Ma={flex:"1 1 0%",maxWidth:Ln,textAlign:"right"},Ia={height:Et,minHeight:Et,maxHeight:Et,padding:"0 16px"},La={flex:"1 1 0%",maxWidth:In},Fa={flex:"1 1 0%",marginLeft:20,color:"#FCFCFC"},qa={flex:"1 1 0%",maxWidth:Ln,textAlign:"right",color:"#777A8C"},Ha={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bullish))",opacity:.15,pointerEvents:"none"},_a={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bearish))",opacity:.15,pointerEvents:"none"};function Ba(e){return Number.isFinite(e)?e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6):"-"}function Qa(e){return Number.isFinite(e)?"$"+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"-"}function Ka(e){let t=Math.max(0,Math.floor(e/1e3));if(t<60)return `${t}s`;let r=Math.floor(t/60);if(r<60)return `${r}m`;let s=Math.floor(r/60);return s<24?`${s}h`:`${Math.floor(s/24)}d`}function za(e){return !Number.isFinite(e)||e<=0?0:Math.max(0,Math.min(100,15*Math.log10(e)-5))}function Wa({index:e,style:t,trades:r,onTradeClick:s}){let n=r[e],i=n?.timestamp??Date.now(),o=hooks.useTickAge(i),a=react.useMemo(()=>!n||!Number.isFinite(n.price)||!Number.isFinite(n.quantity)?0:n.price*n.quantity,[n]),l=react.useMemo(()=>({...n?.side==="buy"?Ha:_a,width:`${za(a)}%`}),[n,a]);if(!n)return null;let u=n.side==="buy";return jsxRuntime.jsx("div",{style:t,children:jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:Ia,onClick:s?()=>s(n):void 0,children:[jsxRuntime.jsx("div",{style:l}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:La,children:jsxRuntime.jsx("span",{className:u?"text-bullish":"text-bearish",children:Ba(n.price)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Fa,children:Qa(a)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:qa,children:Ka(o)})]})})}function qr({trades:e,onTradeClick:t}){let r=react.useRef(null),{height:s=0}=hooks.useResizeObserver({ref:r}),n=react.useMemo(()=>({trades:e,onTradeClick:t}),[e,t]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:Ra,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Aa,children:[jsxRuntime.jsx("div",{style:Na,children:"Price"}),jsxRuntime.jsx("div",{style:Ua,children:"Size (USD)"}),jsxRuntime.jsx("div",{style:Ma,children:"Age"})]}),jsxRuntime.jsx("div",{ref:r,className:"flex-1 min-h-0",children:s>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:s},rowComponent:Wa,rowCount:e.length,rowHeight:Et,rowProps:n,overscanCount:4})})]})}var $a={backgroundColor:"#000000",fontSize:11},Va={height:28,minHeight:28,padding:"0 16px",color:"#6b6b6b",fontSize:11},Fn={flex:"1 1 0%",maxWidth:100},qn={flex:"1 1 0%",marginLeft:20},Hn={flex:"1 1 0%",maxWidth:120,textAlign:"right"},Ga={height:22,minHeight:22,maxHeight:22,padding:"0 16px"};function ja({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:Ga,children:[jsxRuntime.jsx("div",{style:Fn,children:jsxRuntime.jsx("div",{style:{...ce(e),height:11,width:56}})}),jsxRuntime.jsx("div",{style:qn,children:jsxRuntime.jsx("div",{style:{...ce(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:Hn,children:jsxRuntime.jsx("div",{style:{...ce(e+60),height:11,width:28}})})]})}function Ya(){let e=Array.from({length:12},(t,r)=>r);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:$a,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Va,children:[jsxRuntime.jsx("div",{style:Fn,children:"Price"}),jsxRuntime.jsx("div",{style:qn,children:"Size (USD)"}),jsxRuntime.jsx("div",{style:Hn,children:"Age"})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(t=>jsxRuntime.jsx(ja,{delay:t*35},`trade-${t}`))})]})]})}function Xa(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-neutral-400 text-sm",children:"No recent trades"})})}function Ja({symbol:e,limit:t=100,onTradeClick:r,className:s}){let{trades:n,isLoading:i}=Ir({symbol:e,limit:t});return i?jsxRuntime.jsx(Ya,{}):n.length===0?jsxRuntime.jsx(Xa,{}):jsxRuntime.jsx("div",{className:s,children:jsxRuntime.jsx(qr,{trades:n,onTradeClick:r})})}function _n(e,t){return e==="long"&&t==="tp"||e==="short"&&t==="sl"?1:-1}function Bn(e,t,r,s,n){return !Number.isFinite(e)||!t||t<=0||!r||r<=0?void 0:_n(s,n)*(e-t)/t*r*100}function pt(e,t,r,s,n){if(!Number.isFinite(e)||!t||t<=0||!r||r<=0)return;let i=_n(s,n),o=e/r/100;return t*(1+i*o)}function Qn(e){if(!Number.isFinite(e)||e<=0)return e;let t=Math.floor(Math.log10(e)),s=10**Math.max(0,4-t);return Math.round(e*s)/s}function Kn(e){return Number.isFinite(e)?Math.round(e*100)/100:e}var nl=20;function _r({symbol:e,userAddress:t,maxLeverage:r=150,onSuccess:s,onError:n,onUpdateLeverage:i,onPlaceOrder:o}){let[a,l]=react.useState("long"),[u,p]=react.useState("market"),c=reactHookForm.useForm({defaultValues:{amount:void 0,leverage:nl,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:d}=nt({symbol:e}),{data:y}=ar({symbol:e}),m=y?.szDecimals,f=y?.maxLeverage??r,{mutateAsync:x,isPending:h}=ot({onSuccess:()=>{c.reset(),s?.();},onError:C=>{n?.(C);}}),P=reactQuery.useMutation({mutationFn:async C=>{if(!o)throw new Error("onPlaceOrder is not configured; cannot submit via host path");return await o(C)},onSuccess:()=>{c.reset(),s?.();},onError:C=>{n?.(C);}}),S=h||P.isPending,N=c.watch(),{amount:w,leverage:B,price:I}=N,g=d?.price||0,F=react.useMemo(()=>u==="limit"&&I?I:g,[u,I,g]),$=react.useMemo(()=>!w||w<=0||!B?0:w*B,[w,B]),z=react.useMemo(()=>$?$*5e-4:0,[$]),H=react.useMemo(()=>$?$+z:0,[$,z]),D=react.useMemo(()=>{if(!w||!F||!B||B===1||!y?.maxLeverage)return;let C=1/(2*y.maxLeverage),O=(1/B-C)/(a==="long"?1-C:1+C);return a==="long"?F*(1-O):F*(1+O)},[w,F,B,a,y?.maxLeverage]),{data:T}=it({userAddress:t,symbol:e}),ee=T?.totalEquity??0,V=T?.availableBalance??0,Se=react.useMemo(()=>{let C=T?.positions?.[0];if(!C)return;let O=C.symbol.includes("-")?C.symbol.split("-")[0]:C.symbol;return {side:C.side,quantity:C.quantity,quantityRaw:C.quantityRaw,margin:C.margin,base:O}},[T?.positions]),{data:se}=mr({userAddress:t,enabled:!!t}),ve=react.useMemo(()=>se?.openOrders?.length?se.openOrders.some(C=>C.symbol===e):false,[se?.openOrders,e]),{data:ue}=ir({userAddress:t,symbol:e}),oe=ue?.value,Ae=!t||oe!==void 0,E=react.useRef(null);react.useEffect(()=>{E.current!==e&&oe&&oe>0&&(c.setValue("leverage",oe),E.current=e);},[e,oe,c]),react.useEffect(()=>{E.current=null;},[e]),react.useEffect(()=>{if(!(typeof w!="number"||Number.isNaN(w))){if(w<0){c.setValue("amount",void 0,{shouldValidate:false,shouldDirty:false});return}V>0&&w>V&&c.setValue("amount",V,{shouldValidate:false,shouldDirty:true});}},[w,V,c]);let X=react.useCallback(async C=>{if(!t)throw new Error("User address is required");if(!C.amount||C.amount<=0)throw new Error("Amount is required");let O=u==="limit"?C.price:void 0,J=C.takeProfitPrice,Ne=C.stopLossPrice;if(!J&&C.takeProfitPercent&&C.takeProfitPercent>0&&F&&(J=pt(C.takeProfitPercent,F,C.leverage,a,"tp")),!Ne&&C.stopLossPercent&&C.stopLossPercent>0&&F&&(Ne=pt(C.stopLossPercent,F,C.leverage,a,"sl")),o){if(!F||F<=0)throw new Error("Mark price is unavailable; please retry once the market loads");if(m===void 0)throw new Error("Asset metadata is loading; please retry in a moment");let Vt=C.amount*C.leverage/F;await P.mutateAsync({symbol:e,side:a,orderType:u,amount:C.amount,price:O,leverage:C.leverage,takeProfitPrice:J,stopLossPrice:Ne,userAddress:t,size:Vt,refPrice:F,szDecimals:m});return}await x({symbol:e,side:a,orderType:u,amount:C.amount,price:O,leverage:C.leverage,takeProfitPrice:J,stopLossPrice:Ne,userAddress:t});},[e,a,u,F,m,t,o,P,x]);return {form:c,side:a,orderType:u,setSide:l,setOrderType:p,handleSubmit:X,isSubmitting:S,currentPrice:F,marketPrice:g,estimatedFee:z,estimatedTotal:H,liquidationPrice:D,availableMargin:V,accountValue:ee,currentPosition:Se,maxLeverage:f,currentLeverage:oe,isLeverageReady:Ae,hasOpenOrdersForSymbol:ve,szDecimals:m,onUpdateLeverage:i}}var te="#C7FF2E",pl=te,Yn="#F76816",$n=Yn;function Br(e,t){if(!/^#[0-9a-fA-F]{6}$/.test(e))return e;let r=Math.max(0,Math.min(255,Math.round(t)));return `${e}${r.toString(16).padStart(2,"0").toUpperCase()}`}var cl="https://app.hyperliquid.xyz/coins",dl=10;function Wr(e){let t=e.replace(/[^\d.]/g,""),r=t.split(".");return r.length>1?`${r[0]}.${r.slice(1).join("")}`:t}var ml={...xr,display:"inline-block",width:28,height:14,borderRadius:4};function Vn(e,t=2){return e.toFixed(t)}function Qr(e){if(!Number.isFinite(e)||e<=0)return "--";let t=Math.floor(Math.log10(e)),r=Math.max(0,4-t);return `$${new Intl.NumberFormat("en-US",{minimumFractionDigits:r,maximumFractionDigits:r}).format(e)}`}var ke=1;function fl(e){let t=Math.max(ke,Math.floor(e)),r=n=>{let i=Math.round(n);return i<=10?Math.max(ke,i):Math.round(i/5)*5},s=new Set([ke,t]);for(let n of [.25,.5,.75]){let i=r(t*n);i>ke&&i<t&&s.add(i);}return Array.from(s).sort((n,i)=>n-i).map(n=>({value:n,label:`${n}x`}))}function yl({isOpen:e,initialLeverage:t,maxLeverage:r,coinName:s,hasOpenPosition:n,hasOpenOrders:i,onConfirm:o,onUpdate:a,onClose:l}){let u=Math.max(ke,Math.floor(r)),[p,c]=react.useState(Math.max(ke,Math.min(t,u))),[d,y]=react.useState(false);react.useEffect(()=>{e&&(c(Math.max(ke,Math.min(t,u))),y(false));},[e,t,u]);let m=react.useMemo(()=>fl(u),[u]),f=react.useCallback(async()=>{if(!d){if(!a){o(p),l();return}y(true);try{await a(p),o(p),l();}catch{y(false);}}},[d,a,p,o,l]),x=walletConnector.useAuthCallback(f);return jsxRuntime.jsx(ui.StyledModal,{isOpen:e,onOpenChange:h=>{d||h||l();},size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:"!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]",body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-base font-semibold text-white m-0",children:"Adjust Leverage"}),jsxRuntime.jsx("button",{type:"button",onClick:l,disabled:d,"aria-label":"Close",className:"p-1 rounded-[10px] hover:bg-[rgba(39,39,42,0.5)] text-zinc-400 hover:text-white transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-2 flex flex-col gap-4",children:[jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[n?jsxRuntime.jsxs("p",{className:"text-[13px] leading-[18px] m-0",style:{color:$n},children:["You may not update leverage for ",s," while a position is open."]}):jsxRuntime.jsx("p",{className:"text-[13px] text-zinc-400 leading-[18px] m-0",children:"Adjust your leverage to manage your exposure. Higher leverage increases both potential profits and risks."}),i&&jsxRuntime.jsxs("p",{className:"text-[13px] leading-[18px] m-0",style:{color:$n},children:["Open order(s) for ",s," will be affected by leverage change."]})]}),jsxRuntime.jsxs("div",{className:"perp-leverage-slider",style:{padding:"8px 6px 4px"},children:[jsxRuntime.jsx("style",{children:`
|
|
3
|
+
`;function De(){return jsxRuntime.jsx("style",{children:qo})}var xr={backgroundColor:"rgba(255, 255, 255, 0.16)",backgroundImage:"linear-gradient(90deg, rgba(255,255,255,0) 25%, rgba(255,255,255,0.18) 50%, rgba(255,255,255,0) 75%)",backgroundSize:"200% 100%",animation:`${dn} 1.8s ease-in-out infinite`,borderRadius:6};function ce(e){return {...xr,animationDelay:`${e}ms`}}function vr(){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:24},children:[jsxRuntime.jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsxRuntime.jsx("div",{style:Le(0,84,23)}),jsxRuntime.jsx("div",{style:Le(60,52,16)})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsx(Sr,{labelWidth:72,valueWidth:64,delay:120}),jsxRuntime.jsx(Sr,{labelWidth:72,valueWidth:48,delay:180}),jsxRuntime.jsx(Sr,{labelWidth:84,valueWidth:56,delay:240}),jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:Le(300,132,16)}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx("div",{style:Le(330,64,17)}),jsxRuntime.jsx("div",{style:Le(360,64,17)})]})]})]})]})]})}function Sr({labelWidth:e,valueWidth:t,delay:r}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:Le(r,e,16)}),jsxRuntime.jsx("div",{style:Le(r+30,t,17)})]})}function Le(e,t,r){return {...ce(e),width:t,height:r}}function Cr(e){let[t,r]=react.useState(),[s,n]=react.useState(0),{data:i,isPending:o}=it({symbol:e}),{data:a,isConnected:l}=Ue({type:"ticker",symbol:e,enabled:!!i});return react.useEffect(()=>{i&&r(i);},[i]),react.useEffect(()=>{if(!a)return;let u=Bo(a,e);u&&r(p=>Qo(p??i??void 0,u,e));},[a,i,e]),react.useEffect(()=>{let u=()=>{let c=Date.now(),d=3600*1e3,y=c%d,m=d-y;return Math.floor(m/1e3)};n(u());let p=setInterval(()=>{n(u());},1e3);return ()=>clearInterval(p)},[]),{marketData:t,isLoading:o,fundingCountdown:s}}function Bo(e,t){if(Array.isArray(e)){let r=e.find(s=>!s||typeof s!="object"?false:s.symbol===t);return r&&typeof r=="object"?r:null}return e&&typeof e=="object"?e:null}function Xe(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Qo(e,t,r){return {symbol:t.symbol??e?.symbol??r,price:Xe(t.price,e?.price??0),change24h:Xe(t.change24h,e?.change24h??0),volume24h:Xe(t.volume24h,e?.volume24h??0),fundingRate:Xe(t.fundingRate,e?.fundingRate??0),openInterest:Xe(t.openInterest,e?.openInterest??0),markPrice:Xe(t.markPrice,e?.markPrice??0),indexPrice:typeof t.indexPrice=="number"&&Number.isFinite(t.indexPrice)?t.indexPrice:e?.indexPrice,high24h:typeof t.high24h=="number"&&Number.isFinite(t.high24h)?t.high24h:e?.high24h,low24h:typeof t.low24h=="number"&&Number.isFinite(t.low24h)?t.low24h:e?.low24h}}function Ko(e){let t=Math.floor(e/3600),r=Math.floor(e%3600/60),s=e%60;return `${String(t).padStart(2,"0")}:${String(r).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function fn(e,t=2){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function yn(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function Tr({marketData:e,fundingCountdown:t}){let{symbol:r,price:s,change24h:n,indexPrice:i,volume24h:o,openInterest:a,fundingRate:l}=e,u=typeof n=="number"&&Number.isFinite(n)?n:0,p=typeof l=="number"&&Number.isFinite(l)?l:0,c=u>=0,d=u.toFixed(2);return jsxRuntime.jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:24},children:[jsxRuntime.jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsxRuntime.jsx("span",{style:{fontSize:18,fontWeight:500,lineHeight:"23px",letterSpacing:"-0.36px",color:"#ffffff"},children:yn(s)}),jsxRuntime.jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:c?"#C7FF2E":"#F76816"},children:[c?"+":"",d,"%"]})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Oracle Price"}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:i?yn(i):"-"})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"24h Volume"}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:fn(o,0)})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Open Interest"}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:fn(a*(e.markPrice||s))})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Funding / Countdown"}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsxs("span",{style:{fontSize:13,lineHeight:"17px",color:p>=0?"#C7FF2E":"#F76816"},children:[(p*100).toFixed(5),"%"]}),jsxRuntime.jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"#ffffff"},children:Ko(t)})]})]})]})]})}function zo({symbol:e}){let{marketData:t,isLoading:r,fundingCountdown:s}=Cr(e);return r?jsxRuntime.jsx(vr,{}):t?jsxRuntime.jsx(Tr,{marketData:t,fundingCountdown:s}):jsxRuntime.jsx(hr,{})}function Dr({onSelectCoin:e}={}){let[t,r]=react.useState(""),[s,n]=react.useState([]),{data:i,isPending:o}=Zt(),{data:a,isPending:l}=er({symbols:i},{enabled:!!i&&i.length>0});react.useEffect(()=>{a&&n(a);},[a]);let u=react.useMemo(()=>{if(!t.trim())return s;let c=t.toLowerCase().trim();return s.filter(d=>d.symbol.toLowerCase().includes(c))},[s,t]);return {coins:s,isLoading:o||l,searchQuery:t,setSearchQuery:r,filteredCoins:u,handleSelectCoin:c=>{e?.(c);}}}function bn(e,t=2){return e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function Go(e){return e>=1e3?e.toFixed(2):e>=1?e.toFixed(4):e.toFixed(6)}function wr({coins:e,searchQuery:t,onSearchChange:r,onSelectCoin:s,isLoading:n}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{backgroundColor:"#1A1A1A",flex:"1 1 0",minHeight:0},children:[jsxRuntime.jsx("div",{style:{padding:"16px 16px 12px"},children:jsxRuntime.jsxs("div",{className:"flex items-center",style:{height:32,border:"1px solid #2a2a2a",borderRadius:4,padding:"0 6px 0 12px",gap:8},children:[jsxRuntime.jsx(ui.SearchIcon,{className:"flex-shrink-0",style:{width:14,height:14,color:"#6b6b6b"}}),jsxRuntime.jsx("input",{type:"text",placeholder:"Search coins...",value:t,onChange:i=>r(i.target.value),className:"flex-1 bg-transparent outline-none",style:{fontSize:12,color:"#ffffff",border:"none"}})]})}),jsxRuntime.jsxs("div",{className:"flex-1 overflow-auto",children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{height:28,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)",position:"sticky",top:0,backgroundColor:"#1A1A1A",zIndex:1},children:[jsxRuntime.jsx("span",{style:{flex:"0 0 140px",fontSize:12,color:"#6b6b6b"},children:"Token"}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Last Price"}),jsxRuntime.jsx("span",{style:{flex:"0 0 120px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Change"}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"8h Funding"}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Volume"}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Open Interest"})]}),n?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Loading..."})}):e.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:t?"No coins found":"No coins available"})}):e.map(i=>{let o=i.change24h>=0,a=i.change24h.toFixed(2),l=(i.fundingRate*100).toFixed(4),u=i.fundingRate>=0,p=i.symbol.split("-")[0];return jsxRuntime.jsxs("div",{className:"flex items-center cursor-pointer transition-colors",style:{height:36,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)"},onClick:()=>s(i.symbol),onMouseEnter:c=>{c.currentTarget.style.backgroundColor="rgba(255,255,255,0.03)";},onMouseLeave:c=>{c.currentTarget.style.backgroundColor="transparent";},children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{flex:"0 0 140px",gap:8},children:[jsxRuntime.jsx("img",{src:`https://app.hyperliquid.xyz/coins/${p}.svg`,alt:p,className:"rounded-full",style:{width:20,height:20},onError:c=>{let d=c.target;d.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"#ffffff"},children:p})]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#ffffff",textAlign:"right"},children:Go(i.price)}),jsxRuntime.jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:o?"#C7FF2E":"#F76816",textAlign:"right"},children:[o?"+":"",a,"%"]}),jsxRuntime.jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:u?"#C7FF2E":"#F76816",textAlign:"right"},children:[l,"%"]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:bn(i.volume24h)}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:bn(i.openInterest*i.price)})]},i.symbol)})]})]})}function jo({onSelectCoin:e,className:t}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:i,handleSelectCoin:o}=Dr({onSelectCoin:e});return jsxRuntime.jsx("div",{className:t,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsxRuntime.jsx(wr,{coins:r,searchQuery:n,onSearchChange:i,onSelectCoin:o,isLoading:s})})}function Cn(e,t){if(!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0)return {};let r=Math.floor(Math.log10(e)),s=[{nSigFigs:2,step:Math.pow(10,r-1)},{nSigFigs:3,step:Math.pow(10,r-2)},{nSigFigs:4,step:Math.pow(10,r-3)},{nSigFigs:5,mantissa:5,step:5*Math.pow(10,r-4)},{nSigFigs:5,mantissa:2,step:2*Math.pow(10,r-4)},{nSigFigs:5,step:Math.pow(10,r-4)}],n=1e-9,i=null;for(let o of s)o.step<=t+n&&(!i||o.step>i.step)&&(i=o);return i?i.mantissa&&i.mantissa!==1?{nSigFigs:i.nSigFigs,mantissa:i.mantissa}:{nSigFigs:i.nSigFigs}:{nSigFigs:5}}function vn(e,t,r){if(t<=0)return e;let s=new Map,n=r==="ask"?Math.ceil:Math.floor;return e.forEach(i=>{let o=n(i.price/t)*t,a=s.get(o);a?(a.quantity+=i.quantity,i.count&&(a.count=(a.count||0)+i.count)):s.set(o,{price:o,quantity:i.quantity,count:i.count});}),Array.from(s.values())}function Pn(e){let t=0,r=e.map(n=>{let i=n.quantity*n.price;return t+=i,{...n,quantity:i,total:t,percentage:0}}),s=t;return r.map(n=>({...n,percentage:s>0?n.total/s*100:0}))}function Er({symbol:e,maxLevel:t=20,precision:r=1}){let[s,n]=react.useState(null),[i,o]=react.useState(r);react.useEffect(()=>{o(r);},[r]);let{data:a,isPending:l}=tr({symbol:e,maxLevel:t}),u=react.useMemo(()=>{let y=s?.bids[0]?.price??a?.bids[0]?.price,m=s?.asks[0]?.price??a?.asks[0]?.price,f=y&&m?(y+m)/2:m??y??0;return f>0?Math.floor(Math.log10(f)):null},[s,a]),p=react.useMemo(()=>{if(u===null)return;let y=Math.pow(10,u);return Cn(y,i)},[i,u]),{data:c}=Ue({type:"orderBook",symbol:e,enabled:!!a,aggregation:p,throttleMs:100});return react.useEffect(()=>{c?n(c):a&&n(a);},[c,a]),{...react.useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let y=vn(s.bids,i,"bid"),m=vn(s.asks,i,"ask"),f=y.sort((M,b)=>b.price-M.price).slice(0,t),T=m.sort((M,b)=>M.price-b.price).slice(0,t),h=Pn(f),C=Pn(T),v=h[0]?.price||0,D=(C[0]?.price||0)-v,F=v>0?D/v*100:0;return {bids:h,asks:C,spread:D,spreadPercentage:F}},[s,i,t]),isLoading:l,precision:i,setPrecision:o}}var On={scrollbarWidth:"thin",scrollbarColor:"rgba(63,63,70,0.6) transparent"},Jo={backgroundColor:"#000000",fontSize:11},Zo={height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},Rr={flex:"1 1 0%"},ea={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},ta={height:20,background:"linear-gradient(to right, rgba(247,104,22,0), #F76816)",opacity:.15},ra={height:20,background:"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15},sa={color:"#F76816",fontWeight:400},na={color:"#C7FF2E",fontWeight:400},Dn={flex:"1 1 0%",color:"#ffffff"},ia={flex:"1 1 0%"},oa={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},aa={gap:12,fontSize:12,color:"#ffffff"},la={color:"#ffffff"},ua={color:"#ffffff",fontWeight:500},pa={color:"#ffffff",fontWeight:400,background:"none",border:"none",padding:0,gap:4},ca={top:"calc(100% + 4px)",minWidth:64,backgroundColor:"#0a0a0a",border:"1px solid rgba(63,63,70,0.6)",borderRadius:6,padding:4,boxShadow:"0 4px 16px rgba(0,0,0,0.5)"},Rn={padding:"4px 10px",fontSize:12,color:"#ffffff",background:"transparent",border:"none",borderRadius:4,textAlign:"left"},da={...Rn,color:"#C7FF2E"};function ma(e){return e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function wn(e){return Math.round(e).toLocaleString("en-US")}function kn(e){return e>=1?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e.toString()}var En=react.memo(function({price:t,quantity:r,total:s,percentage:n,side:i,onPriceClick:o}){let a=i==="ask",l=react.useMemo(()=>a?{...ta,width:`${n}%`}:{...ra,width:`${n}%`},[a,n]),u=react.useMemo(()=>o?()=>o(t):void 0,[o,t]);return jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:ea,onClick:u,children:[jsxRuntime.jsx("div",{className:"absolute left-0 top-0",style:l}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:ia,children:jsxRuntime.jsx("span",{style:a?sa:na,children:ma(t)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Dn,children:wn(r)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Dn,children:wn(s)})]})},(e,t)=>e.price===t.price&&e.quantity===t.quantity&&e.total===t.total&&e.percentage===t.percentage&&e.side===t.side&&e.onPriceClick===t.onPriceClick);function fa({spreadPercentage:e,precision:t,precisionOptions:r,onPrecisionChange:s}){let[n,i]=react.useState(false),o=react.useRef(null);react.useEffect(()=>{if(!n)return;let l=u=>{o.current?.contains(u.target)||i(false);};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[n]);let a=react.useMemo(()=>({color:"#6b6b6b",transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s"}),[n]);return jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:oa,children:jsxRuntime.jsxs("div",{className:"flex items-center",style:aa,children:[jsxRuntime.jsx("span",{style:la,children:"Spread:"}),jsxRuntime.jsxs("div",{ref:o,className:"relative",children:[jsxRuntime.jsxs("button",{type:"button",className:"flex items-center cursor-pointer hover:text-white/80 transition-colors",style:pa,onClick:()=>i(l=>!l),"aria-haspopup":"listbox","aria-expanded":n,children:[jsxRuntime.jsx("span",{children:kn(t)}),jsxRuntime.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",style:a,children:jsxRuntime.jsx("path",{d:"M1 2.5L4 5.5L7 2.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]}),n&&jsxRuntime.jsx("div",{role:"listbox",className:"absolute left-1/2 -translate-x-1/2 z-20 flex flex-col",style:ca,children:r.map(l=>{let u=l===t;return jsxRuntime.jsx("button",{type:"button",role:"option","aria-selected":u,className:"cursor-pointer transition-colors",style:u?da:Rn,onMouseEnter:p=>{p.currentTarget.style.backgroundColor="rgba(255,255,255,0.06)";},onMouseLeave:p=>{p.currentTarget.style.backgroundColor="transparent";},onClick:()=>{s(l),i(false);},children:kn(l)},l)})})]}),jsxRuntime.jsxs("span",{style:ua,children:[e.toFixed(3),"%"]})]})})}function Nr({bids:e,asks:t,spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i,onPriceClick:o}){let a=react.useRef(null),l=react.useRef(null),u=react.useRef(true),p=react.useRef(true),c=react.useMemo(()=>[...t].reverse(),[t]);react.useEffect(()=>{let m=a.current;if(!m||!u.current)return;let f=m.scrollHeight;m.scrollTop!==f&&(m.scrollTop=f);},[c]),react.useEffect(()=>{let m=l.current;!m||!p.current||m.scrollTop!==0&&(m.scrollTop=0);},[e]);let d=react.useCallback(()=>{let m=a.current;if(!m)return;let f=m.scrollHeight-m.scrollTop-m.clientHeight;u.current=f<=24;},[]),y=react.useCallback(()=>{let m=l.current;m&&(p.current=m.scrollTop<=24);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:Jo,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Zo,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:Rr,children:"Price"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Rr,children:"Amount (USD)"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Rr,children:"Total (USD)"})]}),jsxRuntime.jsx("div",{ref:a,onScroll:d,className:"flex-1 min-h-0 overflow-y-auto",style:On,children:c.map((m,f)=>jsxRuntime.jsx(En,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"ask",onPriceClick:o},`ask-${m.price}-${f}`))}),jsxRuntime.jsx("div",{className:"flex-none",children:jsxRuntime.jsx(fa,{spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i})}),jsxRuntime.jsx("div",{ref:l,onScroll:y,className:"flex-1 min-h-0 overflow-y-auto",style:On,children:e.map((m,f)=>jsxRuntime.jsx(En,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"bid",onPriceClick:o},`bid-${m.price}-${f}`))})]})}var Nn=[1,2,5,10,100,1e3],ya={backgroundColor:"#000000",fontSize:11},ga={height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},Je={flex:"1 1 0%"},ba={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16},ha={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"};function An({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:ba,children:[jsxRuntime.jsx("div",{style:Je,children:jsxRuntime.jsx("div",{style:{...ce(e),height:11,width:56}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:Je,children:jsxRuntime.jsx("div",{style:{...ce(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:Je,children:jsxRuntime.jsx("div",{style:{...ce(e+60),height:11,width:64}})})]})}function xa(){let e=Array.from({length:8},(r,s)=>s),t=Array.from({length:8},(r,s)=>s);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:ya,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:ga,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:Je,children:"Price"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Je,children:"Amount (USD)"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Je,children:"Total (USD)"})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(r=>jsxRuntime.jsx(An,{delay:r*40},`ask-${r}`))}),jsxRuntime.jsx("div",{className:"flex-none flex items-center justify-center",style:ha,children:jsxRuntime.jsx("div",{style:{...ce(0),width:96,height:12}})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:t.map(r=>jsxRuntime.jsx(An,{delay:200+r*40},`bid-${r}`))})]})]})}function Sa(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-neutral-400 text-sm",children:"No order book data available"})})}function va({symbol:e,maxLevel:t=40,precisionOptions:r=Nn,defaultPrecision:s,onPriceClick:n,className:i}){let o=s??r[0]??1,{bids:a,asks:l,spreadPercentage:u,isLoading:p,precision:c,setPrecision:d}=Er({symbol:e,maxLevel:t,precision:o});return p?jsxRuntime.jsx(xa,{}):a.length===0&&l.length===0?jsxRuntime.jsx(Sa,{}):jsxRuntime.jsx("div",{className:i,children:jsxRuntime.jsx(Nr,{bids:a,asks:l,spreadPercentage:u,precision:c,precisionOptions:r,onPrecisionChange:d,onPriceClick:n})})}var Ta=200;function Ir({symbol:e,limit:t=50}){let[r,s]=react.useState([]),{data:n,isPending:i}=rr({symbol:e,limit:t}),{data:o}=Ue({type:"trades",symbol:e,enabled:!!n});react.useEffect(()=>{n&&s(n.filter(Un));},[n]);let a=react.useRef([]),l=react.useRef(null),u=react.useRef(t);return u.current=t,react.useEffect(()=>{if(!o)return;let p=Oa(o);p.length!==0&&(a.current.push(...p),l.current===null&&(l.current=setTimeout(()=>{l.current=null;let c=a.current;a.current=[],c.length!==0&&s(d=>{let y=c.filter(m=>!d.some(f=>f.timestamp===m.timestamp&&f.price===m.price&&f.quantity===m.quantity));return y.length===0?d:[...y.reverse(),...d].slice(0,u.current)});},Ta)));},[o]),react.useEffect(()=>()=>{l.current!==null&&(clearTimeout(l.current),l.current=null),a.current=[];},[e]),{trades:r,isLoading:i}}function Oa(e){return (Array.isArray(e)?e:[e]).filter(Un)}function Un(e){return e?typeof e.symbol=="string"&&(e.side==="buy"||e.side==="sell")&&typeof e.price=="number"&&Number.isFinite(e.price)&&typeof e.quantity=="number"&&Number.isFinite(e.quantity)&&typeof e.timestamp=="number"&&Number.isFinite(e.timestamp):false}var Rt=22,Mn=28,In=100,Ln=120,Ra={backgroundColor:"#000000",fontSize:11},Aa={height:Mn,minHeight:Mn,padding:"0 16px",color:"#6b6b6b",fontSize:11},Na={flex:"1 1 0%",maxWidth:In},Ua={flex:"1 1 0%",marginLeft:20},Ma={flex:"1 1 0%",maxWidth:Ln,textAlign:"right"},Ia={height:Rt,minHeight:Rt,maxHeight:Rt,padding:"0 16px"},La={flex:"1 1 0%",maxWidth:In},Fa={flex:"1 1 0%",marginLeft:20,color:"#FCFCFC"},qa={flex:"1 1 0%",maxWidth:Ln,textAlign:"right",color:"#777A8C"},Ha={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bullish))",opacity:.15,pointerEvents:"none"},_a={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bearish))",opacity:.15,pointerEvents:"none"};function Ba(e){return Number.isFinite(e)?e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6):"-"}function Qa(e){return Number.isFinite(e)?"$"+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"-"}function Ka(e){let t=Math.max(0,Math.floor(e/1e3));if(t<60)return `${t}s`;let r=Math.floor(t/60);if(r<60)return `${r}m`;let s=Math.floor(r/60);return s<24?`${s}h`:`${Math.floor(s/24)}d`}function za(e){return !Number.isFinite(e)||e<=0?0:Math.max(0,Math.min(100,15*Math.log10(e)-5))}function Wa({index:e,style:t,trades:r,onTradeClick:s}){let n=r[e],i=n?.timestamp??Date.now(),o=hooks.useTickAge(i),a=react.useMemo(()=>!n||!Number.isFinite(n.price)||!Number.isFinite(n.quantity)?0:n.price*n.quantity,[n]),l=react.useMemo(()=>({...n?.side==="buy"?Ha:_a,width:`${za(a)}%`}),[n,a]);if(!n)return null;let u=n.side==="buy";return jsxRuntime.jsx("div",{style:t,children:jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:Ia,onClick:s?()=>s(n):void 0,children:[jsxRuntime.jsx("div",{style:l}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:La,children:jsxRuntime.jsx("span",{className:u?"text-bullish":"text-bearish",children:Ba(n.price)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Fa,children:Qa(a)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:qa,children:Ka(o)})]})})}function qr({trades:e,onTradeClick:t}){let r=react.useRef(null),{height:s=0}=hooks.useResizeObserver({ref:r}),n=react.useMemo(()=>({trades:e,onTradeClick:t}),[e,t]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:Ra,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Aa,children:[jsxRuntime.jsx("div",{style:Na,children:"Price"}),jsxRuntime.jsx("div",{style:Ua,children:"Size (USD)"}),jsxRuntime.jsx("div",{style:Ma,children:"Age"})]}),jsxRuntime.jsx("div",{ref:r,className:"flex-1 min-h-0",children:s>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:s},rowComponent:Wa,rowCount:e.length,rowHeight:Rt,rowProps:n,overscanCount:4})})]})}var $a={backgroundColor:"#000000",fontSize:11},Va={height:28,minHeight:28,padding:"0 16px",color:"#6b6b6b",fontSize:11},Fn={flex:"1 1 0%",maxWidth:100},qn={flex:"1 1 0%",marginLeft:20},Hn={flex:"1 1 0%",maxWidth:120,textAlign:"right"},Ga={height:22,minHeight:22,maxHeight:22,padding:"0 16px"};function ja({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:Ga,children:[jsxRuntime.jsx("div",{style:Fn,children:jsxRuntime.jsx("div",{style:{...ce(e),height:11,width:56}})}),jsxRuntime.jsx("div",{style:qn,children:jsxRuntime.jsx("div",{style:{...ce(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:Hn,children:jsxRuntime.jsx("div",{style:{...ce(e+60),height:11,width:28}})})]})}function Ya(){let e=Array.from({length:12},(t,r)=>r);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:$a,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Va,children:[jsxRuntime.jsx("div",{style:Fn,children:"Price"}),jsxRuntime.jsx("div",{style:qn,children:"Size (USD)"}),jsxRuntime.jsx("div",{style:Hn,children:"Age"})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(t=>jsxRuntime.jsx(ja,{delay:t*35},`trade-${t}`))})]})]})}function Xa(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-neutral-400 text-sm",children:"No recent trades"})})}function Ja({symbol:e,limit:t=100,onTradeClick:r,className:s}){let{trades:n,isLoading:i}=Ir({symbol:e,limit:t});return i?jsxRuntime.jsx(Ya,{}):n.length===0?jsxRuntime.jsx(Xa,{}):jsxRuntime.jsx("div",{className:s,children:jsxRuntime.jsx(qr,{trades:n,onTradeClick:r})})}function _n(e,t){return e==="long"&&t==="tp"||e==="short"&&t==="sl"?1:-1}function Bn(e,t,r,s,n){return !Number.isFinite(e)||!t||t<=0||!r||r<=0?void 0:_n(s,n)*(e-t)/t*r*100}function ct(e,t,r,s,n){if(!Number.isFinite(e)||!t||t<=0||!r||r<=0)return;let i=_n(s,n),o=e/r/100;return t*(1+i*o)}function Qn(e){if(!Number.isFinite(e)||e<=0)return e;let t=Math.floor(Math.log10(e)),s=10**Math.max(0,4-t);return Math.round(e*s)/s}function Kn(e){return Number.isFinite(e)?Math.round(e*100)/100:e}var nl=20;function _r({symbol:e,userAddress:t,maxLeverage:r=150,onSuccess:s,onError:n,onUpdateLeverage:i,onPlaceOrder:o}){let[a,l]=react.useState("long"),[u,p]=react.useState("market"),c=reactHookForm.useForm({defaultValues:{amount:void 0,leverage:nl,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:d}=it({symbol:e}),{data:y}=at({symbol:e}),m=y?.szDecimals,f=y?.maxLeverage??r,{mutateAsync:T,isPending:h}=ar({onSuccess:()=>{c.reset(),s?.();},onError:g=>{n?.(g);}}),C=reactQuery.useMutation({mutationFn:async g=>{if(!o)throw new Error("onPlaceOrder is not configured; cannot submit via host path");return await o(g)},onSuccess:()=>{c.reset(),s?.();},onError:g=>{n?.(g);}}),v=h||C.isPending,R=c.watch(),{amount:D,leverage:F,price:M}=R,b=d?.price||0,L=react.useMemo(()=>u==="limit"&&M?M:b,[u,M,b]),V=react.useMemo(()=>!D||D<=0||!F?0:D*F,[D,F]),K=react.useMemo(()=>V?V*5e-4:0,[V]),z=react.useMemo(()=>V?V+K:0,[V,K]),A=react.useMemo(()=>{if(!D||!L||!F||F===1||!y?.maxLeverage)return;let g=1/(2*y.maxLeverage),S=(1/F-g)/(a==="long"?1-g:1+g);return a==="long"?L*(1-S):L*(1+S)},[D,L,F,a,y?.maxLeverage]),{data:O}=ot({userAddress:t,symbol:e}),W=O?.totalEquity??0,J=O?.availableBalance??0,Se=react.useMemo(()=>{let g=O?.positions?.[0];if(!g)return;let S=g.symbol.includes("-")?g.symbol.split("-")[0]:g.symbol;return {side:g.side,quantity:g.quantity,quantityRaw:g.quantityRaw,margin:g.margin,base:S}},[O?.positions]),{data:G}=mr({userAddress:t,enabled:!!t}),ve=react.useMemo(()=>G?.openOrders?.length?G.openOrders.some(g=>g.symbol===e):false,[G?.openOrders,e]),{data:le}=ir({userAddress:t,symbol:e}),ie=le?.value,ze=!t||ie!==void 0,ee=react.useRef(null);react.useEffect(()=>{ee.current!==e&&ie&&ie>0&&(c.setValue("leverage",ie),ee.current=e);},[e,ie,c]),react.useEffect(()=>{ee.current=null;},[e]),react.useEffect(()=>{if(!(typeof D!="number"||Number.isNaN(D))){if(D<0){c.setValue("amount",void 0,{shouldValidate:false,shouldDirty:false});return}J>0&&D>J&&c.setValue("amount",J,{shouldValidate:false,shouldDirty:true});}},[D,J,c]);let We=react.useCallback(async g=>{if(!t)throw new Error("User address is required");if(!g.amount||g.amount<=0)throw new Error("Amount is required");let S=u==="limit"?g.price:void 0,q=g.takeProfitPrice,ue=g.stopLossPrice;if(!q&&g.takeProfitPercent&&g.takeProfitPercent>0&&L&&(q=ct(g.takeProfitPercent,L,g.leverage,a,"tp")),!ue&&g.stopLossPercent&&g.stopLossPercent>0&&L&&(ue=ct(g.stopLossPercent,L,g.leverage,a,"sl")),o){if(!L||L<=0)throw new Error("Mark price is unavailable; please retry once the market loads");if(m===void 0)throw new Error("Asset metadata is loading; please retry in a moment");let $e=g.amount*g.leverage/L;await C.mutateAsync({symbol:e,side:a,orderType:u,amount:g.amount,price:S,leverage:g.leverage,takeProfitPrice:q,stopLossPrice:ue,userAddress:t,size:$e,refPrice:L,szDecimals:m});return}await T({symbol:e,side:a,orderType:u,amount:g.amount,price:S,leverage:g.leverage,takeProfitPrice:q,stopLossPrice:ue,userAddress:t});},[e,a,u,L,m,t,o,C,T]);return {form:c,side:a,orderType:u,setSide:l,setOrderType:p,handleSubmit:We,isSubmitting:v,currentPrice:L,marketPrice:b,estimatedFee:K,estimatedTotal:z,liquidationPrice:A,availableMargin:J,accountValue:W,currentPosition:Se,maxLeverage:f,currentLeverage:ie,isLeverageReady:ze,hasOpenOrdersForSymbol:ve,szDecimals:m,onUpdateLeverage:i}}var te="#C7FF2E",pl=te,Yn="#F76816",$n=Yn;function Br(e,t){if(!/^#[0-9a-fA-F]{6}$/.test(e))return e;let r=Math.max(0,Math.min(255,Math.round(t)));return `${e}${r.toString(16).padStart(2,"0").toUpperCase()}`}var cl="https://app.hyperliquid.xyz/coins",dl=10;function Wr(e){let t=e.replace(/[^\d.]/g,""),r=t.split(".");return r.length>1?`${r[0]}.${r.slice(1).join("")}`:t}var ml={...xr,display:"inline-block",width:28,height:14,borderRadius:4};function Vn(e,t=2){return e.toFixed(t)}function Qr(e){if(!Number.isFinite(e)||e<=0)return "--";let t=Math.floor(Math.log10(e)),r=Math.max(0,4-t);return `$${new Intl.NumberFormat("en-US",{minimumFractionDigits:r,maximumFractionDigits:r}).format(e)}`}var ke=1;function fl(e){let t=Math.max(ke,Math.floor(e)),r=n=>{let i=Math.round(n);return i<=10?Math.max(ke,i):Math.round(i/5)*5},s=new Set([ke,t]);for(let n of [.25,.5,.75]){let i=r(t*n);i>ke&&i<t&&s.add(i);}return Array.from(s).sort((n,i)=>n-i).map(n=>({value:n,label:`${n}x`}))}function yl({isOpen:e,initialLeverage:t,maxLeverage:r,coinName:s,hasOpenPosition:n,hasOpenOrders:i,onConfirm:o,onUpdate:a,onClose:l}){let u=Math.max(ke,Math.floor(r)),[p,c]=react.useState(Math.max(ke,Math.min(t,u))),[d,y]=react.useState(false);react.useEffect(()=>{e&&(c(Math.max(ke,Math.min(t,u))),y(false));},[e,t,u]);let m=react.useMemo(()=>fl(u),[u]),f=react.useCallback(async()=>{if(!d){if(!a){o(p),l();return}y(true);try{await a(p),o(p),l();}catch{y(false);}}},[d,a,p,o,l]),T=walletConnector.useAuthCallback(f);return jsxRuntime.jsx(ui.StyledModal,{isOpen:e,onOpenChange:h=>{d||h||l();},size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:"!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]",body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-base font-semibold text-white m-0",children:"Adjust Leverage"}),jsxRuntime.jsx("button",{type:"button",onClick:l,disabled:d,"aria-label":"Close",className:"p-1 rounded-[10px] hover:bg-[rgba(39,39,42,0.5)] text-zinc-400 hover:text-white transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-2 flex flex-col gap-4",children:[jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[n?jsxRuntime.jsxs("p",{className:"text-[13px] leading-[18px] m-0",style:{color:$n},children:["You may not update leverage for ",s," while a position is open."]}):jsxRuntime.jsx("p",{className:"text-[13px] text-zinc-400 leading-[18px] m-0",children:"Adjust your leverage to manage your exposure. Higher leverage increases both potential profits and risks."}),i&&jsxRuntime.jsxs("p",{className:"text-[13px] leading-[18px] m-0",style:{color:$n},children:["Open order(s) for ",s," will be affected by leverage change."]})]}),jsxRuntime.jsxs("div",{className:"perp-leverage-slider",style:{padding:"8px 6px 4px"},children:[jsxRuntime.jsx("style",{children:`
|
|
4
4
|
.perp-leverage-slider [data-slot="track"] { background-color: rgba(255,255,255,0.08) !important; }
|
|
5
5
|
.perp-leverage-slider [data-slot="filler"] { background-color: ${te} !important; }
|
|
6
6
|
.perp-leverage-slider [data-slot="thumb"] { background-color: ${te} !important; }
|
|
7
7
|
.perp-leverage-slider [data-slot="thumb"]::after { background-color: ${te} !important; }
|
|
8
8
|
.perp-leverage-slider [data-slot="mark"] { color: #6b6b6b !important; }
|
|
9
|
-
`}),jsxRuntime.jsx(ui.Slider,{value:[p],onChange:h=>c(Array.isArray(h)?h[0]:h),isDisabled:d||n,minValue:ke,maxValue:u,step:1,marks:m,"aria-label":"Leverage"})]}),jsxRuntime.jsxs("div",{className:"text-sm text-white font-medium",children:["Leverage: ",p,"x"]}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{x();},disabled:d||n,className:"cursor-pointer mt-1 w-full h-12 rounded-[12px] font-medium text-black bg-[#C7FF2E] hover:bg-[#b6ed1c] active:bg-[#a6d913] transition-colors flex items-center justify-center gap-2 disabled:bg-[#3f3f46] disabled:text-zinc-500 disabled:cursor-not-allowed",children:[d&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),n?"Unable to update leverage":d?"Updating Leverage...":"Update Leverage"]})]})]})})})}function gl({methods:e}){let t=e.watch("amount"),r=typeof t=="number"&&Number.isFinite(t)?t:void 0,[s,n]=react.useState(()=>r!==void 0?String(r):""),i=react.useRef(null);react.useEffect(()=>{let l=typeof document<"u"&&document.activeElement===i.current;n(u=>{let p=parseFloat(u),c=Number.isFinite(p)&&p===r;if(l&&c)return u;let d=r!==void 0?String(r):"";return u===d?u:d});},[r]);let o=react.useCallback(l=>{let u=Wr(l.target.value);if(n(u),u===""||u==="."){e.setValue("amount",void 0,{shouldValidate:false,shouldDirty:true});return}let p=Number(u);Number.isFinite(p)&&e.setValue("amount",p,{shouldValidate:false,shouldDirty:true});},[e]),a=react.useCallback(l=>{(l.key==="-"||l.key==="+"||l.key==="e"||l.key==="E")&&(l.preventDefault(),l.stopPropagation());},[]);return jsxRuntime.jsx("input",{ref:i,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,name:"amount",placeholder:"0.0 USDC","aria-label":"Buy amount",className:"flex-1 min-w-0 bg-transparent border-none outline-none w-full",style:{color:"#ffffff",fontSize:18,lineHeight:"23px",fontVariantNumeric:"tabular-nums",padding:0},value:s,onChange:o,onKeyDownCapture:a})}function bl({methods:e,placeholder:t}){let r=e.watch("price"),s=typeof r=="number"&&Number.isFinite(r)?r:void 0,[n,i]=react.useState(()=>s!==void 0?String(s):""),o=react.useRef(null);react.useEffect(()=>{let u=typeof document<"u"&&document.activeElement===o.current;i(p=>{let c=parseFloat(p),d=Number.isFinite(c)&&c===s;if(u&&d)return p;let y=s!==void 0?String(s):"";return p===y?p:y});},[s]);let a=react.useCallback(u=>{let p=Wr(u.target.value);if(i(p),p===""||p==="."){e.setValue("price",void 0,{shouldValidate:false,shouldDirty:true});return}let c=Number(p);Number.isFinite(c)&&e.setValue("price",c,{shouldValidate:false,shouldDirty:true});},[e]),l=react.useCallback(u=>{(u.key==="-"||u.key==="+"||u.key==="e"||u.key==="E")&&(u.preventDefault(),u.stopPropagation());},[]);return jsxRuntime.jsx("input",{ref:o,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,name:"price",placeholder:t,"aria-label":"Limit price",className:"flex-1 min-w-0 bg-transparent border-none outline-none w-full",style:{color:"#ffffff",fontSize:18,lineHeight:"23px",fontVariantNumeric:"tabular-nums",padding:0},value:n,onChange:a,onKeyDownCapture:l})}function Gn(e){return Number.isFinite(e)?String(e):""}function At({methods:e,field:t,placeholder:r,refPrice:s,leverage:n,side:i}){let o=t.startsWith("takeProfit")?"tp":"sl",a=t==="takeProfitPrice"||t==="stopLossPrice",l=(()=>{switch(t){case "takeProfitPrice":return "takeProfitPercent";case "takeProfitPercent":return "takeProfitPrice";case "stopLossPrice":return "stopLossPercent";case "stopLossPercent":return "stopLossPrice"}})(),u=e.watch(t),p=typeof u=="number"&&Number.isFinite(u)?u:void 0,[c,d]=react.useState(()=>p!==void 0?Gn(p):""),y=react.useRef(null);react.useEffect(()=>{let x=typeof document<"u"&&document.activeElement===y.current;d(h=>{let P=parseFloat(h),S=Number.isFinite(P)&&P===p;if(x&&S)return h;let N=p!==void 0?Gn(p):"";return h===N?h:N});},[p]);let m=react.useCallback(x=>{let h=Wr(x.target.value);if(d(h),h===""||h==="."){e.setValue(t,void 0,{shouldValidate:false,shouldDirty:true}),e.setValue(l,void 0,{shouldValidate:false,shouldDirty:false});return}let P=Number(h);if(!Number.isFinite(P)||(e.setValue(t,P,{shouldValidate:false,shouldDirty:true}),!s||s<=0||!n||n<=0))return;let S=a?Bn(P,s,n,i,o):pt(P,s,n,i,o);if(S===void 0||!Number.isFinite(S))return;let N=a?Kn(S):Qn(S);e.setValue(l,N,{shouldValidate:false,shouldDirty:false});},[e,t,l,a,s,n,i,o]),f=react.useCallback(x=>{(x.key==="-"||x.key==="+"||x.key==="e"||x.key==="E")&&(x.preventDefault(),x.stopPropagation());},[]);return jsxRuntime.jsx("input",{ref:y,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,name:t,placeholder:r,"aria-label":t,className:"w-full bg-transparent outline-none",style:{color:"#ffffff",fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4,fontVariantNumeric:"tabular-nums"},value:c,onChange:m,onKeyDownCapture:f})}function $r({methods:e,side:t,orderType:r,onSideChange:s,onOrderTypeChange:n,onSubmit:i,isSubmitting:o,symbol:a,currentPrice:l,marketPrice:u,estimatedFee:p,liquidationPrice:c,availableMargin:d,accountValue:y,currentPosition:m,maxLeverage:f,isLeverageReady:x=true,hasOpenOrdersForSymbol:h=false,szDecimals:P,onAddFunds:S,onUpdateLeverage:N}){let w=react.useCallback(()=>{S?.();},[S]),B=walletConnector.useAuthCallback(w),I=walletConnector.useAuthCallback(i),[g,F]=react.useState(false),[$,z]=react.useState(false),H=e.watch("leverage")||20,D=e.watch("amount"),T=typeof D=="number"&&Number.isFinite(D)?D:0,ee=T>0,V=e.watch("price"),Se=typeof V=="number"&&Number.isFinite(V)&&V>0,se=a.split("-")[0],ve=react.useMemo(()=>{if(!d||d<=0||!ee)return 0;let O=T/d*100;return Number.isFinite(O)?Math.max(0,Math.min(100,O)):0},[ee,T,d]),ue=react.useCallback(O=>{if(d<=0)return;let J=Math.max(0,Math.min(100,O))/100;if(J===0){e.setValue("amount",void 0,{shouldValidate:false,shouldDirty:true});return}let Ne=Number((d*J).toFixed(4));e.setValue("amount",Ne,{shouldValidate:false,shouldDirty:true});},[d,e]),oe=react.useMemo(()=>!ee||!l||l<=0?0:T*H/l,[ee,T,H,l]),Ae=react.useMemo(()=>dl/Math.max(1,H),[H]),E=react.useMemo(()=>d<=0?{label:"Add More Funds",kind:"deposit",disabled:!S}:ee?T<Ae?{label:"Order size too small",kind:"invalid",disabled:true}:r==="limit"&&!Se?{label:"Invalid Limit Price",kind:"invalid",disabled:true}:{label:`${t==="long"?"Long":"Short"} ${se}-USD`,kind:"submit",disabled:o}:{label:"Invalid Buy Amount",kind:"invalid",disabled:true},[d,ee,T,Ae,r,Se,t,se,o,S]),X=react.useCallback(()=>{E.kind==="deposit"&&B();},[E.kind,B]),C=O=>!Number.isFinite(O)||O<=0?"0":typeof P=="number"&&P>=0?O.toFixed(P):O>=1e3?O.toFixed(2):O>=1?O.toFixed(4):O.toFixed(6);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000"},children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"perp-order-form flex-1 overflow-y-auto",style:{padding:"16px 16px",display:"flex",flexDirection:"column",gap:16},children:[jsxRuntime.jsxs("div",{className:"perp-side-tabs flex",style:{border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,padding:4,gap:4},children:[jsxRuntime.jsx(ui.StyledTooltip,{content:"Buy asset, profit when price goes up",placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("button",{type:"button","data-active":t==="long",className:"perp-side-tab perp-side-tab--long flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:14,borderRadius:4,backgroundColor:t==="long"?te:"transparent",color:t==="long"?"#000000":"#b5b5b5",fontWeight:t==="long"?500:400,border:"none"},onClick:()=>s("long"),children:"Long"})}),jsxRuntime.jsx(ui.StyledTooltip,{content:"Sell asset, profit when price goes down",placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("button",{type:"button","data-active":t==="short",className:"perp-side-tab perp-side-tab--short flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:14,borderRadius:4,backgroundColor:t==="short"?"#F76816":"transparent",color:t==="short"?"#000000":"#b5b5b5",fontWeight:t==="short"?500:400,border:"none"},onClick:()=>s("short"),children:"Short"})})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx("div",{className:"flex",children:[{key:"market",label:"Market"},{key:"limit",label:"Limit"}].map(O=>jsxRuntime.jsx("div",{style:{height:32,display:"flex",alignItems:"center",borderBottom:r===O.key?"2px solid #ffffff":"2px solid transparent",padding:"2px 0 0",cursor:"pointer"},children:jsxRuntime.jsx("button",{type:"button",className:"cursor-pointer transition-colors",style:{padding:"0 8px",fontSize:12,fontWeight:500,backgroundColor:"transparent",color:r===O.key?"#ffffff":"#b5b5b5",border:"none"},onClick:()=>n(O.key),children:O.label})},O.key))}),jsxRuntime.jsx("div",{className:"flex-1"}),jsxRuntime.jsxs("button",{type:"button",className:"cursor-pointer flex items-center gap-1.5 px-3 py-1.5 rounded-[10px] transition-colors text-zinc-500 hover:text-zinc-200 hover:bg-zinc-800/40 focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#C7FF2E] disabled:cursor-progress",style:{fontSize:12,fontWeight:400},onClick:()=>F(true),disabled:!x,children:[jsxRuntime.jsx("span",{children:"Leverage:"}),x?jsxRuntime.jsxs("span",{children:[H,"x"]}):jsxRuntime.jsx("span",{"aria-hidden":"true",style:ml})]})]}),jsxRuntime.jsx(ui.RHForm,{methods:e,onSubmit:I,children:jsxRuntime.jsxs("div",{className:"space-y-3 w-full",children:[jsxRuntime.jsxs("div",{className:"perp-buy-amt",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Buy Amount"}),jsxRuntime.jsx("span",{style:{fontSize:14,fontWeight:500,color:"#ffffff"},children:se})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8,minHeight:24},children:[jsxRuntime.jsx(gl,{methods:e}),jsxRuntime.jsxs("div",{className:"flex items-center shrink-0",style:{gap:6},children:[jsxRuntime.jsx("img",{src:`${cl}/${se}.svg`,alt:se,width:18,height:18,className:"rounded-full",style:{width:18,height:18},onError:O=>{O.target.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:18,lineHeight:"23px",color:"#b5b5b5",fontVariantNumeric:"tabular-nums"},children:C(oe)})]})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("style",{children:`
|
|
9
|
+
`}),jsxRuntime.jsx(ui.Slider,{value:[p],onChange:h=>c(Array.isArray(h)?h[0]:h),isDisabled:d||n,minValue:ke,maxValue:u,step:1,marks:m,"aria-label":"Leverage"})]}),jsxRuntime.jsxs("div",{className:"text-sm text-white font-medium",children:["Leverage: ",p,"x"]}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{T();},disabled:d||n,className:"cursor-pointer mt-1 w-full h-12 rounded-[12px] font-medium text-black bg-[#C7FF2E] hover:bg-[#b6ed1c] active:bg-[#a6d913] transition-colors flex items-center justify-center gap-2 disabled:bg-[#3f3f46] disabled:text-zinc-500 disabled:cursor-not-allowed",children:[d&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),n?"Unable to update leverage":d?"Updating Leverage...":"Update Leverage"]})]})]})})})}function gl({methods:e}){let t=e.watch("amount"),r=typeof t=="number"&&Number.isFinite(t)?t:void 0,[s,n]=react.useState(()=>r!==void 0?String(r):""),i=react.useRef(null);react.useEffect(()=>{let l=typeof document<"u"&&document.activeElement===i.current;n(u=>{let p=parseFloat(u),c=Number.isFinite(p)&&p===r;if(l&&c)return u;let d=r!==void 0?String(r):"";return u===d?u:d});},[r]);let o=react.useCallback(l=>{let u=Wr(l.target.value);if(n(u),u===""||u==="."){e.setValue("amount",void 0,{shouldValidate:false,shouldDirty:true});return}let p=Number(u);Number.isFinite(p)&&e.setValue("amount",p,{shouldValidate:false,shouldDirty:true});},[e]),a=react.useCallback(l=>{(l.key==="-"||l.key==="+"||l.key==="e"||l.key==="E")&&(l.preventDefault(),l.stopPropagation());},[]);return jsxRuntime.jsx("input",{ref:i,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,name:"amount",placeholder:"0.0 USDC","aria-label":"Buy amount",className:"flex-1 min-w-0 bg-transparent border-none outline-none w-full",style:{color:"#ffffff",fontSize:18,lineHeight:"23px",fontVariantNumeric:"tabular-nums",padding:0},value:s,onChange:o,onKeyDownCapture:a})}function bl({methods:e,placeholder:t}){let r=e.watch("price"),s=typeof r=="number"&&Number.isFinite(r)?r:void 0,[n,i]=react.useState(()=>s!==void 0?String(s):""),o=react.useRef(null);react.useEffect(()=>{let u=typeof document<"u"&&document.activeElement===o.current;i(p=>{let c=parseFloat(p),d=Number.isFinite(c)&&c===s;if(u&&d)return p;let y=s!==void 0?String(s):"";return p===y?p:y});},[s]);let a=react.useCallback(u=>{let p=Wr(u.target.value);if(i(p),p===""||p==="."){e.setValue("price",void 0,{shouldValidate:false,shouldDirty:true});return}let c=Number(p);Number.isFinite(c)&&e.setValue("price",c,{shouldValidate:false,shouldDirty:true});},[e]),l=react.useCallback(u=>{(u.key==="-"||u.key==="+"||u.key==="e"||u.key==="E")&&(u.preventDefault(),u.stopPropagation());},[]);return jsxRuntime.jsx("input",{ref:o,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,name:"price",placeholder:t,"aria-label":"Limit price",className:"flex-1 min-w-0 bg-transparent border-none outline-none w-full",style:{color:"#ffffff",fontSize:18,lineHeight:"23px",fontVariantNumeric:"tabular-nums",padding:0},value:n,onChange:a,onKeyDownCapture:l})}function Gn(e){return Number.isFinite(e)?String(e):""}function Nt({methods:e,field:t,placeholder:r,refPrice:s,leverage:n,side:i}){let o=t.startsWith("takeProfit")?"tp":"sl",a=t==="takeProfitPrice"||t==="stopLossPrice",l=(()=>{switch(t){case "takeProfitPrice":return "takeProfitPercent";case "takeProfitPercent":return "takeProfitPrice";case "stopLossPrice":return "stopLossPercent";case "stopLossPercent":return "stopLossPrice"}})(),u=e.watch(t),p=typeof u=="number"&&Number.isFinite(u)?u:void 0,[c,d]=react.useState(()=>p!==void 0?Gn(p):""),y=react.useRef(null);react.useEffect(()=>{let T=typeof document<"u"&&document.activeElement===y.current;d(h=>{let C=parseFloat(h),v=Number.isFinite(C)&&C===p;if(T&&v)return h;let R=p!==void 0?Gn(p):"";return h===R?h:R});},[p]);let m=react.useCallback(T=>{let h=Wr(T.target.value);if(d(h),h===""||h==="."){e.setValue(t,void 0,{shouldValidate:false,shouldDirty:true}),e.setValue(l,void 0,{shouldValidate:false,shouldDirty:false});return}let C=Number(h);if(!Number.isFinite(C)||(e.setValue(t,C,{shouldValidate:false,shouldDirty:true}),!s||s<=0||!n||n<=0))return;let v=a?Bn(C,s,n,i,o):ct(C,s,n,i,o);if(v===void 0||!Number.isFinite(v))return;let R=a?Kn(v):Qn(v);e.setValue(l,R,{shouldValidate:false,shouldDirty:false});},[e,t,l,a,s,n,i,o]),f=react.useCallback(T=>{(T.key==="-"||T.key==="+"||T.key==="e"||T.key==="E")&&(T.preventDefault(),T.stopPropagation());},[]);return jsxRuntime.jsx("input",{ref:y,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,name:t,placeholder:r,"aria-label":t,className:"w-full bg-transparent outline-none",style:{color:"#ffffff",fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4,fontVariantNumeric:"tabular-nums"},value:c,onChange:m,onKeyDownCapture:f})}function $r({methods:e,side:t,orderType:r,onSideChange:s,onOrderTypeChange:n,onSubmit:i,isSubmitting:o,symbol:a,currentPrice:l,marketPrice:u,estimatedFee:p,liquidationPrice:c,availableMargin:d,accountValue:y,currentPosition:m,maxLeverage:f,isLeverageReady:T=true,hasOpenOrdersForSymbol:h=false,szDecimals:C,onAddFunds:v,onUpdateLeverage:R}){let D=react.useCallback(()=>{v?.();},[v]),F=walletConnector.useAuthCallback(D),M=walletConnector.useAuthCallback(i),[b,L]=react.useState(false),[V,K]=react.useState(false),z=e.watch("leverage")||20,A=e.watch("amount"),O=typeof A=="number"&&Number.isFinite(A)?A:0,W=O>0,J=e.watch("price"),Se=typeof J=="number"&&Number.isFinite(J)&&J>0,G=a.split("-")[0],ve=react.useMemo(()=>{if(!d||d<=0||!W)return 0;let S=O/d*100;return Number.isFinite(S)?Math.max(0,Math.min(100,S)):0},[W,O,d]),le=react.useCallback(S=>{if(d<=0)return;let q=Math.max(0,Math.min(100,S))/100;if(q===0){e.setValue("amount",void 0,{shouldValidate:false,shouldDirty:true});return}let ue=Number((d*q).toFixed(4));e.setValue("amount",ue,{shouldValidate:false,shouldDirty:true});},[d,e]),ie=react.useMemo(()=>!W||!l||l<=0?0:O*z/l,[W,O,z,l]),ze=react.useMemo(()=>dl/Math.max(1,z),[z]),ee=react.useMemo(()=>d<=0?{label:"Add More Funds",kind:"deposit",disabled:!v}:W?O<ze?{label:"Order size too small",kind:"invalid",disabled:true}:r==="limit"&&!Se?{label:"Invalid Limit Price",kind:"invalid",disabled:true}:{label:`${t==="long"?"Long":"Short"} ${G}-USD`,kind:"submit",disabled:o}:{label:"Invalid Buy Amount",kind:"invalid",disabled:true},[d,W,O,ze,r,Se,t,G,o,v]),We=react.useCallback(()=>{ee.kind==="deposit"&&F();},[ee.kind,F]),g=S=>!Number.isFinite(S)||S<=0?"0":typeof C=="number"&&C>=0?S.toFixed(C):S>=1e3?S.toFixed(2):S>=1?S.toFixed(4):S.toFixed(6);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000"},children:[jsxRuntime.jsx(De,{}),jsxRuntime.jsxs("div",{className:"perp-order-form flex-1 overflow-y-auto",style:{padding:"16px 16px",display:"flex",flexDirection:"column",gap:16},children:[jsxRuntime.jsxs("div",{className:"perp-side-tabs flex",style:{border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,padding:4,gap:4},children:[jsxRuntime.jsx(ui.StyledTooltip,{content:"Buy asset, profit when price goes up",placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("button",{type:"button","data-active":t==="long",className:"perp-side-tab perp-side-tab--long flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:14,borderRadius:4,backgroundColor:t==="long"?te:"transparent",color:t==="long"?"#000000":"#b5b5b5",fontWeight:t==="long"?500:400,border:"none"},onClick:()=>s("long"),children:"Long"})}),jsxRuntime.jsx(ui.StyledTooltip,{content:"Sell asset, profit when price goes down",placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("button",{type:"button","data-active":t==="short",className:"perp-side-tab perp-side-tab--short flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:14,borderRadius:4,backgroundColor:t==="short"?"#F76816":"transparent",color:t==="short"?"#000000":"#b5b5b5",fontWeight:t==="short"?500:400,border:"none"},onClick:()=>s("short"),children:"Short"})})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx("div",{className:"flex",children:[{key:"market",label:"Market"},{key:"limit",label:"Limit"}].map(S=>jsxRuntime.jsx("div",{style:{height:32,display:"flex",alignItems:"center",borderBottom:r===S.key?"2px solid #ffffff":"2px solid transparent",padding:"2px 0 0",cursor:"pointer"},children:jsxRuntime.jsx("button",{type:"button",className:"cursor-pointer transition-colors",style:{padding:"0 8px",fontSize:12,fontWeight:500,backgroundColor:"transparent",color:r===S.key?"#ffffff":"#b5b5b5",border:"none"},onClick:()=>n(S.key),children:S.label})},S.key))}),jsxRuntime.jsx("div",{className:"flex-1"}),jsxRuntime.jsxs("button",{type:"button",className:"cursor-pointer flex items-center gap-1.5 px-3 py-1.5 rounded-[10px] transition-colors text-zinc-500 hover:text-zinc-200 hover:bg-zinc-800/40 focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#C7FF2E] disabled:cursor-progress",style:{fontSize:12,fontWeight:400},onClick:()=>L(true),disabled:!T,children:[jsxRuntime.jsx("span",{children:"Leverage:"}),T?jsxRuntime.jsxs("span",{children:[z,"x"]}):jsxRuntime.jsx("span",{"aria-hidden":"true",style:ml})]})]}),jsxRuntime.jsx(ui.RHForm,{methods:e,onSubmit:M,children:jsxRuntime.jsxs("div",{className:"space-y-3 w-full",children:[jsxRuntime.jsxs("div",{className:"perp-buy-amt",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Buy Amount"}),jsxRuntime.jsx("span",{style:{fontSize:14,fontWeight:500,color:"#ffffff"},children:G})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8,minHeight:24},children:[jsxRuntime.jsx(gl,{methods:e}),jsxRuntime.jsxs("div",{className:"flex items-center shrink-0",style:{gap:6},children:[jsxRuntime.jsx("img",{src:`${cl}/${G}.svg`,alt:G,width:18,height:18,className:"rounded-full",style:{width:18,height:18},onError:S=>{S.target.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:18,lineHeight:"23px",color:"#b5b5b5",fontVariantNumeric:"tabular-nums"},children:g(ie)})]})]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("style",{children:`
|
|
10
10
|
.perp-buy-amt input, .perp-price-box input { font-size: 18px !important; line-height: 23px !important; }
|
|
11
11
|
.perp-order-form .group,
|
|
12
12
|
.perp-order-form .group div { background: transparent !important; border: none !important; padding: 0 !important; border-radius: 0 !important; min-height: 0 !important; height: auto !important; }
|
|
@@ -22,18 +22,18 @@
|
|
|
22
22
|
.perp-slider::-moz-range-thumb { width: 12px; height: 12px; border-radius: 50%; background: ${te}; border: none; box-shadow: 0 0 0 2px rgba(0,0,0,0.6); }
|
|
23
23
|
.perp-slider:disabled { cursor: not-allowed; opacity: 0.5; }
|
|
24
24
|
.perp-side-tab[data-active="false"]:hover { background-color: rgba(255,255,255,0.12) !important; color: #ffffff !important; }
|
|
25
|
-
`}),jsxRuntime.jsx("input",{type:"range",value:Math.round(ve),onChange:O=>ue(Number(O.target.value)),min:0,max:100,step:1,disabled:d<=0,className:"perp-slider",style:{"--pct":`${Math.round(ve)}%`}}),jsxRuntime.jsxs("div",{className:"flex justify-between",style:{fontSize:10,color:"#b5b5b5",marginTop:4},children:[jsxRuntime.jsx("span",{children:"0%"}),jsxRuntime.jsx("span",{children:"25%"}),jsxRuntime.jsx("span",{children:"50%"}),jsxRuntime.jsx("span",{children:"75%"}),jsxRuntime.jsx("span",{children:"100%"})]})]}),r==="limit"&&jsxRuntime.jsxs("div",{className:"perp-price-box",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Limit Price"}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:u&&u>0?`Current Price: ${Qr(u)}`:"--"})]}),jsxRuntime.jsx(bl,{methods:e,placeholder:u&&u>0?Qr(u):"$0.0"})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between",style:{marginTop:16},children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:6},children:[jsxRuntime.jsx("div",{onClick:()=>z(O=>!O),style:{width:16,height:16,borderRadius:4,border:"1px solid #2a2a2a",backgroundColor:$?"#C7FF2E":"transparent",flexShrink:0,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:$&&jsxRuntime.jsx("svg",{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",children:jsxRuntime.jsx("path",{d:"M1 4L3.5 6.5L9 1",stroke:"#000000",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"#b5b5b5"},children:"TP/SL"})]}),jsxRuntime.jsxs("div",{style:{fontSize:12,color:"#6b6b6b"},children:[jsxRuntime.jsx("span",{children:"Est. Liq. Price: "}),jsxRuntime.jsx("span",{style:{color:"#b5b5b5"},children:c?Qr(c):"--"})]})]}),$&&jsxRuntime.jsxs("div",{className:"flex",style:{gap:8},children:[jsxRuntime.jsxs("div",{className:"flex-1",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP Price"}),jsxRuntime.jsx(At,{methods:e,field:"takeProfitPrice",placeholder:"Enter TP price",refPrice:l,leverage:H,side:t})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP %"}),jsxRuntime.jsx(At,{methods:e,field:"takeProfitPercent",placeholder:"0.0",refPrice:l,leverage:H,side:t})]})]}),$&&jsxRuntime.jsxs("div",{className:"flex",style:{gap:8},children:[jsxRuntime.jsxs("div",{className:"flex-1",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL Price"}),jsxRuntime.jsx(At,{methods:e,field:"stopLossPrice",placeholder:"Enter SL price",refPrice:l,leverage:H,side:t})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL %"}),jsxRuntime.jsx(At,{methods:e,field:"stopLossPercent",placeholder:"0.0",refPrice:l,leverage:H,side:t})]})]}),(()=>{let O=E.kind==="submit",J=O?"submit":"button",Vt=O?t==="long"?pl:Yn:E.kind==="deposit"?te:"rgba(63,63,70,0.6)",Ci=E.kind==="invalid"?"#71717a":"#000000",Ps=O&&o;return jsxRuntime.jsxs("button",{type:J,disabled:E.disabled,onClick:O?void 0:X,className:"w-full transition-colors disabled:cursor-not-allowed flex items-center justify-center gap-2",style:{marginTop:16,height:40,fontSize:14,fontWeight:600,color:Ci,backgroundColor:Vt,borderRadius:9999,border:"none",cursor:E.disabled?"not-allowed":"pointer",opacity:E.disabled?.9:1},children:[Ps&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),Ps?"Placing order...":E.label]})})(),jsxRuntime.jsxs("div",{style:{fontSize:12,display:"flex",flexDirection:"column",gap:6,paddingTop:4},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Available Margin"}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{B();},disabled:!S,style:{height:24,padding:"0 8px",borderRadius:4,border:"none",backgroundColor:Br(te,26),color:te,fontSize:12,fontWeight:500,lineHeight:"16px",cursor:S?"pointer":"default",transition:"background-color 150ms ease-in-out"},onMouseEnter:O=>{S&&(O.currentTarget.style.backgroundColor=Br(te,51));},onMouseLeave:O=>{S&&(O.currentTarget.style.backgroundColor=Br(te,26));},children:[Vn(d)," USDC"]})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Perps Account Value"}),jsxRuntime.jsxs("span",{style:{color:"#b5b5b5",fontSize:12},children:[Vn(y)," USDC"]})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Current Position"}),jsxRuntime.jsx("span",{style:{color:"#b5b5b5",fontSize:12},children:m?`${m.side==="long"?"Long":"Short"} ${m.quantityRaw??String(m.quantity)} ${m.base} (${m.margin.toFixed(2)} USDC)`:"--"})]})]})]})})]}),jsxRuntime.jsx("div",{style:{padding:"10px 16px",fontSize:12,display:"flex",flexDirection:"column"},children:jsxRuntime.jsxs("div",{className:"flex items-center justify-end",style:{gap:6},children:[jsxRuntime.jsx("span",{style:{fontSize:11,color:"#6b6b6b"},children:"powered by"}),jsxRuntime.jsx("img",{src:"https://axiom-assets.sfo3.cdn.digitaloceanspaces.com/images/hyperliquid-logo.svg",alt:"Hyperliquid",className:"h-3 opacity-60",onError:O=>{let J=O.target;J.style.display="none";}})]})}),jsxRuntime.jsx(yl,{isOpen:g,initialLeverage:H,maxLeverage:f,coinName:m?.base??(a.includes("-")?a.split("-")[0]:a),hasOpenPosition:!!m,hasOpenOrders:h,onConfirm:O=>e.setValue("leverage",O),onUpdate:N,onClose:()=>F(false)})]})}function hl({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n,onAddFunds:i,onUpdateLeverage:o,onPlaceOrder:a,className:l}){let{form:u,side:p,orderType:c,setSide:d,setOrderType:y,handleSubmit:m,isSubmitting:f,currentPrice:x,marketPrice:h,estimatedFee:P,estimatedTotal:S,liquidationPrice:N,availableMargin:w,accountValue:B,currentPosition:I,maxLeverage:g,isLeverageReady:F,hasOpenOrdersForSymbol:$,szDecimals:z,onUpdateLeverage:H}=_r({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n,onUpdateLeverage:o,onPlaceOrder:a});return jsxRuntime.jsx("div",{className:l,children:jsxRuntime.jsx($r,{methods:u,side:p,orderType:c,onSideChange:d,onOrderTypeChange:y,onSubmit:m,isSubmitting:f,symbol:e,currentPrice:x,marketPrice:h,estimatedFee:P,estimatedTotal:S,liquidationPrice:N,availableMargin:w,accountValue:B,currentPosition:I,maxLeverage:g,isLeverageReady:F,hasOpenOrdersForSymbol:$,szDecimals:z,onAddFunds:i,onUpdateLeverage:H})})}var dt="#C7FF2E";function Yr(e){let t=e.replace(/[^\d.]/g,""),r=t.split(".");return r.length>1?`${r[0]}.${r.slice(1).join("")}`:t}function Xr({isOpen:e,position:t,closeType:r,isSubmitting:s,onClose:n,onConfirm:i}){let{t:o}=i18n.useTranslation(),a=t?Math.abs(t.quantity):0,l=t?.quantityRaw??String(a),u=t?.symbol.split("-")[0]??"",p=t?.side==="long",c=o(p?"perpetuals.positions.long":"perpetuals.positions.short"),[d,y]=react.useState(""),[m,f]=react.useState("100"),[x,h]=react.useState(""),P=react.useRef(null),S=react.useRef(null),N=react.useRef(null);react.useEffect(()=>{if(e&&t){let E=Math.abs(t.quantity);y(t.quantityRaw??String(E)),f("100"),h("");}},[e,t]);let w=react.useMemo(()=>{let E=parseFloat(d);return Number.isFinite(E)&&E>0?E:0},[d]);react.useMemo(()=>{let E=parseFloat(m);return Number.isFinite(E)?Math.max(0,Math.min(100,E)):0},[m]);let I=react.useMemo(()=>{if(a<=0||w<=0)return 0;let E=w/a*100;return Math.max(0,Math.min(100,E))},[w,a]),g=react.useCallback(E=>{let X=Yr(E.target.value);y(X);let C=parseFloat(X);if(Number.isFinite(C)&&a>0){let O=Math.min(C,a),J=Math.round(O/a*100);f(String(J));}else (X===""||X===".")&&f("0");},[a]),F=react.useCallback(E=>{let X=Yr(E.target.value);f(X);let C=parseFloat(X);if(Number.isFinite(C)&&a>0){let O=Math.max(0,Math.min(100,C)),J=a*(O/100);y(J>0?String(Number(J.toPrecision(6))):"0");}else (X===""||X===".")&&y("0");},[a]),$=react.useCallback(E=>{let X=Number(E.target.value);if(f(String(X)),a>0){let C=a*(X/100);y(X===100?t?.quantityRaw??String(a):C>0?String(Number(C.toPrecision(6))):"0");}},[a,t?.quantityRaw]),z=react.useCallback(E=>{h(Yr(E.target.value));},[]),H=react.useCallback(E=>{(E.key==="-"||E.key==="+"||E.key==="e"||E.key==="E")&&(E.preventDefault(),E.stopPropagation());},[]),D=r==="limit",T=parseFloat(x),ee=D&&Number.isFinite(T)&&T>0,V=w>0&&(!D||ee)&&!s,Se=react.useCallback(async()=>{V&&await i(w,D?T:void 0);},[V,i,w,D,T]),se=walletConnector.useAuthCallback(Se),ve=D?o("perpetuals.positions.close.limitTitle",{side:c,size:l,symbol:u}):o("perpetuals.positions.close.marketTitle",{side:c,size:l,symbol:u}),ue=o(D?"perpetuals.positions.close.limitDesc":"perpetuals.positions.close.marketDesc"),oe=o(D?"perpetuals.positions.close.confirmLimit":"perpetuals.positions.close.confirmMarket"),Ae=t?.markPrice&&t.markPrice>0?String(t.markPrice):"";return jsxRuntime.jsx(ui.StyledModal,{isOpen:e,onOpenChange:E=>{s||E||n();},size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:"!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]",body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-sm font-semibold text-white m-0",children:ve}),jsxRuntime.jsx("button",{type:"button",onClick:n,disabled:s,"aria-label":"Close",className:"p-1 rounded-[10px] hover:bg-[rgba(39,39,42,0.5)] text-zinc-400 hover:text-white transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-1 flex flex-col gap-4",children:[jsxRuntime.jsx("p",{className:"text-[13px] text-zinc-400 leading-[18px] m-0",children:ue}),D&&jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:o("perpetuals.positions.close.price")}),jsxRuntime.jsx("input",{ref:N,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,placeholder:Ae?o("perpetuals.positions.close.currentPrice",{price:Ae}):"0.0",value:x,onChange:z,onKeyDownCapture:H,className:"w-full bg-transparent outline-none",style:{color:"#ffffff",fontSize:14,height:40,padding:"0 12px",border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,fontVariantNumeric:"tabular-nums"}})]}),jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:o("perpetuals.positions.close.size")}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"%"})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-1",style:{border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,height:40,padding:"0 12px"},children:[jsxRuntime.jsx("input",{ref:P,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,value:d,onChange:g,onKeyDownCapture:H,className:"flex-1 min-w-0 bg-transparent border-none outline-none",style:{color:"#ffffff",fontSize:14,fontVariantNumeric:"tabular-nums",padding:0}}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginLeft:8,flexShrink:0},children:"$"})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,height:40,padding:"0 12px",width:80},children:[jsxRuntime.jsx("input",{ref:S,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,value:m,onChange:F,onKeyDownCapture:H,className:"flex-1 min-w-0 bg-transparent border-none outline-none text-right",style:{color:"#ffffff",fontSize:14,fontVariantNumeric:"tabular-nums",padding:0}}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginLeft:4,flexShrink:0},children:"%"})]})]}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginTop:2},children:o("perpetuals.positions.close.maxSize",{size:l,symbol:u})})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("style",{children:`
|
|
26
|
-
.perp-close-slider { -webkit-appearance: none; appearance: none; background: transparent; cursor: pointer; width: 100%; height: 16px; --pct: 0%; --fill: ${
|
|
25
|
+
`}),jsxRuntime.jsx("input",{type:"range",value:Math.round(ve),onChange:S=>le(Number(S.target.value)),min:0,max:100,step:1,disabled:d<=0,className:"perp-slider",style:{"--pct":`${Math.round(ve)}%`}}),jsxRuntime.jsxs("div",{className:"flex justify-between",style:{fontSize:10,color:"#b5b5b5",marginTop:4},children:[jsxRuntime.jsx("span",{children:"0%"}),jsxRuntime.jsx("span",{children:"25%"}),jsxRuntime.jsx("span",{children:"50%"}),jsxRuntime.jsx("span",{children:"75%"}),jsxRuntime.jsx("span",{children:"100%"})]})]}),r==="limit"&&jsxRuntime.jsxs("div",{className:"perp-price-box",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Limit Price"}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:u&&u>0?`Current Price: ${Qr(u)}`:"--"})]}),jsxRuntime.jsx(bl,{methods:e,placeholder:u&&u>0?Qr(u):"$0.0"})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between",style:{marginTop:16},children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:6},children:[jsxRuntime.jsx("div",{onClick:()=>K(S=>!S),style:{width:16,height:16,borderRadius:4,border:"1px solid #2a2a2a",backgroundColor:V?"#C7FF2E":"transparent",flexShrink:0,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:V&&jsxRuntime.jsx("svg",{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",children:jsxRuntime.jsx("path",{d:"M1 4L3.5 6.5L9 1",stroke:"#000000",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"#b5b5b5"},children:"TP/SL"})]}),jsxRuntime.jsxs("div",{style:{fontSize:12,color:"#6b6b6b"},children:[jsxRuntime.jsx("span",{children:"Est. Liq. Price: "}),jsxRuntime.jsx("span",{style:{color:"#b5b5b5"},children:c?Qr(c):"--"})]})]}),V&&jsxRuntime.jsxs("div",{className:"flex",style:{gap:8},children:[jsxRuntime.jsxs("div",{className:"flex-1",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP Price"}),jsxRuntime.jsx(Nt,{methods:e,field:"takeProfitPrice",placeholder:"Enter TP price",refPrice:l,leverage:z,side:t})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP %"}),jsxRuntime.jsx(Nt,{methods:e,field:"takeProfitPercent",placeholder:"0.0",refPrice:l,leverage:z,side:t})]})]}),V&&jsxRuntime.jsxs("div",{className:"flex",style:{gap:8},children:[jsxRuntime.jsxs("div",{className:"flex-1",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL Price"}),jsxRuntime.jsx(Nt,{methods:e,field:"stopLossPrice",placeholder:"Enter SL price",refPrice:l,leverage:z,side:t})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL %"}),jsxRuntime.jsx(Nt,{methods:e,field:"stopLossPercent",placeholder:"0.0",refPrice:l,leverage:z,side:t})]})]}),(()=>{let S=ee.kind==="submit",q=S?"submit":"button",$e=S?t==="long"?pl:Yn:ee.kind==="deposit"?te:"rgba(63,63,70,0.6)",Ci=ee.kind==="invalid"?"#71717a":"#000000",Ps=S&&o;return jsxRuntime.jsxs("button",{type:q,disabled:ee.disabled,onClick:S?void 0:We,className:"w-full transition-colors disabled:cursor-not-allowed flex items-center justify-center gap-2",style:{marginTop:16,height:40,fontSize:14,fontWeight:600,color:Ci,backgroundColor:$e,borderRadius:9999,border:"none",cursor:ee.disabled?"not-allowed":"pointer",opacity:ee.disabled?.9:1},children:[Ps&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),Ps?"Placing order...":ee.label]})})(),jsxRuntime.jsxs("div",{style:{fontSize:12,display:"flex",flexDirection:"column",gap:6,paddingTop:4},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Available Margin"}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{F();},disabled:!v,style:{height:24,padding:"0 8px",borderRadius:4,border:"none",backgroundColor:Br(te,26),color:te,fontSize:12,fontWeight:500,lineHeight:"16px",cursor:v?"pointer":"default",transition:"background-color 150ms ease-in-out"},onMouseEnter:S=>{v&&(S.currentTarget.style.backgroundColor=Br(te,51));},onMouseLeave:S=>{v&&(S.currentTarget.style.backgroundColor=Br(te,26));},children:[Vn(d)," USDC"]})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Perps Account Value"}),jsxRuntime.jsxs("span",{style:{color:"#b5b5b5",fontSize:12},children:[Vn(y)," USDC"]})]}),jsxRuntime.jsxs("div",{className:"flex justify-between",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Current Position"}),jsxRuntime.jsx("span",{style:{color:"#b5b5b5",fontSize:12},children:m?`${m.side==="long"?"Long":"Short"} ${m.quantityRaw??String(m.quantity)} ${m.base} (${m.margin.toFixed(2)} USDC)`:"--"})]})]})]})})]}),jsxRuntime.jsx("div",{style:{padding:"10px 16px",fontSize:12,display:"flex",flexDirection:"column"},children:jsxRuntime.jsxs("div",{className:"flex items-center justify-end",style:{gap:6},children:[jsxRuntime.jsx("span",{style:{fontSize:11,color:"#6b6b6b"},children:"powered by"}),jsxRuntime.jsx("img",{src:"https://axiom-assets.sfo3.cdn.digitaloceanspaces.com/images/hyperliquid-logo.svg",alt:"Hyperliquid",className:"h-3 opacity-60",onError:S=>{let q=S.target;q.style.display="none";}})]})}),jsxRuntime.jsx(yl,{isOpen:b,initialLeverage:z,maxLeverage:f,coinName:m?.base??(a.includes("-")?a.split("-")[0]:a),hasOpenPosition:!!m,hasOpenOrders:h,onConfirm:S=>e.setValue("leverage",S),onUpdate:R,onClose:()=>L(false)})]})}function hl({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n,onAddFunds:i,onUpdateLeverage:o,onPlaceOrder:a,className:l}){let{form:u,side:p,orderType:c,setSide:d,setOrderType:y,handleSubmit:m,isSubmitting:f,currentPrice:T,marketPrice:h,estimatedFee:C,estimatedTotal:v,liquidationPrice:R,availableMargin:D,accountValue:F,currentPosition:M,maxLeverage:b,isLeverageReady:L,hasOpenOrdersForSymbol:V,szDecimals:K,onUpdateLeverage:z}=_r({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n,onUpdateLeverage:o,onPlaceOrder:a});return jsxRuntime.jsx("div",{className:l,children:jsxRuntime.jsx($r,{methods:u,side:p,orderType:c,onSideChange:d,onOrderTypeChange:y,onSubmit:m,isSubmitting:f,symbol:e,currentPrice:T,marketPrice:h,estimatedFee:C,estimatedTotal:v,liquidationPrice:R,availableMargin:D,accountValue:F,currentPosition:M,maxLeverage:b,isLeverageReady:L,hasOpenOrdersForSymbol:V,szDecimals:K,onAddFunds:i,onUpdateLeverage:z})})}var mt="#C7FF2E";function Yr(e){let t=e.replace(/[^\d.]/g,""),r=t.split(".");return r.length>1?`${r[0]}.${r.slice(1).join("")}`:t}function Xr({isOpen:e,position:t,closeType:r,isSubmitting:s,onClose:n,onConfirm:i}){let{t:o}=i18n.useTranslation(),a=t?Math.abs(t.quantity):0,l=t?.quantityRaw??String(a),u=t?.symbol.split("-")[0]??"",p=t?.side==="long",c=o(p?"perpetuals.positions.long":"perpetuals.positions.short"),[d,y]=react.useState(""),[m,f]=react.useState("100"),[T,h]=react.useState(""),C=react.useRef(null),v=react.useRef(null),R=react.useRef(null);react.useEffect(()=>{if(e&&t){let g=Math.abs(t.quantity);y(t.quantityRaw??String(g)),f("100"),h("");}},[e,t]);let D=react.useMemo(()=>{let g=parseFloat(d);return Number.isFinite(g)&&g>0?g:0},[d]);react.useMemo(()=>{let g=parseFloat(m);return Number.isFinite(g)?Math.max(0,Math.min(100,g)):0},[m]);let M=react.useMemo(()=>{if(a<=0||D<=0)return 0;let g=D/a*100;return Math.max(0,Math.min(100,g))},[D,a]),b=react.useCallback(g=>{let S=Yr(g.target.value),q=parseFloat(S);if(Number.isFinite(q)&&q>a&&a>0){y(t?.quantityRaw??String(a)),f("100");return}if(y(S),Number.isFinite(q)&&a>0){let ue=Math.round(q/a*100);f(String(Math.min(100,ue)));}else (S===""||S===".")&&f("0");},[a,t?.quantityRaw]),L=react.useCallback(()=>{let g=parseFloat(d);!Number.isFinite(g)||g<=0?(y("0"),f("0")):g>a&&a>0&&(y(t?.quantityRaw??String(a)),f("100"));},[d,a,t?.quantityRaw]),V=react.useCallback(g=>{let S=Yr(g.target.value),q=parseFloat(S);if(Number.isFinite(q)&&q>100){f("100"),a>0&&y(t?.quantityRaw??String(a));return}if(f(S),Number.isFinite(q)&&a>0){let ue=Math.max(0,Math.min(100,q)),$e=a*(ue/100);y($e>0?String(Number($e.toPrecision(6))):"0");}else (S===""||S===".")&&y("0");},[a,t?.quantityRaw]),K=react.useCallback(()=>{let g=parseFloat(m);!Number.isFinite(g)||g<0?(f("0"),y("0")):g>100&&(f("100"),a>0&&y(t?.quantityRaw??String(a)));},[m,a,t?.quantityRaw]),z=react.useCallback(g=>{let S=Number(g.target.value);if(f(String(S)),a>0){let q=a*(S/100);y(S===100?t?.quantityRaw??String(a):q>0?String(Number(q.toPrecision(6))):"0");}},[a,t?.quantityRaw]),A=react.useCallback(g=>{h(Yr(g.target.value));},[]),O=react.useCallback(g=>{(g.key==="-"||g.key==="+"||g.key==="e"||g.key==="E")&&(g.preventDefault(),g.stopPropagation());},[]),W=r==="limit",J=parseFloat(T),Se=W&&Number.isFinite(J)&&J>0,G=D>0&&(!W||Se)&&!s,ve=react.useCallback(async()=>{G&&await i(D,W?J:void 0);},[G,i,D,W,J]),le=walletConnector.useAuthCallback(ve),ie=W?o("perpetuals.positions.close.limitTitle",{side:c,size:l,symbol:u}):o("perpetuals.positions.close.marketTitle",{side:c,size:l,symbol:u}),ze=o(W?"perpetuals.positions.close.limitDesc":"perpetuals.positions.close.marketDesc"),ee=o(W?"perpetuals.positions.close.confirmLimit":"perpetuals.positions.close.confirmMarket"),We=t?.markPrice&&t.markPrice>0?String(t.markPrice):"";return jsxRuntime.jsx(ui.StyledModal,{isOpen:e,onOpenChange:g=>{s||g||n();},size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:"!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]",body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-sm font-semibold text-white m-0",children:ie}),jsxRuntime.jsx("button",{type:"button",onClick:n,disabled:s,"aria-label":"Close",className:"p-1 rounded-[10px] hover:bg-[rgba(39,39,42,0.5)] text-zinc-400 hover:text-white transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-1 flex flex-col gap-4",children:[jsxRuntime.jsx("p",{className:"text-[13px] text-zinc-400 leading-[18px] m-0",children:ze}),W&&jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:o("perpetuals.positions.close.price")}),jsxRuntime.jsx("input",{ref:R,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,placeholder:We?o("perpetuals.positions.close.currentPrice",{price:We}):"0.0",value:T,onChange:A,onKeyDownCapture:O,className:"w-full bg-transparent outline-none",style:{color:"#ffffff",fontSize:14,height:40,padding:"0 12px",border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,fontVariantNumeric:"tabular-nums"}})]}),jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:o("perpetuals.positions.close.size")}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"%"})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-1",style:{border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,height:40,padding:"0 12px"},children:[jsxRuntime.jsx("input",{ref:C,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,value:d,onChange:b,onBlur:L,onKeyDownCapture:O,className:"flex-1 min-w-0 bg-transparent border-none outline-none",style:{color:"#ffffff",fontSize:14,fontVariantNumeric:"tabular-nums",padding:0}}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginLeft:8,flexShrink:0},children:"$"})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{border:"1px solid rgba(39,39,42,0.8)",borderRadius:8,height:40,padding:"0 12px",width:80},children:[jsxRuntime.jsx("input",{ref:v,type:"text",inputMode:"decimal",pattern:"[0-9.]*",autoComplete:"off",autoCorrect:"off",spellCheck:false,value:m,onChange:V,onBlur:K,onKeyDownCapture:O,className:"flex-1 min-w-0 bg-transparent border-none outline-none text-right",style:{color:"#ffffff",fontSize:14,fontVariantNumeric:"tabular-nums",padding:0}}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginLeft:4,flexShrink:0},children:"%"})]})]}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginTop:2},children:o("perpetuals.positions.close.maxSize",{size:l,symbol:u})})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("style",{children:`
|
|
26
|
+
.perp-close-slider { -webkit-appearance: none; appearance: none; background: transparent; cursor: pointer; width: 100%; height: 16px; --pct: 0%; --fill: ${mt}; --track: rgba(39,39,42,0.8); }
|
|
27
27
|
.perp-close-slider::-webkit-slider-runnable-track {
|
|
28
28
|
height: 4px; border-radius: 2px;
|
|
29
29
|
background: linear-gradient(to right, var(--fill) 0, var(--fill) var(--pct), var(--track) var(--pct), var(--track) 100%);
|
|
30
30
|
}
|
|
31
|
-
.perp-close-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 12px; height: 12px; border-radius: 50%; background: ${
|
|
31
|
+
.perp-close-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 12px; height: 12px; border-radius: 50%; background: ${mt}; margin-top: -4px; border: none; box-shadow: 0 0 0 2px rgba(0,0,0,0.6); }
|
|
32
32
|
.perp-close-slider::-moz-range-track { height: 4px; border-radius: 2px; background: rgba(39,39,42,0.8); border: none; }
|
|
33
|
-
.perp-close-slider::-moz-range-progress { height: 4px; border-radius: 2px; background: ${
|
|
34
|
-
.perp-close-slider::-moz-range-thumb { width: 12px; height: 12px; border-radius: 50%; background: ${
|
|
33
|
+
.perp-close-slider::-moz-range-progress { height: 4px; border-radius: 2px; background: ${mt}; }
|
|
34
|
+
.perp-close-slider::-moz-range-thumb { width: 12px; height: 12px; border-radius: 50%; background: ${mt}; border: none; box-shadow: 0 0 0 2px rgba(0,0,0,0.6); }
|
|
35
35
|
.perp-close-slider:disabled { cursor: not-allowed; opacity: 0.5; }
|
|
36
|
-
`}),jsxRuntime.jsx("input",{type:"range",value:Math.round(I),onChange:$,min:0,max:100,step:1,disabled:a<=0,className:"perp-close-slider",style:{"--pct":`${Math.round(I)}%`}}),jsxRuntime.jsxs("div",{className:"flex justify-between",style:{fontSize:10,color:"#b5b5b5",marginTop:4},children:[jsxRuntime.jsx("span",{children:"0%"}),jsxRuntime.jsx("span",{children:"25%"}),jsxRuntime.jsx("span",{children:"50%"}),jsxRuntime.jsx("span",{children:"75%"}),jsxRuntime.jsx("span",{children:"100%"})]})]}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{se();},disabled:!V,className:"w-full transition-colors disabled:cursor-not-allowed flex items-center justify-center gap-2",style:{marginTop:4,height:44,fontSize:14,fontWeight:600,color:"#000000",backgroundColor:V?dt:"rgba(63,63,70,0.6)",borderRadius:9999,border:"none",cursor:V?"pointer":"not-allowed",opacity:V?1:.9},children:[s&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),s?"Closing...":oe]})]})]})})})}function Zr({userAddress:e,onCloseSuccess:t,onCloseError:r,onPlaceOrder:s}){let[n,i]=react.useState(false),[o,a]=react.useState(null),[l,u]=react.useState("market"),{mutateAsync:p,isPending:c}=ot({onSuccess:()=>{i(false),a(null),t?.();},onError:x=>{r?.(x);}}),d=react.useCallback(x=>{a(x),u("market"),i(true);},[]),y=react.useCallback(x=>{a(x),u("limit"),i(true);},[]),m=react.useCallback(()=>{c||(i(false),a(null));},[c]),f=react.useCallback(async(x,h)=>{if(!o||!e)throw new Error("Position and user address are required");let P=o.side==="long"?"short":"long",S=l==="limit"?"limit":"market",N={symbol:o.symbol,side:P,orderType:S,amount:x,price:S==="limit"?h:void 0,leverage:o.leverage,reduceOnly:true,userAddress:e};if(s){await s(N),i(false),a(null),t?.();return}await p(N);},[o,e,l,s,p,t]);return {isModalOpen:n,selectedPosition:o,closeType:l,isClosing:c,openMarketClose:d,openLimitClose:y,handleConfirm:f,closeModal:m}}function ei(e,t){switch(t){case "asset":return e.symbol.split("-")[0];case "position":return Math.abs(e.quantity);case "value":return e.notionalValue;case "entry":return e.entryPrice;case "mark":return e.markPrice;case "liq":return e.liquidationPrice??null;case "marginPnl":return e.margin}}function wl(e,t,r,s){let n=ei(e,r),i=ei(t,r);if(n===null&&i===null)return 0;if(n===null)return 1;if(i===null)return -1;let o;return typeof n=="string"&&typeof i=="string"?o=n.localeCompare(i):o=n-i,s==="asc"?o:-o}function es({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n}){let[i,o]=react.useState("marginPnl"),[a,l]=react.useState("desc"),u=react.useCallback(x=>{o(h=>h===x?(l(P=>P==="asc"?"desc":"asc"),h):(l("asc"),x));},[]),{data:p,isLoading:c,error:d}=it({userAddress:e,symbol:t},{enabled:!!e}),y=Zr({userAddress:e,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n}),m=react.useMemo(()=>p?.positions??[],[p]);return {positions:react.useMemo(()=>i?[...m].sort((x,h)=>wl(x,h,i,a)):m,[m,i,a]),isLoading:c,error:d,sortKey:i,sortDir:a,onSort:u,closePosition:y}}var kl={start:"justify-start",center:"justify-center",end:"justify-end"},fe={minHeight:28,maxHeight:28},Mt={minHeight:36,maxHeight:36},Je={backgroundColor:"rgba(255, 255, 255, 0.06)"};function ne(e){if(e===void 0||!Number.isFinite(e))return "--";let t=Math.abs(e),r;return t>=1e4?r=0:t>=1e3?r=1:t>=1?r=2:t>=.01?r=4:r=6,"$"+e.toLocaleString("en-US",{minimumFractionDigits:r,maximumFractionDigits:r})}function Be(e){return Number.isFinite(e)?"$"+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--"}function It(e){return Number.isFinite(e)?Math.abs(e)<.005?"+$0":(e>=0?"+":"-")+"$"+Math.abs(e).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--"}function si(e){return Number.isFinite(e)?Math.abs(e).toFixed(2)+"%":"--"}function Ze(e,t){return t||(Number.isFinite(e)?e.toFixed(5).replace(/\.?0+$/,""):"--")}function Lt(e){if(e===void 0||!Number.isFinite(e))return "--";let t=new Date(e);if(Number.isNaN(t.getTime()))return "--";let r=t.getFullYear(),s=t.getMonth()+1,n=t.getDate(),i=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),a=String(t.getSeconds()).padStart(2,"0");return `${r}/${s}/${n} ${i}:${o}:${a}`}function L({style:e,children:t,sortKey:r,activeSortKey:s,sortDir:n,onSort:i,align:o="start"}){let l=r!==void 0&&r===s?n==="asc"?" \u2191":" \u2193":"",u=r!==void 0&&i!==void 0,p=kl[o],c=jsxRuntime.jsxs("span",{className:"text-xs font-normal text-default-500",children:[t,l]});return u?jsxRuntime.jsx("button",{type:"button",onClick:()=>i?.(r),style:e,className:ui.cn("flex flex-row items-center cursor-pointer hover:text-foreground",p),children:c}):jsxRuntime.jsx("div",{style:e,className:ui.cn("flex flex-row items-center",p),children:c})}var Y={asset:{flex:"0.8 1 0%"},position:{flex:"1.2 1 0%"},value:{flex:"0.8 1 0%"},entry:{flex:"0.8 1 0%"},mark:{flex:"0.8 1 0%"},liq:{flex:"0.8 1 0%"},marginPnl:{flex:"1.5 1 0%"},tpsl:{flex:"0.8 1 0%"},close:{flex:"0.8 1 0%"}},Ft={minWidth:1e3};function ts({positions:e,sortKey:t,sortDir:r,onSort:s,onMarketClose:n,onLimitClose:i,isClosing:o,className:a}){let{t:l}=i18n.useTranslation(),u=jsxRuntime.jsxs("div",{style:fe,className:"flex flex-1 flex-row items-center justify-start border-default-200 px-4 sm:border-b",children:[jsxRuntime.jsx(L,{style:Y.asset,sortKey:"asset",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.asset")}),jsxRuntime.jsx(L,{style:Y.position,sortKey:"position",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.position")}),jsxRuntime.jsx(L,{style:Y.value,sortKey:"value",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.positionValue")}),jsxRuntime.jsx(L,{style:Y.entry,sortKey:"entry",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.entryPrice")}),jsxRuntime.jsx(L,{style:Y.mark,sortKey:"mark",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.markPrice")}),jsxRuntime.jsx(L,{style:Y.liq,sortKey:"liq",activeSortKey:t,sortDir:r,onSort:s,children:jsxRuntime.jsx(ui.StyledTooltip,{content:l("perpetuals.positions.tooltip.liqPrice"),placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsxs("span",{className:"border-b border-dashed border-default-500/40",children:[jsxRuntime.jsx("span",{className:"hidden sm:inline",children:l("perpetuals.positions.col.liqPrice")}),jsxRuntime.jsx("span",{className:"inline sm:hidden",children:l("perpetuals.positions.col.liqPriceShort")})]})})}),jsxRuntime.jsx(L,{style:Y.marginPnl,sortKey:"marginPnl",activeSortKey:t,sortDir:r,onSort:s,children:jsxRuntime.jsx(ui.StyledTooltip,{content:l("perpetuals.positions.tooltip.marginPnl"),placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("span",{className:"border-b border-dashed border-default-500/40",children:l("perpetuals.positions.col.marginPnl")})})}),jsxRuntime.jsx(L,{style:Y.tpsl,align:"center",children:l("perpetuals.positions.col.tpsl")}),jsxRuntime.jsx(L,{style:Y.close,align:"end",children:l("perpetuals.positions.col.close")})]});return e.length===0?jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",a),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...Ft,...fe},className:"flex flex-1 flex-col",children:u}),jsxRuntime.jsx("div",{style:Ft,className:"flex flex-1 flex-col items-center justify-center py-6 text-xs text-default-700",children:l("perpetuals.positions.empty")})]})}):jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",a),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...Ft,...fe},className:"flex flex-1 flex-col",children:u}),jsxRuntime.jsx("div",{style:Ft,className:"flex flex-1 flex-col overflow-y-auto",children:e.map((p,c)=>jsxRuntime.jsx(Rl,{position:p,striped:c%2===1,isClosing:o,onMarketClose:n,onLimitClose:i},p.symbol))})]})})}function Rl({position:e,striped:t,isClosing:r,onMarketClose:s,onLimitClose:n}){let{t:i}=i18n.useTranslation(),o=e.symbol.split("-")[0],a=e.side==="long",l=i(a?"perpetuals.positions.long":"perpetuals.positions.short"),u=a?"text-bullish":"text-bearish",c=e.unrealizedPnl>=0?"text-bullish":"text-bearish";return jsxRuntime.jsx("div",{style:t?Je:void 0,children:jsxRuntime.jsxs("div",{style:Mt,className:"flex flex-1 flex-row items-center justify-start px-4",children:[jsxRuntime.jsxs("div",{style:Y.asset,className:"flex flex-row items-center justify-start gap-1.5",children:[jsxRuntime.jsx("img",{alt:o,src:`https://app.hyperliquid.xyz/coins/${o}.svg`,className:"rounded-full",style:{width:16,height:16},onError:d=>{d.currentTarget.style.display="none";}}),jsxRuntime.jsx("span",{className:"text-xs font-medium text-foreground",children:o})]}),jsxRuntime.jsxs("div",{style:Y.position,className:"flex flex-row items-center justify-start gap-1",children:[jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",u),children:l}),jsxRuntime.jsxs("span",{className:"text-xs font-normal text-default-700",children:[Ze(e.quantity,e.quantityRaw)," ",o]})]}),jsxRuntime.jsx("div",{style:Y.value,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:Be(e.notionalValue)})}),jsxRuntime.jsx("div",{style:Y.entry,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:ne(e.entryPrice)})}),jsxRuntime.jsx("div",{style:Y.mark,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:ne(e.markPrice)})}),jsxRuntime.jsx("div",{style:Y.liq,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:ne(e.liquidationPrice)})}),jsxRuntime.jsxs("div",{style:Y.marginPnl,className:"flex flex-row items-center justify-start gap-1",children:[jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:Be(e.margin)}),jsxRuntime.jsxs("span",{className:ui.cn("text-xs font-medium",c),children:["(",It(e.unrealizedPnl)," /"," ",si(e.unrealizedPnlPercent),")"]})]}),jsxRuntime.jsxs("div",{style:{...Y.tpsl,display:"grid",gridTemplateColumns:"1fr auto 1fr",alignItems:"center"},children:[jsxRuntime.jsx("span",{className:"pr-1 text-right text-xs font-normal text-default-700",children:e.takeProfitPrice!==void 0?ne(e.takeProfitPrice):"--"}),jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:"/"}),jsxRuntime.jsx("span",{className:"pl-1 text-left text-xs font-normal text-default-700",children:e.stopLossPrice!==void 0?ne(e.stopLossPrice):"--"})]}),jsxRuntime.jsxs("div",{style:Y.close,className:"flex flex-row items-center justify-end gap-2",children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>s(e),disabled:r,className:ui.cn("text-xs font-medium text-bearish","transition-opacity duration-150 ease-in-out","hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50"),children:i("perpetuals.positions.close.market")}),jsxRuntime.jsx("button",{type:"button",onClick:()=>n(e),disabled:r,className:ui.cn("text-xs font-medium text-bearish","transition-opacity duration-150 ease-in-out","hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50"),children:i("perpetuals.positions.close.limit")})]})]})})}function rs(){return jsxRuntime.jsxs("div",{className:"w-full space-y-4 p-4",children:[jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Al(){return jsxRuntime.jsx("div",{className:"flex h-24 items-center justify-center text-[14px] text-default-700",children:"No open positions"})}function Nl({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n,className:i}){let{positions:o,isLoading:a,sortKey:l,sortDir:u,onSort:p,closePosition:c}=es({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n});return a?jsxRuntime.jsx("div",{className:i,children:jsxRuntime.jsx(rs,{})}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(ts,{positions:o,sortKey:l,sortDir:u,onSort:p,onMarketClose:c.openMarketClose,onLimitClose:c.openLimitClose,isClosing:c.isClosing,className:i}),jsxRuntime.jsx(Xr,{isOpen:c.isModalOpen,position:c.selectedPosition,closeType:c.closeType,isSubmitting:c.isClosing,onClose:c.closeModal,onConfirm:c.handleConfirm})]})}function ai(e,t){switch(t){case "time":return e.timestamp;case "size":return e.quantity;case "asset":return e.symbol.split("-")[0];case "direction":return e.side;case "type":return e.orderType;case "leverage":return e.leverage??null;case "orderValue":return e.isTrigger?null:e.price*e.quantity;case "executePrice":return e.isTrigger?null:e.price;case "currentPrice":return e.markPrice??null}}function Ll(e,t,r,s){let n=ai(e,r),i=ai(t,r);if(n===null&&i===null)return 0;if(n===null)return 1;if(i===null)return -1;let o;return typeof n=="string"&&typeof i=="string"?o=n.localeCompare(i):o=n-i,s==="asc"?o:-o}function ss({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,cancelOrder:n,cancelOrders:i}){let[o,a]=react.useState("time"),[l,u]=react.useState("desc"),p=react.useCallback(D=>{a(T=>T===D?(u(ee=>ee==="asc"?"desc":"asc"),T):(u("asc"),D));},[]),{data:c,isLoading:d,error:y}=sr({userAddress:e,symbol:t},{enabled:!!e}),m=react.useRef(new Set),[,f]=react.useState(0),x=react.useCallback(()=>f(D=>D+1),[]),h=react.useCallback(D=>{m.current.add(D),x();},[x]),P=react.useCallback(D=>{m.current.delete(D),x();},[x]),[S,N]=react.useState(false),{mutateAsync:w,isPending:B}=lr({onSuccess:()=>{r?.();},onError:D=>{s?.(D);}}),I=react.useCallback(async D=>{if(n)try{let T=await n(D);return r?.(),T}catch(T){throw s?.(T instanceof Error?T:new Error(String(T))),T}if(i)try{let[T]=await i([D]);if(!T)throw new Error("cancelOrders returned no result");return r?.(),T}catch(T){throw s?.(T instanceof Error?T:new Error(String(T))),T}return w(D)},[n,i,w,r,s]),g=react.useMemo(()=>c?.orders??[],[c]),F=react.useMemo(()=>o?[...g].sort((D,T)=>Ll(D,T,o,l)):g,[g,o,l]),$=react.useCallback(async D=>{if(!e)throw new Error("User address is required");h(D.orderId);try{await I({orderId:D.orderId,symbol:D.symbol,userAddress:e});}finally{P(D.orderId);}},[e,I,h,P]),z=react.useCallback(async()=>{if(!e)throw new Error("User address is required");if(g.length!==0){N(true);try{let D=g.map(T=>({orderId:T.orderId,symbol:T.symbol,userAddress:e}));if(i){try{await i(D);for(let T=0;T<D.length;T++)r?.();}catch(T){s?.(T instanceof Error?T:new Error(String(T)));}return}await Promise.allSettled(D.map(T=>I(T)));}finally{N(false);}}},[e,g,i,I,r,s]),H=m.current.size>0||S||B;return {orders:F,isLoading:d,error:y,sortKey:o,sortDir:l,onSort:p,handleCancelOrder:$,handleCancelAll:z,isCanceling:H,cancelingOrderIds:m.current,isCancelingAll:S}}var q={time:{flex:"1 1 0%",maxWidth:160},size:{flex:"1 1 0%",maxWidth:80},asset:{flex:"1 1 0%",maxWidth:70},direction:{flex:"1 1 0%",maxWidth:70},type:{flex:"1 1 0%",maxWidth:160},leverage:{flex:"1 1 0%",maxWidth:80},orderValue:{flex:"1 1 0%",maxWidth:100},executePrice:{flex:"1 1 0%",maxWidth:100},currentPrice:{flex:"1 1 0%",maxWidth:100},triggerCondition:{flex:"1 1 0%"},tpsl:{flex:"1 1 0%",maxWidth:120},cancel:{flex:"1 1 0%",maxWidth:70}},_t={minWidth:1100};function ql(e,t){let r=e.orderType==="limit";return e.isTrigger?e.triggerType==="tp"?r?"Take Profit Limit":"Take Profit Market":e.triggerType==="sl"?r?"Stop Limit":"Stop Market":r?"Limit":t:r?"Limit":t}function ns({orders:e,sortKey:t,sortDir:r,onSort:s,onCancelOrder:n,onCancelAll:i,cancelingOrderIds:o,isCancelingAll:a,className:l}){let{t:u}=i18n.useTranslation(),p=u("perpetuals.openOrders.market"),c=jsxRuntime.jsxs("div",{style:fe,className:"flex flex-1 flex-row items-center justify-start border-default-200 px-4 sm:border-b",children:[jsxRuntime.jsx(L,{style:q.time,sortKey:"time",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.time")}),jsxRuntime.jsx(L,{style:q.size,sortKey:"size",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.size")}),jsxRuntime.jsx(L,{style:q.asset,sortKey:"asset",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.asset")}),jsxRuntime.jsx(L,{style:q.direction,sortKey:"direction",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.direction")}),jsxRuntime.jsx(L,{style:q.type,sortKey:"type",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.type")}),jsxRuntime.jsx(L,{style:q.leverage,sortKey:"leverage",activeSortKey:t,sortDir:r,onSort:s,children:jsxRuntime.jsx(ui.StyledTooltip,{content:u("perpetuals.openOrders.tooltip.leverage"),placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("span",{className:"border-b border-dashed border-default-500/40",children:u("perpetuals.openOrders.col.leverage")})})}),jsxRuntime.jsx(L,{style:q.orderValue,sortKey:"orderValue",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.orderValue")}),jsxRuntime.jsx(L,{style:q.executePrice,sortKey:"executePrice",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.executePrice")}),jsxRuntime.jsx(L,{style:q.currentPrice,sortKey:"currentPrice",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.currentPrice")}),jsxRuntime.jsx(L,{style:q.triggerCondition,children:u("perpetuals.openOrders.col.triggerCondition")}),jsxRuntime.jsx(L,{style:q.tpsl,align:"center",children:u("perpetuals.openOrders.col.tpsl")}),jsxRuntime.jsx("div",{style:q.cancel,className:"flex flex-row items-center justify-center",children:jsxRuntime.jsx("button",{type:"button",onClick:i,disabled:a||e.length===0,className:ui.cn("inline-flex min-w-[60px] items-center justify-center gap-1","text-xs font-medium text-bearish","cursor-pointer transition-colors duration-150","hover:text-bearish/80 disabled:cursor-not-allowed disabled:opacity-50","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),children:a?jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}):u("perpetuals.openOrders.col.cancelAll")})})]});return e.length===0?jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",l),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{..._t,...fe},className:"flex flex-1 flex-col",children:c}),jsxRuntime.jsx("div",{style:_t,className:"flex flex-1 flex-col items-center justify-center py-6 text-xs text-default-700",children:u("perpetuals.openOrders.empty")})]})}):jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",l),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{..._t,...fe},className:"flex flex-1 flex-col",children:c}),jsxRuntime.jsx("div",{style:_t,className:"flex flex-1 flex-col overflow-y-auto",children:e.map((d,y)=>jsxRuntime.jsx(Hl,{order:d,striped:y%2===1,isThisRowCanceling:o.has(d.orderId),isBatchCanceling:a,marketLabel:p,onCancel:n},d.orderId))})]})})}function Hl({order:e,striped:t,isThisRowCanceling:r,isBatchCanceling:s,marketLabel:n,onCancel:i}){let{t:o}=i18n.useTranslation(),a=e.symbol.split("-")[0],l=e.side==="long",u=o(l?"perpetuals.openOrders.long":"perpetuals.openOrders.short"),p=l?"text-bullish":"text-bearish",c=ql(e,n),d=e.isTrigger?n:Be(e.price*e.quantity),y=e.isTrigger?n:ne(e.price);return jsxRuntime.jsx("div",{style:t?Je:void 0,children:jsxRuntime.jsxs("div",{style:Mt,className:"flex flex-1 flex-row items-center justify-start px-4",children:[jsxRuntime.jsx("div",{style:q.time,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:Lt(e.timestamp)})}),jsxRuntime.jsx("div",{style:q.size,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:Ze(e.quantity)})}),jsxRuntime.jsx("div",{style:q.asset,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-medium text-foreground",children:a})}),jsxRuntime.jsx("div",{style:q.direction,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",p),children:u})}),jsxRuntime.jsx("div",{style:q.type,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:c})}),jsxRuntime.jsx("div",{style:q.leverage,className:"flex flex-row items-center justify-start",children:e.leverage!==void 0?jsxRuntime.jsxs("span",{className:ui.cn("inline-flex flex-row items-center justify-start gap-1","rounded p-1 bg-default-200/50","text-xs font-normal text-default-700"),style:{height:18},children:[e.leverage,"x"]}):jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:"--"})}),jsxRuntime.jsx("div",{style:q.orderValue,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:d})}),jsxRuntime.jsx("div",{style:q.executePrice,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:y})}),jsxRuntime.jsx("div",{style:q.currentPrice,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:ne(e.markPrice)})}),jsxRuntime.jsx("div",{style:q.triggerCondition,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:e.triggerCondition??"--"})}),jsxRuntime.jsxs("div",{style:{...q.tpsl,display:"grid",gridTemplateColumns:"1fr auto 1fr",alignItems:"center"},children:[jsxRuntime.jsx("span",{className:"pr-1 text-right text-xs font-normal text-default-700",children:e.takeProfitPrice!==void 0?ne(e.takeProfitPrice):"--"}),jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:"/"}),jsxRuntime.jsx("span",{className:"pl-1 text-left text-xs font-normal text-default-700",children:e.stopLossPrice!==void 0?ne(e.stopLossPrice):"--"})]}),jsxRuntime.jsx("div",{style:q.cancel,className:"flex flex-row items-center justify-end gap-1",children:jsxRuntime.jsx("button",{type:"button",onClick:()=>i(e),disabled:r||s,"aria-label":o("perpetuals.openOrders.cancelOne.aria"),"aria-busy":r||void 0,className:ui.cn("inline-flex items-center justify-center rounded p-1","cursor-pointer text-bearish transition-colors duration-150 ease-in-out","hover:bg-bearish/10","disabled:cursor-not-allowed disabled:opacity-50","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),style:{height:24,width:24},children:r?jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current",style:{transform:"scale(0.6)"}}):jsxRuntime.jsx("svg",{viewBox:"0 0 14 14",width:12,height:12,fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":"true",children:jsxRuntime.jsx("path",{d:"M3 3 L11 11 M11 3 L3 11"})})})})]})})}function _l(){return jsxRuntime.jsxs("div",{className:"w-full space-y-4 p-4",children:[jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Bl(){return jsxRuntime.jsx("div",{className:"flex h-24 items-center justify-center text-[14px] text-default-700",children:"No open orders"})}function Gl({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,cancelOrder:n,cancelOrders:i,className:o}){let{t:a}=i18n.useTranslation(),{orders:l,sortKey:u,sortDir:p,onSort:c,handleCancelOrder:d,handleCancelAll:y,cancelingOrderIds:m,isCancelingAll:f}=ss({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,cancelOrder:n,cancelOrders:i}),[x,h]=react.useState(false),P=react.useCallback(()=>{l.length!==0&&h(true);},[l.length]),S=react.useCallback(()=>{f||h(false);},[f]),N=react.useCallback(async()=>{try{await y();}finally{h(false);}},[y]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(ns,{className:o,orders:l,sortKey:u,sortDir:p,onSort:c,onCancelOrder:d,onCancelAll:P,cancelingOrderIds:m,isCancelingAll:f}),jsxRuntime.jsx(ui.StyledModal,{isOpen:x,onOpenChange:w=>{f||w||S();},size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:ui.cn("!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)]","!shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]"),body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-base font-semibold text-white m-0",children:a("perpetuals.openOrders.cancelAll.confirmTitle")}),jsxRuntime.jsx("button",{type:"button",onClick:S,disabled:f,"aria-label":"Close",className:ui.cn("p-1 rounded-[10px] cursor-pointer","hover:bg-[rgba(39,39,42,0.5)]","text-zinc-400 hover:text-white transition-colors","disabled:cursor-not-allowed disabled:opacity-50","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-2 flex flex-col gap-4",children:[jsxRuntime.jsx("p",{className:"text-[13px] text-zinc-400 leading-[18px] m-0",children:a("perpetuals.openOrders.cancelAll.confirmBody")}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{N();},disabled:f,className:ui.cn("cursor-pointer mt-1 w-full h-12 rounded-[12px]","font-medium text-white","bg-bearish hover:bg-bearish/90 active:bg-bearish/80","transition-colors flex items-center justify-center gap-2","disabled:bg-[#3f3f46] disabled:text-zinc-500 disabled:cursor-not-allowed","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),children:[f&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),a(f?"perpetuals.openOrders.cancelAll.confirming":"perpetuals.openOrders.cancelAll.confirm")]})]})]})})})]})}function di(e,t){switch(t){case "time":return e.timestamp;case "size":return e.quantity;case "asset":return e.symbol.split("-")[0];case "description":return e.dir??null;case "price":return e.price;case "tradeValue":return e.price*e.quantity;case "closedPnl":return e.closedPnl??null}}function Xl(e,t,r,s){let n=di(e,r),i=di(t,r);if(n===null&&i===null)return 0;if(n===null)return 1;if(i===null)return -1;let o;return typeof n=="string"&&typeof i=="string"?o=n.localeCompare(i):o=n-i,s==="asc"?o:-o}function as({userAddress:e,symbol:t}){let[r,s]=react.useState("time"),[n,i]=react.useState("desc"),o=react.useCallback(d=>{s(y=>y===d?(i(m=>m==="asc"?"desc":"asc"),y):(i("desc"),d));},[]),{data:a,isLoading:l,error:u}=nr({userAddress:e,symbol:t},{enabled:!!e,staleTime:5e3}),p=react.useMemo(()=>a?.trades??[],[a]);return {trades:react.useMemo(()=>[...p].sort((d,y)=>Xl(d,y,r,n)),[p,r,n]),isLoading:l,error:u,sortKey:r,sortDir:n,onSort:o}}var re={time:{flex:"1 1 0%",maxWidth:200},size:{flex:"1 1 0%",maxWidth:80},asset:{flex:"1 1 0%",maxWidth:100},description:{flex:"1 1 0%",maxWidth:300},price:{flex:"1 1 0%"},tradeValue:{flex:"1 1 0%"},closedPnl:{flex:"1 1 0%"}},us={minWidth:1100},su=48,mi={minHeight:36,maxHeight:36,padding:"0 16px"};function nu(e){return e?!!(/^Open\s+Long\b/i.test(e)||/^Close\s+Short\b/i.test(e)):false}function ps({trades:e,sortKey:t,sortDir:r,onSort:s,className:n}){let{t:i}=i18n.useTranslation(),o=jsxRuntime.jsxs("div",{style:fe,className:"flex flex-1 flex-row items-center justify-start border-default-200 px-4 sm:border-b",children:[jsxRuntime.jsx(L,{style:re.time,sortKey:"time",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.time")}),jsxRuntime.jsx(L,{style:re.size,sortKey:"size",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.size")}),jsxRuntime.jsx(L,{style:re.asset,sortKey:"asset",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.asset")}),jsxRuntime.jsx(L,{style:re.description,sortKey:"description",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.description")}),jsxRuntime.jsx(L,{style:re.price,sortKey:"price",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.price")}),jsxRuntime.jsx(L,{style:re.tradeValue,sortKey:"tradeValue",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.tradeValue")}),jsxRuntime.jsx(L,{style:re.closedPnl,sortKey:"closedPnl",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.closedPnl")})]});return jsxRuntime.jsx("div",{className:ui.cn("flex h-full w-full min-w-0 flex-col overflow-hidden bg-transparent",n),children:jsxRuntime.jsxs("div",{className:"flex flex-1 min-h-0 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...us,...fe},className:"flex flex-none flex-col",children:o}),e.length===0?jsxRuntime.jsx("div",{style:us,className:"flex flex-1 min-h-0 flex-col items-center justify-center py-6 text-xs text-default-700",children:i("perpetuals.tradeHistory.empty")}):jsxRuntime.jsx(iu,{trades:e})]})})}function iu({trades:e}){let t=react.useRef(null),{height:r=0}=hooks.useResizeObserver({ref:t}),s=react.useMemo(()=>({trades:e}),[e]);return jsxRuntime.jsx("div",{ref:t,style:us,className:"flex flex-1 min-h-0 flex-col overflow-y-auto",children:r>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:r},rowComponent:ou,rowCount:e.length,rowHeight:su,rowProps:s,overscanCount:4})})}function ou({index:e,style:t,trades:r}){let s=r[e];if(!s)return null;let n=e%2===1,i=s.symbol.split("-")[0],o=s.price*s.quantity,a=s.closedPnl??0,l=nu(s.dir),u=s.dir??"",p=l?"text-bullish":"text-bearish",c=a>=0?"text-bullish":"text-bearish";return jsxRuntime.jsx("div",{style:t,children:jsxRuntime.jsxs("div",{style:n?{...mi,...Je}:mi,className:"flex flex-1 flex-row items-center justify-start",children:[jsxRuntime.jsx("div",{style:re.time,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:Lt(s.timestamp)})}),jsxRuntime.jsx("div",{style:re.size,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:Ze(s.quantity)})}),jsxRuntime.jsx("div",{style:re.asset,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-medium text-foreground",children:i})}),jsxRuntime.jsx("div",{style:re.description,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:ui.cn("text-xs font-normal",p),children:u})}),jsxRuntime.jsx("div",{style:re.price,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"font-normal text-default-700",style:{fontSize:11,lineHeight:"16px"},children:ne(s.price)})}),jsxRuntime.jsx("div",{style:re.tradeValue,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:Be(o)})}),jsxRuntime.jsx("div",{style:re.closedPnl,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",c),children:It(a)})})]})})}function au(){return jsxRuntime.jsxs("div",{className:"w-full space-y-4 p-4",children:[jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function lu(){return jsxRuntime.jsx("div",{className:"flex h-24 items-center justify-center text-[14px] text-default-700",children:"No trades"})}function uu({userAddress:e,symbol:t,className:r}){let{trades:s,sortKey:n,sortDir:i,onSort:o}=as({userAddress:e,symbol:t});return jsxRuntime.jsx(ps,{className:r,trades:s,sortKey:n,sortDir:i,onSort:o})}var cu=1000000000n,du=8,mu=10n**BigInt(8);function ft(e,t=4){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return fi(r,cu,t)}function Qt(e,t=2){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return fi(r,mu,t)}var fu=Qt;function cs(e){if(!e)return "0";let[t,r=""]=e.replace(/[\s,]/g,"").split(".");if(!/^\d*$/.test(t)||!/^\d*$/.test(r))return "0";let s=(r+"000000000").slice(0,9),n=`${t||"0"}${s}`.replace(/^0+(?=\d)/,"");return n===""?"0":n}function fi(e,t,r){let s=e<0n,n=s?-e:e,i=n/t,o=n%t;if(r<=0)return o*2n>=t&&(i+=1n),`${s?"-":""}${i.toString()}`;let a=10n**BigInt(r),l=(o*a+t/2n)/t;l>=a&&(i+=1n,l=0n);let u=l.toString().padStart(r,"0");return u=u.replace(/0+$/,""),u?`${s?"-":""}${i.toString()}.${u}`:`${s?"-":""}${i.toString()}`}function yt(e,t=Date.now()){return Math.max(0,Math.floor((e-t)/1e3))}function ds(e,t=6,r=4){return e?e.length<=t+r+1?e:`${e.slice(0,t)}\u2026${e.slice(-r)}`:""}function ms({isOpen:e,quote:t,isExecuting:r,isExpired:s,onConfirm:n,onCancel:i,onExpire:o,error:a}){let{t:l}=i18n.useTranslation(),u=t?Date.parse(t.expiresAt):0,[p,c]=react.useState(()=>u?yt(u):0);return react.useEffect(()=>{if(!e||!u)return;c(yt(u));let d=setInterval(()=>{let y=yt(u);c(y),y===0&&(o?.(),clearInterval(d));},1e3);return ()=>clearInterval(d)},[e,u,o]),jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:d=>!d&&i(),hideCloseButton:true,backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:l("perpDeposit.confirm.title")}),jsxRuntime.jsxs(ui.ModalBody,{children:[t?jsxRuntime.jsx(Cu,{breakdown:t.breakdown}):jsxRuntime.jsx("div",{className:"flex h-32 items-center justify-center",children:jsxRuntime.jsx(ui.Spinner,{})}),t&&!s&&jsxRuntime.jsx("div",{className:"text-default-500 mt-4 text-xs",children:l("perpDeposit.confirm.expiresIn",{seconds:p})}),s&&jsxRuntime.jsx("div",{className:"text-warning-500 mt-4 text-xs",children:l("perpDeposit.confirm.expired")}),a&&jsxRuntime.jsx("div",{className:"text-danger mt-4 text-xs",children:a})]}),jsxRuntime.jsxs(ui.ModalFooter,{className:"flex justify-between gap-2",children:[jsxRuntime.jsx(ui.Button,{variant:"flat",color:"default",onPress:i,isDisabled:r,children:l("perpDeposit.confirm.cancel")}),jsxRuntime.jsx(ui.Button,{color:"primary",onPress:n,isDisabled:!t||r||s,isLoading:r,children:l("perpDeposit.confirm.cta")})]})]})})}function Cu({breakdown:e}){let{t}=i18n.useTranslation();return jsxRuntime.jsxs("dl",{className:"flex flex-col gap-2 text-sm",children:[jsxRuntime.jsx(Kt,{label:t("perpDeposit.confirm.send"),value:`${ft(e.grossLamports)} SOL`}),jsxRuntime.jsx(Kt,{label:t("perpDeposit.confirm.receive"),value:`${Qt(e.expectedOutputUSDC)} USDC`,highlight:true}),jsxRuntime.jsx(Kt,{label:t("perpDeposit.confirm.platformFee"),value:`${ft(e.platformFeeLamports,6)} SOL`,muted:true}),jsxRuntime.jsx(Kt,{label:t("perpDeposit.confirm.relayFee"),value:`${ft(e.relayDepositLamports,6)} SOL`,muted:true})]})}function Kt({label:e,value:t,highlight:r,muted:s}){return jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsx("dt",{className:"text-default-500",children:e}),jsxRuntime.jsx("dd",{className:r?"text-foreground text-base font-semibold":s?"text-default-500 text-xs":"text-foreground",children:t})]})}function fs({amount:e,onAmountChange:t,recipient:r,onRecipientChange:s,balanceSol:n,disabled:i,amountError:o,recipientError:a,onMax:l,className:u}){let{t:p}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("flex flex-col gap-4",u),children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[jsxRuntime.jsx("label",{htmlFor:"perp-deposit-amount",className:"text-sm font-medium text-foreground",children:p("perpDeposit.amount")}),n&&jsxRuntime.jsx("span",{className:"text-xs text-default-500",children:p("perpDeposit.amount.balance",{balance:n})})]}),jsxRuntime.jsx("div",{className:"relative",children:jsxRuntime.jsx(ui.Input,{id:"perp-deposit-amount",type:"text",inputMode:"decimal",placeholder:p("perpDeposit.amount.placeholder"),value:e,onValueChange:t,isDisabled:i,isInvalid:!!o,errorMessage:o,endContent:jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("span",{className:"text-default-500 text-sm",children:p("perpDeposit.amount.unit")}),n&&l&&jsxRuntime.jsx(ui.Button,{size:"sm",variant:"flat",color:"primary",onPress:l,isDisabled:i,children:p("perpDeposit.amount.max")})]})})})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"perp-deposit-recipient",className:"text-sm font-medium text-foreground mb-1.5 block",children:p("perpDeposit.recipient")}),jsxRuntime.jsx(ui.Input,{id:"perp-deposit-recipient",type:"text",placeholder:p("perpDeposit.recipient.placeholder"),value:r,onValueChange:s,isDisabled:i,isInvalid:!!a,errorMessage:a,autoComplete:"off",spellCheck:"false"})]})]})}var xi="#C7FF2E";function gs({isOpen:e,phase:t,status:r,solanaExplorerUrl:s,hyperliquidExplorerUrl:n,onRetry:i,onClose:o,errorMessage:a}){let{t:l}=i18n.useTranslation(),u=Uu(t),p=t==="failed"?a||(r?.lastError?.message?l("perpDeposit.status.failed",{message:r.lastError.message}):l("perpDeposit.status.failed",{message:""})):t==="succeeded"?l("perpDeposit.status.settled"):t==="refunded"?l("perpDeposit.status.refunded"):r?.status==="broadcasted"?l("perpDeposit.status.broadcasted"):r?.status==="relay_waiting"?l("perpDeposit.status.relay_waiting"):r?.status==="relay_pending"?l("perpDeposit.status.relay_pending"):r?.status==="stuck"?l("perpDeposit.status.stuck"):l("perpDeposit.status.broadcasted"),c=t==="failed"&&!!i;return jsxRuntime.jsx(ui.StyledModal,{isOpen:e,onOpenChange:d=>!d&&o(),size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:"!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]",body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-start justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("div",{className:"flex items-center gap-2.5",children:jsxRuntime.jsx("h3",{className:"text-base font-semibold text-white",children:l("perpDeposit.status.title")})}),jsxRuntime.jsx("button",{type:"button",onClick:o,className:"cursor-pointer p-1 rounded-[10px] hover:bg-[rgba(39,39,42,0.5)] text-zinc-400 hover:text-white transition-colors","aria-label":l("perpDeposit.status.close"),children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-3 pt-2",children:[jsxRuntime.jsxs("div",{className:"rounded-[12px] bg-[#0a0a0b] border border-[#27272a] px-4 py-6 flex flex-col items-center text-center gap-4",children:[jsxRuntime.jsx(Au,{variant:u}),jsxRuntime.jsx("p",{className:ui.cn("text-sm leading-relaxed max-w-[320px]",Mu(u)),children:p})]}),(r?.solanaTxHash||r?.hyperliquidTxHash)&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col gap-2",children:[r?.solanaTxHash&&s&&jsxRuntime.jsx(hi,{href:s,label:l("perpDeposit.status.viewSolanaTx"),hash:r.solanaTxHash}),r?.hyperliquidTxHash&&n&&jsxRuntime.jsx(hi,{href:n,label:l("perpDeposit.status.viewHyperliquidTx"),hash:r.hyperliquidTxHash})]})]}),jsxRuntime.jsxs("div",{className:ui.cn("px-5 pb-5 pt-2 flex gap-2",c?"justify-between":"justify-end"),children:[c&&jsxRuntime.jsx("button",{type:"button",onClick:i,className:"cursor-pointer flex-1 h-10 rounded-[10px] font-medium text-black bg-[#C7FF2E] hover:bg-[#b6ed1c] active:bg-[#a6d913] transition-colors flex items-center justify-center",children:l("perpDeposit.status.tryAgain")}),jsxRuntime.jsx("button",{type:"button",onClick:o,className:ui.cn("cursor-pointer h-10 rounded-[10px] font-medium transition-colors flex items-center justify-center",c?"flex-1 bg-[rgba(39,39,42,1)] hover:bg-[rgba(63,63,70,1)] text-white":"px-6 bg-[rgba(39,39,42,1)] hover:bg-[rgba(63,63,70,1)] text-white"),children:l("perpDeposit.status.close")})]})]})})})}function hi({href:e,label:t,hash:r}){return jsxRuntime.jsxs("a",{href:e,target:"_blank",rel:"noreferrer",className:"group flex items-center justify-between gap-2 px-3 py-2 rounded-[10px] bg-[#0a0a0b] border border-[#27272a] hover:border-[rgba(199,255,46,0.4)] transition-colors",children:[jsxRuntime.jsx("span",{className:"text-xs text-zinc-400 group-hover:text-white transition-colors",children:t}),jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-xs tabular-nums text-zinc-300 group-hover:text-[#C7FF2E] transition-colors",children:[ds(r,6,4),jsxRuntime.jsx(qu,{})]})]})}function Au({variant:e}){return e==="progress"?jsxRuntime.jsx("div",{className:"relative w-14 h-14 flex items-center justify-center",children:jsxRuntime.jsx(Nu,{})}):e==="success"?jsxRuntime.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(199,255,46,0.12)]",children:jsxRuntime.jsx(Iu,{className:"w-8 h-8",style:{color:xi}})}):e==="warning"?jsxRuntime.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(245,158,11,0.12)]",children:jsxRuntime.jsx(Lu,{className:"w-8 h-8 text-amber-400"})}):jsxRuntime.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(239,68,68,0.12)]",children:jsxRuntime.jsx(Fu,{className:"w-8 h-8 text-rose-400"})})}function Nu(){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("svg",{className:"lfi-perp-deposit-spinner",viewBox:"0 0 50 50",width:48,height:48,"aria-hidden":"true",children:[jsxRuntime.jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"rgba(255,255,255,0.08)",strokeWidth:"4"}),jsxRuntime.jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:xi,strokeWidth:"4",strokeLinecap:"round",strokeDasharray:"90 60"})]}),jsxRuntime.jsx("style",{children:`
|
|
36
|
+
`}),jsxRuntime.jsx("input",{type:"range",value:Math.round(M),onChange:z,min:0,max:100,step:1,disabled:a<=0,className:"perp-close-slider",style:{"--pct":`${Math.round(M)}%`}}),jsxRuntime.jsxs("div",{className:"flex justify-between",style:{fontSize:10,color:"#b5b5b5",marginTop:4},children:[jsxRuntime.jsx("span",{children:"0%"}),jsxRuntime.jsx("span",{children:"25%"}),jsxRuntime.jsx("span",{children:"50%"}),jsxRuntime.jsx("span",{children:"75%"}),jsxRuntime.jsx("span",{children:"100%"})]})]}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{le();},disabled:!G,className:"w-full transition-colors disabled:cursor-not-allowed flex items-center justify-center gap-2",style:{marginTop:4,height:44,fontSize:14,fontWeight:600,color:"#000000",backgroundColor:G?mt:"rgba(63,63,70,0.6)",borderRadius:9999,border:"none",cursor:G?"pointer":"not-allowed",opacity:G?1:.9},children:[s&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),s?"Closing...":ee]})]})]})})})}function Zr({userAddress:e,onCloseSuccess:t,onCloseError:r,onPlaceOrder:s}){let[n,i]=react.useState(false),[o,a]=react.useState(null),[l,u]=react.useState("market"),{data:p}=at({symbol:o?.symbol}),{mutateAsync:c,isPending:d}=reactQuery.useMutation({mutationFn:async h=>{if(!s)throw new Error("onPlaceOrder is not configured; cannot submit close order");return await s(h)},onSuccess:()=>{i(false),a(null),t?.();},onError:h=>{r?.(h);}}),y=react.useCallback(h=>{a(h),u("market"),i(true);},[]),m=react.useCallback(h=>{a(h),u("limit"),i(true);},[]),f=react.useCallback(()=>{d||(i(false),a(null));},[d]),T=react.useCallback(async(h,C)=>{if(!o||!e)throw new Error("Position and user address are required");let v=o.side==="long"?"short":"long",R=l==="limit"?"limit":"market",D=o.markPrice||o.entryPrice,F=p?.szDecimals??5;await c({symbol:o.symbol,side:v,orderType:R,amount:h*D,price:R==="limit"?C:void 0,leverage:o.leverage,reduceOnly:true,userAddress:e,size:h,refPrice:D,szDecimals:F});},[o,e,l,p,c]);return {isModalOpen:n,selectedPosition:o,closeType:l,isClosing:d,openMarketClose:y,openLimitClose:m,handleConfirm:T,closeModal:f}}function ei(e,t){switch(t){case "asset":return e.symbol.split("-")[0];case "position":return Math.abs(e.quantity);case "value":return e.notionalValue;case "entry":return e.entryPrice;case "mark":return e.markPrice;case "liq":return e.liquidationPrice??null;case "marginPnl":return e.margin}}function kl(e,t,r,s){let n=ei(e,r),i=ei(t,r);if(n===null&&i===null)return 0;if(n===null)return 1;if(i===null)return -1;let o;return typeof n=="string"&&typeof i=="string"?o=n.localeCompare(i):o=n-i,s==="asc"?o:-o}function es({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n}){let[i,o]=react.useState("marginPnl"),[a,l]=react.useState("desc"),u=react.useCallback(T=>{o(h=>h===T?(l(C=>C==="asc"?"desc":"asc"),h):(l("asc"),T));},[]),{data:p,isLoading:c,error:d}=ot({userAddress:e,symbol:t},{enabled:!!e}),y=Zr({userAddress:e,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n}),m=react.useMemo(()=>p?.positions??[],[p]);return {positions:react.useMemo(()=>i?[...m].sort((T,h)=>kl(T,h,i,a)):m,[m,i,a]),isLoading:c,error:d,sortKey:i,sortDir:a,onSort:u,closePosition:y}}var El={start:"justify-start",center:"justify-center",end:"justify-end"},fe={minHeight:28,maxHeight:28},It={minHeight:36,maxHeight:36},Ze={backgroundColor:"rgba(255, 255, 255, 0.06)"};function se(e){if(e===void 0||!Number.isFinite(e))return "--";let t=Math.abs(e),r;return t>=1e4?r=0:t>=1e3?r=1:t>=1?r=2:t>=.01?r=4:r=6,"$"+e.toLocaleString("en-US",{minimumFractionDigits:r,maximumFractionDigits:r})}function _e(e){return Number.isFinite(e)?"$"+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--"}function Lt(e){return Number.isFinite(e)?Math.abs(e)<.005?"+$0":(e>=0?"+":"-")+"$"+Math.abs(e).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--"}function si(e){return Number.isFinite(e)?Math.abs(e).toFixed(2)+"%":"--"}function et(e,t){return t||(Number.isFinite(e)?e.toFixed(5).replace(/\.?0+$/,""):"--")}function Ft(e){if(e===void 0||!Number.isFinite(e))return "--";let t=new Date(e);if(Number.isNaN(t.getTime()))return "--";let r=t.getFullYear(),s=t.getMonth()+1,n=t.getDate(),i=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),a=String(t.getSeconds()).padStart(2,"0");return `${r}/${s}/${n} ${i}:${o}:${a}`}function I({style:e,children:t,sortKey:r,activeSortKey:s,sortDir:n,onSort:i,align:o="start"}){let l=r!==void 0&&r===s?n==="asc"?" \u2191":" \u2193":"",u=r!==void 0&&i!==void 0,p=El[o],c=jsxRuntime.jsxs("span",{className:"text-xs font-normal text-default-500",children:[t,l]});return u?jsxRuntime.jsx("button",{type:"button",onClick:()=>i?.(r),style:e,className:ui.cn("flex flex-row items-center cursor-pointer hover:text-foreground",p),children:c}):jsxRuntime.jsx("div",{style:e,className:ui.cn("flex flex-row items-center",p),children:c})}var X={asset:{flex:"0.8 1 0%"},position:{flex:"1.2 1 0%"},value:{flex:"0.8 1 0%"},entry:{flex:"0.8 1 0%"},mark:{flex:"0.8 1 0%"},liq:{flex:"0.8 1 0%"},marginPnl:{flex:"1.5 1 0%"},tpsl:{flex:"0.8 1 0%"},close:{flex:"0.8 1 0%"}},qt={minWidth:1e3};function ts({positions:e,sortKey:t,sortDir:r,onSort:s,onMarketClose:n,onLimitClose:i,isClosing:o,className:a}){let{t:l}=i18n.useTranslation(),u=jsxRuntime.jsxs("div",{style:fe,className:"flex flex-1 flex-row items-center justify-start border-default-200 px-4 sm:border-b",children:[jsxRuntime.jsx(I,{style:X.asset,sortKey:"asset",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.asset")}),jsxRuntime.jsx(I,{style:X.position,sortKey:"position",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.position")}),jsxRuntime.jsx(I,{style:X.value,sortKey:"value",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.positionValue")}),jsxRuntime.jsx(I,{style:X.entry,sortKey:"entry",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.entryPrice")}),jsxRuntime.jsx(I,{style:X.mark,sortKey:"mark",activeSortKey:t,sortDir:r,onSort:s,children:l("perpetuals.positions.col.markPrice")}),jsxRuntime.jsx(I,{style:X.liq,sortKey:"liq",activeSortKey:t,sortDir:r,onSort:s,children:jsxRuntime.jsx(ui.StyledTooltip,{content:l("perpetuals.positions.tooltip.liqPrice"),placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsxs("span",{className:"border-b border-dashed border-default-500/40",children:[jsxRuntime.jsx("span",{className:"hidden sm:inline",children:l("perpetuals.positions.col.liqPrice")}),jsxRuntime.jsx("span",{className:"inline sm:hidden",children:l("perpetuals.positions.col.liqPriceShort")})]})})}),jsxRuntime.jsx(I,{style:X.marginPnl,sortKey:"marginPnl",activeSortKey:t,sortDir:r,onSort:s,children:jsxRuntime.jsx(ui.StyledTooltip,{content:l("perpetuals.positions.tooltip.marginPnl"),placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("span",{className:"border-b border-dashed border-default-500/40",children:l("perpetuals.positions.col.marginPnl")})})}),jsxRuntime.jsx(I,{style:X.tpsl,align:"center",children:l("perpetuals.positions.col.tpsl")}),jsxRuntime.jsx(I,{style:X.close,align:"end",children:l("perpetuals.positions.col.close")})]});return e.length===0?jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",a),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...qt,...fe},className:"flex flex-1 flex-col",children:u}),jsxRuntime.jsx("div",{style:qt,className:"flex flex-1 flex-col items-center justify-center py-6 text-xs text-default-700",children:l("perpetuals.positions.empty")})]})}):jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",a),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...qt,...fe},className:"flex flex-1 flex-col",children:u}),jsxRuntime.jsx("div",{style:qt,className:"flex flex-1 flex-col overflow-y-auto",children:e.map((p,c)=>jsxRuntime.jsx(Al,{position:p,striped:c%2===1,isClosing:o,onMarketClose:n,onLimitClose:i},p.symbol))})]})})}function Al({position:e,striped:t,isClosing:r,onMarketClose:s,onLimitClose:n}){let{t:i}=i18n.useTranslation(),o=e.symbol.split("-")[0],a=e.side==="long",l=i(a?"perpetuals.positions.long":"perpetuals.positions.short"),u=a?"text-bullish":"text-bearish",c=e.unrealizedPnl>=0?"text-bullish":"text-bearish";return jsxRuntime.jsx("div",{style:t?Ze:void 0,children:jsxRuntime.jsxs("div",{style:It,className:"flex flex-1 flex-row items-center justify-start px-4",children:[jsxRuntime.jsxs("div",{style:X.asset,className:"flex flex-row items-center justify-start gap-1.5",children:[jsxRuntime.jsx("img",{alt:o,src:`https://app.hyperliquid.xyz/coins/${o}.svg`,className:"rounded-full",style:{width:16,height:16},onError:d=>{d.currentTarget.style.display="none";}}),jsxRuntime.jsx("span",{className:"text-xs font-medium text-foreground",children:o})]}),jsxRuntime.jsxs("div",{style:X.position,className:"flex flex-row items-center justify-start gap-1",children:[jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",u),children:l}),jsxRuntime.jsxs("span",{className:"text-xs font-normal text-default-700",children:[et(e.quantity,e.quantityRaw)," ",o]})]}),jsxRuntime.jsx("div",{style:X.value,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:_e(e.notionalValue)})}),jsxRuntime.jsx("div",{style:X.entry,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:se(e.entryPrice)})}),jsxRuntime.jsx("div",{style:X.mark,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:se(e.markPrice)})}),jsxRuntime.jsx("div",{style:X.liq,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:se(e.liquidationPrice)})}),jsxRuntime.jsxs("div",{style:X.marginPnl,className:"flex flex-row items-center justify-start gap-1",children:[jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:_e(e.margin)}),jsxRuntime.jsxs("span",{className:ui.cn("text-xs font-medium",c),children:["(",Lt(e.unrealizedPnl)," /"," ",si(e.unrealizedPnlPercent),")"]})]}),jsxRuntime.jsxs("div",{style:{...X.tpsl,display:"grid",gridTemplateColumns:"1fr auto 1fr",alignItems:"center"},children:[jsxRuntime.jsx("span",{className:"pr-1 text-right text-xs font-normal text-default-700",children:e.takeProfitPrice!==void 0?se(e.takeProfitPrice):"--"}),jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:"/"}),jsxRuntime.jsx("span",{className:"pl-1 text-left text-xs font-normal text-default-700",children:e.stopLossPrice!==void 0?se(e.stopLossPrice):"--"})]}),jsxRuntime.jsxs("div",{style:X.close,className:"flex flex-row items-center justify-end gap-2",children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>s(e),disabled:r,className:ui.cn("text-xs font-medium text-bearish","transition-opacity duration-150 ease-in-out","hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50"),children:i("perpetuals.positions.close.market")}),jsxRuntime.jsx("button",{type:"button",onClick:()=>n(e),disabled:r,className:ui.cn("text-xs font-medium text-bearish","transition-opacity duration-150 ease-in-out","hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50"),children:i("perpetuals.positions.close.limit")})]})]})})}function rs(){return jsxRuntime.jsxs("div",{className:"w-full space-y-4 p-4",children:[jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Nl(){return jsxRuntime.jsx("div",{className:"flex h-24 items-center justify-center text-[14px] text-default-700",children:"No open positions"})}function Ul({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n,className:i}){let{positions:o,isLoading:a,sortKey:l,sortDir:u,onSort:p,closePosition:c}=es({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,onPlaceOrder:n});return a?jsxRuntime.jsx("div",{className:i,children:jsxRuntime.jsx(rs,{})}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(ts,{positions:o,sortKey:l,sortDir:u,onSort:p,onMarketClose:c.openMarketClose,onLimitClose:c.openLimitClose,isClosing:c.isClosing,className:i}),jsxRuntime.jsx(Xr,{isOpen:c.isModalOpen,position:c.selectedPosition,closeType:c.closeType,isSubmitting:c.isClosing,onClose:c.closeModal,onConfirm:c.handleConfirm})]})}function ai(e,t){switch(t){case "time":return e.timestamp;case "size":return e.quantity;case "asset":return e.symbol.split("-")[0];case "direction":return e.side;case "type":return e.orderType;case "leverage":return e.leverage??null;case "orderValue":return e.isTrigger?null:e.price*e.quantity;case "executePrice":return e.isTrigger?null:e.price;case "currentPrice":return e.markPrice??null}}function Fl(e,t,r,s){let n=ai(e,r),i=ai(t,r);if(n===null&&i===null)return 0;if(n===null)return 1;if(i===null)return -1;let o;return typeof n=="string"&&typeof i=="string"?o=n.localeCompare(i):o=n-i,s==="asc"?o:-o}function ss({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,cancelOrder:n,cancelOrders:i}){let[o,a]=react.useState("time"),[l,u]=react.useState("desc"),p=react.useCallback(A=>{a(O=>O===A?(u(W=>W==="asc"?"desc":"asc"),O):(u("asc"),A));},[]),{data:c,isLoading:d,error:y}=sr({userAddress:e,symbol:t},{enabled:!!e}),m=react.useRef(new Set),[,f]=react.useState(0),T=react.useCallback(()=>f(A=>A+1),[]),h=react.useCallback(A=>{m.current.add(A),T();},[T]),C=react.useCallback(A=>{m.current.delete(A),T();},[T]),[v,R]=react.useState(false),{mutateAsync:D,isPending:F}=lr({onSuccess:()=>{r?.();},onError:A=>{s?.(A);}}),M=react.useCallback(async A=>{if(n)try{let O=await n(A);return r?.(),O}catch(O){throw s?.(O instanceof Error?O:new Error(String(O))),O}if(i)try{let[O]=await i([A]);if(!O)throw new Error("cancelOrders returned no result");return r?.(),O}catch(O){throw s?.(O instanceof Error?O:new Error(String(O))),O}return D(A)},[n,i,D,r,s]),b=react.useMemo(()=>c?.orders??[],[c]),L=react.useMemo(()=>o?[...b].sort((A,O)=>Fl(A,O,o,l)):b,[b,o,l]),V=react.useCallback(async A=>{if(!e)throw new Error("User address is required");h(A.orderId);try{await M({orderId:A.orderId,symbol:A.symbol,userAddress:e});}finally{C(A.orderId);}},[e,M,h,C]),K=react.useCallback(async()=>{if(!e)throw new Error("User address is required");if(b.length!==0){R(true);try{let A=b.map(O=>({orderId:O.orderId,symbol:O.symbol,userAddress:e}));if(i){try{await i(A);for(let O=0;O<A.length;O++)r?.();}catch(O){s?.(O instanceof Error?O:new Error(String(O)));}return}await Promise.allSettled(A.map(O=>M(O)));}finally{R(false);}}},[e,b,i,M,r,s]),z=m.current.size>0||v||F;return {orders:L,isLoading:d,error:y,sortKey:o,sortDir:l,onSort:p,handleCancelOrder:V,handleCancelAll:K,isCanceling:z,cancelingOrderIds:m.current,isCancelingAll:v}}var H={time:{flex:"1 1 0%",maxWidth:160},size:{flex:"1 1 0%",maxWidth:80},asset:{flex:"1 1 0%",maxWidth:70},direction:{flex:"1 1 0%",maxWidth:70},type:{flex:"1 1 0%",maxWidth:160},leverage:{flex:"1 1 0%",maxWidth:80},orderValue:{flex:"1 1 0%",maxWidth:100},executePrice:{flex:"1 1 0%",maxWidth:100},currentPrice:{flex:"1 1 0%",maxWidth:100},triggerCondition:{flex:"1 1 0%"},tpsl:{flex:"1 1 0%",maxWidth:120},cancel:{flex:"1 1 0%",maxWidth:70}},Bt={minWidth:1100};function Hl(e,t){let r=e.orderType==="limit";return e.isTrigger?e.triggerType==="tp"?r?"Take Profit Limit":"Take Profit Market":e.triggerType==="sl"?r?"Stop Limit":"Stop Market":r?"Limit":t:r?"Limit":t}function ns({orders:e,sortKey:t,sortDir:r,onSort:s,onCancelOrder:n,onCancelAll:i,cancelingOrderIds:o,isCancelingAll:a,className:l}){let{t:u}=i18n.useTranslation(),p=u("perpetuals.openOrders.market"),c=jsxRuntime.jsxs("div",{style:fe,className:"flex flex-1 flex-row items-center justify-start border-default-200 px-4 sm:border-b",children:[jsxRuntime.jsx(I,{style:H.time,sortKey:"time",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.time")}),jsxRuntime.jsx(I,{style:H.size,sortKey:"size",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.size")}),jsxRuntime.jsx(I,{style:H.asset,sortKey:"asset",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.asset")}),jsxRuntime.jsx(I,{style:H.direction,sortKey:"direction",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.direction")}),jsxRuntime.jsx(I,{style:H.type,sortKey:"type",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.type")}),jsxRuntime.jsx(I,{style:H.leverage,sortKey:"leverage",activeSortKey:t,sortDir:r,onSort:s,children:jsxRuntime.jsx(ui.StyledTooltip,{content:u("perpetuals.openOrders.tooltip.leverage"),placement:"top",delay:200,closeDelay:0,children:jsxRuntime.jsx("span",{className:"border-b border-dashed border-default-500/40",children:u("perpetuals.openOrders.col.leverage")})})}),jsxRuntime.jsx(I,{style:H.orderValue,sortKey:"orderValue",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.orderValue")}),jsxRuntime.jsx(I,{style:H.executePrice,sortKey:"executePrice",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.executePrice")}),jsxRuntime.jsx(I,{style:H.currentPrice,sortKey:"currentPrice",activeSortKey:t,sortDir:r,onSort:s,children:u("perpetuals.openOrders.col.currentPrice")}),jsxRuntime.jsx(I,{style:H.triggerCondition,children:u("perpetuals.openOrders.col.triggerCondition")}),jsxRuntime.jsx(I,{style:H.tpsl,align:"center",children:u("perpetuals.openOrders.col.tpsl")}),jsxRuntime.jsx("div",{style:H.cancel,className:"flex flex-row items-center justify-center",children:jsxRuntime.jsx("button",{type:"button",onClick:i,disabled:a||e.length===0,className:ui.cn("inline-flex min-w-[60px] items-center justify-center gap-1","text-xs font-medium text-bearish","cursor-pointer transition-colors duration-150","hover:text-bearish/80 disabled:cursor-not-allowed disabled:opacity-50","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),children:a?jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}):u("perpetuals.openOrders.col.cancelAll")})})]});return e.length===0?jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",l),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...Bt,...fe},className:"flex flex-1 flex-col",children:c}),jsxRuntime.jsx("div",{style:Bt,className:"flex flex-1 flex-col items-center justify-center py-6 text-xs text-default-700",children:u("perpetuals.openOrders.empty")})]})}):jsxRuntime.jsx("div",{className:ui.cn("flex w-full min-w-0 flex-col overflow-hidden bg-transparent",l),children:jsxRuntime.jsxs("div",{className:"flex flex-1 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...Bt,...fe},className:"flex flex-1 flex-col",children:c}),jsxRuntime.jsx("div",{style:Bt,className:"flex flex-1 flex-col overflow-y-auto",children:e.map((d,y)=>jsxRuntime.jsx(_l,{order:d,striped:y%2===1,isThisRowCanceling:o.has(d.orderId),isBatchCanceling:a,marketLabel:p,onCancel:n},d.orderId))})]})})}function _l({order:e,striped:t,isThisRowCanceling:r,isBatchCanceling:s,marketLabel:n,onCancel:i}){let{t:o}=i18n.useTranslation(),a=e.symbol.split("-")[0],l=e.side==="long",u=o(l?"perpetuals.openOrders.long":"perpetuals.openOrders.short"),p=l?"text-bullish":"text-bearish",c=Hl(e,n),d=e.isTrigger?n:_e(e.price*e.quantity),y=e.isTrigger?n:se(e.price);return jsxRuntime.jsx("div",{style:t?Ze:void 0,children:jsxRuntime.jsxs("div",{style:It,className:"flex flex-1 flex-row items-center justify-start px-4",children:[jsxRuntime.jsx("div",{style:H.time,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:Ft(e.timestamp)})}),jsxRuntime.jsx("div",{style:H.size,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:et(e.quantity)})}),jsxRuntime.jsx("div",{style:H.asset,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-medium text-foreground",children:a})}),jsxRuntime.jsx("div",{style:H.direction,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",p),children:u})}),jsxRuntime.jsx("div",{style:H.type,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:c})}),jsxRuntime.jsx("div",{style:H.leverage,className:"flex flex-row items-center justify-start",children:e.leverage!==void 0?jsxRuntime.jsxs("span",{className:ui.cn("inline-flex flex-row items-center justify-start gap-1","rounded p-1 bg-default-200/50","text-xs font-normal text-default-700"),style:{height:18},children:[e.leverage,"x"]}):jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:"--"})}),jsxRuntime.jsx("div",{style:H.orderValue,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:d})}),jsxRuntime.jsx("div",{style:H.executePrice,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:y})}),jsxRuntime.jsx("div",{style:H.currentPrice,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:se(e.markPrice)})}),jsxRuntime.jsx("div",{style:H.triggerCondition,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:e.triggerCondition??"--"})}),jsxRuntime.jsxs("div",{style:{...H.tpsl,display:"grid",gridTemplateColumns:"1fr auto 1fr",alignItems:"center"},children:[jsxRuntime.jsx("span",{className:"pr-1 text-right text-xs font-normal text-default-700",children:e.takeProfitPrice!==void 0?se(e.takeProfitPrice):"--"}),jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:"/"}),jsxRuntime.jsx("span",{className:"pl-1 text-left text-xs font-normal text-default-700",children:e.stopLossPrice!==void 0?se(e.stopLossPrice):"--"})]}),jsxRuntime.jsx("div",{style:H.cancel,className:"flex flex-row items-center justify-end gap-1",children:jsxRuntime.jsx("button",{type:"button",onClick:()=>i(e),disabled:r||s,"aria-label":o("perpetuals.openOrders.cancelOne.aria"),"aria-busy":r||void 0,className:ui.cn("inline-flex items-center justify-center rounded p-1","cursor-pointer text-bearish transition-colors duration-150 ease-in-out","hover:bg-bearish/10","disabled:cursor-not-allowed disabled:opacity-50","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),style:{height:24,width:24},children:r?jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current",style:{transform:"scale(0.6)"}}):jsxRuntime.jsx("svg",{viewBox:"0 0 14 14",width:12,height:12,fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round","aria-hidden":"true",children:jsxRuntime.jsx("path",{d:"M3 3 L11 11 M11 3 L3 11"})})})})]})})}function Bl(){return jsxRuntime.jsxs("div",{className:"w-full space-y-4 p-4",children:[jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Ql(){return jsxRuntime.jsx("div",{className:"flex h-24 items-center justify-center text-[14px] text-default-700",children:"No open orders"})}function jl({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,cancelOrder:n,cancelOrders:i,className:o}){let{t:a}=i18n.useTranslation(),{orders:l,sortKey:u,sortDir:p,onSort:c,handleCancelOrder:d,handleCancelAll:y,cancelingOrderIds:m,isCancelingAll:f}=ss({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,cancelOrder:n,cancelOrders:i}),[T,h]=react.useState(false),C=react.useCallback(()=>{l.length!==0&&h(true);},[l.length]),v=react.useCallback(()=>{f||h(false);},[f]),R=react.useCallback(async()=>{try{await y();}finally{h(false);}},[y]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(ns,{className:o,orders:l,sortKey:u,sortDir:p,onSort:c,onCancelOrder:d,onCancelAll:C,cancelingOrderIds:m,isCancelingAll:f}),jsxRuntime.jsx(ui.StyledModal,{isOpen:T,onOpenChange:D=>{f||D||v();},size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:ui.cn("!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)]","!shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]"),body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-base font-semibold text-white m-0",children:a("perpetuals.openOrders.cancelAll.confirmTitle")}),jsxRuntime.jsx("button",{type:"button",onClick:v,disabled:f,"aria-label":"Close",className:ui.cn("p-1 rounded-[10px] cursor-pointer","hover:bg-[rgba(39,39,42,0.5)]","text-zinc-400 hover:text-white transition-colors","disabled:cursor-not-allowed disabled:opacity-50","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-2 flex flex-col gap-4",children:[jsxRuntime.jsx("p",{className:"text-[13px] text-zinc-400 leading-[18px] m-0",children:a("perpetuals.openOrders.cancelAll.confirmBody")}),jsxRuntime.jsxs("button",{type:"button",onClick:()=>{R();},disabled:f,className:ui.cn("cursor-pointer mt-1 w-full h-12 rounded-[12px]","font-medium text-white","bg-bearish hover:bg-bearish/90 active:bg-bearish/80","transition-colors flex items-center justify-center gap-2","disabled:bg-[#3f3f46] disabled:text-zinc-500 disabled:cursor-not-allowed","outline-none focus:outline-none focus-visible:outline-none","focus:ring-0 focus-visible:ring-0"),children:[f&&jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),a(f?"perpetuals.openOrders.cancelAll.confirming":"perpetuals.openOrders.cancelAll.confirm")]})]})]})})})]})}function di(e,t){switch(t){case "time":return e.timestamp;case "size":return e.quantity;case "asset":return e.symbol.split("-")[0];case "description":return e.dir??null;case "price":return e.price;case "tradeValue":return e.price*e.quantity;case "closedPnl":return e.closedPnl??null}}function Jl(e,t,r,s){let n=di(e,r),i=di(t,r);if(n===null&&i===null)return 0;if(n===null)return 1;if(i===null)return -1;let o;return typeof n=="string"&&typeof i=="string"?o=n.localeCompare(i):o=n-i,s==="asc"?o:-o}function as({userAddress:e,symbol:t}){let[r,s]=react.useState("time"),[n,i]=react.useState("desc"),o=react.useCallback(d=>{s(y=>y===d?(i(m=>m==="asc"?"desc":"asc"),y):(i("desc"),d));},[]),{data:a,isLoading:l,error:u}=nr({userAddress:e,symbol:t},{enabled:!!e,staleTime:5e3}),p=react.useMemo(()=>a?.trades??[],[a]);return {trades:react.useMemo(()=>[...p].sort((d,y)=>Jl(d,y,r,n)),[p,r,n]),isLoading:l,error:u,sortKey:r,sortDir:n,onSort:o}}var re={time:{flex:"1 1 0%",maxWidth:200},size:{flex:"1 1 0%",maxWidth:80},asset:{flex:"1 1 0%",maxWidth:100},description:{flex:"1 1 0%",maxWidth:300},price:{flex:"1 1 0%"},tradeValue:{flex:"1 1 0%"},closedPnl:{flex:"1 1 0%"}},us={minWidth:1100},nu=48,mi={minHeight:36,maxHeight:36,padding:"0 16px"};function iu(e){return e?!!(/^Open\s+Long\b/i.test(e)||/^Close\s+Short\b/i.test(e)):false}function ps({trades:e,sortKey:t,sortDir:r,onSort:s,className:n}){let{t:i}=i18n.useTranslation(),o=jsxRuntime.jsxs("div",{style:fe,className:"flex flex-1 flex-row items-center justify-start border-default-200 px-4 sm:border-b",children:[jsxRuntime.jsx(I,{style:re.time,sortKey:"time",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.time")}),jsxRuntime.jsx(I,{style:re.size,sortKey:"size",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.size")}),jsxRuntime.jsx(I,{style:re.asset,sortKey:"asset",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.asset")}),jsxRuntime.jsx(I,{style:re.description,sortKey:"description",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.description")}),jsxRuntime.jsx(I,{style:re.price,sortKey:"price",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.price")}),jsxRuntime.jsx(I,{style:re.tradeValue,sortKey:"tradeValue",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.tradeValue")}),jsxRuntime.jsx(I,{style:re.closedPnl,sortKey:"closedPnl",activeSortKey:t,sortDir:r,onSort:s,children:i("perpetuals.tradeHistory.col.closedPnl")})]});return jsxRuntime.jsx("div",{className:ui.cn("flex h-full w-full min-w-0 flex-col overflow-hidden bg-transparent",n),children:jsxRuntime.jsxs("div",{className:"flex flex-1 min-h-0 flex-col overflow-x-auto",children:[jsxRuntime.jsx("div",{style:{...us,...fe},className:"flex flex-none flex-col",children:o}),e.length===0?jsxRuntime.jsx("div",{style:us,className:"flex flex-1 min-h-0 flex-col items-center justify-center py-6 text-xs text-default-700",children:i("perpetuals.tradeHistory.empty")}):jsxRuntime.jsx(ou,{trades:e})]})})}function ou({trades:e}){let t=react.useRef(null),{height:r=0}=hooks.useResizeObserver({ref:t}),s=react.useMemo(()=>({trades:e}),[e]);return jsxRuntime.jsx("div",{ref:t,style:us,className:"flex flex-1 min-h-0 flex-col overflow-y-auto",children:r>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:r},rowComponent:au,rowCount:e.length,rowHeight:nu,rowProps:s,overscanCount:4})})}function au({index:e,style:t,trades:r}){let s=r[e];if(!s)return null;let n=e%2===1,i=s.symbol.split("-")[0],o=s.price*s.quantity,a=s.closedPnl??0,l=iu(s.dir),u=s.dir??"",p=l?"text-bullish":"text-bearish",c=a>=0?"text-bullish":"text-bearish";return jsxRuntime.jsx("div",{style:t,children:jsxRuntime.jsxs("div",{style:n?{...mi,...Ze}:mi,className:"flex flex-1 flex-row items-center justify-start",children:[jsxRuntime.jsx("div",{style:re.time,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-500",children:Ft(s.timestamp)})}),jsxRuntime.jsx("div",{style:re.size,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:et(s.quantity)})}),jsxRuntime.jsx("div",{style:re.asset,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-medium text-foreground",children:i})}),jsxRuntime.jsx("div",{style:re.description,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:ui.cn("text-xs font-normal",p),children:u})}),jsxRuntime.jsx("div",{style:re.price,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"font-normal text-default-700",style:{fontSize:11,lineHeight:"16px"},children:se(s.price)})}),jsxRuntime.jsx("div",{style:re.tradeValue,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:"text-xs font-normal text-default-700",children:_e(o)})}),jsxRuntime.jsx("div",{style:re.closedPnl,className:"flex flex-row items-center justify-start",children:jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",c),children:Lt(a)})})]})})}function lu(){return jsxRuntime.jsxs("div",{className:"w-full space-y-4 p-4",children:[jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsxRuntime.jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function uu(){return jsxRuntime.jsx("div",{className:"flex h-24 items-center justify-center text-[14px] text-default-700",children:"No trades"})}function pu({userAddress:e,symbol:t,className:r}){let{trades:s,sortKey:n,sortDir:i,onSort:o}=as({userAddress:e,symbol:t});return jsxRuntime.jsx(ps,{className:r,trades:s,sortKey:n,sortDir:i,onSort:o})}var du=1000000000n,mu=8,fu=10n**BigInt(8);function yt(e,t=4){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return fi(r,du,t)}function Kt(e,t=2){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return fi(r,fu,t)}var yu=Kt;function cs(e){if(!e)return "0";let[t,r=""]=e.replace(/[\s,]/g,"").split(".");if(!/^\d*$/.test(t)||!/^\d*$/.test(r))return "0";let s=(r+"000000000").slice(0,9),n=`${t||"0"}${s}`.replace(/^0+(?=\d)/,"");return n===""?"0":n}function fi(e,t,r){let s=e<0n,n=s?-e:e,i=n/t,o=n%t;if(r<=0)return o*2n>=t&&(i+=1n),`${s?"-":""}${i.toString()}`;let a=10n**BigInt(r),l=(o*a+t/2n)/t;l>=a&&(i+=1n,l=0n);let u=l.toString().padStart(r,"0");return u=u.replace(/0+$/,""),u?`${s?"-":""}${i.toString()}.${u}`:`${s?"-":""}${i.toString()}`}function gt(e,t=Date.now()){return Math.max(0,Math.floor((e-t)/1e3))}function ds(e,t=6,r=4){return e?e.length<=t+r+1?e:`${e.slice(0,t)}\u2026${e.slice(-r)}`:""}function ms({isOpen:e,quote:t,isExecuting:r,isExpired:s,onConfirm:n,onCancel:i,onExpire:o,error:a}){let{t:l}=i18n.useTranslation(),u=t?Date.parse(t.expiresAt):0,[p,c]=react.useState(()=>u?gt(u):0);return react.useEffect(()=>{if(!e||!u)return;c(gt(u));let d=setInterval(()=>{let y=gt(u);c(y),y===0&&(o?.(),clearInterval(d));},1e3);return ()=>clearInterval(d)},[e,u,o]),jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:d=>!d&&i(),hideCloseButton:true,backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:l("perpDeposit.confirm.title")}),jsxRuntime.jsxs(ui.ModalBody,{children:[t?jsxRuntime.jsx(Tu,{breakdown:t.breakdown}):jsxRuntime.jsx("div",{className:"flex h-32 items-center justify-center",children:jsxRuntime.jsx(ui.Spinner,{})}),t&&!s&&jsxRuntime.jsx("div",{className:"text-default-500 mt-4 text-xs",children:l("perpDeposit.confirm.expiresIn",{seconds:p})}),s&&jsxRuntime.jsx("div",{className:"text-warning-500 mt-4 text-xs",children:l("perpDeposit.confirm.expired")}),a&&jsxRuntime.jsx("div",{className:"text-danger mt-4 text-xs",children:a})]}),jsxRuntime.jsxs(ui.ModalFooter,{className:"flex justify-between gap-2",children:[jsxRuntime.jsx(ui.Button,{variant:"flat",color:"default",onPress:i,isDisabled:r,children:l("perpDeposit.confirm.cancel")}),jsxRuntime.jsx(ui.Button,{color:"primary",onPress:n,isDisabled:!t||r||s,isLoading:r,children:l("perpDeposit.confirm.cta")})]})]})})}function Tu({breakdown:e}){let{t}=i18n.useTranslation();return jsxRuntime.jsxs("dl",{className:"flex flex-col gap-2 text-sm",children:[jsxRuntime.jsx(zt,{label:t("perpDeposit.confirm.send"),value:`${yt(e.grossLamports)} SOL`}),jsxRuntime.jsx(zt,{label:t("perpDeposit.confirm.receive"),value:`${Kt(e.expectedOutputUSDC)} USDC`,highlight:true}),jsxRuntime.jsx(zt,{label:t("perpDeposit.confirm.platformFee"),value:`${yt(e.platformFeeLamports,6)} SOL`,muted:true}),jsxRuntime.jsx(zt,{label:t("perpDeposit.confirm.relayFee"),value:`${yt(e.relayDepositLamports,6)} SOL`,muted:true})]})}function zt({label:e,value:t,highlight:r,muted:s}){return jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsx("dt",{className:"text-default-500",children:e}),jsxRuntime.jsx("dd",{className:r?"text-foreground text-base font-semibold":s?"text-default-500 text-xs":"text-foreground",children:t})]})}function fs({amount:e,onAmountChange:t,recipient:r,onRecipientChange:s,balanceSol:n,disabled:i,amountError:o,recipientError:a,onMax:l,className:u}){let{t:p}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("flex flex-col gap-4",u),children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[jsxRuntime.jsx("label",{htmlFor:"perp-deposit-amount",className:"text-sm font-medium text-foreground",children:p("perpDeposit.amount")}),n&&jsxRuntime.jsx("span",{className:"text-xs text-default-500",children:p("perpDeposit.amount.balance",{balance:n})})]}),jsxRuntime.jsx("div",{className:"relative",children:jsxRuntime.jsx(ui.Input,{id:"perp-deposit-amount",type:"text",inputMode:"decimal",placeholder:p("perpDeposit.amount.placeholder"),value:e,onValueChange:t,isDisabled:i,isInvalid:!!o,errorMessage:o,endContent:jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("span",{className:"text-default-500 text-sm",children:p("perpDeposit.amount.unit")}),n&&l&&jsxRuntime.jsx(ui.Button,{size:"sm",variant:"flat",color:"primary",onPress:l,isDisabled:i,children:p("perpDeposit.amount.max")})]})})})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"perp-deposit-recipient",className:"text-sm font-medium text-foreground mb-1.5 block",children:p("perpDeposit.recipient")}),jsxRuntime.jsx(ui.Input,{id:"perp-deposit-recipient",type:"text",placeholder:p("perpDeposit.recipient.placeholder"),value:r,onValueChange:s,isDisabled:i,isInvalid:!!a,errorMessage:a,autoComplete:"off",spellCheck:"false"})]})]})}var xi="#C7FF2E";function gs({isOpen:e,phase:t,status:r,solanaExplorerUrl:s,hyperliquidExplorerUrl:n,onRetry:i,onClose:o,errorMessage:a}){let{t:l}=i18n.useTranslation(),u=Mu(t),p=t==="failed"?a||(r?.lastError?.message?l("perpDeposit.status.failed",{message:r.lastError.message}):l("perpDeposit.status.failed",{message:""})):t==="succeeded"?l("perpDeposit.status.settled"):t==="refunded"?l("perpDeposit.status.refunded"):r?.status==="broadcasted"?l("perpDeposit.status.broadcasted"):r?.status==="relay_waiting"?l("perpDeposit.status.relay_waiting"):r?.status==="relay_pending"?l("perpDeposit.status.relay_pending"):r?.status==="stuck"?l("perpDeposit.status.stuck"):l("perpDeposit.status.broadcasted"),c=t==="failed"&&!!i;return jsxRuntime.jsx(ui.StyledModal,{isOpen:e,onOpenChange:d=>!d&&o(),size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:"!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]",body:"!p-0"},children:jsxRuntime.jsx(ui.ModalContent,{children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsxs("div",{className:"flex items-start justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("div",{className:"flex items-center gap-2.5",children:jsxRuntime.jsx("h3",{className:"text-base font-semibold text-white",children:l("perpDeposit.status.title")})}),jsxRuntime.jsx("button",{type:"button",onClick:o,className:"cursor-pointer p-1 rounded-[10px] hover:bg-[rgba(39,39,42,0.5)] text-zinc-400 hover:text-white transition-colors","aria-label":l("perpDeposit.status.close"),children:jsxRuntime.jsx(ui.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-3 pt-2",children:[jsxRuntime.jsxs("div",{className:"rounded-[12px] bg-[#0a0a0b] border border-[#27272a] px-4 py-6 flex flex-col items-center text-center gap-4",children:[jsxRuntime.jsx(Nu,{variant:u}),jsxRuntime.jsx("p",{className:ui.cn("text-sm leading-relaxed max-w-[320px]",Iu(u)),children:p})]}),(r?.solanaTxHash||r?.hyperliquidTxHash)&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col gap-2",children:[r?.solanaTxHash&&s&&jsxRuntime.jsx(hi,{href:s,label:l("perpDeposit.status.viewSolanaTx"),hash:r.solanaTxHash}),r?.hyperliquidTxHash&&n&&jsxRuntime.jsx(hi,{href:n,label:l("perpDeposit.status.viewHyperliquidTx"),hash:r.hyperliquidTxHash})]})]}),jsxRuntime.jsxs("div",{className:ui.cn("px-5 pb-5 pt-2 flex gap-2",c?"justify-between":"justify-end"),children:[c&&jsxRuntime.jsx("button",{type:"button",onClick:i,className:"cursor-pointer flex-1 h-10 rounded-[10px] font-medium text-black bg-[#C7FF2E] hover:bg-[#b6ed1c] active:bg-[#a6d913] transition-colors flex items-center justify-center",children:l("perpDeposit.status.tryAgain")}),jsxRuntime.jsx("button",{type:"button",onClick:o,className:ui.cn("cursor-pointer h-10 rounded-[10px] font-medium transition-colors flex items-center justify-center",c?"flex-1 bg-[rgba(39,39,42,1)] hover:bg-[rgba(63,63,70,1)] text-white":"px-6 bg-[rgba(39,39,42,1)] hover:bg-[rgba(63,63,70,1)] text-white"),children:l("perpDeposit.status.close")})]})]})})})}function hi({href:e,label:t,hash:r}){return jsxRuntime.jsxs("a",{href:e,target:"_blank",rel:"noreferrer",className:"group flex items-center justify-between gap-2 px-3 py-2 rounded-[10px] bg-[#0a0a0b] border border-[#27272a] hover:border-[rgba(199,255,46,0.4)] transition-colors",children:[jsxRuntime.jsx("span",{className:"text-xs text-zinc-400 group-hover:text-white transition-colors",children:t}),jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-xs tabular-nums text-zinc-300 group-hover:text-[#C7FF2E] transition-colors",children:[ds(r,6,4),jsxRuntime.jsx(Hu,{})]})]})}function Nu({variant:e}){return e==="progress"?jsxRuntime.jsx("div",{className:"relative w-14 h-14 flex items-center justify-center",children:jsxRuntime.jsx(Uu,{})}):e==="success"?jsxRuntime.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(199,255,46,0.12)]",children:jsxRuntime.jsx(Lu,{className:"w-8 h-8",style:{color:xi}})}):e==="warning"?jsxRuntime.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(245,158,11,0.12)]",children:jsxRuntime.jsx(Fu,{className:"w-8 h-8 text-amber-400"})}):jsxRuntime.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(239,68,68,0.12)]",children:jsxRuntime.jsx(qu,{className:"w-8 h-8 text-rose-400"})})}function Uu(){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("svg",{className:"lfi-perp-deposit-spinner",viewBox:"0 0 50 50",width:48,height:48,"aria-hidden":"true",children:[jsxRuntime.jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"rgba(255,255,255,0.08)",strokeWidth:"4"}),jsxRuntime.jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:xi,strokeWidth:"4",strokeLinecap:"round",strokeDasharray:"90 60"})]}),jsxRuntime.jsx("style",{children:`
|
|
37
37
|
.lfi-perp-deposit-spinner {
|
|
38
38
|
animation: lfi-perp-deposit-spin 0.9s linear infinite;
|
|
39
39
|
transform-origin: center;
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
@keyframes lfi-perp-deposit-spin {
|
|
42
42
|
to { transform: rotate(360deg); }
|
|
43
43
|
}
|
|
44
|
-
`})]})}function Uu(e){switch(e){case "succeeded":return "success";case "refunded":return "warning";case "failed":return "error";default:return "progress"}}function Mu(e){switch(e){case "success":return "text-white";case "warning":return "text-amber-200";case "error":return "text-rose-300";default:return "text-zinc-200"}}function Iu(e){return jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:e.className,style:e.style,children:jsxRuntime.jsx("path",{d:"M20 6L9 17l-5-5"})})}function Lu(e){return jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:e.className,children:jsxRuntime.jsx("path",{d:"M12 2a10 10 0 100 20 10 10 0 000-20zm0 4c.6 0 1 .4 1 1v6c0 .6-.4 1-1 1s-1-.4-1-1V7c0-.6.4-1 1-1zm0 12c-.7 0-1.2-.5-1.2-1.2s.5-1.2 1.2-1.2 1.2.5 1.2 1.2-.5 1.2-1.2 1.2z"})})}function Fu(e){return jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:e.className,children:[jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"10"}),jsxRuntime.jsx("path",{d:"M15 9l-6 6M9 9l6 6"})]})}function qu(){return jsxRuntime.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[jsxRuntime.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),jsxRuntime.jsx("polyline",{points:"15 3 21 3 21 9"}),jsxRuntime.jsx("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]})}function zu({userSolanaAddress:e,userId:t,source:r,campaign:s,defaultRecipient:n,signAndBroadcast:i,balanceSol:o,onMaxClick:a,validateRecipient:l,buildSolanaExplorerUrl:u,buildHyperliquidExplorerUrl:p,onSettled:c,onError:d,className:y}){let{t:m}=i18n.useTranslation(),[f,x]=react.useState(""),[h,P]=react.useState(n??""),S=react.useMemo(()=>{if(f&&(!/^\d+(\.\d+)?$/.test(f.trim())||Number(f)<=0))return m("perpDeposit.error.amountInvalid")},[f,m]),N=react.useMemo(()=>{if(h)return l?l(h):void 0},[h,l]),w=react.useMemo(()=>S?"":cs(f),[f,S]),B=react.useMemo(()=>!w||w==="0"||N||!h?null:{userSolanaAddress:e,hyperliquidRecipient:h,grossLamports:w,source:r},[w,h,N,r,e]),I=yr(B,{enabled:!!B}),{state:g,execute:F,reset:$,dispatch:z}=gr(i),H=g.phase==="submitted"||g.phase==="tracking"||g.phase==="succeeded"||g.phase==="refunded"||g.phase==="failed"?g.intentId:void 0,D=br(H,{enabled:!!H&&g.phase!=="succeeded"&&g.phase!=="refunded"&&g.phase!=="failed"});react.useEffect(()=>{D.data&&z({type:"STATUS_UPDATE",status:D.data});},[D.data,z]),react.useEffect(()=>{g.phase==="succeeded"?c?.(g.intentId):g.phase==="failed"&&d?.(g.intentId,g.error.message);},[g,c,d]);let T=react.useCallback(()=>{I.data&&(z({type:"QUOTE_REQUEST"}),z({type:"QUOTE_RECEIVED",quote:I.data}));},[z,I.data]),ee=react.useCallback(async()=>{if(g.phase==="ready_to_sign")try{await F({quote:g.quote,userSolanaAddress:e,hyperliquidRecipient:h,userId:t,source:r,campaign:s});}catch{}},[g,F,e,h,t,r,s]),V=react.useCallback(()=>{z({type:"QUOTE_EXPIRED"});},[z]),Se=react.useCallback(async()=>{z({type:"RESET"}),await I.refetch();},[z,I]),se=g.phase==="ready_to_sign"||g.phase==="signing"||g.phase==="broadcasting"||g.phase==="expired",ve=g.phase==="submitted"||g.phase==="tracking"||g.phase==="succeeded"||g.phase==="refunded"||g.phase==="failed"&&!!g.intentId,ue=g.phase==="tracking"||g.phase==="succeeded"||g.phase==="refunded"||g.phase==="failed"?g.status:void 0,oe=!I.data||I.isFetching||!!S||!!N||!B;return jsxRuntime.jsxs(ui.Card,{className:y,children:[jsxRuntime.jsxs(ui.CardBody,{className:"flex flex-col gap-4 p-6",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"text-lg font-semibold",children:m("perpDeposit.title")}),jsxRuntime.jsx("p",{className:"text-default-500 text-sm",children:m("perpDeposit.description")})]}),jsxRuntime.jsx(fs,{amount:f,onAmountChange:x,recipient:h,onRecipientChange:P,balanceSol:o,onMax:a,amountError:S,recipientError:N,disabled:g.phase!=="idle"&&g.phase!=="expired"&&g.phase!=="failed"}),jsxRuntime.jsx(ui.Button,{color:"primary",isDisabled:oe,isLoading:I.isFetching,onPress:T,children:I.isFetching?m("perpDeposit.gettingQuote"):m("perpDeposit.confirmQuote")}),I.error&&jsxRuntime.jsx("div",{className:"text-danger text-xs",children:m("perpDeposit.error.quoteFailed")})]}),jsxRuntime.jsx(ms,{isOpen:se,quote:g.phase==="ready_to_sign"||g.phase==="signing"||g.phase==="broadcasting"||g.phase==="expired"?g.quote:void 0,isExecuting:g.phase==="signing"||g.phase==="broadcasting",isExpired:g.phase==="expired",onConfirm:ee,onCancel:$,onExpire:V}),jsxRuntime.jsx(gs,{isOpen:ve,phase:g.phase,status:ue,solanaExplorerUrl:ue?.solanaTxHash&&u?u(ue.solanaTxHash):void 0,hyperliquidExplorerUrl:ue?.hyperliquidTxHash&&p?p(ue.hyperliquidTxHash):void 0,onRetry:g.phase==="failed"?Se:void 0,onClose:$,errorMessage:g.phase==="failed"?g.error.message:void 0})]})}function Ss({state:e,onContinue:t,onRetryStep:r,onReload:s,onDismiss:n,className:i}){let{t:o}=i18n.useTranslation(),a=e.phase,l=a==="executing",u=a==="loading",p=a==="error"&&e.steps.length===0;return jsxRuntime.jsxs(ui.Card,{className:ui.cn("w-full max-w-md",i),children:[jsxRuntime.jsxs(ui.CardHeader,{className:"flex flex-col items-start gap-1",children:[jsxRuntime.jsx("h3",{className:"text-lg font-semibold",children:o("perpDeposit.setup.title")}),jsxRuntime.jsx("p",{className:"text-foreground-500 text-sm",children:o("perpDeposit.setup.description")})]}),jsxRuntime.jsxs(ui.CardBody,{className:"gap-3",children:[u&&jsxRuntime.jsx(Yu,{}),p&&jsxRuntime.jsx("p",{className:"text-danger text-sm",children:o("perpDeposit.setup.loadFailed",{message:e.error??""})}),!u&&!p&&e.steps.map((c,d)=>jsxRuntime.jsx(ju,{rec:c,index:d,isCurrent:e.currentIndex===d,onRetry:r},`${c.step.id}-${d}`)),a==="done"&&jsxRuntime.jsx("p",{className:"text-success text-sm",children:o("perpDeposit.setup.alreadyActive")})]}),jsxRuntime.jsxs(ui.CardFooter,{className:"flex justify-between gap-2",children:[n&&jsxRuntime.jsx(ui.Button,{variant:"light",onPress:n,isDisabled:l,children:o(a==="done"?"perpDeposit.setup.dismiss":"perpDeposit.setup.skip")}),jsxRuntime.jsx("div",{className:"flex-1"}),p&&s&&jsxRuntime.jsx(ui.Button,{color:"primary",onPress:s,children:o("perpDeposit.setup.retry")}),!p&&a!=="done"&&jsxRuntime.jsx(ui.Button,{color:"primary",onPress:t,isLoading:l,isDisabled:l||u,children:e.steps.some(c=>c.status==="done")?o("perpDeposit.setup.continue"):o("perpDeposit.setup.cta")})]})]})}function ju({rec:e,index:t,isCurrent:r,onRetry:s}){let{t:n}=i18n.useTranslation(),i=Zu(e.step.id,()=>{switch(e.step.id){case "approveBuilderFee":return n("perpDeposit.setup.builderFee.label");case "setReferrer":return n("perpDeposit.setup.referrer.label");case "updateLeverage":return n("perpDeposit.setup.leverage.label")}}),o=(()=>{switch(e.step.id){case "approveBuilderFee":{let l=(e.step.params.maxFeeRate/10).toFixed(1);return n("perpDeposit.setup.builderFee.description",{bps:l})}case "setReferrer":return n("perpDeposit.setup.referrer.description",{code:e.step.params.code});case "updateLeverage":return n("perpDeposit.setup.leverage.description")}})(),a=(()=>{switch(e.status){case "pending":return n("perpDeposit.setup.step.pending");case "skipped":return n("perpDeposit.setup.step.skipped");case "running":return n("perpDeposit.setup.step.running");case "done":return n("perpDeposit.setup.step.done");case "error":return n("perpDeposit.setup.step.error")}})();return jsxRuntime.jsxs("div",{className:ui.cn("border-divider flex items-start justify-between gap-3 rounded-md border p-3",e.status==="error"&&"border-danger",e.status==="done"&&"border-success/40 bg-success/5",e.status==="skipped"&&"border-default bg-default-100/40"),children:[jsxRuntime.jsxs("div",{className:"flex-1",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[jsxRuntime.jsx(Xu,{status:e.status,isCurrent:r}),jsxRuntime.jsx("span",{children:i})]}),jsxRuntime.jsx("p",{className:"text-foreground-500 mt-1 text-xs",children:o}),e.status==="error"&&e.error&&jsxRuntime.jsx("p",{className:"text-danger mt-1 text-xs",children:e.error})]}),jsxRuntime.jsxs("div",{className:"flex flex-col items-end gap-1 text-xs",children:[jsxRuntime.jsx("span",{className:ui.cn(Ju(e.status)),children:a}),e.status==="error"&&s&&jsxRuntime.jsx(ui.Button,{size:"sm",variant:"flat",color:"danger",onPress:()=>s(t),children:n("perpDeposit.setup.retry")})]})]})}function Yu(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center gap-2 py-2 text-sm",children:[jsxRuntime.jsx(ui.Spinner,{size:"sm"}),jsxRuntime.jsx("span",{children:e("perpDeposit.setup.loading")})]})}function Xu({status:e,isCurrent:t}){return e==="running"||t?jsxRuntime.jsx(ui.Spinner,{size:"sm"}):e==="done"||e==="skipped"?jsxRuntime.jsx("span",{"aria-hidden":true,className:"text-success",children:"\u2713"}):e==="error"?jsxRuntime.jsx("span",{"aria-hidden":true,className:"text-danger",children:"!"}):jsxRuntime.jsx("span",{"aria-hidden":true,className:"border-foreground-400 inline-block h-3 w-3 rounded-full border"})}function Ju(e){switch(e){case "done":return "text-success";case "skipped":return "text-foreground-500";case "running":return "text-primary";case "error":return "text-danger";default:return "text-foreground-500"}}function Zu(e,t){return t()}function ep({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:i,onDismiss:o,className:a}){let{state:l,runNext:u,runStep:p,reload:c}=Dt({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:i}),d=react.useCallback(()=>{u();},[u]),y=react.useCallback(f=>{p(f);},[p]),m=react.useCallback(()=>{c();},[c]);return jsxRuntime.jsx(Ss,{state:l,onContinue:d,onRetryStep:y,onReload:m,onDismiss:o,className:a})}exports.ClosePositionModal=Xr;exports.CoinInfoNotFoundUI=hr;exports.CoinInfoSkeletonsUI=vr;exports.CoinInfoUI=Tr;exports.CoinInfoWidget=zo;exports.DEFAULT_ORDER_BOOK_PRECISION_OPTIONS=Nn;exports.DepositConfirmUI=ms;exports.DepositFlowWidget=zu;exports.DepositFormUI=fs;exports.DepositStatusUI=gs;exports.HL_USDC_DECIMALS=du;exports.HyperliquidApiError=Pe;exports.HyperliquidInitUI=Ss;exports.HyperliquidInitWidget=ep;exports.HyperliquidPerpetualsClient=jt;exports.LiberFiApiError=pe;exports.LiberFiHttpTransport=Ue;exports.LiberFiPerpDepositClient=Xt;exports.LiberFiPerpetualsClient=Yt;exports.OpenOrdersEmpty=Bl;exports.OpenOrdersSkeleton=_l;exports.OpenOrdersUI=ns;exports.OpenOrdersWidget=Gl;exports.OrderBookUI=Nr;exports.OrderBookWidget=va;exports.PerpetualsContext=Ce;exports.PerpetualsProvider=Gi;exports.PlaceOrderFormUI=$r;exports.PlaceOrderFormWidget=hl;exports.PositionsEmpty=Al;exports.PositionsSkeleton=rs;exports.PositionsUI=ts;exports.PositionsWidget=Nl;exports.SearchCoinsUI=wr;exports.SearchCoinsWidget=jo;exports.TERMINAL_DEPOSIT_STATUSES=st;exports.TradeHistoryEmpty=lu;exports.TradeHistorySkeleton=au;exports.TradeHistoryUI=ps;exports.TradeHistoryWidget=uu;exports.TradesUI=qr;exports.TradesWidget=Ja;exports.accountStateQueryKey=Ge;exports.activeAssetLeverageQueryKey=vt;exports.aggregationFromStep=Cn;exports.assetMetaQueryKey=Xs;exports.cancelOrder=en;exports.classifyStep=Pt;exports.coinsQueryKey=Rs;exports.createOrder=Zs;exports.currentDepositBreakdown=zi;exports.currentDepositStatus=Ki;exports.fetchActiveAssetLeverage=js;exports.fetchAssetMeta=Js;exports.fetchCoins=As;exports.fetchKlines=_s;exports.fetchMarket=Is;exports.fetchMarkets=qs;exports.fetchOrderBook=Qs;exports.fetchOrders=$s;exports.fetchPerpDepositQuote=sn;exports.fetchPerpDepositStatus=ln;exports.fetchPositions=Ws;exports.fetchRecentTrades=zs;exports.fetchTrades=Gs;exports.fetchUniverse=Te;exports.hlUsdcRawToUsdc=Qt;exports.initialDepositState=ht;exports.initialSetupState=at;exports.isDepositPolling=Qi;exports.isDepositTerminal=Bi;exports.isTerminalDepositLifecycle=Wi;exports.klinesQueryKey=Hs;exports.lamportsToSol=ft;exports.marketQueryKey=Ms;exports.marketsQueryKey=Fs;exports.microUsdcToUsdc=fu;exports.nextRunnableStep=Tt;exports.orderBookQueryKey=Bs;exports.ordersQueryKey=Ve;exports.perpDepositQuoteQueryKey=rn;exports.perpDepositStatusQueryKey=an;exports.positionsQueryKey=$e;exports.recentTradesQueryKey=Ks;exports.reduceDepositState=Jt;exports.reduceSetupState=Ct;exports.secondsUntil=yt;exports.shortAddress=ds;exports.solToLamports=cs;exports.supportsUniverseSnapshot=Oe;exports.tradesQueryKey=Vs;exports.universeQueryKey=ye;exports.useAccountStateQuery=mr;exports.useAccountStateSubscription=To;exports.useActiveAssetLeverageQuery=ir;exports.useAssetMetaQuery=ar;exports.useCancelOrderMutation=lr;exports.useCandlesSubscription=bo;exports.useClosePosition=Zr;exports.useCoinInfo=Cr;exports.useCoinsQuery=Zt;exports.useCreateOrderMutation=ot;exports.useHyperliquidSetup=Dt;exports.useHyperliquidUserBootstrap=wo;exports.useKlinesQuery=to;exports.useMarketDataSubscription=Me;exports.useMarketQuery=nt;exports.useMarketsQuery=er;exports.useOpenOrdersScript=ss;exports.useOrderBookQuery=tr;exports.useOrderBookScript=Er;exports.useOrdersQuery=sr;exports.usePerpDepositClient=ko;exports.usePerpDepositClientMaybe=Ie;exports.usePerpDepositExecute=gr;exports.usePerpDepositQuote=yr;exports.usePerpDepositStatus=br;exports.usePerpetualsClient=A;exports.usePlaceOrderFormScript=_r;exports.usePositionsQuery=it;exports.usePositionsScript=es;exports.useRecentTradesQuery=rr;exports.useSearchCoinsScript=Dr;exports.useTradeHistoryScript=as;exports.useTradesQuery=nr;exports.useTradesScript=Ir;exports.useUniverseQuery=Zi;exports.useUserDataSubscription=So;exports.version=Ti;//# sourceMappingURL=index.js.map
|
|
44
|
+
`})]})}function Mu(e){switch(e){case "succeeded":return "success";case "refunded":return "warning";case "failed":return "error";default:return "progress"}}function Iu(e){switch(e){case "success":return "text-white";case "warning":return "text-amber-200";case "error":return "text-rose-300";default:return "text-zinc-200"}}function Lu(e){return jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:e.className,style:e.style,children:jsxRuntime.jsx("path",{d:"M20 6L9 17l-5-5"})})}function Fu(e){return jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:e.className,children:jsxRuntime.jsx("path",{d:"M12 2a10 10 0 100 20 10 10 0 000-20zm0 4c.6 0 1 .4 1 1v6c0 .6-.4 1-1 1s-1-.4-1-1V7c0-.6.4-1 1-1zm0 12c-.7 0-1.2-.5-1.2-1.2s.5-1.2 1.2-1.2 1.2.5 1.2 1.2-.5 1.2-1.2 1.2z"})})}function qu(e){return jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:e.className,children:[jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"10"}),jsxRuntime.jsx("path",{d:"M15 9l-6 6M9 9l6 6"})]})}function Hu(){return jsxRuntime.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[jsxRuntime.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),jsxRuntime.jsx("polyline",{points:"15 3 21 3 21 9"}),jsxRuntime.jsx("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]})}function Wu({userSolanaAddress:e,userId:t,source:r,campaign:s,defaultRecipient:n,signAndBroadcast:i,balanceSol:o,onMaxClick:a,validateRecipient:l,buildSolanaExplorerUrl:u,buildHyperliquidExplorerUrl:p,onSettled:c,onError:d,className:y}){let{t:m}=i18n.useTranslation(),[f,T]=react.useState(""),[h,C]=react.useState(n??""),v=react.useMemo(()=>{if(f&&(!/^\d+(\.\d+)?$/.test(f.trim())||Number(f)<=0))return m("perpDeposit.error.amountInvalid")},[f,m]),R=react.useMemo(()=>{if(h)return l?l(h):void 0},[h,l]),D=react.useMemo(()=>v?"":cs(f),[f,v]),F=react.useMemo(()=>!D||D==="0"||R||!h?null:{userSolanaAddress:e,hyperliquidRecipient:h,grossLamports:D,source:r},[D,h,R,r,e]),M=yr(F,{enabled:!!F}),{state:b,execute:L,reset:V,dispatch:K}=gr(i),z=b.phase==="submitted"||b.phase==="tracking"||b.phase==="succeeded"||b.phase==="refunded"||b.phase==="failed"?b.intentId:void 0,A=br(z,{enabled:!!z&&b.phase!=="succeeded"&&b.phase!=="refunded"&&b.phase!=="failed"});react.useEffect(()=>{A.data&&K({type:"STATUS_UPDATE",status:A.data});},[A.data,K]),react.useEffect(()=>{b.phase==="succeeded"?c?.(b.intentId):b.phase==="failed"&&d?.(b.intentId,b.error.message);},[b,c,d]);let O=react.useCallback(()=>{M.data&&(K({type:"QUOTE_REQUEST"}),K({type:"QUOTE_RECEIVED",quote:M.data}));},[K,M.data]),W=react.useCallback(async()=>{if(b.phase==="ready_to_sign")try{await L({quote:b.quote,userSolanaAddress:e,hyperliquidRecipient:h,userId:t,source:r,campaign:s});}catch{}},[b,L,e,h,t,r,s]),J=react.useCallback(()=>{K({type:"QUOTE_EXPIRED"});},[K]),Se=react.useCallback(async()=>{K({type:"RESET"}),await M.refetch();},[K,M]),G=b.phase==="ready_to_sign"||b.phase==="signing"||b.phase==="broadcasting"||b.phase==="expired",ve=b.phase==="submitted"||b.phase==="tracking"||b.phase==="succeeded"||b.phase==="refunded"||b.phase==="failed"&&!!b.intentId,le=b.phase==="tracking"||b.phase==="succeeded"||b.phase==="refunded"||b.phase==="failed"?b.status:void 0,ie=!M.data||M.isFetching||!!v||!!R||!F;return jsxRuntime.jsxs(ui.Card,{className:y,children:[jsxRuntime.jsxs(ui.CardBody,{className:"flex flex-col gap-4 p-6",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"text-lg font-semibold",children:m("perpDeposit.title")}),jsxRuntime.jsx("p",{className:"text-default-500 text-sm",children:m("perpDeposit.description")})]}),jsxRuntime.jsx(fs,{amount:f,onAmountChange:T,recipient:h,onRecipientChange:C,balanceSol:o,onMax:a,amountError:v,recipientError:R,disabled:b.phase!=="idle"&&b.phase!=="expired"&&b.phase!=="failed"}),jsxRuntime.jsx(ui.Button,{color:"primary",isDisabled:ie,isLoading:M.isFetching,onPress:O,children:M.isFetching?m("perpDeposit.gettingQuote"):m("perpDeposit.confirmQuote")}),M.error&&jsxRuntime.jsx("div",{className:"text-danger text-xs",children:m("perpDeposit.error.quoteFailed")})]}),jsxRuntime.jsx(ms,{isOpen:G,quote:b.phase==="ready_to_sign"||b.phase==="signing"||b.phase==="broadcasting"||b.phase==="expired"?b.quote:void 0,isExecuting:b.phase==="signing"||b.phase==="broadcasting",isExpired:b.phase==="expired",onConfirm:W,onCancel:V,onExpire:J}),jsxRuntime.jsx(gs,{isOpen:ve,phase:b.phase,status:le,solanaExplorerUrl:le?.solanaTxHash&&u?u(le.solanaTxHash):void 0,hyperliquidExplorerUrl:le?.hyperliquidTxHash&&p?p(le.hyperliquidTxHash):void 0,onRetry:b.phase==="failed"?Se:void 0,onClose:V,errorMessage:b.phase==="failed"?b.error.message:void 0})]})}function Ss({state:e,onContinue:t,onRetryStep:r,onReload:s,onDismiss:n,className:i}){let{t:o}=i18n.useTranslation(),a=e.phase,l=a==="executing",u=a==="loading",p=a==="error"&&e.steps.length===0;return jsxRuntime.jsxs(ui.Card,{className:ui.cn("w-full max-w-md",i),children:[jsxRuntime.jsxs(ui.CardHeader,{className:"flex flex-col items-start gap-1",children:[jsxRuntime.jsx("h3",{className:"text-lg font-semibold",children:o("perpDeposit.setup.title")}),jsxRuntime.jsx("p",{className:"text-foreground-500 text-sm",children:o("perpDeposit.setup.description")})]}),jsxRuntime.jsxs(ui.CardBody,{className:"gap-3",children:[u&&jsxRuntime.jsx(Xu,{}),p&&jsxRuntime.jsx("p",{className:"text-danger text-sm",children:o("perpDeposit.setup.loadFailed",{message:e.error??""})}),!u&&!p&&e.steps.map((c,d)=>jsxRuntime.jsx(Yu,{rec:c,index:d,isCurrent:e.currentIndex===d,onRetry:r},`${c.step.id}-${d}`)),a==="done"&&jsxRuntime.jsx("p",{className:"text-success text-sm",children:o("perpDeposit.setup.alreadyActive")})]}),jsxRuntime.jsxs(ui.CardFooter,{className:"flex justify-between gap-2",children:[n&&jsxRuntime.jsx(ui.Button,{variant:"light",onPress:n,isDisabled:l,children:o(a==="done"?"perpDeposit.setup.dismiss":"perpDeposit.setup.skip")}),jsxRuntime.jsx("div",{className:"flex-1"}),p&&s&&jsxRuntime.jsx(ui.Button,{color:"primary",onPress:s,children:o("perpDeposit.setup.retry")}),!p&&a!=="done"&&jsxRuntime.jsx(ui.Button,{color:"primary",onPress:t,isLoading:l,isDisabled:l||u,children:e.steps.some(c=>c.status==="done")?o("perpDeposit.setup.continue"):o("perpDeposit.setup.cta")})]})]})}function Yu({rec:e,index:t,isCurrent:r,onRetry:s}){let{t:n}=i18n.useTranslation(),i=ep(e.step.id,()=>{switch(e.step.id){case "approveBuilderFee":return n("perpDeposit.setup.builderFee.label");case "setReferrer":return n("perpDeposit.setup.referrer.label");case "updateLeverage":return n("perpDeposit.setup.leverage.label")}}),o=(()=>{switch(e.step.id){case "approveBuilderFee":{let l=(e.step.params.maxFeeRate/10).toFixed(1);return n("perpDeposit.setup.builderFee.description",{bps:l})}case "setReferrer":return n("perpDeposit.setup.referrer.description",{code:e.step.params.code});case "updateLeverage":return n("perpDeposit.setup.leverage.description")}})(),a=(()=>{switch(e.status){case "pending":return n("perpDeposit.setup.step.pending");case "skipped":return n("perpDeposit.setup.step.skipped");case "running":return n("perpDeposit.setup.step.running");case "done":return n("perpDeposit.setup.step.done");case "error":return n("perpDeposit.setup.step.error")}})();return jsxRuntime.jsxs("div",{className:ui.cn("border-divider flex items-start justify-between gap-3 rounded-md border p-3",e.status==="error"&&"border-danger",e.status==="done"&&"border-success/40 bg-success/5",e.status==="skipped"&&"border-default bg-default-100/40"),children:[jsxRuntime.jsxs("div",{className:"flex-1",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[jsxRuntime.jsx(Ju,{status:e.status,isCurrent:r}),jsxRuntime.jsx("span",{children:i})]}),jsxRuntime.jsx("p",{className:"text-foreground-500 mt-1 text-xs",children:o}),e.status==="error"&&e.error&&jsxRuntime.jsx("p",{className:"text-danger mt-1 text-xs",children:e.error})]}),jsxRuntime.jsxs("div",{className:"flex flex-col items-end gap-1 text-xs",children:[jsxRuntime.jsx("span",{className:ui.cn(Zu(e.status)),children:a}),e.status==="error"&&s&&jsxRuntime.jsx(ui.Button,{size:"sm",variant:"flat",color:"danger",onPress:()=>s(t),children:n("perpDeposit.setup.retry")})]})]})}function Xu(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center gap-2 py-2 text-sm",children:[jsxRuntime.jsx(ui.Spinner,{size:"sm"}),jsxRuntime.jsx("span",{children:e("perpDeposit.setup.loading")})]})}function Ju({status:e,isCurrent:t}){return e==="running"||t?jsxRuntime.jsx(ui.Spinner,{size:"sm"}):e==="done"||e==="skipped"?jsxRuntime.jsx("span",{"aria-hidden":true,className:"text-success",children:"\u2713"}):e==="error"?jsxRuntime.jsx("span",{"aria-hidden":true,className:"text-danger",children:"!"}):jsxRuntime.jsx("span",{"aria-hidden":true,className:"border-foreground-400 inline-block h-3 w-3 rounded-full border"})}function Zu(e){switch(e){case "done":return "text-success";case "skipped":return "text-foreground-500";case "running":return "text-primary";case "error":return "text-danger";default:return "text-foreground-500"}}function ep(e,t){return t()}function tp({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:i,onDismiss:o,className:a}){let{state:l,runNext:u,runStep:p,reload:c}=wt({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:i}),d=react.useCallback(()=>{u();},[u]),y=react.useCallback(f=>{p(f);},[p]),m=react.useCallback(()=>{c();},[c]);return jsxRuntime.jsx(Ss,{state:l,onContinue:d,onRetryStep:y,onReload:m,onDismiss:o,className:a})}exports.ClosePositionModal=Xr;exports.CoinInfoNotFoundUI=hr;exports.CoinInfoSkeletonsUI=vr;exports.CoinInfoUI=Tr;exports.CoinInfoWidget=zo;exports.DEFAULT_ORDER_BOOK_PRECISION_OPTIONS=Nn;exports.DepositConfirmUI=ms;exports.DepositFlowWidget=Wu;exports.DepositFormUI=fs;exports.DepositStatusUI=gs;exports.HL_USDC_DECIMALS=mu;exports.HyperliquidApiError=Pe;exports.HyperliquidInitUI=Ss;exports.HyperliquidInitWidget=tp;exports.HyperliquidPerpetualsClient=jt;exports.LiberFiApiError=pe;exports.LiberFiHttpTransport=Ne;exports.LiberFiPerpDepositClient=Xt;exports.LiberFiPerpetualsClient=Yt;exports.OpenOrdersEmpty=Ql;exports.OpenOrdersSkeleton=Bl;exports.OpenOrdersUI=ns;exports.OpenOrdersWidget=jl;exports.OrderBookUI=Nr;exports.OrderBookWidget=va;exports.PerpetualsContext=Ce;exports.PerpetualsProvider=Gi;exports.PlaceOrderFormUI=$r;exports.PlaceOrderFormWidget=hl;exports.PositionsEmpty=Nl;exports.PositionsSkeleton=rs;exports.PositionsUI=ts;exports.PositionsWidget=Ul;exports.SearchCoinsUI=wr;exports.SearchCoinsWidget=jo;exports.TERMINAL_DEPOSIT_STATUSES=nt;exports.TradeHistoryEmpty=uu;exports.TradeHistorySkeleton=lu;exports.TradeHistoryUI=ps;exports.TradeHistoryWidget=pu;exports.TradesUI=qr;exports.TradesWidget=Ja;exports.accountStateQueryKey=Ye;exports.activeAssetLeverageQueryKey=Pt;exports.aggregationFromStep=Cn;exports.assetMetaQueryKey=Xs;exports.cancelOrder=en;exports.classifyStep=Ct;exports.coinsQueryKey=Rs;exports.createOrder=Zs;exports.currentDepositBreakdown=zi;exports.currentDepositStatus=Ki;exports.fetchActiveAssetLeverage=js;exports.fetchAssetMeta=Js;exports.fetchCoins=As;exports.fetchKlines=_s;exports.fetchMarket=Is;exports.fetchMarkets=qs;exports.fetchOrderBook=Qs;exports.fetchOrders=$s;exports.fetchPerpDepositQuote=sn;exports.fetchPerpDepositStatus=ln;exports.fetchPositions=Ws;exports.fetchRecentTrades=zs;exports.fetchTrades=Gs;exports.fetchUniverse=Te;exports.hlUsdcRawToUsdc=Kt;exports.initialDepositState=xt;exports.initialSetupState=lt;exports.isDepositPolling=Qi;exports.isDepositTerminal=Bi;exports.isTerminalDepositLifecycle=Wi;exports.klinesQueryKey=Hs;exports.lamportsToSol=yt;exports.marketQueryKey=Ms;exports.marketsQueryKey=Fs;exports.microUsdcToUsdc=yu;exports.nextRunnableStep=Ot;exports.orderBookQueryKey=Bs;exports.ordersQueryKey=je;exports.perpDepositQuoteQueryKey=rn;exports.perpDepositStatusQueryKey=an;exports.positionsQueryKey=Ge;exports.recentTradesQueryKey=Ks;exports.reduceDepositState=Jt;exports.reduceSetupState=Tt;exports.secondsUntil=gt;exports.shortAddress=ds;exports.solToLamports=cs;exports.supportsUniverseSnapshot=Oe;exports.tradesQueryKey=Vs;exports.universeQueryKey=ye;exports.useAccountStateQuery=mr;exports.useAccountStateSubscription=To;exports.useActiveAssetLeverageQuery=ir;exports.useAssetMetaQuery=at;exports.useCancelOrderMutation=lr;exports.useCandlesSubscription=bo;exports.useClosePosition=Zr;exports.useCoinInfo=Cr;exports.useCoinsQuery=Zt;exports.useCreateOrderMutation=ar;exports.useHyperliquidSetup=wt;exports.useHyperliquidUserBootstrap=wo;exports.useKlinesQuery=to;exports.useMarketDataSubscription=Ue;exports.useMarketQuery=it;exports.useMarketsQuery=er;exports.useOpenOrdersScript=ss;exports.useOrderBookQuery=tr;exports.useOrderBookScript=Er;exports.useOrdersQuery=sr;exports.usePerpDepositClient=ko;exports.usePerpDepositClientMaybe=Me;exports.usePerpDepositExecute=gr;exports.usePerpDepositQuote=yr;exports.usePerpDepositStatus=br;exports.usePerpetualsClient=E;exports.usePlaceOrderFormScript=_r;exports.usePositionsQuery=ot;exports.usePositionsScript=es;exports.useRecentTradesQuery=rr;exports.useSearchCoinsScript=Dr;exports.useTradeHistoryScript=as;exports.useTradesQuery=nr;exports.useTradesScript=Ir;exports.useUniverseQuery=Zi;exports.useUserDataSubscription=So;exports.version=Ti;//# sourceMappingURL=index.js.map
|
|
45
45
|
//# sourceMappingURL=index.js.map
|