@liberfi.io/ui-perpetuals 1.1.76 → 1.1.78

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,6 +1,6 @@
1
1
  'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime'),reactQuery=require('@tanstack/react-query'),i18n=require('@liberfi.io/i18n'),utils=require('@liberfi.io/utils'),ui$1=require('@liberfi.io/ui'),reactWindow=require('react-window'),hooks=require('@liberfi.io/hooks'),reactHookForm=require('react-hook-form'),walletConnector=require('@liberfi.io/wallet-connector');var ai=new Set(["userFills","userFillsByTime","userFunding","userNonFundingLedgerUpdates","frontendOpenOrders","userRateLimit","historicalOrders","userTwapSliceFills","predictedFundings"]);function Hr(e){return e&&ai.has(e)?20:2}var nn=1,mt=class{capacity;windowMs;tokens;lastRefill;constructor(t={}){this.capacity=t.capacity??1200,this.windowMs=t.windowMs??6e4,this.tokens=this.capacity,this.lastRefill=Date.now();}reset(){this.tokens=this.capacity,this.lastRefill=Date.now();}async waitForToken(t){let r=Math.max(1,Math.floor(t));for(;;){if(this.refill(),this.tokens>=r){this.tokens-=r;return}let s=Math.max(25,this.windowMs-(Date.now()-this.lastRefill));await new Promise(n=>setTimeout(n,s));}}refill(){let t=Date.now();t-this.lastRefill>=this.windowMs&&(this.tokens=this.capacity,this.lastRefill=t);}};function oe(e){return e!==null&&typeof e=="object"?e:{}}function z(e,t="0"){return parseFloat(String(typeof e=="number"?e:e??t))}function li(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 Ze=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=o=>{s||(s=true,this.connectPromise=null,o());};try{let o=new WebSocket(this.wsEndpoint);this.ws=o,o.onopen=()=>{this.ws===o&&(console.warn("[WebSocket] Connected to Hyperliquid"),this.isConnected=!0,this.reconnectAttempts=0,this.isReconnecting=!1,this.startHeartbeat(),this.flushMessageQueue(),n(t));},o.onmessage=i=>{this.ws===o&&this.handleMessage(i.data);},o.onerror=i=>{this.ws===o&&(console.error("[WebSocket] Error:",i),this.isConnected=!1,n(()=>r(new Error("WebSocket connection failed"))));},o.onclose=i=>{this.ws===o&&(console.warn(`[WebSocket] Closed: ${i.code} - ${i.reason||"No reason provided"}`),this.isConnected=!1,this.stopHeartbeat(),this.connectPromise=null,s||n(()=>r(new Error(`WebSocket closed before connection was established: ${i.code}`))),!this.manuallyDisconnected&&i.code!==1e3&&this.attemptReconnect());};}catch(o){n(()=>r(o));}}),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.warn(`[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=oe(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=oe(t),s=r.channel;this.subscriptions.forEach((n,o)=>{if(this.isChannelMatch(s,n.type,n.param,r))try{let i=this.transformData(n.type,r.data,n.param);n.callback(i);}catch(i){console.error(`[WebSocket] Error in subscription callback (${o}):`,i);}});}isChannelMatch(t,r,s,n){let o=oe(n).data;if(r==="ticker"){if(t!=="activeAssetCtx")return false;let i=s.split("-")[0],a=oe(o).coin;return typeof a=="string"&&a===i}else if(r==="trades"){if(t!=="trades")return false;let i=s.split("-")[0],a=Array.isArray(o)?oe(o[0]).coin:void 0;return typeof a!="string"||a===i}else if(r==="orderBook"){if(t!=="l2Book")return false;let i=s.split("-")[0],a=oe(o).coin;return typeof a=="string"&&a===i}else {if(r==="candle")return t==="candle";if(r==="userFills")return t==="userFills";if(r==="userEvents")return t==="userEvents";if(r==="accountState")return t==="webData2"}return false}transformData(t,r,s){return t==="ticker"?this.transformTickerData(r,s):t==="trades"?this.transformTradesData(r,s):t==="orderBook"?this.transformOrderBookData(r,s):t==="candle"?this.transformCandleData(r,s):t==="userFills"?this.transformUserFillsData(r):t==="userEvents"?this.transformUserEventsData(r):r}transformTickerData(t,r){let s=oe(t),o=`${typeof s.coin=="string"?s.coin:r.split("-")[0]}-USDC`,i=oe(s.ctx),a=z(i.midPx??i.markPx),l=z(i.markPx??i.midPx),u=i.prevDayPx?z(i.prevDayPx):a,c=u>0?(a-u)/u*100:0;return {symbol:o,price:a,change24h:c,volume24h:z(i.dayNtlVlm),fundingRate:z(i.funding),openInterest:z(i.openInterest),markPrice:l,indexPrice:z(i.oraclePx??i.midPx)}}transformTradesData(t,r){return Array.isArray(t)?t.map(s=>{let n=oe(s);return {symbol:r,side:n.side==="B"?"buy":"sell",price:z(n.px),quantity:z(n.sz),timestamp:n.time,tradeId:n.tid}}):[]}transformOrderBookData(t,r){let s=oe(t),n=Array.isArray(s.levels)?s.levels:[[],[]],o=Array.isArray(n[0])?n[0]:[],i=Array.isArray(n[1])?n[1]:[],a=l=>{let u=oe(l);return {price:z(u.px),quantity:z(u.sz),count:u.n}};return {symbol:r,bids:o.map(a),asks:i.map(a),timestamp:typeof s.time=="number"?s.time:Date.now()}}transformCandleData(t,r){let[s]=r.split(":"),n=oe(t);return {symbol:s,open:z(n.o),high:z(n.h),low:z(n.l),close:z(n.c),volume:z(n.v),timestamp:z(n.t),closeTimestamp:z(n.T)}}transformUserFillsData(t){return Array.isArray(t)?t.map(r=>{let s=oe(r);return {tradeId:s.tid!=null?String(s.tid):void 0,orderId:s.oid!=null?String(s.oid):void 0,symbol:`${String(s.coin??"")}-USDC`,side:typeof s.dir=="string"&&s.dir.includes("Long")?"long":"short",price:z(s.px),quantity:z(s.sz),fee:z(s.fee),feeCurrency:typeof s.feeToken=="string"?s.feeToken:"USDC",isMaker:s.side==="M",timestamp:s.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 i={type:"l2Book",coin:r.split("-")[0]};s?.nSigFigs!==void 0&&(i.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(i.mantissa=s.mantissa)),n={method:"subscribe",subscription:i};}else if(t==="candle"){let[o,i]=r.split(":");n={method:"subscribe",subscription:{type:"candle",coin:o.split("-")[0],interval:i}};}else t==="userFills"?n={method:"subscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"?n={method:"subscribe",subscription:{type:"userEvents",user:r}}:t==="accountState"&&(n={method:"subscribe",subscription:{type:"webData2",user:r}});n&&this.send(n);}sendUnsubscription(t,r,s){let n;if(t==="ticker")n={method:"unsubscribe",subscription:{type:"activeAssetCtx",coin:r.split("-")[0]}};else if(t==="trades")n={method:"unsubscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook"){let i={type:"l2Book",coin:r.split("-")[0]};s?.nSigFigs!==void 0&&(i.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(i.mantissa=s.mantissa)),n={method:"unsubscribe",subscription:i};}else if(t==="candle"){let[o,i]=r.split(":");n={method:"unsubscribe",subscription:{type:"candle",coin:o.split("-")[0],interval:i}};}else t==="userFills"?n={method:"unsubscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"?n={method:"unsubscribe",subscription:{type:"userEvents",user:r}}:t==="accountState"&&(n={method:"unsubscribe",subscription:{type:"webData2",user:r}});n&&this.send(n);}subscribe(t,r,s,n){let o=li(t,r,n);return this.subscriptions.set(o,{type:t,param:r,callback:s,aggregation:n}),this.sendSubscription(t,r,n),o}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 on={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"}},ui=60*1e3,pi=1500,ci=1500,_r=class{apiEndpoint;_wsEndpoint;timeout;environment;wsManager=null;wsRefCount=0;assetMetaCache=null;assetMetaPending=null;universeSnapshotCache=null;universeSnapshotPending=null;userStateCache=new Map;userStatePending=new Map;rateLimiter;constructor(t={}){this.environment=t.environment||"testnet",this.apiEndpoint=t.apiEndpoint||on[this.environment].api,this._wsEndpoint=t.wsEndpoint||on[this.environment].ws,this.timeout=t.timeout||3e4,t.rateLimit===false?this.rateLimiter=null:t.rateLimit instanceof mt?this.rateLimiter=t.rateLimit:this.rateLimiter=new mt(t.rateLimit);}weightFor(t,r){if(t.startsWith("/exchange"))return nn;if(t.startsWith("/info")){let s=r&&typeof r=="object"&&"type"in r&&typeof r.type=="string"?r.type:void 0;return Hr(s)}return Hr(void 0)}async request(t,r){let s=`${this.apiEndpoint}${t}`;this.rateLimiter&&await this.rateLimiter.waitForToken(this.weightFor(t,r));try{let n=new AbortController,o=setTimeout(()=>n.abort(),this.timeout),i=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r),signal:n.signal});if(clearTimeout(o),!i.ok)throw new Te(`HTTP ${i.status}: ${i.statusText}`,i.status,await i.text());return await i.json()}catch(n){throw n instanceof Error&&n.name==="AbortError"?new Te(`Request timeout after ${this.timeout}ms`,408,""):n instanceof Te?n:new Te(`Network error: ${n instanceof Error?n.message:String(n)}`,0,"")}}symbolToCoin(t){return t.split("-")[0]}parseInterval(t){return {"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"1d":864e5,"1w":6048e5}[t]}async getSupportedCoins(){return (await this.getUniverseSnapshot()).assets.map(r=>r.symbol)}async getMarket(t){let r=await this.getMarkets([t]);return r.length>0?r[0]:null}async getMarkets(t){let r=await this.getUniverseSnapshot();if(t&&t.length>0){let s=new Set(t);return r.assets.map(n=>n.market).filter(n=>s.has(n.symbol))}return r.assets.map(s=>s.market)}async getUniverseSnapshot(){let t=Date.now();if(this.universeSnapshotCache&&t-this.universeSnapshotCache.fetchedAt<pi)return this.universeSnapshotCache.snapshot;if(this.universeSnapshotPending)return this.universeSnapshotPending;let r=this.fetchUniverseSnapshot();this.universeSnapshotPending=r;try{let s=await r;return this.universeSnapshotCache={fetchedAt:Date.now(),snapshot:s},s}finally{this.universeSnapshotPending=null;}}async fetchUniverseSnapshot(){let[t,r]=await this.request("/info",{type:"metaAndAssetCtxs"}),s=t.universe.map((o,i)=>{let a=r[i]??{},l=`${o.name}-USDC`,u=parseFloat(a.midPx||a.markPx||"0"),c=a.prevDayPx?parseFloat(a.prevDayPx):u,p=c>0?(u-c)/c*100:0,d={symbol:l,price:u,change24h:p,volume24h:parseFloat(a.dayNtlVlm||"0"),fundingRate:parseFloat(a.funding||"0"),openInterest:parseFloat(a.openInterest||"0"),markPrice:parseFloat(a.markPx||"0"),indexPrice:parseFloat(a.oraclePx||a.midPx||"0")},f=typeof o.szDecimals=="number"?{szDecimals:o.szDecimals,maxLeverage:o.maxLeverage}:null;return {coin:o.name,symbol:l,market:d,meta:f}}),n=new Map;for(let o of s)n.set(o.symbol,o);return {assets:s,bySymbol:n,fetchedAt:Date.now()}}async getUserStateSnapshot(t){let r=t.toLowerCase(),s=Date.now(),n=this.userStateCache.get(r);if(n&&s-n.fetchedAt<ci)return n.snapshot;let o=this.userStatePending.get(r);if(o)return o;let i=(async()=>{let[a,l]=await Promise.all([this.request("/info",{type:"clearinghouseState",user:t}),this.request("/info",{type:"frontendOpenOrders",user:t}).catch(()=>{})]);return {clearinghouse:a,openOrders:l,fetchedAt:Date.now()}})();this.userStatePending.set(r,i);try{let a=await i;return this.userStateCache.set(r,{fetchedAt:Date.now(),snapshot:a}),a}finally{this.userStatePending.delete(r);}}async getKlines(t,r,s=100){let n=this.symbolToCoin(t),o=typeof s=="number"?{limit:s}:s,i=this.parseInterval(r),a=o.limit,l,u;o.from!==void 0&&o.to!==void 0?(l=o.from,u=o.to):o.to!==void 0&&a?(u=o.to,l=u-i*a):o.from!==void 0&&a?(l=o.from,u=l+i*a):(u=Date.now(),l=u-i*(a??100));let p=(await this.request("/info",{type:"candleSnapshot",req:{coin:n,interval:r,startTime:l,endTime:u}})).map(d=>({symbol:t,open:parseFloat(d.o),high:parseFloat(d.h),low:parseFloat(d.l),close:parseFloat(d.c),volume:parseFloat(d.v),timestamp:d.t,closeTimestamp:d.T}));return a&&p.length>a&&(p=p.slice(p.length-a)),p}async getOrderBook(t,r=10,s){let o={type:"l2Book",coin:this.symbolToCoin(t)};s?.nSigFigs!==void 0&&(o.nSigFigs=s.nSigFigs,s.nSigFigs===5&&s.mantissa!==void 0&&s.mantissa!==1&&(o.mantissa=s.mantissa));let i=await this.request("/info",o),[a,l]=i.levels;return {symbol:t,bids:a.slice(0,r).map(u=>({price:parseFloat(u.px),quantity:parseFloat(u.sz),count:u.n})),asks:l.slice(0,r).map(u=>({price:parseFloat(u.px),quantity:parseFloat(u.sz),count:u.n})),timestamp:i.time}}async getRecentTrades(t,r=50){let s=this.symbolToCoin(t);return (await this.request("/info",{type:"recentTrades",coin:s})).slice(0,r).map(o=>({symbol:t,side:o.side==="B"?"buy":"sell",price:parseFloat(o.px),quantity:parseFloat(o.sz),timestamp:o.time,tradeId:o.tid}))}async placeOrder(t){throw new Error("placeOrder() requires wallet private key configuration for EIP-712 signature. Please configure authentication before calling this method. See: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint")}async cancelOrder(t){throw new Error("cancelOrder() requires wallet private key configuration for EIP-712 signature. Please configure authentication before calling this method. See: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint")}async getPositions(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let[r,s]=await Promise.all([this.getUserStateSnapshot(t.userAddress),this.getUniverseSnapshot()]),n=ln(r.clearinghouse,t.symbol),o=an(s);return n.positions=cn(n.positions,r.openOrders??[],o),n.totalUnrealizedPnl=n.positions.reduce((i,a)=>i+a.unrealizedPnl,0),n}async getActiveAssetLeverage(t){let r=this.symbolToCoin(t.symbol);try{let n=(await this.request("/info",{type:"activeAssetData",coin:r,user:t.userAddress}))?.leverage;return !n||typeof n.value!="number"?null:{value:n.value,type:n.type}}catch(s){if(s instanceof Te&&(s.statusCode===422||s.statusCode===400))return null;throw s}}async getAssetMeta(t){let r=await this.fetchAssetUniverse(),s=this.symbolToCoin(t.symbol);return r.get(s)??null}async fetchAssetUniverse(){let t=Date.now();if(this.assetMetaCache&&t-this.assetMetaCache.fetchedAt<ui)return this.assetMetaCache.map;if(this.assetMetaPending)return this.assetMetaPending;let r=(async()=>{let s=await this.request("/info",{type:"meta"}),n=new Map;for(let o of s.universe)!o||typeof o.name!="string"||typeof o.szDecimals=="number"&&n.set(o.name,{szDecimals:o.szDecimals,maxLeverage:o.maxLeverage});return this.assetMetaCache={fetchedAt:Date.now(),map:n},n})();this.assetMetaPending=r;try{return await r}finally{this.assetMetaPending=null;}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let[r,s]=await Promise.all([this.getUserStateSnapshot(t.userAddress).catch(()=>null),this.getUniverseSnapshot().catch(()=>{})]),n=r?.openOrders??[],o={leverageByCoin:pn(r?.clearinghouse),markByCoin:s?an(s):void 0},i=n.map(l=>un(l,o)),a=t.symbol?i.filter(l=>l.symbol===t.symbol):i;return {orders:a,totalCount:a.length,raw:n}}async getTrades(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"userFills",user:t.userAddress}),s=r.map(n=>{let o=`${n.coin}-USDC`,i=n.dir.includes("Long");return {tradeId:n.tid.toString(),orderId:n.oid.toString(),symbol:o,side:i?"long":"short",price:parseFloat(n.px),quantity:parseFloat(n.sz),fee:parseFloat(n.fee||"0"),feeCurrency:n.feeToken||"USDC",isMaker:n.side==="M",timestamp:n.time,dir:n.dir,closedPnl:parseFloat(n.closedPnl||"0")}});return t.symbol&&(s=s.filter(n=>n.symbol===t.symbol)),t.startTime&&(s=s.filter(n=>n.timestamp>=t.startTime)),t.endTime&&(s=s.filter(n=>n.timestamp<=t.endTime)),t.limit&&(s=s.slice(0,t.limit)),{trades:s,totalCount:s.length,raw:r}}async connectWebSocket(){this.wsRefCount+=1,this.wsManager||(this.wsManager=new Ze(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,o=>s(o))}subscribeUserData(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=t==="fills"?"userFills":"userEvents";return this.wsManager.subscribe(n,r,s)}subscribeAccountState(t,r){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe("accountState",t,s=>{r(fi(s));})}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}};function ln(e,t){let r=e.assetPositions.map(i=>{let a=i.position,l=`${a.coin}-USDC`,u=parseFloat(a.szi);if(u===0)return null;let c=parseFloat(a.entryPx),p=parseFloat(a.unrealizedPnl),d=parseFloat(a.positionValue);return {symbol:l,side:u>0?"long":"short",quantity:Math.abs(u),quantityRaw:a.szi.startsWith("-")?a.szi.slice(1):a.szi,entryPrice:c,markPrice:c,unrealizedPnl:p,unrealizedPnlPercent:parseFloat(a.returnOnEquity)*100,leverage:a.leverage.value,liquidationPrice:a.liquidationPx?parseFloat(a.liquidationPx):void 0,margin:parseFloat(a.marginUsed),notionalValue:Math.abs(d)}}).filter(i=>i!==null),s=t?r.filter(i=>i.symbol===t):r,n=e.withdrawable,o=typeof n=="string"&&n.length>0?parseFloat(n):parseFloat(e.marginSummary.accountValue)-parseFloat(e.marginSummary.totalMarginUsed);return {positions:s,totalEquity:parseFloat(e.marginSummary.accountValue),availableBalance:o,totalUnrealizedPnl:s.reduce((i,a)=>i+a.unrealizedPnl,0),raw:e}}function di(e){if(!e.children||e.children.length===0)return {};let t,r;for(let s of e.children){let n=typeof s.orderType=="string"?s.orderType:"",o=s.triggerPx;if(typeof o!="string"||o.length===0)continue;let i=parseFloat(o);!Number.isFinite(i)||i<=0||(/take\s*profit/i.test(n)?t=i:/stop/i.test(n)&&(r=i));}return {takeProfitPrice:t,stopLossPrice:r}}function un(e,t){let r=`${e.coin}-USDC`,s=parseFloat(e.origSz),n=parseFloat(e.sz),o=s-n,i=e.side===true||e.side==="B",a=typeof e.orderType=="string"?e.orderType:"Limit",u=/^market$/i.test(a)?"market":"limit",c=e.isTrigger===true,p;c&&(/take\s*profit/i.test(a)?p="tp":/stop/i.test(a)&&(p="sl"));let d=typeof e.triggerPx=="string"&&e.triggerPx.length>0?parseFloat(e.triggerPx):void 0,f=typeof e.triggerCondition=="string"&&e.triggerCondition!=="N/A"?e.triggerCondition:void 0,{takeProfitPrice:g,stopLossPrice:m}=di(e),P=t?.leverageByCoin?.get(e.coin),b=t?.markByCoin?.get(e.coin);return {orderId:e.oid.toString(),clientOrderId:e.cloid??void 0,symbol:r,side:i?"long":"short",orderType:u,price:parseFloat(e.limitPx),quantity:s,filledQuantity:o,remainingQuantity:n,status:o>0&&n>0?"partially_filled":"pending",timestamp:e.timestamp,updateTimestamp:e.timestamp,leverage:P,reduceOnly:e.reduceOnly===true,isTrigger:c||void 0,triggerPx:d,triggerType:p,triggerCondition:f,markPrice:b,takeProfitPrice:g,stopLossPrice:m}}function pn(e){let t=new Map;if(!e)return t;for(let r of e.assetPositions??[]){let s=r.position?.leverage?.value;typeof s=="number"&&Number.isFinite(s)&&s>0&&t.set(r.position.coin,s);}return t}function mi(e){return e?e.map(t=>({coin:t.coin,total:parseFloat(t.total),totalRaw:t.total,hold:parseFloat(t.hold),entryNotional:t.entryNtl?parseFloat(t.entryNtl):void 0})):[]}function fi(e){let t=e.clearinghouseState,r=t?ln(t):{positions:[],totalEquity:0,availableBalance:0},s=e.openOrders??[],n=mi(e.spotState?.balances),o=e.meta&&e.assetCtxs?bi([e.meta,e.assetCtxs]):null,i=pn(t),a=s.map(d=>un(d,{leverageByCoin:i,markByCoin:o??void 0})),l=cn(r.positions,s,o),u=l.reduce((d,f)=>d+f.unrealizedPnl,0),c=e.meta&&e.assetCtxs?yi(e.meta,e.assetCtxs,e.serverTime):void 0,p=t?gi(t):void 0;return {positions:l,openOrders:a,spotBalances:n,totalEquity:r.totalEquity??0,availableBalance:r.availableBalance??0,totalUnrealizedPnl:u,serverTime:e.serverTime,leverageByCoin:p,universe:c,raw:e}}function yi(e,t,r){let s=e.universe.map((o,i)=>{let a=t[i]??{},l=`${o.name}-USDC`,u=parseFloat(a.midPx||a.markPx||"0"),c=a.prevDayPx,p=c?parseFloat(c):u,d=p>0?(u-p)/p*100:0,f={symbol:l,price:u,change24h:d,volume24h:parseFloat(a.dayNtlVlm||"0"),fundingRate:parseFloat(a.funding||"0"),openInterest:parseFloat(a.openInterest||"0"),markPrice:parseFloat(a.markPx||"0"),indexPrice:parseFloat(a.oraclePx||a.midPx||"0")},g=o.szDecimals,m=o.maxLeverage,P=typeof g=="number"?{szDecimals:g,maxLeverage:m}:null;return {coin:o.name,symbol:l,market:f,meta:P}}),n=new Map;for(let o of s)n.set(o.symbol,o);return {assets:s,bySymbol:n,fetchedAt:r??Date.now()}}function gi(e){let t={};for(let r of e.assetPositions??[]){let s=r.position?.leverage;if(!s||typeof s.value!="number")continue;let n=s.type==="isolated"||s.type==="cross"?s.type:"cross";t[r.position.coin]={value:s.value,type:n};}return t}function bi(e){let[t,r]=e,s=new Map;return t.universe.forEach((n,o)=>{let i=r[o];if(!i)return;let a=i.markPx??i.midPx??i.oraclePx;if(typeof a!="string"||a.length===0)return;let l=parseFloat(a);Number.isFinite(l)&&l>0&&s.set(n.name,l);}),s}function an(e){let t=new Map;for(let r of e.assets){let s=r.market.markPrice&&r.market.markPrice>0?r.market.markPrice:r.market.price;Number.isFinite(s)&&s>0&&t.set(r.coin,s);}return t}function hi(e,t){let r=e.symbol.split("-")[0],s=e.side==="long"?"A":"B",n=s==="B",o,i;for(let a of t){if(a.coin!==r||a.reduceOnly!==true||a.isTrigger!==true||!(a.side===s||a.side===n))continue;let u=typeof a.orderType=="string"?a.orderType:"",c=/take\s*profit/i.test(u),p=/stop/i.test(u);c?(!o||a.timestamp>o.timestamp)&&(o=a):p&&(!i||a.timestamp>i.timestamp)&&(i=a);}return {tp:o?.triggerPx?parseFloat(o.triggerPx):void 0,sl:i?.triggerPx?parseFloat(i.triggerPx):void 0}}function cn(e,t,r){return e.map(s=>{let n={...s},{tp:o,sl:i}=hi(s,t);n.takeProfitPrice=o,n.stopLossPrice=i;let a=s.symbol.split("-")[0],l=r?.get(a);if(l&&Number.isFinite(l)&&l>0){n.markPrice=l;let u=s.side==="long"?1:-1,c=(l-s.entryPrice)*s.quantity*u;n.unrealizedPnl=c,n.notionalValue=l*s.quantity,s.margin>0&&(n.unrealizedPnlPercent=c/s.margin*100);}return n})}var Te=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="HyperliquidApiError";}};var ft=new Set(["settled","refunded","failed"]);var De=class extends Error{constructor(){super("perpetual wallet disconnected"),this.name="PerpetualDisconnectedError";}},qe=class extends Error{constructor(){super("perpetual order rejected"),this.name="PerpetualRejectedError";}};function xi(e={}){let t=e.coins??["BTC-USDC"],r=new Map,s=0,n={symbol:"BTC-USDC",bids:[],asks:[],timestamp:0};return {market:{async getSupportedCoins(){return t},async getMarket(o){return t.includes(o)?{symbol:o,price:0,change24h:0,volume24h:0,fundingRate:0,openInterest:0,markPrice:0}:null},async getMarkets(o){let i=o??t,a=[];for(let l of i){let u=await this.getMarket(l);u&&a.push(u);}return a},async getKlines(){return []},async getOrderBook(){return n},async getRecentTrades(){return []},async getUniverseSnapshot(){return {assets:[],bySymbol:new Map,fetchedAt:0}},async getAssetMeta(){return null}},account:{async getPositions(){return {positions:[]}},async getOpenOrders(){return {orders:[]}},async getTrades(){return {trades:[]}},async getActiveAssetLeverage(){return null}},execution:{async placeOrder(o){if(e.disconnected)throw new De;if(e.rejectOrders)throw new qe;return {orderId:o.clientOrderId??"mem-1",symbol:o.symbol,side:o.side,orderType:o.orderType,status:"pending",timestamp:0}},async cancelOrder(o){if(e.disconnected)throw new De;return {orderId:o.orderId,symbol:o.symbol,status:"success",timestamp:0}}},realtime:{async connectWebSocket(){},disconnectWebSocket(){r.clear();},subscribeMarketData(o,i,a){let l=`m-${s++}`;return r.set(l,a),l},subscribeCandles(o,i,a){let l=`c-${s++}`;return r.set(l,a),l},subscribeUserData(o,i,a){let l=`u-${s++}`;return r.set(l,a),l},subscribeAccountState(o,i){let a=`a-${s++}`;return r.set(a,i),a},unsubscribe(o){r.delete(o);}}}}function Si(e){let t=0,r=new Set,s=null,n=o=>{r.add(o);let i=false;return {unsubscribe(){i||(i=true,r.delete(o),e.realtime.unsubscribe(o));}}};return {get generation(){return t},async connect(){t+=1,await e.realtime.connectWebSocket();},disconnect(){for(let o of [...r])r.delete(o),e.realtime.unsubscribe(o);e.realtime.disconnectWebSocket();},getUniverseSnapshot(){return s||(s=e.market.getUniverseSnapshot().finally(()=>{s=null;})),s},getMarket:o=>e.market.getMarket(o),getPositions:o=>e.account.getPositions(o),subscribeMarketData(o,i,a,l){return n(e.realtime.subscribeMarketData(o,i,a,l))},subscribeCandles(o,i,a){return n(e.realtime.subscribeCandles(o,i,a))},subscriptionCount(){return r.size}}}function vi(e){let t={status:"idle"},r=s=>(t=s,e.onChange?.(s),s);return {snapshot(){return t},async submit(s){if(!e.signer)return r({status:"disconnected",error:new De});r({status:"signing"});try{await e.signer.sign(s);}catch(n){let o=n instanceof Error?n:new Error(String(n));return r({status:"rejected",error:o})}r({status:"submitting"});try{let n=await e.execution.placeOrder(s);return n.status==="rejected"?r({status:"rejected",result:n,error:new qe}):n.status==="pending"?r({status:"pending",result:n}):r({status:"succeeded",result:n})}catch(n){if(n instanceof De)return r({status:"disconnected",error:n});if(n instanceof qe)return r({status:"rejected",error:n});let o=n instanceof Error?n:new Error(String(n));return r({status:"failed",error:o})}}}}var we=react.createContext({});function Oi({client:e,depositClient:t,children:r}){let s=react.useMemo(()=>({client:e,depositClient:t}),[e,t]);return jsxRuntime.jsx(we.Provider,{value:s,children:r})}function E(){let e=react.useContext(we);if(!e||!e.client)throw new Error("usePerpetualsClient must be used within a PerpetualsProvider");return e}function Br(){return ["perps","coins"]}async function Qr(e){return await e.getSupportedCoins()}function Et(e={}){let{client:t}=E();return reactQuery.useQuery({queryKey:Br(),queryFn:async()=>Qr(t),staleTime:300*1e3,...e})}var dn=6e4;function ce(){return ["perps","universe"]}async function xe(e){if(typeof e.getUniverseSnapshot!="function")throw new Error("useUniverseQuery: the active perpetuals client does not implement getUniverseSnapshot()");return e.getUniverseSnapshot()}function Se(e){return typeof e.getUniverseSnapshot=="function"}function mn(e={}){let{client:t}=E(),r=Se(t)&&e.enabled!==false;return reactQuery.useQuery({queryKey:ce(),queryFn:()=>xe(t),refetchInterval:dn,staleTime:dn/2,...e,enabled:r})}var Rt=6e4;function Kr(e){return ["perps","market",e.symbol]}async function Wr(e,{symbol:t}){return await e.getMarket(t)}function et(e,t={}){let{client:r}=E(),s=Se(r),n=reactQuery.useQuery({queryKey:ce(),queryFn:()=>xe(r),refetchInterval:Rt,staleTime:Rt/2,enabled:s&&t.enabled!==false&&!!e.symbol,select:i=>i.bySymbol.get(e.symbol)?.market??null}),o=reactQuery.useQuery({queryKey:Kr(e),queryFn:async()=>Wr(r,e),staleTime:Rt/2,refetchInterval:Rt,...t,enabled:!s&&t.enabled!==false&&!!e.symbol});return s?n:o}var At=6e4;function zr(e={}){return ["perps","markets",JSON.stringify((e.symbols??[]).sort())]}async function $r(e,{symbols:t}={}){return await e.getMarkets(t)}function Ut(e={},t={}){let{client:r}=E(),s=Se(r),n=reactQuery.useQuery({queryKey:ce(),queryFn:()=>xe(r),refetchInterval:At,staleTime:At/2,enabled:s&&t.enabled!==false,select:i=>{if(!e.symbols||e.symbols.length===0)return i.assets.map(l=>l.market);let a=new Set(e.symbols);return i.assets.filter(l=>a.has(l.symbol)).map(l=>l.market)}}),o=reactQuery.useQuery({queryKey:zr(e),queryFn:async()=>$r(r,e),staleTime:At/2,refetchInterval:At,...t,enabled:!s&&t.enabled!==false});return s?n:o}function Vr(e){return ["perps","klines",e.symbol,e.interval,String(e.limit??100)]}async function Gr(e,{symbol:t,interval:r,limit:s}){return await e.getKlines(t,r,s)}function gn(e,t={}){let{client:r}=E();return reactQuery.useQuery({queryKey:Vr(e),queryFn:async()=>Gr(r,e),staleTime:30*1e3,...t})}function jr(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 Yr(e,{symbol:t,maxLevel:r,aggregation:s}){return await e.getOrderBook(t,r,s)}function It(e,t={}){let{client:r}=E();return reactQuery.useQuery({queryKey:jr(e),queryFn:async()=>Yr(r,e),staleTime:5*1e3,...t})}function Xr(e){return ["perps","recentTrades",e.symbol,String(e.limit??50)]}async function Jr(e,{symbol:t,limit:r}){return await e.getRecentTrades(t,r)}function Mt(e,t={}){let{client:r}=E();return reactQuery.useQuery({queryKey:Xr(e),queryFn:async()=>Jr(r,e),staleTime:5*1e3,...t})}function He(e){return ["perps","positions",e.userAddress??""]}async function Zr(e,t){return await e.getPositions(t)}function Ii(e,t){return {...e,positions:e.positions.filter(r=>r.symbol===t)}}function tt(e,t={}){let{client:r}=E(),{enabled:s=true,userAddress:n,symbol:o}=e;return reactQuery.useQuery({queryKey:He({userAddress:n}),queryFn:async()=>Zr(r,{userAddress:n}),enabled:s&&!!n,staleTime:10*1e3,select:o?i=>Ii(i,o):void 0,...t})}function _e(e){return ["perps","orders",e.userAddress??""]}async function es(e,t){return await e.getOpenOrders(t)}function Ni(e,t){let r=e.orders.filter(s=>s.symbol===t);return {...e,orders:r,totalCount:r.length}}function Nt(e,t={}){let{client:r}=E(),{enabled:s=true,userAddress:n,symbol:o}=e;return reactQuery.useQuery({queryKey:_e({userAddress:n}),queryFn:async()=>es(r,{userAddress:n}),enabled:s&&!!n,staleTime:5*1e3,select:o?i=>Ni(i,o):void 0,...t})}function ts(e){return ["perps","trades",e.userAddress??"",e.symbol??"",String(e.limit??50),String(e.startTime??""),String(e.endTime??"")]}async function rs(e,t){return await e.getTrades(t)}function Lt(e,t={}){let{client:r}=E(),{enabled:s=true,...n}=e;return reactQuery.useQuery({queryKey:ts(n),queryFn:async()=>rs(r,n),enabled:s&&!!n.userAddress,staleTime:30*1e3,...t})}function yt(e){return ["perps","activeAssetLeverage",e.userAddress??"",e.symbol??""]}async function ss(e,t){return await e.getActiveAssetLeverage(t)}function Ft(e,t={}){let{client:r}=E(),{enabled:s=true,userAddress:n,symbol:o}=e;return reactQuery.useQuery({queryKey:yt({userAddress:n,symbol:o}),queryFn:async()=>{if(!n)throw new Error("useActiveAssetLeverageQuery: userAddress is required");return ss(r,{userAddress:n,symbol:o})},enabled:s&&!!n&&!!o,staleTime:30*1e3,...t})}var ns=6e4;function os(e){return ["perps","assetMeta",e.symbol??""]}async function is(e,t){return await e.getAssetMeta(t)}function rt(e,t={}){let{client:r}=E(),{enabled:s=true,symbol:n}=e,o=Se(r),i=reactQuery.useQuery({queryKey:ce(),queryFn:()=>xe(r),refetchInterval:ns,staleTime:ns/2,enabled:o&&s&&!!n,select:l=>n?l.bySymbol.get(n)?.meta??null:null}),a=reactQuery.useQuery({queryKey:os({symbol:n}),queryFn:async()=>{if(!n)throw new Error("useAssetMetaQuery: symbol is required");return is(r,{symbol:n})},enabled:!o&&s&&!!n,staleTime:ns,...t});return o?i:a}async function as(e,t){return await e.placeOrder(t)}function qt(e={}){let{client:t}=E();return reactQuery.useMutation({mutationFn:async r=>as(t,r),...e})}async function ls(e,t){return await e.cancelOrder(t)}function Ht(e={}){let{client:t}=E();return reactQuery.useMutation({mutationFn:async r=>ls(t,r),...e})}function Ee(e){let{type:t,symbol:r,enabled:s=true,aggregation:n,throttleMs:o}=e,{client:i}=E(),[a,l]=react.useState(null),[u,c]=react.useState(false),[p,d]=react.useState(null),f=react.useRef(null),g=react.useRef(null),m=react.useRef(o);m.current=o;let P=react.useCallback(S=>{let T=m.current;if(!T||T<=0){l(S);return}f.current=S,g.current===null&&(g.current=setTimeout(()=>{if(g.current=null,f.current!==null){let x=f.current;f.current=null,l(x);}},T));},[]),b=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 S=null,T=true;return (async()=>{try{if(await i.connectWebSocket(),!T)return;c(!0),d(null),S=i.subscribeMarketData(t,r,D=>P(D),t==="orderBook"&&n?{aggregation:n}:void 0);}catch(D){T&&(d(D instanceof Error?D:new Error("Connection failed")),c(false));}})(),()=>{if(T=false,S)try{i.unsubscribe(S);}catch(D){console.error("Failed to unsubscribe:",D);}i.disconnectWebSocket(),g.current!==null&&(clearTimeout(g.current),g.current=null),f.current=null,c(false),l(null);}},[i,t,r,s,P,b,n]),{data:a,isConnected:u,error:p}}function hn(e){let{symbol:t,interval:r,enabled:s=true}=e,{client:n}=E(),[o,i]=react.useState(null),[a,l]=react.useState(false),[u,c]=react.useState(null),p=react.useCallback(d=>{i(d);},[]);return react.useEffect(()=>{if(!s)return;let d=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;l(!0),c(null),d=n.subscribeCandles(t,r,p);}catch(m){f&&(c(m instanceof Error?m:new Error("Connection failed")),l(false));}})(),()=>{if(f=false,d)try{n.unsubscribe(d);}catch(m){console.error("Failed to unsubscribe:",m);}n.disconnectWebSocket(),l(false),i(null);}},[n,t,r,s,p]),{data:o,isConnected:a,error:u}}function xn(e){let{type:t,userAddress:r,enabled:s=true}=e,{client:n}=E(),[o,i]=react.useState(null),[a,l]=react.useState(false),[u,c]=react.useState(null),p=react.useCallback(d=>{i(d);},[]);return react.useEffect(()=>{if(!s||!r)return;let d=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;l(!0),c(null),d=n.subscribeUserData(t,r,m=>p(m));}catch(m){f&&(c(m instanceof Error?m:new Error("Connection failed")),l(false));}})(),()=>{if(f=false,d)try{n.unsubscribe(d);}catch(m){console.error("Failed to unsubscribe:",m);}n.disconnectWebSocket(),l(false),i(null);}},[n,t,r,s,p]),{data:o,isConnected:a,error:u}}function Be(e){return ["perps","accountState",e.userAddress??""]}function _t(e,t={}){let{enabled:r=true,...s}=e;return reactQuery.useQuery({queryKey:Be(s),queryFn:()=>null,enabled:r&&!!s.userAddress,staleTime:1/0,refetchOnWindowFocus:false,refetchOnReconnect:false,...t})}function Sn(e){let{userAddress:t,enabled:r=true}=e,{client:s}=E(),n=reactQuery.useQueryClient(),[o,i]=react.useState(null),[a,l]=react.useState(false),[u,c]=react.useState(null);return react.useEffect(()=>{if(!r||!t||typeof s.subscribeAccountState!="function")return;let p=null,d=true,f=m=>{if(!d)return;i(m),n.setQueryData(Be({userAddress:t}),m);let P={positions:m.positions,totalEquity:m.totalEquity,availableBalance:m.availableBalance,totalUnrealizedPnl:m.totalUnrealizedPnl,raw:m.raw};n.setQueryData(He({userAddress:t}),P);let b={orders:m.openOrders,totalCount:m.openOrders.length,raw:m.raw};if(n.setQueryData(_e({userAddress:t}),b),m.universe&&n.setQueryData(ce(),m.universe),m.leverageByCoin)for(let[S,T]of Object.entries(m.leverageByCoin))n.setQueryData(yt({userAddress:t,symbol:`${S}-USDC`}),T);};return (async()=>{try{if(await s.connectWebSocket(),!d)return;l(!0),c(null),p=s.subscribeAccountState(t,f);}catch(m){if(!d)return;l(false),c(m instanceof Error?m:new Error("WebSocket connect failed"));}})(),()=>{if(d=false,p)try{s.unsubscribe(p);}catch(m){console.error("[useAccountStateSubscription] unsubscribe failed:",m);}s.disconnectWebSocket(),l(false);}},[s,n,t,r]),{data:o,isConnected:a,error:u}}function vn(e){let{userAddress:t,enabled:r=true,timeoutMs:s=3e3}=e,{client:n}=E(),o=reactQuery.useQueryClient();react.useEffect(()=>{if(!r||!t)return;let i=false,a=setTimeout(()=>{i||o.getQueryData(Be({userAddress:t}))||(async()=>{try{let[u,c]=await Promise.all([n.getPositions({userAddress:t}),n.getOpenOrders({userAddress:t})]);if(i)return;o.setQueryData(He({userAddress:t}),u),o.setQueryData(_e({userAddress:t}),c);}catch(u){process.env.NODE_ENV!=="production"&&console.warn("[useHyperliquidUserBootstrap] fallback REST failed:",u);}})();},s);return ()=>{i=true,clearTimeout(a);}},[n,o,t,r,s]);}function Cn(){let e=react.useContext(we);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 Re(){return react.useContext(we)?.depositClient}function fs(e){return ["perps","deposit","quote",e]}async function ys(e,t){return e.quote(t)}function Bt(e,t={}){let r=Re(),s=(t.enabled??!!Ji(e))&&!!r;return reactQuery.useQuery({queryKey:fs(e??null),queryFn:async()=>ys(r,e),enabled:s,staleTime:0,gcTime:3e4,refetchOnWindowFocus:false,...t})}function Ji(e){return !!(e&&e.originChainId&&e.userAddress&&e.hyperliquidRecipient&&e.grossAmount&&e.source)}var Qt={phase:"idle"};function gs(e,t){switch(t.type){case "RESET":return Qt;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,originTxHash:t.originTxHash}: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 Zi(t.status,r)}}}function Zi(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 ea(e){return e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"}function ta(e){return e.phase==="submitted"||e.phase==="tracking"}function ra(e){if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.status}function sa(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 na(e){return e!==void 0&&ft.has(e)}var de=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="LiberFiApiError";}},oa=3e4,Qe=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??oa,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[o,i]of Object.entries(this.defaultQuery))i===void 0||i===""||s.set(o,i);if(r)for(let[o,i]of Object.entries(r))i===void 0||i===""||s.set(o,i);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,o=r.timeoutMs??this.timeout,i=setTimeout(()=>n.abort(),o);try{let a=await this.fetchImpl(s,{method:t,headers:{Accept:"application/json",...t==="POST"?{"Content-Type":"application/json"}:{},...this.headers,...r.headers},body:t==="POST"?JSON.stringify(r.body??{}):void 0,signal:n.signal});if(!a.ok){let l=await ia(a);throw new de(`HTTP ${a.status} ${a.statusText} from ${t} ${s}`,a.status,l)}return a.status===204?void 0:await a.json()}catch(a){if(a instanceof de)throw a;if(a instanceof Error&&a.name==="AbortError")throw new de(`Request timeout after ${o}ms: ${t} ${s}`,408,"");let l=a instanceof Error?a.message:String(a);throw new de(`Network error: ${t} ${s}: ${l}`,0,"")}finally{clearTimeout(i);}}};async function ia(e){try{return await e.text()}catch{return ""}}function Kt(e){let t=Re(),[r,s]=react.useReducer(gs,Qt),n=la(e),o=react.useCallback(()=>{s({type:"RESET"});},[]),i=react.useCallback(async a=>{let{quote:l}=a;s({type:"SIGN_START"});let u;try{if(u=await ua(l,n),!u)throw new Error("wallet returned an empty tx hash")}catch(p){let d=kn(p,"WALLET_SIGN_OR_BROADCAST_FAILED");throw s({type:"SIGN_FAILED",error:d}),p}s({type:"BROADCAST_START"});let c={userAddress:a.userAddress,hyperliquidRecipient:a.hyperliquidRecipient,originTxHash:u,breakdown:l.breakdown,userId:a.userId,source:a.source,campaign:a.campaign,quoteIssuedAt:l.issuedAt};if(!t)throw s({type:"SUBMIT_FAILED",error:{code:"DEPOSIT_CLIENT_NOT_CONFIGURED",message:"Deposit client is not configured.",recoverable:false}}),new Error("Deposit client is not configured.");try{let p=await t.submit(c);return s({type:"SUBMIT_OK",intentId:p.intentId,originTxHash:u}),p.intentId}catch(p){let d=kn(p,"DEPOSIT_SUBMIT_FAILED");throw s({type:"SUBMIT_FAILED",error:d}),p}},[t,n]);return {state:r,execute:i,reset:o,dispatch:s}}function la(e){return typeof e=="function"?{solana:e}:e}async function ua(e,t){if(e.kind==="solana"){if(!t.solana)throw new Error("Solana signer is required for solana-origin deposits.");return t.solana(e.serializedTxBase64,{isVersioned:e.isVersioned,sizeBytes:e.sizeBytes})}if(e.kind==="evm"){if(!t.evm)throw new Error("EVM signer is required for evm-origin deposits.");let s=t.evm,n=s.getChainId(),o=e.evmTx.chainId,i=n!==void 0&&n!==o;(i||n===void 0)&&await s.switchChain(o);try{return await s.sendTransaction({chainId:e.evmTx.chainId,to:e.evmTx.to,data:e.evmTx.data,value:e.evmTx.value})}finally{i&&n!==void 0&&await s.switchChain(n).catch(a=>{typeof console<"u"&&console.warn("usePerpDepositExecute: failed to restore chain after EVM deposit",{from:o,to:n,err:a});});}}let r=e;throw new Error(`Unsupported quote kind: ${r.kind}`)}function kn(e,t){if(e instanceof de){let r=pa(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 pa(e){if(e)try{return JSON.parse(e)}catch{return}}function bs(e){return ["perps","deposit","status",e??null]}async function hs(e,t){return e.status(t)}function Wt(e,t={}){let r=Re(),s=(t.enabled??!!e)&&!!r,n=t.pollIntervalMs??3e3;return reactQuery.useQuery({queryKey:bs(e??void 0),queryFn:async()=>hs(r,e),enabled:s,refetchInterval:o=>{let i=o.state.data;return i&&ft.has(i.status)?false:n},refetchOnWindowFocus:false,staleTime:0,...t})}var st={phase:"idle",steps:[]};function gt(e,t){switch(e.id){case "approveBuilderFee":{let r=t.builderApproval;return r&&da(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 bt(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((o,i)=>i===t.index?{...o,status:"done",txHash:t.txHash,error:void 0}:o),s=t.accountState&&e.accountState?ma(e.accountState,t.accountState):t.accountState??e.accountState;return {phase:r.every(o=>o.status==="skipped"||o.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 st}}function ht(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 da(e,t){return e.toLowerCase()===t.toLowerCase()}function ma(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 St(e){let{adapter:t,userAddress:r,steps:s,autoLoad:n=true,onComplete:o,onError:i}=e,[a,l]=react.useReducer(bt,st),u=react.useRef(t),c=react.useRef(s),p=react.useRef(o),d=react.useRef(i);u.current=t,c.current=s,p.current=o,d.current=i;let f=react.useCallback(async()=>{if(r){l({type:"START_LOADING"});try{let S=await u.current.getAccountState(r),T=c.current.map(x=>({step:x,status:gt(x,S)}));l({type:"LOAD_SUCCESS",accountState:S,steps:T});}catch(S){let T=Dn(S);l({type:"LOAD_ERROR",error:T.message}),d.current?.(T,{});}}},[r]);react.useEffect(()=>{n&&r&&f();},[n,r,f]);let g=react.useCallback(async S=>{let T=a.steps[S];if(T){l({type:"RUN_STEP",index:S});try{let x=await ya(u.current,T.step);l({type:"STEP_SUCCESS",index:S,txHash:x.txHash,accountState:x.state});}catch(x){let D=Dn(x);l({type:"STEP_ERROR",index:S,error:D.message}),d.current?.(D,{stepId:T.step.id});}}},[a.steps]),m=react.useCallback(async()=>{let S=ht(a);S!=null&&await g(S);},[a,g]),P=react.useCallback(()=>l({type:"RESET"}),[]),b=react.useRef(false);return react.useEffect(()=>{a.phase==="done"&&!b.current?(b.current=true,p.current?.(a)):a.phase!=="done"&&(b.current=false);},[a]),{state:a,reload:f,runNext:m,runStep:g,reset:P}}function ya(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 Dn(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error")}function $t(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsx("div",{className:"flex items-center justify-center px-4 py-3 bg-surface-raised border-b border-border-subtle",children:jsxRuntime.jsx("span",{className:"text-text-secondary text-sm",children:e("perpetuals.coinInfo.notAvailable")})})}var En="liberfi-perp-shimmer",ba=`
2
2
  @keyframes ${En}{0%{background-position:200% 0}100%{background-position:-200% 0}}
3
- `;function Ae(){return jsxRuntime.jsx("style",{children:ba})}var xs={backgroundColor:"rgba(255, 255, 255, 0.16)",backgroundImage:"linear-gradient(90deg, rgba(255,255,255,0) 25%, rgba(255,255,255,0.18) 50%, rgba(255,255,255,0) 75%)",backgroundSize:"200% 100%",animation:`${En} 1.8s ease-in-out infinite`,borderRadius:6};function me(e){return {...xs,animationDelay:`${e}ms`}}function Vt(){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ae,{}),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:We(0,84,23)}),jsxRuntime.jsx("div",{style:We(60,52,16)})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsx(Ss,{labelWidth:72,valueWidth:64,delay:120}),jsxRuntime.jsx(Ss,{labelWidth:72,valueWidth:48,delay:180}),jsxRuntime.jsx(Ss,{labelWidth:84,valueWidth:56,delay:240}),jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:We(300,132,16)}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx("div",{style:We(330,64,17)}),jsxRuntime.jsx("div",{style:We(360,64,17)})]})]})]})]})]})}function Ss({labelWidth:e,valueWidth:t,delay:r}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:We(r,e,16)}),jsxRuntime.jsx("div",{style:We(r+30,t,17)})]})}function We(e,t,r){return {...me(e),width:t,height:r}}function Gt(e){let[t,r]=react.useState(),[s,n]=react.useState(0),{data:o,isPending:i}=et({symbol:e}),{data:a}=Ee({type:"ticker",symbol:e,enabled:!!o});return react.useEffect(()=>{o&&r(o);},[o]),react.useEffect(()=>{if(!a)return;let l=Sa(a,e);l&&r(u=>va(u??o??void 0,l,e));},[a,o,e]),react.useEffect(()=>{let l=()=>{let c=Date.now(),p=3600*1e3,d=c%p,f=p-d;return Math.floor(f/1e3)};n(l());let u=setInterval(()=>{n(l());},1e3);return ()=>clearInterval(u)},[]),{marketData:t,isLoading:i,fundingCountdown:s}}function Sa(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 nt(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function va(e,t,r){return {symbol:t.symbol??e?.symbol??r,price:nt(t.price,e?.price??0),change24h:nt(t.change24h,e?.change24h??0),volume24h:nt(t.volume24h,e?.volume24h??0),fundingRate:nt(t.fundingRate,e?.fundingRate??0),openInterest:nt(t.openInterest,e?.openInterest??0),markPrice:nt(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 ka(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 An(e){return typeof e!="number"||!Number.isFinite(e)?"-":utils.formatAmountInUsd(e)}function Un(e){return typeof e!="number"||!Number.isFinite(e)?"-":utils.formatPriceInUsd(e)}function jt({marketData:e,fundingCountdown:t}){let{t:r}=i18n.useTranslation(),{price:s,change24h:n,indexPrice:o,volume24h:i,openInterest:a,fundingRate:l}=e,u=typeof n=="number"&&Number.isFinite(n)?n:0,c=typeof l=="number"&&Number.isFinite(l)?l:0,p=u>=0,d=u.toFixed(2);return jsxRuntime.jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:24},children:[jsxRuntime.jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsxRuntime.jsx("span",{style:{fontSize:18,fontWeight:500,lineHeight:"23px",letterSpacing:"-0.36px",color:"var(--color-text-primary)"},children:Un(s)}),jsxRuntime.jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:p?"var(--color-positive)":"var(--color-negative)"},children:[p?"+":"",d,"%"]})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.oraclePrice")}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"var(--color-text-primary)"},children:o?Un(o):"-"})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.volume24h")}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"var(--color-text-primary)"},children:An(i)})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.openInterest")}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"var(--color-text-primary)"},children:An(a*(e.markPrice||s))})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.funding")}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsxs("span",{style:{fontSize:13,lineHeight:"17px",color:c>=0?"var(--color-positive)":"var(--color-negative)"},children:[(c*100).toFixed(5),"%"]}),jsxRuntime.jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"var(--color-text-primary)"},children:ka(t)})]})]})]})]})}function In({symbol:e}){let{marketData:t,isLoading:r,fundingCountdown:s}=Gt(e);return r?jsxRuntime.jsx(Vt,{}):t?jsxRuntime.jsx(jt,{marketData:t,fundingCountdown:s}):jsxRuntime.jsx($t,{})}function Yt({onSelectCoin:e}={}){let[t,r]=react.useState(""),[s,n]=react.useState([]),{data:o,isPending:i}=Et(),{data:a,isPending:l}=Ut({symbols:o},{enabled:!!o&&o.length>0});react.useEffect(()=>{a&&n(a);},[a]);let u=react.useMemo(()=>{if(!t.trim())return s;let p=t.toLowerCase().trim();return s.filter(d=>d.symbol.toLowerCase().includes(p))},[s,t]);return {coins:s,isLoading:i||l,searchQuery:t,setSearchQuery:r,filteredCoins:u,handleSelectCoin:p=>{e?.(p);}}}function Nn(e){return utils.formatAmountInUsd(e)}function Ua(e){return utils.formatPriceInUsd(e)}function Xt({coins:e,searchQuery:t,onSearchChange:r,onSelectCoin:s,isLoading:n}){let{t:o}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{backgroundColor:"var(--color-surface-raised)",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 var(--color-border-control)",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:"var(--color-text-muted)"}}),jsxRuntime.jsx("input",{type:"text",placeholder:o("perpetuals.searchCoins.placeholder"),value:t,onChange:i=>r(i.target.value),className:"flex-1 bg-transparent outline-none",style:{fontSize:12,color:"var(--color-text-primary)",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 var(--color-border-subtle)",position:"sticky",top:0,backgroundColor:"var(--color-surface-raised)",zIndex:1},children:[jsxRuntime.jsx("span",{style:{flex:"0 0 140px",fontSize:12,color:"var(--color-text-muted)"},children:o("perpetuals.searchCoins.col.token")}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.lastPrice")}),jsxRuntime.jsx("span",{style:{flex:"0 0 120px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.change24h")}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.funding8h")}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.volume24h")}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.openInterest")})]}),n?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-muted)"},children:o("perpetuals.searchCoins.loading")})}):e.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-muted)"},children:o(t?"perpetuals.searchCoins.noCoins":"perpetuals.searchCoins.noCoinsAvailable")})}):e.map(i=>{let a=i.change24h>=0,l=i.change24h.toFixed(2),u=(i.fundingRate*100).toFixed(4),c=i.fundingRate>=0,p=i.symbol.split("-")[0];return jsxRuntime.jsxs("div",{className:"flex items-center cursor-pointer transition-colors",style:{height:36,padding:"0 16px",borderBottom:"1px solid var(--color-border-subtle)"},onClick:()=>s(i.symbol),onMouseEnter:d=>{d.currentTarget.style.backgroundColor="hsl(var(--heroui-foreground) / 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/${p}.svg`,alt:p,className:"rounded-full",style:{width:20,height:20},onError:d=>{let f=d.target;f.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"var(--color-text-primary)"},children:p})]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-primary)",textAlign:"right"},children:Ua(i.price)}),jsxRuntime.jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:a?"var(--color-positive)":"var(--color-negative)",textAlign:"right"},children:[a?"+":"",l,"%"]}),jsxRuntime.jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:c?"var(--color-positive)":"var(--color-negative)",textAlign:"right"},children:[u,"%"]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-secondary)",textAlign:"right"},children:Nn(i.volume24h)}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"var(--color-text-secondary)",textAlign:"right"},children:Nn(i.openInterest*i.price)})]},i.symbol)})]})]})}function Fn({onSelectCoin:e,className:t}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:o,handleSelectCoin:i}=Yt({onSelectCoin:e});return jsxRuntime.jsx("div",{className:t,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsxRuntime.jsx(Xt,{coins:r,searchQuery:n,onSearchChange:o,onSelectCoin:i,isLoading:s})})}function Os(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,o=null;for(let i of s)i.step<=t+n&&(!o||i.step>o.step)&&(o=i);return o?o.mantissa&&o.mantissa!==1?{nSigFigs:o.nSigFigs,mantissa:o.mantissa}:{nSigFigs:o.nSigFigs}:{nSigFigs:5}}function _n(e,t,r){if(t<=0)return e;let s=new Map,n=r==="ask"?Math.ceil:Math.floor;return e.forEach(o=>{let i=n(o.price/t)*t,a=s.get(i);a?(a.quantity+=o.quantity,o.count&&(a.count=(a.count||0)+o.count)):s.set(i,{price:i,quantity:o.quantity,count:o.count});}),Array.from(s.values())}function Bn(e){let t=0,r=e.map(n=>{let o=n.quantity*n.price;return t+=o,{...n,quantity:o,total:t,percentage:0}}),s=t;return r.map(n=>({...n,percentage:s>0?n.total/s*100:0}))}function Jt({symbol:e,maxLevel:t=20,precision:r=1}){let[s,n]=react.useState(null),[o,i]=react.useState(r);react.useEffect(()=>{i(r);},[r]);let{data:a,isPending:l}=It({symbol:e,maxLevel:t}),u=react.useMemo(()=>{let f=s?.bids[0]?.price??a?.bids[0]?.price,g=s?.asks[0]?.price??a?.asks[0]?.price,m=f&&g?(f+g)/2:g??f??0;return m>0?Math.floor(Math.log10(m)):null},[s,a]),c=react.useMemo(()=>{if(u===null)return;let f=Math.pow(10,u);return Os(f,o)},[o,u]),{data:p}=Ee({type:"orderBook",symbol:e,enabled:!!a,aggregation:c,throttleMs:100});return react.useEffect(()=>{p?n(p):a&&n(a);},[p,a]),{...react.useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let f=_n(s.bids,o,"bid"),g=_n(s.asks,o,"ask"),m=f.sort((_,M)=>M.price-_.price).slice(0,t),P=g.sort((_,M)=>_.price-M.price).slice(0,t),b=Bn(m),S=Bn(P),T=b[0]?.price||0,D=(S[0]?.price||0)-T,H=T>0?D/T*100:0;return {bids:b,asks:S,spread:D,spreadPercentage:H}},[s,o,t]),isLoading:l,precision:o,setPrecision:i}}var Kn={scrollbarWidth:"thin",scrollbarColor:"rgba(63,63,70,0.6) transparent"},Fa={backgroundColor:"#000000",fontSize:11},qa={height:28,minHeight:28,padding:"0 16px",gap:16,color:"var(--color-text-muted)",fontSize:11},ks={flex:"1 1 0%"},Ha={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},_a={height:20,background:"linear-gradient(to right, rgba(247,104,22,0), #F76816)",opacity:.15},Ba={height:20,background:"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15},Qa={color:"#F76816",fontWeight:400},Ka={color:"#C7FF2E",fontWeight:400},Wn={flex:"1 1 0%",color:"var(--color-text-primary)"},Wa={flex:"1 1 0%"},za={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},$a={gap:12,fontSize:12,color:"var(--color-text-primary)"},Va={color:"var(--color-text-primary)"},Ga={color:"var(--color-text-primary)",fontWeight:500},ja={color:"var(--color-text-primary)",fontWeight:400,background:"none",border:"none",padding:0,gap:4},Ya={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)"},jn={padding:"4px 10px",fontSize:12,color:"var(--color-text-primary)",background:"transparent",border:"none",borderRadius:4,textAlign:"left"},Xa={...jn,color:"#C7FF2E"};function Ja(e){return utils.formatPriceInUsd(e)}function zn(e){return utils.formatAmount(e)}function $n(e){return e>=1?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e.toString()}var Vn=react.memo(function({price:t,quantity:r,total:s,percentage:n,side:o,onPriceClick:i}){let a=o==="ask",l=react.useMemo(()=>a?{..._a,width:`${n}%`}:{...Ba,width:`${n}%`},[a,n]),u=react.useMemo(()=>i?()=>i(t):void 0,[i,t]);return jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:Ha,onClick:u,children:[jsxRuntime.jsx("div",{className:"absolute left-0 top-0",style:l}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Wa,children:jsxRuntime.jsx("span",{style:a?Qa:Ka,children:Ja(t)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Wn,children:zn(r)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Wn,children:zn(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 Za({spreadPercentage:e,precision:t,precisionOptions:r,onPrecisionChange:s}){let{t:n}=i18n.useTranslation(),[o,i]=react.useState(false),a=react.useRef(null);react.useEffect(()=>{if(!o)return;let u=c=>{a.current?.contains(c.target)||i(false);};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[o]);let l=react.useMemo(()=>({color:"var(--color-text-muted)",transform:o?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s"}),[o]);return jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:za,children:jsxRuntime.jsxs("div",{className:"flex items-center",style:$a,children:[jsxRuntime.jsx("span",{style:Va,children:n("perpetuals.orderbook.spread")}),jsxRuntime.jsxs("div",{ref:a,className:"relative",children:[jsxRuntime.jsxs("button",{type:"button",className:"flex items-center cursor-pointer hover:text-text-primary/80 transition-colors",style:ja,onClick:()=>i(u=>!u),"aria-haspopup":"listbox","aria-expanded":o,children:[jsxRuntime.jsx("span",{children:$n(t)}),jsxRuntime.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",style:l,children:jsxRuntime.jsx("path",{d:"M1 2.5L4 5.5L7 2.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]}),o&&jsxRuntime.jsx("div",{role:"listbox",className:"absolute left-1/2 -translate-x-1/2 z-20 flex flex-col",style:Ya,children:r.map(u=>{let c=u===t;return jsxRuntime.jsx("button",{type:"button",role:"option","aria-selected":c,className:"cursor-pointer transition-colors",style:c?Xa:jn,onMouseEnter:p=>{p.currentTarget.style.backgroundColor="hsl(var(--heroui-foreground) / 0.06)";},onMouseLeave:p=>{p.currentTarget.style.backgroundColor="transparent";},onClick:()=>{s(u),i(false);},children:$n(u)},u)})})]}),jsxRuntime.jsxs("span",{style:Ga,children:[e.toFixed(3),"%"]})]})})}function er({bids:e,asks:t,spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:o,onPriceClick:i}){let{t:a}=i18n.useTranslation(),l=react.useRef(null),u=react.useRef(null),c=react.useRef(true),p=react.useRef(true),d=react.useMemo(()=>[...t].reverse(),[t]);react.useEffect(()=>{let m=l.current;if(!m||!c.current)return;let P=m.scrollHeight;m.scrollTop!==P&&(m.scrollTop=P);},[d]),react.useEffect(()=>{let m=u.current;!m||!p.current||m.scrollTop!==0&&(m.scrollTop=0);},[e]);let f=react.useCallback(()=>{let m=l.current;if(!m)return;let P=m.scrollHeight-m.scrollTop-m.clientHeight;c.current=P<=24;},[]),g=react.useCallback(()=>{let m=u.current;m&&(p.current=m.scrollTop<=24);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:Fa,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:qa,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:ks,children:a("perpetuals.orderbook.col.price")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ks,children:a("perpetuals.orderbook.col.amount")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ks,children:a("perpetuals.orderbook.col.total")})]}),jsxRuntime.jsx("div",{ref:l,onScroll:f,className:"flex-1 min-h-0 overflow-y-auto",style:Kn,children:d.map((m,P)=>jsxRuntime.jsx(Vn,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"ask",onPriceClick:i},`ask-${m.price}-${P}`))}),jsxRuntime.jsx("div",{className:"flex-none",children:jsxRuntime.jsx(Za,{spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:o})}),jsxRuntime.jsx("div",{ref:u,onScroll:g,className:"flex-1 min-h-0 overflow-y-auto",style:Kn,children:e.map((m,P)=>jsxRuntime.jsx(Vn,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"bid",onPriceClick:i},`bid-${m.price}-${P}`))})]})}var Ds=[1,2,5,10,100,1e3],el={backgroundColor:"#000000",fontSize:11},tl={height:28,minHeight:28,padding:"0 16px",gap:16,color:"var(--color-text-muted)",fontSize:11},ot={flex:"1 1 0%"},rl={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16},sl={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"};function nl(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:tl,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:ot,children:e("perpetuals.orderbook.col.price")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ot,children:e("perpetuals.orderbook.col.amount")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ot,children:e("perpetuals.orderbook.col.total")})]})}function Yn({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:rl,children:[jsxRuntime.jsx("div",{style:ot,children:jsxRuntime.jsx("div",{style:{...me(e),height:11,width:56}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:ot,children:jsxRuntime.jsx("div",{style:{...me(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:ot,children:jsxRuntime.jsx("div",{style:{...me(e+60),height:11,width:64}})})]})}function ol(){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(Ae,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:el,children:[jsxRuntime.jsx(nl,{}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(r=>jsxRuntime.jsx(Yn,{delay:r*40},`ask-${r}`))}),jsxRuntime.jsx("div",{className:"flex-none flex items-center justify-center",style:sl,children:jsxRuntime.jsx("div",{style:{...me(0),width:96,height:12}})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:t.map(r=>jsxRuntime.jsx(Yn,{delay:200+r*40},`bid-${r}`))})]})]})}function il(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-text-secondary text-sm",children:e("perpetuals.orderbook.empty")})})}function Jn({symbol:e,maxLevel:t=40,precisionOptions:r=Ds,defaultPrecision:s,onPriceClick:n,className:o}){let i=s??r[0]??1,{bids:a,asks:l,spreadPercentage:u,isLoading:c,precision:p,setPrecision:d}=Jt({symbol:e,maxLevel:t,precision:i});return c?jsxRuntime.jsx(ol,{}):a.length===0&&l.length===0?jsxRuntime.jsx(il,{}):jsxRuntime.jsx("div",{className:o,children:jsxRuntime.jsx(er,{bids:a,asks:l,spreadPercentage:u,precision:p,precisionOptions:r,onPrecisionChange:d,onPriceClick:n})})}var ul=200;function rr({symbol:e,limit:t=50}){let[r,s]=react.useState([]),{data:n,isPending:o}=Mt({symbol:e,limit:t}),{data:i}=Ee({type:"trades",symbol:e,enabled:!!n});react.useEffect(()=>{n&&s(n.filter(Zn));},[n]);let a=react.useRef([]),l=react.useRef(null),u=react.useRef(t);return u.current=t,react.useEffect(()=>{if(!i)return;let c=pl(i);c.length!==0&&(a.current.push(...c),l.current===null&&(l.current=setTimeout(()=>{l.current=null;let p=a.current;a.current=[],p.length!==0&&s(d=>{let f=p.filter(g=>!d.some(m=>m.timestamp===g.timestamp&&m.price===g.price&&m.quantity===g.quantity));return f.length===0?d:[...f.reverse(),...d].slice(0,u.current)});},ul)));},[i]),react.useEffect(()=>()=>{l.current!==null&&(clearTimeout(l.current),l.current=null),a.current=[];},[e]),{trades:r,isLoading:o}}function pl(e){return (Array.isArray(e)?e:[e]).filter(Zn)}function Zn(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 sr=22,eo=28,to=100,ro=120,hl={backgroundColor:"#000000",fontSize:11},xl={height:eo,minHeight:eo,padding:"0 16px",color:"var(--color-text-muted)",fontSize:11},Sl={flex:"1 1 0%",maxWidth:to},vl={flex:"1 1 0%",marginLeft:20},Pl={flex:"1 1 0%",maxWidth:ro,textAlign:"right"},Cl={height:sr,minHeight:sr,maxHeight:sr,padding:"0 16px"},Ol={flex:"1 1 0%",maxWidth:to},kl={flex:"1 1 0%",marginLeft:20,color:"#FCFCFC"},Tl={flex:"1 1 0%",maxWidth:ro,textAlign:"right",color:"#777A8C"},Dl={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bullish))",opacity:.15,pointerEvents:"none"},wl={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bearish))",opacity:.15,pointerEvents:"none"};function El(e){return Number.isFinite(e)?utils.formatPriceInUsd(e):"-"}function Rl(e){return Number.isFinite(e)?utils.formatAmountInUsd(e):"-"}function Al(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 Ul(e){return !Number.isFinite(e)||e<=0?0:Math.max(0,Math.min(100,15*Math.log10(e)-5))}function Il({index:e,style:t,trades:r,onTradeClick:s}){let n=r[e],o=n?.timestamp??Date.now(),i=hooks.useTickAge(o),a=react.useMemo(()=>!n||!Number.isFinite(n.price)||!Number.isFinite(n.quantity)?0:n.price*n.quantity,[n]),l=react.useMemo(()=>({...n?.side==="buy"?Dl:wl,width:`${Ul(a)}%`}),[n,a]);if(!n)return null;let u=n.side==="buy";return jsxRuntime.jsx("div",{style:t,children:jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:Cl,onClick:s?()=>s(n):void 0,children:[jsxRuntime.jsx("div",{style:l}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Ol,children:jsxRuntime.jsx("span",{className:u?"text-positive":"text-negative",children:El(n.price)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:kl,children:Rl(a)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Tl,children:Al(i)})]})})}function nr({trades:e,onTradeClick:t}){let{t:r}=i18n.useTranslation(),s=react.useRef(null),{height:n=0}=hooks.useResizeObserver({ref:s}),o=react.useMemo(()=>({trades:e,onTradeClick:t}),[e,t]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:hl,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:xl,children:[jsxRuntime.jsx("div",{style:Sl,children:r("perpetuals.trades.col.price")}),jsxRuntime.jsx("div",{style:vl,children:r("perpetuals.trades.col.size")}),jsxRuntime.jsx("div",{style:Pl,children:r("perpetuals.trades.col.age")})]}),jsxRuntime.jsx("div",{ref:s,className:"flex-1 min-h-0",children:n>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:n},rowComponent:Il,rowCount:e.length,rowHeight:sr,rowProps:o,overscanCount:4})})]})}var Ml={backgroundColor:"#000000",fontSize:11},Nl={height:28,minHeight:28,padding:"0 16px",color:"var(--color-text-muted)",fontSize:11},no={flex:"1 1 0%",maxWidth:100},oo={flex:"1 1 0%",marginLeft:20},io={flex:"1 1 0%",maxWidth:120,textAlign:"right"},Ll={height:22,minHeight:22,maxHeight:22,padding:"0 16px"};function Fl(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Nl,children:[jsxRuntime.jsx("div",{style:no,children:e("perpetuals.trades.col.price")}),jsxRuntime.jsx("div",{style:oo,children:e("perpetuals.trades.col.size")}),jsxRuntime.jsx("div",{style:io,children:e("perpetuals.trades.col.age")})]})}function ql({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:Ll,children:[jsxRuntime.jsx("div",{style:no,children:jsxRuntime.jsx("div",{style:{...me(e),height:11,width:56}})}),jsxRuntime.jsx("div",{style:oo,children:jsxRuntime.jsx("div",{style:{...me(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:io,children:jsxRuntime.jsx("div",{style:{...me(e+60),height:11,width:28}})})]})}function Hl(){let e=Array.from({length:12},(t,r)=>r);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ae,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:Ml,children:[jsxRuntime.jsx(Fl,{}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(t=>jsxRuntime.jsx(ql,{delay:t*35},`trade-${t}`))})]})]})}function _l(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-text-secondary text-sm",children:e("perpetuals.trades.empty")})})}function ao({symbol:e,limit:t=100,onTradeClick:r,className:s}){let{trades:n,isLoading:o}=rr({symbol:e,limit:t});return o?jsxRuntime.jsx(Hl,{}):n.length===0?jsxRuntime.jsx(_l,{}):jsxRuntime.jsx("div",{className:s,children:jsxRuntime.jsx(nr,{trades:n,onTradeClick:r})})}function lo(e,t){return e==="long"&&t==="tp"||e==="short"&&t==="sl"?1:-1}function uo(e,t,r,s,n){return !Number.isFinite(e)||!t||t<=0||!r||r<=0?void 0:lo(s,n)*(e-t)/t*r*100}function Pt(e,t,r,s,n){if(!Number.isFinite(e)||!t||t<=0||!r||r<=0)return;let o=lo(s,n),i=e/r/100;return t*(1+o*i)}function po(e){if(!Number.isFinite(e)||e<=0)return e;let t=Math.floor(Math.log10(e)),s=10**Math.max(0,4-t);return Math.round(e*s)/s}function co(e){return Number.isFinite(e)?Math.round(e*100)/100:e}var $l=20;function ir({symbol:e,userAddress:t,maxLeverage:r=150,onSuccess:s,onError:n,onUpdateLeverage:o,onPlaceOrder:i}){let[a,l]=react.useState("long"),[u,c]=react.useState("market"),p=reactHookForm.useForm({defaultValues:{amount:void 0,leverage:$l,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:d}=et({symbol:e}),{data:f}=rt({symbol:e}),g=f?.szDecimals,m=f?.maxLeverage??r,{mutateAsync:P,isPending:b}=qt({onSuccess:()=>{p.reset(),s?.();},onError:y=>{n?.(y);}}),S=reactQuery.useMutation({mutationFn:async y=>{if(!i)throw new Error("onPlaceOrder is not configured; cannot submit via host path");return await i(y)},onSuccess:()=>{p.reset(),s?.();},onError:y=>{n?.(y);}}),T=b||S.isPending,x=p.watch(),{amount:D,leverage:H,price:_}=x,M=d?.price||0,h=react.useMemo(()=>u==="limit"&&_?_:M,[u,_,M]),V=react.useMemo(()=>!D||D<=0||!H?0:D*H,[D,H]),re=react.useMemo(()=>V?V*5e-4:0,[V]),L=react.useMemo(()=>V?V+re:0,[V,re]),A=react.useMemo(()=>{if(!D||!h||!H||H===1||!f?.maxLeverage)return;let y=1/(2*f.maxLeverage),C=(1/H-y)/(a==="long"?1-y:1+y);return a==="long"?h*(1-C):h*(1+C)},[D,h,H,a,f?.maxLeverage]),{data:k}=tt({userAddress:t,symbol:e}),W=k?.totalEquity??0,J=k?.availableBalance??0,Ce=react.useMemo(()=>{let y=k?.positions?.[0];if(!y)return;let C=y.symbol.includes("-")?y.symbol.split("-")[0]:y.symbol;return {side:y.side,quantity:y.quantity,quantityRaw:y.quantityRaw,margin:y.margin,base:C}},[k?.positions]),{data:j}=_t({userAddress:t,enabled:!!t}),Oe=react.useMemo(()=>j?.openOrders?.length?j.openOrders.some(y=>y.symbol===e):false,[j?.openOrders,e]),{data:Fe}=Ft({userAddress:t,symbol:e}),Z=Fe?.value,ke=!t||Z!==void 0,te=react.useRef(null);react.useEffect(()=>{te.current!==e&&Z&&Z>0&&(p.setValue("leverage",Z),te.current=e);},[e,Z,p]),react.useEffect(()=>{te.current=null;},[e]),react.useEffect(()=>{if(!(typeof D!="number"||Number.isNaN(D))){if(D<0){p.setValue("amount",void 0,{shouldValidate:false,shouldDirty:false});return}J>0&&D>J&&p.setValue("amount",J,{shouldValidate:false,shouldDirty:true});}},[D,J,p]);let Xe=react.useCallback(async y=>{if(!t)throw new Error("User address is required");if(!y.amount||y.amount<=0)throw new Error("Amount is required");let C=u==="limit"?y.price:void 0,F=y.takeProfitPrice,pe=y.stopLossPrice;if(!F&&y.takeProfitPercent&&y.takeProfitPercent>0&&h&&(F=Pt(y.takeProfitPercent,h,y.leverage,a,"tp")),!pe&&y.stopLossPercent&&y.stopLossPercent>0&&h&&(pe=Pt(y.stopLossPercent,h,y.leverage,a,"sl")),i){if(!h||h<=0)throw new Error("Mark price is unavailable; please retry once the market loads");if(g===void 0)throw new Error("Asset metadata is loading; please retry in a moment");let Je=y.amount*y.leverage/h;await S.mutateAsync({symbol:e,side:a,orderType:u,amount:y.amount,price:C,leverage:y.leverage,takeProfitPrice:F,stopLossPrice:pe,userAddress:t,size:Je,refPrice:h,szDecimals:g});return}await P({symbol:e,side:a,orderType:u,amount:y.amount,price:C,leverage:y.leverage,takeProfitPrice:F,stopLossPrice:pe,userAddress:t});},[e,a,u,h,g,t,i,S,P]);return {form:p,side:a,orderType:u,setSide:l,setOrderType:c,handleSubmit:Xe,isSubmitting:T,currentPrice:h,marketPrice:M,estimatedFee:re,estimatedTotal:L,liquidationPrice:A,availableMargin:J,accountValue:W,currentPosition:Ce,maxLeverage:m,currentLeverage:Z,isLeverageReady:ke,hasOpenOrdersForSymbol:Oe,szDecimals:g,onUpdateLeverage:o}}function So(e){return `${e}x`}var se=ui$1.themeSemanticColors.action.primary,tu=ui$1.themeSemanticColors.market.positive,yo=ui$1.themeSemanticColors.market.negative,go=ui$1.themeSemanticColors.status.danger;function Is(e,t){if(!/^#[0-9a-fA-F]{6}$/.test(e))return e;let r=Math.max(0,Math.min(255,Math.round(t)));return `${e}${r.toString(16).padStart(2,"0").toUpperCase()}`}var ru="https://app.hyperliquid.xyz/coins",su=10;function qs(e){let t=e.replace(/[^\d.]/g,""),r=t.split(".");return r.length>1?`${r[0]}.${r.slice(1).join("")}`:t}var nu={...xs,display:"inline-block",width:28,height:14,borderRadius:4};function bo(e){return utils.formatAmount(e)}function Ms(e){return !Number.isFinite(e)||e<=0?"--":utils.formatPriceInUsd(e)}var Ie=1;function ou(e){let t=Math.max(Ie,Math.floor(e)),r=n=>{let o=Math.round(n);return o<=10?Math.max(Ie,o):Math.round(o/5)*5},s=new Set([Ie,t]);for(let n of [.25,.5,.75]){let o=r(t*n);o>Ie&&o<t&&s.add(o);}return Array.from(s).sort((n,o)=>n-o).map(n=>({value:n,label:`${n}x`}))}function iu({isOpen:e,initialLeverage:t,maxLeverage:r,coinName:s,hasOpenPosition:n,hasOpenOrders:o,onConfirm:i,onUpdate:a,onClose:l}){let u=Math.max(Ie,Math.floor(r)),[c,p]=react.useState(Math.max(Ie,Math.min(t,u))),[d,f]=react.useState(false);react.useEffect(()=>{e&&(p(Math.max(Ie,Math.min(t,u))),f(false));},[e,t,u]);let g=react.useMemo(()=>ou(u),[u]),m=react.useCallback(async()=>{if(!d){if(!a){i(c),l();return}f(true);try{await a(c),i(c),l();}catch{f(false);}}},[d,a,c,i,l]),P=walletConnector.useAuthCallback(m),{t:b}=i18n.useTranslation();return jsxRuntime.jsx(ui$1.StyledModal,{isOpen:e,onOpenChange:S=>{d||S||l();},size:"md",hideCloseButton:true,backdrop:"opaque",classNames:{base:`${ui$1.THEMED_MODAL_BASE_CLASS} 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-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-base font-semibold text-text-primary m-0",children:b("perpetuals.placeOrder.leverage.title")}),jsxRuntime.jsx("button",{type:"button",onClick:l,disabled:d,"aria-label":b("common.cancel"),className:"p-1 rounded-[10px] hover:bg-surface-strong/50 text-text-secondary hover:text-text-primary transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",children:jsxRuntime.jsx(ui$1.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-2 flex flex-col gap-4",children:[jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[n?jsxRuntime.jsx("p",{className:"text-[13px] leading-[18px] m-0",style:{color:go},children:b("perpetuals.placeOrder.leverage.cannotUpdate",{symbol:s})}):jsxRuntime.jsx("p",{className:"text-[13px] text-text-secondary leading-[18px] m-0",children:b("perpetuals.placeOrder.leverage.desc")}),o&&jsxRuntime.jsx("p",{className:"text-[13px] leading-[18px] m-0",style:{color:go},children:b("perpetuals.placeOrder.leverage.ordersAffected",{symbol:s})})]}),jsxRuntime.jsxs("div",{className:"perp-leverage-slider",style:{padding:"8px 6px 4px"},children:[jsxRuntime.jsx("style",{children:`
3
+ `;function Ae(){return jsxRuntime.jsx("style",{children:ba})}var xs={backgroundColor:"rgba(255, 255, 255, 0.16)",backgroundImage:"linear-gradient(90deg, rgba(255,255,255,0) 25%, rgba(255,255,255,0.18) 50%, rgba(255,255,255,0) 75%)",backgroundSize:"200% 100%",animation:`${En} 1.8s ease-in-out infinite`,borderRadius:6};function me(e){return {...xs,animationDelay:`${e}ms`}}function Vt(){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ae,{}),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:We(0,84,23)}),jsxRuntime.jsx("div",{style:We(60,52,16)})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsx(Ss,{labelWidth:72,valueWidth:64,delay:120}),jsxRuntime.jsx(Ss,{labelWidth:72,valueWidth:48,delay:180}),jsxRuntime.jsx(Ss,{labelWidth:84,valueWidth:56,delay:240}),jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:We(300,132,16)}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsx("div",{style:We(330,64,17)}),jsxRuntime.jsx("div",{style:We(360,64,17)})]})]})]})]})]})}function Ss({labelWidth:e,valueWidth:t,delay:r}){return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{gap:4},children:[jsxRuntime.jsx("div",{style:We(r,e,16)}),jsxRuntime.jsx("div",{style:We(r+30,t,17)})]})}function We(e,t,r){return {...me(e),width:t,height:r}}function Gt(e){let[t,r]=react.useState(),[s,n]=react.useState(0),{data:o,isPending:i}=et({symbol:e}),{data:a}=Ee({type:"ticker",symbol:e,enabled:!!o});return react.useEffect(()=>{o&&r(o);},[o]),react.useEffect(()=>{if(!a)return;let l=Sa(a,e);l&&r(u=>va(u??o??void 0,l,e));},[a,o,e]),react.useEffect(()=>{let l=()=>{let c=Date.now(),p=3600*1e3,d=c%p,f=p-d;return Math.floor(f/1e3)};n(l());let u=setInterval(()=>{n(l());},1e3);return ()=>clearInterval(u)},[]),{marketData:t,isLoading:i,fundingCountdown:s}}function Sa(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 nt(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function va(e,t,r){return {symbol:t.symbol??e?.symbol??r,price:nt(t.price,e?.price??0),change24h:nt(t.change24h,e?.change24h??0),volume24h:nt(t.volume24h,e?.volume24h??0),fundingRate:nt(t.fundingRate,e?.fundingRate??0),openInterest:nt(t.openInterest,e?.openInterest??0),markPrice:nt(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 ka(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 An(e){return typeof e!="number"||!Number.isFinite(e)?"-":utils.formatAmountInUsd(e)}function Un(e){return typeof e!="number"||!Number.isFinite(e)?"-":utils.formatPriceInUsd(e)}function jt({marketData:e,fundingCountdown:t}){let{t:r}=i18n.useTranslation(),{price:s,change24h:n,indexPrice:o,volume24h:i,openInterest:a,fundingRate:l}=e,u=typeof n=="number"&&Number.isFinite(n)?n:0,c=typeof l=="number"&&Number.isFinite(l)?l:0,p=u>=0,d=u.toFixed(2);return jsxRuntime.jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:24},children:[jsxRuntime.jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsxRuntime.jsx("span",{style:{fontSize:18,fontWeight:500,lineHeight:"23px",letterSpacing:"-0.36px",color:"var(--color-text-primary)"},children:Un(s)}),jsxRuntime.jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:p?"var(--color-positive)":"var(--color-negative)"},children:[p?"+":"",d,"%"]})]}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:24},children:[jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.oraclePrice")}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"var(--color-text-primary)"},children:o?Un(o):"-"})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.volume24h")}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"var(--color-text-primary)"},children:An(i)})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.openInterest")}),jsxRuntime.jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"var(--color-text-primary)"},children:An(a*(e.markPrice||s))})]}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-secondary)",lineHeight:"16px",letterSpacing:"-0.12px"},children:r("perpetuals.coinInfo.funding")}),jsxRuntime.jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxRuntime.jsxs("span",{style:{fontSize:13,lineHeight:"17px",color:c>=0?"var(--color-positive)":"var(--color-negative)"},children:[(c*100).toFixed(5),"%"]}),jsxRuntime.jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"var(--color-text-primary)"},children:ka(t)})]})]})]})]})}function In({symbol:e}){let{marketData:t,isLoading:r,fundingCountdown:s}=Gt(e);return r?jsxRuntime.jsx(Vt,{}):t?jsxRuntime.jsx(jt,{marketData:t,fundingCountdown:s}):jsxRuntime.jsx($t,{})}function Yt({onSelectCoin:e}={}){let[t,r]=react.useState(""),[s,n]=react.useState([]),{data:o,isPending:i}=Et(),{data:a,isPending:l}=Ut({symbols:o},{enabled:!!o&&o.length>0});react.useEffect(()=>{a&&n(a);},[a]);let u=react.useMemo(()=>{if(!t.trim())return s;let p=t.toLowerCase().trim();return s.filter(d=>d.symbol.toLowerCase().includes(p))},[s,t]);return {coins:s,isLoading:i||l,searchQuery:t,setSearchQuery:r,filteredCoins:u,handleSelectCoin:p=>{e?.(p);}}}function Nn(e){return utils.formatAmountInUsd(e)}function Ua(e){return utils.formatPriceInUsd(e)}function Xt({coins:e,searchQuery:t,onSearchChange:r,onSelectCoin:s,isLoading:n}){let{t:o}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex flex-col",style:{backgroundColor:"var(--color-surface-raised)",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 var(--color-border-control)",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:"var(--color-text-muted)"}}),jsxRuntime.jsx("input",{type:"text",placeholder:o("perpetuals.searchCoins.placeholder"),value:t,onChange:i=>r(i.target.value),className:"flex-1 bg-transparent outline-none",style:{fontSize:12,color:"var(--color-text-primary)",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 var(--color-border-subtle)",position:"sticky",top:0,backgroundColor:"var(--color-surface-raised)",zIndex:1},children:[jsxRuntime.jsx("span",{style:{flex:"0 0 140px",fontSize:12,color:"var(--color-text-muted)"},children:o("perpetuals.searchCoins.col.token")}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.lastPrice")}),jsxRuntime.jsx("span",{style:{flex:"0 0 120px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.change24h")}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.funding8h")}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.volume24h")}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"var(--color-text-muted)",textAlign:"right"},children:o("perpetuals.searchCoins.col.openInterest")})]}),n?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-muted)"},children:o("perpetuals.searchCoins.loading")})}):e.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsxRuntime.jsx("span",{style:{fontSize:12,color:"var(--color-text-muted)"},children:o(t?"perpetuals.searchCoins.noCoins":"perpetuals.searchCoins.noCoinsAvailable")})}):e.map(i=>{let a=i.change24h>=0,l=i.change24h.toFixed(2),u=(i.fundingRate*100).toFixed(4),c=i.fundingRate>=0,p=i.symbol.split("-")[0];return jsxRuntime.jsxs("div",{className:"flex items-center cursor-pointer transition-colors",style:{height:36,padding:"0 16px",borderBottom:"1px solid var(--color-border-subtle)"},onClick:()=>s(i.symbol),onMouseEnter:d=>{d.currentTarget.style.backgroundColor="hsl(var(--heroui-foreground) / 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/${p}.svg`,alt:p,className:"rounded-full",style:{width:20,height:20},onError:d=>{let f=d.target;f.style.display="none";}}),jsxRuntime.jsx("span",{style:{fontSize:12,fontWeight:500,color:"var(--color-text-primary)"},children:p})]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-primary)",textAlign:"right"},children:Ua(i.price)}),jsxRuntime.jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:a?"var(--color-positive)":"var(--color-negative)",textAlign:"right"},children:[a?"+":"",l,"%"]}),jsxRuntime.jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:c?"var(--color-positive)":"var(--color-negative)",textAlign:"right"},children:[u,"%"]}),jsxRuntime.jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"var(--color-text-secondary)",textAlign:"right"},children:Nn(i.volume24h)}),jsxRuntime.jsx("span",{style:{flex:"1",fontSize:12,color:"var(--color-text-secondary)",textAlign:"right"},children:Nn(i.openInterest*i.price)})]},i.symbol)})]})]})}function Fn({onSelectCoin:e,className:t}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:o,handleSelectCoin:i}=Yt({onSelectCoin:e});return jsxRuntime.jsx("div",{className:t,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsxRuntime.jsx(Xt,{coins:r,searchQuery:n,onSearchChange:o,onSelectCoin:i,isLoading:s})})}function Os(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,o=null;for(let i of s)i.step<=t+n&&(!o||i.step>o.step)&&(o=i);return o?o.mantissa&&o.mantissa!==1?{nSigFigs:o.nSigFigs,mantissa:o.mantissa}:{nSigFigs:o.nSigFigs}:{nSigFigs:5}}function _n(e,t,r){if(t<=0)return e;let s=new Map,n=r==="ask"?Math.ceil:Math.floor;return e.forEach(o=>{let i=n(o.price/t)*t,a=s.get(i);a?(a.quantity+=o.quantity,o.count&&(a.count=(a.count||0)+o.count)):s.set(i,{price:i,quantity:o.quantity,count:o.count});}),Array.from(s.values())}function Bn(e){let t=0,r=e.map(n=>{let o=n.quantity*n.price;return t+=o,{...n,quantity:o,total:t,percentage:0}}),s=t;return r.map(n=>({...n,percentage:s>0?n.total/s*100:0}))}function Jt({symbol:e,maxLevel:t=20,precision:r=1}){let[s,n]=react.useState(null),[o,i]=react.useState(r);react.useEffect(()=>{i(r);},[r]);let{data:a,isPending:l}=It({symbol:e,maxLevel:t}),u=react.useMemo(()=>{let f=s?.bids[0]?.price??a?.bids[0]?.price,g=s?.asks[0]?.price??a?.asks[0]?.price,m=f&&g?(f+g)/2:g??f??0;return m>0?Math.floor(Math.log10(m)):null},[s,a]),c=react.useMemo(()=>{if(u===null)return;let f=Math.pow(10,u);return Os(f,o)},[o,u]),{data:p}=Ee({type:"orderBook",symbol:e,enabled:!!a,aggregation:c,throttleMs:100});return react.useEffect(()=>{p?n(p):a&&n(a);},[p,a]),{...react.useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let f=_n(s.bids,o,"bid"),g=_n(s.asks,o,"ask"),m=f.sort((_,M)=>M.price-_.price).slice(0,t),P=g.sort((_,M)=>_.price-M.price).slice(0,t),b=Bn(m),S=Bn(P),T=b[0]?.price||0,D=(S[0]?.price||0)-T,H=T>0?D/T*100:0;return {bids:b,asks:S,spread:D,spreadPercentage:H}},[s,o,t]),isLoading:l,precision:o,setPrecision:i}}var Kn={scrollbarWidth:"thin",scrollbarColor:"rgba(63,63,70,0.6) transparent"},Fa={backgroundColor:"#000000",fontSize:11},qa={height:28,minHeight:28,padding:"0 16px",gap:16,color:"var(--color-text-muted)",fontSize:11},ks={flex:"1 1 0%"},Ha={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},_a={height:20,background:"linear-gradient(to right, rgba(247,104,22,0), #F76816)",opacity:.15},Ba={height:20,background:"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15},Qa={color:"#F76816",fontWeight:400},Ka={color:"#C7FF2E",fontWeight:400},Wn={flex:"1 1 0%",color:"var(--color-text-primary)"},Wa={flex:"1 1 0%"},za={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},$a={gap:12,fontSize:12,color:"var(--color-text-primary)"},Va={color:"var(--color-text-primary)"},Ga={color:"var(--color-text-primary)",fontWeight:500},ja={color:"var(--color-text-primary)",fontWeight:400,background:"none",border:"none",padding:0,gap:4},Ya={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)"},jn={padding:"4px 10px",fontSize:12,color:"var(--color-text-primary)",background:"transparent",border:"none",borderRadius:4,textAlign:"left"},Xa={...jn,color:"#C7FF2E"};function Ja(e){return utils.formatPriceInUsd(e)}function zn(e){return utils.formatAmount(e)}function $n(e){return e>=1?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e.toString()}var Vn=react.memo(function({price:t,quantity:r,total:s,percentage:n,side:o,onPriceClick:i}){let a=o==="ask",l=react.useMemo(()=>a?{..._a,width:`${n}%`}:{...Ba,width:`${n}%`},[a,n]),u=react.useMemo(()=>i?()=>i(t):void 0,[i,t]);return jsxRuntime.jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:Ha,onClick:u,children:[jsxRuntime.jsx("div",{className:"absolute left-0 top-0",style:l}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Wa,children:jsxRuntime.jsx("span",{style:a?Qa:Ka,children:Ja(t)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Wn,children:zn(r)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Wn,children:zn(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 Za({spreadPercentage:e,precision:t,precisionOptions:r,onPrecisionChange:s}){let{t:n}=i18n.useTranslation(),[o,i]=react.useState(false),a=react.useRef(null);react.useEffect(()=>{if(!o)return;let u=c=>{a.current?.contains(c.target)||i(false);};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[o]);let l=react.useMemo(()=>({color:"var(--color-text-muted)",transform:o?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s"}),[o]);return jsxRuntime.jsx("div",{className:"flex items-center justify-center",style:za,children:jsxRuntime.jsxs("div",{className:"flex items-center",style:$a,children:[jsxRuntime.jsx("span",{style:Va,children:n("perpetuals.orderbook.spread")}),jsxRuntime.jsxs("div",{ref:a,className:"relative",children:[jsxRuntime.jsxs("button",{type:"button",className:"flex items-center cursor-pointer hover:text-text-primary/80 transition-colors",style:ja,onClick:()=>i(u=>!u),"aria-haspopup":"listbox","aria-expanded":o,children:[jsxRuntime.jsx("span",{children:$n(t)}),jsxRuntime.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",style:l,children:jsxRuntime.jsx("path",{d:"M1 2.5L4 5.5L7 2.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]}),o&&jsxRuntime.jsx("div",{role:"listbox",className:"absolute left-1/2 -translate-x-1/2 z-20 flex flex-col",style:Ya,children:r.map(u=>{let c=u===t;return jsxRuntime.jsx("button",{type:"button",role:"option","aria-selected":c,className:"cursor-pointer transition-colors",style:c?Xa:jn,onMouseEnter:p=>{p.currentTarget.style.backgroundColor="hsl(var(--heroui-foreground) / 0.06)";},onMouseLeave:p=>{p.currentTarget.style.backgroundColor="transparent";},onClick:()=>{s(u),i(false);},children:$n(u)},u)})})]}),jsxRuntime.jsxs("span",{style:Ga,children:[e.toFixed(3),"%"]})]})})}function er({bids:e,asks:t,spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:o,onPriceClick:i}){let{t:a}=i18n.useTranslation(),l=react.useRef(null),u=react.useRef(null),c=react.useRef(true),p=react.useRef(true),d=react.useMemo(()=>[...t].reverse(),[t]);react.useEffect(()=>{let m=l.current;if(!m||!c.current)return;let P=m.scrollHeight;m.scrollTop!==P&&(m.scrollTop=P);},[d]),react.useEffect(()=>{let m=u.current;!m||!p.current||m.scrollTop!==0&&(m.scrollTop=0);},[e]);let f=react.useCallback(()=>{let m=l.current;if(!m)return;let P=m.scrollHeight-m.scrollTop-m.clientHeight;c.current=P<=24;},[]),g=react.useCallback(()=>{let m=u.current;m&&(p.current=m.scrollTop<=24);},[]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:Fa,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:qa,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:ks,children:a("perpetuals.orderbook.col.price")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ks,children:a("perpetuals.orderbook.col.amount")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ks,children:a("perpetuals.orderbook.col.total")})]}),jsxRuntime.jsx("div",{ref:l,onScroll:f,className:"flex-1 min-h-0 overflow-y-auto",style:Kn,children:d.map((m,P)=>jsxRuntime.jsx(Vn,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"ask",onPriceClick:i},`ask-${m.price}-${P}`))}),jsxRuntime.jsx("div",{className:"flex-none",children:jsxRuntime.jsx(Za,{spreadPercentage:r,precision:s,precisionOptions:n,onPrecisionChange:o})}),jsxRuntime.jsx("div",{ref:u,onScroll:g,className:"flex-1 min-h-0 overflow-y-auto",style:Kn,children:e.map((m,P)=>jsxRuntime.jsx(Vn,{price:m.price,quantity:m.quantity,total:m.total,percentage:m.percentage,side:"bid",onPriceClick:i},`bid-${m.price}-${P}`))})]})}var Ds=[1,2,5,10,100,1e3],el={backgroundColor:"#000000",fontSize:11},tl={height:28,minHeight:28,padding:"0 16px",gap:16,color:"var(--color-text-muted)",fontSize:11},ot={flex:"1 1 0%"},rl={height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16},sl={height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"};function nl(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:tl,children:[jsxRuntime.jsx("div",{className:"flex items-center",style:ot,children:e("perpetuals.orderbook.col.price")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ot,children:e("perpetuals.orderbook.col.amount")}),jsxRuntime.jsx("div",{className:"flex items-center justify-end",style:ot,children:e("perpetuals.orderbook.col.total")})]})}function Yn({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:rl,children:[jsxRuntime.jsx("div",{style:ot,children:jsxRuntime.jsx("div",{style:{...me(e),height:11,width:56}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:ot,children:jsxRuntime.jsx("div",{style:{...me(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:ot,children:jsxRuntime.jsx("div",{style:{...me(e+60),height:11,width:64}})})]})}function ol(){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(Ae,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full min-h-0",style:el,children:[jsxRuntime.jsx(nl,{}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(r=>jsxRuntime.jsx(Yn,{delay:r*40},`ask-${r}`))}),jsxRuntime.jsx("div",{className:"flex-none flex items-center justify-center",style:sl,children:jsxRuntime.jsx("div",{style:{...me(0),width:96,height:12}})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:t.map(r=>jsxRuntime.jsx(Yn,{delay:200+r*40},`bid-${r}`))})]})]})}function il(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-text-secondary text-sm",children:e("perpetuals.orderbook.empty")})})}function Jn({symbol:e,maxLevel:t=40,precisionOptions:r=Ds,defaultPrecision:s,onPriceClick:n,className:o}){let i=s??r[0]??1,{bids:a,asks:l,spreadPercentage:u,isLoading:c,precision:p,setPrecision:d}=Jt({symbol:e,maxLevel:t,precision:i});return c?jsxRuntime.jsx(ol,{}):a.length===0&&l.length===0?jsxRuntime.jsx(il,{}):jsxRuntime.jsx("div",{className:o,children:jsxRuntime.jsx(er,{bids:a,asks:l,spreadPercentage:u,precision:p,precisionOptions:r,onPrecisionChange:d,onPriceClick:n})})}var ul=200;function rr({symbol:e,limit:t=50}){let[r,s]=react.useState([]),{data:n,isPending:o}=Mt({symbol:e,limit:t}),{data:i}=Ee({type:"trades",symbol:e,enabled:!!n});react.useEffect(()=>{n&&s(n.filter(Zn));},[n]);let a=react.useRef([]),l=react.useRef(null),u=react.useRef(t);return u.current=t,react.useEffect(()=>{if(!i)return;let c=pl(i);c.length!==0&&(a.current.push(...c),l.current===null&&(l.current=setTimeout(()=>{l.current=null;let p=a.current;a.current=[],p.length!==0&&s(d=>{let f=p.filter(g=>!d.some(m=>m.timestamp===g.timestamp&&m.price===g.price&&m.quantity===g.quantity));return f.length===0?d:[...f.reverse(),...d].slice(0,u.current)});},ul)));},[i]),react.useEffect(()=>()=>{l.current!==null&&(clearTimeout(l.current),l.current=null),a.current=[];},[e]),{trades:r,isLoading:o}}function pl(e){return (Array.isArray(e)?e:[e]).filter(Zn)}function Zn(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 sr=22,eo=28,to=100,ro=120,xl={backgroundColor:"#000000",fontSize:11},Sl={height:eo,minHeight:eo,padding:"0 16px",color:"var(--color-text-muted)",fontSize:11},vl={flex:"1 1 0%",maxWidth:to},Pl={flex:"1 1 0%",marginLeft:20},Cl={flex:"1 1 0%",maxWidth:ro,textAlign:"right"},Ol={height:sr,minHeight:sr,maxHeight:sr,padding:"0 16px"},kl={flex:"1 1 0%",maxWidth:to},Tl={flex:"1 1 0%",marginLeft:20,color:"#FCFCFC"},Dl={flex:"1 1 0%",maxWidth:ro,textAlign:"right",color:"#777A8C"},wl={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bullish))",opacity:.15,pointerEvents:"none"},El={position:"absolute",left:0,top:0,height:20,background:"linear-gradient(to right, transparent, var(--color-bearish))",opacity:.15,pointerEvents:"none"};function Rl(e){return Number.isFinite(e)?utils.formatPriceInUsd(e):"-"}function Al(e){return Number.isFinite(e)?utils.formatAmountInUsd(e):"-"}function Ul(e){return !Number.isFinite(e)||e<=0?0:Math.max(0,Math.min(100,15*Math.log10(e)-5))}function Il({index:e,style:t,trades:r,onTradeClick:s}){let{formatAge:n}=i18n.useLocalizedTimeFormatter(),o=r[e],i=o?.timestamp??Date.now(),a=hooks.useTickAge(i),l=react.useMemo(()=>!o||!Number.isFinite(o.price)||!Number.isFinite(o.quantity)?0:o.price*o.quantity,[o]),u=react.useMemo(()=>({...o?.side==="buy"?wl:El,width:`${Ul(l)}%`}),[o,l]);if(!o)return null;let c=o.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:Ol,onClick:s?()=>s(o):void 0,children:[jsxRuntime.jsx("div",{style:u}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:kl,children:jsxRuntime.jsx("span",{className:c?"text-positive":"text-negative",children:Rl(o.price)})}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center",style:Tl,children:Al(l)}),jsxRuntime.jsx("div",{className:"relative z-10 flex items-center justify-end",style:Dl,children:n(a)})]})})}function nr({trades:e,onTradeClick:t}){let{t:r}=i18n.useTranslation(),s=react.useRef(null),{height:n=0}=hooks.useResizeObserver({ref:s}),o=react.useMemo(()=>({trades:e,onTradeClick:t}),[e,t]);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:xl,children:[jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Sl,children:[jsxRuntime.jsx("div",{style:vl,children:r("perpetuals.trades.col.price")}),jsxRuntime.jsx("div",{style:Pl,children:r("perpetuals.trades.col.size")}),jsxRuntime.jsx("div",{style:Cl,children:r("perpetuals.trades.col.age")})]}),jsxRuntime.jsx("div",{ref:s,className:"flex-1 min-h-0",children:n>0&&jsxRuntime.jsx(reactWindow.List,{style:{height:n},rowComponent:Il,rowCount:e.length,rowHeight:sr,rowProps:o,overscanCount:4})})]})}var Ml={backgroundColor:"#000000",fontSize:11},Nl={height:28,minHeight:28,padding:"0 16px",color:"var(--color-text-muted)",fontSize:11},no={flex:"1 1 0%",maxWidth:100},oo={flex:"1 1 0%",marginLeft:20},io={flex:"1 1 0%",maxWidth:120,textAlign:"right"},Ll={height:22,minHeight:22,maxHeight:22,padding:"0 16px"};function Fl(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:"flex items-center flex-none",style:Nl,children:[jsxRuntime.jsx("div",{style:no,children:e("perpetuals.trades.col.price")}),jsxRuntime.jsx("div",{style:oo,children:e("perpetuals.trades.col.size")}),jsxRuntime.jsx("div",{style:io,children:e("perpetuals.trades.col.age")})]})}function ql({delay:e}){return jsxRuntime.jsxs("div",{className:"flex items-center",style:Ll,children:[jsxRuntime.jsx("div",{style:no,children:jsxRuntime.jsx("div",{style:{...me(e),height:11,width:56}})}),jsxRuntime.jsx("div",{style:oo,children:jsxRuntime.jsx("div",{style:{...me(e+30),height:11,width:64}})}),jsxRuntime.jsx("div",{className:"flex justify-end",style:io,children:jsxRuntime.jsx("div",{style:{...me(e+60),height:11,width:28}})})]})}function Hl(){let e=Array.from({length:12},(t,r)=>r);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ae,{}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full",style:Ml,children:[jsxRuntime.jsx(Fl,{}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.map(t=>jsxRuntime.jsx(ql,{delay:t*35},`trade-${t}`))})]})]})}function _l(){let{t:e}=i18n.useTranslation();return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("span",{className:"text-text-secondary text-sm",children:e("perpetuals.trades.empty")})})}function ao({symbol:e,limit:t=100,onTradeClick:r,className:s}){let{trades:n,isLoading:o}=rr({symbol:e,limit:t});return o?jsxRuntime.jsx(Hl,{}):n.length===0?jsxRuntime.jsx(_l,{}):jsxRuntime.jsx("div",{className:s,children:jsxRuntime.jsx(nr,{trades:n,onTradeClick:r})})}function lo(e,t){return e==="long"&&t==="tp"||e==="short"&&t==="sl"?1:-1}function uo(e,t,r,s,n){return !Number.isFinite(e)||!t||t<=0||!r||r<=0?void 0:lo(s,n)*(e-t)/t*r*100}function Pt(e,t,r,s,n){if(!Number.isFinite(e)||!t||t<=0||!r||r<=0)return;let o=lo(s,n),i=e/r/100;return t*(1+o*i)}function po(e){if(!Number.isFinite(e)||e<=0)return e;let t=Math.floor(Math.log10(e)),s=10**Math.max(0,4-t);return Math.round(e*s)/s}function co(e){return Number.isFinite(e)?Math.round(e*100)/100:e}var $l=20;function ir({symbol:e,userAddress:t,maxLeverage:r=150,onSuccess:s,onError:n,onUpdateLeverage:o,onPlaceOrder:i}){let[a,l]=react.useState("long"),[u,c]=react.useState("market"),p=reactHookForm.useForm({defaultValues:{amount:void 0,leverage:$l,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:d}=et({symbol:e}),{data:f}=rt({symbol:e}),g=f?.szDecimals,m=f?.maxLeverage??r,{mutateAsync:P,isPending:b}=qt({onSuccess:()=>{p.reset(),s?.();},onError:y=>{n?.(y);}}),S=reactQuery.useMutation({mutationFn:async y=>{if(!i)throw new Error("onPlaceOrder is not configured; cannot submit via host path");return await i(y)},onSuccess:()=>{p.reset(),s?.();},onError:y=>{n?.(y);}}),T=b||S.isPending,x=p.watch(),{amount:D,leverage:H,price:_}=x,M=d?.price||0,h=react.useMemo(()=>u==="limit"&&_?_:M,[u,_,M]),V=react.useMemo(()=>!D||D<=0||!H?0:D*H,[D,H]),re=react.useMemo(()=>V?V*5e-4:0,[V]),L=react.useMemo(()=>V?V+re:0,[V,re]),A=react.useMemo(()=>{if(!D||!h||!H||H===1||!f?.maxLeverage)return;let y=1/(2*f.maxLeverage),C=(1/H-y)/(a==="long"?1-y:1+y);return a==="long"?h*(1-C):h*(1+C)},[D,h,H,a,f?.maxLeverage]),{data:k}=tt({userAddress:t,symbol:e}),W=k?.totalEquity??0,J=k?.availableBalance??0,Ce=react.useMemo(()=>{let y=k?.positions?.[0];if(!y)return;let C=y.symbol.includes("-")?y.symbol.split("-")[0]:y.symbol;return {side:y.side,quantity:y.quantity,quantityRaw:y.quantityRaw,margin:y.margin,base:C}},[k?.positions]),{data:j}=_t({userAddress:t,enabled:!!t}),Oe=react.useMemo(()=>j?.openOrders?.length?j.openOrders.some(y=>y.symbol===e):false,[j?.openOrders,e]),{data:Fe}=Ft({userAddress:t,symbol:e}),Z=Fe?.value,ke=!t||Z!==void 0,te=react.useRef(null);react.useEffect(()=>{te.current!==e&&Z&&Z>0&&(p.setValue("leverage",Z),te.current=e);},[e,Z,p]),react.useEffect(()=>{te.current=null;},[e]),react.useEffect(()=>{if(!(typeof D!="number"||Number.isNaN(D))){if(D<0){p.setValue("amount",void 0,{shouldValidate:false,shouldDirty:false});return}J>0&&D>J&&p.setValue("amount",J,{shouldValidate:false,shouldDirty:true});}},[D,J,p]);let Xe=react.useCallback(async y=>{if(!t)throw new Error("User address is required");if(!y.amount||y.amount<=0)throw new Error("Amount is required");let C=u==="limit"?y.price:void 0,F=y.takeProfitPrice,pe=y.stopLossPrice;if(!F&&y.takeProfitPercent&&y.takeProfitPercent>0&&h&&(F=Pt(y.takeProfitPercent,h,y.leverage,a,"tp")),!pe&&y.stopLossPercent&&y.stopLossPercent>0&&h&&(pe=Pt(y.stopLossPercent,h,y.leverage,a,"sl")),i){if(!h||h<=0)throw new Error("Mark price is unavailable; please retry once the market loads");if(g===void 0)throw new Error("Asset metadata is loading; please retry in a moment");let Je=y.amount*y.leverage/h;await S.mutateAsync({symbol:e,side:a,orderType:u,amount:y.amount,price:C,leverage:y.leverage,takeProfitPrice:F,stopLossPrice:pe,userAddress:t,size:Je,refPrice:h,szDecimals:g});return}await P({symbol:e,side:a,orderType:u,amount:y.amount,price:C,leverage:y.leverage,takeProfitPrice:F,stopLossPrice:pe,userAddress:t});},[e,a,u,h,g,t,i,S,P]);return {form:p,side:a,orderType:u,setSide:l,setOrderType:c,handleSubmit:Xe,isSubmitting:T,currentPrice:h,marketPrice:M,estimatedFee:re,estimatedTotal:L,liquidationPrice:A,availableMargin:J,accountValue:W,currentPosition:Ce,maxLeverage:m,currentLeverage:Z,isLeverageReady:ke,hasOpenOrdersForSymbol:Oe,szDecimals:g,onUpdateLeverage:o}}function So(e){return `${e}x`}var se=ui$1.themeSemanticColors.action.primary,tu=ui$1.themeSemanticColors.market.positive,yo=ui$1.themeSemanticColors.market.negative,go=ui$1.themeSemanticColors.status.danger;function Is(e,t){if(!/^#[0-9a-fA-F]{6}$/.test(e))return e;let r=Math.max(0,Math.min(255,Math.round(t)));return `${e}${r.toString(16).padStart(2,"0").toUpperCase()}`}var ru="https://app.hyperliquid.xyz/coins",su=10;function qs(e){let t=e.replace(/[^\d.]/g,""),r=t.split(".");return r.length>1?`${r[0]}.${r.slice(1).join("")}`:t}var nu={...xs,display:"inline-block",width:28,height:14,borderRadius:4};function bo(e){return utils.formatAmount(e)}function Ms(e){return !Number.isFinite(e)||e<=0?"--":utils.formatPriceInUsd(e)}var Ie=1;function ou(e){let t=Math.max(Ie,Math.floor(e)),r=n=>{let o=Math.round(n);return o<=10?Math.max(Ie,o):Math.round(o/5)*5},s=new Set([Ie,t]);for(let n of [.25,.5,.75]){let o=r(t*n);o>Ie&&o<t&&s.add(o);}return Array.from(s).sort((n,o)=>n-o).map(n=>({value:n,label:`${n}x`}))}function iu({isOpen:e,initialLeverage:t,maxLeverage:r,coinName:s,hasOpenPosition:n,hasOpenOrders:o,onConfirm:i,onUpdate:a,onClose:l}){let u=Math.max(Ie,Math.floor(r)),[c,p]=react.useState(Math.max(Ie,Math.min(t,u))),[d,f]=react.useState(false);react.useEffect(()=>{e&&(p(Math.max(Ie,Math.min(t,u))),f(false));},[e,t,u]);let g=react.useMemo(()=>ou(u),[u]),m=react.useCallback(async()=>{if(!d){if(!a){i(c),l();return}f(true);try{await a(c),i(c),l();}catch{f(false);}}},[d,a,c,i,l]),P=walletConnector.useAuthCallback(m),{t:b}=i18n.useTranslation();return jsxRuntime.jsx(ui$1.StyledModal,{isOpen:e,onOpenChange:S=>{d||S||l();},size:"md",hideCloseButton:true,backdrop:"opaque",classNames:{base:`${ui$1.THEMED_MODAL_BASE_CLASS} 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-center justify-between px-5 pt-5 pb-2",children:[jsxRuntime.jsx("h3",{className:"text-base font-semibold text-text-primary m-0",children:b("perpetuals.placeOrder.leverage.title")}),jsxRuntime.jsx("button",{type:"button",onClick:l,disabled:d,"aria-label":b("common.cancel"),className:"p-1 rounded-[10px] hover:bg-surface-strong/50 text-text-secondary hover:text-text-primary transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",children:jsxRuntime.jsx(ui$1.XCloseIcon,{width:16,height:16})})]}),jsxRuntime.jsxs("div",{className:"px-5 pb-5 pt-2 flex flex-col gap-4",children:[jsxRuntime.jsxs("div",{className:"flex flex-col gap-1",children:[n?jsxRuntime.jsx("p",{className:"text-[13px] leading-[18px] m-0",style:{color:go},children:b("perpetuals.placeOrder.leverage.cannotUpdate",{symbol:s})}):jsxRuntime.jsx("p",{className:"text-[13px] text-text-secondary leading-[18px] m-0",children:b("perpetuals.placeOrder.leverage.desc")}),o&&jsxRuntime.jsx("p",{className:"text-[13px] leading-[18px] m-0",style:{color:go},children:b("perpetuals.placeOrder.leverage.ordersAffected",{symbol:s})})]}),jsxRuntime.jsxs("div",{className:"perp-leverage-slider",style:{padding:"8px 6px 4px"},children:[jsxRuntime.jsx("style",{children:`
4
4
  .perp-leverage-slider [data-slot="track"] { background-color: hsl(var(--heroui-foreground) / 0.08) !important; }
5
5
  .perp-leverage-slider [data-slot="filler"] { background-color: ${se} !important; }
6
6
  .perp-leverage-slider [data-slot="thumb"] { background-color: ${se} !important; }