@liberfi.io/ui-perpetuals 0.2.16 → 0.2.17

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.js CHANGED
@@ -1,4 +1,6 @@
1
- 'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime'),reactQuery=require('@tanstack/react-query'),ui$1=require('@liberfi.io/ui'),reactWindow=require('react-window'),hooks=require('@liberfi.io/hooks'),reactHookForm=require('react-hook-form'),i18n=require('@liberfi.io/i18n');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-perpetuals"]="0.2.16");var Us="0.2.16";function Fs(t,e,r){if(t!=="orderBook"||!r||r.nSigFigs===void 0)return `${t}:${e}`;let s=r.nSigFigs===5&&r.mantissa&&r.mantissa!==1?`:m${r.mantissa}`:"";return `${t}:${e}:n${r.nSigFigs}${s}`}var ue=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(e){this.wsEndpoint=e;}async connect(){if(!(this.isConnected&&this.ws?.readyState===WebSocket.OPEN))return this.connectPromise?this.connectPromise:(this.manuallyDisconnected=false,this.connectPromise=new Promise((e,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(e));},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 e=Math.min(this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1),3e4);console.log(`[WebSocket] Reconnecting in ${e}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;});},e);}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(e){this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(e)):this.messageQueue.push(e);}flushMessageQueue(){for(;this.messageQueue.length>0;){let e=this.messageQueue.shift();e&&this.send(e);}}resubscribeAll(){this.subscriptions.forEach(e=>{this.sendSubscription(e.type,e.param,e.aggregation);});}handleMessage(e){try{let r=JSON.parse(e);r.channel?this.handleChannelMessage(r):r.method;}catch(r){console.error("[WebSocket] Failed to parse message:",r,e);}}handleChannelMessage(e){let r=e.channel;this.subscriptions.forEach((s,n)=>{if(this.isChannelMatch(r,s.type,s.param,e))try{let i=this.transformData(s.type,e.data,s.param);s.callback(i);}catch(i){console.error(`[WebSocket] Error in subscription callback (${n}):`,i);}});}isChannelMatch(e,r,s,n){if(r==="ticker"){if(e!=="activeAssetCtx")return false;let i=s.split("-")[0],o=n?.data?.coin;return typeof o=="string"&&o===i}else if(r==="trades"){if(e!=="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(e!=="l2Book")return false;let i=s.split("-")[0],o=n?.data?.coin;return typeof o=="string"&&o===i}else {if(r==="candle")return e==="candle";if(r==="userFills")return e==="userFills";if(r==="userEvents")return e==="userEvents"}return false}transformData(e,r,s){return e==="ticker"?this.transformTickerData(r,s):e==="trades"?this.transformTradesData(r,s):e==="orderBook"?this.transformOrderBookData(r,s):e==="candle"?this.transformCandleData(r,s):e==="userFills"?this.transformUserFillsData(r):e==="userEvents"?this.transformUserEventsData(r):r}transformTickerData(e,r){let n=`${e?.coin??r.split("-")[0]}-USDC`,i=e?.ctx??{},o=parseFloat(i.midPx??i.markPx??"0"),p=parseFloat(i.markPx??i.midPx??"0"),a=i.prevDayPx?parseFloat(i.prevDayPx):o,l=a>0?(o-a)/a*100:0;return {symbol:n,price:o,change24h:l,volume24h:parseFloat(i.dayNtlVlm??"0"),fundingRate:parseFloat(i.funding??"0"),openInterest:parseFloat(i.openInterest??"0"),markPrice:p,indexPrice:parseFloat(i.oraclePx??i.midPx??"0")}}transformTradesData(e,r){return Array.isArray(e)?e.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(e,r){let[s,n]=e.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:e.time||Date.now()}}transformCandleData(e,r){let[s]=r.split(":");return {symbol:s,open:parseFloat(e.o),high:parseFloat(e.h),low:parseFloat(e.l),close:parseFloat(e.c),volume:parseFloat(e.v),timestamp:e.t,closeTimestamp:e.T}}transformUserFillsData(e){return Array.isArray(e)?e.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(e){return e}sendSubscription(e,r,s){let n;if(e==="ticker")n={method:"subscribe",subscription:{type:"activeAssetCtx",coin:r.split("-")[0]}};else if(e==="trades")n={method:"subscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(e==="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(e==="candle"){let[i,o]=r.split(":");n={method:"subscribe",subscription:{type:"candle",coin:i.split("-")[0],interval:o}};}else e==="userFills"?n={method:"subscribe",subscription:{type:"userFills",user:r}}:e==="userEvents"&&(n={method:"subscribe",subscription:{type:"userEvents",user:r}});n&&this.send(n);}sendUnsubscription(e,r,s){let n;if(e==="ticker")n={method:"unsubscribe",subscription:{type:"activeAssetCtx",coin:r.split("-")[0]}};else if(e==="trades")n={method:"unsubscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(e==="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(e==="candle"){let[i,o]=r.split(":");n={method:"unsubscribe",subscription:{type:"candle",coin:i.split("-")[0],interval:o}};}else e==="userFills"?n={method:"unsubscribe",subscription:{type:"userFills",user:r}}:e==="userEvents"&&(n={method:"unsubscribe",subscription:{type:"userEvents",user:r}});n&&this.send(n);}subscribe(e,r,s,n){let i=Fs(e,r,n);return this.subscriptions.set(i,{type:e,param:r,callback:s,aggregation:n}),this.sendSubscription(e,r,n),i}unsubscribe(e){let r=this.subscriptions.get(e);r&&(this.sendUnsubscription(r.type,r.param,r.aggregation),this.subscriptions.delete(e));}isConnectedNow(){return this.isConnected}};var lr={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"}},Ye=class{apiEndpoint;_wsEndpoint;timeout;environment;wsManager=null;wsRefCount=0;constructor(e={}){this.environment=e.environment||"testnet",this.apiEndpoint=e.apiEndpoint||lr[this.environment].api,this._wsEndpoint=e.wsEndpoint||lr[this.environment].ws,this.timeout=e.timeout||3e4;}async request(e,r){let s=`${this.apiEndpoint}${e}`;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 re(`HTTP ${o.status}: ${o.statusText}`,o.status,await o.text());return await o.json()}catch(n){throw n.name==="AbortError"?new re(`Request timeout after ${this.timeout}ms`,408,""):n instanceof re?n:new re(`Network error: ${n.message}`,0,"")}}symbolToCoin(e){return e.split("-")[0]}parseInterval(e){return {"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"1d":864e5,"1w":6048e5}[e]}async getSupportedCoins(){let[e]=await this.request("/info",{type:"metaAndAssetCtxs"});return e.universe.map(r=>`${r.name}-USDC`)}async getMarket(e){let r=await this.getMarkets([e]);return r.length>0?r[0]:null}async getMarkets(e){let[r,s]=await this.request("/info",{type:"metaAndAssetCtxs"}),n=r.universe.map((i,o)=>{let p=s[o],a=`${i.name}-USDC`,l=parseFloat(p.midPx||p.markPx||"0"),u=p.prevDayPx?parseFloat(p.prevDayPx):l,d=u>0?(l-u)/u*100:0;return {symbol:a,price:l,change24h:d,volume24h:parseFloat(p.dayNtlVlm||"0"),fundingRate:parseFloat(p.funding||"0"),openInterest:parseFloat(p.openInterest||"0"),markPrice:parseFloat(p.markPx||"0"),indexPrice:parseFloat(p.oraclePx||p.midPx||"0")}});if(e&&e.length>0){let i=new Set(e);return n.filter(o=>i.has(o.symbol))}return n}async getKlines(e,r,s=100){let n=this.symbolToCoin(e),i=typeof s=="number"?{limit:s}:s,o=this.parseInterval(r),p=i.limit,a,l;i.from!==void 0&&i.to!==void 0?(a=i.from,l=i.to):i.to!==void 0&&p?(l=i.to,a=l-o*p):i.from!==void 0&&p?(a=i.from,l=a+o*p):(l=Date.now(),a=l-o*(p??100));let d=(await this.request("/info",{type:"candleSnapshot",req:{coin:n,interval:r,startTime:a,endTime:l}})).map(m=>({symbol:e,open:parseFloat(m.o),high:parseFloat(m.h),low:parseFloat(m.l),close:parseFloat(m.c),volume:parseFloat(m.v),timestamp:m.t,closeTimestamp:m.T}));return p&&d.length>p&&(d=d.slice(d.length-p)),d}async getOrderBook(e,r=10,s){let i={type:"l2Book",coin:this.symbolToCoin(e)};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),[p,a]=o.levels;return {symbol:e,bids:p.slice(0,r).map(l=>({price:parseFloat(l.px),quantity:parseFloat(l.sz),count:l.n})),asks:a.slice(0,r).map(l=>({price:parseFloat(l.px),quantity:parseFloat(l.sz),count:l.n})),timestamp:o.time}}async getRecentTrades(e,r=50){let s=this.symbolToCoin(e);return (await this.request("/info",{type:"recentTrades",coin:s})).slice(0,r).map(i=>({symbol:e,side:i.side==="B"?"buy":"sell",price:parseFloat(i.px),quantity:parseFloat(i.sz),timestamp:i.time,tradeId:i.tid}))}async placeOrder(e){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(e){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(e={}){if(!e.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"clearinghouseState",user:e.userAddress}),s=r.assetPositions.map(i=>{let o=i.position,p=`${o.coin}-USDC`,a=parseFloat(o.szi);if(a===0)return null;let l=parseFloat(o.entryPx),u=parseFloat(o.unrealizedPnl),d=parseFloat(o.positionValue);return {symbol:p,side:a>0?"long":"short",quantity:Math.abs(a),entryPrice:l,markPrice:l,unrealizedPnl:u,unrealizedPnlPercent:parseFloat(o.returnOnEquity)*100,leverage:o.leverage.value,liquidationPrice:o.liquidationPx?parseFloat(o.liquidationPx):void 0,margin:parseFloat(o.marginUsed),notionalValue:Math.abs(d)}}).filter(Boolean),n=e.symbol?s.filter(i=>i.symbol===e.symbol):s;return {positions:n,totalEquity:parseFloat(r.marginSummary.accountValue),availableBalance:parseFloat(r.marginSummary.accountValue)-parseFloat(r.marginSummary.totalMarginUsed),totalUnrealizedPnl:n.reduce((i,o)=>i+o.unrealizedPnl,0),raw:r}}async getOpenOrders(e={}){if(!e.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"openOrders",user:e.userAddress}),s=r.map(i=>{let o=`${i.coin}-USDC`,p=parseFloat(i.origSz),a=parseFloat(i.sz),l=p-a;return {orderId:i.oid.toString(),clientOrderId:i.cloid,symbol:o,side:i.side?"long":"short",orderType:"limit",price:parseFloat(i.limitPx),quantity:p,filledQuantity:l,remainingQuantity:a,status:l>0&&a>0?"partially_filled":"pending",timestamp:i.timestamp,updateTimestamp:i.timestamp}}),n=e.symbol?s.filter(i=>i.symbol===e.symbol):s;return {orders:n,totalCount:n.length,raw:r}}async getTrades(e={}){if(!e.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"userFills",user:e.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}});return e.symbol&&(s=s.filter(n=>n.symbol===e.symbol)),e.startTime&&(s=s.filter(n=>n.timestamp>=e.startTime)),e.endTime&&(s=s.filter(n=>n.timestamp<=e.endTime)),e.limit&&(s=s.slice(0,e.limit)),{trades:s,totalCount:s.length,raw:r}}async connectWebSocket(){this.wsRefCount+=1,this.wsManager||(this.wsManager=new ue(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(e,r,s,n){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe(e,r,s,n?.aggregation)}subscribeCandles(e,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=`${e}:${r}`;return this.wsManager.subscribe("candle",n,s)}subscribeUserData(e,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=e==="fills"?"userFills":"userEvents";return this.wsManager.subscribe(n,r,s)}unsubscribe(e){this.wsManager&&this.wsManager.unsubscribe(e);}},re=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="HyperliquidApiError";}};var z=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="LiberFiApiError";}},As=3e4,se=class{baseUrl;timeout;headers;defaultQuery;fetchImpl;constructor(e){if(!e.baseUrl)throw new Error("LiberFiHttpTransport: `baseUrl` is required (e.g. https://api.liberfi.io/perpetuals).");this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.timeout=e.timeout??As,this.headers=e.headers,this.defaultQuery=e.defaultQuery,this.fetchImpl=e.fetchImpl??globalThis.fetch.bind(globalThis);}getBaseUrl(){return this.baseUrl}buildUrl(e,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}${e}${n?`?${n}`:""}`}async request(e,r){let s=this.buildUrl(r.path,r.query),n=new AbortController,i=r.timeoutMs??this.timeout,o=setTimeout(()=>n.abort(),i);try{let p=await this.fetchImpl(s,{method:e,headers:{Accept:"application/json",...e==="POST"?{"Content-Type":"application/json"}:{},...this.headers,...r.headers},body:e==="POST"?JSON.stringify(r.body??{}):void 0,signal:n.signal});if(!p.ok){let a=await Ms(p);throw new z(`HTTP ${p.status} ${p.statusText} from ${e} ${s}`,p.status,a)}return p.status===204?void 0:await p.json()}catch(p){if(p instanceof z)throw p;if(p instanceof Error&&p.name==="AbortError")throw new z(`Request timeout after ${i}ms: ${e} ${s}`,408,"");let a=p instanceof Error?p.message:String(p);throw new z(`Network error: ${e} ${s}: ${a}`,0,"")}finally{clearTimeout(o);}}};async function Ms(t){try{return await t.text()}catch{return ""}}var qs="wss://api.hyperliquid.xyz/ws",Je=class{transport;wsEndpoint;signTypedData;wsManager=null;wsRefCount=0;constructor(e){if(e.transport)this.transport=e.transport;else {if(!e.baseUrl)throw new Error("LiberFiPerpetualsClient: either `baseUrl` or a pre-built `transport` is required.");this.transport=new se({baseUrl:e.baseUrl,timeout:e.timeout,headers:e.headers,defaultQuery:e.provider?{provider:e.provider}:void 0});}this.wsEndpoint=e.wsEndpoint??qs,this.signTypedData=e.signTypedData;}async getSupportedCoins(){return (await this.transport.request("GET",{path:"/v1/coins"})).map(r=>r.symbol)}async getMarket(e){try{return await this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(e)}`})}catch(r){if(r instanceof z&&r.statusCode===404)return null;throw r}}async getMarkets(e){return this.transport.request("GET",{path:"/v1/markets",query:e&&e.length>0?{symbols:e.join(",")}:void 0})}async getKlines(e,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(e)}/klines`,query:i})}async getOrderBook(e,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(e)}/orderbook`,query:n})}async getRecentTrades(e,r=50){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(e)}/trades`,query:{limit:String(r)}})}async getPositions(e={}){if(!e.userAddress)throw new Error("LiberFiPerpetualsClient.getPositions requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(e.userAddress)}/positions`,query:{symbol:e.symbol}});return {positions:r.positions,totalEquity:r.account?.totalEquity,availableBalance:r.account?.availableBalance,totalUnrealizedPnl:r.account?.totalUnrealizedPnl,raw:r}}async getOpenOrders(e={}){if(!e.userAddress)throw new Error("LiberFiPerpetualsClient.getOpenOrders requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(e.userAddress)}/orders`,query:{symbol:e.symbol}});return {orders:r,totalCount:r.length,raw:r}}async getTrades(e={}){if(!e.userAddress)throw new Error("LiberFiPerpetualsClient.getTrades requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(e.userAddress)}/fills`,query:{symbol:e.symbol,limit:e.limit!==void 0?String(e.limit):void 0,startTime:e.startTime!==void 0?String(e.startTime):void 0,endTime:e.endTime!==void 0?String(e.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 placeOrder(e){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.placeOrder requires `signTypedData` to be configured.");if(!e.userAddress)throw new Error("LiberFiPerpetualsClient.placeOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/prepare",body:{userAddress:e.userAddress,symbol:e.symbol,side:e.side,orderType:e.orderType,amount:e.amount,price:e.price,leverage:e.leverage,reduceOnly:e.reduceOnly,takeProfitPrice:e.takeProfitPrice,stopLossPrice:e.stopLossPrice,clientOrderId:e.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(e){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `signTypedData` to be configured.");if(!e.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:e.userAddress,symbol:e.symbol,orderId:e.orderId,clientOrderId:e.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 ue(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(e,r,s,n){return this.requireWS().subscribe(e,r,s,n?.aggregation)}subscribeCandles(e,r,s){return this.requireWS().subscribe("candle",`${e}:${r}`,s)}subscribeUserData(e,r,s){let n=e==="fills"?"userFills":"userEvents";return this.requireWS().subscribe(n,r,s)}unsubscribe(e){this.wsManager&&this.wsManager.unsubscribe(e);}requireWS(){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager}};var Xe=class{transport;constructor(e){this.transport="transport"in e?e.transport:new se(e);}getBaseUrl(){return this.transport.getBaseUrl()}async quote(e){return this.transport.request("POST",{path:"/v1/deposits/quote",body:e})}async submit(e){return this.transport.request("POST",{path:"/v1/deposits/submit",body:e})}async status(e){if(!e)throw new Error("intentId is required");return this.transport.request("GET",{path:`/v1/deposits/${encodeURIComponent(e)}`})}async refresh(e){if(!e)throw new Error("intentId is required");return this.transport.request("POST",{path:`/v1/deposits/${encodeURIComponent(e)}/refresh`})}};var Se=new Set(["settled","refunded","failed"]);var Ue={phase:"idle"};function Ze(t,e){switch(e.type){case "RESET":return Ue;case "QUOTE_REQUEST":return t.phase==="idle"||t.phase==="ready_to_sign"||t.phase==="expired"||t.phase==="failed"?{phase:"quoting"}:t;case "QUOTE_RECEIVED":return t.phase==="quoting"?{phase:"ready_to_sign",quote:e.quote,expiresAtMs:Date.parse(e.quote.expiresAt)}:t;case "QUOTE_FAILED":return t.phase==="quoting"?{phase:"failed",error:e.error}:t;case "QUOTE_EXPIRED":return t.phase==="ready_to_sign"?{phase:"expired",quote:t.quote}:t;case "SIGN_START":return t.phase==="ready_to_sign"?{phase:"signing",quote:t.quote}:t;case "SIGN_FAILED":return t.phase==="signing"?{phase:"failed",error:e.error}:t;case "BROADCAST_START":return t.phase==="signing"?{phase:"broadcasting",quote:t.quote}:t;case "BROADCAST_FAILED":return t.phase==="broadcasting"||t.phase==="signing"?{phase:"failed",error:e.error}:t;case "SUBMIT_OK":return t.phase==="broadcasting"?{phase:"submitted",quote:t.quote,intentId:e.intentId,solanaTxHash:e.solanaTxHash}:t;case "SUBMIT_FAILED":return t.phase==="broadcasting"?{phase:"failed",error:e.error}:t;case "STATUS_UPDATE":{if(t.phase!=="submitted"&&t.phase!=="tracking")return t;let r=(t.phase==="submitted",t.intentId);return Ls(e.status,r)}}}function Ls(t,e){switch(t.status){case "settled":return {phase:"succeeded",intentId:e,status:t};case "refunded":return {phase:"refunded",intentId:e,status:t};case "failed":case "stuck":return {phase:"failed",error:t.lastError??{code:t.status==="stuck"?"STUCK":"FAILED",message:t.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:e,status:t};default:return {phase:"tracking",intentId:e,status:t}}}function Bs(t){return t.phase==="succeeded"||t.phase==="refunded"||t.phase==="failed"}function _s(t){return t.phase==="submitted"||t.phase==="tracking"}function Qs(t){if(t.phase==="tracking"||t.phase==="succeeded"||t.phase==="refunded"||t.phase==="failed"&&t.status)return t.status.status}function Hs(t){if(t.phase==="ready_to_sign"||t.phase==="signing"||t.phase==="broadcasting"||t.phase==="submitted"||t.phase==="expired")return t.quote.breakdown;if(t.phase==="tracking"||t.phase==="succeeded"||t.phase==="refunded"||t.phase==="failed"&&t.status)return t.status.breakdown}function zs(t){return t!==void 0&&Se.has(t)}var J=react.createContext({});function Ks({client:t,depositClient:e,children:r}){let s=react.useMemo(()=>({client:t,depositClient:e}),[t,e]);return jsxRuntime.jsx(J.Provider,{value:s,children:r})}function D(){let t=react.useContext(J);if(!t||!t.client)throw new Error("usePerpetualsClient must be used within a PerpetualsProvider");return t}function ur(){return ["perps","coins"]}async function cr(t){return await t.getSupportedCoins()}function et(t={}){let{client:e}=D();return reactQuery.useQuery({queryKey:ur(),queryFn:async()=>cr(e),staleTime:300*1e3,...t})}function dr(t){return ["perps","market",t.symbol]}async function mr(t,{symbol:e}){return await t.getMarket(e)}function Pe(t,e={}){let{client:r}=D();return reactQuery.useQuery({queryKey:dr(t),queryFn:async()=>mr(r,t),staleTime:10*1e3,...e})}function fr(t={}){return ["perps","markets",JSON.stringify((t.symbols??[]).sort())]}async function gr(t,{symbols:e}={}){return await t.getMarkets(e)}function tt(t={},e={}){let{client:r}=D();return reactQuery.useQuery({queryKey:fr(t),queryFn:async()=>gr(r,t),staleTime:10*1e3,...e})}function yr(t){return ["perps","klines",t.symbol,t.interval,String(t.limit??100)]}async function br(t,{symbol:e,interval:r,limit:s}){return await t.getKlines(e,r,s)}function Zs(t,e={}){let{client:r}=D();return reactQuery.useQuery({queryKey:yr(t),queryFn:async()=>br(r,t),staleTime:30*1e3,...e})}function hr(t){let e=t.aggregation,r=e?.nSigFigs!==void 0?`n${e.nSigFigs}${e.nSigFigs===5&&e.mantissa&&e.mantissa!==1?`m${e.mantissa}`:""}`:"raw";return ["perps","orderBook",t.symbol,String(t.maxLevel??20),r]}async function xr(t,{symbol:e,maxLevel:r,aggregation:s}){return await t.getOrderBook(e,r,s)}function rt(t,e={}){let{client:r}=D();return reactQuery.useQuery({queryKey:hr(t),queryFn:async()=>xr(r,t),staleTime:5*1e3,...e})}function Sr(t){return ["perps","recentTrades",t.symbol,String(t.limit??50)]}async function Pr(t,{symbol:e,limit:r}){return await t.getRecentTrades(e,r)}function st(t,e={}){let{client:r}=D();return reactQuery.useQuery({queryKey:Sr(t),queryFn:async()=>Pr(r,t),staleTime:5*1e3,...e})}function vr(t){return ["perps","positions",t.userAddress??"",t.symbol??""]}async function Cr(t,e){return await t.getPositions(e)}function ve(t,e={}){let{client:r}=D(),{enabled:s=true,...n}=t;return reactQuery.useQuery({queryKey:vr(n),queryFn:async()=>Cr(r,n),enabled:s&&!!n.userAddress,staleTime:10*1e3,...e})}function Tr(t){return ["perps","orders",t.userAddress??"",t.symbol??""]}async function Dr(t,e){return await t.getOpenOrders(e)}function nt(t,e={}){let{client:r}=D(),{enabled:s=true,...n}=t;return reactQuery.useQuery({queryKey:Tr(n),queryFn:async()=>Dr(r,n),enabled:s&&!!n.userAddress,staleTime:5*1e3,...e})}function kr(t){return ["perps","trades",t.userAddress??"",t.symbol??"",String(t.limit??50),String(t.startTime??""),String(t.endTime??"")]}async function wr(t,e){return await t.getTrades(e)}function it(t,e={}){let{client:r}=D(),{enabled:s=true,...n}=t;return reactQuery.useQuery({queryKey:kr(n),queryFn:async()=>wr(r,n),enabled:s&&!!n.userAddress,staleTime:30*1e3,...e})}async function Or(t,e){return await t.placeOrder(e)}function Ce(t={}){let{client:e}=D();return reactQuery.useMutation({mutationFn:async r=>Or(e,r),...t})}async function Rr(t,e){return await t.cancelOrder(e)}function ot(t={}){let{client:e}=D();return reactQuery.useMutation({mutationFn:async r=>Rr(e,r),...t})}function ne(t){let{type:e,symbol:r,enabled:s=true,aggregation:n,throttleMs:i}=t,{client:o}=D(),[p,a]=react.useState(null),[l,u]=react.useState(false),[d,m]=react.useState(null),f=react.useRef(null),c=react.useRef(null),g=react.useRef(i);g.current=i;let E=react.useCallback(x=>{let v=g.current;if(!v||v<=0){a(x);return}f.current=x,c.current===null&&(c.current=setTimeout(()=>{if(c.current=null,f.current!==null){let O=f.current;f.current=null,a(O);}},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 x=null,v=true;return (async()=>{try{if(await o.connectWebSocket(),!v)return;u(!0),m(null),x=o.subscribeMarketData(e,r,E,e==="orderBook"&&n?{aggregation:n}:void 0);}catch(R){v&&(m(R instanceof Error?R:new Error("Connection failed")),u(false));}})(),()=>{if(v=false,x)try{o.unsubscribe(x);}catch(R){console.error("Failed to unsubscribe:",R);}o.disconnectWebSocket(),c.current!==null&&(clearTimeout(c.current),c.current=null),f.current=null,u(false),a(null);}},[o,e,r,s,E,h]),{data:p,isConnected:l,error:d}}function dn(t){let{symbol:e,interval:r,enabled:s=true}=t,{client:n}=D(),[i,o]=react.useState(null),[p,a]=react.useState(false),[l,u]=react.useState(null),d=react.useCallback(m=>{o(m);},[]);return react.useEffect(()=>{if(!s)return;let m=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;a(!0),u(null),m=n.subscribeCandles(e,r,d);}catch(g){f&&(u(g instanceof Error?g:new Error("Connection failed")),a(false));}})(),()=>{if(f=false,m)try{n.unsubscribe(m);}catch(g){console.error("Failed to unsubscribe:",g);}n.disconnectWebSocket(),a(false),o(null);}},[n,e,r,s,d]),{data:i,isConnected:p,error:l}}function Te(t){let{type:e,userAddress:r,enabled:s=true}=t,{client:n}=D(),[i,o]=react.useState(null),[p,a]=react.useState(false),[l,u]=react.useState(null),d=react.useCallback(m=>{o(m);},[]);return react.useEffect(()=>{if(!s||!r)return;let m=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;a(!0),u(null),m=n.subscribeUserData(e,r,d);}catch(g){f&&(u(g instanceof Error?g:new Error("Connection failed")),a(false));}})(),()=>{if(f=false,m)try{n.unsubscribe(m);}catch(g){console.error("Failed to unsubscribe:",g);}n.disconnectWebSocket(),a(false),o(null);}},[n,e,r,s,d]),{data:i,isConnected:p,error:l}}function gn(){let t=react.useContext(J);if(!t||!t.client)throw new Error("usePerpDepositClient must be used within a <PerpetualsProvider>.");if(!t.depositClient)throw new Error("usePerpDepositClient: <PerpetualsProvider> was rendered without a `depositClient` prop. Pass a `LiberFiPerpDepositClient` instance to enable the deposit flow.");return t.depositClient}function ie(){return react.useContext(J)?.depositClient}function Nr(t){return ["perps","deposit","quote",t]}async function Ir(t,e){return t.quote(e)}function ct(t,e={}){let r=ie(),s=(e.enabled??!!bn(t))&&!!r;return reactQuery.useQuery({queryKey:Nr(t??null),queryFn:async()=>Ir(r,t),enabled:s,staleTime:0,gcTime:3e4,refetchOnWindowFocus:false,...e})}function bn(t){return !!(t&&t.userSolanaAddress&&t.hyperliquidRecipient&&t.grossLamports&&t.source)}function dt(t){let e=ie(),[r,s]=react.useReducer(Ze,Ue),n=react.useCallback(()=>{s({type:"RESET"});},[]),i=react.useCallback(async o=>{let{quote:p}=o;s({type:"SIGN_START"});let a;try{if(a=await t(p.serializedTxBase64,{isVersioned:p.isVersioned,sizeBytes:p.sizeBytes}),!a)throw new Error("wallet returned an empty tx hash")}catch(u){let d=Fr(u,"WALLET_SIGN_OR_BROADCAST_FAILED");throw s({type:"SIGN_FAILED",error:d}),u}s({type:"BROADCAST_START"});let l={userSolanaAddress:o.userSolanaAddress,hyperliquidRecipient:o.hyperliquidRecipient,solanaTxHash:a,breakdown:p.breakdown,userId:o.userId,source:o.source,campaign:o.campaign,quoteIssuedAt:p.issuedAt};if(!e)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 u=await e.submit(l);return s({type:"SUBMIT_OK",intentId:u.intentId,solanaTxHash:a}),u.intentId}catch(u){let d=Fr(u,"DEPOSIT_SUBMIT_FAILED");throw s({type:"SUBMIT_FAILED",error:d}),u}},[e,t]);return {state:r,execute:i,reset:n,dispatch:s}}function Fr(t,e){if(t instanceof z){let r=xn(t.responseBody);return {code:r?.code??e,message:r?.message??t.message,recoverable:t.statusCode>=500||t.statusCode===408}}return t instanceof Error?{code:e,message:t.message,recoverable:true}:{code:e,message:String(t),recoverable:true}}function xn(t){if(t)try{return JSON.parse(t)}catch{return}}function Ar(t){return ["perps","deposit","status",t??null]}async function Mr(t,e){return t.status(e)}function mt(t,e={}){let r=ie(),s=(e.enabled??!!t)&&!!r,n=e.pollIntervalMs??3e3;return reactQuery.useQuery({queryKey:Ar(t??void 0),queryFn:async()=>Mr(r,t),enabled:s,refetchInterval:i=>{let o=i.state.data;return o&&Se.has(o.status)?false:n},refetchOnWindowFocus:false,staleTime:0,...e})}var De={phase:"idle",steps:[]};function Fe(t,e){switch(t.id){case "approveBuilderFee":{let r=e.builderApproval;return r&&Pn(r.builder,t.params.builder)&&r.maxFeeRate>=t.params.maxFeeRate?"skipped":"pending"}case "setReferrer":return e.referrer?"skipped":"pending";case "updateLeverage":return e.leverage[t.params.asset]===t.params.leverage?"skipped":"pending"}}function Ae(t,e){switch(e.type){case "START_LOADING":return {phase:"loading",steps:t.steps,accountState:t.accountState};case "LOAD_SUCCESS":return {phase:e.steps.every(s=>s.status==="skipped"||s.status==="done")?"done":"ready",accountState:e.accountState,steps:e.steps};case "LOAD_ERROR":return {phase:"error",steps:t.steps,error:e.error};case "RUN_STEP":return {phase:"executing",steps:t.steps.map((s,n)=>n===e.index?{...s,status:"running",error:void 0}:s),accountState:t.accountState,currentIndex:e.index};case "STEP_SUCCESS":{let r=t.steps.map((i,o)=>o===e.index?{...i,status:"done",txHash:e.txHash,error:void 0}:i),s=e.accountState&&t.accountState?vn(t.accountState,e.accountState):e.accountState??t.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:t.steps.map((s,n)=>n===e.index?{...s,status:"error",error:e.error}:s),accountState:t.accountState,currentIndex:void 0};case "RESET":return De}}function Me(t){for(let e=0;e<t.steps.length;e++){let r=t.steps[e].status;if(r==="pending"||r==="error")return e}return null}function Pn(t,e){return t.toLowerCase()===e.toLowerCase()}function vn(t,e){return {builderApproval:e.builderApproval!==void 0?e.builderApproval:t.builderApproval,referrer:e.referrer!==void 0?e.referrer:t.referrer,leverage:{...t.leverage,...e.leverage??{}}}}function Le(t){let{adapter:e,userAddress:r,steps:s,autoLoad:n=true,onComplete:i,onError:o}=t,[p,a]=react.useReducer(Ae,De),l=react.useRef(e),u=react.useRef(s),d=react.useRef(i),m=react.useRef(o);l.current=e,u.current=s,d.current=i,m.current=o;let f=react.useCallback(async()=>{if(r){a({type:"START_LOADING"});try{let x=await l.current.getAccountState(r),v=u.current.map(O=>({step:O,status:Fe(O,x)}));a({type:"LOAD_SUCCESS",accountState:x,steps:v});}catch(x){let v=Lr(x);a({type:"LOAD_ERROR",error:v.message}),m.current?.(v,{});}}},[r]);react.useEffect(()=>{n&&r&&f();},[n,r,f]);let c=react.useCallback(async x=>{let v=p.steps[x];if(v){a({type:"RUN_STEP",index:x});try{let O=await Tn(l.current,v.step);a({type:"STEP_SUCCESS",index:x,txHash:O.txHash,accountState:O.state});}catch(O){let R=Lr(O);a({type:"STEP_ERROR",index:x,error:R.message}),m.current?.(R,{stepId:v.step.id});}}},[p.steps]),g=react.useCallback(async()=>{let x=Me(p);x!=null&&await c(x);},[p,c]),E=react.useCallback(()=>a({type:"RESET"}),[]),h=react.useRef(false);return react.useEffect(()=>{p.phase==="done"&&!h.current?(h.current=true,d.current?.(p)):p.phase!=="done"&&(h.current=false);},[p]),{state:p,reload:f,runNext:g,runStep:c,reset:E}}function Tn(t,e){switch(e.id){case "approveBuilderFee":return t.approveBuilderFee(e.params);case "setReferrer":return t.setReferrer(e.params);case "updateLeverage":return t.updateLeverage(e.params)}}function Lr(t){return t instanceof Error?t:new Error(typeof t=="string"?t:"Unknown error")}function ft(){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"})})}function yt(){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(ui$1.Skeleton,{className:"rounded",style:{width:84,height:23}}),jsxRuntime.jsx(ui$1.Skeleton,{className:"rounded",style:{width:52,height:16}})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsx(gt,{labelWidth:72,valueWidth:64}),jsxRuntime.jsx(gt,{labelWidth:72,valueWidth:48}),jsxRuntime.jsx(gt,{labelWidth:84,valueWidth:56}),jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"rounded",style:{width:132,height:16}}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"rounded",style:{width:64,height:17}}),jsxRuntime.jsx(ui$1.Skeleton,{className:"rounded",style:{width:64,height:17}})]})]})]})]})}function gt({labelWidth:t,valueWidth:e}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"rounded",style:{width:t,height:16}}),jsxRuntime.jsx(ui$1.Skeleton,{className:"rounded",style:{width:e,height:17}})]})}function ht(t){let[e,r]=react.useState(),[s,n]=react.useState(0),{data:i,isPending:o}=Pe({symbol:t}),{data:p,isConnected:a}=ne({type:"ticker",symbol:t,enabled:!!i});return react.useEffect(()=>{i&&r(i);},[i]),react.useEffect(()=>{if(!p)return;let l=Dn(p,t);l&&r(u=>kn(u??i??void 0,l,t));},[p,i,t]),react.useEffect(()=>{let l=()=>{let d=Date.now(),m=480*60*1e3,f=d%m,c=m-f;return Math.floor(c/1e3)};n(l());let u=setInterval(()=>{n(l());},1e3);return ()=>clearInterval(u)},[]),{marketData:e,isLoading:o,fundingCountdown:s}}function Dn(t,e){if(Array.isArray(t)){let r=t.find(s=>!s||typeof s!="object"?false:s.symbol===e);return r&&typeof r=="object"?r:null}return t&&typeof t=="object"?t:null}function de(t,e){return typeof t=="number"&&Number.isFinite(t)?t:e}function kn(t,e,r){return {symbol:e.symbol??t?.symbol??r,price:de(e.price,t?.price??0),change24h:de(e.change24h,t?.change24h??0),volume24h:de(e.volume24h,t?.volume24h??0),fundingRate:de(e.fundingRate,t?.fundingRate??0),openInterest:de(e.openInterest,t?.openInterest??0),markPrice:de(e.markPrice,t?.markPrice??0),indexPrice:typeof e.indexPrice=="number"&&Number.isFinite(e.indexPrice)?e.indexPrice:t?.indexPrice,high24h:typeof e.high24h=="number"&&Number.isFinite(e.high24h)?e.high24h:t?.high24h,low24h:typeof e.low24h=="number"&&Number.isFinite(e.low24h)?e.low24h:t?.low24h}}function wn(t){let e=Math.floor(t/3600),r=Math.floor(t%3600/60),s=t%60;return `${String(e).padStart(2,"0")}:${String(r).padStart(2,"0")}:${String(s).padStart(2,"0")}`}function Qr(t,e=2){return typeof t!="number"||!Number.isFinite(t)?"-":t>=1e9?`$${(t/1e9).toFixed(e)}B`:t>=1e6?`$${(t/1e6).toFixed(e)}M`:t>=1e3?`$${(t/1e3).toFixed(e)}K`:`$${t.toFixed(e)}`}function Hr(t){return typeof t!="number"||!Number.isFinite(t)?"-":t>=1e3?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):t>=1?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):t.toFixed(6)}function xt({marketData:t,fundingCountdown:e}){let{symbol:r,price:s,change24h:n,indexPrice:i,volume24h:o,openInterest:p,fundingRate:a}=t,l=typeof n=="number"&&Number.isFinite(n)?n:0,u=typeof a=="number"&&Number.isFinite(a)?a:0,d=l>=0,m=l.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:Hr(s)}),jsxRuntime.jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:d?"#C7FF2E":"#F76816"},children:[d?"+":"",m,"%"]})]}),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?Hr(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:Qr(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:Qr(p*(t.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:u>=0?"#C7FF2E":"#F76816"},children:[(u*100).toFixed(5),"%"]}),jsxRuntime.jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"#ffffff"},children:wn(e)})]})]})]})]})}function On({symbol:t}){let{marketData:e,isLoading:r,fundingCountdown:s}=ht(t);return r?jsxRuntime.jsx(yt,{}):e?jsxRuntime.jsx(xt,{marketData:e,fundingCountdown:s}):jsxRuntime.jsx(ft,{})}function Pt({onSelectCoin:t}={}){let[e,r]=react.useState(""),[s,n]=react.useState([]),{data:i,isPending:o}=et(),{data:p,isPending:a}=tt({symbols:i},{enabled:!!i&&i.length>0});react.useEffect(()=>{p&&n(p);},[p]);let l=react.useMemo(()=>{if(!e.trim())return s;let d=e.toLowerCase().trim();return s.filter(m=>m.symbol.toLowerCase().includes(d))},[s,e]);return {coins:s,isLoading:o||a,searchQuery:e,setSearchQuery:r,filteredCoins:l,handleSelectCoin:d=>{t?.(d);}}}function Wr(t,e=2){return t>=1e9?`$${(t/1e9).toFixed(e)}B`:t>=1e6?`$${(t/1e6).toFixed(e)}M`:t>=1e3?`$${(t/1e3).toFixed(e)}K`:`$${t.toFixed(e)}`}function In(t){return t>=1e3?t.toFixed(2):t>=1?t.toFixed(4):t.toFixed(6)}function vt({coins:t,searchQuery:e,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$1.SearchIcon,{className:"flex-shrink-0",style:{width:14,height:14,color:"#6b6b6b"}}),jsxRuntime.jsx("input",{type:"text",placeholder:"Search coins...",value:e,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..."})}):t.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:e?"No coins found":"No coins available"})}):t.map(i=>{let o=i.change24h>=0,p=i.change24h.toFixed(2),a=(i.fundingRate*100).toFixed(4),l=i.fundingRate>=0,u=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:d=>{d.currentTarget.style.backgroundColor="rgba(255,255,255,0.03)";},onMouseLeave:d=>{d.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/${u}.svg`,alt:u,className:"rounded-full",style:{width:20,height:20},onError:d=>{let m=d.target;m.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"#ffffff"},children:u})]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#ffffff",textAlign:"right"},children:In(i.price)}),jsxRuntime.jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:o?"#C7FF2E":"#F76816",textAlign:"right"},children:[o?"+":"",p,"%"]}),jsxRuntime.jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:l?"#C7FF2E":"#F76816",textAlign:"right"},children:[a,"%"]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Wr(i.volume24h)}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Wr(i.openInterest*i.price)})]},i.symbol)})]})]})}function Un({onSelectCoin:t,className:e}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:i,handleSelectCoin:o}=Pt({onSelectCoin:t});return jsxRuntime.jsx("div",{className:e,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsxRuntime.jsx(vt,{coins:r,searchQuery:n,onSearchChange:i,onSelectCoin:o,isLoading:s})})}function Yr(t,e){if(!Number.isFinite(t)||!Number.isFinite(e)||t<=0||e<=0)return {};let r=Math.floor(Math.log10(t)),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<=e+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 Vr(t,e,r){if(e<=0)return t;let s=new Map,n=r==="ask"?Math.ceil:Math.floor;return t.forEach(i=>{let o=n(i.price/e)*e,p=s.get(o);p?(p.quantity+=i.quantity,i.count&&(p.count=(p.count||0)+i.count)):s.set(o,{price:o,quantity:i.quantity,count:i.count});}),Array.from(s.values())}function jr(t){let e=0,r=t.map(n=>{let i=n.quantity*n.price;return e+=i,{...n,quantity:i,total:e,percentage:0}}),s=e;return r.map(n=>({...n,percentage:s>0?n.total/s*100:0}))}function Tt({symbol:t,maxLevel:e=20,precision:r=1}){let[s,n]=react.useState(null),[i,o]=react.useState(r);react.useEffect(()=>{o(r);},[r]);let{data:p,isPending:a}=rt({symbol:t,maxLevel:e}),l=react.useMemo(()=>{let f=s?.bids[0]?.price??p?.bids[0]?.price,c=s?.asks[0]?.price??p?.asks[0]?.price,g=f&&c?(f+c)/2:c??f??0;return g>0?Math.floor(Math.log10(g)):null},[s,p]),u=react.useMemo(()=>{if(l===null)return;let f=Math.pow(10,l);return Yr(f,i)},[i,l]),{data:d}=ne({type:"orderBook",symbol:t,enabled:!!p,aggregation:u,throttleMs:100});return react.useEffect(()=>{d?n(d):p&&n(p);},[d,p]),{...react.useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let f=Vr(s.bids,i,"bid"),c=Vr(s.asks,i,"ask"),g=f.sort((F,y)=>y.price-F.price).slice(0,e),E=c.sort((F,y)=>F.price-y.price).slice(0,e),h=jr(g),x=jr(E),v=h[0]?.price||0,R=(x[0]?.price||0)-v,B=v>0?R/v*100:0;return {bids:h,asks:x,spread:R,spreadPercentage:B}},[s,i,e]),isLoading:a,precision:i,setPrecision:o}}var Xr={scrollbarWidth:"thin",scrollbarColor:"rgba(63,63,70,0.6) transparent"},Mn={backgroundColor:"#000000",fontSize:11},qn={height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},Dt={flex:"1 1 0%"},Ln={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},Bn={height:20,background:"linear-gradient(to right, rgba(247,104,22,0), #F76816)",opacity:.15},_n={height:20,background:"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15},Qn={color:"#F76816",fontWeight:400},Hn={color:"#C7FF2E",fontWeight:400},Zr={flex:"1 1 0%",color:"#ffffff"},zn={flex:"1 1 0%"},Wn={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},$n={gap:12,fontSize:12,color:"#ffffff"},Kn={color:"#ffffff"},Gn={color:"#ffffff",fontWeight:500},Vn={color:"#ffffff",fontWeight:400,background:"none",border:"none",padding:0,gap:4},jn={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)"},ss={padding:"4px 10px",fontSize:12,color:"#ffffff",background:"transparent",border:"none",borderRadius:4,textAlign:"left"},Yn={...ss,color:"#C7FF2E"};function Jn(t){return t>=1e3?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):t>=1?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):t.toFixed(6)}function es(t){return Math.round(t).toLocaleString("en-US")}function ts(t){return t>=1?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):t.toString()}var rs=react.memo(function({price:e,quantity:r,total:s,percentage:n,side:i,onPriceClick:o}){let p=i==="ask",a=react.useMemo(()=>p?{...Bn,width:`${n}%`}:{..._n,width:`${n}%`},[p,n]),l=react.useMemo(()=>o?()=>o(e):void 0,[o,e]);return jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:Ln,onClick:l,children:[jsxRuntime.jsx("div",{className:"absolute left-0 top-0",style:a}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:zn,children:jsxRuntime.jsx("span",{style:p?Qn:Hn,children:Jn(e)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Zr,children:es(r)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Zr,children:es(s)})]})},(t,e)=>t.price===e.price&&t.quantity===e.quantity&&t.total===e.total&&t.percentage===e.percentage&&t.side===e.side&&t.onPriceClick===e.onPriceClick);function Xn({spreadPercentage:t,precision:e,precisionOptions:r,onPrecisionChange:s}){let[n,i]=react.useState(false),o=react.useRef(null);react.useEffect(()=>{if(!n)return;let a=l=>{o.current?.contains(l.target)||i(false);};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[n]);let p=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:Wn,children:jsxRuntime.jsxs("div",{className:"flex items-center",style:$n,children:[jsxRuntime.jsx("span",{style:Kn,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:Vn,onClick:()=>i(a=>!a),"aria-haspopup":"listbox","aria-expanded":n,children:[jsxRuntime.jsx("span",{children:ts(e)}),jsxRuntime.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",style:p,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:jn,children:r.map(a=>{let l=a===e;return jsxRuntime.jsx("button",{type:"button",role:"option","aria-selected":l,className:"cursor-pointer transition-colors",style:l?Yn:ss,onMouseEnter:u=>{u.currentTarget.style.backgroundColor="rgba(255,255,255,0.06)";},onMouseLeave:u=>{u.currentTarget.style.backgroundColor="transparent";},onClick:()=>{s(a),i(false);},children:ts(a)},a)})})]}),jsxRuntime.jsxs("span",{style:Gn,children:[t.toFixed(3),"%"]})]})})}function wt({bids:t,asks:e,spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i,onPriceClick:o}){let p=react.useRef(null),a=react.useRef(null),l=react.useRef(true),u=react.useRef(true),d=react.useMemo(()=>[...e].reverse(),[e]);react.useEffect(()=>{let c=p.current;if(!c||!l.current)return;let g=c.scrollHeight;c.scrollTop!==g&&(c.scrollTop=g);},[d]),react.useEffect(()=>{let c=a.current;!c||!u.current||c.scrollTop!==0&&(c.scrollTop=0);},[t]);let m=react.useCallback(()=>{let c=p.current;if(!c)return;let g=c.scrollHeight-c.scrollTop-c.clientHeight;l.current=g<=24;},[]),f=react.useCallback(()=>{let c=a.current;c&&(u.current=c.scrollTop<=24);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:Mn,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:qn,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:Dt,children:"Price"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Dt,children:"Amount (USD)"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:Dt,children:"Total (USD)"})]}),jsxRuntime.jsx("div",{ref:p,onScroll:m,className:"flex-1 min-h-0 overflow-y-auto",style:Xr,children:d.map((c,g)=>jsxRuntime.jsx(rs,{price:c.price,quantity:c.quantity,total:c.total,percentage:c.percentage,side:"ask",onPriceClick:o},`ask-${c.price}-${g}`))}),jsxRuntime.jsx("div",{className:"flex-none",children:jsxRuntime.jsx(Xn,{spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i})}),jsxRuntime.jsx("div",{ref:a,onScroll:f,className:"flex-1 min-h-0 overflow-y-auto",style:Xr,children:t.map((c,g)=>jsxRuntime.jsx(rs,{price:c.price,quantity:c.quantity,total:c.total,percentage:c.percentage,side:"bid",onPriceClick:o},`bid-${c.price}-${g}`))})]})}var ns=[1,2,5,10,100,1e3];function Zn(){return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:{padding:"0 16px"},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",style:{height:28,marginBottom:4},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-12 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"})]}),Array.from({length:10}).map((t,e)=>jsxRuntime.jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"})]},`ask-skeleton-${e}`)),jsxRuntime.jsx("div",{className:"flex justify-center items-center",style:{height:28},children:jsxRuntime.jsx(ui$1.Skeleton,{className:"h-4 w-32 rounded"})}),Array.from({length:10}).map((t,e)=>jsxRuntime.jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"})]},`bid-skeleton-${e}`))]})}function ei(){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 ti({symbol:t,maxLevel:e=40,precisionOptions:r=ns,defaultPrecision:s,onPriceClick:n,className:i}){let o=s??r[0]??1,{bids:p,asks:a,spreadPercentage:l,isLoading:u,precision:d,setPrecision:m}=Tt({symbol:t,maxLevel:e,precision:o});return u?jsxRuntime.jsx(Zn,{}):p.length===0&&a.length===0?jsxRuntime.jsx(ei,{}):jsxRuntime.jsx("div",{className:i,children:jsxRuntime.jsx(wt,{bids:p,asks:a,spreadPercentage:l,precision:d,precisionOptions:r,onPrecisionChange:m,onPriceClick:n})})}var si=200;function Et({symbol:t,limit:e=50}){let[r,s]=react.useState([]),{data:n,isPending:i}=st({symbol:t,limit:e}),{data:o}=ne({type:"trades",symbol:t,enabled:!!n});react.useEffect(()=>{n&&s(n.filter(is));},[n]);let p=react.useRef([]),a=react.useRef(null),l=react.useRef(e);return l.current=e,react.useEffect(()=>{if(!o)return;let u=ni(o);u.length!==0&&(p.current.push(...u),a.current===null&&(a.current=setTimeout(()=>{a.current=null;let d=p.current;p.current=[],d.length!==0&&s(m=>{let f=d.filter(c=>!m.some(g=>g.timestamp===c.timestamp&&g.price===c.price&&g.quantity===c.quantity));return f.length===0?m:[...f.reverse(),...m].slice(0,l.current)});},si)));},[o]),react.useEffect(()=>()=>{a.current!==null&&(clearTimeout(a.current),a.current=null),p.current=[];},[t]),{trades:r,isLoading:i}}function ni(t){return (Array.isArray(t)?t:[t]).filter(is)}function is(t){return t?typeof t.symbol=="string"&&(t.side==="buy"||t.side==="sell")&&typeof t.price=="number"&&Number.isFinite(t.price)&&typeof t.quantity=="number"&&Number.isFinite(t.quantity)&&typeof t.timestamp=="number"&&Number.isFinite(t.timestamp):false}var Qe=22,os=28,as=100,ps=120,li={backgroundColor:"#000000",fontSize:11},ui={height:os,minHeight:os,padding:"0 16px",color:"#6b6b6b",fontSize:11},ci={flex:"1 1 0%",maxWidth:as},di={flex:"1 1 0%",marginLeft:20},mi={flex:"1 1 0%",maxWidth:ps,textAlign:"right"},fi={height:Qe,minHeight:Qe,maxHeight:Qe,padding:"0 16px"},gi={flex:"1 1 0%",maxWidth:as},yi={flex:"1 1 0%",marginLeft:20,color:"#FCFCFC"},bi={flex:"1 1 0%",maxWidth:ps,textAlign:"right",color:"#777A8C"},hi={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bullish))",opacity:.15,pointerEvents:"none"},xi={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bearish))",opacity:.15,pointerEvents:"none"};function Si(t){return Number.isFinite(t)?t>=1e3?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):t>=1?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):t.toFixed(6):"-"}function Pi(t){return Number.isFinite(t)?"$"+t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"-"}function vi(t){let e=Math.max(0,Math.floor(t/1e3));if(e<60)return `${e}s`;let r=Math.floor(e/60);if(r<60)return `${r}m`;let s=Math.floor(r/60);return s<24?`${s}h`:`${Math.floor(s/24)}d`}function Ci(t){return !Number.isFinite(t)||t<=0?0:Math.max(0,Math.min(100,15*Math.log10(t)-5))}function Ti({index:t,style:e,trades:r,onTradeClick:s}){let n=r[t],i=n?.timestamp??Date.now(),o=hooks.useTickAge(i),p=react.useMemo(()=>!n||!Number.isFinite(n.price)||!Number.isFinite(n.quantity)?0:n.price*n.quantity,[n]),a=react.useMemo(()=>({...n?.side==="buy"?hi:xi,width:`${Ci(p)}%`}),[n,p]);if(!n)return null;let l=n.side==="buy";return jsxRuntime.jsx("div",{style:e,children:jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:fi,onClick:s?()=>s(n):void 0,children:[jsxRuntime.jsx("div",{style:a}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:gi,children:jsxRuntime.jsx("span",{className:l?"text-bullish":"text-bearish",children:Si(n.price)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:yi,children:Pi(p)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:bi,children:vi(o)})]})})}function Ut({trades:t,onTradeClick:e}){let r=react.useRef(null),{height:s=0}=hooks.useResizeObserver({ref:r}),n=react.useMemo(()=>({trades:t,onTradeClick:e}),[t,e]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:li,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:ui,children:[jsxRuntime.jsx("div",{style:ci,children:"Price"}),jsxRuntime.jsx("div",{style:di,children:"Size (USD)"}),jsxRuntime.jsx("div",{style:mi,children:"Age"})]}),jsxRuntime.jsx("div",{ref:r,className:"flex-1 min-h-0",children:s>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:s},rowComponent:Ti,rowCount:t.length,rowHeight:Qe,rowProps:n,overscanCount:4})})]})}function Di(){return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:{padding:"0 16px"},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",style:{height:28,marginBottom:4},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-12 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-16 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-8 rounded"})]}),Array.from({length:12}).map((t,e)=>jsxRuntime.jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-14 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-12 rounded"}),jsxRuntime.jsx(ui$1.Skeleton,{className:"h-3 w-8 rounded"})]},`trade-skeleton-${e}`))]})}function ki(){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 wi({symbol:t,limit:e=100,onTradeClick:r,className:s}){let{trades:n,isLoading:i}=Et({symbol:t,limit:e});return i?jsxRuntime.jsx(Di,{}):n.length===0?jsxRuntime.jsx(ki,{}):jsxRuntime.jsx("div",{className:s,children:jsxRuntime.jsx(Ut,{trades:n,onTradeClick:r})})}function At({symbol:t,userAddress:e,maxLeverage:r=150,onSuccess:s,onError:n}){let[i,o]=react.useState("long"),[p,a]=react.useState("market"),l=reactHookForm.useForm({defaultValues:{amount:0,leverage:20,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:u}=Pe({symbol:t}),{mutateAsync:d,isPending:m}=Ce({onSuccess:()=>{l.reset(),s?.();},onError:T=>{n?.(T);}}),f=l.watch(),{amount:c,leverage:g,price:E}=f,h=react.useMemo(()=>p==="limit"&&E?E:u?.price||0,[p,E,u?.price]),x=react.useMemo(()=>!c||!h?0:c*h*5e-4,[c,h]),v=react.useMemo(()=>!c||!h?0:c*h+x,[c,h,x]),O=react.useMemo(()=>{if(!c||!h||!g||g===1)return;let T=.005,q=h;return i==="long"?q*(1-(1/g-T)):q*(1+(1/g-T))},[c,h,g,i]),{data:R}=ve({userAddress:e,symbol:t}),B=R?.totalEquity??0,F=R?.availableBalance??0,y=react.useMemo(()=>{let T=R?.positions?.[0];return T?T.side==="short"?-T.quantity:T.quantity:0},[R?.positions]),N=react.useCallback(async T=>{if(!e)throw new Error("User address is required");let q=p==="limit"?T.price:void 0,le=T.takeProfitPrice,ee=T.stopLossPrice;if(!le&&T.takeProfitPercent&&T.takeProfitPercent>0&&h){let te=T.takeProfitPercent/100;le=i==="long"?h*(1+te):h*(1-te);}if(!ee&&T.stopLossPercent&&T.stopLossPercent>0&&h){let te=T.stopLossPercent/100;ee=i==="long"?h*(1-te):h*(1+te);}await d({symbol:t,side:i,orderType:p,amount:T.amount,price:q,leverage:T.leverage,takeProfitPrice:le,stopLossPrice:ee,userAddress:e});},[t,i,p,h,e,d]);return {form:l,side:i,orderType:p,setSide:o,setOrderType:a,handleSubmit:N,isSubmitting:m,currentPrice:h,estimatedFee:x,estimatedTotal:v,liquidationPrice:O,availableMargin:F,accountValue:B,currentPosition:y,maxLeverage:r}}function He(t,e=2){return t.toFixed(e)}function Ui({leverage:t,maxLeverage:e,onLeverageChange:r,onClose:s}){let n=[1,2,3,5,10,20,25,50,100].filter(i=>i<=e);return jsxRuntime.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[jsxRuntime.jsx("div",{className:"absolute inset-0 bg-black/60",onClick:s,onKeyDown:i=>i.key==="Escape"&&s(),role:"button",tabIndex:-1,"aria-label":"Close"}),jsxRuntime.jsxs("div",{className:"relative z-10 w-72 bg-neutral-900 border border-neutral-700 rounded-lg p-4 shadow-2xl",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsxRuntime.jsx("h3",{className:"text-sm font-medium text-white",children:"Adjust Leverage"}),jsxRuntime.jsx("button",{type:"button",onClick:s,className:"text-neutral-400 hover:text-white",children:jsxRuntime.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),jsxRuntime.jsxs("div",{className:"text-center text-2xl font-bold text-white mb-4",children:[t,"x"]}),jsxRuntime.jsx(ui$1.Slider,{value:[t],onChange:i=>r(Array.isArray(i)?i[0]:i),minValue:1,maxValue:e,step:1,className:"w-full mb-3"}),jsxRuntime.jsx("div",{className:"flex flex-wrap gap-1.5",children:n.map(i=>jsxRuntime.jsxs("button",{type:"button",className:ui$1.cn("px-2.5 py-1 text-xs rounded transition-colors",t===i?"bg-green-600 text-white":"bg-neutral-800 text-neutral-400 hover:bg-neutral-700"),onClick:()=>r(i),children:[i,"x"]},i))}),jsxRuntime.jsx("button",{type:"button",className:"w-full mt-4 text-white h-9 rounded cursor-pointer transition-colors",style:{backgroundColor:"#C7FF2E"},onClick:s,children:"Confirm"})]})]})}function Mt({methods:t,side:e,orderType:r,onSideChange:s,onOrderTypeChange:n,onSubmit:i,isSubmitting:o,symbol:p,currentPrice:a,estimatedFee:l,liquidationPrice:u,availableMargin:d,accountValue:m,currentPosition:f,maxLeverage:c,onAddFunds:g}){let[E,h]=react.useState(false),[x,v]=react.useState(false),O=t.watch("leverage")||20,R=t.watch("amount")||0,B=p.split("-")[0],F=d>0&&a?Math.min(R*a/(d*O)*100,100):0,y=N=>{let T=(Array.isArray(N)?N[0]:N)/100;if(a&&a>0){let q=d*O*T/a;t.setValue("amount",Number(q.toFixed(6)));}};return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000"},children:[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:"flex",style:{border:"1px solid rgba(26,26,26,0.5)",borderRadius:8,padding:4,gap:4},children:[jsxRuntime.jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:e==="long"?"#C7FF2E":"transparent",color:e==="long"?"#000000":"#b5b5b5",fontWeight:e==="long"?700:500},onClick:()=>s("long"),children:"Long"}),jsxRuntime.jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:e==="short"?"#F76816":"transparent",color:e==="short"?"#000000":"#b5b5b5",fontWeight:e==="short"?700:500},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(N=>jsxRuntime.jsx("div",{style:{height:32,display:"flex",alignItems:"center",borderBottom:r===N.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===N.key?"#ffffff":"#b5b5b5",border:"none"},onClick:()=>n(N.key),children:N.label})},N.key))}),jsxRuntime.jsx("div",{className:"flex-1"}),jsxRuntime.jsxs("button",{type:"button",className:"cursor-pointer transition-colors",style:{height:24,padding:"0 5px",fontSize:12,borderRadius:4,backgroundColor:"rgba(26,26,26,0.5)",color:"#ffffff",fontWeight:400,border:"1px solid rgba(26,26,26,0.5)"},onClick:()=>h(true),children:["Leverage: ",O,"x"]})]}),jsxRuntime.jsx(ui$1.RHForm,{methods:t,onSubmit:i,children:jsxRuntime.jsxs("div",{className:"space-y-3 w-full",children:[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:"Price"}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"USDC"})]}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"price",placeholder:"0.0 USDC",className:"w-full"})]}),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:12,color:"#6b6b6b"},children:B})]}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"amount",placeholder:"0.0 USDC",className:"w-full"})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("style",{children:`
1
+ 'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime'),reactQuery=require('@tanstack/react-query'),ui$1=require('@liberfi.io/ui'),reactWindow=require('react-window'),hooks=require('@liberfi.io/hooks'),reactHookForm=require('react-hook-form'),i18n=require('@liberfi.io/i18n');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-perpetuals"]="0.2.17");var _s="0.2.17";function Bs(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 ce=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"}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"),p=parseFloat(i.markPx??i.midPx??"0"),a=i.prevDayPx?parseFloat(i.prevDayPx):o,l=a>0?(o-a)/a*100:0;return {symbol:n,price:o,change24h:l,volume24h:parseFloat(i.dayNtlVlm??"0"),fundingRate:parseFloat(i.funding??"0"),openInterest:parseFloat(i.openInterest??"0"),markPrice:p,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}});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}});n&&this.send(n);}subscribe(t,r,s,n){let i=Bs(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 ur={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"}},Xe=class{apiEndpoint;_wsEndpoint;timeout;environment;wsManager=null;wsRefCount=0;constructor(t={}){this.environment=t.environment||"testnet",this.apiEndpoint=t.apiEndpoint||ur[this.environment].api,this._wsEndpoint=t.wsEndpoint||ur[this.environment].ws,this.timeout=t.timeout||3e4;}async request(t,r){let s=`${this.apiEndpoint}${t}`;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 re(`HTTP ${o.status}: ${o.statusText}`,o.status,await o.text());return await o.json()}catch(n){throw n.name==="AbortError"?new re(`Request timeout after ${this.timeout}ms`,408,""):n instanceof re?n:new re(`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(){let[t]=await this.request("/info",{type:"metaAndAssetCtxs"});return t.universe.map(r=>`${r.name}-USDC`)}async getMarket(t){let r=await this.getMarkets([t]);return r.length>0?r[0]:null}async getMarkets(t){let[r,s]=await this.request("/info",{type:"metaAndAssetCtxs"}),n=r.universe.map((i,o)=>{let p=s[o],a=`${i.name}-USDC`,l=parseFloat(p.midPx||p.markPx||"0"),u=p.prevDayPx?parseFloat(p.prevDayPx):l,d=u>0?(l-u)/u*100:0;return {symbol:a,price:l,change24h:d,volume24h:parseFloat(p.dayNtlVlm||"0"),fundingRate:parseFloat(p.funding||"0"),openInterest:parseFloat(p.openInterest||"0"),markPrice:parseFloat(p.markPx||"0"),indexPrice:parseFloat(p.oraclePx||p.midPx||"0")}});if(t&&t.length>0){let i=new Set(t);return n.filter(o=>i.has(o.symbol))}return n}async getKlines(t,r,s=100){let n=this.symbolToCoin(t),i=typeof s=="number"?{limit:s}:s,o=this.parseInterval(r),p=i.limit,a,l;i.from!==void 0&&i.to!==void 0?(a=i.from,l=i.to):i.to!==void 0&&p?(l=i.to,a=l-o*p):i.from!==void 0&&p?(a=i.from,l=a+o*p):(l=Date.now(),a=l-o*(p??100));let d=(await this.request("/info",{type:"candleSnapshot",req:{coin:n,interval:r,startTime:a,endTime:l}})).map(m=>({symbol:t,open:parseFloat(m.o),high:parseFloat(m.h),low:parseFloat(m.l),close:parseFloat(m.c),volume:parseFloat(m.v),timestamp:m.t,closeTimestamp:m.T}));return p&&d.length>p&&(d=d.slice(d.length-p)),d}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),[p,a]=o.levels;return {symbol:t,bids:p.slice(0,r).map(l=>({price:parseFloat(l.px),quantity:parseFloat(l.sz),count:l.n})),asks:a.slice(0,r).map(l=>({price:parseFloat(l.px),quantity:parseFloat(l.sz),count:l.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=await this.request("/info",{type:"clearinghouseState",user:t.userAddress}),s=r.assetPositions.map(i=>{let o=i.position,p=`${o.coin}-USDC`,a=parseFloat(o.szi);if(a===0)return null;let l=parseFloat(o.entryPx),u=parseFloat(o.unrealizedPnl),d=parseFloat(o.positionValue);return {symbol:p,side:a>0?"long":"short",quantity:Math.abs(a),entryPrice:l,markPrice:l,unrealizedPnl:u,unrealizedPnlPercent:parseFloat(o.returnOnEquity)*100,leverage:o.leverage.value,liquidationPrice:o.liquidationPx?parseFloat(o.liquidationPx):void 0,margin:parseFloat(o.marginUsed),notionalValue:Math.abs(d)}}).filter(Boolean),n=t.symbol?s.filter(i=>i.symbol===t.symbol):s;return {positions:n,totalEquity:parseFloat(r.marginSummary.accountValue),availableBalance:parseFloat(r.marginSummary.accountValue)-parseFloat(r.marginSummary.totalMarginUsed),totalUnrealizedPnl:n.reduce((i,o)=>i+o.unrealizedPnl,0),raw:r}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"openOrders",user:t.userAddress}),s=r.map(i=>{let o=`${i.coin}-USDC`,p=parseFloat(i.origSz),a=parseFloat(i.sz),l=p-a;return {orderId:i.oid.toString(),clientOrderId:i.cloid,symbol:o,side:i.side?"long":"short",orderType:"limit",price:parseFloat(i.limitPx),quantity:p,filledQuantity:l,remainingQuantity:a,status:l>0&&a>0?"partially_filled":"pending",timestamp:i.timestamp,updateTimestamp:i.timestamp}}),n=t.symbol?s.filter(i=>i.symbol===t.symbol):s;return {orders:n,totalCount:n.length,raw:r}}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}});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 ce(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)}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}},re=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="HyperliquidApiError";}};var z=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="LiberFiApiError";}},Hs=3e4,se=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??Hs,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 p=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(!p.ok){let a=await Qs(p);throw new z(`HTTP ${p.status} ${p.statusText} from ${t} ${s}`,p.status,a)}return p.status===204?void 0:await p.json()}catch(p){if(p instanceof z)throw p;if(p instanceof Error&&p.name==="AbortError")throw new z(`Request timeout after ${i}ms: ${t} ${s}`,408,"");let a=p instanceof Error?p.message:String(p);throw new z(`Network error: ${t} ${s}: ${a}`,0,"")}finally{clearTimeout(o);}}};async function Qs(e){try{return await e.text()}catch{return ""}}var zs="wss://api.hyperliquid.xyz/ws",Ze=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 se({baseUrl:t.baseUrl,timeout:t.timeout,headers:t.headers,defaultQuery:t.provider?{provider:t.provider}:void 0});}this.wsEndpoint=t.wsEndpoint??zs,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 z&&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 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 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 ce(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 et=class{transport;constructor(t){this.transport="transport"in t?t.transport:new se(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 Pe=new Set(["settled","refunded","failed"]);var Fe={phase:"idle"};function tt(e,t){switch(t.type){case "RESET":return Fe;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 Ws(t.status,r)}}}function Ws(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 $s(e){return e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"}function Ks(e){return e.phase==="submitted"||e.phase==="tracking"}function Gs(e){if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.status}function Vs(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 js(e){return e!==void 0&&Pe.has(e)}var J=react.createContext({});function Xs({client:e,depositClient:t,children:r}){let s=react.useMemo(()=>({client:e,depositClient:t}),[e,t]);return jsxRuntime.jsx(J.Provider,{value:s,children:r})}function D(){let e=react.useContext(J);if(!e||!e.client)throw new Error("usePerpetualsClient must be used within a PerpetualsProvider");return e}function cr(){return ["perps","coins"]}async function dr(e){return await e.getSupportedCoins()}function rt(e={}){let{client:t}=D();return reactQuery.useQuery({queryKey:cr(),queryFn:async()=>dr(t),staleTime:300*1e3,...e})}function mr(e){return ["perps","market",e.symbol]}async function fr(e,{symbol:t}){return await e.getMarket(t)}function ve(e,t={}){let{client:r}=D();return reactQuery.useQuery({queryKey:mr(e),queryFn:async()=>fr(r,e),staleTime:10*1e3,...t})}function gr(e={}){return ["perps","markets",JSON.stringify((e.symbols??[]).sort())]}async function yr(e,{symbols:t}={}){return await e.getMarkets(t)}function st(e={},t={}){let{client:r}=D();return reactQuery.useQuery({queryKey:gr(e),queryFn:async()=>yr(r,e),staleTime:10*1e3,...t})}function br(e){return ["perps","klines",e.symbol,e.interval,String(e.limit??100)]}async function hr(e,{symbol:t,interval:r,limit:s}){return await e.getKlines(t,r,s)}function on(e,t={}){let{client:r}=D();return reactQuery.useQuery({queryKey:br(e),queryFn:async()=>hr(r,e),staleTime:30*1e3,...t})}function xr(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 Sr(e,{symbol:t,maxLevel:r,aggregation:s}){return await e.getOrderBook(t,r,s)}function nt(e,t={}){let{client:r}=D();return reactQuery.useQuery({queryKey:xr(e),queryFn:async()=>Sr(r,e),staleTime:5*1e3,...t})}function Pr(e){return ["perps","recentTrades",e.symbol,String(e.limit??50)]}async function vr(e,{symbol:t,limit:r}){return await e.getRecentTrades(t,r)}function it(e,t={}){let{client:r}=D();return reactQuery.useQuery({queryKey:Pr(e),queryFn:async()=>vr(r,e),staleTime:5*1e3,...t})}function Cr(e){return ["perps","positions",e.userAddress??"",e.symbol??""]}async function Tr(e,t){return await e.getPositions(t)}function Ce(e,t={}){let{client:r}=D(),{enabled:s=true,...n}=e;return reactQuery.useQuery({queryKey:Cr(n),queryFn:async()=>Tr(r,n),enabled:s&&!!n.userAddress,staleTime:10*1e3,...t})}function Dr(e){return ["perps","orders",e.userAddress??"",e.symbol??""]}async function kr(e,t){return await e.getOpenOrders(t)}function ot(e,t={}){let{client:r}=D(),{enabled:s=true,...n}=e;return reactQuery.useQuery({queryKey:Dr(n),queryFn:async()=>kr(r,n),enabled:s&&!!n.userAddress,staleTime:5*1e3,...t})}function wr(e){return ["perps","trades",e.userAddress??"",e.symbol??"",String(e.limit??50),String(e.startTime??""),String(e.endTime??"")]}async function Or(e,t){return await e.getTrades(t)}function at(e,t={}){let{client:r}=D(),{enabled:s=true,...n}=e;return reactQuery.useQuery({queryKey:wr(n),queryFn:async()=>Or(r,n),enabled:s&&!!n.userAddress,staleTime:30*1e3,...t})}async function Rr(e,t){return await e.placeOrder(t)}function Te(e={}){let{client:t}=D();return reactQuery.useMutation({mutationFn:async r=>Rr(t,r),...e})}async function Er(e,t){return await e.cancelOrder(t)}function pt(e={}){let{client:t}=D();return reactQuery.useMutation({mutationFn:async r=>Er(t,r),...e})}function ne(e){let{type:t,symbol:r,enabled:s=true,aggregation:n,throttleMs:i}=e,{client:o}=D(),[p,a]=react.useState(null),[l,u]=react.useState(false),[d,m]=react.useState(null),f=react.useRef(null),c=react.useRef(null),g=react.useRef(i);g.current=i;let E=react.useCallback(x=>{let v=g.current;if(!v||v<=0){a(x);return}f.current=x,c.current===null&&(c.current=setTimeout(()=>{if(c.current=null,f.current!==null){let O=f.current;f.current=null,a(O);}},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 x=null,v=true;return (async()=>{try{if(await o.connectWebSocket(),!v)return;u(!0),m(null),x=o.subscribeMarketData(t,r,E,t==="orderBook"&&n?{aggregation:n}:void 0);}catch(R){v&&(m(R instanceof Error?R:new Error("Connection failed")),u(false));}})(),()=>{if(v=false,x)try{o.unsubscribe(x);}catch(R){console.error("Failed to unsubscribe:",R);}o.disconnectWebSocket(),c.current!==null&&(clearTimeout(c.current),c.current=null),f.current=null,u(false),a(null);}},[o,t,r,s,E,h]),{data:p,isConnected:l,error:d}}function hn(e){let{symbol:t,interval:r,enabled:s=true}=e,{client:n}=D(),[i,o]=react.useState(null),[p,a]=react.useState(false),[l,u]=react.useState(null),d=react.useCallback(m=>{o(m);},[]);return react.useEffect(()=>{if(!s)return;let m=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;a(!0),u(null),m=n.subscribeCandles(t,r,d);}catch(g){f&&(u(g instanceof Error?g:new Error("Connection failed")),a(false));}})(),()=>{if(f=false,m)try{n.unsubscribe(m);}catch(g){console.error("Failed to unsubscribe:",g);}n.disconnectWebSocket(),a(false),o(null);}},[n,t,r,s,d]),{data:i,isConnected:p,error:l}}function De(e){let{type:t,userAddress:r,enabled:s=true}=e,{client:n}=D(),[i,o]=react.useState(null),[p,a]=react.useState(false),[l,u]=react.useState(null),d=react.useCallback(m=>{o(m);},[]);return react.useEffect(()=>{if(!s||!r)return;let m=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;a(!0),u(null),m=n.subscribeUserData(t,r,d);}catch(g){f&&(u(g instanceof Error?g:new Error("Connection failed")),a(false));}})(),()=>{if(f=false,m)try{n.unsubscribe(m);}catch(g){console.error("Failed to unsubscribe:",g);}n.disconnectWebSocket(),a(false),o(null);}},[n,t,r,s,d]),{data:i,isConnected:p,error:l}}function Pn(){let e=react.useContext(J);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(J)?.depositClient}function Ir(e){return ["perps","deposit","quote",e]}async function Ur(e,t){return e.quote(t)}function mt(e,t={}){let r=ie(),s=(t.enabled??!!Cn(e))&&!!r;return reactQuery.useQuery({queryKey:Ir(e??null),queryFn:async()=>Ur(r,e),enabled:s,staleTime:0,gcTime:3e4,refetchOnWindowFocus:false,...t})}function Cn(e){return !!(e&&e.userSolanaAddress&&e.hyperliquidRecipient&&e.grossLamports&&e.source)}function ft(e){let t=ie(),[r,s]=react.useReducer(tt,Fe),n=react.useCallback(()=>{s({type:"RESET"});},[]),i=react.useCallback(async o=>{let{quote:p}=o;s({type:"SIGN_START"});let a;try{if(a=await e(p.serializedTxBase64,{isVersioned:p.isVersioned,sizeBytes:p.sizeBytes}),!a)throw new Error("wallet returned an empty tx hash")}catch(u){let d=Ar(u,"WALLET_SIGN_OR_BROADCAST_FAILED");throw s({type:"SIGN_FAILED",error:d}),u}s({type:"BROADCAST_START"});let l={userSolanaAddress:o.userSolanaAddress,hyperliquidRecipient:o.hyperliquidRecipient,solanaTxHash:a,breakdown:p.breakdown,userId:o.userId,source:o.source,campaign:o.campaign,quoteIssuedAt:p.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 u=await t.submit(l);return s({type:"SUBMIT_OK",intentId:u.intentId,solanaTxHash:a}),u.intentId}catch(u){let d=Ar(u,"DEPOSIT_SUBMIT_FAILED");throw s({type:"SUBMIT_FAILED",error:d}),u}},[t,e]);return {state:r,execute:i,reset:n,dispatch:s}}function Ar(e,t){if(e instanceof z){let r=Dn(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 Dn(e){if(e)try{return JSON.parse(e)}catch{return}}function Lr(e){return ["perps","deposit","status",e??null]}async function Mr(e,t){return e.status(t)}function gt(e,t={}){let r=ie(),s=(t.enabled??!!e)&&!!r,n=t.pollIntervalMs??3e3;return reactQuery.useQuery({queryKey:Lr(e??void 0),queryFn:async()=>Mr(r,e),enabled:s,refetchInterval:i=>{let o=i.state.data;return o&&Pe.has(o.status)?false:n},refetchOnWindowFocus:false,staleTime:0,...t})}var ke={phase:"idle",steps:[]};function Ae(e,t){switch(e.id){case "approveBuilderFee":{let r=t.builderApproval;return r&&wn(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 Le(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?On(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 ke}}function Me(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 wn(e,t){return e.toLowerCase()===t.toLowerCase()}function On(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 _e(e){let{adapter:t,userAddress:r,steps:s,autoLoad:n=true,onComplete:i,onError:o}=e,[p,a]=react.useReducer(Le,ke),l=react.useRef(t),u=react.useRef(s),d=react.useRef(i),m=react.useRef(o);l.current=t,u.current=s,d.current=i,m.current=o;let f=react.useCallback(async()=>{if(r){a({type:"START_LOADING"});try{let x=await l.current.getAccountState(r),v=u.current.map(O=>({step:O,status:Ae(O,x)}));a({type:"LOAD_SUCCESS",accountState:x,steps:v});}catch(x){let v=_r(x);a({type:"LOAD_ERROR",error:v.message}),m.current?.(v,{});}}},[r]);react.useEffect(()=>{n&&r&&f();},[n,r,f]);let c=react.useCallback(async x=>{let v=p.steps[x];if(v){a({type:"RUN_STEP",index:x});try{let O=await En(l.current,v.step);a({type:"STEP_SUCCESS",index:x,txHash:O.txHash,accountState:O.state});}catch(O){let R=_r(O);a({type:"STEP_ERROR",index:x,error:R.message}),m.current?.(R,{stepId:v.step.id});}}},[p.steps]),g=react.useCallback(async()=>{let x=Me(p);x!=null&&await c(x);},[p,c]),E=react.useCallback(()=>a({type:"RESET"}),[]),h=react.useRef(false);return react.useEffect(()=>{p.phase==="done"&&!h.current?(h.current=true,d.current?.(p)):p.phase!=="done"&&(h.current=false);},[p]),{state:p,reload:f,runNext:g,runStep:c,reset:E}}function En(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 _r(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error")}function yt(){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 Hr="liberfi-perp-shimmer",Nn=`
2
+ @keyframes ${Hr}{0%{background-position:200% 0}100%{background-position:-200% 0}}
3
+ `;function de(){return jsxRuntime.jsx("style",{children:Nn})}var In={background:"linear-gradient(90deg, rgba(255,255,255,0.03) 25%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0.03) 75%)",backgroundSize:"200% 100%",animation:`${Hr} 1.8s ease-in-out infinite`,borderRadius:6};function W(e){return {...In,animationDelay:`${e}ms`}}function ht(){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:ae(0,84,23)}),jsxRuntime.jsx("div",{style:ae(60,52,16)})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsx(bt,{labelWidth:72,valueWidth:64,delay:120}),jsxRuntime.jsx(bt,{labelWidth:72,valueWidth:48,delay:180}),jsxRuntime.jsx(bt,{labelWidth:84,valueWidth:56,delay:240}),jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:ae(300,132,16)}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx("div",{style:ae(330,64,17)}),jsxRuntime.jsx("div",{style:ae(360,64,17)})]})]})]})]})]})}function bt({labelWidth:e,valueWidth:t,delay:r}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:ae(r,e,16)}),jsxRuntime.jsx("div",{style:ae(r+30,t,17)})]})}function ae(e,t,r){return {...W(e),width:t,height:r}}function St(e){let[t,r]=react.useState(),[s,n]=react.useState(0),{data:i,isPending:o}=ve({symbol:e}),{data:p,isConnected:a}=ne({type:"ticker",symbol:e,enabled:!!i});return react.useEffect(()=>{i&&r(i);},[i]),react.useEffect(()=>{if(!p)return;let l=An(p,e);l&&r(u=>Ln(u??i??void 0,l,e));},[p,i,e]),react.useEffect(()=>{let l=()=>{let d=Date.now(),m=480*60*1e3,f=d%m,c=m-f;return Math.floor(c/1e3)};n(l());let u=setInterval(()=>{n(l());},1e3);return ()=>clearInterval(u)},[]),{marketData:t,isLoading:o,fundingCountdown:s}}function An(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 me(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Ln(e,t,r){return {symbol:t.symbol??e?.symbol??r,price:me(t.price,e?.price??0),change24h:me(t.change24h,e?.change24h??0),volume24h:me(t.volume24h,e?.volume24h??0),fundingRate:me(t.fundingRate,e?.fundingRate??0),openInterest:me(t.openInterest,e?.openInterest??0),markPrice:me(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 Mn(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 zr(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 Wr(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 Pt({marketData:e,fundingCountdown:t}){let{symbol:r,price:s,change24h:n,indexPrice:i,volume24h:o,openInterest:p,fundingRate:a}=e,l=typeof n=="number"&&Number.isFinite(n)?n:0,u=typeof a=="number"&&Number.isFinite(a)?a:0,d=l>=0,m=l.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:Wr(s)}),jsxRuntime.jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:d?"#C7FF2E":"#F76816"},children:[d?"+":"",m,"%"]})]}),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?Wr(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:zr(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:zr(p*(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:u>=0?"#C7FF2E":"#F76816"},children:[(u*100).toFixed(5),"%"]}),jsxRuntime.jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"#ffffff"},children:Mn(t)})]})]})]})]})}function qn({symbol:e}){let{marketData:t,isLoading:r,fundingCountdown:s}=St(e);return r?jsxRuntime.jsx(ht,{}):t?jsxRuntime.jsx(Pt,{marketData:t,fundingCountdown:s}):jsxRuntime.jsx(yt,{})}function Ct({onSelectCoin:e}={}){let[t,r]=react.useState(""),[s,n]=react.useState([]),{data:i,isPending:o}=rt(),{data:p,isPending:a}=st({symbols:i},{enabled:!!i&&i.length>0});react.useEffect(()=>{p&&n(p);},[p]);let l=react.useMemo(()=>{if(!t.trim())return s;let d=t.toLowerCase().trim();return s.filter(m=>m.symbol.toLowerCase().includes(d))},[s,t]);return {coins:s,isLoading:o||a,searchQuery:t,setSearchQuery:r,filteredCoins:l,handleSelectCoin:d=>{e?.(d);}}}function Kr(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 Qn(e){return e>=1e3?e.toFixed(2):e>=1?e.toFixed(4):e.toFixed(6)}function Tt({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$1.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,p=i.change24h.toFixed(2),a=(i.fundingRate*100).toFixed(4),l=i.fundingRate>=0,u=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:d=>{d.currentTarget.style.backgroundColor="rgba(255,255,255,0.03)";},onMouseLeave:d=>{d.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/${u}.svg`,alt:u,className:"rounded-full",style:{width:20,height:20},onError:d=>{let m=d.target;m.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"#ffffff"},children:u})]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#ffffff",textAlign:"right"},children:Qn(i.price)}),jsxRuntime.jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:o?"#C7FF2E":"#F76816",textAlign:"right"},children:[o?"+":"",p,"%"]}),jsxRuntime.jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:l?"#C7FF2E":"#F76816",textAlign:"right"},children:[a,"%"]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Kr(i.volume24h)}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Kr(i.openInterest*i.price)})]},i.symbol)})]})]})}function zn({onSelectCoin:e,className:t}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:i,handleSelectCoin:o}=Ct({onSelectCoin:e});return jsxRuntime.jsx("div",{className:t,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsxRuntime.jsx(Tt,{coins:r,searchQuery:n,onSearchChange:i,onSelectCoin:o,isLoading:s})})}function Xr(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 Yr(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,p=s.get(o);p?(p.quantity+=i.quantity,i.count&&(p.count=(p.count||0)+i.count)):s.set(o,{price:o,quantity:i.quantity,count:i.count});}),Array.from(s.values())}function Jr(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 kt({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:p,isPending:a}=nt({symbol:e,maxLevel:t}),l=react.useMemo(()=>{let f=s?.bids[0]?.price??p?.bids[0]?.price,c=s?.asks[0]?.price??p?.asks[0]?.price,g=f&&c?(f+c)/2:c??f??0;return g>0?Math.floor(Math.log10(g)):null},[s,p]),u=react.useMemo(()=>{if(l===null)return;let f=Math.pow(10,l);return Xr(f,i)},[i,l]),{data:d}=ne({type:"orderBook",symbol:e,enabled:!!p,aggregation:u,throttleMs:100});return react.useEffect(()=>{d?n(d):p&&n(p);},[d,p]),{...react.useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let f=Yr(s.bids,i,"bid"),c=Yr(s.asks,i,"ask"),g=f.sort((A,y)=>y.price-A.price).slice(0,t),E=c.sort((A,y)=>A.price-y.price).slice(0,t),h=Jr(g),x=Jr(E),v=h[0]?.price||0,R=(x[0]?.price||0)-v,B=v>0?R/v*100:0;return {bids:h,asks:x,spread:R,spreadPercentage:B}},[s,i,t]),isLoading:a,precision:i,setPrecision:o}}var es={scrollbarWidth:"thin",scrollbarColor:"rgba(63,63,70,0.6) transparent"},Kn={backgroundColor:"#000000",fontSize:11},Gn={height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},wt={flex:"1 1 0%"},Vn={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},jn={height:20,background:"linear-gradient(to right, rgba(247,104,22,0), #F76816)",opacity:.15},Yn={height:20,background:"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15},Jn={color:"#F76816",fontWeight:400},Xn={color:"#C7FF2E",fontWeight:400},ts={flex:"1 1 0%",color:"#ffffff"},Zn={flex:"1 1 0%"},ei={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},ti={gap:12,fontSize:12,color:"#ffffff"},ri={color:"#ffffff"},si={color:"#ffffff",fontWeight:500},ni={color:"#ffffff",fontWeight:400,background:"none",border:"none",padding:0,gap:4},ii={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)"},is={padding:"4px 10px",fontSize:12,color:"#ffffff",background:"transparent",border:"none",borderRadius:4,textAlign:"left"},oi={...is,color:"#C7FF2E"};function ai(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 rs(e){return Math.round(e).toLocaleString("en-US")}function ss(e){return e>=1?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e.toString()}var ns=react.memo(function({price:t,quantity:r,total:s,percentage:n,side:i,onPriceClick:o}){let p=i==="ask",a=react.useMemo(()=>p?{...jn,width:`${n}%`}:{...Yn,width:`${n}%`},[p,n]),l=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:Vn,onClick:l,children:[jsxRuntime.jsx("div",{className:"absolute left-0 top-0",style:a}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Zn,children:jsxRuntime.jsx("span",{style:p?Jn:Xn,children:ai(t)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:ts,children:rs(r)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:ts,children:rs(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 pi({spreadPercentage:e,precision:t,precisionOptions:r,onPrecisionChange:s}){let[n,i]=react.useState(false),o=react.useRef(null);react.useEffect(()=>{if(!n)return;let a=l=>{o.current?.contains(l.target)||i(false);};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[n]);let p=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:ei,children:jsxRuntime.jsxs("div",{className:"flex items-center",style:ti,children:[jsxRuntime.jsx("span",{style:ri,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:ni,onClick:()=>i(a=>!a),"aria-haspopup":"listbox","aria-expanded":n,children:[jsxRuntime.jsx("span",{children:ss(t)}),jsxRuntime.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",style:p,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:ii,children:r.map(a=>{let l=a===t;return jsxRuntime.jsx("button",{type:"button",role:"option","aria-selected":l,className:"cursor-pointer transition-colors",style:l?oi:is,onMouseEnter:u=>{u.currentTarget.style.backgroundColor="rgba(255,255,255,0.06)";},onMouseLeave:u=>{u.currentTarget.style.backgroundColor="transparent";},onClick:()=>{s(a),i(false);},children:ss(a)},a)})})]}),jsxRuntime.jsxs("span",{style:si,children:[e.toFixed(3),"%"]})]})})}function Rt({bids:e,asks:t,spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i,onPriceClick:o}){let p=react.useRef(null),a=react.useRef(null),l=react.useRef(true),u=react.useRef(true),d=react.useMemo(()=>[...t].reverse(),[t]);react.useEffect(()=>{let c=p.current;if(!c||!l.current)return;let g=c.scrollHeight;c.scrollTop!==g&&(c.scrollTop=g);},[d]),react.useEffect(()=>{let c=a.current;!c||!u.current||c.scrollTop!==0&&(c.scrollTop=0);},[e]);let m=react.useCallback(()=>{let c=p.current;if(!c)return;let g=c.scrollHeight-c.scrollTop-c.clientHeight;l.current=g<=24;},[]),f=react.useCallback(()=>{let c=a.current;c&&(u.current=c.scrollTop<=24);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:Kn,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Gn,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:wt,children:"Price"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:wt,children:"Amount (USD)"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:wt,children:"Total (USD)"})]}),jsxRuntime.jsx("div",{ref:p,onScroll:m,className:"flex-1 min-h-0 overflow-y-auto",style:es,children:d.map((c,g)=>jsxRuntime.jsx(ns,{price:c.price,quantity:c.quantity,total:c.total,percentage:c.percentage,side:"ask",onPriceClick:o},`ask-${c.price}-${g}`))}),jsxRuntime.jsx("div",{className:"flex-none",children:jsxRuntime.jsx(pi,{spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:i})}),jsxRuntime.jsx("div",{ref:a,onScroll:f,className:"flex-1 min-h-0 overflow-y-auto",style:es,children:e.map((c,g)=>jsxRuntime.jsx(ns,{price:c.price,quantity:c.quantity,total:c.total,percentage:c.percentage,side:"bid",onPriceClick:o},`bid-${c.price}-${g}`))})]})}var as=[1,2,5,10,100,1e3],li={backgroundColor:"#000000",fontSize:11},ui={height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},fe={flex:"1 1 0%"},ci={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16},di={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"};function os({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:ci,children:[jsxRuntime.jsx("div",{style:fe,children:jsxRuntime.jsx("div",{style:{...W(e),height:11,width:56}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:fe,children:jsxRuntime.jsx("div",{style:{...W(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:fe,children:jsxRuntime.jsx("div",{style:{...W(e+60),height:11,width:64}})})]})}function mi(){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:li,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:ui,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:fe,children:"Price"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:fe,children:"Amount (USD)"}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:fe,children:"Total (USD)"})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(r=>jsxRuntime.jsx(os,{delay:r*40},`ask-${r}`))}),jsxRuntime.jsx("div",{className:"flex-none flex items-center justify-center",style:di,children:jsxRuntime.jsx("div",{style:{...W(0),width:96,height:12}})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:t.map(r=>jsxRuntime.jsx(os,{delay:200+r*40},`bid-${r}`))})]})]})}function fi(){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 gi({symbol:e,maxLevel:t=40,precisionOptions:r=as,defaultPrecision:s,onPriceClick:n,className:i}){let o=s??r[0]??1,{bids:p,asks:a,spreadPercentage:l,isLoading:u,precision:d,setPrecision:m}=kt({symbol:e,maxLevel:t,precision:o});return u?jsxRuntime.jsx(mi,{}):p.length===0&&a.length===0?jsxRuntime.jsx(fi,{}):jsxRuntime.jsx("div",{className:i,children:jsxRuntime.jsx(Rt,{bids:p,asks:a,spreadPercentage:l,precision:d,precisionOptions:r,onPrecisionChange:m,onPriceClick:n})})}var hi=200;function It({symbol:e,limit:t=50}){let[r,s]=react.useState([]),{data:n,isPending:i}=it({symbol:e,limit:t}),{data:o}=ne({type:"trades",symbol:e,enabled:!!n});react.useEffect(()=>{n&&s(n.filter(ps));},[n]);let p=react.useRef([]),a=react.useRef(null),l=react.useRef(t);return l.current=t,react.useEffect(()=>{if(!o)return;let u=xi(o);u.length!==0&&(p.current.push(...u),a.current===null&&(a.current=setTimeout(()=>{a.current=null;let d=p.current;p.current=[],d.length!==0&&s(m=>{let f=d.filter(c=>!m.some(g=>g.timestamp===c.timestamp&&g.price===c.price&&g.quantity===c.quantity));return f.length===0?m:[...f.reverse(),...m].slice(0,l.current)});},hi)));},[o]),react.useEffect(()=>()=>{a.current!==null&&(clearTimeout(a.current),a.current=null),p.current=[];},[e]),{trades:r,isLoading:i}}function xi(e){return (Array.isArray(e)?e:[e]).filter(ps)}function ps(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 Qe=22,ls=28,us=100,cs=120,Ti={backgroundColor:"#000000",fontSize:11},Di={height:ls,minHeight:ls,padding:"0 16px",color:"#6b6b6b",fontSize:11},ki={flex:"1 1 0%",maxWidth:us},wi={flex:"1 1 0%",marginLeft:20},Oi={flex:"1 1 0%",maxWidth:cs,textAlign:"right"},Ri={height:Qe,minHeight:Qe,maxHeight:Qe,padding:"0 16px"},Ei={flex:"1 1 0%",maxWidth:us},Ni={flex:"1 1 0%",marginLeft:20,color:"#FCFCFC"},Ii={flex:"1 1 0%",maxWidth:cs,textAlign:"right",color:"#777A8C"},Ui={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bullish))",opacity:.15,pointerEvents:"none"},Fi={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bearish))",opacity:.15,pointerEvents:"none"};function Ai(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 Li(e){return Number.isFinite(e)?"$"+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"-"}function Mi(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 qi(e){return !Number.isFinite(e)||e<=0?0:Math.max(0,Math.min(100,15*Math.log10(e)-5))}function _i({index:e,style:t,trades:r,onTradeClick:s}){let n=r[e],i=n?.timestamp??Date.now(),o=hooks.useTickAge(i),p=react.useMemo(()=>!n||!Number.isFinite(n.price)||!Number.isFinite(n.quantity)?0:n.price*n.quantity,[n]),a=react.useMemo(()=>({...n?.side==="buy"?Ui:Fi,width:`${qi(p)}%`}),[n,p]);if(!n)return null;let l=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:Ri,onClick:s?()=>s(n):void 0,children:[jsxRuntime.jsx("div",{style:a}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Ei,children:jsxRuntime.jsx("span",{className:l?"text-bullish":"text-bearish",children:Ai(n.price)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Ni,children:Li(p)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Ii,children:Mi(o)})]})})}function At({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:Ti,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Di,children:[jsxRuntime.jsx("div",{style:ki,children:"Price"}),jsxRuntime.jsx("div",{style:wi,children:"Size (USD)"}),jsxRuntime.jsx("div",{style:Oi,children:"Age"})]}),jsxRuntime.jsx("div",{ref:r,className:"flex-1 min-h-0",children:s>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:s},rowComponent:_i,rowCount:e.length,rowHeight:Qe,rowProps:n,overscanCount:4})})]})}var Bi={backgroundColor:"#000000",fontSize:11},Hi={height:28,minHeight:28,padding:"0 16px",color:"#6b6b6b",fontSize:11},ds={flex:"1 1 0%",maxWidth:100},ms={flex:"1 1 0%",marginLeft:20},fs={flex:"1 1 0%",maxWidth:120,textAlign:"right"},Qi={height:22,minHeight:22,maxHeight:22,padding:"0 16px"};function zi({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:Qi,children:[jsxRuntime.jsx("div",{style:ds,children:jsxRuntime.jsx("div",{style:{...W(e),height:11,width:56}})}),jsxRuntime.jsx("div",{style:ms,children:jsxRuntime.jsx("div",{style:{...W(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:fs,children:jsxRuntime.jsx("div",{style:{...W(e+60),height:11,width:28}})})]})}function Wi(){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:Bi,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Hi,children:[jsxRuntime.jsx("div",{style:ds,children:"Price"}),jsxRuntime.jsx("div",{style:ms,children:"Size (USD)"}),jsxRuntime.jsx("div",{style:fs,children:"Age"})]}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(t=>jsxRuntime.jsx(zi,{delay:t*35},`trade-${t}`))})]})]})}function $i(){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 Ki({symbol:e,limit:t=100,onTradeClick:r,className:s}){let{trades:n,isLoading:i}=It({symbol:e,limit:t});return i?jsxRuntime.jsx(Wi,{}):n.length===0?jsxRuntime.jsx($i,{}):jsxRuntime.jsx("div",{className:s,children:jsxRuntime.jsx(At,{trades:n,onTradeClick:r})})}function Lt({symbol:e,userAddress:t,maxLeverage:r=150,onSuccess:s,onError:n}){let[i,o]=react.useState("long"),[p,a]=react.useState("market"),l=reactHookForm.useForm({defaultValues:{amount:0,leverage:20,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:u}=ve({symbol:e}),{mutateAsync:d,isPending:m}=Te({onSuccess:()=>{l.reset(),s?.();},onError:T=>{n?.(T);}}),f=l.watch(),{amount:c,leverage:g,price:E}=f,h=react.useMemo(()=>p==="limit"&&E?E:u?.price||0,[p,E,u?.price]),x=react.useMemo(()=>!c||!h?0:c*h*5e-4,[c,h]),v=react.useMemo(()=>!c||!h?0:c*h+x,[c,h,x]),O=react.useMemo(()=>{if(!c||!h||!g||g===1)return;let T=.005,q=h;return i==="long"?q*(1-(1/g-T)):q*(1+(1/g-T))},[c,h,g,i]),{data:R}=Ce({userAddress:t,symbol:e}),B=R?.totalEquity??0,A=R?.availableBalance??0,y=react.useMemo(()=>{let T=R?.positions?.[0];return T?T.side==="short"?-T.quantity:T.quantity:0},[R?.positions]),N=react.useCallback(async T=>{if(!t)throw new Error("User address is required");let q=p==="limit"?T.price:void 0,ue=T.takeProfitPrice,ee=T.stopLossPrice;if(!ue&&T.takeProfitPercent&&T.takeProfitPercent>0&&h){let te=T.takeProfitPercent/100;ue=i==="long"?h*(1+te):h*(1-te);}if(!ee&&T.stopLossPercent&&T.stopLossPercent>0&&h){let te=T.stopLossPercent/100;ee=i==="long"?h*(1-te):h*(1+te);}await d({symbol:e,side:i,orderType:p,amount:T.amount,price:q,leverage:T.leverage,takeProfitPrice:ue,stopLossPrice:ee,userAddress:t});},[e,i,p,h,t,d]);return {form:l,side:i,orderType:p,setSide:o,setOrderType:a,handleSubmit:N,isSubmitting:m,currentPrice:h,estimatedFee:x,estimatedTotal:v,liquidationPrice:O,availableMargin:A,accountValue:B,currentPosition:y,maxLeverage:r}}function We(e,t=2){return e.toFixed(t)}function Zi({leverage:e,maxLeverage:t,onLeverageChange:r,onClose:s}){let n=[1,2,3,5,10,20,25,50,100].filter(i=>i<=t);return jsxRuntime.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[jsxRuntime.jsx("div",{className:"absolute inset-0 bg-black/60",onClick:s,onKeyDown:i=>i.key==="Escape"&&s(),role:"button",tabIndex:-1,"aria-label":"Close"}),jsxRuntime.jsxs("div",{className:"relative z-10 w-72 bg-neutral-900 border border-neutral-700 rounded-lg p-4 shadow-2xl",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsxRuntime.jsx("h3",{className:"text-sm font-medium text-white",children:"Adjust Leverage"}),jsxRuntime.jsx("button",{type:"button",onClick:s,className:"text-neutral-400 hover:text-white",children:jsxRuntime.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),jsxRuntime.jsxs("div",{className:"text-center text-2xl font-bold text-white mb-4",children:[e,"x"]}),jsxRuntime.jsx(ui$1.Slider,{value:[e],onChange:i=>r(Array.isArray(i)?i[0]:i),minValue:1,maxValue:t,step:1,className:"w-full mb-3"}),jsxRuntime.jsx("div",{className:"flex flex-wrap gap-1.5",children:n.map(i=>jsxRuntime.jsxs("button",{type:"button",className:ui$1.cn("px-2.5 py-1 text-xs rounded transition-colors",e===i?"bg-green-600 text-white":"bg-neutral-800 text-neutral-400 hover:bg-neutral-700"),onClick:()=>r(i),children:[i,"x"]},i))}),jsxRuntime.jsx("button",{type:"button",className:"w-full mt-4 text-white h-9 rounded cursor-pointer transition-colors",style:{backgroundColor:"#C7FF2E"},onClick:s,children:"Confirm"})]})]})}function Mt({methods:e,side:t,orderType:r,onSideChange:s,onOrderTypeChange:n,onSubmit:i,isSubmitting:o,symbol:p,currentPrice:a,estimatedFee:l,liquidationPrice:u,availableMargin:d,accountValue:m,currentPosition:f,maxLeverage:c,onAddFunds:g}){let[E,h]=react.useState(false),[x,v]=react.useState(false),O=e.watch("leverage")||20,R=e.watch("amount")||0,B=p.split("-")[0],A=d>0&&a?Math.min(R*a/(d*O)*100,100):0,y=N=>{let T=(Array.isArray(N)?N[0]:N)/100;if(a&&a>0){let q=d*O*T/a;e.setValue("amount",Number(q.toFixed(6)));}};return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000"},children:[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:"flex",style:{border:"1px solid rgba(26,26,26,0.5)",borderRadius:8,padding:4,gap:4},children:[jsxRuntime.jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:t==="long"?"#C7FF2E":"transparent",color:t==="long"?"#000000":"#b5b5b5",fontWeight:t==="long"?700:500},onClick:()=>s("long"),children:"Long"}),jsxRuntime.jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:t==="short"?"#F76816":"transparent",color:t==="short"?"#000000":"#b5b5b5",fontWeight:t==="short"?700:500},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(N=>jsxRuntime.jsx("div",{style:{height:32,display:"flex",alignItems:"center",borderBottom:r===N.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===N.key?"#ffffff":"#b5b5b5",border:"none"},onClick:()=>n(N.key),children:N.label})},N.key))}),jsxRuntime.jsx("div",{className:"flex-1"}),jsxRuntime.jsxs("button",{type:"button",className:"cursor-pointer transition-colors",style:{height:24,padding:"0 5px",fontSize:12,borderRadius:4,backgroundColor:"rgba(26,26,26,0.5)",color:"#ffffff",fontWeight:400,border:"1px solid rgba(26,26,26,0.5)"},onClick:()=>h(true),children:["Leverage: ",O,"x"]})]}),jsxRuntime.jsx(ui$1.RHForm,{methods:e,onSubmit:i,children:jsxRuntime.jsxs("div",{className:"space-y-3 w-full",children:[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:"Price"}),jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"USDC"})]}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"price",placeholder:"0.0 USDC",className:"w-full"})]}),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:12,color:"#6b6b6b"},children:B})]}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"amount",placeholder:"0.0 USDC",className:"w-full"})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("style",{children:`
2
4
  .perp-buy-amt input, .perp-price-box input { font-size: 18px !important; line-height: 23px !important; }
3
5
  .perp-order-form .group,
4
6
  .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; }
@@ -8,7 +10,7 @@
8
10
  .perp-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 12px; height: 12px; border-radius: 50%; background: #C7FF2E; margin-top: -4px; border: none; }
9
11
  .perp-slider::-moz-range-track { height: 4px; border-radius: 2px; background: #1c1c1c; border: none; }
10
12
  .perp-slider::-moz-range-thumb { width: 12px; height: 12px; border-radius: 50%; background: #C7FF2E; border: none; }
11
- `}),jsxRuntime.jsx("input",{type:"range",value:Math.round(F),onChange:N=>y(Number(N.target.value)),min:0,max:100,step:1,className:"perp-slider"}),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("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:6},children:[jsxRuntime.jsx("div",{onClick:()=>v(N=>!N),style:{width:16,height:16,borderRadius:4,border:"1px solid #2a2a2a",backgroundColor:x?"#C7FF2E":"transparent",flexShrink:0,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:x&&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:u?He(u,2):"--"})]})]}),x&&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(ui$1.RHNumberInput,{name:"takeProfitPrice",placeholder:"Enter TP price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP %"}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"takeProfitPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]}),g&&jsxRuntime.jsx("button",{type:"button",onClick:g,className:"w-full cursor-pointer transition-colors",style:{height:36,fontSize:14,fontWeight:700,color:"#000000",backgroundColor:"#C7FF2E",borderRadius:9999,border:"none"},children:"Add More Funds"}),x&&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(ui$1.RHNumberInput,{name:"stopLossPrice",placeholder:"Enter SL price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL %"}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"stopLossPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]})]})})]}),jsxRuntime.jsxs("div",{style:{padding:"10px 16px",fontSize:12,display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Available Margin"}),jsxRuntime.jsxs("span",{style:{color:"#C7FF2E",fontSize:12,fontWeight:500},children:[He(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:[He(m)," 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:f?He(f):"--"})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-end",style:{gap:6,paddingTop:8},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:N=>{let T=N.target;T.style.display="none";}})]})]}),E&&jsxRuntime.jsx(Ui,{leverage:O,maxLeverage:c,onLeverageChange:N=>t.setValue("leverage",N),onClose:()=>h(false)})]})}function Fi({symbol:t,userAddress:e,maxLeverage:r,onSuccess:s,onError:n,onAddFunds:i,className:o}){let{form:p,side:a,orderType:l,setSide:u,setOrderType:d,handleSubmit:m,isSubmitting:f,currentPrice:c,estimatedFee:g,estimatedTotal:E,liquidationPrice:h,availableMargin:x,accountValue:v,currentPosition:O,maxLeverage:R}=At({symbol:t,userAddress:e,maxLeverage:r,onSuccess:s,onError:n});return jsxRuntime.jsx("div",{className:o,children:jsxRuntime.jsx(Mt,{methods:p,side:a,orderType:l,onSideChange:u,onOrderTypeChange:d,onSubmit:m,isSubmitting:f,symbol:t,currentPrice:c,estimatedFee:g,estimatedTotal:E,liquidationPrice:h,availableMargin:x,accountValue:v,currentPosition:O,maxLeverage:R,onAddFunds:i})})}function qt({userAddress:t,symbol:e,onCloseSuccess:r,onCloseError:s}){let[n,i]=react.useState([]),{data:o,isLoading:p,error:a}=ve({userAddress:t,symbol:e},{enabled:!!t}),{data:l}=Te({type:"positions",userAddress:t||"",enabled:!!t}),{mutateAsync:u,isPending:d}=Ce({onSuccess:()=>{r?.();},onError:f=>{s?.(f);}});react.useEffect(()=>{o?.positions&&i(o.positions);},[o]),react.useEffect(()=>{l&&i(f=>{let c=f.findIndex(g=>g.symbol===l.symbol);if(l.quantity===0)return c!==-1?f.filter((g,E)=>E!==c):f;if(c!==-1){let g=[...f];return g[c]=l,g}return [...f,l]});},[l]);let m=react.useCallback(async f=>{if(!t)throw new Error("User address is required");let c=f.side==="long"?"short":"long";await u({symbol:f.symbol,side:c,orderType:"market",amount:Math.abs(f.quantity),leverage:f.leverage,userAddress:t});},[t,u]);return {positions:n,isLoading:p,error:a,handleClosePosition:m,isClosing:d}}function ge(t,e=2){return t.toFixed(e)}function Lt(t){return ge(t,4)}function Bi(t){return ge(Math.abs(t),4)}function _i(t){return `${t>=0?"+":""}${ge(t,2)}`}function Qi(t){return `${t>=0?"+":""}${ge(t,2)}%`}function Bt({positions:t,onClosePosition:e,isClosing:r}){let s=jsxRuntime.jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Asset"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position Value"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Entry Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Mark Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Liquidation"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Margin Used (PNL) \u2193"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"TP"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"SL"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Close"})]});return t.length===0?jsxRuntime.jsxs("div",{className:"w-full overflow-x-auto bg-transparent",children:[jsxRuntime.jsx("table",{className:"w-full",style:{fontSize:12},children:jsxRuntime.jsx("thead",{children:s})}),jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{fontSize:14,color:"#b5b5b5",padding:"24px 0"},children:"No open positions"})]}):jsxRuntime.jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxRuntime.jsxs("table",{className:"w-full",style:{fontSize:12},children:[jsxRuntime.jsx("thead",{children:s}),jsxRuntime.jsx("tbody",{children:t.map(n=>{let o=n.unrealizedPnl>=0?"text-bullish":"text-bearish";return jsxRuntime.jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("td",{className:"py-1.5 px-3",children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:n.symbol.split("-")[0]}),jsxRuntime.jsxs("span",{className:ui$1.cn(n.side==="long"?"text-bullish":"text-bearish"),children:[n.leverage,"x ",n.side.toUpperCase()]})]})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Bi(n.quantity)}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",ge(n.notionalValue)]}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",Lt(n.entryPrice)]}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",Lt(n.markPrice)]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:n.liquidationPrice?`$${Lt(n.liquidationPrice)}`:"-"}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:jsxRuntime.jsxs("div",{className:"flex flex-col items-end",children:[jsxRuntime.jsxs("span",{style:{color:"#ffffff"},children:["$",ge(n.margin)]}),jsxRuntime.jsxs("span",{className:o,children:[_i(n.unrealizedPnl)," (",Qi(n.unrealizedPnlPercent),")"]})]})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:()=>e(n),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Close"})})]},n.symbol)})})]})})}function _t(){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 Hi(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:14,color:"#b5b5b5"},children:"No open positions"})}function zi({userAddress:t,symbol:e,onCloseSuccess:r,onCloseError:s,className:n}){let{positions:i,isLoading:o,handleClosePosition:p,isClosing:a}=qt({userAddress:t,symbol:e,onCloseSuccess:r,onCloseError:s});return o?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(_t,{})}):jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Bt,{positions:i,onClosePosition:p,isClosing:a})})}function Qt({userAddress:t,symbol:e,onCancelSuccess:r,onCancelError:s}){let[n,i]=react.useState([]),{data:o,isLoading:p,error:a}=nt({userAddress:t,symbol:e},{enabled:!!t}),{data:l}=Te({type:"orders",userAddress:t||"",enabled:!!t}),{mutateAsync:u,isPending:d}=ot({onSuccess:()=>{r?.();},onError:f=>{s?.(f);}});react.useEffect(()=>{o?.orders&&i(o.orders);},[o]),react.useEffect(()=>{l&&i(f=>{let c=f.findIndex(g=>g.orderId===l.orderId);if(l.status==="cancelled"||l.status==="filled"||l.status==="rejected")return c!==-1?f.filter((g,E)=>E!==c):f;if(c!==-1){let g=[...f];return g[c]=l,g}return [l,...f]});},[l]);let m=react.useCallback(async f=>{if(!t)throw new Error("User address is required");await u({orderId:f.orderId,symbol:f.symbol,userAddress:t});},[t,u]);return {orders:n,isLoading:p,error:a,handleCancelOrder:m,isCanceling:d}}function gs(t,e=2){return t.toFixed(e)}function Gi(t){return gs(t,4)}function Ht(t){return gs(t,4)}function Vi(t){let e=new Date(t),r=String(e.getHours()).padStart(2,"0"),s=String(e.getMinutes()).padStart(2,"0"),n=String(e.getSeconds()).padStart(2,"0");return `${r}:${s}:${n}`}function zt({orders:t,onCancelOrder:e,isCanceling:r}){return t.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"}):jsxRuntime.jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxRuntime.jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsxRuntime.jsx("thead",{children:jsxRuntime.jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Type"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Amount"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Filled"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Remaining"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Status"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Action"})]})}),jsxRuntime.jsx("tbody",{children:t.map(s=>jsxRuntime.jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("td",{className:"py-1.5 px-3",children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:s.symbol.split("-")[0]}),jsxRuntime.jsxs("span",{className:ui$1.cn(s.side==="long"?"text-bullish":"text-bearish"),children:[s.side.toUpperCase(),s.leverage?` ${s.leverage}x`:""]})]})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 capitalize",style:{color:"#ffffff"},children:s.orderType}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:s.orderType==="market"?jsxRuntime.jsx("span",{style:{color:"#b5b5b5"},children:"Market"}):`$${Gi(s.price)}`}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Ht(s.quantity)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Ht(s.filledQuantity)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Ht(s.remainingQuantity)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:jsxRuntime.jsx("span",{className:ui$1.cn("px-2 py-0.5 rounded","text-[11px]",s.status==="pending"&&"bg-yellow-600/20 text-yellow-500",s.status==="partially_filled"&&"bg-blue-600/20 text-blue-500",s.status==="filled"&&"bg-green-600/20 text-green-500",s.status==="cancelled"&&"bg-neutral-600/20 text-neutral-400",s.status==="rejected"&&"bg-red-600/20 text-red-500"),children:s.status.replace("_"," ")})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:Vi(s.timestamp)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:s.status==="pending"||s.status==="partially_filled"?jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:()=>e(s),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Cancel"}):jsxRuntime.jsx("span",{className:"text-[11px]",style:{color:"#6b6d7a"},children:"-"})})]},s.orderId))})]})})}function Wt(){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 $t(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"})}function ji({userAddress:t,symbol:e,onCancelSuccess:r,onCancelError:s,className:n}){let{orders:i,isLoading:o,handleCancelOrder:p,isCanceling:a}=Qt({userAddress:t,symbol:e,onCancelSuccess:r,onCancelError:s});return o?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Wt,{})}):i.length===0?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx($t,{})}):jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(zt,{orders:i,onCancelOrder:p,isCanceling:a})})}function Yi(t){let e=Date.now(),r=e;switch(t){case "today":let s=new Date;return s.setHours(0,0,0,0),{startTime:s.getTime(),endTime:r};case "7d":return {startTime:e-10080*60*1e3,endTime:r};case "30d":return {startTime:e-720*60*60*1e3,endTime:r};default:return {}}}function Gt({userAddress:t,symbol:e,initialTimeRange:r="7d",pageSize:s=50}){let[n,i]=react.useState(r),[o,p]=react.useState(1),[a,l]=react.useState([]),{startTime:u,endTime:d}=Yi(n),{data:m,isLoading:f,error:c}=it({userAddress:t,symbol:e,startTime:u,endTime:d,limit:1e3},{enabled:!!t});react.useEffect(()=>{m?.trades&&(l(m.trades),p(1));},[m]),react.useEffect(()=>{p(1);},[n]);let g=Math.ceil(a.length/s),E=(o-1)*s,h=E+s;return {trades:a.slice(E,h),isLoading:f,error:c,timeRange:n,setTimeRange:i,currentPage:o,totalPages:g,goToNextPage:()=>{o<g&&p(o+1);},goToPreviousPage:()=>{o>1&&p(o-1);},goToPage:B=>{B>=1&&B<=g&&p(B);}}}function Vt(t,e=2){return t.toFixed(e)}function Ji(t){return Vt(t,4)}function Xi(t){return Vt(t,4)}function Zi(t){let e=new Date(t),r=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),n=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0");return `${r}/${s} ${n}:${i}:${o}`}var eo=[{label:"Today",value:"today"},{label:"7 Days",value:"7d"},{label:"30 Days",value:"30d"},{label:"All",value:"all"}];function jt({trades:t,timeRange:e,onTimeRangeChange:r,currentPage:s,totalPages:n,onNextPage:i,onPreviousPage:o,onGoToPage:p}){return jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-4",children:[jsxRuntime.jsx("div",{className:"flex gap-2",children:eo.map(a=>{let l=e===a.value;return jsxRuntime.jsx("button",{type:"button",className:ui$1.cn("rounded px-3 transition-colors",!l&&"hover:bg-[#1A1A1A]"),style:{height:24,fontSize:11,border:"1px solid #1c1c1c",backgroundColor:l?"#1c1c1c":"transparent",color:l?"#ffffff":"#b5b5b5"},onClick:()=>r(a.value),children:a.label},a.value)})}),t.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxRuntime.jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsxRuntime.jsx("thead",{children:jsxRuntime.jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Side"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Quantity"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Fee"}),jsxRuntime.jsx("th",{className:"text-center py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Maker/Taker"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"})]})}),jsxRuntime.jsx("tbody",{children:t.map(a=>jsxRuntime.jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("td",{className:"py-1.5 px-3 font-medium",style:{color:"#ffffff"},children:a.symbol.split("-")[0]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3",children:jsxRuntime.jsx("span",{className:ui$1.cn("px-2 py-0.5 rounded text-[11px]",a.side==="long"?"bg-bullish/20 text-bullish":"bg-bearish/20 text-bearish"),children:a.side.toUpperCase()})}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",Ji(a.price)]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Xi(a.quantity)}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:[Vt(a.fee,4)," ",a.feeCurrency]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-center",children:jsxRuntime.jsx("span",{className:ui$1.cn("px-2 py-0.5 rounded text-[11px]",a.isMaker?"bg-blue-600/20 text-blue-500":"bg-purple-600/20 text-purple-500"),children:a.isMaker?"Maker":"Taker"})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:Zi(a.timestamp)})]},a.tradeId))})]})}),n>1&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral-400",children:["Page ",s," of ",n]}),jsxRuntime.jsxs("div",{className:"flex gap-2",children:[jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:o,disabled:s===1,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Previous"}),jsxRuntime.jsx("div",{className:"flex gap-1",children:Array.from({length:Math.min(5,n)},(a,l)=>{let u;return n<=5||s<=3?u=l+1:s>=n-2?u=n-4+l:u=s-2+l,jsxRuntime.jsx("button",{type:"button",className:ui$1.cn("w-8 h-8 text-sm rounded transition-colors",s===u?"bg-neutral-700 text-white":"text-neutral-400 hover:bg-neutral-800 hover:text-white"),onClick:()=>p(u),children:u},u)})}),jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:i,disabled:s===n,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Next"})]})]})]})]})}function Yt(){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 Jt(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"})}function ro({userAddress:t,symbol:e,initialTimeRange:r="7d",pageSize:s=50,className:n}){let{trades:i,isLoading:o,timeRange:p,setTimeRange:a,currentPage:l,totalPages:u,goToNextPage:d,goToPreviousPage:m,goToPage:f}=Gt({userAddress:t,symbol:e,initialTimeRange:r,pageSize:s});return o?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Yt,{})}):i.length===0?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Jt,{})}):jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(jt,{trades:i,timeRange:p,onTimeRangeChange:a,currentPage:l,totalPages:u,onNextPage:d,onPreviousPage:m,onGoToPage:f})})}var so=1000000000n,no=8,io=10n**BigInt(8);function Re(t,e=4){if(!t)return "0";let r;try{r=BigInt(t);}catch{return "0"}return hs(r,so,e)}function $e(t,e=2){if(!t)return "0";let r;try{r=BigInt(t);}catch{return "0"}return hs(r,io,e)}var oo=$e;function Xt(t){if(!t)return "0";let[e,r=""]=t.replace(/[\s,]/g,"").split(".");if(!/^\d*$/.test(e)||!/^\d*$/.test(r))return "0";let s=(r+"000000000").slice(0,9),n=`${e||"0"}${s}`.replace(/^0+(?=\d)/,"");return n===""?"0":n}function hs(t,e,r){let s=t<0n,n=s?-t:t,i=n/e,o=n%e;if(r<=0)return o*2n>=e&&(i+=1n),`${s?"-":""}${i.toString()}`;let p=10n**BigInt(r),a=(o*p+e/2n)/e;a>=p&&(i+=1n,a=0n);let l=a.toString().padStart(r,"0");return l=l.replace(/0+$/,""),l?`${s?"-":""}${i.toString()}.${l}`:`${s?"-":""}${i.toString()}`}function Ee(t,e=Date.now()){return Math.max(0,Math.floor((t-e)/1e3))}function Zt(t,e=6,r=4){return t?t.length<=e+r+1?t:`${t.slice(0,e)}\u2026${t.slice(-r)}`:""}function er({isOpen:t,quote:e,isExecuting:r,isExpired:s,onConfirm:n,onCancel:i,onExpire:o,error:p}){let{t:a}=i18n.useTranslation(),l=e?Date.parse(e.expiresAt):0,[u,d]=react.useState(()=>l?Ee(l):0);return react.useEffect(()=>{if(!t||!l)return;d(Ee(l));let m=setInterval(()=>{let f=Ee(l);d(f),f===0&&(o?.(),clearInterval(m));},1e3);return ()=>clearInterval(m)},[t,l,o]),jsxRuntime.jsx(ui$1.Modal,{isOpen:t,onOpenChange:m=>!m&&i(),hideCloseButton:true,backdrop:"blur",children:jsxRuntime.jsxs(ui$1.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui$1.ModalHeader,{children:a("perpDeposit.confirm.title")}),jsxRuntime.jsxs(ui$1.ModalBody,{children:[e?jsxRuntime.jsx(yo,{breakdown:e.breakdown}):jsxRuntime.jsx("div",{className:"flex h-32 items-center justify-center",children:jsxRuntime.jsx(ui$1.Spinner,{})}),e&&!s&&jsxRuntime.jsx("div",{className:"text-default-500 mt-4 text-xs",children:a("perpDeposit.confirm.expiresIn",{seconds:u})}),s&&jsxRuntime.jsx("div",{className:"text-warning-500 mt-4 text-xs",children:a("perpDeposit.confirm.expired")}),p&&jsxRuntime.jsx("div",{className:"text-danger mt-4 text-xs",children:p})]}),jsxRuntime.jsxs(ui$1.ModalFooter,{className:"flex justify-between gap-2",children:[jsxRuntime.jsx(ui$1.Button,{variant:"flat",color:"default",onPress:i,isDisabled:r,children:a("perpDeposit.confirm.cancel")}),jsxRuntime.jsx(ui$1.Button,{color:"primary",onPress:n,isDisabled:!e||r||s,isLoading:r,children:a("perpDeposit.confirm.cta")})]})]})})}function yo({breakdown:t}){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("dl",{className:"flex flex-col gap-2 text-sm",children:[jsxRuntime.jsx(Ke,{label:e("perpDeposit.confirm.send"),value:`${Re(t.grossLamports)} SOL`}),jsxRuntime.jsx(Ke,{label:e("perpDeposit.confirm.receive"),value:`${$e(t.expectedOutputUSDC)} USDC`,highlight:true}),jsxRuntime.jsx(Ke,{label:e("perpDeposit.confirm.platformFee"),value:`${Re(t.platformFeeLamports,6)} SOL`,muted:true}),jsxRuntime.jsx(Ke,{label:e("perpDeposit.confirm.relayFee"),value:`${Re(t.relayDepositLamports,6)} SOL`,muted:true})]})}function Ke({label:t,value:e,highlight:r,muted:s}){return jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsx("dt",{className:"text-default-500",children:t}),jsxRuntime.jsx("dd",{className:r?"text-foreground text-base font-semibold":s?"text-default-500 text-xs":"text-foreground",children:e})]})}function tr({amount:t,onAmountChange:e,recipient:r,onRecipientChange:s,balanceSol:n,disabled:i,amountError:o,recipientError:p,onMax:a,className:l}){let{t:u}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui$1.cn("flex flex-col gap-4",l),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:u("perpDeposit.amount")}),n&&jsxRuntime.jsx("span",{className:"text-xs text-default-500",children:u("perpDeposit.amount.balance",{balance:n})})]}),jsxRuntime.jsx("div",{className:"relative",children:jsxRuntime.jsx(ui$1.Input,{id:"perp-deposit-amount",type:"text",inputMode:"decimal",placeholder:u("perpDeposit.amount.placeholder"),value:t,onValueChange:e,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:u("perpDeposit.amount.unit")}),n&&a&&jsxRuntime.jsx(ui$1.Button,{size:"sm",variant:"flat",color:"primary",onPress:a,isDisabled:i,children:u("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:u("perpDeposit.recipient")}),jsxRuntime.jsx(ui$1.Input,{id:"perp-deposit-recipient",type:"text",placeholder:u("perpDeposit.recipient.placeholder"),value:r,onValueChange:s,isDisabled:i,isInvalid:!!p,errorMessage:p,autoComplete:"off",spellCheck:"false"})]})]})}var Cs="#C7FF2E";function sr({isOpen:t,phase:e,status:r,solanaExplorerUrl:s,hyperliquidExplorerUrl:n,onRetry:i,onClose:o,errorMessage:p}){let{t:a}=i18n.useTranslation(),l=ko(e),u=e==="failed"?p||(r?.lastError?.message?a("perpDeposit.status.failed",{message:r.lastError.message}):a("perpDeposit.status.failed",{message:""})):e==="succeeded"?a("perpDeposit.status.settled"):e==="refunded"?a("perpDeposit.status.refunded"):r?.status==="broadcasted"?a("perpDeposit.status.broadcasted"):r?.status==="relay_waiting"?a("perpDeposit.status.relay_waiting"):r?.status==="relay_pending"?a("perpDeposit.status.relay_pending"):r?.status==="stuck"?a("perpDeposit.status.stuck"):a("perpDeposit.status.broadcasted"),d=e==="failed"&&!!i;return jsxRuntime.jsx(ui$1.StyledModal,{isOpen:t,onOpenChange:m=>!m&&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$1.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:a("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":a("perpDeposit.status.close"),children:jsxRuntime.jsx(ui$1.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(To,{variant:l}),jsxRuntime.jsx("p",{className:ui$1.cn("text-sm leading-relaxed max-w-[320px]",wo(l)),children:u})]}),(r?.solanaTxHash||r?.hyperliquidTxHash)&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col gap-2",children:[r?.solanaTxHash&&s&&jsxRuntime.jsx(vs,{href:s,label:a("perpDeposit.status.viewSolanaTx"),hash:r.solanaTxHash}),r?.hyperliquidTxHash&&n&&jsxRuntime.jsx(vs,{href:n,label:a("perpDeposit.status.viewHyperliquidTx"),hash:r.hyperliquidTxHash})]})]}),jsxRuntime.jsxs("div",{className:ui$1.cn("px-5 pb-5 pt-2 flex gap-2",d?"justify-between":"justify-end"),children:[d&&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:a("perpDeposit.status.tryAgain")}),jsxRuntime.jsx("button",{type:"button",onClick:o,className:ui$1.cn("cursor-pointer h-10 rounded-[10px] font-medium transition-colors flex items-center justify-center",d?"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:a("perpDeposit.status.close")})]})]})})})}function vs({href:t,label:e,hash:r}){return jsxRuntime.jsxs("a",{href:t,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:e}),jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-xs tabular-nums text-zinc-300 group-hover:text-[#C7FF2E] transition-colors",children:[Zt(r,6,4),jsxRuntime.jsx(No,{})]})]})}function To({variant:t}){return t==="progress"?jsxRuntime.jsx("div",{className:"relative w-14 h-14 flex items-center justify-center",children:jsxRuntime.jsx(Do,{})}):t==="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(Oo,{className:"w-8 h-8",style:{color:Cs}})}):t==="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(Ro,{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(Eo,{className:"w-8 h-8 text-rose-400"})})}function Do(){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:Cs,strokeWidth:"4",strokeLinecap:"round",strokeDasharray:"90 60"})]}),jsxRuntime.jsx("style",{children:`
13
+ `}),jsxRuntime.jsx("input",{type:"range",value:Math.round(A),onChange:N=>y(Number(N.target.value)),min:0,max:100,step:1,className:"perp-slider"}),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("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:6},children:[jsxRuntime.jsx("div",{onClick:()=>v(N=>!N),style:{width:16,height:16,borderRadius:4,border:"1px solid #2a2a2a",backgroundColor:x?"#C7FF2E":"transparent",flexShrink:0,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:x&&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:u?We(u,2):"--"})]})]}),x&&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(ui$1.RHNumberInput,{name:"takeProfitPrice",placeholder:"Enter TP price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP %"}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"takeProfitPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]}),g&&jsxRuntime.jsx("button",{type:"button",onClick:g,className:"w-full cursor-pointer transition-colors",style:{height:36,fontSize:14,fontWeight:700,color:"#000000",backgroundColor:"#C7FF2E",borderRadius:9999,border:"none"},children:"Add More Funds"}),x&&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(ui$1.RHNumberInput,{name:"stopLossPrice",placeholder:"Enter SL price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxRuntime.jsxs("div",{style:{width:70},children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL %"}),jsxRuntime.jsx(ui$1.RHNumberInput,{name:"stopLossPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]})]})})]}),jsxRuntime.jsxs("div",{style:{padding:"10px 16px",fontSize:12,display:"flex",flexDirection:"column",gap:6},children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-center",children:[jsxRuntime.jsx("span",{style:{color:"#6b6b6b"},children:"Available Margin"}),jsxRuntime.jsxs("span",{style:{color:"#C7FF2E",fontSize:12,fontWeight:500},children:[We(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:[We(m)," 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:f?We(f):"--"})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-end",style:{gap:6,paddingTop:8},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:N=>{let T=N.target;T.style.display="none";}})]})]}),E&&jsxRuntime.jsx(Zi,{leverage:O,maxLeverage:c,onLeverageChange:N=>e.setValue("leverage",N),onClose:()=>h(false)})]})}function eo({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n,onAddFunds:i,className:o}){let{form:p,side:a,orderType:l,setSide:u,setOrderType:d,handleSubmit:m,isSubmitting:f,currentPrice:c,estimatedFee:g,estimatedTotal:E,liquidationPrice:h,availableMargin:x,accountValue:v,currentPosition:O,maxLeverage:R}=Lt({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n});return jsxRuntime.jsx("div",{className:o,children:jsxRuntime.jsx(Mt,{methods:p,side:a,orderType:l,onSideChange:u,onOrderTypeChange:d,onSubmit:m,isSubmitting:f,symbol:e,currentPrice:c,estimatedFee:g,estimatedTotal:E,liquidationPrice:h,availableMargin:x,accountValue:v,currentPosition:O,maxLeverage:R,onAddFunds:i})})}function qt({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s}){let[n,i]=react.useState([]),{data:o,isLoading:p,error:a}=Ce({userAddress:e,symbol:t},{enabled:!!e}),{data:l}=De({type:"positions",userAddress:e||"",enabled:!!e}),{mutateAsync:u,isPending:d}=Te({onSuccess:()=>{r?.();},onError:f=>{s?.(f);}});react.useEffect(()=>{o?.positions&&i(o.positions);},[o]),react.useEffect(()=>{l&&i(f=>{let c=f.findIndex(g=>g.symbol===l.symbol);if(l.quantity===0)return c!==-1?f.filter((g,E)=>E!==c):f;if(c!==-1){let g=[...f];return g[c]=l,g}return [...f,l]});},[l]);let m=react.useCallback(async f=>{if(!e)throw new Error("User address is required");let c=f.side==="long"?"short":"long";await u({symbol:f.symbol,side:c,orderType:"market",amount:Math.abs(f.quantity),leverage:f.leverage,userAddress:e});},[e,u]);return {positions:n,isLoading:p,error:a,handleClosePosition:m,isClosing:d}}function ye(e,t=2){return e.toFixed(t)}function _t(e){return ye(e,4)}function io(e){return ye(Math.abs(e),4)}function oo(e){return `${e>=0?"+":""}${ye(e,2)}`}function ao(e){return `${e>=0?"+":""}${ye(e,2)}%`}function Bt({positions:e,onClosePosition:t,isClosing:r}){let s=jsxRuntime.jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Asset"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position Value"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Entry Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Mark Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Liquidation"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Margin Used (PNL) \u2193"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"TP"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"SL"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Close"})]});return e.length===0?jsxRuntime.jsxs("div",{className:"w-full overflow-x-auto bg-transparent",children:[jsxRuntime.jsx("table",{className:"w-full",style:{fontSize:12},children:jsxRuntime.jsx("thead",{children:s})}),jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{fontSize:14,color:"#b5b5b5",padding:"24px 0"},children:"No open positions"})]}):jsxRuntime.jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxRuntime.jsxs("table",{className:"w-full",style:{fontSize:12},children:[jsxRuntime.jsx("thead",{children:s}),jsxRuntime.jsx("tbody",{children:e.map(n=>{let o=n.unrealizedPnl>=0?"text-bullish":"text-bearish";return jsxRuntime.jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("td",{className:"py-1.5 px-3",children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:n.symbol.split("-")[0]}),jsxRuntime.jsxs("span",{className:ui$1.cn(n.side==="long"?"text-bullish":"text-bearish"),children:[n.leverage,"x ",n.side.toUpperCase()]})]})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:io(n.quantity)}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",ye(n.notionalValue)]}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",_t(n.entryPrice)]}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",_t(n.markPrice)]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:n.liquidationPrice?`$${_t(n.liquidationPrice)}`:"-"}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:jsxRuntime.jsxs("div",{className:"flex flex-col items-end",children:[jsxRuntime.jsxs("span",{style:{color:"#ffffff"},children:["$",ye(n.margin)]}),jsxRuntime.jsxs("span",{className:o,children:[oo(n.unrealizedPnl)," (",ao(n.unrealizedPnlPercent),")"]})]})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:()=>t(n),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Close"})})]},n.symbol)})})]})})}function Ht(){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 po(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:14,color:"#b5b5b5"},children:"No open positions"})}function lo({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,className:n}){let{positions:i,isLoading:o,handleClosePosition:p,isClosing:a}=qt({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s});return o?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Ht,{})}):jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Bt,{positions:i,onClosePosition:p,isClosing:a})})}function Qt({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s}){let[n,i]=react.useState([]),{data:o,isLoading:p,error:a}=ot({userAddress:e,symbol:t},{enabled:!!e}),{data:l}=De({type:"orders",userAddress:e||"",enabled:!!e}),{mutateAsync:u,isPending:d}=pt({onSuccess:()=>{r?.();},onError:f=>{s?.(f);}});react.useEffect(()=>{o?.orders&&i(o.orders);},[o]),react.useEffect(()=>{l&&i(f=>{let c=f.findIndex(g=>g.orderId===l.orderId);if(l.status==="cancelled"||l.status==="filled"||l.status==="rejected")return c!==-1?f.filter((g,E)=>E!==c):f;if(c!==-1){let g=[...f];return g[c]=l,g}return [l,...f]});},[l]);let m=react.useCallback(async f=>{if(!e)throw new Error("User address is required");await u({orderId:f.orderId,symbol:f.symbol,userAddress:e});},[e,u]);return {orders:n,isLoading:p,error:a,handleCancelOrder:m,isCanceling:d}}function Ps(e,t=2){return e.toFixed(t)}function fo(e){return Ps(e,4)}function zt(e){return Ps(e,4)}function go(e){let t=new Date(e),r=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return `${r}:${s}:${n}`}function Wt({orders:e,onCancelOrder:t,isCanceling:r}){return e.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"}):jsxRuntime.jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxRuntime.jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsxRuntime.jsx("thead",{children:jsxRuntime.jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Type"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Amount"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Filled"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Remaining"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Status"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Action"})]})}),jsxRuntime.jsx("tbody",{children:e.map(s=>jsxRuntime.jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("td",{className:"py-1.5 px-3",children:jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:s.symbol.split("-")[0]}),jsxRuntime.jsxs("span",{className:ui$1.cn(s.side==="long"?"text-bullish":"text-bearish"),children:[s.side.toUpperCase(),s.leverage?` ${s.leverage}x`:""]})]})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 capitalize",style:{color:"#ffffff"},children:s.orderType}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:s.orderType==="market"?jsxRuntime.jsx("span",{style:{color:"#b5b5b5"},children:"Market"}):`$${fo(s.price)}`}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:zt(s.quantity)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:zt(s.filledQuantity)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:zt(s.remainingQuantity)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:jsxRuntime.jsx("span",{className:ui$1.cn("px-2 py-0.5 rounded","text-[11px]",s.status==="pending"&&"bg-yellow-600/20 text-yellow-500",s.status==="partially_filled"&&"bg-blue-600/20 text-blue-500",s.status==="filled"&&"bg-green-600/20 text-green-500",s.status==="cancelled"&&"bg-neutral-600/20 text-neutral-400",s.status==="rejected"&&"bg-red-600/20 text-red-500"),children:s.status.replace("_"," ")})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:go(s.timestamp)}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",children:s.status==="pending"||s.status==="partially_filled"?jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:()=>t(s),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Cancel"}):jsxRuntime.jsx("span",{className:"text-[11px]",style:{color:"#6b6d7a"},children:"-"})})]},s.orderId))})]})})}function $t(){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 Kt(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"})}function yo({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,className:n}){let{orders:i,isLoading:o,handleCancelOrder:p,isCanceling:a}=Qt({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s});return o?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx($t,{})}):i.length===0?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Kt,{})}):jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Wt,{orders:i,onCancelOrder:p,isCanceling:a})})}function bo(e){let t=Date.now(),r=t;switch(e){case "today":let s=new Date;return s.setHours(0,0,0,0),{startTime:s.getTime(),endTime:r};case "7d":return {startTime:t-10080*60*1e3,endTime:r};case "30d":return {startTime:t-720*60*60*1e3,endTime:r};default:return {}}}function Vt({userAddress:e,symbol:t,initialTimeRange:r="7d",pageSize:s=50}){let[n,i]=react.useState(r),[o,p]=react.useState(1),[a,l]=react.useState([]),{startTime:u,endTime:d}=bo(n),{data:m,isLoading:f,error:c}=at({userAddress:e,symbol:t,startTime:u,endTime:d,limit:1e3},{enabled:!!e});react.useEffect(()=>{m?.trades&&(l(m.trades),p(1));},[m]),react.useEffect(()=>{p(1);},[n]);let g=Math.ceil(a.length/s),E=(o-1)*s,h=E+s;return {trades:a.slice(E,h),isLoading:f,error:c,timeRange:n,setTimeRange:i,currentPage:o,totalPages:g,goToNextPage:()=>{o<g&&p(o+1);},goToPreviousPage:()=>{o>1&&p(o-1);},goToPage:B=>{B>=1&&B<=g&&p(B);}}}function jt(e,t=2){return e.toFixed(t)}function ho(e){return jt(e,4)}function xo(e){return jt(e,4)}function So(e){let t=new Date(e),r=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0"),n=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),o=String(t.getSeconds()).padStart(2,"0");return `${r}/${s} ${n}:${i}:${o}`}var Po=[{label:"Today",value:"today"},{label:"7 Days",value:"7d"},{label:"30 Days",value:"30d"},{label:"All",value:"all"}];function Yt({trades:e,timeRange:t,onTimeRangeChange:r,currentPage:s,totalPages:n,onNextPage:i,onPreviousPage:o,onGoToPage:p}){return jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-4",children:[jsxRuntime.jsx("div",{className:"flex gap-2",children:Po.map(a=>{let l=t===a.value;return jsxRuntime.jsx("button",{type:"button",className:ui$1.cn("rounded px-3 transition-colors",!l&&"hover:bg-[#1A1A1A]"),style:{height:24,fontSize:11,border:"1px solid #1c1c1c",backgroundColor:l?"#1c1c1c":"transparent",color:l?"#ffffff":"#b5b5b5"},onClick:()=>r(a.value),children:a.label},a.value)})}),e.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxRuntime.jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsxRuntime.jsx("thead",{children:jsxRuntime.jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsxRuntime.jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Side"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Quantity"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Fee"}),jsxRuntime.jsx("th",{className:"text-center py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Maker/Taker"}),jsxRuntime.jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"})]})}),jsxRuntime.jsx("tbody",{children:e.map(a=>jsxRuntime.jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsxRuntime.jsx("td",{className:"py-1.5 px-3 font-medium",style:{color:"#ffffff"},children:a.symbol.split("-")[0]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3",children:jsxRuntime.jsx("span",{className:ui$1.cn("px-2 py-0.5 rounded text-[11px]",a.side==="long"?"bg-bullish/20 text-bullish":"bg-bearish/20 text-bearish"),children:a.side.toUpperCase()})}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",ho(a.price)]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:xo(a.quantity)}),jsxRuntime.jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:[jt(a.fee,4)," ",a.feeCurrency]}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-center",children:jsxRuntime.jsx("span",{className:ui$1.cn("px-2 py-0.5 rounded text-[11px]",a.isMaker?"bg-blue-600/20 text-blue-500":"bg-purple-600/20 text-purple-500"),children:a.isMaker?"Maker":"Taker"})}),jsxRuntime.jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:So(a.timestamp)})]},a.tradeId))})]})}),n>1&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral-400",children:["Page ",s," of ",n]}),jsxRuntime.jsxs("div",{className:"flex gap-2",children:[jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:o,disabled:s===1,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Previous"}),jsxRuntime.jsx("div",{className:"flex gap-1",children:Array.from({length:Math.min(5,n)},(a,l)=>{let u;return n<=5||s<=3?u=l+1:s>=n-2?u=n-4+l:u=s-2+l,jsxRuntime.jsx("button",{type:"button",className:ui$1.cn("w-8 h-8 text-sm rounded transition-colors",s===u?"bg-neutral-700 text-white":"text-neutral-400 hover:bg-neutral-800 hover:text-white"),onClick:()=>p(u),children:u},u)})}),jsxRuntime.jsx(ui$1.Button,{size:"sm",onClick:i,disabled:s===n,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Next"})]})]})]})]})}function Jt(){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 Xt(){return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"})}function Co({userAddress:e,symbol:t,initialTimeRange:r="7d",pageSize:s=50,className:n}){let{trades:i,isLoading:o,timeRange:p,setTimeRange:a,currentPage:l,totalPages:u,goToNextPage:d,goToPreviousPage:m,goToPage:f}=Vt({userAddress:e,symbol:t,initialTimeRange:r,pageSize:s});return o?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Jt,{})}):i.length===0?jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Xt,{})}):jsxRuntime.jsx("div",{className:n,children:jsxRuntime.jsx(Yt,{trades:i,timeRange:p,onTimeRangeChange:a,currentPage:l,totalPages:u,onNextPage:d,onPreviousPage:m,onGoToPage:f})})}var To=1000000000n,Do=8,ko=10n**BigInt(8);function Ee(e,t=4){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return Ts(r,To,t)}function Ge(e,t=2){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return Ts(r,ko,t)}var wo=Ge;function Zt(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 Ts(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 p=10n**BigInt(r),a=(o*p+t/2n)/t;a>=p&&(i+=1n,a=0n);let l=a.toString().padStart(r,"0");return l=l.replace(/0+$/,""),l?`${s?"-":""}${i.toString()}.${l}`:`${s?"-":""}${i.toString()}`}function Ne(e,t=Date.now()){return Math.max(0,Math.floor((e-t)/1e3))}function er(e,t=6,r=4){return e?e.length<=t+r+1?e:`${e.slice(0,t)}\u2026${e.slice(-r)}`:""}function tr({isOpen:e,quote:t,isExecuting:r,isExpired:s,onConfirm:n,onCancel:i,onExpire:o,error:p}){let{t:a}=i18n.useTranslation(),l=t?Date.parse(t.expiresAt):0,[u,d]=react.useState(()=>l?Ne(l):0);return react.useEffect(()=>{if(!e||!l)return;d(Ne(l));let m=setInterval(()=>{let f=Ne(l);d(f),f===0&&(o?.(),clearInterval(m));},1e3);return ()=>clearInterval(m)},[e,l,o]),jsxRuntime.jsx(ui$1.Modal,{isOpen:e,onOpenChange:m=>!m&&i(),hideCloseButton:true,backdrop:"blur",children:jsxRuntime.jsxs(ui$1.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui$1.ModalHeader,{children:a("perpDeposit.confirm.title")}),jsxRuntime.jsxs(ui$1.ModalBody,{children:[t?jsxRuntime.jsx(Lo,{breakdown:t.breakdown}):jsxRuntime.jsx("div",{className:"flex h-32 items-center justify-center",children:jsxRuntime.jsx(ui$1.Spinner,{})}),t&&!s&&jsxRuntime.jsx("div",{className:"text-default-500 mt-4 text-xs",children:a("perpDeposit.confirm.expiresIn",{seconds:u})}),s&&jsxRuntime.jsx("div",{className:"text-warning-500 mt-4 text-xs",children:a("perpDeposit.confirm.expired")}),p&&jsxRuntime.jsx("div",{className:"text-danger mt-4 text-xs",children:p})]}),jsxRuntime.jsxs(ui$1.ModalFooter,{className:"flex justify-between gap-2",children:[jsxRuntime.jsx(ui$1.Button,{variant:"flat",color:"default",onPress:i,isDisabled:r,children:a("perpDeposit.confirm.cancel")}),jsxRuntime.jsx(ui$1.Button,{color:"primary",onPress:n,isDisabled:!t||r||s,isLoading:r,children:a("perpDeposit.confirm.cta")})]})]})})}function Lo({breakdown:e}){let{t}=i18n.useTranslation();return jsxRuntime.jsxs("dl",{className:"flex flex-col gap-2 text-sm",children:[jsxRuntime.jsx(Ve,{label:t("perpDeposit.confirm.send"),value:`${Ee(e.grossLamports)} SOL`}),jsxRuntime.jsx(Ve,{label:t("perpDeposit.confirm.receive"),value:`${Ge(e.expectedOutputUSDC)} USDC`,highlight:true}),jsxRuntime.jsx(Ve,{label:t("perpDeposit.confirm.platformFee"),value:`${Ee(e.platformFeeLamports,6)} SOL`,muted:true}),jsxRuntime.jsx(Ve,{label:t("perpDeposit.confirm.relayFee"),value:`${Ee(e.relayDepositLamports,6)} SOL`,muted:true})]})}function Ve({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 rr({amount:e,onAmountChange:t,recipient:r,onRecipientChange:s,balanceSol:n,disabled:i,amountError:o,recipientError:p,onMax:a,className:l}){let{t:u}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui$1.cn("flex flex-col gap-4",l),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:u("perpDeposit.amount")}),n&&jsxRuntime.jsx("span",{className:"text-xs text-default-500",children:u("perpDeposit.amount.balance",{balance:n})})]}),jsxRuntime.jsx("div",{className:"relative",children:jsxRuntime.jsx(ui$1.Input,{id:"perp-deposit-amount",type:"text",inputMode:"decimal",placeholder:u("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:u("perpDeposit.amount.unit")}),n&&a&&jsxRuntime.jsx(ui$1.Button,{size:"sm",variant:"flat",color:"primary",onPress:a,isDisabled:i,children:u("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:u("perpDeposit.recipient")}),jsxRuntime.jsx(ui$1.Input,{id:"perp-deposit-recipient",type:"text",placeholder:u("perpDeposit.recipient.placeholder"),value:r,onValueChange:s,isDisabled:i,isInvalid:!!p,errorMessage:p,autoComplete:"off",spellCheck:"false"})]})]})}var Rs="#C7FF2E";function nr({isOpen:e,phase:t,status:r,solanaExplorerUrl:s,hyperliquidExplorerUrl:n,onRetry:i,onClose:o,errorMessage:p}){let{t:a}=i18n.useTranslation(),l=Ko(t),u=t==="failed"?p||(r?.lastError?.message?a("perpDeposit.status.failed",{message:r.lastError.message}):a("perpDeposit.status.failed",{message:""})):t==="succeeded"?a("perpDeposit.status.settled"):t==="refunded"?a("perpDeposit.status.refunded"):r?.status==="broadcasted"?a("perpDeposit.status.broadcasted"):r?.status==="relay_waiting"?a("perpDeposit.status.relay_waiting"):r?.status==="relay_pending"?a("perpDeposit.status.relay_pending"):r?.status==="stuck"?a("perpDeposit.status.stuck"):a("perpDeposit.status.broadcasted"),d=t==="failed"&&!!i;return jsxRuntime.jsx(ui$1.StyledModal,{isOpen:e,onOpenChange:m=>!m&&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$1.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:a("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":a("perpDeposit.status.close"),children:jsxRuntime.jsx(ui$1.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(Wo,{variant:l}),jsxRuntime.jsx("p",{className:ui$1.cn("text-sm leading-relaxed max-w-[320px]",Go(l)),children:u})]}),(r?.solanaTxHash||r?.hyperliquidTxHash)&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col gap-2",children:[r?.solanaTxHash&&s&&jsxRuntime.jsx(Os,{href:s,label:a("perpDeposit.status.viewSolanaTx"),hash:r.solanaTxHash}),r?.hyperliquidTxHash&&n&&jsxRuntime.jsx(Os,{href:n,label:a("perpDeposit.status.viewHyperliquidTx"),hash:r.hyperliquidTxHash})]})]}),jsxRuntime.jsxs("div",{className:ui$1.cn("px-5 pb-5 pt-2 flex gap-2",d?"justify-between":"justify-end"),children:[d&&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:a("perpDeposit.status.tryAgain")}),jsxRuntime.jsx("button",{type:"button",onClick:o,className:ui$1.cn("cursor-pointer h-10 rounded-[10px] font-medium transition-colors flex items-center justify-center",d?"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:a("perpDeposit.status.close")})]})]})})})}function Os({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:[er(r,6,4),jsxRuntime.jsx(Jo,{})]})]})}function Wo({variant:e}){return e==="progress"?jsxRuntime.jsx("div",{className:"relative w-14 h-14 flex items-center justify-center",children:jsxRuntime.jsx($o,{})}):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(Vo,{className:"w-8 h-8",style:{color:Rs}})}):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(jo,{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(Yo,{className:"w-8 h-8 text-rose-400"})})}function $o(){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:Rs,strokeWidth:"4",strokeLinecap:"round",strokeDasharray:"90 60"})]}),jsxRuntime.jsx("style",{children:`
12
14
  .lfi-perp-deposit-spinner {
13
15
  animation: lfi-perp-deposit-spin 0.9s linear infinite;
14
16
  transform-origin: center;
@@ -16,5 +18,5 @@
16
18
  @keyframes lfi-perp-deposit-spin {
17
19
  to { transform: rotate(360deg); }
18
20
  }
19
- `})]})}function ko(t){switch(t){case "succeeded":return "success";case "refunded":return "warning";case "failed":return "error";default:return "progress"}}function wo(t){switch(t){case "success":return "text-white";case "warning":return "text-amber-200";case "error":return "text-rose-300";default:return "text-zinc-200"}}function Oo(t){return jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:t.className,style:t.style,children:jsxRuntime.jsx("path",{d:"M20 6L9 17l-5-5"})})}function Ro(t){return jsxRuntime.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:t.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 Eo(t){return jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:t.className,children:[jsxRuntime.jsx("circle",{cx:"12",cy:"12",r:"10"}),jsxRuntime.jsx("path",{d:"M15 9l-6 6M9 9l6 6"})]})}function No(){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 qo({userSolanaAddress:t,userId:e,source:r,campaign:s,defaultRecipient:n,signAndBroadcast:i,balanceSol:o,onMaxClick:p,validateRecipient:a,buildSolanaExplorerUrl:l,buildHyperliquidExplorerUrl:u,onSettled:d,onError:m,className:f}){let{t:c}=i18n.useTranslation(),[g,E]=react.useState(""),[h,x]=react.useState(n??""),v=react.useMemo(()=>{if(g&&(!/^\d+(\.\d+)?$/.test(g.trim())||Number(g)<=0))return c("perpDeposit.error.amountInvalid")},[g,c]),O=react.useMemo(()=>{if(h)return a?a(h):void 0},[h,a]),R=react.useMemo(()=>v?"":Xt(g),[g,v]),B=react.useMemo(()=>!R||R==="0"||O||!h?null:{userSolanaAddress:t,hyperliquidRecipient:h,grossLamports:R,source:r},[R,h,O,r,t]),F=ct(B,{enabled:!!B}),{state:y,execute:N,reset:T,dispatch:q}=dt(i),le=y.phase==="submitted"||y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"?y.intentId:void 0,ee=mt(le,{enabled:!!le&&y.phase!=="succeeded"&&y.phase!=="refunded"&&y.phase!=="failed"});react.useEffect(()=>{ee.data&&q({type:"STATUS_UPDATE",status:ee.data});},[ee.data,q]),react.useEffect(()=>{y.phase==="succeeded"?d?.(y.intentId):y.phase==="failed"&&m?.(y.intentId,y.error.message);},[y,d,m]);let te=react.useCallback(()=>{F.data&&(q({type:"QUOTE_REQUEST"}),q({type:"QUOTE_RECEIVED",quote:F.data}));},[q,F.data]),ws=react.useCallback(async()=>{if(y.phase==="ready_to_sign")try{await N({quote:y.quote,userSolanaAddress:t,hyperliquidRecipient:h,userId:e,source:r,campaign:s});}catch{}},[y,N,t,h,e,r,s]),Os=react.useCallback(()=>{q({type:"QUOTE_EXPIRED"});},[q]),Rs=react.useCallback(async()=>{q({type:"RESET"}),await F.refetch();},[q,F]),Es=y.phase==="ready_to_sign"||y.phase==="signing"||y.phase==="broadcasting"||y.phase==="expired",Ns=y.phase==="submitted"||y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"&&!!y.intentId,xe=y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"?y.status:void 0,Is=!F.data||F.isFetching||!!v||!!O||!B;return jsxRuntime.jsxs(ui$1.Card,{className:f,children:[jsxRuntime.jsxs(ui$1.CardBody,{className:"flex flex-col gap-4 p-6",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"text-lg font-semibold",children:c("perpDeposit.title")}),jsxRuntime.jsx("p",{className:"text-default-500 text-sm",children:c("perpDeposit.description")})]}),jsxRuntime.jsx(tr,{amount:g,onAmountChange:E,recipient:h,onRecipientChange:x,balanceSol:o,onMax:p,amountError:v,recipientError:O,disabled:y.phase!=="idle"&&y.phase!=="expired"&&y.phase!=="failed"}),jsxRuntime.jsx(ui$1.Button,{color:"primary",isDisabled:Is,isLoading:F.isFetching,onPress:te,children:F.isFetching?c("perpDeposit.gettingQuote"):c("perpDeposit.confirmQuote")}),F.error&&jsxRuntime.jsx("div",{className:"text-danger text-xs",children:c("perpDeposit.error.quoteFailed")})]}),jsxRuntime.jsx(er,{isOpen:Es,quote:y.phase==="ready_to_sign"||y.phase==="signing"||y.phase==="broadcasting"||y.phase==="expired"?y.quote:void 0,isExecuting:y.phase==="signing"||y.phase==="broadcasting",isExpired:y.phase==="expired",onConfirm:ws,onCancel:T,onExpire:Os}),jsxRuntime.jsx(sr,{isOpen:Ns,phase:y.phase,status:xe,solanaExplorerUrl:xe?.solanaTxHash&&l?l(xe.solanaTxHash):void 0,hyperliquidExplorerUrl:xe?.hyperliquidTxHash&&u?u(xe.hyperliquidTxHash):void 0,onRetry:y.phase==="failed"?Rs:void 0,onClose:T,errorMessage:y.phase==="failed"?y.error.message:void 0})]})}function ar({state:t,onContinue:e,onRetryStep:r,onReload:s,onDismiss:n,className:i}){let{t:o}=i18n.useTranslation(),p=t.phase,a=p==="executing",l=p==="loading",u=p==="error"&&t.steps.length===0;return jsxRuntime.jsxs(ui$1.Card,{className:ui$1.cn("w-full max-w-md",i),children:[jsxRuntime.jsxs(ui$1.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$1.CardBody,{className:"gap-3",children:[l&&jsxRuntime.jsx(zo,{}),u&&jsxRuntime.jsx("p",{className:"text-danger text-sm",children:o("perpDeposit.setup.loadFailed",{message:t.error??""})}),!l&&!u&&t.steps.map((d,m)=>jsxRuntime.jsx(Ho,{rec:d,index:m,isCurrent:t.currentIndex===m,onRetry:r},`${d.step.id}-${m}`)),p==="done"&&jsxRuntime.jsx("p",{className:"text-success text-sm",children:o("perpDeposit.setup.alreadyActive")})]}),jsxRuntime.jsxs(ui$1.CardFooter,{className:"flex justify-between gap-2",children:[n&&jsxRuntime.jsx(ui$1.Button,{variant:"light",onPress:n,isDisabled:a,children:o(p==="done"?"perpDeposit.setup.dismiss":"perpDeposit.setup.skip")}),jsxRuntime.jsx("div",{className:"flex-1"}),u&&s&&jsxRuntime.jsx(ui$1.Button,{color:"primary",onPress:s,children:o("perpDeposit.setup.retry")}),!u&&p!=="done"&&jsxRuntime.jsx(ui$1.Button,{color:"primary",onPress:e,isLoading:a,isDisabled:a||l,children:t.steps.some(d=>d.status==="done")?o("perpDeposit.setup.continue"):o("perpDeposit.setup.cta")})]})]})}function Ho({rec:t,index:e,isCurrent:r,onRetry:s}){let{t:n}=i18n.useTranslation(),i=Ko(t.step.id,()=>{switch(t.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(t.step.id){case "approveBuilderFee":{let a=(t.step.params.maxFeeRate/10).toFixed(1);return n("perpDeposit.setup.builderFee.description",{bps:a})}case "setReferrer":return n("perpDeposit.setup.referrer.description",{code:t.step.params.code});case "updateLeverage":return n("perpDeposit.setup.leverage.description")}})(),p=(()=>{switch(t.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$1.cn("border-divider flex items-start justify-between gap-3 rounded-md border p-3",t.status==="error"&&"border-danger",t.status==="done"&&"border-success/40 bg-success/5",t.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(Wo,{status:t.status,isCurrent:r}),jsxRuntime.jsx("span",{children:i})]}),jsxRuntime.jsx("p",{className:"text-foreground-500 mt-1 text-xs",children:o}),t.status==="error"&&t.error&&jsxRuntime.jsx("p",{className:"text-danger mt-1 text-xs",children:t.error})]}),jsxRuntime.jsxs("div",{className:"flex flex-col items-end gap-1 text-xs",children:[jsxRuntime.jsx("span",{className:ui$1.cn($o(t.status)),children:p}),t.status==="error"&&s&&jsxRuntime.jsx(ui$1.Button,{size:"sm",variant:"flat",color:"danger",onPress:()=>s(e),children:n("perpDeposit.setup.retry")})]})]})}function zo(){let{t}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center gap-2 py-2 text-sm",children:[jsxRuntime.jsx(ui$1.Spinner,{size:"sm"}),jsxRuntime.jsx("span",{children:t("perpDeposit.setup.loading")})]})}function Wo({status:t,isCurrent:e}){return t==="running"||e?jsxRuntime.jsx(ui$1.Spinner,{size:"sm"}):t==="done"||t==="skipped"?jsxRuntime.jsx("span",{"aria-hidden":true,className:"text-success",children:"\u2713"}):t==="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 $o(t){switch(t){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 Ko(t,e){return e()}function Go({adapter:t,userAddress:e,steps:r,autoLoad:s,onComplete:n,onError:i,onDismiss:o,className:p}){let{state:a,runNext:l,runStep:u,reload:d}=Le({adapter:t,userAddress:e,steps:r,autoLoad:s,onComplete:n,onError:i}),m=react.useCallback(()=>{l();},[l]),f=react.useCallback(g=>{u(g);},[u]),c=react.useCallback(()=>{d();},[d]);return jsxRuntime.jsx(ar,{state:a,onContinue:m,onRetryStep:f,onReload:c,onDismiss:o,className:p})}exports.CoinInfoNotFoundUI=ft;exports.CoinInfoSkeletonsUI=yt;exports.CoinInfoUI=xt;exports.CoinInfoWidget=On;exports.DEFAULT_ORDER_BOOK_PRECISION_OPTIONS=ns;exports.DepositConfirmUI=er;exports.DepositFlowWidget=qo;exports.DepositFormUI=tr;exports.DepositStatusUI=sr;exports.HL_USDC_DECIMALS=no;exports.HyperliquidApiError=re;exports.HyperliquidInitUI=ar;exports.HyperliquidInitWidget=Go;exports.HyperliquidPerpetualsClient=Ye;exports.LiberFiApiError=z;exports.LiberFiHttpTransport=se;exports.LiberFiPerpDepositClient=Xe;exports.LiberFiPerpetualsClient=Je;exports.OpenOrdersEmpty=$t;exports.OpenOrdersSkeleton=Wt;exports.OpenOrdersUI=zt;exports.OpenOrdersWidget=ji;exports.OrderBookUI=wt;exports.OrderBookWidget=ti;exports.PerpetualsContext=J;exports.PerpetualsProvider=Ks;exports.PlaceOrderFormUI=Mt;exports.PlaceOrderFormWidget=Fi;exports.PositionsEmpty=Hi;exports.PositionsSkeleton=_t;exports.PositionsUI=Bt;exports.PositionsWidget=zi;exports.SearchCoinsUI=vt;exports.SearchCoinsWidget=Un;exports.TERMINAL_DEPOSIT_STATUSES=Se;exports.TradeHistoryEmpty=Jt;exports.TradeHistorySkeleton=Yt;exports.TradeHistoryUI=jt;exports.TradeHistoryWidget=ro;exports.TradesUI=Ut;exports.TradesWidget=wi;exports.aggregationFromStep=Yr;exports.cancelOrder=Rr;exports.classifyStep=Fe;exports.coinsQueryKey=ur;exports.createOrder=Or;exports.currentDepositBreakdown=Hs;exports.currentDepositStatus=Qs;exports.fetchCoins=cr;exports.fetchKlines=br;exports.fetchMarket=mr;exports.fetchMarkets=gr;exports.fetchOrderBook=xr;exports.fetchOrders=Dr;exports.fetchPerpDepositQuote=Ir;exports.fetchPerpDepositStatus=Mr;exports.fetchPositions=Cr;exports.fetchRecentTrades=Pr;exports.fetchTrades=wr;exports.hlUsdcRawToUsdc=$e;exports.initialDepositState=Ue;exports.initialSetupState=De;exports.isDepositPolling=_s;exports.isDepositTerminal=Bs;exports.isTerminalDepositLifecycle=zs;exports.klinesQueryKey=yr;exports.lamportsToSol=Re;exports.marketQueryKey=dr;exports.marketsQueryKey=fr;exports.microUsdcToUsdc=oo;exports.nextRunnableStep=Me;exports.orderBookQueryKey=hr;exports.ordersQueryKey=Tr;exports.perpDepositQuoteQueryKey=Nr;exports.perpDepositStatusQueryKey=Ar;exports.positionsQueryKey=vr;exports.recentTradesQueryKey=Sr;exports.reduceDepositState=Ze;exports.reduceSetupState=Ae;exports.secondsUntil=Ee;exports.shortAddress=Zt;exports.solToLamports=Xt;exports.tradesQueryKey=kr;exports.useCancelOrderMutation=ot;exports.useCandlesSubscription=dn;exports.useCoinInfo=ht;exports.useCoinsQuery=et;exports.useCreateOrderMutation=Ce;exports.useHyperliquidSetup=Le;exports.useKlinesQuery=Zs;exports.useMarketDataSubscription=ne;exports.useMarketQuery=Pe;exports.useMarketsQuery=tt;exports.useOpenOrdersScript=Qt;exports.useOrderBookQuery=rt;exports.useOrderBookScript=Tt;exports.useOrdersQuery=nt;exports.usePerpDepositClient=gn;exports.usePerpDepositClientMaybe=ie;exports.usePerpDepositExecute=dt;exports.usePerpDepositQuote=ct;exports.usePerpDepositStatus=mt;exports.usePerpetualsClient=D;exports.usePlaceOrderFormScript=At;exports.usePositionsQuery=ve;exports.usePositionsScript=qt;exports.useRecentTradesQuery=st;exports.useSearchCoinsScript=Pt;exports.useTradeHistoryScript=Gt;exports.useTradesQuery=it;exports.useTradesScript=Et;exports.useUserDataSubscription=Te;exports.version=Us;//# sourceMappingURL=index.js.map
21
+ `})]})}function Ko(e){switch(e){case "succeeded":return "success";case "refunded":return "warning";case "failed":return "error";default:return "progress"}}function Go(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 Vo(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 jo(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 Yo(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 Jo(){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 sa({userSolanaAddress:e,userId:t,source:r,campaign:s,defaultRecipient:n,signAndBroadcast:i,balanceSol:o,onMaxClick:p,validateRecipient:a,buildSolanaExplorerUrl:l,buildHyperliquidExplorerUrl:u,onSettled:d,onError:m,className:f}){let{t:c}=i18n.useTranslation(),[g,E]=react.useState(""),[h,x]=react.useState(n??""),v=react.useMemo(()=>{if(g&&(!/^\d+(\.\d+)?$/.test(g.trim())||Number(g)<=0))return c("perpDeposit.error.amountInvalid")},[g,c]),O=react.useMemo(()=>{if(h)return a?a(h):void 0},[h,a]),R=react.useMemo(()=>v?"":Zt(g),[g,v]),B=react.useMemo(()=>!R||R==="0"||O||!h?null:{userSolanaAddress:e,hyperliquidRecipient:h,grossLamports:R,source:r},[R,h,O,r,e]),A=mt(B,{enabled:!!B}),{state:y,execute:N,reset:T,dispatch:q}=ft(i),ue=y.phase==="submitted"||y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"?y.intentId:void 0,ee=gt(ue,{enabled:!!ue&&y.phase!=="succeeded"&&y.phase!=="refunded"&&y.phase!=="failed"});react.useEffect(()=>{ee.data&&q({type:"STATUS_UPDATE",status:ee.data});},[ee.data,q]),react.useEffect(()=>{y.phase==="succeeded"?d?.(y.intentId):y.phase==="failed"&&m?.(y.intentId,y.error.message);},[y,d,m]);let te=react.useCallback(()=>{A.data&&(q({type:"QUOTE_REQUEST"}),q({type:"QUOTE_RECEIVED",quote:A.data}));},[q,A.data]),Us=react.useCallback(async()=>{if(y.phase==="ready_to_sign")try{await N({quote:y.quote,userSolanaAddress:e,hyperliquidRecipient:h,userId:t,source:r,campaign:s});}catch{}},[y,N,e,h,t,r,s]),Fs=react.useCallback(()=>{q({type:"QUOTE_EXPIRED"});},[q]),As=react.useCallback(async()=>{q({type:"RESET"}),await A.refetch();},[q,A]),Ls=y.phase==="ready_to_sign"||y.phase==="signing"||y.phase==="broadcasting"||y.phase==="expired",Ms=y.phase==="submitted"||y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"&&!!y.intentId,Se=y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"?y.status:void 0,qs=!A.data||A.isFetching||!!v||!!O||!B;return jsxRuntime.jsxs(ui$1.Card,{className:f,children:[jsxRuntime.jsxs(ui$1.CardBody,{className:"flex flex-col gap-4 p-6",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"text-lg font-semibold",children:c("perpDeposit.title")}),jsxRuntime.jsx("p",{className:"text-default-500 text-sm",children:c("perpDeposit.description")})]}),jsxRuntime.jsx(rr,{amount:g,onAmountChange:E,recipient:h,onRecipientChange:x,balanceSol:o,onMax:p,amountError:v,recipientError:O,disabled:y.phase!=="idle"&&y.phase!=="expired"&&y.phase!=="failed"}),jsxRuntime.jsx(ui$1.Button,{color:"primary",isDisabled:qs,isLoading:A.isFetching,onPress:te,children:A.isFetching?c("perpDeposit.gettingQuote"):c("perpDeposit.confirmQuote")}),A.error&&jsxRuntime.jsx("div",{className:"text-danger text-xs",children:c("perpDeposit.error.quoteFailed")})]}),jsxRuntime.jsx(tr,{isOpen:Ls,quote:y.phase==="ready_to_sign"||y.phase==="signing"||y.phase==="broadcasting"||y.phase==="expired"?y.quote:void 0,isExecuting:y.phase==="signing"||y.phase==="broadcasting",isExpired:y.phase==="expired",onConfirm:Us,onCancel:T,onExpire:Fs}),jsxRuntime.jsx(nr,{isOpen:Ms,phase:y.phase,status:Se,solanaExplorerUrl:Se?.solanaTxHash&&l?l(Se.solanaTxHash):void 0,hyperliquidExplorerUrl:Se?.hyperliquidTxHash&&u?u(Se.hyperliquidTxHash):void 0,onRetry:y.phase==="failed"?As:void 0,onClose:T,errorMessage:y.phase==="failed"?y.error.message:void 0})]})}function pr({state:e,onContinue:t,onRetryStep:r,onReload:s,onDismiss:n,className:i}){let{t:o}=i18n.useTranslation(),p=e.phase,a=p==="executing",l=p==="loading",u=p==="error"&&e.steps.length===0;return jsxRuntime.jsxs(ui$1.Card,{className:ui$1.cn("w-full max-w-md",i),children:[jsxRuntime.jsxs(ui$1.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$1.CardBody,{className:"gap-3",children:[l&&jsxRuntime.jsx(la,{}),u&&jsxRuntime.jsx("p",{className:"text-danger text-sm",children:o("perpDeposit.setup.loadFailed",{message:e.error??""})}),!l&&!u&&e.steps.map((d,m)=>jsxRuntime.jsx(pa,{rec:d,index:m,isCurrent:e.currentIndex===m,onRetry:r},`${d.step.id}-${m}`)),p==="done"&&jsxRuntime.jsx("p",{className:"text-success text-sm",children:o("perpDeposit.setup.alreadyActive")})]}),jsxRuntime.jsxs(ui$1.CardFooter,{className:"flex justify-between gap-2",children:[n&&jsxRuntime.jsx(ui$1.Button,{variant:"light",onPress:n,isDisabled:a,children:o(p==="done"?"perpDeposit.setup.dismiss":"perpDeposit.setup.skip")}),jsxRuntime.jsx("div",{className:"flex-1"}),u&&s&&jsxRuntime.jsx(ui$1.Button,{color:"primary",onPress:s,children:o("perpDeposit.setup.retry")}),!u&&p!=="done"&&jsxRuntime.jsx(ui$1.Button,{color:"primary",onPress:t,isLoading:a,isDisabled:a||l,children:e.steps.some(d=>d.status==="done")?o("perpDeposit.setup.continue"):o("perpDeposit.setup.cta")})]})]})}function pa({rec:e,index:t,isCurrent:r,onRetry:s}){let{t:n}=i18n.useTranslation(),i=da(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 a=(e.step.params.maxFeeRate/10).toFixed(1);return n("perpDeposit.setup.builderFee.description",{bps:a})}case "setReferrer":return n("perpDeposit.setup.referrer.description",{code:e.step.params.code});case "updateLeverage":return n("perpDeposit.setup.leverage.description")}})(),p=(()=>{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$1.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(ua,{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$1.cn(ca(e.status)),children:p}),e.status==="error"&&s&&jsxRuntime.jsx(ui$1.Button,{size:"sm",variant:"flat",color:"danger",onPress:()=>s(t),children:n("perpDeposit.setup.retry")})]})]})}function la(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center gap-2 py-2 text-sm",children:[jsxRuntime.jsx(ui$1.Spinner,{size:"sm"}),jsxRuntime.jsx("span",{children:e("perpDeposit.setup.loading")})]})}function ua({status:e,isCurrent:t}){return e==="running"||t?jsxRuntime.jsx(ui$1.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 ca(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 da(e,t){return t()}function ma({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:i,onDismiss:o,className:p}){let{state:a,runNext:l,runStep:u,reload:d}=_e({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:i}),m=react.useCallback(()=>{l();},[l]),f=react.useCallback(g=>{u(g);},[u]),c=react.useCallback(()=>{d();},[d]);return jsxRuntime.jsx(pr,{state:a,onContinue:m,onRetryStep:f,onReload:c,onDismiss:o,className:p})}exports.CoinInfoNotFoundUI=yt;exports.CoinInfoSkeletonsUI=ht;exports.CoinInfoUI=Pt;exports.CoinInfoWidget=qn;exports.DEFAULT_ORDER_BOOK_PRECISION_OPTIONS=as;exports.DepositConfirmUI=tr;exports.DepositFlowWidget=sa;exports.DepositFormUI=rr;exports.DepositStatusUI=nr;exports.HL_USDC_DECIMALS=Do;exports.HyperliquidApiError=re;exports.HyperliquidInitUI=pr;exports.HyperliquidInitWidget=ma;exports.HyperliquidPerpetualsClient=Xe;exports.LiberFiApiError=z;exports.LiberFiHttpTransport=se;exports.LiberFiPerpDepositClient=et;exports.LiberFiPerpetualsClient=Ze;exports.OpenOrdersEmpty=Kt;exports.OpenOrdersSkeleton=$t;exports.OpenOrdersUI=Wt;exports.OpenOrdersWidget=yo;exports.OrderBookUI=Rt;exports.OrderBookWidget=gi;exports.PerpetualsContext=J;exports.PerpetualsProvider=Xs;exports.PlaceOrderFormUI=Mt;exports.PlaceOrderFormWidget=eo;exports.PositionsEmpty=po;exports.PositionsSkeleton=Ht;exports.PositionsUI=Bt;exports.PositionsWidget=lo;exports.SearchCoinsUI=Tt;exports.SearchCoinsWidget=zn;exports.TERMINAL_DEPOSIT_STATUSES=Pe;exports.TradeHistoryEmpty=Xt;exports.TradeHistorySkeleton=Jt;exports.TradeHistoryUI=Yt;exports.TradeHistoryWidget=Co;exports.TradesUI=At;exports.TradesWidget=Ki;exports.aggregationFromStep=Xr;exports.cancelOrder=Er;exports.classifyStep=Ae;exports.coinsQueryKey=cr;exports.createOrder=Rr;exports.currentDepositBreakdown=Vs;exports.currentDepositStatus=Gs;exports.fetchCoins=dr;exports.fetchKlines=hr;exports.fetchMarket=fr;exports.fetchMarkets=yr;exports.fetchOrderBook=Sr;exports.fetchOrders=kr;exports.fetchPerpDepositQuote=Ur;exports.fetchPerpDepositStatus=Mr;exports.fetchPositions=Tr;exports.fetchRecentTrades=vr;exports.fetchTrades=Or;exports.hlUsdcRawToUsdc=Ge;exports.initialDepositState=Fe;exports.initialSetupState=ke;exports.isDepositPolling=Ks;exports.isDepositTerminal=$s;exports.isTerminalDepositLifecycle=js;exports.klinesQueryKey=br;exports.lamportsToSol=Ee;exports.marketQueryKey=mr;exports.marketsQueryKey=gr;exports.microUsdcToUsdc=wo;exports.nextRunnableStep=Me;exports.orderBookQueryKey=xr;exports.ordersQueryKey=Dr;exports.perpDepositQuoteQueryKey=Ir;exports.perpDepositStatusQueryKey=Lr;exports.positionsQueryKey=Cr;exports.recentTradesQueryKey=Pr;exports.reduceDepositState=tt;exports.reduceSetupState=Le;exports.secondsUntil=Ne;exports.shortAddress=er;exports.solToLamports=Zt;exports.tradesQueryKey=wr;exports.useCancelOrderMutation=pt;exports.useCandlesSubscription=hn;exports.useCoinInfo=St;exports.useCoinsQuery=rt;exports.useCreateOrderMutation=Te;exports.useHyperliquidSetup=_e;exports.useKlinesQuery=on;exports.useMarketDataSubscription=ne;exports.useMarketQuery=ve;exports.useMarketsQuery=st;exports.useOpenOrdersScript=Qt;exports.useOrderBookQuery=nt;exports.useOrderBookScript=kt;exports.useOrdersQuery=ot;exports.usePerpDepositClient=Pn;exports.usePerpDepositClientMaybe=ie;exports.usePerpDepositExecute=ft;exports.usePerpDepositQuote=mt;exports.usePerpDepositStatus=gt;exports.usePerpetualsClient=D;exports.usePlaceOrderFormScript=Lt;exports.usePositionsQuery=Ce;exports.usePositionsScript=qt;exports.useRecentTradesQuery=it;exports.useSearchCoinsScript=Ct;exports.useTradeHistoryScript=Vt;exports.useTradesQuery=at;exports.useTradesScript=It;exports.useUserDataSubscription=De;exports.version=_s;//# sourceMappingURL=index.js.map
20
22
  //# sourceMappingURL=index.js.map