@liberfi.io/ui-perpetuals 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import {createContext,useMemo,useContext,useState,useCallback,useEffect,useReducer,useRef}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useQuery,useMutation}from'@tanstack/react-query';import {Skeleton,SearchIcon,RHForm,RHNumberInput,cn as cn$1,Button,Modal,ModalContent,ModalHeader,ModalBody,Spinner,ModalFooter,Input,Card,CardBody,CardHeader,CardFooter,Slider}from'@liberfi.io/ui';import {useForm}from'react-hook-form';import {useTranslation}from'@liberfi.io/i18n';typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-perpetuals"]="0.2.3");var us="0.2.3";var ue=class{ws=null;wsEndpoint;subscriptions=new Map;reconnectAttempts=0;maxReconnectAttempts=10;reconnectDelay=1e3;heartbeatInterval=null;messageQueue=[];isConnected=false;pingInterval=3e4;reconnectTimeout=null;isReconnecting=false;constructor(t){this.wsEndpoint=t;}async connect(){return new Promise((t,r)=>{try{this.ws&&this.ws.close(),this.ws=new WebSocket(this.wsEndpoint),this.ws.onopen=()=>{console.log("[WebSocket] Connected to Hyperliquid"),this.isConnected=!0,this.reconnectAttempts=0,this.isReconnecting=!1,this.startHeartbeat(),this.flushMessageQueue(),t();},this.ws.onmessage=s=>{this.handleMessage(s.data);},this.ws.onerror=s=>{console.error("[WebSocket] Error:",s),this.isConnected=!1,this.isReconnecting||r(new Error("WebSocket connection failed"));},this.ws.onclose=s=>{console.log(`[WebSocket] Closed: ${s.code} - ${s.reason||"No reason provided"}`),this.isConnected=!1,this.stopHeartbeat(),s.code!==1e3&&this.attemptReconnect();};}catch(s){r(s);}})}disconnect(){this.stopHeartbeat(),this.subscriptions.clear(),this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&(this.ws.close(1e3,"Normal closure"),this.ws=null),this.isConnected=false,this.isReconnecting=false,this.reconnectAttempts=0;}attemptReconnect(){if(this.isReconnecting)return;if(this.reconnectAttempts>=this.maxReconnectAttempts){console.error("[WebSocket] Max reconnection attempts reached");return}this.isReconnecting=true,this.reconnectAttempts++;let t=Math.min(this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1),3e4);console.log(`[WebSocket] Reconnecting in ${t}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`),this.reconnectTimeout=window.setTimeout(()=>{this.connect().then(()=>{this.resubscribeAll();}).catch(r=>{console.error("[WebSocket] Reconnection failed:",r),this.isReconnecting=false;});},t);}startHeartbeat(){this.heartbeatInterval=window.setInterval(()=>{this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN&&this.send({method:"ping"});},this.pingInterval);}stopHeartbeat(){this.heartbeatInterval!==null&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null);}send(t){this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(t)):this.messageQueue.push(t);}flushMessageQueue(){for(;this.messageQueue.length>0;){let t=this.messageQueue.shift();t&&this.send(t);}}resubscribeAll(){this.subscriptions.forEach(t=>{this.sendSubscription(t.type,t.param);});}handleMessage(t){try{let r=JSON.parse(t);r.channel?this.handleChannelMessage(r):r.method;}catch(r){console.error("[WebSocket] Failed to parse message:",r,t);}}handleChannelMessage(t){let r=t.channel;this.subscriptions.forEach((s,n)=>{if(this.isChannelMatch(r,s.type,s.param))try{let o=this.transformData(s.type,t.data,s.param);s.callback(o);}catch(o){console.error(`[WebSocket] Error in subscription callback (${n}):`,o);}});}isChannelMatch(t,r,s){return r==="ticker"?t==="allMids":r==="trades"?t==="trades":r==="orderBook"?t==="l2Book":r==="candle"?t==="candle":r==="userFills"?t==="userFills":r==="userEvents"?t==="userEvents":false}transformData(t,r,s){return t==="ticker"?this.transformTickerData(r):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){let r=t.mids||{};return Object.entries(r).map(([s,n])=>({symbol:`${s}-USDC`,price:parseFloat(n),timestamp:Date.now()}))}transformTradesData(t,r){return Array.isArray(t)?t.map(s=>({symbol:r,side:s.side==="B"?"buy":"sell",price:parseFloat(s.px),quantity:parseFloat(s.sz),timestamp:s.time,tradeId:s.tid})):[]}transformOrderBookData(t,r){let[s,n]=t.levels||[[],[]];return {symbol:r,bids:s.map(o=>({price:parseFloat(o.px),quantity:parseFloat(o.sz),count:o.n})),asks:n.map(o=>({price:parseFloat(o.px),quantity:parseFloat(o.sz),count:o.n})),timestamp:t.time||Date.now()}}transformCandleData(t,r){let[s]=r.split(":");return {symbol:s,open:parseFloat(t.o),high:parseFloat(t.h),low:parseFloat(t.l),close:parseFloat(t.c),volume:parseFloat(t.v),timestamp:t.t,closeTimestamp:t.T}}transformUserFillsData(t){return Array.isArray(t)?t.map(r=>({tradeId:r.tid?.toString(),orderId:r.oid?.toString(),symbol:`${r.coin}-USDC`,side:r.dir?.includes("Long")?"long":"short",price:parseFloat(r.px),quantity:parseFloat(r.sz),fee:parseFloat(r.fee||"0"),feeCurrency:r.feeToken||"USDC",isMaker:r.side==="M",timestamp:r.time})):[]}transformUserEventsData(t){return t}sendSubscription(t,r){let s;if(t==="ticker")s={method:"subscribe",subscription:{type:"allMids"}};else if(t==="trades")s={method:"subscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook")s={method:"subscribe",subscription:{type:"l2Book",coin:r.split("-")[0]}};else if(t==="candle"){let[n,o]=r.split(":");s={method:"subscribe",subscription:{type:"candle",coin:n.split("-")[0],interval:o}};}else t==="userFills"?s={method:"subscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"&&(s={method:"subscribe",subscription:{type:"userEvents",user:r}});s&&this.send(s);}sendUnsubscription(t,r){let s;if(t==="ticker")s={method:"unsubscribe",subscription:{type:"allMids"}};else if(t==="trades")s={method:"unsubscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook")s={method:"unsubscribe",subscription:{type:"l2Book",coin:r.split("-")[0]}};else if(t==="candle"){let[n,o]=r.split(":");s={method:"unsubscribe",subscription:{type:"candle",coin:n.split("-")[0],interval:o}};}else t==="userFills"?s={method:"unsubscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"&&(s={method:"unsubscribe",subscription:{type:"userEvents",user:r}});s&&this.send(s);}subscribe(t,r,s){let n=`${t}:${r}`;return this.subscriptions.set(n,{type:t,param:r,callback:s}),this.sendSubscription(t,r),n}unsubscribe(t){let r=this.subscriptions.get(t);r&&(this.sendUnsubscription(r.type,r.param),this.subscriptions.delete(t));}isConnectedNow(){return this.isConnected}};var Xt={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"}},Ge=class{apiEndpoint;_wsEndpoint;timeout;environment;wsManager=null;constructor(t={}){this.environment=t.environment||"testnet",this.apiEndpoint=t.apiEndpoint||Xt[this.environment].api,this._wsEndpoint=t.wsEndpoint||Xt[this.environment].ws,this.timeout=t.timeout||3e4;}async request(t,r){let s=`${this.apiEndpoint}${t}`;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 se(`HTTP ${i.status}: ${i.statusText}`,i.status,await i.text());return await i.json()}catch(n){throw n.name==="AbortError"?new se(`Request timeout after ${this.timeout}ms`,408,""):n instanceof se?n:new se(`Network error: ${n.message}`,0,"")}}symbolToCoin(t){return t.split("-")[0]}parseInterval(t){return {"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"1d":864e5,"1w":6048e5}[t]}async getSupportedCoins(){let[t]=await this.request("/info",{type:"metaAndAssetCtxs"});return t.universe.map(r=>`${r.name}-USDC`)}async getMarket(t){let r=await this.getMarkets([t]);return r.length>0?r[0]:null}async getMarkets(t){let[r,s]=await this.request("/info",{type:"metaAndAssetCtxs"}),n=r.universe.map((o,i)=>{let a=s[i],p=`${o.name}-USDC`,l=parseFloat(a.midPx||a.markPx||"0"),u=a.prevDayPx?parseFloat(a.prevDayPx):l,d=u>0?(l-u)/u*100:0;return {symbol:p,price:l,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")}});if(t&&t.length>0){let o=new Set(t);return n.filter(i=>o.has(i.symbol))}return n}async getKlines(t,r,s=100){let n=this.symbolToCoin(t),o=this.parseInterval(r),i=Date.now(),a=i-o*s;return (await this.request("/info",{type:"candleSnapshot",req:{coin:n,interval:r,startTime:a,endTime:i}})).map(l=>({symbol:t,open:parseFloat(l.o),high:parseFloat(l.h),low:parseFloat(l.l),close:parseFloat(l.c),volume:parseFloat(l.v),timestamp:l.t,closeTimestamp:l.T}))}async getOrderBook(t,r=10){let s=this.symbolToCoin(t),n=await this.request("/info",{type:"l2Book",coin:s}),[o,i]=n.levels;return {symbol:t,bids:o.slice(0,r).map(a=>({price:parseFloat(a.px),quantity:parseFloat(a.sz),count:a.n})),asks:i.slice(0,r).map(a=>({price:parseFloat(a.px),quantity:parseFloat(a.sz),count:a.n})),timestamp:n.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=await this.request("/info",{type:"clearinghouseState",user:t.userAddress}),s=r.assetPositions.map(o=>{let i=o.position,a=`${i.coin}-USDC`,p=parseFloat(i.szi);if(p===0)return null;let l=parseFloat(i.entryPx),u=parseFloat(i.unrealizedPnl),d=parseFloat(i.positionValue);return {symbol:a,side:p>0?"long":"short",quantity:Math.abs(p),entryPrice:l,markPrice:l,unrealizedPnl:u,unrealizedPnlPercent:parseFloat(i.returnOnEquity)*100,leverage:i.leverage.value,liquidationPrice:i.liquidationPx?parseFloat(i.liquidationPx):void 0,margin:parseFloat(i.marginUsed),notionalValue:Math.abs(d)}}).filter(Boolean),n=t.symbol?s.filter(o=>o.symbol===t.symbol):s;return {positions:n,totalEquity:parseFloat(r.marginSummary.accountValue),availableBalance:parseFloat(r.marginSummary.accountValue)-parseFloat(r.marginSummary.totalMarginUsed),totalUnrealizedPnl:n.reduce((o,i)=>o+i.unrealizedPnl,0),raw:r}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"openOrders",user:t.userAddress}),s=r.map(o=>{let i=`${o.coin}-USDC`,a=parseFloat(o.origSz),p=parseFloat(o.sz),l=a-p;return {orderId:o.oid.toString(),clientOrderId:o.cloid,symbol:i,side:o.side?"long":"short",orderType:"limit",price:parseFloat(o.limitPx),quantity:a,filledQuantity:l,remainingQuantity:p,status:l>0&&p>0?"partially_filled":"pending",timestamp:o.timestamp,updateTimestamp:o.timestamp}}),n=t.symbol?s.filter(o=>o.symbol===t.symbol):s;return {orders:n,totalCount:n.length,raw:r}}async getTrades(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"userFills",user:t.userAddress}),s=r.map(n=>{let 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}});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(){if(this.wsManager||(this.wsManager=new ue(this._wsEndpoint)),this.wsManager.isConnectedNow()){console.log("[WebSocket] Already connected");return}await this.wsManager.connect();}disconnectWebSocket(){this.wsManager&&(this.wsManager.disconnect(),this.wsManager=null);}subscribeMarketData(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe(t,r,s)}subscribeCandles(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=`${t}:${r}`;return this.wsManager.subscribe("candle",n,s)}subscribeUserData(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=t==="fills"?"userFills":"userEvents";return this.wsManager.subscribe(n,r,s)}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}},se=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="HyperliquidApiError";}};var _=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="LiberFiApiError";}},ds=3e4,ne=class{baseUrl;timeout;headers;defaultQuery;fetchImpl;constructor(t){if(!t.baseUrl)throw new Error("LiberFiHttpTransport: `baseUrl` is required (e.g. https://api.liberfi.io/perpetuals).");this.baseUrl=t.baseUrl.replace(/\/+$/,""),this.timeout=t.timeout??ds,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 p=await cs(a);throw new _(`HTTP ${a.status} ${a.statusText} from ${t} ${s}`,a.status,p)}return a.status===204?void 0:await a.json()}catch(a){if(a instanceof _)throw a;if(a instanceof Error&&a.name==="AbortError")throw new _(`Request timeout after ${o}ms: ${t} ${s}`,408,"");let p=a instanceof Error?a.message:String(a);throw new _(`Network error: ${t} ${s}: ${p}`,0,"")}finally{clearTimeout(i);}}};async function cs(e){try{return await e.text()}catch{return ""}}var ms="wss://api.hyperliquid.xyz/ws",Ve=class{transport;wsEndpoint;signTypedData;wsManager=null;constructor(t){if(t.transport)this.transport=t.transport;else {if(!t.baseUrl)throw new Error("LiberFiPerpetualsClient: either `baseUrl` or a pre-built `transport` is required.");this.transport=new ne({baseUrl:t.baseUrl,timeout:t.timeout,headers:t.headers,defaultQuery:t.provider?{provider:t.provider}:void 0});}this.wsEndpoint=t.wsEndpoint??ms,this.signTypedData=t.signTypedData;}async getSupportedCoins(){return (await this.transport.request("GET",{path:"/v1/coins"})).map(r=>r.symbol)}async getMarket(t){try{return await this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}`})}catch(r){if(r instanceof _&&r.statusCode===404)return null;throw r}}async getMarkets(t){return this.transport.request("GET",{path:"/v1/markets",query:t&&t.length>0?{symbols:t.join(",")}:void 0})}async getKlines(t,r,s=100){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/klines`,query:{interval:r,limit:String(s)}})}async getOrderBook(t,r=10){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/orderbook`,query:{maxLevel:String(r)}})}async getRecentTrades(t,r=50){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/trades`,query:{limit:String(r)}})}async getPositions(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getPositions requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/positions`,query:{symbol:t.symbol}});return {positions:r.positions,totalEquity:r.account?.totalEquity,availableBalance:r.account?.availableBalance,totalUnrealizedPnl:r.account?.totalUnrealizedPnl,raw:r}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getOpenOrders requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/orders`,query:{symbol:t.symbol}});return {orders:r,totalCount:r.length,raw:r}}async getTrades(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getTrades requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/fills`,query:{symbol:t.symbol,limit:t.limit!==void 0?String(t.limit):void 0,startTime:t.startTime!==void 0?String(t.startTime):void 0,endTime:t.endTime!==void 0?String(t.endTime):void 0}}),s=r.map(n=>({tradeId:n.tradeId,orderId:n.orderId,symbol:n.symbol,side:n.side,price:n.price,quantity:n.quantity,fee:n.fee,feeCurrency:n.feeCurrency,isMaker:n.isMaker,timestamp:n.timestamp}));return {trades:s,totalCount:s.length,raw:r}}async placeOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.placeOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.placeOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,side:t.side,orderType:t.orderType,amount:t.amount,price:t.price,leverage:t.leverage,reduceOnly:t.reduceOnly,takeProfitPrice:t.takeProfitPrice,stopLossPrice:t.stopLossPrice,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async cancelOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/cancel/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,orderId:t.orderId,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/cancel/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async connectWebSocket(){this.wsManager||(this.wsManager=new ue(this.wsEndpoint)),!this.wsManager.isConnectedNow()&&await this.wsManager.connect();}disconnectWebSocket(){this.wsManager&&(this.wsManager.disconnect(),this.wsManager=null);}subscribeMarketData(t,r,s){return this.requireWS().subscribe(t,r,s)}subscribeCandles(t,r,s){return this.requireWS().subscribe("candle",`${t}:${r}`,s)}subscribeUserData(t,r,s){let n=t==="fills"?"userFills":"userEvents";return this.requireWS().subscribe(n,r,s)}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}requireWS(){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager}};var je=class{transport;constructor(t){this.transport="transport"in t?t.transport:new ne(t);}getBaseUrl(){return this.transport.getBaseUrl()}async quote(t){return this.transport.request("POST",{path:"/v1/deposits/quote",body:t})}async submit(t){return this.transport.request("POST",{path:"/v1/deposits/submit",body:t})}async status(t){if(!t)throw new Error("intentId is required");return this.transport.request("GET",{path:`/v1/deposits/${encodeURIComponent(t)}`})}async refresh(t){if(!t)throw new Error("intentId is required");return this.transport.request("POST",{path:`/v1/deposits/${encodeURIComponent(t)}/refresh`})}};var xe=new Set(["settled","refunded","failed"]);var Ue={phase:"idle"};function Je(e,t){switch(t.type){case "RESET":return Ue;case "QUOTE_REQUEST":return e.phase==="idle"||e.phase==="ready_to_sign"||e.phase==="expired"||e.phase==="failed"?{phase:"quoting"}:e;case "QUOTE_RECEIVED":return e.phase==="quoting"?{phase:"ready_to_sign",quote:t.quote,expiresAtMs:Date.parse(t.quote.expiresAt)}:e;case "QUOTE_FAILED":return e.phase==="quoting"?{phase:"failed",error:t.error}:e;case "QUOTE_EXPIRED":return e.phase==="ready_to_sign"?{phase:"expired",quote:e.quote}:e;case "SIGN_START":return e.phase==="ready_to_sign"?{phase:"signing",quote:e.quote}:e;case "SIGN_FAILED":return e.phase==="signing"?{phase:"failed",error:t.error}:e;case "BROADCAST_START":return e.phase==="signing"?{phase:"broadcasting",quote:e.quote}:e;case "BROADCAST_FAILED":return e.phase==="broadcasting"||e.phase==="signing"?{phase:"failed",error:t.error}:e;case "SUBMIT_OK":return e.phase==="broadcasting"?{phase:"submitted",quote:e.quote,intentId:t.intentId,solanaTxHash:t.solanaTxHash}:e;case "SUBMIT_FAILED":return e.phase==="broadcasting"?{phase:"failed",error:t.error}:e;case "STATUS_UPDATE":{if(e.phase!=="submitted"&&e.phase!=="tracking")return e;let r=(e.phase==="submitted",e.intentId);return fs(t.status,r)}}}function fs(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 ys(e){return e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"}function gs(e){return e.phase==="submitted"||e.phase==="tracking"}function bs(e){if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.status}function hs(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 xs(e){return e!==void 0&&xe.has(e)}var oe=createContext({});function vs({client:e,depositClient:t,children:r}){let s=useMemo(()=>({client:e,depositClient:t}),[e,t]);return jsx(oe.Provider,{value:s,children:r})}function P(){let e=useContext(oe);if(!e||!e.client)throw new Error("usePerpetualsClient must be used within a PerpetualsProvider");return e}function Yt(){return ["perps","coins"]}async function Zt(e){return await e.getSupportedCoins()}function Xe(e={}){let{client:t}=P();return useQuery({queryKey:Yt(),queryFn:async()=>Zt(t),staleTime:300*1e3,...e})}function er(e){return ["perps","market",e.symbol]}async function tr(e,{symbol:t}){return await e.getMarket(t)}function Se(e,t={}){let{client:r}=P();return useQuery({queryKey:er(e),queryFn:async()=>tr(r,e),staleTime:10*1e3,...t})}function rr(e={}){return ["perps","markets",JSON.stringify((e.symbols??[]).sort())]}async function sr(e,{symbols:t}={}){return await e.getMarkets(t)}function Ye(e={},t={}){let{client:r}=P();return useQuery({queryKey:rr(e),queryFn:async()=>sr(r,e),staleTime:10*1e3,...t})}function nr(e){return ["perps","klines",e.symbol,e.interval,String(e.limit??100)]}async function or(e,{symbol:t,interval:r,limit:s}){return await e.getKlines(t,r,s)}function Ns(e,t={}){let{client:r}=P();return useQuery({queryKey:nr(e),queryFn:async()=>or(r,e),staleTime:30*1e3,...t})}function ir(e){return ["perps","orderBook",e.symbol,String(e.maxLevel??20)]}async function ar(e,{symbol:t,maxLevel:r}){return await e.getOrderBook(t,r)}function Ze(e,t={}){let{client:r}=P();return useQuery({queryKey:ir(e),queryFn:async()=>ar(r,e),staleTime:5*1e3,...t})}function pr(e){return ["perps","recentTrades",e.symbol,String(e.limit??50)]}async function lr(e,{symbol:t,limit:r}){return await e.getRecentTrades(t,r)}function et(e,t={}){let{client:r}=P();return useQuery({queryKey:pr(e),queryFn:async()=>lr(r,e),staleTime:5*1e3,...t})}function ur(e){return ["perps","positions",e.userAddress??"",e.symbol??""]}async function dr(e,t){return await e.getPositions(t)}function Pe(e,t={}){let{client:r}=P(),{enabled:s=true,...n}=e;return useQuery({queryKey:ur(n),queryFn:async()=>dr(r,n),enabled:s&&!!n.userAddress,staleTime:10*1e3,...t})}function cr(e){return ["perps","orders",e.userAddress??"",e.symbol??""]}async function mr(e,t){return await e.getOpenOrders(t)}function tt(e,t={}){let{client:r}=P(),{enabled:s=true,...n}=e;return useQuery({queryKey:cr(n),queryFn:async()=>mr(r,n),enabled:s&&!!n.userAddress,staleTime:5*1e3,...t})}function fr(e){return ["perps","trades",e.userAddress??"",e.symbol??"",String(e.limit??50),String(e.startTime??""),String(e.endTime??"")]}async function yr(e,t){return await e.getTrades(t)}function rt(e,t={}){let{client:r}=P(),{enabled:s=true,...n}=e;return useQuery({queryKey:fr(n),queryFn:async()=>yr(r,n),enabled:s&&!!n.userAddress,staleTime:30*1e3,...t})}async function gr(e,t){return await e.placeOrder(t)}function ve(e={}){let{client:t}=P();return useMutation({mutationFn:async r=>gr(t,r),...e})}async function br(e,t){return await e.cancelOrder(t)}function st(e={}){let{client:t}=P();return useMutation({mutationFn:async r=>br(t,r),...e})}function ie(e){let{type:t,symbol:r,enabled:s=true}=e,{client:n}=P(),[o,i]=useState(null),[a,p]=useState(false),[l,u]=useState(null),d=useCallback(m=>{i(m);},[]);return useEffect(()=>{if(!s)return;let m=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;p(!0),u(null),m=n.subscribeMarketData(t,r,d);}catch(y){f&&(u(y instanceof Error?y:new Error("Connection failed")),p(false));}})(),()=>{if(f=false,m)try{n.unsubscribe(m);}catch(y){console.error("Failed to unsubscribe:",y);}n.disconnectWebSocket(),p(false),i(null);}},[n,t,r,s,d]),{data:o,isConnected:a,error:l}}function Hs(e){let{symbol:t,interval:r,enabled:s=true}=e,{client:n}=P(),[o,i]=useState(null),[a,p]=useState(false),[l,u]=useState(null),d=useCallback(m=>{i(m);},[]);return useEffect(()=>{if(!s)return;let m=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;p(!0),u(null),m=n.subscribeCandles(t,r,d);}catch(y){f&&(u(y instanceof Error?y:new Error("Connection failed")),p(false));}})(),()=>{if(f=false,m)try{n.unsubscribe(m);}catch(y){console.error("Failed to unsubscribe:",y);}n.disconnectWebSocket(),p(false),i(null);}},[n,t,r,s,d]),{data:o,isConnected:a,error:l}}function De(e){let{type:t,userAddress:r,enabled:s=true}=e,{client:n}=P(),[o,i]=useState(null),[a,p]=useState(false),[l,u]=useState(null),d=useCallback(m=>{i(m);},[]);return useEffect(()=>{if(!s||!r)return;let m=null,f=true;return (async()=>{try{if(await n.connectWebSocket(),!f)return;p(!0),u(null),m=n.subscribeUserData(t,r,d);}catch(y){f&&(u(y instanceof Error?y:new Error("Connection failed")),p(false));}})(),()=>{if(f=false,m)try{n.unsubscribe(m);}catch(y){console.error("Failed to unsubscribe:",y);}n.disconnectWebSocket(),p(false),i(null);}},[n,t,r,s,d]),{data:o,isConnected:a,error:l}}function ae(){let e=useContext(oe);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 hr(e){return ["perps","deposit","quote",e]}async function xr(e,t){return e.quote(t)}function at(e,t={}){let r=ae(),s=t.enabled??!!Ks(e);return useQuery({queryKey:hr(e??null),queryFn:async()=>xr(r,e),enabled:s,staleTime:0,gcTime:3e4,refetchOnWindowFocus:false,...t})}function Ks(e){return !!(e&&e.userSolanaAddress&&e.hyperliquidRecipient&&e.grossLamports&&e.source)}function pt(e){let t=ae(),[r,s]=useReducer(Je,Ue),n=useCallback(()=>{s({type:"RESET"});},[]),o=useCallback(async i=>{let{quote:a}=i;s({type:"SIGN_START"});let p;try{if(p=await e(a.serializedTxBase64,{isVersioned:a.isVersioned,sizeBytes:a.sizeBytes}),!p)throw new Error("wallet returned an empty tx hash")}catch(u){let d=Pr(u,"WALLET_SIGN_OR_BROADCAST_FAILED");throw s({type:"SIGN_FAILED",error:d}),u}s({type:"BROADCAST_START"});let l={userSolanaAddress:i.userSolanaAddress,hyperliquidRecipient:i.hyperliquidRecipient,solanaTxHash:p,breakdown:a.breakdown,userId:i.userId,source:i.source,campaign:i.campaign,quoteIssuedAt:a.issuedAt};try{let u=await t.submit(l);return s({type:"SUBMIT_OK",intentId:u.intentId,solanaTxHash:p}),u.intentId}catch(u){let d=Pr(u,"DEPOSIT_SUBMIT_FAILED");throw s({type:"SUBMIT_FAILED",error:d}),u}},[t,e]);return {state:r,execute:o,reset:n,dispatch:s}}function Pr(e,t){if(e instanceof _){let r=Vs(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 Vs(e){if(e)try{return JSON.parse(e)}catch{return}}function vr(e){return ["perps","deposit","status",e??null]}async function Dr(e,t){return e.status(t)}function lt(e,t={}){let r=ae(),s=t.enabled??!!e,n=t.pollIntervalMs??3e3;return useQuery({queryKey:vr(e??void 0),queryFn:async()=>Dr(r,e),enabled:s,refetchInterval:o=>{let i=o.state.data;return i&&xe.has(i.status)?false:n},refetchOnWindowFocus:false,staleTime:0,...t})}var Te={phase:"idle",steps:[]};function Ee(e,t){switch(e.id){case "approveBuilderFee":{let r=t.builderApproval;return r&&Js(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 Fe(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?Xs(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 Te}}function qe(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 Js(e,t){return e.toLowerCase()===t.toLowerCase()}function Xs(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 Ae(e){let{adapter:t,userAddress:r,steps:s,autoLoad:n=true,onComplete:o,onError:i}=e,[a,p]=useReducer(Fe,Te),l=useRef(t),u=useRef(s),d=useRef(o),m=useRef(i);l.current=t,u.current=s,d.current=o,m.current=i;let f=useCallback(async()=>{if(r){p({type:"START_LOADING"});try{let k=await l.current.getAccountState(r),C=u.current.map(N=>({step:N,status:Ee(N,k)}));p({type:"LOAD_SUCCESS",accountState:k,steps:C});}catch(k){let C=Cr(k);p({type:"LOAD_ERROR",error:C.message}),m.current?.(C,{});}}},[r]);useEffect(()=>{n&&r&&f();},[n,r,f]);let b=useCallback(async k=>{let C=a.steps[k];if(C){p({type:"RUN_STEP",index:k});try{let N=await Zs(l.current,C.step);p({type:"STEP_SUCCESS",index:k,txHash:N.txHash,accountState:N.state});}catch(N){let R=Cr(N);p({type:"STEP_ERROR",index:k,error:R.message}),m.current?.(R,{stepId:C.step.id});}}},[a.steps]),y=useCallback(async()=>{let k=qe(a);k!=null&&await b(k);},[a,b]),w=useCallback(()=>p({type:"RESET"}),[]),h=useRef(false);return useEffect(()=>{a.phase==="done"&&!h.current?(h.current=true,d.current?.(a)):a.phase!=="done"&&(h.current=false);},[a]),{state:a,reload:f,runNext:y,runStep:b,reset:w}}function Zs(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 Cr(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error")}function ut(){return jsx("div",{className:"flex items-center justify-center px-4 py-3 bg-neutral-900 border-b border-neutral-800",children:jsx("span",{className:"text-neutral-400 text-sm",children:"Market data not available"})})}function dt(){return jsxs("div",{className:"flex items-center gap-6 px-4 py-3 bg-neutral-900 border-b border-neutral-800",children:[jsxs("div",{className:"flex items-center gap-3",children:[jsx(Skeleton,{className:"h-6 w-20 rounded"}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(Skeleton,{className:"h-8 w-28 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]})]}),jsx("div",{className:"h-8 w-px bg-neutral-800"}),jsxs("div",{className:"flex items-center gap-6 text-sm",children:[jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-20 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]}),jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-20 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]}),jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-24 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]}),jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-32 rounded"}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(Skeleton,{className:"h-5 w-16 rounded"}),jsx(Skeleton,{className:"h-5 w-20 rounded"})]})]})]})]})}function mt(e){let[t,r]=useState(),[s,n]=useState(0),{data:o,isPending:i}=Se({symbol:e}),{data:a,isConnected:p}=ie({type:"ticker",symbol:e,enabled:!!o});return useEffect(()=>{o&&r(o);},[o]),useEffect(()=>{if(!a)return;let l=en(a,e);l&&r(u=>tn(u??o??void 0,l,e));},[a,o,e]),useEffect(()=>{let l=()=>{let d=Date.now(),m=480*60*1e3,f=d%m,b=m-f;return Math.floor(b/1e3)};n(l());let u=setInterval(()=>{n(l());},1e3);return ()=>clearInterval(u)},[]),{marketData:t,isLoading:i,fundingCountdown:s}}function en(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 de(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function tn(e,t,r){return {symbol:t.symbol??e?.symbol??r,price:de(t.price,e?.price??0),change24h:de(t.change24h,e?.change24h??0),volume24h:de(t.volume24h,e?.volume24h??0),fundingRate:de(t.fundingRate,e?.fundingRate??0),openInterest:de(t.openInterest,e?.openInterest??0),markPrice:de(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 rn(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 Or(e,t=2){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function Nr(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function ft({marketData:e,fundingCountdown:t}){let{symbol:r,price:s,change24h:n,indexPrice:o,volume24h:i,openInterest:a,fundingRate:p}=e,l=typeof n=="number"&&Number.isFinite(n)?n:0,u=typeof p=="number"&&Number.isFinite(p)?p:0,d=l>=0,m=l.toFixed(2);return jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:16},children:[jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsx("span",{style:{fontSize:18,fontWeight:500,lineHeight:"23px",letterSpacing:"-0.36px",color:"#ffffff"},children:Nr(s)}),jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:d?"#C7FF2E":"#F76816"},children:[d?"+":"",m,"%"]})]}),jsxs("div",{className:"flex items-center",style:{gap:16},children:[jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Oracle Price"}),jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:o?Nr(o):"-"})]}),jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"24h Volume"}),jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:Or(i,0)})]}),jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Open Interest"}),jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:Or(a*(e.markPrice||s))})]}),jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Funding / Countdown"}),jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxs("span",{style:{fontSize:13,lineHeight:"17px",color:u>=0?"#C7FF2E":"#F76816"},children:[(u*100).toFixed(5),"%"]}),jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"#ffffff"},children:rn(t)})]})]})]})]})}function sn({symbol:e}){let{marketData:t,isLoading:r,fundingCountdown:s}=mt(e);return r?jsx(dt,{}):t?jsx(ft,{marketData:t,fundingCountdown:s}):jsx(ut,{})}function gt({onSelectCoin:e}={}){let[t,r]=useState(""),[s,n]=useState([]),{data:o,isPending:i}=Xe(),{data:a,isPending:p}=Ye({symbols:o},{enabled:!!o&&o.length>0});useEffect(()=>{a&&n(a);},[a]);let l=useMemo(()=>{if(!t.trim())return s;let d=t.toLowerCase().trim();return s.filter(m=>m.symbol.toLowerCase().includes(d))},[s,t]);return {coins:s,isLoading:i||p,searchQuery:t,setSearchQuery:r,filteredCoins:l,handleSelectCoin:d=>{e?.(d);}}}function Ir(e,t=2){return e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function pn(e){return e>=1e3?e.toFixed(2):e>=1?e.toFixed(4):e.toFixed(6)}function bt({coins:e,searchQuery:t,onSearchChange:r,onSelectCoin:s,isLoading:n}){return jsxs("div",{className:"flex flex-col",style:{backgroundColor:"#1A1A1A",flex:"1 1 0",minHeight:0},children:[jsx("div",{style:{padding:"16px 16px 12px"},children:jsxs("div",{className:"flex items-center",style:{height:32,border:"1px solid #2a2a2a",borderRadius:4,padding:"0 6px 0 12px",gap:8},children:[jsx(SearchIcon,{className:"flex-shrink-0",style:{width:14,height:14,color:"#6b6b6b"}}),jsx("input",{type:"text",placeholder:"Search coins...",value:t,onChange:o=>r(o.target.value),className:"flex-1 bg-transparent outline-none",style:{fontSize:12,color:"#ffffff",border:"none"}})]})}),jsxs("div",{className:"flex-1 overflow-auto",children:[jsxs("div",{className:"flex items-center",style:{height:28,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)",position:"sticky",top:0,backgroundColor:"#1A1A1A",zIndex:1},children:[jsx("span",{style:{flex:"0 0 140px",fontSize:12,color:"#6b6b6b"},children:"Token"}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Last Price"}),jsx("span",{style:{flex:"0 0 120px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Change"}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"8h Funding"}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Volume"}),jsx("span",{style:{flex:"1",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Open Interest"})]}),n?jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Loading..."})}):e.length===0?jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:t?"No coins found":"No coins available"})}):e.map(o=>{let i=o.change24h>=0,a=o.change24h.toFixed(2),p=(o.fundingRate*100).toFixed(4),l=o.fundingRate>=0,u=o.symbol.split("-")[0];return jsxs("div",{className:"flex items-center cursor-pointer transition-colors",style:{height:36,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)"},onClick:()=>s(o.symbol),onMouseEnter:d=>{d.currentTarget.style.backgroundColor="rgba(255,255,255,0.03)";},onMouseLeave:d=>{d.currentTarget.style.backgroundColor="transparent";},children:[jsxs("div",{className:"flex items-center",style:{flex:"0 0 140px",gap:8},children:[jsx("img",{src:`https://app.hyperliquid.xyz/coins/${u}.svg`,alt:u,className:"rounded-full",style:{width:20,height:20},onError:d=>{let m=d.target;m.style.display="none";}}),jsx("span",{style:{fontSize:12,fontWeight:500,color:"#ffffff"},children:u})]}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#ffffff",textAlign:"right"},children:pn(o.price)}),jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:i?"#C7FF2E":"#F76816",textAlign:"right"},children:[i?"+":"",a,"%"]}),jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:l?"#C7FF2E":"#F76816",textAlign:"right"},children:[p,"%"]}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Ir(o.volume24h)}),jsx("span",{style:{flex:"1",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Ir(o.openInterest*o.price)})]},o.symbol)})]})]})}function ln({onSelectCoin:e,className:t}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:o,handleSelectCoin:i}=gt({onSelectCoin:e});return jsx("div",{className:t,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsx(bt,{coins:r,searchQuery:n,onSearchChange:o,onSelectCoin:i,isLoading:s})})}function Fr(e,t){if(t<=0)return e;let r=new Map;return e.forEach(s=>{let n=Math.floor(s.price/t)*t,o=r.get(n);o?(o.quantity+=s.quantity,s.count&&(o.count=(o.count||0)+s.count)):r.set(n,{price:n,quantity:s.quantity,count:s.count});}),Array.from(r.values())}function qr(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 ht({symbol:e,maxLevel:t=20,precision:r=.01}){let[s,n]=useState(null),[o,i]=useState(r),{data:a,isPending:p}=Ze({symbol:e,maxLevel:t}),{data:l}=ie({type:"orderBook",symbol:e,enabled:!!a});return useEffect(()=>{l?n(l):a&&n(a);},[l,a]),{...useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let d=Fr(s.bids,o),m=Fr(s.asks,o),f=d.sort((R,q)=>q.price-R.price).slice(0,t),b=m.sort((R,q)=>R.price-q.price).slice(0,t),y=qr(f),w=qr(b),h=y[0]?.price||0,C=(w[0]?.price||0)-h,N=h>0?C/h*100:0;return {bids:y,asks:w,spread:C,spreadPercentage:N}},[s,o,t]),isLoading:p,precision:o,setPrecision:i}}function cn(e){return e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function Mr(e){return Math.round(e).toLocaleString("en-US")}function Ar({price:e,quantity:t,total:r,percentage:s,side:n,onClick:o}){let i=n==="ask";return jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:{height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},onClick:o,children:[jsx("div",{className:"absolute left-0 top-0",style:{height:20,width:`${s}%`,background:i?"linear-gradient(to right, rgba(247,104,22,0), #F76816)":"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15}}),jsx("div",{className:"relative z-10 flex items-center",style:{flex:"1 1 0%"},children:jsx("span",{style:{color:i?"#F76816":"#C7FF2E",fontWeight:400},children:cn(e)})}),jsx("div",{className:"relative z-10 flex items-center justify-end",style:{flex:"1 1 0%",color:"#ffffff"},children:Mr(t)}),jsx("div",{className:"relative z-10 flex items-center justify-end",style:{flex:"1 1 0%",color:"#ffffff"},children:Mr(r)})]})}function xt({bids:e,asks:t,spread:r,spreadPercentage:s,onPriceClick:n}){let o=[...t].reverse();return jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000",fontSize:11},children:[jsxs("div",{className:"flex items-center",style:{height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},children:[jsx("div",{className:"flex items-center",style:{flex:"1 1 0%"},children:"Price"}),jsx("div",{className:"flex items-center justify-end",style:{flex:"1 1 0%"},children:"Amount (USD)"}),jsx("div",{className:"flex items-center justify-end",style:{flex:"1 1 0%"},children:"Total (USD)"})]}),jsx("div",{className:"flex-1 flex flex-col-reverse overflow-hidden",children:o.map((i,a)=>jsx(Ar,{price:i.price,quantity:i.quantity,total:i.total,percentage:i.percentage,side:"ask",onClick:()=>n?.(i.price)},`ask-${i.price}-${a}`))}),jsx("div",{className:"flex items-center justify-center",style:{height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},children:jsxs("div",{className:"flex items-center",style:{gap:12,fontSize:12,color:"#ffffff"},children:[jsx("span",{style:{color:"#ffffff"},children:"Spread:"}),jsx("button",{type:"button",className:"hover:text-white transition-colors cursor-pointer",style:{color:"#ffffff",fontWeight:400,background:"none",border:"none",padding:0},onClick:()=>n?.(r),children:r>=1?Math.round(r).toLocaleString("en-US"):r.toFixed(4)}),jsxs("span",{style:{color:"#ffffff",fontWeight:500},children:[s.toFixed(3),"%"]})]})}),jsx("div",{className:"flex-1 overflow-hidden",children:e.map((i,a)=>jsx(Ar,{price:i.price,quantity:i.quantity,total:i.total,percentage:i.percentage,side:"bid",onClick:()=>n?.(i.price)},`bid-${i.price}-${a}`))})]})}function mn(){return jsxs("div",{className:"flex flex-col h-full",style:{padding:"0 16px"},children:[jsxs("div",{className:"flex justify-between items-center",style:{height:28,marginBottom:4},children:[jsx(Skeleton,{className:"h-3 w-12 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"})]}),Array.from({length:10}).map((e,t)=>jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"})]},`ask-skeleton-${t}`)),jsx("div",{className:"flex justify-center items-center",style:{height:28},children:jsx(Skeleton,{className:"h-4 w-32 rounded"})}),Array.from({length:10}).map((e,t)=>jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"})]},`bid-skeleton-${t}`))]})}function fn(){return jsx("div",{className:"flex items-center justify-center h-full",children:jsx("span",{className:"text-neutral-400 text-sm",children:"No order book data available"})})}function yn({symbol:e,maxLevel:t=20,onPriceClick:r,className:s}){let{bids:n,asks:o,spread:i,spreadPercentage:a,isLoading:p}=ht({symbol:e,maxLevel:t});return p?jsx(mn,{}):n.length===0&&o.length===0?jsx(fn,{}):jsx("div",{className:s,children:jsx(xt,{bids:n,asks:o,spread:i,spreadPercentage:a,onPriceClick:r})})}function St({symbol:e,limit:t=50}){let[r,s]=useState([]),{data:n,isPending:o}=et({symbol:e,limit:t}),{data:i}=ie({type:"trades",symbol:e,enabled:!!n});return useEffect(()=>{n&&s(n.filter(Br));},[n]),useEffect(()=>{i&&s(a=>{let p=bn(i);if(p.length===0)return a;let l=p.filter(d=>!a.some(m=>m.timestamp===d.timestamp&&m.price===d.price&&m.quantity===d.quantity));return l.length===0?a:[...l,...a].slice(0,t)});},[i,t]),{trades:r,isLoading:o}}function bn(e){return (Array.isArray(e)?e:[e]).filter(Br)}function Br(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}function hn(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e3?e.toFixed(2):e>=1?e.toFixed(4):e.toFixed(6)}function Qr(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e6?(e/1e6).toFixed(2)+"M":e>=1e3?(e/1e3).toFixed(2)+"K":e.toFixed(2)}function xn(e){if(typeof e!="number"||!Number.isFinite(e))return "-";let t=new Date(e),r=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return `${r}:${s}:${n}`}function vt({trades:e,onTradeClick:t}){return jsxs("div",{className:"flex flex-col h-full overflow-auto",style:{backgroundColor:"#000000",fontSize:11},children:[jsxs("div",{className:"sticky top-0 z-10 flex items-center",style:{height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},children:[jsx("div",{className:"flex-1",style:{maxWidth:100},children:"Price"}),jsx("div",{className:"flex-1 text-right",children:"Amount"}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:100},children:"Total"}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:70},children:"Time"})]}),jsx("div",{className:"flex-1",children:e.map((r,s)=>{let n=r.side==="buy",o=typeof r.price=="number"&&Number.isFinite(r.price)&&typeof r.quantity=="number"&&Number.isFinite(r.quantity)?r.price*r.quantity:void 0;return jsxs("div",{className:"flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:{height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},onClick:()=>t?.(r),children:[jsx("div",{className:"flex-1",style:{maxWidth:100},children:jsx("span",{style:{color:n?"#C7FF2E":"#F76816",fontWeight:400},children:hn(r.price)})}),jsx("div",{className:"flex-1 text-right",style:{color:"#ffffff"},children:Qr(r.quantity)}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:100,color:"#ffffff"},children:Qr(o)}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:70,color:"#b5b5b5"},children:xn(r.timestamp)})]},`${r.timestamp}-${r.price}-${s}`)})})]})}function Sn(){return jsxs("div",{className:"flex flex-col h-full",style:{padding:"0 16px"},children:[jsxs("div",{className:"flex justify-between items-center",style:{height:28,marginBottom:4},children:[jsx(Skeleton,{className:"h-3 w-12 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-12 rounded"})]}),Array.from({length:12}).map((e,t)=>jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-12 rounded"})]},`trade-skeleton-${t}`))]})}function Pn(){return jsx("div",{className:"flex items-center justify-center h-full",children:jsx("span",{className:"text-neutral-400 text-sm",children:"No recent trades"})})}function vn({symbol:e,limit:t=50,onTradeClick:r,className:s}){let{trades:n,isLoading:o}=St({symbol:e,limit:t});return o?jsx(Sn,{}):n.length===0?jsx(Pn,{}):jsx("div",{className:s,children:jsx(vt,{trades:n,onTradeClick:r})})}function Tt({symbol:e,userAddress:t,maxLeverage:r=150,onSuccess:s,onError:n}){let[o,i]=useState("long"),[a,p]=useState("market"),l=useForm({defaultValues:{amount:0,leverage:20,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:u}=Se({symbol:e}),{mutateAsync:d,isPending:m}=ve({onSuccess:()=>{l.reset(),s?.();},onError:T=>{n?.(T);}}),f=l.watch(),{amount:b,leverage:y,price:w}=f,h=useMemo(()=>a==="limit"&&w?w:u?.price||0,[a,w,u?.price]),k=useMemo(()=>!b||!h?0:b*h*5e-4,[b,h]),C=useMemo(()=>!b||!h?0:b*h+k,[b,h,k]),N=useMemo(()=>{if(!b||!h||!y||y===1)return;let T=.005,L=h;return o==="long"?L*(1-(1/y-T)):L*(1+(1/y-T))},[b,h,y,o]),{data:R}=Pe({userAddress:t,symbol:e}),q=R?.totalEquity??0,A=R?.availableBalance??0,c=useMemo(()=>{let T=R?.positions?.[0];return T?T.side==="short"?-T.quantity:T.quantity:0},[R?.positions]),X=useCallback(async T=>{if(!t)throw new Error("User address is required");let L=a==="limit"?T.price:void 0,le=T.takeProfitPrice,te=T.stopLossPrice;if(!le&&T.takeProfitPercent&&T.takeProfitPercent>0&&h){let re=T.takeProfitPercent/100;le=o==="long"?h*(1+re):h*(1-re);}if(!te&&T.stopLossPercent&&T.stopLossPercent>0&&h){let re=T.stopLossPercent/100;te=o==="long"?h*(1-re):h*(1+re);}await d({symbol:e,side:o,orderType:a,amount:T.amount,price:L,leverage:T.leverage,takeProfitPrice:le,stopLossPrice:te,userAddress:t});},[e,o,a,h,t,d]);return {form:l,side:o,orderType:a,setSide:i,setOrderType:p,handleSubmit:X,isSubmitting:m,currentPrice:h,estimatedFee:k,estimatedTotal:C,liquidationPrice:N,availableMargin:A,accountValue:q,currentPosition:c,maxLeverage:r}}function Be(e,t=2){return e.toFixed(t)}function On({leverage:e,maxLeverage:t,onLeverageChange:r,onClose:s}){let n=[1,2,3,5,10,20,25,50,100].filter(o=>o<=t);return jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[jsx("div",{className:"absolute inset-0 bg-black/60",onClick:s,onKeyDown:o=>o.key==="Escape"&&s(),role:"button",tabIndex:-1,"aria-label":"Close"}),jsxs("div",{className:"relative z-10 w-72 bg-neutral-900 border border-neutral-700 rounded-lg p-4 shadow-2xl",children:[jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsx("h3",{className:"text-sm font-medium text-white",children:"Adjust Leverage"}),jsx("button",{type:"button",onClick:s,className:"text-neutral-400 hover:text-white",children:jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),jsxs("div",{className:"text-center text-2xl font-bold text-white mb-4",children:[e,"x"]}),jsx(Slider,{value:[e],onChange:o=>r(Array.isArray(o)?o[0]:o),minValue:1,maxValue:t,step:1,className:"w-full mb-3"}),jsx("div",{className:"flex flex-wrap gap-1.5",children:n.map(o=>jsxs("button",{type:"button",className:cn$1("px-2.5 py-1 text-xs rounded transition-colors",e===o?"bg-green-600 text-white":"bg-neutral-800 text-neutral-400 hover:bg-neutral-700"),onClick:()=>r(o),children:[o,"x"]},o))}),jsx("button",{type:"button",className:"w-full mt-4 text-white h-9 rounded cursor-pointer transition-colors",style:{backgroundColor:"#C7FF2E"},onClick:s,children:"Confirm"})]})]})}function Ct({methods:e,side:t,orderType:r,onSideChange:s,onOrderTypeChange:n,onSubmit:o,isSubmitting:i,symbol:a,currentPrice:p,estimatedFee:l,liquidationPrice:u,availableMargin:d,accountValue:m,currentPosition:f,maxLeverage:b}){let[y,w]=useState(false),[h,k]=useState(false),C=e.watch("leverage")||20,N=e.watch("amount")||0,R=a.split("-")[0],q=d>0&&p?Math.min(N*p/(d*C)*100,100):0,A=c=>{let X=(Array.isArray(c)?c[0]:c)/100;if(p&&p>0){let T=d*C*X/p;e.setValue("amount",Number(T.toFixed(6)));}};return jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000"},children:[jsxs("div",{className:"perp-order-form flex-1 overflow-y-auto",style:{padding:"16px 16px",display:"flex",flexDirection:"column",gap:16},children:[jsxs("div",{className:"flex",style:{border:"1px solid rgba(26,26,26,0.5)",borderRadius:8,padding:4,gap:4},children:[jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:t==="long"?"#C7FF2E":"transparent",color:t==="long"?"#000000":"#b5b5b5",fontWeight:t==="long"?700:500},onClick:()=>s("long"),children:"Long"}),jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:t==="short"?"#F76816":"transparent",color:t==="short"?"#000000":"#b5b5b5",fontWeight:t==="short"?700:500},onClick:()=>s("short"),children:"Short"})]}),jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsx("div",{className:"flex",children:[{key:"market",label:"Market"},{key:"limit",label:"Limit"}].map(c=>jsx("div",{style:{height:32,display:"flex",alignItems:"center",borderBottom:r===c.key?"2px solid #ffffff":"2px solid transparent",padding:"2px 0 0",cursor:"pointer"},children:jsx("button",{type:"button",className:"cursor-pointer transition-colors",style:{padding:"0 8px",fontSize:12,fontWeight:500,backgroundColor:"transparent",color:r===c.key?"#ffffff":"#b5b5b5",border:"none"},onClick:()=>n(c.key),children:c.label})},c.key))}),jsx("div",{className:"flex-1"}),jsxs("button",{type:"button",className:"cursor-pointer transition-colors",style:{height:24,padding:"0 5px",fontSize:12,borderRadius:4,backgroundColor:"rgba(26,26,26,0.5)",color:"#ffffff",fontWeight:400,border:"1px solid rgba(26,26,26,0.5)"},onClick:()=>w(true),children:["Leverage: ",C,"x"]})]}),jsx(RHForm,{methods:e,onSubmit:o,children:jsxs("div",{className:"space-y-3 w-full",children:[r==="limit"&&jsxs("div",{className:"perp-price-box",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Price"}),jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"USDC"})]}),jsx(RHNumberInput,{name:"price",placeholder:"0.0 USDC",className:"w-full"})]}),jsxs("div",{className:"perp-buy-amt",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Buy Amount"}),jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:R})]}),jsx(RHNumberInput,{name:"amount",placeholder:"0.0 USDC",className:"w-full"})]}),jsxs("div",{children:[jsx("style",{children:`
1
+ import {createContext,useMemo,useContext,useState,useCallback,useEffect,useReducer,useRef}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useQuery,useMutation}from'@tanstack/react-query';import {Skeleton,SearchIcon,RHForm,RHNumberInput,cn,Button,Modal,ModalContent,ModalHeader,ModalBody,Spinner,ModalFooter,Input,StyledModal,XCloseIcon,Card,CardBody,CardHeader,CardFooter,Slider}from'@liberfi.io/ui';import {useForm}from'react-hook-form';import {useTranslation}from'@liberfi.io/i18n';typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-perpetuals"]="0.2.5");var cs="0.2.5";var de=class{ws=null;wsEndpoint;subscriptions=new Map;reconnectAttempts=0;maxReconnectAttempts=10;reconnectDelay=1e3;heartbeatInterval=null;messageQueue=[];isConnected=false;pingInterval=3e4;reconnectTimeout=null;isReconnecting=false;constructor(t){this.wsEndpoint=t;}async connect(){return new Promise((t,r)=>{try{this.ws&&this.ws.close(),this.ws=new WebSocket(this.wsEndpoint),this.ws.onopen=()=>{console.log("[WebSocket] Connected to Hyperliquid"),this.isConnected=!0,this.reconnectAttempts=0,this.isReconnecting=!1,this.startHeartbeat(),this.flushMessageQueue(),t();},this.ws.onmessage=s=>{this.handleMessage(s.data);},this.ws.onerror=s=>{console.error("[WebSocket] Error:",s),this.isConnected=!1,this.isReconnecting||r(new Error("WebSocket connection failed"));},this.ws.onclose=s=>{console.log(`[WebSocket] Closed: ${s.code} - ${s.reason||"No reason provided"}`),this.isConnected=!1,this.stopHeartbeat(),s.code!==1e3&&this.attemptReconnect();};}catch(s){r(s);}})}disconnect(){this.stopHeartbeat(),this.subscriptions.clear(),this.reconnectTimeout!==null&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&(this.ws.close(1e3,"Normal closure"),this.ws=null),this.isConnected=false,this.isReconnecting=false,this.reconnectAttempts=0;}attemptReconnect(){if(this.isReconnecting)return;if(this.reconnectAttempts>=this.maxReconnectAttempts){console.error("[WebSocket] Max reconnection attempts reached");return}this.isReconnecting=true,this.reconnectAttempts++;let t=Math.min(this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1),3e4);console.log(`[WebSocket] Reconnecting in ${t}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`),this.reconnectTimeout=window.setTimeout(()=>{this.connect().then(()=>{this.resubscribeAll();}).catch(r=>{console.error("[WebSocket] Reconnection failed:",r),this.isReconnecting=false;});},t);}startHeartbeat(){this.heartbeatInterval=window.setInterval(()=>{this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN&&this.send({method:"ping"});},this.pingInterval);}stopHeartbeat(){this.heartbeatInterval!==null&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null);}send(t){this.isConnected&&this.ws&&this.ws.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(t)):this.messageQueue.push(t);}flushMessageQueue(){for(;this.messageQueue.length>0;){let t=this.messageQueue.shift();t&&this.send(t);}}resubscribeAll(){this.subscriptions.forEach(t=>{this.sendSubscription(t.type,t.param);});}handleMessage(t){try{let r=JSON.parse(t);r.channel?this.handleChannelMessage(r):r.method;}catch(r){console.error("[WebSocket] Failed to parse message:",r,t);}}handleChannelMessage(t){let r=t.channel;this.subscriptions.forEach((s,n)=>{if(this.isChannelMatch(r,s.type,s.param))try{let o=this.transformData(s.type,t.data,s.param);s.callback(o);}catch(o){console.error(`[WebSocket] Error in subscription callback (${n}):`,o);}});}isChannelMatch(t,r,s){return r==="ticker"?t==="allMids":r==="trades"?t==="trades":r==="orderBook"?t==="l2Book":r==="candle"?t==="candle":r==="userFills"?t==="userFills":r==="userEvents"?t==="userEvents":false}transformData(t,r,s){return t==="ticker"?this.transformTickerData(r):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){let r=t.mids||{};return Object.entries(r).map(([s,n])=>({symbol:`${s}-USDC`,price:parseFloat(n),timestamp:Date.now()}))}transformTradesData(t,r){return Array.isArray(t)?t.map(s=>({symbol:r,side:s.side==="B"?"buy":"sell",price:parseFloat(s.px),quantity:parseFloat(s.sz),timestamp:s.time,tradeId:s.tid})):[]}transformOrderBookData(t,r){let[s,n]=t.levels||[[],[]];return {symbol:r,bids:s.map(o=>({price:parseFloat(o.px),quantity:parseFloat(o.sz),count:o.n})),asks:n.map(o=>({price:parseFloat(o.px),quantity:parseFloat(o.sz),count:o.n})),timestamp:t.time||Date.now()}}transformCandleData(t,r){let[s]=r.split(":");return {symbol:s,open:parseFloat(t.o),high:parseFloat(t.h),low:parseFloat(t.l),close:parseFloat(t.c),volume:parseFloat(t.v),timestamp:t.t,closeTimestamp:t.T}}transformUserFillsData(t){return Array.isArray(t)?t.map(r=>({tradeId:r.tid?.toString(),orderId:r.oid?.toString(),symbol:`${r.coin}-USDC`,side:r.dir?.includes("Long")?"long":"short",price:parseFloat(r.px),quantity:parseFloat(r.sz),fee:parseFloat(r.fee||"0"),feeCurrency:r.feeToken||"USDC",isMaker:r.side==="M",timestamp:r.time})):[]}transformUserEventsData(t){return t}sendSubscription(t,r){let s;if(t==="ticker")s={method:"subscribe",subscription:{type:"allMids"}};else if(t==="trades")s={method:"subscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook")s={method:"subscribe",subscription:{type:"l2Book",coin:r.split("-")[0]}};else if(t==="candle"){let[n,o]=r.split(":");s={method:"subscribe",subscription:{type:"candle",coin:n.split("-")[0],interval:o}};}else t==="userFills"?s={method:"subscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"&&(s={method:"subscribe",subscription:{type:"userEvents",user:r}});s&&this.send(s);}sendUnsubscription(t,r){let s;if(t==="ticker")s={method:"unsubscribe",subscription:{type:"allMids"}};else if(t==="trades")s={method:"unsubscribe",subscription:{type:"trades",coin:r.split("-")[0]}};else if(t==="orderBook")s={method:"unsubscribe",subscription:{type:"l2Book",coin:r.split("-")[0]}};else if(t==="candle"){let[n,o]=r.split(":");s={method:"unsubscribe",subscription:{type:"candle",coin:n.split("-")[0],interval:o}};}else t==="userFills"?s={method:"unsubscribe",subscription:{type:"userFills",user:r}}:t==="userEvents"&&(s={method:"unsubscribe",subscription:{type:"userEvents",user:r}});s&&this.send(s);}subscribe(t,r,s){let n=`${t}:${r}`;return this.subscriptions.set(n,{type:t,param:r,callback:s}),this.sendSubscription(t,r),n}unsubscribe(t){let r=this.subscriptions.get(t);r&&(this.sendUnsubscription(r.type,r.param),this.subscriptions.delete(t));}isConnectedNow(){return this.isConnected}};var Yt={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"}},Ke=class{apiEndpoint;_wsEndpoint;timeout;environment;wsManager=null;wsRefCount=0;constructor(t={}){this.environment=t.environment||"testnet",this.apiEndpoint=t.apiEndpoint||Yt[this.environment].api,this._wsEndpoint=t.wsEndpoint||Yt[this.environment].ws,this.timeout=t.timeout||3e4;}async request(t,r){let s=`${this.apiEndpoint}${t}`;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 ne(`HTTP ${i.status}: ${i.statusText}`,i.status,await i.text());return await i.json()}catch(n){throw n.name==="AbortError"?new ne(`Request timeout after ${this.timeout}ms`,408,""):n instanceof ne?n:new ne(`Network error: ${n.message}`,0,"")}}symbolToCoin(t){return t.split("-")[0]}parseInterval(t){return {"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"1d":864e5,"1w":6048e5}[t]}async getSupportedCoins(){let[t]=await this.request("/info",{type:"metaAndAssetCtxs"});return t.universe.map(r=>`${r.name}-USDC`)}async getMarket(t){let r=await this.getMarkets([t]);return r.length>0?r[0]:null}async getMarkets(t){let[r,s]=await this.request("/info",{type:"metaAndAssetCtxs"}),n=r.universe.map((o,i)=>{let a=s[i],p=`${o.name}-USDC`,l=parseFloat(a.midPx||a.markPx||"0"),u=a.prevDayPx?parseFloat(a.prevDayPx):l,d=u>0?(l-u)/u*100:0;return {symbol:p,price:l,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")}});if(t&&t.length>0){let o=new Set(t);return n.filter(i=>o.has(i.symbol))}return n}async getKlines(t,r,s=100){let n=this.symbolToCoin(t),o=this.parseInterval(r),i=Date.now(),a=i-o*s;return (await this.request("/info",{type:"candleSnapshot",req:{coin:n,interval:r,startTime:a,endTime:i}})).map(l=>({symbol:t,open:parseFloat(l.o),high:parseFloat(l.h),low:parseFloat(l.l),close:parseFloat(l.c),volume:parseFloat(l.v),timestamp:l.t,closeTimestamp:l.T}))}async getOrderBook(t,r=10){let s=this.symbolToCoin(t),n=await this.request("/info",{type:"l2Book",coin:s}),[o,i]=n.levels;return {symbol:t,bids:o.slice(0,r).map(a=>({price:parseFloat(a.px),quantity:parseFloat(a.sz),count:a.n})),asks:i.slice(0,r).map(a=>({price:parseFloat(a.px),quantity:parseFloat(a.sz),count:a.n})),timestamp:n.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=await this.request("/info",{type:"clearinghouseState",user:t.userAddress}),s=r.assetPositions.map(o=>{let i=o.position,a=`${i.coin}-USDC`,p=parseFloat(i.szi);if(p===0)return null;let l=parseFloat(i.entryPx),u=parseFloat(i.unrealizedPnl),d=parseFloat(i.positionValue);return {symbol:a,side:p>0?"long":"short",quantity:Math.abs(p),entryPrice:l,markPrice:l,unrealizedPnl:u,unrealizedPnlPercent:parseFloat(i.returnOnEquity)*100,leverage:i.leverage.value,liquidationPrice:i.liquidationPx?parseFloat(i.liquidationPx):void 0,margin:parseFloat(i.marginUsed),notionalValue:Math.abs(d)}}).filter(Boolean),n=t.symbol?s.filter(o=>o.symbol===t.symbol):s;return {positions:n,totalEquity:parseFloat(r.marginSummary.accountValue),availableBalance:parseFloat(r.marginSummary.accountValue)-parseFloat(r.marginSummary.totalMarginUsed),totalUnrealizedPnl:n.reduce((o,i)=>o+i.unrealizedPnl,0),raw:r}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"openOrders",user:t.userAddress}),s=r.map(o=>{let i=`${o.coin}-USDC`,a=parseFloat(o.origSz),p=parseFloat(o.sz),l=a-p;return {orderId:o.oid.toString(),clientOrderId:o.cloid,symbol:i,side:o.side?"long":"short",orderType:"limit",price:parseFloat(o.limitPx),quantity:a,filledQuantity:l,remainingQuantity:p,status:l>0&&p>0?"partially_filled":"pending",timestamp:o.timestamp,updateTimestamp:o.timestamp}}),n=t.symbol?s.filter(o=>o.symbol===t.symbol):s;return {orders:n,totalCount:n.length,raw:r}}async getTrades(t={}){if(!t.userAddress)throw new Error("Hyperliquid requires userAddress parameter. Example: { userAddress: '0x...' }");let r=await this.request("/info",{type:"userFills",user:t.userAddress}),s=r.map(n=>{let 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}});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 de(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){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager.subscribe(t,r,s)}subscribeCandles(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=`${t}:${r}`;return this.wsManager.subscribe("candle",n,s)}subscribeUserData(t,r,s){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");let n=t==="fills"?"userFills":"userEvents";return this.wsManager.subscribe(n,r,s)}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}},ne=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="HyperliquidApiError";}};var $=class extends Error{constructor(r,s,n){super(r);this.statusCode=s;this.responseBody=n;this.name="LiberFiApiError";}},ms=3e4,oe=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??ms,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 p=await fs(a);throw new $(`HTTP ${a.status} ${a.statusText} from ${t} ${s}`,a.status,p)}return a.status===204?void 0:await a.json()}catch(a){if(a instanceof $)throw a;if(a instanceof Error&&a.name==="AbortError")throw new $(`Request timeout after ${o}ms: ${t} ${s}`,408,"");let p=a instanceof Error?a.message:String(a);throw new $(`Network error: ${t} ${s}: ${p}`,0,"")}finally{clearTimeout(i);}}};async function fs(e){try{return await e.text()}catch{return ""}}var ys="wss://api.hyperliquid.xyz/ws",Ge=class{transport;wsEndpoint;signTypedData;wsManager=null;wsRefCount=0;constructor(t){if(t.transport)this.transport=t.transport;else {if(!t.baseUrl)throw new Error("LiberFiPerpetualsClient: either `baseUrl` or a pre-built `transport` is required.");this.transport=new oe({baseUrl:t.baseUrl,timeout:t.timeout,headers:t.headers,defaultQuery:t.provider?{provider:t.provider}:void 0});}this.wsEndpoint=t.wsEndpoint??ys,this.signTypedData=t.signTypedData;}async getSupportedCoins(){return (await this.transport.request("GET",{path:"/v1/coins"})).map(r=>r.symbol)}async getMarket(t){try{return await this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}`})}catch(r){if(r instanceof $&&r.statusCode===404)return null;throw r}}async getMarkets(t){return this.transport.request("GET",{path:"/v1/markets",query:t&&t.length>0?{symbols:t.join(",")}:void 0})}async getKlines(t,r,s=100){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/klines`,query:{interval:r,limit:String(s)}})}async getOrderBook(t,r=10){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/orderbook`,query:{maxLevel:String(r)}})}async getRecentTrades(t,r=50){return this.transport.request("GET",{path:`/v1/markets/${encodeURIComponent(t)}/trades`,query:{limit:String(r)}})}async getPositions(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getPositions requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/positions`,query:{symbol:t.symbol}});return {positions:r.positions,totalEquity:r.account?.totalEquity,availableBalance:r.account?.availableBalance,totalUnrealizedPnl:r.account?.totalUnrealizedPnl,raw:r}}async getOpenOrders(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getOpenOrders requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/orders`,query:{symbol:t.symbol}});return {orders:r,totalCount:r.length,raw:r}}async getTrades(t={}){if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.getTrades requires `userAddress`.");let r=await this.transport.request("GET",{path:`/v1/users/${encodeURIComponent(t.userAddress)}/fills`,query:{symbol:t.symbol,limit:t.limit!==void 0?String(t.limit):void 0,startTime:t.startTime!==void 0?String(t.startTime):void 0,endTime:t.endTime!==void 0?String(t.endTime):void 0}}),s=r.map(n=>({tradeId:n.tradeId,orderId:n.orderId,symbol:n.symbol,side:n.side,price:n.price,quantity:n.quantity,fee:n.fee,feeCurrency:n.feeCurrency,isMaker:n.isMaker,timestamp:n.timestamp}));return {trades:s,totalCount:s.length,raw:r}}async placeOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.placeOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.placeOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,side:t.side,orderType:t.orderType,amount:t.amount,price:t.price,leverage:t.leverage,reduceOnly:t.reduceOnly,takeProfitPrice:t.takeProfitPrice,stopLossPrice:t.stopLossPrice,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async cancelOrder(t){if(!this.signTypedData)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `signTypedData` to be configured.");if(!t.userAddress)throw new Error("LiberFiPerpetualsClient.cancelOrder requires `userAddress` (the signing wallet).");let r=await this.transport.request("POST",{path:"/v1/orders/cancel/prepare",body:{userAddress:t.userAddress,symbol:t.symbol,orderId:t.orderId,clientOrderId:t.clientOrderId}}),s=await this.signTypedData(r.typedData);return this.transport.request("POST",{path:"/v1/orders/cancel/submit",body:{action:r.action,signature:s,nonce:r.nonce,vaultAddress:r.vaultAddress}})}async connectWebSocket(){this.wsRefCount+=1,this.wsManager||(this.wsManager=new de(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){return this.requireWS().subscribe(t,r,s)}subscribeCandles(t,r,s){return this.requireWS().subscribe("candle",`${t}:${r}`,s)}subscribeUserData(t,r,s){let n=t==="fills"?"userFills":"userEvents";return this.requireWS().subscribe(n,r,s)}unsubscribe(t){this.wsManager&&this.wsManager.unsubscribe(t);}requireWS(){if(!this.wsManager)throw new Error("WebSocket not connected. Call connectWebSocket() first.");return this.wsManager}};var Ve=class{transport;constructor(t){this.transport="transport"in t?t.transport:new oe(t);}getBaseUrl(){return this.transport.getBaseUrl()}async quote(t){return this.transport.request("POST",{path:"/v1/deposits/quote",body:t})}async submit(t){return this.transport.request("POST",{path:"/v1/deposits/submit",body:t})}async status(t){if(!t)throw new Error("intentId is required");return this.transport.request("GET",{path:`/v1/deposits/${encodeURIComponent(t)}`})}async refresh(t){if(!t)throw new Error("intentId is required");return this.transport.request("POST",{path:`/v1/deposits/${encodeURIComponent(t)}/refresh`})}};var xe=new Set(["settled","refunded","failed"]);var Ue={phase:"idle"};function je(e,t){switch(t.type){case "RESET":return Ue;case "QUOTE_REQUEST":return e.phase==="idle"||e.phase==="ready_to_sign"||e.phase==="expired"||e.phase==="failed"?{phase:"quoting"}:e;case "QUOTE_RECEIVED":return e.phase==="quoting"?{phase:"ready_to_sign",quote:t.quote,expiresAtMs:Date.parse(t.quote.expiresAt)}:e;case "QUOTE_FAILED":return e.phase==="quoting"?{phase:"failed",error:t.error}:e;case "QUOTE_EXPIRED":return e.phase==="ready_to_sign"?{phase:"expired",quote:e.quote}:e;case "SIGN_START":return e.phase==="ready_to_sign"?{phase:"signing",quote:e.quote}:e;case "SIGN_FAILED":return e.phase==="signing"?{phase:"failed",error:t.error}:e;case "BROADCAST_START":return e.phase==="signing"?{phase:"broadcasting",quote:e.quote}:e;case "BROADCAST_FAILED":return e.phase==="broadcasting"||e.phase==="signing"?{phase:"failed",error:t.error}:e;case "SUBMIT_OK":return e.phase==="broadcasting"?{phase:"submitted",quote:e.quote,intentId:t.intentId,solanaTxHash:t.solanaTxHash}:e;case "SUBMIT_FAILED":return e.phase==="broadcasting"?{phase:"failed",error:t.error}:e;case "STATUS_UPDATE":{if(e.phase!=="submitted"&&e.phase!=="tracking")return e;let r=(e.phase==="submitted",e.intentId);return gs(t.status,r)}}}function gs(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 bs(e){return e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"}function hs(e){return e.phase==="submitted"||e.phase==="tracking"}function xs(e){if(e.phase==="tracking"||e.phase==="succeeded"||e.phase==="refunded"||e.phase==="failed"&&e.status)return e.status.status}function Ss(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 Ps(e){return e!==void 0&&xe.has(e)}var ie=createContext({});function Cs({client:e,depositClient:t,children:r}){let s=useMemo(()=>({client:e,depositClient:t}),[e,t]);return jsx(ie.Provider,{value:s,children:r})}function D(){let e=useContext(ie);if(!e||!e.client)throw new Error("usePerpetualsClient must be used within a PerpetualsProvider");return e}function Zt(){return ["perps","coins"]}async function er(e){return await e.getSupportedCoins()}function Je(e={}){let{client:t}=D();return useQuery({queryKey:Zt(),queryFn:async()=>er(t),staleTime:300*1e3,...e})}function tr(e){return ["perps","market",e.symbol]}async function rr(e,{symbol:t}){return await e.getMarket(t)}function Se(e,t={}){let{client:r}=D();return useQuery({queryKey:tr(e),queryFn:async()=>rr(r,e),staleTime:10*1e3,...t})}function sr(e={}){return ["perps","markets",JSON.stringify((e.symbols??[]).sort())]}async function nr(e,{symbols:t}={}){return await e.getMarkets(t)}function Xe(e={},t={}){let{client:r}=D();return useQuery({queryKey:sr(e),queryFn:async()=>nr(r,e),staleTime:10*1e3,...t})}function or(e){return ["perps","klines",e.symbol,e.interval,String(e.limit??100)]}async function ir(e,{symbol:t,interval:r,limit:s}){return await e.getKlines(t,r,s)}function Is(e,t={}){let{client:r}=D();return useQuery({queryKey:or(e),queryFn:async()=>ir(r,e),staleTime:30*1e3,...t})}function ar(e){return ["perps","orderBook",e.symbol,String(e.maxLevel??20)]}async function pr(e,{symbol:t,maxLevel:r}){return await e.getOrderBook(t,r)}function Ye(e,t={}){let{client:r}=D();return useQuery({queryKey:ar(e),queryFn:async()=>pr(r,e),staleTime:5*1e3,...t})}function lr(e){return ["perps","recentTrades",e.symbol,String(e.limit??50)]}async function ur(e,{symbol:t,limit:r}){return await e.getRecentTrades(t,r)}function Ze(e,t={}){let{client:r}=D();return useQuery({queryKey:lr(e),queryFn:async()=>ur(r,e),staleTime:5*1e3,...t})}function dr(e){return ["perps","positions",e.userAddress??"",e.symbol??""]}async function cr(e,t){return await e.getPositions(t)}function Pe(e,t={}){let{client:r}=D(),{enabled:s=true,...n}=e;return useQuery({queryKey:dr(n),queryFn:async()=>cr(r,n),enabled:s&&!!n.userAddress,staleTime:10*1e3,...t})}function mr(e){return ["perps","orders",e.userAddress??"",e.symbol??""]}async function fr(e,t){return await e.getOpenOrders(t)}function et(e,t={}){let{client:r}=D(),{enabled:s=true,...n}=e;return useQuery({queryKey:mr(n),queryFn:async()=>fr(r,n),enabled:s&&!!n.userAddress,staleTime:5*1e3,...t})}function yr(e){return ["perps","trades",e.userAddress??"",e.symbol??"",String(e.limit??50),String(e.startTime??""),String(e.endTime??"")]}async function gr(e,t){return await e.getTrades(t)}function tt(e,t={}){let{client:r}=D(),{enabled:s=true,...n}=e;return useQuery({queryKey:yr(n),queryFn:async()=>gr(r,n),enabled:s&&!!n.userAddress,staleTime:30*1e3,...t})}async function br(e,t){return await e.placeOrder(t)}function ve(e={}){let{client:t}=D();return useMutation({mutationFn:async r=>br(t,r),...e})}async function hr(e,t){return await e.cancelOrder(t)}function rt(e={}){let{client:t}=D();return useMutation({mutationFn:async r=>hr(t,r),...e})}function ae(e){let{type:t,symbol:r,enabled:s=true}=e,{client:n}=D(),[o,i]=useState(null),[a,p]=useState(false),[l,u]=useState(null),d=useCallback(c=>{i(c);},[]);return useEffect(()=>{if(!s)return;let c=null,m=true;return (async()=>{try{if(await n.connectWebSocket(),!m)return;p(!0),u(null),c=n.subscribeMarketData(t,r,d);}catch(f){m&&(u(f instanceof Error?f:new Error("Connection failed")),p(false));}})(),()=>{if(m=false,c)try{n.unsubscribe(c);}catch(f){console.error("Failed to unsubscribe:",f);}n.disconnectWebSocket(),p(false),i(null);}},[n,t,r,s,d]),{data:o,isConnected:a,error:l}}function _s(e){let{symbol:t,interval:r,enabled:s=true}=e,{client:n}=D(),[o,i]=useState(null),[a,p]=useState(false),[l,u]=useState(null),d=useCallback(c=>{i(c);},[]);return useEffect(()=>{if(!s)return;let c=null,m=true;return (async()=>{try{if(await n.connectWebSocket(),!m)return;p(!0),u(null),c=n.subscribeCandles(t,r,d);}catch(f){m&&(u(f instanceof Error?f:new Error("Connection failed")),p(false));}})(),()=>{if(m=false,c)try{n.unsubscribe(c);}catch(f){console.error("Failed to unsubscribe:",f);}n.disconnectWebSocket(),p(false),i(null);}},[n,t,r,s,d]),{data:o,isConnected:a,error:l}}function De(e){let{type:t,userAddress:r,enabled:s=true}=e,{client:n}=D(),[o,i]=useState(null),[a,p]=useState(false),[l,u]=useState(null),d=useCallback(c=>{i(c);},[]);return useEffect(()=>{if(!s||!r)return;let c=null,m=true;return (async()=>{try{if(await n.connectWebSocket(),!m)return;p(!0),u(null),c=n.subscribeUserData(t,r,d);}catch(f){m&&(u(f instanceof Error?f:new Error("Connection failed")),p(false));}})(),()=>{if(m=false,c)try{n.unsubscribe(c);}catch(f){console.error("Failed to unsubscribe:",f);}n.disconnectWebSocket(),p(false),i(null);}},[n,t,r,s,d]),{data:o,isConnected:a,error:l}}function pe(){let e=useContext(ie);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 xr(e){return ["perps","deposit","quote",e]}async function Sr(e,t){return e.quote(t)}function it(e,t={}){let r=pe(),s=t.enabled??!!Vs(e);return useQuery({queryKey:xr(e??null),queryFn:async()=>Sr(r,e),enabled:s,staleTime:0,gcTime:3e4,refetchOnWindowFocus:false,...t})}function Vs(e){return !!(e&&e.userSolanaAddress&&e.hyperliquidRecipient&&e.grossLamports&&e.source)}function at(e){let t=pe(),[r,s]=useReducer(je,Ue),n=useCallback(()=>{s({type:"RESET"});},[]),o=useCallback(async i=>{let{quote:a}=i;s({type:"SIGN_START"});let p;try{if(p=await e(a.serializedTxBase64,{isVersioned:a.isVersioned,sizeBytes:a.sizeBytes}),!p)throw new Error("wallet returned an empty tx hash")}catch(u){let d=vr(u,"WALLET_SIGN_OR_BROADCAST_FAILED");throw s({type:"SIGN_FAILED",error:d}),u}s({type:"BROADCAST_START"});let l={userSolanaAddress:i.userSolanaAddress,hyperliquidRecipient:i.hyperliquidRecipient,solanaTxHash:p,breakdown:a.breakdown,userId:i.userId,source:i.source,campaign:i.campaign,quoteIssuedAt:a.issuedAt};try{let u=await t.submit(l);return s({type:"SUBMIT_OK",intentId:u.intentId,solanaTxHash:p}),u.intentId}catch(u){let d=vr(u,"DEPOSIT_SUBMIT_FAILED");throw s({type:"SUBMIT_FAILED",error:d}),u}},[t,e]);return {state:r,execute:o,reset:n,dispatch:s}}function vr(e,t){if(e instanceof $){let r=Js(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 Js(e){if(e)try{return JSON.parse(e)}catch{return}}function Dr(e){return ["perps","deposit","status",e??null]}async function Cr(e,t){return e.status(t)}function pt(e,t={}){let r=pe(),s=t.enabled??!!e,n=t.pollIntervalMs??3e3;return useQuery({queryKey:Dr(e??void 0),queryFn:async()=>Cr(r,e),enabled:s,refetchInterval:o=>{let i=o.state.data;return i&&xe.has(i.status)?false:n},refetchOnWindowFocus:false,staleTime:0,...t})}var Ce={phase:"idle",steps:[]};function Ee(e,t){switch(e.id){case "approveBuilderFee":{let r=t.builderApproval;return r&&Ys(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 Fe(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?Zs(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 Ce}}function qe(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 Ys(e,t){return e.toLowerCase()===t.toLowerCase()}function Zs(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 Ae(e){let{adapter:t,userAddress:r,steps:s,autoLoad:n=true,onComplete:o,onError:i}=e,[a,p]=useReducer(Fe,Ce),l=useRef(t),u=useRef(s),d=useRef(o),c=useRef(i);l.current=t,u.current=s,d.current=o,c.current=i;let m=useCallback(async()=>{if(r){p({type:"START_LOADING"});try{let w=await l.current.getAccountState(r),O=u.current.map(k=>({step:k,status:Ee(k,w)}));p({type:"LOAD_SUCCESS",accountState:w,steps:O});}catch(w){let O=wr(w);p({type:"LOAD_ERROR",error:O.message}),c.current?.(O,{});}}},[r]);useEffect(()=>{n&&r&&m();},[n,r,m]);let b=useCallback(async w=>{let O=a.steps[w];if(O){p({type:"RUN_STEP",index:w});try{let k=await tn(l.current,O.step);p({type:"STEP_SUCCESS",index:w,txHash:k.txHash,accountState:k.state});}catch(k){let U=wr(k);p({type:"STEP_ERROR",index:w,error:U.message}),c.current?.(U,{stepId:O.step.id});}}},[a.steps]),f=useCallback(async()=>{let w=qe(a);w!=null&&await b(w);},[a,b]),I=useCallback(()=>p({type:"RESET"}),[]),h=useRef(false);return useEffect(()=>{a.phase==="done"&&!h.current?(h.current=true,d.current?.(a)):a.phase!=="done"&&(h.current=false);},[a]),{state:a,reload:m,runNext:f,runStep:b,reset:I}}function tn(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 wr(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error")}function lt(){return jsx("div",{className:"flex items-center justify-center px-4 py-3 bg-neutral-900 border-b border-neutral-800",children:jsx("span",{className:"text-neutral-400 text-sm",children:"Market data not available"})})}function ut(){return jsxs("div",{className:"flex items-center gap-6 px-4 py-3 bg-neutral-900 border-b border-neutral-800",children:[jsxs("div",{className:"flex items-center gap-3",children:[jsx(Skeleton,{className:"h-6 w-20 rounded"}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(Skeleton,{className:"h-8 w-28 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]})]}),jsx("div",{className:"h-8 w-px bg-neutral-800"}),jsxs("div",{className:"flex items-center gap-6 text-sm",children:[jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-20 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]}),jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-20 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]}),jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-24 rounded"}),jsx(Skeleton,{className:"h-5 w-16 rounded"})]}),jsxs("div",{className:"flex flex-col gap-1",children:[jsx(Skeleton,{className:"h-3 w-32 rounded"}),jsxs("div",{className:"flex items-center gap-2",children:[jsx(Skeleton,{className:"h-5 w-16 rounded"}),jsx(Skeleton,{className:"h-5 w-20 rounded"})]})]})]})]})}function ct(e){let[t,r]=useState(),[s,n]=useState(0),{data:o,isPending:i}=Se({symbol:e}),{data:a,isConnected:p}=ae({type:"ticker",symbol:e,enabled:!!o});return useEffect(()=>{o&&r(o);},[o]),useEffect(()=>{if(!a)return;let l=rn(a,e);l&&r(u=>sn(u??o??void 0,l,e));},[a,o,e]),useEffect(()=>{let l=()=>{let d=Date.now(),c=480*60*1e3,m=d%c,b=c-m;return Math.floor(b/1e3)};n(l());let u=setInterval(()=>{n(l());},1e3);return ()=>clearInterval(u)},[]),{marketData:t,isLoading:i,fundingCountdown:s}}function rn(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 ce(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function sn(e,t,r){return {symbol:t.symbol??e?.symbol??r,price:ce(t.price,e?.price??0),change24h:ce(t.change24h,e?.change24h??0),volume24h:ce(t.volume24h,e?.volume24h??0),fundingRate:ce(t.fundingRate,e?.fundingRate??0),openInterest:ce(t.openInterest,e?.openInterest??0),markPrice:ce(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 nn(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 Nr(e,t=2){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function Rr(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function mt({marketData:e,fundingCountdown:t}){let{symbol:r,price:s,change24h:n,indexPrice:o,volume24h:i,openInterest:a,fundingRate:p}=e,l=typeof n=="number"&&Number.isFinite(n)?n:0,u=typeof p=="number"&&Number.isFinite(p)?p:0,d=l>=0,c=l.toFixed(2);return jsxs("div",{className:"flex items-center px-4",style:{minHeight:64,maxHeight:64,gap:16},children:[jsxs("div",{className:"flex items-baseline",style:{gap:8},children:[jsx("span",{style:{fontSize:18,fontWeight:500,lineHeight:"23px",letterSpacing:"-0.36px",color:"#ffffff"},children:Rr(s)}),jsxs("span",{style:{fontSize:12,fontWeight:400,lineHeight:"16px",color:d?"#C7FF2E":"#F76816"},children:[d?"+":"",c,"%"]})]}),jsxs("div",{className:"flex items-center",style:{gap:16},children:[jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Oracle Price"}),jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:o?Rr(o):"-"})]}),jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"24h Volume"}),jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:Nr(i,0)})]}),jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Open Interest"}),jsx("span",{style:{fontSize:13,fontWeight:400,lineHeight:"17px",color:"#ffffff"},children:Nr(a*(e.markPrice||s))})]}),jsxs("div",{className:"flex flex-col",children:[jsx("span",{style:{fontSize:12,color:"#b5b5b5",lineHeight:"16px",letterSpacing:"-0.12px"},children:"Funding / Countdown"}),jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsxs("span",{style:{fontSize:13,lineHeight:"17px",color:u>=0?"#C7FF2E":"#F76816"},children:[(u*100).toFixed(5),"%"]}),jsx("span",{style:{fontSize:13,lineHeight:"17px",color:"#ffffff"},children:nn(t)})]})]})]})]})}function on({symbol:e}){let{marketData:t,isLoading:r,fundingCountdown:s}=ct(e);return r?jsx(ut,{}):t?jsx(mt,{marketData:t,fundingCountdown:s}):jsx(lt,{})}function yt({onSelectCoin:e}={}){let[t,r]=useState(""),[s,n]=useState([]),{data:o,isPending:i}=Je(),{data:a,isPending:p}=Xe({symbols:o},{enabled:!!o&&o.length>0});useEffect(()=>{a&&n(a);},[a]);let l=useMemo(()=>{if(!t.trim())return s;let d=t.toLowerCase().trim();return s.filter(c=>c.symbol.toLowerCase().includes(d))},[s,t]);return {coins:s,isLoading:i||p,searchQuery:t,setSearchQuery:r,filteredCoins:l,handleSelectCoin:d=>{e?.(d);}}}function Ur(e,t=2){return e>=1e9?`$${(e/1e9).toFixed(t)}B`:e>=1e6?`$${(e/1e6).toFixed(t)}M`:e>=1e3?`$${(e/1e3).toFixed(t)}K`:`$${e.toFixed(t)}`}function un(e){return e>=1e3?e.toFixed(2):e>=1?e.toFixed(4):e.toFixed(6)}function gt({coins:e,searchQuery:t,onSearchChange:r,onSelectCoin:s,isLoading:n}){return jsxs("div",{className:"flex flex-col",style:{backgroundColor:"#1A1A1A",flex:"1 1 0",minHeight:0},children:[jsx("div",{style:{padding:"16px 16px 12px"},children:jsxs("div",{className:"flex items-center",style:{height:32,border:"1px solid #2a2a2a",borderRadius:4,padding:"0 6px 0 12px",gap:8},children:[jsx(SearchIcon,{className:"flex-shrink-0",style:{width:14,height:14,color:"#6b6b6b"}}),jsx("input",{type:"text",placeholder:"Search coins...",value:t,onChange:o=>r(o.target.value),className:"flex-1 bg-transparent outline-none",style:{fontSize:12,color:"#ffffff",border:"none"}})]})}),jsxs("div",{className:"flex-1 overflow-auto",children:[jsxs("div",{className:"flex items-center",style:{height:28,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)",position:"sticky",top:0,backgroundColor:"#1A1A1A",zIndex:1},children:[jsx("span",{style:{flex:"0 0 140px",fontSize:12,color:"#6b6b6b"},children:"Token"}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Last Price"}),jsx("span",{style:{flex:"0 0 120px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Change"}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"8h Funding"}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"24h Volume"}),jsx("span",{style:{flex:"1",fontSize:12,color:"#6b6b6b",textAlign:"right"},children:"Open Interest"})]}),n?jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Loading..."})}):e.length===0?jsx("div",{className:"flex items-center justify-center",style:{height:100},children:jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:t?"No coins found":"No coins available"})}):e.map(o=>{let i=o.change24h>=0,a=o.change24h.toFixed(2),p=(o.fundingRate*100).toFixed(4),l=o.fundingRate>=0,u=o.symbol.split("-")[0];return jsxs("div",{className:"flex items-center cursor-pointer transition-colors",style:{height:36,padding:"0 16px",borderBottom:"1px solid rgba(42,42,42,0.5)"},onClick:()=>s(o.symbol),onMouseEnter:d=>{d.currentTarget.style.backgroundColor="rgba(255,255,255,0.03)";},onMouseLeave:d=>{d.currentTarget.style.backgroundColor="transparent";},children:[jsxs("div",{className:"flex items-center",style:{flex:"0 0 140px",gap:8},children:[jsx("img",{src:`https://app.hyperliquid.xyz/coins/${u}.svg`,alt:u,className:"rounded-full",style:{width:20,height:20},onError:d=>{let c=d.target;c.style.display="none";}}),jsx("span",{style:{fontSize:12,fontWeight:500,color:"#ffffff"},children:u})]}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#ffffff",textAlign:"right"},children:un(o.price)}),jsxs("span",{style:{flex:"0 0 120px",fontSize:12,fontWeight:500,color:i?"#C7FF2E":"#F76816",textAlign:"right"},children:[i?"+":"",a,"%"]}),jsxs("span",{style:{flex:"0 0 100px",fontSize:12,color:l?"#C7FF2E":"#F76816",textAlign:"right"},children:[p,"%"]}),jsx("span",{style:{flex:"0 0 100px",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Ur(o.volume24h)}),jsx("span",{style:{flex:"1",fontSize:12,color:"#b5b5b5",textAlign:"right"},children:Ur(o.openInterest*o.price)})]},o.symbol)})]})]})}function dn({onSelectCoin:e,className:t}){let{filteredCoins:r,isLoading:s,searchQuery:n,setSearchQuery:o,handleSelectCoin:i}=yt({onSelectCoin:e});return jsx("div",{className:t,style:{display:"flex",flexDirection:"column",flex:"1 1 0",minHeight:0,overflow:"hidden"},children:jsx(gt,{coins:r,searchQuery:n,onSearchChange:o,onSelectCoin:i,isLoading:s})})}function qr(e,t){if(t<=0)return e;let r=new Map;return e.forEach(s=>{let n=Math.floor(s.price/t)*t,o=r.get(n);o?(o.quantity+=s.quantity,s.count&&(o.count=(o.count||0)+s.count)):r.set(n,{price:n,quantity:s.quantity,count:s.count});}),Array.from(r.values())}function Mr(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 bt({symbol:e,maxLevel:t=20,precision:r=.01}){let[s,n]=useState(null),[o,i]=useState(r),{data:a,isPending:p}=Ye({symbol:e,maxLevel:t}),{data:l}=ae({type:"orderBook",symbol:e,enabled:!!a});return useEffect(()=>{l?n(l):a&&n(a);},[l,a]),{...useMemo(()=>{if(!s)return {bids:[],asks:[],spread:0,spreadPercentage:0};let d=qr(s.bids,o),c=qr(s.asks,o),m=d.sort((U,A)=>A.price-U.price).slice(0,t),b=c.sort((U,A)=>U.price-A.price).slice(0,t),f=Mr(m),I=Mr(b),h=f[0]?.price||0,O=(I[0]?.price||0)-h,k=h>0?O/h*100:0;return {bids:f,asks:I,spread:O,spreadPercentage:k}},[s,o,t]),isLoading:p,precision:o,setPrecision:i}}function fn(e){return e>=1e3?e.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):e>=1?e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):e.toFixed(6)}function Ar(e){return Math.round(e).toLocaleString("en-US")}function Lr({price:e,quantity:t,total:r,percentage:s,side:n,onClick:o}){let i=n==="ask";return jsxs("div",{className:"relative flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:{height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},onClick:o,children:[jsx("div",{className:"absolute left-0 top-0",style:{height:20,width:`${s}%`,background:i?"linear-gradient(to right, rgba(247,104,22,0), #F76816)":"linear-gradient(to right, rgba(199,255,46,0), #C7FF2E)",opacity:.15}}),jsx("div",{className:"relative z-10 flex items-center",style:{flex:"1 1 0%"},children:jsx("span",{style:{color:i?"#F76816":"#C7FF2E",fontWeight:400},children:fn(e)})}),jsx("div",{className:"relative z-10 flex items-center justify-end",style:{flex:"1 1 0%",color:"#ffffff"},children:Ar(t)}),jsx("div",{className:"relative z-10 flex items-center justify-end",style:{flex:"1 1 0%",color:"#ffffff"},children:Ar(r)})]})}function ht({bids:e,asks:t,spread:r,spreadPercentage:s,onPriceClick:n}){return jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000",fontSize:11},children:[jsxs("div",{className:"flex items-center",style:{height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},children:[jsx("div",{className:"flex items-center",style:{flex:"1 1 0%"},children:"Price"}),jsx("div",{className:"flex items-center justify-end",style:{flex:"1 1 0%"},children:"Amount (USD)"}),jsx("div",{className:"flex items-center justify-end",style:{flex:"1 1 0%"},children:"Total (USD)"})]}),jsx("div",{className:"flex-1 flex flex-col-reverse overflow-hidden",children:t.map((o,i)=>jsx(Lr,{price:o.price,quantity:o.quantity,total:o.total,percentage:o.percentage,side:"ask",onClick:()=>n?.(o.price)},`ask-${o.price}-${i}`))}),jsx("div",{className:"flex items-center justify-center",style:{height:24,minHeight:24,padding:"0 16px",backgroundColor:"rgba(26,26,26,0.5)"},children:jsxs("div",{className:"flex items-center",style:{gap:12,fontSize:12,color:"#ffffff"},children:[jsx("span",{style:{color:"#ffffff"},children:"Spread:"}),jsx("button",{type:"button",className:"hover:text-white transition-colors cursor-pointer",style:{color:"#ffffff",fontWeight:400,background:"none",border:"none",padding:0},onClick:()=>n?.(r),children:r>=1?Math.round(r).toLocaleString("en-US"):r.toFixed(4)}),jsxs("span",{style:{color:"#ffffff",fontWeight:500},children:[s.toFixed(3),"%"]})]})}),jsx("div",{className:"flex-1 overflow-hidden",children:e.map((o,i)=>jsx(Lr,{price:o.price,quantity:o.quantity,total:o.total,percentage:o.percentage,side:"bid",onClick:()=>n?.(o.price)},`bid-${o.price}-${i}`))})]})}function yn(){return jsxs("div",{className:"flex flex-col h-full",style:{padding:"0 16px"},children:[jsxs("div",{className:"flex justify-between items-center",style:{height:28,marginBottom:4},children:[jsx(Skeleton,{className:"h-3 w-12 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"})]}),Array.from({length:10}).map((e,t)=>jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"})]},`ask-skeleton-${t}`)),jsx("div",{className:"flex justify-center items-center",style:{height:28},children:jsx(Skeleton,{className:"h-4 w-32 rounded"})}),Array.from({length:10}).map((e,t)=>jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-14 rounded"})]},`bid-skeleton-${t}`))]})}function gn(){return jsx("div",{className:"flex items-center justify-center h-full",children:jsx("span",{className:"text-neutral-400 text-sm",children:"No order book data available"})})}function bn({symbol:e,maxLevel:t=20,onPriceClick:r,className:s}){let{bids:n,asks:o,spread:i,spreadPercentage:a,isLoading:p}=bt({symbol:e,maxLevel:t});return p?jsx(yn,{}):n.length===0&&o.length===0?jsx(gn,{}):jsx("div",{className:s,children:jsx(ht,{bids:n,asks:o,spread:i,spreadPercentage:a,onPriceClick:r})})}function xt({symbol:e,limit:t=50}){let[r,s]=useState([]),{data:n,isPending:o}=Ze({symbol:e,limit:t}),{data:i}=ae({type:"trades",symbol:e,enabled:!!n});return useEffect(()=>{n&&s(n.filter(Br));},[n]),useEffect(()=>{i&&s(a=>{let p=xn(i);if(p.length===0)return a;let l=p.filter(d=>!a.some(c=>c.timestamp===d.timestamp&&c.price===d.price&&c.quantity===d.quantity));return l.length===0?a:[...l,...a].slice(0,t)});},[i,t]),{trades:r,isLoading:o}}function xn(e){return (Array.isArray(e)?e:[e]).filter(Br)}function Br(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}function Sn(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e3?e.toFixed(2):e>=1?e.toFixed(4):e.toFixed(6)}function Hr(e){return typeof e!="number"||!Number.isFinite(e)?"-":e>=1e6?(e/1e6).toFixed(2)+"M":e>=1e3?(e/1e3).toFixed(2)+"K":e.toFixed(2)}function Pn(e){if(typeof e!="number"||!Number.isFinite(e))return "-";let t=new Date(e),r=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return `${r}:${s}:${n}`}function Pt({trades:e,onTradeClick:t}){return jsxs("div",{className:"flex flex-col h-full overflow-auto",style:{backgroundColor:"#000000",fontSize:11},children:[jsxs("div",{className:"sticky top-0 z-10 flex items-center",style:{height:28,minHeight:28,padding:"0 16px",gap:16,color:"#6b6b6b",fontSize:11},children:[jsx("div",{className:"flex-1",style:{maxWidth:100},children:"Price"}),jsx("div",{className:"flex-1 text-right",children:"Amount"}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:100},children:"Total"}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:70},children:"Time"})]}),jsx("div",{className:"flex-1",children:e.map((r,s)=>{let n=r.side==="buy",o=typeof r.price=="number"&&Number.isFinite(r.price)&&typeof r.quantity=="number"&&Number.isFinite(r.quantity)?r.price*r.quantity:void 0;return jsxs("div",{className:"flex items-center cursor-pointer hover:bg-white/5 transition-colors",style:{height:22,minHeight:22,maxHeight:22,padding:"0 16px",gap:16,fontSize:11},onClick:()=>t?.(r),children:[jsx("div",{className:"flex-1",style:{maxWidth:100},children:jsx("span",{style:{color:n?"#C7FF2E":"#F76816",fontWeight:400},children:Sn(r.price)})}),jsx("div",{className:"flex-1 text-right",style:{color:"#ffffff"},children:Hr(r.quantity)}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:100,color:"#ffffff"},children:Hr(o)}),jsx("div",{className:"flex-1 text-right",style:{maxWidth:70,color:"#b5b5b5"},children:Pn(r.timestamp)})]},`${r.timestamp}-${r.price}-${s}`)})})]})}function vn(){return jsxs("div",{className:"flex flex-col h-full",style:{padding:"0 16px"},children:[jsxs("div",{className:"flex justify-between items-center",style:{height:28,marginBottom:4},children:[jsx(Skeleton,{className:"h-3 w-12 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-12 rounded"})]}),Array.from({length:12}).map((e,t)=>jsxs("div",{className:"flex justify-between items-center",style:{height:22},children:[jsx(Skeleton,{className:"h-3 w-14 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-10 rounded"}),jsx(Skeleton,{className:"h-3 w-12 rounded"})]},`trade-skeleton-${t}`))]})}function Dn(){return jsx("div",{className:"flex items-center justify-center h-full",children:jsx("span",{className:"text-neutral-400 text-sm",children:"No recent trades"})})}function Cn({symbol:e,limit:t=50,onTradeClick:r,className:s}){let{trades:n,isLoading:o}=xt({symbol:e,limit:t});return o?jsx(vn,{}):n.length===0?jsx(Dn,{}):jsx("div",{className:s,children:jsx(Pt,{trades:n,onTradeClick:r})})}function Dt({symbol:e,userAddress:t,maxLeverage:r=150,onSuccess:s,onError:n}){let[o,i]=useState("long"),[a,p]=useState("market"),l=useForm({defaultValues:{amount:0,leverage:20,takeProfitPrice:void 0,takeProfitPercent:void 0,stopLossPrice:void 0,stopLossPercent:void 0}}),{data:u}=Se({symbol:e}),{mutateAsync:d,isPending:c}=ve({onSuccess:()=>{l.reset(),s?.();},onError:v=>{n?.(v);}}),m=l.watch(),{amount:b,leverage:f,price:I}=m,h=useMemo(()=>a==="limit"&&I?I:u?.price||0,[a,I,u?.price]),w=useMemo(()=>!b||!h?0:b*h*5e-4,[b,h]),O=useMemo(()=>!b||!h?0:b*h+w,[b,h,w]),k=useMemo(()=>{if(!b||!h||!f||f===1)return;let v=.005,q=h;return o==="long"?q*(1-(1/f-v)):q*(1+(1/f-v))},[b,h,f,o]),{data:U}=Pe({userAddress:t,symbol:e}),A=U?.totalEquity??0,Q=U?.availableBalance??0,y=useMemo(()=>{let v=U?.positions?.[0];return v?v.side==="short"?-v.quantity:v.quantity:0},[U?.positions]),N=useCallback(async v=>{if(!t)throw new Error("User address is required");let q=a==="limit"?v.price:void 0,ue=v.takeProfitPrice,re=v.stopLossPrice;if(!ue&&v.takeProfitPercent&&v.takeProfitPercent>0&&h){let se=v.takeProfitPercent/100;ue=o==="long"?h*(1+se):h*(1-se);}if(!re&&v.stopLossPercent&&v.stopLossPercent>0&&h){let se=v.stopLossPercent/100;re=o==="long"?h*(1-se):h*(1+se);}await d({symbol:e,side:o,orderType:a,amount:v.amount,price:q,leverage:v.leverage,takeProfitPrice:ue,stopLossPrice:re,userAddress:t});},[e,o,a,h,t,d]);return {form:l,side:o,orderType:a,setSide:i,setOrderType:p,handleSubmit:N,isSubmitting:c,currentPrice:h,estimatedFee:w,estimatedTotal:O,liquidationPrice:k,availableMargin:Q,accountValue:A,currentPosition:y,maxLeverage:r}}function Qe(e,t=2){return e.toFixed(t)}function Rn({leverage:e,maxLeverage:t,onLeverageChange:r,onClose:s}){let n=[1,2,3,5,10,20,25,50,100].filter(o=>o<=t);return jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[jsx("div",{className:"absolute inset-0 bg-black/60",onClick:s,onKeyDown:o=>o.key==="Escape"&&s(),role:"button",tabIndex:-1,"aria-label":"Close"}),jsxs("div",{className:"relative z-10 w-72 bg-neutral-900 border border-neutral-700 rounded-lg p-4 shadow-2xl",children:[jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsx("h3",{className:"text-sm font-medium text-white",children:"Adjust Leverage"}),jsx("button",{type:"button",onClick:s,className:"text-neutral-400 hover:text-white",children:jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),jsxs("div",{className:"text-center text-2xl font-bold text-white mb-4",children:[e,"x"]}),jsx(Slider,{value:[e],onChange:o=>r(Array.isArray(o)?o[0]:o),minValue:1,maxValue:t,step:1,className:"w-full mb-3"}),jsx("div",{className:"flex flex-wrap gap-1.5",children:n.map(o=>jsxs("button",{type:"button",className:cn("px-2.5 py-1 text-xs rounded transition-colors",e===o?"bg-green-600 text-white":"bg-neutral-800 text-neutral-400 hover:bg-neutral-700"),onClick:()=>r(o),children:[o,"x"]},o))}),jsx("button",{type:"button",className:"w-full mt-4 text-white h-9 rounded cursor-pointer transition-colors",style:{backgroundColor:"#C7FF2E"},onClick:s,children:"Confirm"})]})]})}function Ct({methods:e,side:t,orderType:r,onSideChange:s,onOrderTypeChange:n,onSubmit:o,isSubmitting:i,symbol:a,currentPrice:p,estimatedFee:l,liquidationPrice:u,availableMargin:d,accountValue:c,currentPosition:m,maxLeverage:b,onAddFunds:f}){let[I,h]=useState(false),[w,O]=useState(false),k=e.watch("leverage")||20,U=e.watch("amount")||0,A=a.split("-")[0],Q=d>0&&p?Math.min(U*p/(d*k)*100,100):0,y=N=>{let v=(Array.isArray(N)?N[0]:N)/100;if(p&&p>0){let q=d*k*v/p;e.setValue("amount",Number(q.toFixed(6)));}};return jsxs("div",{className:"flex flex-col h-full",style:{backgroundColor:"#000000"},children:[jsxs("div",{className:"perp-order-form flex-1 overflow-y-auto",style:{padding:"16px 16px",display:"flex",flexDirection:"column",gap:16},children:[jsxs("div",{className:"flex",style:{border:"1px solid rgba(26,26,26,0.5)",borderRadius:8,padding:4,gap:4},children:[jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:t==="long"?"#C7FF2E":"transparent",color:t==="long"?"#000000":"#b5b5b5",fontWeight:t==="long"?700:500},onClick:()=>s("long"),children:"Long"}),jsx("button",{type:"button",className:"flex-1 cursor-pointer transition-colors",style:{height:32,fontSize:16,borderRadius:4,backgroundColor:t==="short"?"#F76816":"transparent",color:t==="short"?"#000000":"#b5b5b5",fontWeight:t==="short"?700:500},onClick:()=>s("short"),children:"Short"})]}),jsxs("div",{className:"flex items-center",style:{gap:8},children:[jsx("div",{className:"flex",children:[{key:"market",label:"Market"},{key:"limit",label:"Limit"}].map(N=>jsx("div",{style:{height:32,display:"flex",alignItems:"center",borderBottom:r===N.key?"2px solid #ffffff":"2px solid transparent",padding:"2px 0 0",cursor:"pointer"},children:jsx("button",{type:"button",className:"cursor-pointer transition-colors",style:{padding:"0 8px",fontSize:12,fontWeight:500,backgroundColor:"transparent",color:r===N.key?"#ffffff":"#b5b5b5",border:"none"},onClick:()=>n(N.key),children:N.label})},N.key))}),jsx("div",{className:"flex-1"}),jsxs("button",{type:"button",className:"cursor-pointer transition-colors",style:{height:24,padding:"0 5px",fontSize:12,borderRadius:4,backgroundColor:"rgba(26,26,26,0.5)",color:"#ffffff",fontWeight:400,border:"1px solid rgba(26,26,26,0.5)"},onClick:()=>h(true),children:["Leverage: ",k,"x"]})]}),jsx(RHForm,{methods:e,onSubmit:o,children:jsxs("div",{className:"space-y-3 w-full",children:[r==="limit"&&jsxs("div",{className:"perp-price-box",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Price"}),jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"USDC"})]}),jsx(RHNumberInput,{name:"price",placeholder:"0.0 USDC",className:"w-full"})]}),jsxs("div",{className:"perp-buy-amt",style:{borderRadius:4,padding:8,backgroundColor:"rgba(26,26,26,0.5)",border:"1px solid #1c1c1c",height:64,display:"flex",flexDirection:"column",justifyContent:"center"},children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:"Buy Amount"}),jsx("span",{style:{fontSize:12,color:"#6b6b6b"},children:A})]}),jsx(RHNumberInput,{name:"amount",placeholder:"0.0 USDC",className:"w-full"})]}),jsxs("div",{children:[jsx("style",{children:`
2
2
  .perp-buy-amt input, .perp-price-box input { font-size: 18px !important; line-height: 23px !important; }
3
3
  .perp-order-form .group,
4
4
  .perp-order-form .group div { background: transparent !important; border: none !important; padding: 0 !important; border-radius: 0 !important; min-height: 0 !important; height: auto !important; }
@@ -8,6 +8,13 @@ import {createContext,useMemo,useContext,useState,useCallback,useEffect,useReduc
8
8
  .perp-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 12px; height: 12px; border-radius: 50%; background: #C7FF2E; margin-top: -4px; border: none; }
9
9
  .perp-slider::-moz-range-track { height: 4px; border-radius: 2px; background: #1c1c1c; border: none; }
10
10
  .perp-slider::-moz-range-thumb { width: 12px; height: 12px; border-radius: 50%; background: #C7FF2E; border: none; }
11
- `}),jsx("input",{type:"range",value:Math.round(q),onChange:c=>A(Number(c.target.value)),min:0,max:100,step:1,className:"perp-slider"}),jsxs("div",{className:"flex justify-between",style:{fontSize:10,color:"#b5b5b5",marginTop:4},children:[jsx("span",{children:"0%"}),jsx("span",{children:"25%"}),jsx("span",{children:"50%"}),jsx("span",{children:"75%"}),jsx("span",{children:"100%"})]})]}),jsxs("div",{className:"flex items-center justify-between",children:[jsxs("div",{className:"flex items-center",style:{gap:6},children:[jsx("div",{onClick:()=>k(c=>!c),style:{width:16,height:16,borderRadius:4,border:"1px solid #2a2a2a",backgroundColor:h?"#C7FF2E":"transparent",flexShrink:0,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:h&&jsx("svg",{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",children:jsx("path",{d:"M1 4L3.5 6.5L9 1",stroke:"#000000",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),jsx("span",{style:{fontSize:12,fontWeight:500,color:"#b5b5b5"},children:"TP/SL"})]}),jsxs("div",{style:{fontSize:12,color:"#6b6b6b"},children:[jsx("span",{children:"Est. Liq. Price: "}),jsx("span",{style:{color:"#b5b5b5"},children:u?Be(u,2):"--"})]})]}),h&&jsxs("div",{className:"flex",style:{gap:8},children:[jsxs("div",{className:"flex-1",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP Price"}),jsx(RHNumberInput,{name:"takeProfitPrice",placeholder:"Enter TP price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxs("div",{style:{width:70},children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP %"}),jsx(RHNumberInput,{name:"takeProfitPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]}),jsx("button",{type:"button",className:"w-full cursor-pointer transition-colors",style:{height:36,fontSize:14,fontWeight:700,color:"#000000",backgroundColor:"#C7FF2E",borderRadius:9999,border:"none"},children:"Add More Funds"}),h&&jsxs("div",{className:"flex",style:{gap:8},children:[jsxs("div",{className:"flex-1",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL Price"}),jsx(RHNumberInput,{name:"stopLossPrice",placeholder:"Enter SL price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxs("div",{style:{width:70},children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL %"}),jsx(RHNumberInput,{name:"stopLossPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]})]})})]}),jsxs("div",{style:{padding:"10px 16px",fontSize:12,display:"flex",flexDirection:"column",gap:6},children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{style:{color:"#6b6b6b"},children:"Available Margin"}),jsxs("span",{style:{color:"#C7FF2E",fontSize:12,fontWeight:500},children:[Be(d)," USDC"]})]}),jsxs("div",{className:"flex justify-between",children:[jsx("span",{style:{color:"#6b6b6b"},children:"Perps Account Value"}),jsxs("span",{style:{color:"#b5b5b5",fontSize:12},children:[Be(m)," USDC"]})]}),jsxs("div",{className:"flex justify-between",children:[jsx("span",{style:{color:"#6b6b6b"},children:"Current Position"}),jsx("span",{style:{color:"#b5b5b5",fontSize:12},children:f?Be(f):"--"})]}),jsxs("div",{className:"flex items-center justify-end",style:{gap:6,paddingTop:8},children:[jsx("span",{style:{fontSize:11,color:"#6b6b6b"},children:"powered by"}),jsx("img",{src:"https://axiom-assets.sfo3.cdn.digitaloceanspaces.com/images/hyperliquid-logo.svg",alt:"Hyperliquid",className:"h-3 opacity-60",onError:c=>{let X=c.target;X.style.display="none";}})]})]}),y&&jsx(On,{leverage:C,maxLeverage:b,onLeverageChange:c=>e.setValue("leverage",c),onClose:()=>w(false)})]})}function Nn({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n,className:o}){let{form:i,side:a,orderType:p,setSide:l,setOrderType:u,handleSubmit:d,isSubmitting:m,currentPrice:f,estimatedFee:b,estimatedTotal:y,liquidationPrice:w,availableMargin:h,accountValue:k,currentPosition:C,maxLeverage:N}=Tt({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n});return jsx("div",{className:o,children:jsx(Ct,{methods:i,side:a,orderType:p,onSideChange:l,onOrderTypeChange:u,onSubmit:d,isSubmitting:m,symbol:e,currentPrice:f,estimatedFee:b,estimatedTotal:y,liquidationPrice:w,availableMargin:h,accountValue:k,currentPosition:C,maxLeverage:N})})}function kt({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s}){let[n,o]=useState([]),{data:i,isLoading:a,error:p}=Pe({userAddress:e,symbol:t},{enabled:!!e}),{data:l}=De({type:"positions",userAddress:e||"",enabled:!!e}),{mutateAsync:u,isPending:d}=ve({onSuccess:()=>{r?.();},onError:f=>{s?.(f);}});useEffect(()=>{i?.positions&&o(i.positions);},[i]),useEffect(()=>{l&&o(f=>{let b=f.findIndex(y=>y.symbol===l.symbol);if(l.quantity===0)return b!==-1?f.filter((y,w)=>w!==b):f;if(b!==-1){let y=[...f];return y[b]=l,y}return [...f,l]});},[l]);let m=useCallback(async f=>{if(!e)throw new Error("User address is required");let b=f.side==="long"?"short":"long";await u({symbol:f.symbol,side:b,orderType:"market",amount:Math.abs(f.quantity),leverage:f.leverage,userAddress:e});},[e,u]);return {positions:n,isLoading:a,error:p,handleClosePosition:m,isClosing:d}}function me(e,t=2){return e.toFixed(t)}function wt(e){return me(e,4)}function Fn(e){return me(Math.abs(e),4)}function qn(e){return `${e>=0?"+":""}${me(e,2)}`}function Mn(e){return `${e>=0?"+":""}${me(e,2)}%`}function Ot({positions:e,onClosePosition:t,isClosing:r}){let s=jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Asset"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position Value"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Entry Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Mark Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Liquidation"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Margin Used (PNL) \u2193"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"TP"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"SL"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Close"})]});return e.length===0?jsxs("div",{className:"w-full overflow-x-auto bg-transparent",children:[jsx("table",{className:"w-full",style:{fontSize:12},children:jsx("thead",{children:s})}),jsx("div",{className:"flex items-center justify-center",style:{fontSize:14,color:"#b5b5b5",padding:"24px 0"},children:"No open positions"})]}):jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxs("table",{className:"w-full",style:{fontSize:12},children:[jsx("thead",{children:s}),jsx("tbody",{children:e.map(n=>{let i=n.unrealizedPnl>=0?"text-bullish":"text-bearish";return jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("td",{className:"py-1.5 px-3",children:jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:n.symbol.split("-")[0]}),jsxs("span",{className:cn$1(n.side==="long"?"text-bullish":"text-bearish"),children:[n.leverage,"x ",n.side.toUpperCase()]})]})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Fn(n.quantity)}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",me(n.notionalValue)]}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",wt(n.entryPrice)]}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",wt(n.markPrice)]}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:n.liquidationPrice?`$${wt(n.liquidationPrice)}`:"-"}),jsx("td",{className:"py-1.5 px-3 text-right",children:jsxs("div",{className:"flex flex-col items-end",children:[jsxs("span",{style:{color:"#ffffff"},children:["$",me(n.margin)]}),jsxs("span",{className:i,children:[qn(n.unrealizedPnl)," (",Mn(n.unrealizedPnlPercent),")"]})]})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsx("td",{className:"py-1.5 px-3 text-right",children:jsx(Button,{size:"sm",onClick:()=>t(n),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Close"})})]},n.symbol)})})]})})}function Nt(){return jsxs("div",{className:"w-full space-y-4 p-4",children:[jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function An(){return jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:14,color:"#b5b5b5"},children:"No open positions"})}function Ln({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,className:n}){let{positions:o,isLoading:i,handleClosePosition:a,isClosing:p}=kt({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s});return i?jsx("div",{className:n,children:jsx(Nt,{})}):jsx("div",{className:n,children:jsx(Ot,{positions:o,onClosePosition:a,isClosing:p})})}function Rt({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s}){let[n,o]=useState([]),{data:i,isLoading:a,error:p}=tt({userAddress:e,symbol:t},{enabled:!!e}),{data:l}=De({type:"orders",userAddress:e||"",enabled:!!e}),{mutateAsync:u,isPending:d}=st({onSuccess:()=>{r?.();},onError:f=>{s?.(f);}});useEffect(()=>{i?.orders&&o(i.orders);},[i]),useEffect(()=>{l&&o(f=>{let b=f.findIndex(y=>y.orderId===l.orderId);if(l.status==="cancelled"||l.status==="filled"||l.status==="rejected")return b!==-1?f.filter((y,w)=>w!==b):f;if(b!==-1){let y=[...f];return y[b]=l,y}return [l,...f]});},[l]);let m=useCallback(async f=>{if(!e)throw new Error("User address is required");await u({orderId:f.orderId,symbol:f.symbol,userAddress:e});},[e,u]);return {orders:n,isLoading:a,error:p,handleCancelOrder:m,isCanceling:d}}function Gr(e,t=2){return e.toFixed(t)}function zn(e){return Gr(e,4)}function It(e){return Gr(e,4)}function _n(e){let t=new Date(e),r=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return `${r}:${s}:${n}`}function Ut({orders:e,onCancelOrder:t,isCanceling:r}){return e.length===0?jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"}):jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsx("thead",{children:jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Type"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Amount"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Filled"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Remaining"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Status"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Action"})]})}),jsx("tbody",{children:e.map(s=>jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("td",{className:"py-1.5 px-3",children:jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:s.symbol.split("-")[0]}),jsxs("span",{className:cn$1(s.side==="long"?"text-bullish":"text-bearish"),children:[s.side.toUpperCase(),s.leverage?` ${s.leverage}x`:""]})]})}),jsx("td",{className:"py-1.5 px-3 capitalize",style:{color:"#ffffff"},children:s.orderType}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:s.orderType==="market"?jsx("span",{style:{color:"#b5b5b5"},children:"Market"}):`$${zn(s.price)}`}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:It(s.quantity)}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:It(s.filledQuantity)}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:It(s.remainingQuantity)}),jsx("td",{className:"py-1.5 px-3 text-right",children:jsx("span",{className:cn$1("px-2 py-0.5 rounded","text-[11px]",s.status==="pending"&&"bg-yellow-600/20 text-yellow-500",s.status==="partially_filled"&&"bg-blue-600/20 text-blue-500",s.status==="filled"&&"bg-green-600/20 text-green-500",s.status==="cancelled"&&"bg-neutral-600/20 text-neutral-400",s.status==="rejected"&&"bg-red-600/20 text-red-500"),children:s.status.replace("_"," ")})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:_n(s.timestamp)}),jsx("td",{className:"py-1.5 px-3 text-right",children:s.status==="pending"||s.status==="partially_filled"?jsx(Button,{size:"sm",onClick:()=>t(s),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Cancel"}):jsx("span",{className:"text-[11px]",style:{color:"#6b6d7a"},children:"-"})})]},s.orderId))})]})})}function Et(){return jsxs("div",{className:"w-full space-y-4 p-4",children:[jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Ft(){return jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"})}function $n({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,className:n}){let{orders:o,isLoading:i,handleCancelOrder:a,isCanceling:p}=Rt({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s});return i?jsx("div",{className:n,children:jsx(Et,{})}):o.length===0?jsx("div",{className:n,children:jsx(Ft,{})}):jsx("div",{className:n,children:jsx(Ut,{orders:o,onCancelOrder:a,isCanceling:p})})}function Wn(e){let t=Date.now(),r=t;switch(e){case "today":let s=new Date;return s.setHours(0,0,0,0),{startTime:s.getTime(),endTime:r};case "7d":return {startTime:t-10080*60*1e3,endTime:r};case "30d":return {startTime:t-720*60*60*1e3,endTime:r};default:return {}}}function Mt({userAddress:e,symbol:t,initialTimeRange:r="7d",pageSize:s=50}){let[n,o]=useState(r),[i,a]=useState(1),[p,l]=useState([]),{startTime:u,endTime:d}=Wn(n),{data:m,isLoading:f,error:b}=rt({userAddress:e,symbol:t,startTime:u,endTime:d,limit:1e3},{enabled:!!e});useEffect(()=>{m?.trades&&(l(m.trades),a(1));},[m]),useEffect(()=>{a(1);},[n]);let y=Math.ceil(p.length/s),w=(i-1)*s,h=w+s;return {trades:p.slice(w,h),isLoading:f,error:b,timeRange:n,setTimeRange:o,currentPage:i,totalPages:y,goToNextPage:()=>{i<y&&a(i+1);},goToPreviousPage:()=>{i>1&&a(i-1);},goToPage:q=>{q>=1&&q<=y&&a(q);}}}function At(e,t=2){return e.toFixed(t)}function Kn(e){return At(e,4)}function Gn(e){return At(e,4)}function Vn(e){let t=new Date(e),r=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0"),n=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),i=String(t.getSeconds()).padStart(2,"0");return `${r}/${s} ${n}:${o}:${i}`}var jn=[{label:"Today",value:"today"},{label:"7 Days",value:"7d"},{label:"30 Days",value:"30d"},{label:"All",value:"all"}];function Lt({trades:e,timeRange:t,onTimeRangeChange:r,currentPage:s,totalPages:n,onNextPage:o,onPreviousPage:i,onGoToPage:a}){return jsxs("div",{className:"w-full flex flex-col gap-4",children:[jsx("div",{className:"flex gap-2",children:jn.map(p=>{let l=t===p.value;return jsx("button",{type:"button",className:cn$1("rounded px-3 transition-colors",!l&&"hover:bg-[#1A1A1A]"),style:{height:24,fontSize:11,border:"1px solid #1c1c1c",backgroundColor:l?"#1c1c1c":"transparent",color:l?"#ffffff":"#b5b5b5"},onClick:()=>r(p.value),children:p.label},p.value)})}),e.length===0?jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"}):jsxs(Fragment,{children:[jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsx("thead",{children:jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Side"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Quantity"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Fee"}),jsx("th",{className:"text-center py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Maker/Taker"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"})]})}),jsx("tbody",{children:e.map(p=>jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("td",{className:"py-1.5 px-3 font-medium",style:{color:"#ffffff"},children:p.symbol.split("-")[0]}),jsx("td",{className:"py-1.5 px-3",children:jsx("span",{className:cn$1("px-2 py-0.5 rounded text-[11px]",p.side==="long"?"bg-bullish/20 text-bullish":"bg-bearish/20 text-bearish"),children:p.side.toUpperCase()})}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",Kn(p.price)]}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Gn(p.quantity)}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:[At(p.fee,4)," ",p.feeCurrency]}),jsx("td",{className:"py-1.5 px-3 text-center",children:jsx("span",{className:cn$1("px-2 py-0.5 rounded text-[11px]",p.isMaker?"bg-blue-600/20 text-blue-500":"bg-purple-600/20 text-purple-500"),children:p.isMaker?"Maker":"Taker"})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:Vn(p.timestamp)})]},p.tradeId))})]})}),n>1&&jsxs("div",{className:"flex items-center justify-between",children:[jsxs("div",{className:"text-sm text-neutral-400",children:["Page ",s," of ",n]}),jsxs("div",{className:"flex gap-2",children:[jsx(Button,{size:"sm",onClick:i,disabled:s===1,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Previous"}),jsx("div",{className:"flex gap-1",children:Array.from({length:Math.min(5,n)},(p,l)=>{let u;return n<=5||s<=3?u=l+1:s>=n-2?u=n-4+l:u=s-2+l,jsx("button",{type:"button",className:cn$1("w-8 h-8 text-sm rounded transition-colors",s===u?"bg-neutral-700 text-white":"text-neutral-400 hover:bg-neutral-800 hover:text-white"),onClick:()=>a(u),children:u},u)})}),jsx(Button,{size:"sm",onClick:o,disabled:s===n,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Next"})]})]})]})]})}function Bt(){return jsxs("div",{className:"w-full space-y-4 p-4",children:[jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Qt(){return jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"})}function Xn({userAddress:e,symbol:t,initialTimeRange:r="7d",pageSize:s=50,className:n}){let{trades:o,isLoading:i,timeRange:a,setTimeRange:p,currentPage:l,totalPages:u,goToNextPage:d,goToPreviousPage:m,goToPage:f}=Mt({userAddress:e,symbol:t,initialTimeRange:r,pageSize:s});return i?jsx("div",{className:n,children:jsx(Bt,{})}):o.length===0?jsx("div",{className:n,children:jsx(Qt,{})}):jsx("div",{className:n,children:jsx(Lt,{trades:o,timeRange:a,onTimeRangeChange:p,currentPage:l,totalPages:u,onNextPage:d,onPreviousPage:m,onGoToPage:f})})}var Yn=1000000000n;var Zn=1000000n;function Oe(e,t=4){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return Jr(r,Yn,t)}function Ht(e,t=2){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return Jr(r,Zn,t)}function zt(e){if(!e)return "0";let[t,r=""]=e.replace(/[\s,]/g,"").split(".");if(!/^\d*$/.test(t)||!/^\d*$/.test(r))return "0";let s=(r+"000000000").slice(0,9),n=`${t||"0"}${s}`.replace(/^0+(?=\d)/,"");return n===""?"0":n}function Jr(e,t,r){let s=e<0n,n=s?-e:e,o=n/t,i=n%t;if(r<=0)return `${s?"-":""}${o.toString()}`;let a=10n**BigInt(r),l=((i*a+t/2n)/t).toString().padStart(r,"0");return l=l.replace(/0+$/,""),l?`${s?"-":""}${o.toString()}.${l}`:`${s?"-":""}${o.toString()}`}function Ne(e,t=Date.now()){return Math.max(0,Math.floor((e-t)/1e3))}function ze(e,t=6,r=4){return e?e.length<=t+r+1?e:`${e.slice(0,t)}\u2026${e.slice(-r)}`:""}function _t({isOpen:e,quote:t,isExecuting:r,isExpired:s,onConfirm:n,onCancel:o,onExpire:i,error:a}){let{t:p}=useTranslation(),l=t?Date.parse(t.expiresAt):0,[u,d]=useState(()=>l?Ne(l):0);return useEffect(()=>{if(!e||!l)return;d(Ne(l));let m=setInterval(()=>{let f=Ne(l);d(f),f===0&&(i?.(),clearInterval(m));},1e3);return ()=>clearInterval(m)},[e,l,i]),jsx(Modal,{isOpen:e,onOpenChange:m=>!m&&o(),hideCloseButton:true,backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children:p("perpDeposit.confirm.title")}),jsxs(ModalBody,{children:[t?jsx(po,{breakdown:t.breakdown}):jsx("div",{className:"flex h-32 items-center justify-center",children:jsx(Spinner,{})}),t&&!s&&jsx("div",{className:"text-default-500 mt-4 text-xs",children:p("perpDeposit.confirm.expiresIn",{seconds:u})}),s&&jsx("div",{className:"text-warning-500 mt-4 text-xs",children:p("perpDeposit.confirm.expired")}),a&&jsx("div",{className:"text-danger mt-4 text-xs",children:a})]}),jsxs(ModalFooter,{className:"flex justify-between gap-2",children:[jsx(Button,{variant:"flat",color:"default",onPress:o,isDisabled:r,children:p("perpDeposit.confirm.cancel")}),jsx(Button,{color:"primary",onPress:n,isDisabled:!t||r||s,isLoading:r,children:p("perpDeposit.confirm.cta")})]})]})})}function po({breakdown:e}){let{t}=useTranslation();return jsxs("dl",{className:"flex flex-col gap-2 text-sm",children:[jsx(_e,{label:t("perpDeposit.confirm.send"),value:`${Oe(e.grossLamports)} SOL`}),jsx(_e,{label:t("perpDeposit.confirm.receive"),value:`${Ht(e.expectedOutputUSDC)} USDC`,highlight:true}),jsx(_e,{label:t("perpDeposit.confirm.platformFee"),value:`${Oe(e.platformFeeLamports,6)} SOL`,muted:true}),jsx(_e,{label:t("perpDeposit.confirm.relayFee"),value:`${Oe(e.relayDepositLamports,6)} SOL`,muted:true})]})}function _e({label:e,value:t,highlight:r,muted:s}){return jsxs("div",{className:"flex items-center justify-between",children:[jsx("dt",{className:"text-default-500",children:e}),jsx("dd",{className:r?"text-foreground text-base font-semibold":s?"text-default-500 text-xs":"text-foreground",children:t})]})}function $t({amount:e,onAmountChange:t,recipient:r,onRecipientChange:s,balanceSol:n,disabled:o,amountError:i,recipientError:a,onMax:p,className:l}){let{t:u}=useTranslation();return jsxs("div",{className:cn$1("flex flex-col gap-4",l),children:[jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[jsx("label",{htmlFor:"perp-deposit-amount",className:"text-sm font-medium text-foreground",children:u("perpDeposit.amount")}),n&&jsx("span",{className:"text-xs text-default-500",children:u("perpDeposit.amount.balance",{balance:n})})]}),jsx("div",{className:"relative",children:jsx(Input,{id:"perp-deposit-amount",type:"text",inputMode:"decimal",placeholder:u("perpDeposit.amount.placeholder"),value:e,onValueChange:t,isDisabled:o,isInvalid:!!i,errorMessage:i,endContent:jsxs("div",{className:"flex items-center gap-2",children:[jsx("span",{className:"text-default-500 text-sm",children:u("perpDeposit.amount.unit")}),n&&p&&jsx(Button,{size:"sm",variant:"flat",color:"primary",onPress:p,isDisabled:o,children:u("perpDeposit.amount.max")})]})})})]}),jsxs("div",{children:[jsx("label",{htmlFor:"perp-deposit-recipient",className:"text-sm font-medium text-foreground mb-1.5 block",children:u("perpDeposit.recipient")}),jsx(Input,{id:"perp-deposit-recipient",type:"text",placeholder:u("perpDeposit.recipient.placeholder"),value:r,onValueChange:s,isDisabled:o,isInvalid:!!a,errorMessage:a,autoComplete:"off",spellCheck:"false"})]})]})}function Wt({isOpen:e,phase:t,status:r,solanaExplorerUrl:s,hyperliquidExplorerUrl:n,onRetry:o,onClose:i,errorMessage:a}){let{t:p}=useTranslation(),l=Po(t),u=t==="failed"?a||(r?.lastError?.message?p("perpDeposit.status.failed",{message:r.lastError.message}):p("perpDeposit.status.failed",{message:""})):t==="succeeded"?p("perpDeposit.status.settled"):t==="refunded"?p("perpDeposit.status.refunded"):r?.status==="broadcasted"?p("perpDeposit.status.broadcasted"):r?.status==="relay_waiting"?p("perpDeposit.status.relay_waiting"):r?.status==="relay_pending"?p("perpDeposit.status.relay_pending"):r?.status==="stuck"?p("perpDeposit.status.stuck"):p("perpDeposit.status.broadcasted");return jsx(Modal,{isOpen:e,onOpenChange:d=>!d&&i(),backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children:p("perpDeposit.status.title")}),jsx(ModalBody,{children:jsxs("div",{className:cn$1("flex flex-col items-center gap-4 py-4 text-center",vo(l)),children:[jsx(Do,{variant:l}),jsx("p",{className:"text-sm",children:u}),(r?.solanaTxHash||r?.hyperliquidTxHash)&&jsxs("div",{className:"flex flex-col gap-1 text-xs",children:[r?.solanaTxHash&&s&&jsxs("a",{href:s,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-2 hover:underline",children:[p("perpDeposit.status.viewSolanaTx")," \xB7"," ",ze(r.solanaTxHash,8,6)]}),r?.hyperliquidTxHash&&n&&jsxs("a",{href:n,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-2 hover:underline",children:[p("perpDeposit.status.viewHyperliquidTx")," \xB7"," ",ze(r.hyperliquidTxHash,8,6)]})]})]})}),jsxs(ModalFooter,{className:"flex justify-between gap-2",children:[t==="failed"&&o?jsx(Button,{color:"primary",onPress:o,children:p("perpDeposit.status.tryAgain")}):jsx("span",{}),jsx(Button,{variant:"flat",onPress:i,children:p("perpDeposit.status.close")})]})]})})}function Po(e){switch(e){case "succeeded":return "success";case "refunded":return "warning";case "failed":return "error";default:return "progress"}}function vo(e){switch(e){case "success":return "text-success-600";case "warning":return "text-warning-600";case "error":return "text-danger";default:return "text-foreground"}}function Do({variant:e}){return e==="progress"?jsx(Spinner,{size:"lg"}):e==="success"?jsx(To,{className:"size-12"}):e==="warning"?jsx(Co,{className:"size-12"}):jsx(ko,{className:"size-12"})}function To(e){return jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:e.className,children:jsx("path",{d:"M12 2a10 10 0 100 20 10 10 0 000-20zm-1.2 14.6l-4-4 1.4-1.4 2.6 2.6 6-6 1.4 1.4-7.4 7.4z"})})}function Co(e){return jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:e.className,children:jsx("path",{d:"M12 2a10 10 0 100 20 10 10 0 000-20zm0 4c.6 0 1 .4 1 1v6c0 .6-.4 1-1 1s-1-.4-1-1V7c0-.6.4-1 1-1zm0 12c-.7 0-1.2-.5-1.2-1.2s.5-1.2 1.2-1.2 1.2.5 1.2 1.2-.5 1.2-1.2 1.2z"})})}function ko(e){return jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:e.className,children:jsx("path",{d:"M12 2a10 10 0 100 20 10 10 0 000-20zm5 13.6L15.6 17 12 13.4 8.4 17 7 15.6 10.6 12 7 8.4 8.4 7 12 10.6 15.6 7 17 8.4 13.4 12 17 15.6z"})})}function Io({userSolanaAddress:e,userId:t,source:r,campaign:s,defaultRecipient:n,signAndBroadcast:o,balanceSol:i,onMaxClick:a,validateRecipient:p,buildSolanaExplorerUrl:l,buildHyperliquidExplorerUrl:u,onSettled:d,onError:m,className:f}){let{t:b}=useTranslation(),[y,w]=useState(""),[h,k]=useState(n??""),C=useMemo(()=>{if(y&&(!/^\d+(\.\d+)?$/.test(y.trim())||Number(y)<=0))return b("perpDeposit.error.amountInvalid")},[y,b]),N=useMemo(()=>{if(h)return p?p(h):void 0},[h,p]),R=useMemo(()=>C?"":zt(y),[y,C]),q=useMemo(()=>!R||R==="0"||N||!h?null:{userSolanaAddress:e,hyperliquidRecipient:h,grossLamports:R,source:r},[R,h,N,r,e]),A=at(q,{enabled:!!q}),{state:c,execute:X,reset:T,dispatch:L}=pt(o),le=c.phase==="submitted"||c.phase==="tracking"||c.phase==="succeeded"||c.phase==="refunded"||c.phase==="failed"?c.intentId:void 0,te=lt(le,{enabled:!!le&&c.phase!=="succeeded"&&c.phase!=="refunded"&&c.phase!=="failed"});useEffect(()=>{te.data&&L({type:"STATUS_UPDATE",status:te.data});},[te.data,L]),useEffect(()=>{c.phase==="succeeded"?d?.(c.intentId):c.phase==="failed"&&m?.(c.intentId,c.error.message);},[c,d,m]);let re=useCallback(()=>{A.data&&(L({type:"QUOTE_REQUEST"}),L({type:"QUOTE_RECEIVED",quote:A.data}));},[L,A.data]),ns=useCallback(async()=>{if(c.phase==="ready_to_sign")try{await X({quote:c.quote,userSolanaAddress:e,hyperliquidRecipient:h,userId:t,source:r,campaign:s});}catch{}},[c,X,e,h,t,r,s]),os=useCallback(()=>{L({type:"QUOTE_EXPIRED"});},[L]),is=useCallback(async()=>{L({type:"RESET"}),await A.refetch();},[L,A]),as=c.phase==="ready_to_sign"||c.phase==="signing"||c.phase==="broadcasting"||c.phase==="expired",ps=c.phase==="submitted"||c.phase==="tracking"||c.phase==="succeeded"||c.phase==="refunded"||c.phase==="failed"&&!!c.intentId,he=c.phase==="tracking"||c.phase==="succeeded"||c.phase==="refunded"||c.phase==="failed"?c.status:void 0,ls=!A.data||A.isFetching||!!C||!!N||!q;return jsxs(Card,{className:f,children:[jsxs(CardBody,{className:"flex flex-col gap-4 p-6",children:[jsxs("div",{children:[jsx("h3",{className:"text-lg font-semibold",children:b("perpDeposit.title")}),jsx("p",{className:"text-default-500 text-sm",children:b("perpDeposit.description")})]}),jsx($t,{amount:y,onAmountChange:w,recipient:h,onRecipientChange:k,balanceSol:i,onMax:a,amountError:C,recipientError:N,disabled:c.phase!=="idle"&&c.phase!=="expired"&&c.phase!=="failed"}),jsx(Button,{color:"primary",isDisabled:ls,isLoading:A.isFetching,onPress:re,children:A.isFetching?b("perpDeposit.gettingQuote"):b("perpDeposit.confirmQuote")}),A.error&&jsx("div",{className:"text-danger text-xs",children:b("perpDeposit.error.quoteFailed")})]}),jsx(_t,{isOpen:as,quote:c.phase==="ready_to_sign"||c.phase==="signing"||c.phase==="broadcasting"||c.phase==="expired"?c.quote:void 0,isExecuting:c.phase==="signing"||c.phase==="broadcasting",isExpired:c.phase==="expired",onConfirm:ns,onCancel:T,onExpire:os}),jsx(Wt,{isOpen:ps,phase:c.phase,status:he,solanaExplorerUrl:he?.solanaTxHash&&l?l(he.solanaTxHash):void 0,hyperliquidExplorerUrl:he?.hyperliquidTxHash&&u?u(he.hyperliquidTxHash):void 0,onRetry:c.phase==="failed"?is:void 0,onClose:T,errorMessage:c.phase==="failed"?c.error.message:void 0})]})}function jt({state:e,onContinue:t,onRetryStep:r,onReload:s,onDismiss:n,className:o}){let{t:i}=useTranslation(),a=e.phase,p=a==="executing",l=a==="loading",u=a==="error"&&e.steps.length===0;return jsxs(Card,{className:cn$1("w-full max-w-md",o),children:[jsxs(CardHeader,{className:"flex flex-col items-start gap-1",children:[jsx("h3",{className:"text-lg font-semibold",children:i("perpDeposit.setup.title")}),jsx("p",{className:"text-foreground-500 text-sm",children:i("perpDeposit.setup.description")})]}),jsxs(CardBody,{className:"gap-3",children:[l&&jsx(Ao,{}),u&&jsx("p",{className:"text-danger text-sm",children:i("perpDeposit.setup.loadFailed",{message:e.error??""})}),!l&&!u&&e.steps.map((d,m)=>jsx(Mo,{rec:d,index:m,isCurrent:e.currentIndex===m,onRetry:r},`${d.step.id}-${m}`)),a==="done"&&jsx("p",{className:"text-success text-sm",children:i("perpDeposit.setup.alreadyActive")})]}),jsxs(CardFooter,{className:"flex justify-between gap-2",children:[n&&jsx(Button,{variant:"light",onPress:n,isDisabled:p,children:i(a==="done"?"perpDeposit.setup.dismiss":"perpDeposit.setup.skip")}),jsx("div",{className:"flex-1"}),u&&s&&jsx(Button,{color:"primary",onPress:s,children:i("perpDeposit.setup.retry")}),!u&&a!=="done"&&jsx(Button,{color:"primary",onPress:t,isLoading:p,isDisabled:p||l,children:e.steps.some(d=>d.status==="done")?i("perpDeposit.setup.continue"):i("perpDeposit.setup.cta")})]})]})}function Mo({rec:e,index:t,isCurrent:r,onRetry:s}){let{t:n}=useTranslation(),o=Qo(e.step.id,()=>{switch(e.step.id){case "approveBuilderFee":return n("perpDeposit.setup.builderFee.label");case "setReferrer":return n("perpDeposit.setup.referrer.label");case "updateLeverage":return n("perpDeposit.setup.leverage.label")}}),i=(()=>{switch(e.step.id){case "approveBuilderFee":{let p=(e.step.params.maxFeeRate/10).toFixed(1);return n("perpDeposit.setup.builderFee.description",{bps:p})}case "setReferrer":return n("perpDeposit.setup.referrer.description",{code:e.step.params.code});case "updateLeverage":return n("perpDeposit.setup.leverage.description")}})(),a=(()=>{switch(e.status){case "pending":return n("perpDeposit.setup.step.pending");case "skipped":return n("perpDeposit.setup.step.skipped");case "running":return n("perpDeposit.setup.step.running");case "done":return n("perpDeposit.setup.step.done");case "error":return n("perpDeposit.setup.step.error")}})();return jsxs("div",{className:cn$1("border-divider flex items-start justify-between gap-3 rounded-md border p-3",e.status==="error"&&"border-danger",e.status==="done"&&"border-success/40 bg-success/5",e.status==="skipped"&&"border-default bg-default-100/40"),children:[jsxs("div",{className:"flex-1",children:[jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[jsx(Lo,{status:e.status,isCurrent:r}),jsx("span",{children:o})]}),jsx("p",{className:"text-foreground-500 mt-1 text-xs",children:i}),e.status==="error"&&e.error&&jsx("p",{className:"text-danger mt-1 text-xs",children:e.error})]}),jsxs("div",{className:"flex flex-col items-end gap-1 text-xs",children:[jsx("span",{className:cn$1(Bo(e.status)),children:a}),e.status==="error"&&s&&jsx(Button,{size:"sm",variant:"flat",color:"danger",onPress:()=>s(t),children:n("perpDeposit.setup.retry")})]})]})}function Ao(){let{t:e}=useTranslation();return jsxs("div",{className:"flex items-center gap-2 py-2 text-sm",children:[jsx(Spinner,{size:"sm"}),jsx("span",{children:e("perpDeposit.setup.loading")})]})}function Lo({status:e,isCurrent:t}){return e==="running"||t?jsx(Spinner,{size:"sm"}):e==="done"||e==="skipped"?jsx("span",{"aria-hidden":true,className:"text-success",children:"\u2713"}):e==="error"?jsx("span",{"aria-hidden":true,className:"text-danger",children:"!"}):jsx("span",{"aria-hidden":true,className:"border-foreground-400 inline-block h-3 w-3 rounded-full border"})}function Bo(e){switch(e){case "done":return "text-success";case "skipped":return "text-foreground-500";case "running":return "text-primary";case "error":return "text-danger";default:return "text-foreground-500"}}function Qo(e,t){return t()}function Ho({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:o,onDismiss:i,className:a}){let{state:p,runNext:l,runStep:u,reload:d}=Ae({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:o}),m=useCallback(()=>{l();},[l]),f=useCallback(y=>{u(y);},[u]),b=useCallback(()=>{d();},[d]);return jsx(jt,{state:p,onContinue:m,onRetryStep:f,onReload:b,onDismiss:i,className:a})}
12
- export{ut as CoinInfoNotFoundUI,dt as CoinInfoSkeletonsUI,ft as CoinInfoUI,sn as CoinInfoWidget,_t as DepositConfirmUI,Io as DepositFlowWidget,$t as DepositFormUI,Wt as DepositStatusUI,se as HyperliquidApiError,jt as HyperliquidInitUI,Ho as HyperliquidInitWidget,Ge as HyperliquidPerpetualsClient,_ as LiberFiApiError,ne as LiberFiHttpTransport,je as LiberFiPerpDepositClient,Ve as LiberFiPerpetualsClient,Ft as OpenOrdersEmpty,Et as OpenOrdersSkeleton,Ut as OpenOrdersUI,$n as OpenOrdersWidget,xt as OrderBookUI,yn as OrderBookWidget,oe as PerpetualsContext,vs as PerpetualsProvider,Ct as PlaceOrderFormUI,Nn as PlaceOrderFormWidget,An as PositionsEmpty,Nt as PositionsSkeleton,Ot as PositionsUI,Ln as PositionsWidget,bt as SearchCoinsUI,ln as SearchCoinsWidget,xe as TERMINAL_DEPOSIT_STATUSES,Qt as TradeHistoryEmpty,Bt as TradeHistorySkeleton,Lt as TradeHistoryUI,Xn as TradeHistoryWidget,vt as TradesUI,vn as TradesWidget,br as cancelOrder,Ee as classifyStep,Yt as coinsQueryKey,gr as createOrder,hs as currentDepositBreakdown,bs as currentDepositStatus,Zt as fetchCoins,or as fetchKlines,tr as fetchMarket,sr as fetchMarkets,ar as fetchOrderBook,mr as fetchOrders,xr as fetchPerpDepositQuote,Dr as fetchPerpDepositStatus,dr as fetchPositions,lr as fetchRecentTrades,yr as fetchTrades,Ue as initialDepositState,Te as initialSetupState,gs as isDepositPolling,ys as isDepositTerminal,xs as isTerminalDepositLifecycle,nr as klinesQueryKey,Oe as lamportsToSol,er as marketQueryKey,rr as marketsQueryKey,Ht as microUsdcToUsdc,qe as nextRunnableStep,ir as orderBookQueryKey,cr as ordersQueryKey,hr as perpDepositQuoteQueryKey,vr as perpDepositStatusQueryKey,ur as positionsQueryKey,pr as recentTradesQueryKey,Je as reduceDepositState,Fe as reduceSetupState,Ne as secondsUntil,ze as shortAddress,zt as solToLamports,fr as tradesQueryKey,st as useCancelOrderMutation,Hs as useCandlesSubscription,mt as useCoinInfo,Xe as useCoinsQuery,ve as useCreateOrderMutation,Ae as useHyperliquidSetup,Ns as useKlinesQuery,ie as useMarketDataSubscription,Se as useMarketQuery,Ye as useMarketsQuery,Rt as useOpenOrdersScript,Ze as useOrderBookQuery,ht as useOrderBookScript,tt as useOrdersQuery,ae as usePerpDepositClient,pt as usePerpDepositExecute,at as usePerpDepositQuote,lt as usePerpDepositStatus,P as usePerpetualsClient,Tt as usePlaceOrderFormScript,Pe as usePositionsQuery,kt as usePositionsScript,et as useRecentTradesQuery,gt as useSearchCoinsScript,Mt as useTradeHistoryScript,rt as useTradesQuery,St as useTradesScript,De as useUserDataSubscription,us as version};//# sourceMappingURL=index.mjs.map
11
+ `}),jsx("input",{type:"range",value:Math.round(Q),onChange:N=>y(Number(N.target.value)),min:0,max:100,step:1,className:"perp-slider"}),jsxs("div",{className:"flex justify-between",style:{fontSize:10,color:"#b5b5b5",marginTop:4},children:[jsx("span",{children:"0%"}),jsx("span",{children:"25%"}),jsx("span",{children:"50%"}),jsx("span",{children:"75%"}),jsx("span",{children:"100%"})]})]}),jsxs("div",{className:"flex items-center justify-between",children:[jsxs("div",{className:"flex items-center",style:{gap:6},children:[jsx("div",{onClick:()=>O(N=>!N),style:{width:16,height:16,borderRadius:4,border:"1px solid #2a2a2a",backgroundColor:w?"#C7FF2E":"transparent",flexShrink:0,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:w&&jsx("svg",{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",children:jsx("path",{d:"M1 4L3.5 6.5L9 1",stroke:"#000000",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}),jsx("span",{style:{fontSize:12,fontWeight:500,color:"#b5b5b5"},children:"TP/SL"})]}),jsxs("div",{style:{fontSize:12,color:"#6b6b6b"},children:[jsx("span",{children:"Est. Liq. Price: "}),jsx("span",{style:{color:"#b5b5b5"},children:u?Qe(u,2):"--"})]})]}),w&&jsxs("div",{className:"flex",style:{gap:8},children:[jsxs("div",{className:"flex-1",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP Price"}),jsx(RHNumberInput,{name:"takeProfitPrice",placeholder:"Enter TP price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxs("div",{style:{width:70},children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"TP %"}),jsx(RHNumberInput,{name:"takeProfitPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]}),f&&jsx("button",{type:"button",onClick:f,className:"w-full cursor-pointer transition-colors",style:{height:36,fontSize:14,fontWeight:700,color:"#000000",backgroundColor:"#C7FF2E",borderRadius:9999,border:"none"},children:"Add More Funds"}),w&&jsxs("div",{className:"flex",style:{gap:8},children:[jsxs("div",{className:"flex-1",children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL Price"}),jsx(RHNumberInput,{name:"stopLossPrice",placeholder:"Enter SL price",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]}),jsxs("div",{style:{width:70},children:[jsx("span",{style:{fontSize:12,color:"#6b6b6b",marginBottom:2,display:"block"},children:"SL %"}),jsx(RHNumberInput,{name:"stopLossPercent",placeholder:"0.0",className:"w-full",style:{fontSize:12,height:32,padding:"0 8px",border:"1px solid #1c1c1c",borderRadius:4}})]})]})]})})]}),jsxs("div",{style:{padding:"10px 16px",fontSize:12,display:"flex",flexDirection:"column",gap:6},children:[jsxs("div",{className:"flex justify-between items-center",children:[jsx("span",{style:{color:"#6b6b6b"},children:"Available Margin"}),jsxs("span",{style:{color:"#C7FF2E",fontSize:12,fontWeight:500},children:[Qe(d)," USDC"]})]}),jsxs("div",{className:"flex justify-between",children:[jsx("span",{style:{color:"#6b6b6b"},children:"Perps Account Value"}),jsxs("span",{style:{color:"#b5b5b5",fontSize:12},children:[Qe(c)," USDC"]})]}),jsxs("div",{className:"flex justify-between",children:[jsx("span",{style:{color:"#6b6b6b"},children:"Current Position"}),jsx("span",{style:{color:"#b5b5b5",fontSize:12},children:m?Qe(m):"--"})]}),jsxs("div",{className:"flex items-center justify-end",style:{gap:6,paddingTop:8},children:[jsx("span",{style:{fontSize:11,color:"#6b6b6b"},children:"powered by"}),jsx("img",{src:"https://axiom-assets.sfo3.cdn.digitaloceanspaces.com/images/hyperliquid-logo.svg",alt:"Hyperliquid",className:"h-3 opacity-60",onError:N=>{let v=N.target;v.style.display="none";}})]})]}),I&&jsx(Rn,{leverage:k,maxLeverage:b,onLeverageChange:N=>e.setValue("leverage",N),onClose:()=>h(false)})]})}function In({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n,onAddFunds:o,className:i}){let{form:a,side:p,orderType:l,setSide:u,setOrderType:d,handleSubmit:c,isSubmitting:m,currentPrice:b,estimatedFee:f,estimatedTotal:I,liquidationPrice:h,availableMargin:w,accountValue:O,currentPosition:k,maxLeverage:U}=Dt({symbol:e,userAddress:t,maxLeverage:r,onSuccess:s,onError:n});return jsx("div",{className:i,children:jsx(Ct,{methods:a,side:p,orderType:l,onSideChange:u,onOrderTypeChange:d,onSubmit:c,isSubmitting:m,symbol:e,currentPrice:b,estimatedFee:f,estimatedTotal:I,liquidationPrice:h,availableMargin:w,accountValue:O,currentPosition:k,maxLeverage:U,onAddFunds:o})})}function Tt({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s}){let[n,o]=useState([]),{data:i,isLoading:a,error:p}=Pe({userAddress:e,symbol:t},{enabled:!!e}),{data:l}=De({type:"positions",userAddress:e||"",enabled:!!e}),{mutateAsync:u,isPending:d}=ve({onSuccess:()=>{r?.();},onError:m=>{s?.(m);}});useEffect(()=>{i?.positions&&o(i.positions);},[i]),useEffect(()=>{l&&o(m=>{let b=m.findIndex(f=>f.symbol===l.symbol);if(l.quantity===0)return b!==-1?m.filter((f,I)=>I!==b):m;if(b!==-1){let f=[...m];return f[b]=l,f}return [...m,l]});},[l]);let c=useCallback(async m=>{if(!e)throw new Error("User address is required");let b=m.side==="long"?"short":"long";await u({symbol:m.symbol,side:b,orderType:"market",amount:Math.abs(m.quantity),leverage:m.leverage,userAddress:e});},[e,u]);return {positions:n,isLoading:a,error:p,handleClosePosition:c,isClosing:d}}function fe(e,t=2){return e.toFixed(t)}function wt(e){return fe(e,4)}function Mn(e){return fe(Math.abs(e),4)}function An(e){return `${e>=0?"+":""}${fe(e,2)}`}function Ln(e){return `${e>=0?"+":""}${fe(e,2)}%`}function kt({positions:e,onClosePosition:t,isClosing:r}){let s=jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Asset"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Position Value"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Entry Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Mark Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Liquidation"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Margin Used (PNL) \u2193"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"TP"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"SL"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:12,color:"#6b6b6b"},children:"Close"})]});return e.length===0?jsxs("div",{className:"w-full overflow-x-auto bg-transparent",children:[jsx("table",{className:"w-full",style:{fontSize:12},children:jsx("thead",{children:s})}),jsx("div",{className:"flex items-center justify-center",style:{fontSize:14,color:"#b5b5b5",padding:"24px 0"},children:"No open positions"})]}):jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxs("table",{className:"w-full",style:{fontSize:12},children:[jsx("thead",{children:s}),jsx("tbody",{children:e.map(n=>{let i=n.unrealizedPnl>=0?"text-bullish":"text-bearish";return jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("td",{className:"py-1.5 px-3",children:jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:n.symbol.split("-")[0]}),jsxs("span",{className:cn(n.side==="long"?"text-bullish":"text-bearish"),children:[n.leverage,"x ",n.side.toUpperCase()]})]})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Mn(n.quantity)}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",fe(n.notionalValue)]}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",wt(n.entryPrice)]}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",wt(n.markPrice)]}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:n.liquidationPrice?`$${wt(n.liquidationPrice)}`:"-"}),jsx("td",{className:"py-1.5 px-3 text-right",children:jsxs("div",{className:"flex flex-col items-end",children:[jsxs("span",{style:{color:"#ffffff"},children:["$",fe(n.margin)]}),jsxs("span",{className:i,children:[An(n.unrealizedPnl)," (",Ln(n.unrealizedPnlPercent),")"]})]})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:"-"}),jsx("td",{className:"py-1.5 px-3 text-right",children:jsx(Button,{size:"sm",onClick:()=>t(n),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Close"})})]},n.symbol)})})]})})}function Ot(){return jsxs("div",{className:"w-full space-y-4 p-4",children:[jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Qn(){return jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:14,color:"#b5b5b5"},children:"No open positions"})}function Bn({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s,className:n}){let{positions:o,isLoading:i,handleClosePosition:a,isClosing:p}=Tt({userAddress:e,symbol:t,onCloseSuccess:r,onCloseError:s});return i?jsx("div",{className:n,children:jsx(Ot,{})}):jsx("div",{className:n,children:jsx(kt,{positions:o,onClosePosition:a,isClosing:p})})}function Nt({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s}){let[n,o]=useState([]),{data:i,isLoading:a,error:p}=et({userAddress:e,symbol:t},{enabled:!!e}),{data:l}=De({type:"orders",userAddress:e||"",enabled:!!e}),{mutateAsync:u,isPending:d}=rt({onSuccess:()=>{r?.();},onError:m=>{s?.(m);}});useEffect(()=>{i?.orders&&o(i.orders);},[i]),useEffect(()=>{l&&o(m=>{let b=m.findIndex(f=>f.orderId===l.orderId);if(l.status==="cancelled"||l.status==="filled"||l.status==="rejected")return b!==-1?m.filter((f,I)=>I!==b):m;if(b!==-1){let f=[...m];return f[b]=l,f}return [l,...m]});},[l]);let c=useCallback(async m=>{if(!e)throw new Error("User address is required");await u({orderId:m.orderId,symbol:m.symbol,userAddress:e});},[e,u]);return {orders:n,isLoading:a,error:p,handleCancelOrder:c,isCanceling:d}}function Vr(e,t=2){return e.toFixed(t)}function Wn(e){return Vr(e,4)}function Rt(e){return Vr(e,4)}function $n(e){let t=new Date(e),r=String(t.getHours()).padStart(2,"0"),s=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return `${r}:${s}:${n}`}function It({orders:e,onCancelOrder:t,isCanceling:r}){return e.length===0?jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"}):jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsx("thead",{children:jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Type"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Amount"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Filled"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Remaining"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Status"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Action"})]})}),jsx("tbody",{children:e.map(s=>jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("td",{className:"py-1.5 px-3",children:jsxs("div",{className:"flex flex-col",children:[jsx("span",{className:"font-medium",style:{color:"#ffffff"},children:s.symbol.split("-")[0]}),jsxs("span",{className:cn(s.side==="long"?"text-bullish":"text-bearish"),children:[s.side.toUpperCase(),s.leverage?` ${s.leverage}x`:""]})]})}),jsx("td",{className:"py-1.5 px-3 capitalize",style:{color:"#ffffff"},children:s.orderType}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:s.orderType==="market"?jsx("span",{style:{color:"#b5b5b5"},children:"Market"}):`$${Wn(s.price)}`}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Rt(s.quantity)}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Rt(s.filledQuantity)}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:Rt(s.remainingQuantity)}),jsx("td",{className:"py-1.5 px-3 text-right",children:jsx("span",{className:cn("px-2 py-0.5 rounded","text-[11px]",s.status==="pending"&&"bg-yellow-600/20 text-yellow-500",s.status==="partially_filled"&&"bg-blue-600/20 text-blue-500",s.status==="filled"&&"bg-green-600/20 text-green-500",s.status==="cancelled"&&"bg-neutral-600/20 text-neutral-400",s.status==="rejected"&&"bg-red-600/20 text-red-500"),children:s.status.replace("_"," ")})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:$n(s.timestamp)}),jsx("td",{className:"py-1.5 px-3 text-right",children:s.status==="pending"||s.status==="partially_filled"?jsx(Button,{size:"sm",onClick:()=>t(s),isLoading:r,className:"bg-red-600 hover:bg-red-700 text-white text-xs px-3 py-1",children:"Cancel"}):jsx("span",{className:"text-[11px]",style:{color:"#6b6d7a"},children:"-"})})]},s.orderId))})]})})}function Ut(){return jsxs("div",{className:"w-full space-y-4 p-4",children:[jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Et(){return jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No open orders"})}function Kn({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s,className:n}){let{orders:o,isLoading:i,handleCancelOrder:a,isCanceling:p}=Nt({userAddress:e,symbol:t,onCancelSuccess:r,onCancelError:s});return i?jsx("div",{className:n,children:jsx(Ut,{})}):o.length===0?jsx("div",{className:n,children:jsx(Et,{})}):jsx("div",{className:n,children:jsx(It,{orders:o,onCancelOrder:a,isCanceling:p})})}function Gn(e){let t=Date.now(),r=t;switch(e){case "today":let s=new Date;return s.setHours(0,0,0,0),{startTime:s.getTime(),endTime:r};case "7d":return {startTime:t-10080*60*1e3,endTime:r};case "30d":return {startTime:t-720*60*60*1e3,endTime:r};default:return {}}}function qt({userAddress:e,symbol:t,initialTimeRange:r="7d",pageSize:s=50}){let[n,o]=useState(r),[i,a]=useState(1),[p,l]=useState([]),{startTime:u,endTime:d}=Gn(n),{data:c,isLoading:m,error:b}=tt({userAddress:e,symbol:t,startTime:u,endTime:d,limit:1e3},{enabled:!!e});useEffect(()=>{c?.trades&&(l(c.trades),a(1));},[c]),useEffect(()=>{a(1);},[n]);let f=Math.ceil(p.length/s),I=(i-1)*s,h=I+s;return {trades:p.slice(I,h),isLoading:m,error:b,timeRange:n,setTimeRange:o,currentPage:i,totalPages:f,goToNextPage:()=>{i<f&&a(i+1);},goToPreviousPage:()=>{i>1&&a(i-1);},goToPage:A=>{A>=1&&A<=f&&a(A);}}}function Mt(e,t=2){return e.toFixed(t)}function Vn(e){return Mt(e,4)}function jn(e){return Mt(e,4)}function Jn(e){let t=new Date(e),r=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0"),n=String(t.getHours()).padStart(2,"0"),o=String(t.getMinutes()).padStart(2,"0"),i=String(t.getSeconds()).padStart(2,"0");return `${r}/${s} ${n}:${o}:${i}`}var Xn=[{label:"Today",value:"today"},{label:"7 Days",value:"7d"},{label:"30 Days",value:"30d"},{label:"All",value:"all"}];function At({trades:e,timeRange:t,onTimeRangeChange:r,currentPage:s,totalPages:n,onNextPage:o,onPreviousPage:i,onGoToPage:a}){return jsxs("div",{className:"w-full flex flex-col gap-4",children:[jsx("div",{className:"flex gap-2",children:Xn.map(p=>{let l=t===p.value;return jsx("button",{type:"button",className:cn("rounded px-3 transition-colors",!l&&"hover:bg-[#1A1A1A]"),style:{height:24,fontSize:11,border:"1px solid #1c1c1c",backgroundColor:l?"#1c1c1c":"transparent",color:l?"#ffffff":"#b5b5b5"},onClick:()=>r(p.value),children:p.label},p.value)})}),e.length===0?jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"}):jsxs(Fragment,{children:[jsx("div",{className:"w-full overflow-x-auto bg-transparent",children:jsxs("table",{className:"w-full",style:{fontSize:11},children:[jsx("thead",{children:jsxs("tr",{style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Asset"}),jsx("th",{className:"text-left py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Side"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Price"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Quantity"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Fee"}),jsx("th",{className:"text-center py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Maker/Taker"}),jsx("th",{className:"text-right py-1.5 px-3 font-normal",style:{fontSize:11,color:"#b5b5b5"},children:"Time"})]})}),jsx("tbody",{children:e.map(p=>jsxs("tr",{className:"hover:bg-neutral-900/50",style:{borderBottom:"1px solid #1c1c1c"},children:[jsx("td",{className:"py-1.5 px-3 font-medium",style:{color:"#ffffff"},children:p.symbol.split("-")[0]}),jsx("td",{className:"py-1.5 px-3",children:jsx("span",{className:cn("px-2 py-0.5 rounded text-[11px]",p.side==="long"?"bg-bullish/20 text-bullish":"bg-bearish/20 text-bearish"),children:p.side.toUpperCase()})}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:["$",Vn(p.price)]}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:jn(p.quantity)}),jsxs("td",{className:"py-1.5 px-3 text-right",style:{color:"#ffffff"},children:[Mt(p.fee,4)," ",p.feeCurrency]}),jsx("td",{className:"py-1.5 px-3 text-center",children:jsx("span",{className:cn("px-2 py-0.5 rounded text-[11px]",p.isMaker?"bg-blue-600/20 text-blue-500":"bg-purple-600/20 text-purple-500"),children:p.isMaker?"Maker":"Taker"})}),jsx("td",{className:"py-1.5 px-3 text-right",style:{color:"#b5b5b5"},children:Jn(p.timestamp)})]},p.tradeId))})]})}),n>1&&jsxs("div",{className:"flex items-center justify-between",children:[jsxs("div",{className:"text-sm text-neutral-400",children:["Page ",s," of ",n]}),jsxs("div",{className:"flex gap-2",children:[jsx(Button,{size:"sm",onClick:i,disabled:s===1,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Previous"}),jsx("div",{className:"flex gap-1",children:Array.from({length:Math.min(5,n)},(p,l)=>{let u;return n<=5||s<=3?u=l+1:s>=n-2?u=n-4+l:u=s-2+l,jsx("button",{type:"button",className:cn("w-8 h-8 text-sm rounded transition-colors",s===u?"bg-neutral-700 text-white":"text-neutral-400 hover:bg-neutral-800 hover:text-white"),onClick:()=>a(u),children:u},u)})}),jsx(Button,{size:"sm",onClick:o,disabled:s===n,className:"bg-neutral-800 hover:bg-neutral-700 text-white disabled:opacity-50 disabled:cursor-not-allowed",children:"Next"})]})]})]})]})}function Lt(){return jsxs("div",{className:"w-full space-y-4 p-4",children:[jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"}),jsx("div",{className:"h-4 bg-neutral-800 rounded w-full animate-pulse"})]})}function Qt(){return jsx("div",{className:"flex items-center justify-center h-24",style:{fontSize:11,color:"#b5b5b5"},children:"No trade history"})}function Zn({userAddress:e,symbol:t,initialTimeRange:r="7d",pageSize:s=50,className:n}){let{trades:o,isLoading:i,timeRange:a,setTimeRange:p,currentPage:l,totalPages:u,goToNextPage:d,goToPreviousPage:c,goToPage:m}=qt({userAddress:e,symbol:t,initialTimeRange:r,pageSize:s});return i?jsx("div",{className:n,children:jsx(Lt,{})}):o.length===0?jsx("div",{className:n,children:jsx(Qt,{})}):jsx("div",{className:n,children:jsx(At,{trades:o,timeRange:a,onTimeRangeChange:p,currentPage:l,totalPages:u,onNextPage:d,onPreviousPage:c,onGoToPage:m})})}var eo=1000000000n;var to=1000000n;function Oe(e,t=4){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return Xr(r,eo,t)}function Bt(e,t=2){if(!e)return "0";let r;try{r=BigInt(e);}catch{return "0"}return Xr(r,to,t)}function Ht(e){if(!e)return "0";let[t,r=""]=e.replace(/[\s,]/g,"").split(".");if(!/^\d*$/.test(t)||!/^\d*$/.test(r))return "0";let s=(r+"000000000").slice(0,9),n=`${t||"0"}${s}`.replace(/^0+(?=\d)/,"");return n===""?"0":n}function Xr(e,t,r){let s=e<0n,n=s?-e:e,o=n/t,i=n%t;if(r<=0)return i*2n>=t&&(o+=1n),`${s?"-":""}${o.toString()}`;let a=10n**BigInt(r),p=(i*a+t/2n)/t;p>=a&&(o+=1n,p=0n);let l=p.toString().padStart(r,"0");return l=l.replace(/0+$/,""),l?`${s?"-":""}${o.toString()}.${l}`:`${s?"-":""}${o.toString()}`}function Ne(e,t=Date.now()){return Math.max(0,Math.floor((e-t)/1e3))}function zt(e,t=6,r=4){return e?e.length<=t+r+1?e:`${e.slice(0,t)}\u2026${e.slice(-r)}`:""}function _t({isOpen:e,quote:t,isExecuting:r,isExpired:s,onConfirm:n,onCancel:o,onExpire:i,error:a}){let{t:p}=useTranslation(),l=t?Date.parse(t.expiresAt):0,[u,d]=useState(()=>l?Ne(l):0);return useEffect(()=>{if(!e||!l)return;d(Ne(l));let c=setInterval(()=>{let m=Ne(l);d(m),m===0&&(i?.(),clearInterval(c));},1e3);return ()=>clearInterval(c)},[e,l,i]),jsx(Modal,{isOpen:e,onOpenChange:c=>!c&&o(),hideCloseButton:true,backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children:p("perpDeposit.confirm.title")}),jsxs(ModalBody,{children:[t?jsx(uo,{breakdown:t.breakdown}):jsx("div",{className:"flex h-32 items-center justify-center",children:jsx(Spinner,{})}),t&&!s&&jsx("div",{className:"text-default-500 mt-4 text-xs",children:p("perpDeposit.confirm.expiresIn",{seconds:u})}),s&&jsx("div",{className:"text-warning-500 mt-4 text-xs",children:p("perpDeposit.confirm.expired")}),a&&jsx("div",{className:"text-danger mt-4 text-xs",children:a})]}),jsxs(ModalFooter,{className:"flex justify-between gap-2",children:[jsx(Button,{variant:"flat",color:"default",onPress:o,isDisabled:r,children:p("perpDeposit.confirm.cancel")}),jsx(Button,{color:"primary",onPress:n,isDisabled:!t||r||s,isLoading:r,children:p("perpDeposit.confirm.cta")})]})]})})}function uo({breakdown:e}){let{t}=useTranslation();return jsxs("dl",{className:"flex flex-col gap-2 text-sm",children:[jsx(ze,{label:t("perpDeposit.confirm.send"),value:`${Oe(e.grossLamports)} SOL`}),jsx(ze,{label:t("perpDeposit.confirm.receive"),value:`${Bt(e.expectedOutputUSDC)} USDC`,highlight:true}),jsx(ze,{label:t("perpDeposit.confirm.platformFee"),value:`${Oe(e.platformFeeLamports,6)} SOL`,muted:true}),jsx(ze,{label:t("perpDeposit.confirm.relayFee"),value:`${Oe(e.relayDepositLamports,6)} SOL`,muted:true})]})}function ze({label:e,value:t,highlight:r,muted:s}){return jsxs("div",{className:"flex items-center justify-between",children:[jsx("dt",{className:"text-default-500",children:e}),jsx("dd",{className:r?"text-foreground text-base font-semibold":s?"text-default-500 text-xs":"text-foreground",children:t})]})}function Wt({amount:e,onAmountChange:t,recipient:r,onRecipientChange:s,balanceSol:n,disabled:o,amountError:i,recipientError:a,onMax:p,className:l}){let{t:u}=useTranslation();return jsxs("div",{className:cn("flex flex-col gap-4",l),children:[jsxs("div",{children:[jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[jsx("label",{htmlFor:"perp-deposit-amount",className:"text-sm font-medium text-foreground",children:u("perpDeposit.amount")}),n&&jsx("span",{className:"text-xs text-default-500",children:u("perpDeposit.amount.balance",{balance:n})})]}),jsx("div",{className:"relative",children:jsx(Input,{id:"perp-deposit-amount",type:"text",inputMode:"decimal",placeholder:u("perpDeposit.amount.placeholder"),value:e,onValueChange:t,isDisabled:o,isInvalid:!!i,errorMessage:i,endContent:jsxs("div",{className:"flex items-center gap-2",children:[jsx("span",{className:"text-default-500 text-sm",children:u("perpDeposit.amount.unit")}),n&&p&&jsx(Button,{size:"sm",variant:"flat",color:"primary",onPress:p,isDisabled:o,children:u("perpDeposit.amount.max")})]})})})]}),jsxs("div",{children:[jsx("label",{htmlFor:"perp-deposit-recipient",className:"text-sm font-medium text-foreground mb-1.5 block",children:u("perpDeposit.recipient")}),jsx(Input,{id:"perp-deposit-recipient",type:"text",placeholder:u("perpDeposit.recipient.placeholder"),value:r,onValueChange:s,isDisabled:o,isInvalid:!!a,errorMessage:a,autoComplete:"off",spellCheck:"false"})]})]})}var rs="#C7FF2E";function Kt({isOpen:e,phase:t,status:r,solanaExplorerUrl:s,hyperliquidExplorerUrl:n,onRetry:o,onClose:i,errorMessage:a}){let{t:p}=useTranslation(),l=Po(t),u=t==="failed"?a||(r?.lastError?.message?p("perpDeposit.status.failed",{message:r.lastError.message}):p("perpDeposit.status.failed",{message:""})):t==="succeeded"?p("perpDeposit.status.settled"):t==="refunded"?p("perpDeposit.status.refunded"):r?.status==="broadcasted"?p("perpDeposit.status.broadcasted"):r?.status==="relay_waiting"?p("perpDeposit.status.relay_waiting"):r?.status==="relay_pending"?p("perpDeposit.status.relay_pending"):r?.status==="stuck"?p("perpDeposit.status.stuck"):p("perpDeposit.status.broadcasted"),d=t==="failed"&&!!o;return jsx(StyledModal,{isOpen:e,onOpenChange:c=>!c&&i(),size:"md",hideCloseButton:true,backdrop:"blur",classNames:{base:"!bg-[#18181b] !rounded-[14px] !border !border-[rgba(39,39,42,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)] max-w-[420px]",body:"!p-0"},children:jsx(ModalContent,{children:jsxs("div",{className:"flex flex-col",children:[jsxs("div",{className:"flex items-start justify-between px-5 pt-5 pb-2",children:[jsx("div",{className:"flex items-center gap-2.5",children:jsx("h3",{className:"text-base font-semibold text-white",children:p("perpDeposit.status.title")})}),jsx("button",{type:"button",onClick:i,className:"cursor-pointer p-1 rounded-[10px] hover:bg-[rgba(39,39,42,0.5)] text-zinc-400 hover:text-white transition-colors","aria-label":p("perpDeposit.status.close"),children:jsx(XCloseIcon,{width:16,height:16})})]}),jsxs("div",{className:"px-5 pb-3 pt-2",children:[jsxs("div",{className:"rounded-[12px] bg-[#0a0a0b] border border-[#27272a] px-4 py-6 flex flex-col items-center text-center gap-4",children:[jsx(xo,{variant:l}),jsx("p",{className:cn("text-sm leading-relaxed max-w-[320px]",vo(l)),children:u})]}),(r?.solanaTxHash||r?.hyperliquidTxHash)&&jsxs("div",{className:"mt-3 flex flex-col gap-2",children:[r?.solanaTxHash&&s&&jsx(ts,{href:s,label:p("perpDeposit.status.viewSolanaTx"),hash:r.solanaTxHash}),r?.hyperliquidTxHash&&n&&jsx(ts,{href:n,label:p("perpDeposit.status.viewHyperliquidTx"),hash:r.hyperliquidTxHash})]})]}),jsxs("div",{className:cn("px-5 pb-5 pt-2 flex gap-2",d?"justify-between":"justify-end"),children:[d&&jsx("button",{type:"button",onClick:o,className:"cursor-pointer flex-1 h-10 rounded-[10px] font-medium text-black bg-[#C7FF2E] hover:bg-[#b6ed1c] active:bg-[#a6d913] transition-colors flex items-center justify-center",children:p("perpDeposit.status.tryAgain")}),jsx("button",{type:"button",onClick:i,className:cn("cursor-pointer h-10 rounded-[10px] font-medium transition-colors flex items-center justify-center",d?"flex-1 bg-[rgba(39,39,42,1)] hover:bg-[rgba(63,63,70,1)] text-white":"px-6 bg-[rgba(39,39,42,1)] hover:bg-[rgba(63,63,70,1)] text-white"),children:p("perpDeposit.status.close")})]})]})})})}function ts({href:e,label:t,hash:r}){return jsxs("a",{href:e,target:"_blank",rel:"noreferrer",className:"group flex items-center justify-between gap-2 px-3 py-2 rounded-[10px] bg-[#0a0a0b] border border-[#27272a] hover:border-[rgba(199,255,46,0.4)] transition-colors",children:[jsx("span",{className:"text-xs text-zinc-400 group-hover:text-white transition-colors",children:t}),jsxs("span",{className:"flex items-center gap-1.5 text-xs tabular-nums text-zinc-300 group-hover:text-[#C7FF2E] transition-colors",children:[zt(r,6,4),jsx(wo,{})]})]})}function xo({variant:e}){return e==="progress"?jsx("div",{className:"relative w-14 h-14 flex items-center justify-center",children:jsx(So,{})}):e==="success"?jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(199,255,46,0.12)]",children:jsx(Do,{className:"w-8 h-8",style:{color:rs}})}):e==="warning"?jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(245,158,11,0.12)]",children:jsx(Co,{className:"w-8 h-8 text-amber-400"})}):jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center bg-[rgba(239,68,68,0.12)]",children:jsx(To,{className:"w-8 h-8 text-rose-400"})})}function So(){return jsxs(Fragment,{children:[jsxs("svg",{className:"lfi-perp-deposit-spinner",viewBox:"0 0 50 50",width:48,height:48,"aria-hidden":"true",children:[jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"rgba(255,255,255,0.08)",strokeWidth:"4"}),jsx("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:rs,strokeWidth:"4",strokeLinecap:"round",strokeDasharray:"90 60"})]}),jsx("style",{children:`
12
+ .lfi-perp-deposit-spinner {
13
+ animation: lfi-perp-deposit-spin 0.9s linear infinite;
14
+ transform-origin: center;
15
+ }
16
+ @keyframes lfi-perp-deposit-spin {
17
+ to { transform: rotate(360deg); }
18
+ }
19
+ `})]})}function Po(e){switch(e){case "succeeded":return "success";case "refunded":return "warning";case "failed":return "error";default:return "progress"}}function vo(e){switch(e){case "success":return "text-white";case "warning":return "text-amber-200";case "error":return "text-rose-300";default:return "text-zinc-200"}}function Do(e){return jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:e.className,style:e.style,children:jsx("path",{d:"M20 6L9 17l-5-5"})})}function Co(e){return jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:e.className,children:jsx("path",{d:"M12 2a10 10 0 100 20 10 10 0 000-20zm0 4c.6 0 1 .4 1 1v6c0 .6-.4 1-1 1s-1-.4-1-1V7c0-.6.4-1 1-1zm0 12c-.7 0-1.2-.5-1.2-1.2s.5-1.2 1.2-1.2 1.2.5 1.2 1.2-.5 1.2-1.2 1.2z"})})}function To(e){return jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:e.className,children:[jsx("circle",{cx:"12",cy:"12",r:"10"}),jsx("path",{d:"M15 9l-6 6M9 9l6 6"})]})}function wo(){return jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),jsx("polyline",{points:"15 3 21 3 21 9"}),jsx("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]})}function Uo({userSolanaAddress:e,userId:t,source:r,campaign:s,defaultRecipient:n,signAndBroadcast:o,balanceSol:i,onMaxClick:a,validateRecipient:p,buildSolanaExplorerUrl:l,buildHyperliquidExplorerUrl:u,onSettled:d,onError:c,className:m}){let{t:b}=useTranslation(),[f,I]=useState(""),[h,w]=useState(n??""),O=useMemo(()=>{if(f&&(!/^\d+(\.\d+)?$/.test(f.trim())||Number(f)<=0))return b("perpDeposit.error.amountInvalid")},[f,b]),k=useMemo(()=>{if(h)return p?p(h):void 0},[h,p]),U=useMemo(()=>O?"":Ht(f),[f,O]),A=useMemo(()=>!U||U==="0"||k||!h?null:{userSolanaAddress:e,hyperliquidRecipient:h,grossLamports:U,source:r},[U,h,k,r,e]),Q=it(A,{enabled:!!A}),{state:y,execute:N,reset:v,dispatch:q}=at(o),ue=y.phase==="submitted"||y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"?y.intentId:void 0,re=pt(ue,{enabled:!!ue&&y.phase!=="succeeded"&&y.phase!=="refunded"&&y.phase!=="failed"});useEffect(()=>{re.data&&q({type:"STATUS_UPDATE",status:re.data});},[re.data,q]),useEffect(()=>{y.phase==="succeeded"?d?.(y.intentId):y.phase==="failed"&&c?.(y.intentId,y.error.message);},[y,d,c]);let se=useCallback(()=>{Q.data&&(q({type:"QUOTE_REQUEST"}),q({type:"QUOTE_RECEIVED",quote:Q.data}));},[q,Q.data]),is=useCallback(async()=>{if(y.phase==="ready_to_sign")try{await N({quote:y.quote,userSolanaAddress:e,hyperliquidRecipient:h,userId:t,source:r,campaign:s});}catch{}},[y,N,e,h,t,r,s]),as=useCallback(()=>{q({type:"QUOTE_EXPIRED"});},[q]),ps=useCallback(async()=>{q({type:"RESET"}),await Q.refetch();},[q,Q]),ls=y.phase==="ready_to_sign"||y.phase==="signing"||y.phase==="broadcasting"||y.phase==="expired",us=y.phase==="submitted"||y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"&&!!y.intentId,he=y.phase==="tracking"||y.phase==="succeeded"||y.phase==="refunded"||y.phase==="failed"?y.status:void 0,ds=!Q.data||Q.isFetching||!!O||!!k||!A;return jsxs(Card,{className:m,children:[jsxs(CardBody,{className:"flex flex-col gap-4 p-6",children:[jsxs("div",{children:[jsx("h3",{className:"text-lg font-semibold",children:b("perpDeposit.title")}),jsx("p",{className:"text-default-500 text-sm",children:b("perpDeposit.description")})]}),jsx(Wt,{amount:f,onAmountChange:I,recipient:h,onRecipientChange:w,balanceSol:i,onMax:a,amountError:O,recipientError:k,disabled:y.phase!=="idle"&&y.phase!=="expired"&&y.phase!=="failed"}),jsx(Button,{color:"primary",isDisabled:ds,isLoading:Q.isFetching,onPress:se,children:Q.isFetching?b("perpDeposit.gettingQuote"):b("perpDeposit.confirmQuote")}),Q.error&&jsx("div",{className:"text-danger text-xs",children:b("perpDeposit.error.quoteFailed")})]}),jsx(_t,{isOpen:ls,quote:y.phase==="ready_to_sign"||y.phase==="signing"||y.phase==="broadcasting"||y.phase==="expired"?y.quote:void 0,isExecuting:y.phase==="signing"||y.phase==="broadcasting",isExpired:y.phase==="expired",onConfirm:is,onCancel:v,onExpire:as}),jsx(Kt,{isOpen:us,phase:y.phase,status:he,solanaExplorerUrl:he?.solanaTxHash&&l?l(he.solanaTxHash):void 0,hyperliquidExplorerUrl:he?.hyperliquidTxHash&&u?u(he.hyperliquidTxHash):void 0,onRetry:y.phase==="failed"?ps:void 0,onClose:v,errorMessage:y.phase==="failed"?y.error.message:void 0})]})}function Jt({state:e,onContinue:t,onRetryStep:r,onReload:s,onDismiss:n,className:o}){let{t:i}=useTranslation(),a=e.phase,p=a==="executing",l=a==="loading",u=a==="error"&&e.steps.length===0;return jsxs(Card,{className:cn("w-full max-w-md",o),children:[jsxs(CardHeader,{className:"flex flex-col items-start gap-1",children:[jsx("h3",{className:"text-lg font-semibold",children:i("perpDeposit.setup.title")}),jsx("p",{className:"text-foreground-500 text-sm",children:i("perpDeposit.setup.description")})]}),jsxs(CardBody,{className:"gap-3",children:[l&&jsx(Lo,{}),u&&jsx("p",{className:"text-danger text-sm",children:i("perpDeposit.setup.loadFailed",{message:e.error??""})}),!l&&!u&&e.steps.map((d,c)=>jsx(Ao,{rec:d,index:c,isCurrent:e.currentIndex===c,onRetry:r},`${d.step.id}-${c}`)),a==="done"&&jsx("p",{className:"text-success text-sm",children:i("perpDeposit.setup.alreadyActive")})]}),jsxs(CardFooter,{className:"flex justify-between gap-2",children:[n&&jsx(Button,{variant:"light",onPress:n,isDisabled:p,children:i(a==="done"?"perpDeposit.setup.dismiss":"perpDeposit.setup.skip")}),jsx("div",{className:"flex-1"}),u&&s&&jsx(Button,{color:"primary",onPress:s,children:i("perpDeposit.setup.retry")}),!u&&a!=="done"&&jsx(Button,{color:"primary",onPress:t,isLoading:p,isDisabled:p||l,children:e.steps.some(d=>d.status==="done")?i("perpDeposit.setup.continue"):i("perpDeposit.setup.cta")})]})]})}function Ao({rec:e,index:t,isCurrent:r,onRetry:s}){let{t:n}=useTranslation(),o=Ho(e.step.id,()=>{switch(e.step.id){case "approveBuilderFee":return n("perpDeposit.setup.builderFee.label");case "setReferrer":return n("perpDeposit.setup.referrer.label");case "updateLeverage":return n("perpDeposit.setup.leverage.label")}}),i=(()=>{switch(e.step.id){case "approveBuilderFee":{let p=(e.step.params.maxFeeRate/10).toFixed(1);return n("perpDeposit.setup.builderFee.description",{bps:p})}case "setReferrer":return n("perpDeposit.setup.referrer.description",{code:e.step.params.code});case "updateLeverage":return n("perpDeposit.setup.leverage.description")}})(),a=(()=>{switch(e.status){case "pending":return n("perpDeposit.setup.step.pending");case "skipped":return n("perpDeposit.setup.step.skipped");case "running":return n("perpDeposit.setup.step.running");case "done":return n("perpDeposit.setup.step.done");case "error":return n("perpDeposit.setup.step.error")}})();return jsxs("div",{className:cn("border-divider flex items-start justify-between gap-3 rounded-md border p-3",e.status==="error"&&"border-danger",e.status==="done"&&"border-success/40 bg-success/5",e.status==="skipped"&&"border-default bg-default-100/40"),children:[jsxs("div",{className:"flex-1",children:[jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[jsx(Qo,{status:e.status,isCurrent:r}),jsx("span",{children:o})]}),jsx("p",{className:"text-foreground-500 mt-1 text-xs",children:i}),e.status==="error"&&e.error&&jsx("p",{className:"text-danger mt-1 text-xs",children:e.error})]}),jsxs("div",{className:"flex flex-col items-end gap-1 text-xs",children:[jsx("span",{className:cn(Bo(e.status)),children:a}),e.status==="error"&&s&&jsx(Button,{size:"sm",variant:"flat",color:"danger",onPress:()=>s(t),children:n("perpDeposit.setup.retry")})]})]})}function Lo(){let{t:e}=useTranslation();return jsxs("div",{className:"flex items-center gap-2 py-2 text-sm",children:[jsx(Spinner,{size:"sm"}),jsx("span",{children:e("perpDeposit.setup.loading")})]})}function Qo({status:e,isCurrent:t}){return e==="running"||t?jsx(Spinner,{size:"sm"}):e==="done"||e==="skipped"?jsx("span",{"aria-hidden":true,className:"text-success",children:"\u2713"}):e==="error"?jsx("span",{"aria-hidden":true,className:"text-danger",children:"!"}):jsx("span",{"aria-hidden":true,className:"border-foreground-400 inline-block h-3 w-3 rounded-full border"})}function Bo(e){switch(e){case "done":return "text-success";case "skipped":return "text-foreground-500";case "running":return "text-primary";case "error":return "text-danger";default:return "text-foreground-500"}}function Ho(e,t){return t()}function zo({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:o,onDismiss:i,className:a}){let{state:p,runNext:l,runStep:u,reload:d}=Ae({adapter:e,userAddress:t,steps:r,autoLoad:s,onComplete:n,onError:o}),c=useCallback(()=>{l();},[l]),m=useCallback(f=>{u(f);},[u]),b=useCallback(()=>{d();},[d]);return jsx(Jt,{state:p,onContinue:c,onRetryStep:m,onReload:b,onDismiss:i,className:a})}export{lt as CoinInfoNotFoundUI,ut as CoinInfoSkeletonsUI,mt as CoinInfoUI,on as CoinInfoWidget,_t as DepositConfirmUI,Uo as DepositFlowWidget,Wt as DepositFormUI,Kt as DepositStatusUI,ne as HyperliquidApiError,Jt as HyperliquidInitUI,zo as HyperliquidInitWidget,Ke as HyperliquidPerpetualsClient,$ as LiberFiApiError,oe as LiberFiHttpTransport,Ve as LiberFiPerpDepositClient,Ge as LiberFiPerpetualsClient,Et as OpenOrdersEmpty,Ut as OpenOrdersSkeleton,It as OpenOrdersUI,Kn as OpenOrdersWidget,ht as OrderBookUI,bn as OrderBookWidget,ie as PerpetualsContext,Cs as PerpetualsProvider,Ct as PlaceOrderFormUI,In as PlaceOrderFormWidget,Qn as PositionsEmpty,Ot as PositionsSkeleton,kt as PositionsUI,Bn as PositionsWidget,gt as SearchCoinsUI,dn as SearchCoinsWidget,xe as TERMINAL_DEPOSIT_STATUSES,Qt as TradeHistoryEmpty,Lt as TradeHistorySkeleton,At as TradeHistoryUI,Zn as TradeHistoryWidget,Pt as TradesUI,Cn as TradesWidget,hr as cancelOrder,Ee as classifyStep,Zt as coinsQueryKey,br as createOrder,Ss as currentDepositBreakdown,xs as currentDepositStatus,er as fetchCoins,ir as fetchKlines,rr as fetchMarket,nr as fetchMarkets,pr as fetchOrderBook,fr as fetchOrders,Sr as fetchPerpDepositQuote,Cr as fetchPerpDepositStatus,cr as fetchPositions,ur as fetchRecentTrades,gr as fetchTrades,Ue as initialDepositState,Ce as initialSetupState,hs as isDepositPolling,bs as isDepositTerminal,Ps as isTerminalDepositLifecycle,or as klinesQueryKey,Oe as lamportsToSol,tr as marketQueryKey,sr as marketsQueryKey,Bt as microUsdcToUsdc,qe as nextRunnableStep,ar as orderBookQueryKey,mr as ordersQueryKey,xr as perpDepositQuoteQueryKey,Dr as perpDepositStatusQueryKey,dr as positionsQueryKey,lr as recentTradesQueryKey,je as reduceDepositState,Fe as reduceSetupState,Ne as secondsUntil,zt as shortAddress,Ht as solToLamports,yr as tradesQueryKey,rt as useCancelOrderMutation,_s as useCandlesSubscription,ct as useCoinInfo,Je as useCoinsQuery,ve as useCreateOrderMutation,Ae as useHyperliquidSetup,Is as useKlinesQuery,ae as useMarketDataSubscription,Se as useMarketQuery,Xe as useMarketsQuery,Nt as useOpenOrdersScript,Ye as useOrderBookQuery,bt as useOrderBookScript,et as useOrdersQuery,pe as usePerpDepositClient,at as usePerpDepositExecute,it as usePerpDepositQuote,pt as usePerpDepositStatus,D as usePerpetualsClient,Dt as usePlaceOrderFormScript,Pe as usePositionsQuery,Tt as usePositionsScript,Ze as useRecentTradesQuery,yt as useSearchCoinsScript,qt as useTradeHistoryScript,tt as useTradesQuery,xt as useTradesScript,De as useUserDataSubscription,cs as version};//# sourceMappingURL=index.mjs.map
13
20
  //# sourceMappingURL=index.mjs.map