@liberfi.io/ui-trade 0.1.3 → 0.1.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,3 +1,3 @@
1
- import {createContext,useState,useRef,useCallback,useMemo,useEffect,useContext}from'react';import {useDexClient,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,API,ChainNamespace}from'@liberfi.io/types';import {useWallets}from'@liberfi.io/wallet-connector';import {Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,Button,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn as cn$1,Input,useDisclosure,NumberInput,Tooltip,InfoIcon,Switch,Tabs,Tab,CheckIcon,EditIcon,SlippageIcon,ZapFastIcon,CoinsIcon,ShieldOffIcon,ShieldIcon,ShieldPlusIcon,LightningIcon}from'@liberfi.io/ui';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getNativeToken,getWrappedToken,formatAmountUSD,formatPercent,formatPrice}from'@liberfi.io/utils';import ne from'bignumber.js';import {useCallbackRef}from'@liberfi.io/hooks';function Pt(e){let t=atob(e),r=new Uint8Array(t.length);for(let o=0;o<t.length;o++)r[o]=t.charCodeAt(o);return r}function Tt(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function te(e){let{client:t}=useDexClient(),[r,o]=useState(false),i=useRef(e);i.current=e;let s=useCallback(async n=>{let{wallet:l,chain:p,...u}=n;o(true);try{let d;try{d=await t.swapRoute({chain:p,userAddress:l.address,input:u.input,output:u.output,mode:u.mode??API.SwapMode.EXACT_IN,amount:u.amount,slippage:u.slippage,priorityFee:u.priorityFee,tipFee:u.tipFee,isAntiMev:u.isAntiMev,permit:u.permit,deadline:u.deadline});}catch(a){let m=a instanceof Error?a:new Error(String(a));throw i.current?.onError?.(m,"route"),m}let g;try{let a=Pt(d.serializedTx);g=await l.signTransaction(a);}catch(a){let m=a instanceof Error?a:new Error(String(a));throw i.current?.onError?.(m,"sign"),m}let f;try{let a=Tt(g);f=await t.sendTx({chain:p,serializedTx:a});}catch(a){let m=a instanceof Error?a:new Error(String(a));throw i.current?.onError?.(m,"send"),m}let x={txHash:f.txHash,extra:f.extra};return i.current?.onSubmitted?.(x),x}finally{o(false);}},[t]);return useMemo(()=>({swap:s,isSwapping:r}),[s,r])}var Ft=12e3;function Ke(e,t){let r=t?.interval??Ft,o=t?.paused??false,i=useRef(t);i.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!o,l=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return useEffect(()=>{l.error&&i.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var Bt=6e4;function He(e){let{client:t}=useDexClient(),[r,o]=useState(()=>new Map),i=useRef(e);i.current=e;let s=useCallback((u,d)=>{o(g=>{let f=g.get(u);if(!f||f.status===d)return g;let x=new Map(g);return x.set(u,{...f,status:d}),x});},[]),n=useCallback((u,d)=>{o(f=>{if(f.has(d))return f;let x=new Map(f);return x.set(d,{chain:u,txHash:d,status:"pending"}),x});let g=i.current?.timeout??Bt;t.checkTxSuccess(u,d,g).then(f=>{if(f)s(d,"confirmed"),i.current?.onConfirmed?.(d);else {let x=new Error("Transaction failed on-chain");s(d,"failed"),i.current?.onFailed?.(d,x);}}).catch(f=>{let x=f instanceof Error?f:new Error(String(f));s(d,"failed"),i.current?.onFailed?.(d,x);});},[t,s]),l=useCallback(u=>{o(d=>{if(!d.has(u))return d;let g=new Map(d);return g.delete(u),g});},[]),p=useCallback(()=>{o(u=>u.size===0?u:new Map);},[]);return useMemo(()=>({track:n,clear:l,clearAll:p,transactions:r}),[n,l,p,r])}var Ot=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function Wt(e){return Ot.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var Vt=1e4,zt=15e3;function $t(e,t){if(e.length===0)return;let o=e[e.length-1].outputAmount;if(!o||o==="0")return "0";let i=o.padStart(t+1,"0"),s=i.slice(0,i.length-t)||"0",l=i.slice(i.length-t).replace(/0+$/,"");return l?`${s}.${l}`:s}function Ie(e){let{chain:t}=e,r=useWallets(),o=Wt(t),i=useMemo(()=>r.find(S=>S.chainNamespace===o&&S.isConnected),[r,o]),s=i?.address??"",[n,l]=useState(e.from??""),[p,u]=useState(e.to??""),d=useRef(e.from),g=useRef(e.to);useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==g.current&&(g.current=e.to,e.to&&u(e.to));},[e.to]);let f=useMemo(()=>[n,p].filter(Boolean),[n,p]),x=useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Vt}),a=useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),m=useMemo(()=>x.data?.find(S=>S.address===p)??null,[x.data,p]),N=useWalletPortfoliosByTokensQuery({chain:t,address:s,tokenAddresses:f},{enabled:!!s&&f.length>0,refetchInterval:zt}),v=useMemo(()=>N.data?.find(S=>S.address===n)??null,[N.data,n]),h=useMemo(()=>N.data?.find(S=>S.address===p)??null,[N.data,p]),[T,D]=useState(void 0),C=useMemo(()=>{if(!T||a?.decimals==null)return;let S=T.split("."),W=S[0]??"0",ht=(S[1]??"").slice(0,a.decimals).padEnd(a.decimals,"0");return (W+ht).replace(/^0+/,"")||"0"},[T,a?.decimals]),O=useMemo(()=>{if(!T||!a?.marketData?.priceInUsd)return;let S=Number(a.marketData.priceInUsd),W=Number(T)*S;return Number.isFinite(W)?W.toString():void 0},[T,a?.marketData?.priceInUsd]),A=useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let W=S/2,je=a?.decimals??9;D(W.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:je}));},[v,a?.decimals]),V=useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let W=a?.decimals??9;D(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:W}));},[v,a?.decimals]),$=useMemo(()=>({chain:t,userAddress:s||void 0,input:n||void 0,output:p||void 0,mode:API.SwapMode.EXACT_IN,amount:C}),[t,s,n,p,C]),X=useRef(false),{route:B,isRouting:Z,error:ae}=Ke($,{paused:X.current}),Q=useMemo(()=>B&&m?$t(B.plans,m.decimals):void 0,[B,m]),w=useMemo(()=>{if(!Q||!m?.marketData?.priceInUsd)return;let S=Number(m.marketData.priceInUsd),W=Number(Q)*S;return Number.isFinite(W)?W.toString():void 0},[Q,m?.marketData?.priceInUsd]),{swap:R,isSwapping:_}=te();X.current=_;let j=useRef(e.onComplete);j.current=e.onComplete;let{track:oe,transactions:K}=He({onConfirmed:S=>{j.current?.({success:true,txHash:S});},onFailed:S=>{j.current?.({success:false,txHash:S});}}),H=useMemo(()=>{if(K.size===0)return "idle";let S=Array.from(K.values());return S[S.length-1].status},[K]),q=useCallback(async()=>{if(!(!i||!B||!n||!p||!C))try{let S=await R({chain:t,wallet:i,input:n,output:p,amount:C,mode:API.SwapMode.EXACT_IN});oe(t,S.txHash);}catch{}},[i,B,t,n,p,C,R,oe]),me=x.isPending||N.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:p,setFromTokenAddress:l,setToTokenAddress:u,fromToken:a,toToken:m,fromBalance:v,toBalance:h,amount:T,setAmount:D,setHalfAmount:A,setMaxAmount:V,amountInDecimals:C,amountInUsd:O,outputAmount:Q,outputAmountInUsd:w,route:B,isRouting:Z,routeError:ae,swap:q,isSwapping:_,txStatus:H,isLoading:me}),[n,p,a,m,v,h,T,A,V,C,O,Q,w,B,Z,ae,q,_,H,me])}function Ee({isOpen:e,onOpenChange:t,fromToken:r,toToken:o,fromBalance:i,inputAmount:s,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:p,route:u,isRouting:d,routeError:g,onConfirm:f,isSwapping:x}){let[a,m]=useState(false),N=useCallback(()=>m(h=>!h),[]),v=useMemo(()=>u?u.plans.map((h,T)=>({key:`plan-${T}`,name:h.name,input:h.input,inputAmount:h.inputAmount,output:h.output,outputAmount:h.outputAmount,feeQuote:h.feeQuote,feeAmount:h.feeAmount})):[],[u]);return jsx(Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children:"Preview"}),jsx(ModalBody,{children:jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"From"}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsx(Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),i&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(tn,{}),jsxs("span",{children:[Ae(i.amount)," ",r?.symbol]})]})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Ae(s)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ye(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"Estimated Receive"}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[o?.image&&jsx(Avatar,{size:"sm",src:o.image,name:o.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:o?.symbol??"\u2014"}),jsx("div",{className:"text-neutral text-[10px]",children:fe(o?.address)})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Ae(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ye(p)]})]})]})]}),a&&v.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"Route Details"}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:v.map(h=>jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:"DEX"}),jsx("div",{className:"text-foreground text-xs",children:h.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:"Swap"}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[Ce(h.inputAmount)," ",fe(h.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[Ce(h.outputAmount)," ",fe(h.output)]})]})]}),h.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:"Fee"}),jsxs("div",{className:"text-foreground text-xs",children:[Ce(h.feeAmount)," ",fe(h.feeQuote)]})]})]},h.key))})]}),v.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:a?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:N,children:a?"Show Less":"Show More"})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!g,isLoading:!u&&d||x,onPress:f,children:"Confirm"})})]})})}function tn(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Ye(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Ae(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function Ce(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function fe(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function ke({fromToken:e,toToken:t,fromBalance:r,toBalance:o,amount:i,amountInUsd:s,onAmountChange:n,onHalfAmount:l,onMaxAmount:p,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:g,onToTokenSelect:f,route:x,isRouting:a,routeError:m,onPreview:N,isSwapping:v,className:h}){return jsxs("div",{className:cn$1("px-4 pb-4 lg:pb-8",h),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:"From"}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:i??"",onChange:T=>n(T.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn$1("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn$1("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn$1("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsx(Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>g(""),children:e?e.symbol:"Select token"})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",rt(s)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(st,{}),jsxs("span",{className:"text-neutral",children:[at(r.amount)," ",r.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:"Half"}),p&&jsx("span",{className:"text-primary cursor-pointer",onClick:p,children:"Max"})]})]}),m&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:m.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:"To"}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:u??"",disabled:true,placeholder:"0",classNames:{inputWrapper:cn$1("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn$1("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn$1("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsx(Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>f(""),children:t?t.symbol:"Select token"})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",rt(d)]}),o&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(st,{}),jsxs("span",{className:"text-neutral",children:[at(o.amount)," ",o.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!x,isLoading:!x&&a,onPress:N,children:v?"Swapping...":a?"Finding route...":"Swap"})]})}function st(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function rt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function at(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function rn({chain:e,from:t,to:r,onComplete:o,className:i}){let s=Ie({chain:e,from:t,to:r,onComplete:o}),{isOpen:n,onOpen:l,onOpenChange:p,onClose:u}=useDisclosure(),d=useCallback(async()=>{await s.swap(),u();},[s,u]);return jsxs(Fragment,{children:[jsx(ke,{fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,toBalance:s.toBalance,amount:s.amount,amountInUsd:s.amountInUsd,onAmountChange:s.setAmount,onHalfAmount:s.setHalfAmount,onMaxAmount:s.setMaxAmount,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,onFromTokenSelect:s.setFromTokenAddress,onToTokenSelect:s.setToTokenAddress,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onPreview:l,isSwapping:s.isSwapping,className:i}),jsx(Ee,{isOpen:n,onOpenChange:p,fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,inputAmount:s.amount,inputAmountInUsd:s.amountInUsd,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onConfirm:d,isSwapping:s.isSwapping})]})}var E={slippage:20,priorityFee:.001,tipFee:.001,autoFee:false,maxAutoFee:.1,antiMev:"off",customRPC:null},Sr=[.01,.1,1,10],wr=[10,25,50,100];var mn={customAmounts:[.01,.1,1,10],presets:[{...E},{...E},{...E}]},cn={customPercentages:[10,25,50,100],presets:[{...E},{...E},{...E}]},Ue={buy:mn,sell:cn};function it(e){return `liberfi.instant-trade.settings.${e}`}function pn(e){try{let t=localStorage.getItem(it(e));if(t)return JSON.parse(t)}catch{}return Ue}function fn(e,t){try{localStorage.setItem(it(e),JSON.stringify(t));}catch{}}var lt=createContext(null);function Y(){let e=useContext(lt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Be({chain:e,tokenAddress:t,settings:r,onSettingsChange:o,children:i}){let s=useMemo(()=>getNativeToken(e),[e]),n=r!==void 0,[l,p]=useState(()=>n?Ue:pn(String(e))),u=n?r:l,d=useCallback(A=>{n?o?.(A):(p(A),fn(String(e),A));},[n,o,e]),g=useCallback(A=>d({...u,buy:A}),[u,d]),f=useCallback(A=>d({...u,sell:A}),[u,d]),[x,a]=useState("buy"),[m,N]=useState(),[v,h]=useState(0),[T,D]=useState(0),C=useMemo(()=>{let A=x==="buy"?v:T;return (x==="buy"?u.buy.presets:u.sell.presets)[A]??E},[x,v,T,u]),O=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:s,direction:x,setDirection:a,amount:m,setAmount:N,buyPreset:v,setBuyPreset:h,sellPreset:T,setSellPreset:D,settings:u,updateBuySettings:g,updateSellSettings:f,currentPresetValues:C}),[e,t,s,x,m,v,T,u,g,f,C]);return jsx(lt.Provider,{value:O,children:i})}var Nn=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function Pn(e){return Nn.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var Tn=15e3,In=1e4;function De(e){let{chain:t,tokenAddress:r,onSwapSubmitted:o,onSwapError:i}=e,s=Y(),n=useMemo(()=>getNativeToken(t),[t]),l=useMemo(()=>getWrappedToken(t),[t]),p=useWallets(),u=Pn(t),d=useMemo(()=>p.find(w=>w.chainNamespace===u&&w.isConnected),[p,u]),g=d?.address??"",f=useMemo(()=>{let w=[r];return n&&w.push(n.address),l&&w.push(l.address),w.filter(Boolean)},[r,n,l]),x=useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:In}),a=useMemo(()=>x.data?.find(w=>w.address===r)??null,[x.data,r]),m=useWalletPortfoliosByTokensQuery({chain:t,address:g,tokenAddresses:f},{enabled:!!g&&f.length>0,refetchInterval:Tn}),N=n?.address??l?.address??"",v=useMemo(()=>m.data?.find(w=>w.address===N)??null,[m.data,N]),h=useMemo(()=>m.data?.find(w=>w.address===r)??null,[m.data,r]),[T,D]=useState(false),C=useRef(null),O=useCallback(w=>{let R=C.current;C.current=w,D(_=>R===null||R!==w?true:!_);},[]),A=useRef(o);A.current=o;let V=useRef(i);V.current=i;let{swap:$,isSwapping:X}=te({onSubmitted:w=>A.current?.(w),onError:(w,R)=>V.current?.(w,R)}),B=useCallback(async()=>{if(!s.amount||!d||!r)return;let w=n?.decimals??9,R=l?.address??n?.address??"",_=s.direction==="buy",j=_?R:r,oe=_?r:R,K=_?w:a?.decimals??9,H=new ne(s.amount).shiftedBy(K).decimalPlaces(0).toString(),q=s.currentPresetValues,me=new ne(q.priorityFee??E.priorityFee).shiftedBy(w).decimalPlaces(0).toString(),S=new ne(q.tipFee??E.tipFee).shiftedBy(w).decimalPlaces(0).toString();try{await $({chain:t,wallet:d,input:j,output:oe,amount:H,slippage:q.slippage??E.slippage,priorityFee:me,tipFee:S,isAntiMev:q.antiMev!=="off"}),s.setAmount(void 0);}catch{}},[s,d,r,n,l,a,t,$]),Z=useMemo(()=>{let w=s.direction==="buy"?"Buy":"Sell";if(!s.amount)return w;if(s.direction==="buy"){let _=v?.amount;if(_&&new ne(_).lt(s.amount))return `${w} (Insufficient balance)`;let j=n?.symbol??"";a?.marketData?.priceInUsd?Number(a.marketData.priceInUsd):null;let K=x.data?.find(H=>H.address===N)?.marketData?.priceInUsd;if(K){let H=formatAmountUSD(new ne(s.amount).times(Number(K)));return `${w} ${s.amount} ${j} (${H})`}return `${w} ${s.amount} ${j}`}let R=h?.amount;return R&&new ne(R).lt(s.amount)?`${w} (Insufficient balance)`:w},[s.direction,s.amount,v,h,n,a,x.data,N]),ae=!s.amount||!d||!r,Q=x.isPending||m.isPending;return useMemo(()=>({chain:t,tokenAddress:r,nativeToken:n,tokenInfo:a,nativeBalance:v,tokenBalance:h,direction:s.direction,setDirection:s.setDirection,amount:s.amount,setAmount:s.setAmount,buyPreset:s.buyPreset,setBuyPreset:s.setBuyPreset,sellPreset:s.sellPreset,setSellPreset:s.setSellPreset,currentPresetValues:s.currentPresetValues,settings:s.settings,updateBuySettings:s.updateBuySettings,updateSellSettings:s.updateSellSettings,showSettings:T,handlePresetClick:O,swap:B,isSwapping:X,submitText:Z,isDisabled:ae,isLoading:Q}),[t,r,n,a,v,h,s,T,O,B,X,Z,ae,Q])}function le({value:e,onChange:t,nativeSymbol:r="SOL",nativeDecimals:o=9,className:i}){let s=useCallback(n=>t({...e,...n}),[e,t]);return jsxs("div",{className:cn$1("space-y-1.5",i),children:[jsx(kn,{value:e.slippage,onChange:n=>s({slippage:n})}),jsx(Rn,{value:e.priorityFee,onChange:n=>s({priorityFee:n}),symbol:r,decimals:o}),jsx(Mn,{value:e.tipFee,onChange:n=>s({tipFee:n}),symbol:r,decimals:o}),jsx(Un,{value:e.autoFee,onChange:n=>s({autoFee:n})}),e.autoFee&&jsx(Bn,{value:e.maxAutoFee,onChange:n=>s({maxAutoFee:n}),symbol:r}),jsx(_n,{value:e.antiMev,onChange:n=>s({antiMev:n})}),jsx(Ln,{value:e.customRPC,onChange:n=>s({customRPC:n})})]})}var ue={inputWrapper:"bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3 h-8 min-h-0 py-0",input:"text-xs"};function ve(e){return useCallback(t=>{typeof t=="number"&&e(isNaN(t)?null:t);},[e])}function kn({value:e,onChange:t}){let r=ve(t);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-xs text-neutral",children:"Slippage"}),jsx(NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:r,hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-xs text-neutral",children:"%"}),classNames:ue,"aria-label":"Slippage"})]})}function Rn({value:e,onChange:t,symbol:r,decimals:o}){let i=ve(t);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Priority Fee",jsx(Tooltip,{content:"Extra fee paid to validators to prioritize your transaction.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:i,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsx("span",{className:"text-xs text-neutral",children:r}),classNames:ue,"aria-label":"Priority Fee"})]})}function Mn({value:e,onChange:t,symbol:r,decimals:o}){let i=ve(t);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Tip Fee",jsx(Tooltip,{content:"Additional tip sent alongside the transaction (e.g. Jito tip).",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:i,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsx("span",{className:"text-xs text-neutral",children:r}),classNames:ue,"aria-label":"Tip Fee"})]})}function Un({value:e,onChange:t}){return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Auto Fee",jsx(Tooltip,{content:"Automatically estimate optimal fee based on network conditions.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(Switch,{isSelected:e,onValueChange:t,color:"primary",size:"sm","aria-label":"Auto Fee"})})]})}function Bn({value:e,onChange:t,symbol:r}){let o=ve(t);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-xs text-neutral",children:"Max Auto Fee"}),jsx(NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:o,hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-xs text-neutral",children:r}),classNames:ue,"aria-label":"Max Auto Fee"})]})}function _n({value:e,onChange:t}){return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Anti-MEV",jsx(Tooltip,{content:"MEV protection shields your transaction from sandwich attacks.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsxs(Tabs,{variant:"bordered",color:"primary",size:"sm",disableAnimation:true,radius:"lg",classNames:{tabList:"border-border border-1 gap-0",tab:"min-h-0 h-5 px-2"},selectedKey:e,onSelectionChange:t,"aria-label":"Anti-MEV",children:[jsx(Tab,{title:"Off"},"off"),jsx(Tab,{title:"Reduced"},"reduced"),jsx(Tab,{title:"Secure"},"secure")]})})]})}function Ln({value:e,onChange:t}){return jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsx("div",{className:"flex-none text-xs text-neutral",children:"Custom RPC"}),jsx("div",{className:"flex-auto",children:jsx(Input,{fullWidth:true,value:e??"",onValueChange:r=>t(r||null),classNames:ue,placeholder:"https://...","aria-label":"Custom RPC"})})]})}function ze({direction:e,onDirectionChange:t,amount:r,onAmountChange:o,customAmounts:i,customPercentages:s,onQuickAmountClick:n,onQuickPercentageClick:l,onCustomAmountsEdit:p,onCustomPercentagesEdit:u,tokenSymbol:d,nativeSymbol:g,nativeDecimals:f,nativeBalance:x,tokenBalance:a,amountConversion:m,preset:N,onPresetChange:v,presetValues:h,onPresetSettingsChange:T,showSettings:D,onPresetClick:C,submitText:O,isDisabled:A,isLoading:V,onSubmit:$,className:X,headerExtra:B}){return jsxs("div",{className:cn$1("flex-none sm:px-3 py-3 bg-content1 rounded-lg",X),children:[jsxs(Tabs,{fullWidth:true,size:"sm",selectedKey:e,onSelectionChange:t,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsx(Tab,{title:"Buy"},"buy"),jsx(Tab,{title:"Sell"},"sell")]}),jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsx(Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsx(Tab,{title:"Market"},"market")}),B]}),jsx("div",{className:"mt-2.5",children:e==="buy"?jsx(Hn,{amount:r,onAmountChange:o,customAmounts:i,onQuickAmountClick:n,onCustomAmountsEdit:p,nativeSymbol:g,nativeDecimals:f}):jsx(Gn,{amount:r,onAmountChange:o,customPercentages:s,onQuickPercentageClick:l,onCustomPercentagesEdit:u,tokenSymbol:d})}),jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsx("span",{children:"Balance:"}),jsx("span",{children:e==="buy"?x?`${x} ${g??""}`:"--":a?`${a} ${d??""}`:"--"})]}),m&&jsx("div",{className:"text-xs text-neutral",children:m})]}),jsx("div",{className:"mt-4",children:jsx(Xn,{values:h})}),jsx("div",{className:"mt-2",children:jsxs(Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${N}`,onSelectionChange:Z=>v(Number(Z)),disableAnimation:true,"aria-label":"Presets",children:[jsx(Tab,{title:"Preset 1",onClick:()=>C(0)},0),jsx(Tab,{title:"Preset 2",onClick:()=>C(1)},1),jsx(Tab,{title:"Preset 3",onClick:()=>C(2)},2)]})}),D&&jsx("div",{className:"mt-2.5",children:jsx(le,{value:h,onChange:T,nativeSymbol:g,nativeDecimals:f})}),jsx(Button,{fullWidth:true,size:"sm",color:e==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:A,isLoading:V,onPress:$,children:O})]})}function Hn({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:o,onCustomAmountsEdit:i,nativeSymbol:s,nativeDecimals:n}){let l=useCallback(p=>{typeof p=="number"&&t(isNaN(p)?void 0:p);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),formatOptions:{maximumFractionDigits:n??9},classNames:{inputWrapper:cn$1("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(ft,{values:r,onSelect:o,onEdit:i})]})}function Gn({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:o,onCustomPercentagesEdit:i,tokenSymbol:s}){let n=useCallback(l=>{typeof l=="number"&&t(isNaN(l)?void 0:l);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:n,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),classNames:{inputWrapper:cn$1("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(ft,{values:r,onSelect:o,onEdit:i,suffix:"%"})]})}function ft({values:e,onSelect:t,onEdit:r,suffix:o}){let[i,s]=useState(false),[n,l]=useState([]),p=useCallback(()=>{l([...e]),s(true);},[e]),u=useCallback(()=>{s(false),r(n);},[r,n]);return jsxs("div",{className:"flex gap-0.5",children:[jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,g)=>jsx("div",{className:cn$1("h-6 bg-content2 flex items-center justify-center",g===0&&"rounded-bl-lg"),children:i?jsx(NumberInput,{fullWidth:true,value:n[g]===null||n[g]===void 0?void 0:n[g],onChange:f=>{if(typeof f=="number"){let x=isNaN(f)?null:f;l(a=>{let m=[...a];return m[g]=x,m});}},min:0,hideStepper:true,classNames:{inputWrapper:cn$1("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",g===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[g]!=null&&t(e[g]),endContent:o?jsx("span",{className:"text-xs text-neutral",children:o}):null,children:e[g]??""})},g))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:i?jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:u,children:jsx(CheckIcon,{width:12,height:12})}):jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:p,children:jsx(EditIcon,{width:12,height:12})})})]})}function Xn({values:e}){return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:"Slippage",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(SlippageIcon,{width:14,height:14}),children:formatPercent((e.slippage??0)/100)})}),jsx(Tooltip,{content:"Priority Fee",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(ZapFastIcon,{width:14,height:14}),children:formatPrice(e.priorityFee??0)})}),jsx(Tooltip,{content:"Tip Fee",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(CoinsIcon,{width:14,height:14}),children:formatPrice(e.tipFee??0)})}),jsx(Tooltip,{content:"Anti-MEV",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxs(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxs(Fragment,{children:[(!e.antiMev||e.antiMev==="off")&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})})]})}function Jn({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o,settings:i,onSettingsChange:s,headerExtra:n,className:l}){return jsx(Be,{chain:e,tokenAddress:t,settings:i,onSettingsChange:s,children:jsx(Yn,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o,headerExtra:n,className:l})})}function Yn({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o,headerExtra:i,className:s}){let n=De({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o}),l=useCallback(a=>n.setAmount(a),[n]),p=useCallback(a=>{let m=n.tokenBalance?.amount;if(!m)return;let N=new ne(m).times(a).div(100).toNumber();n.setAmount(N);},[n]),u=useCallback(a=>{n.updateBuySettings({...n.settings.buy,customAmounts:a});},[n]),d=useCallback(a=>{n.updateSellSettings({...n.settings.sell,customPercentages:a});},[n]),g=useCallback(a=>{let m=n.direction==="buy",N=m?n.buyPreset:n.sellPreset;if(m){let v=n.settings.buy,h=[...v.presets];h[N]=a,n.updateBuySettings({...v,presets:h});}else {let v=n.settings.sell,h=[...v.presets];h[N]=a,n.updateSellSettings({...v,presets:h});}},[n]),f=useCallback(a=>{n.direction==="buy"?n.setBuyPreset(a):n.setSellPreset(a);},[n]),x=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(ze,{direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:p,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeSymbol:n.nativeToken?.symbol,nativeDecimals:n.nativeToken?.decimals,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:x,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:g,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:s,headerExtra:i})}function os({value:e,onChange:t,chain:r,className:o}){let i=useMemo(()=>getNativeToken(r),[r]),s=useCallbackRef(t),[n,l]=useState(e);useEffect(()=>{l(e);},[e]);let p=useCallback(u=>{l(u),s(u);},[s]);return jsx(le,{value:n,onChange:p,nativeSymbol:i?.symbol,nativeDecimals:i?.decimals,className:o})}function Ss({amount:e,onAmountChange:t,preset:r=0,onPresetChange:o,onPresetClick:i,variant:s="default",radius:n="full",size:l="sm",fullWidth:p=false,className:u}){let{nativeToken:d,settings:g}=Y(),f=useCallback(a=>{typeof a=="number"&&t(isNaN(a)?void 0:a);},[t]),x=useCallback(a=>{r===a?i?.(a):o?.(a);},[r,o,i]);return jsxs("div",{className:cn$1("flex items-center gap-1.5 overflow-hidden px-3",n==="full"&&"rounded-full",n==="lg"&&"rounded-lg",n==="md"&&"rounded-md",n==="sm"&&"rounded-sm",s==="bordered"&&"border-1 border-border",s==="default"&&"bg-content2",u),children:[jsx("div",{className:cn$1(p?"w-full":"w-20"),children:jsx(NumberInput,{fullWidth:true,value:e,onChange:f,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:d?.decimals??9},startContent:jsx(LightningIcon,{width:12,height:12,className:"text-neutral flex-none"}),endContent:d?jsx(Avatar,{className:"w-4 h-4 bg-transparent flex-none",name:d.symbol}):null,classNames:{inputWrapper:cn$1("bg-transparent data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","w-full min-w-0 min-h-0 p-0 rounded-none",l==="sm"&&"h-6",l==="lg"&&"h-8"),input:"text-sm"},placeholder:"0.0","aria-label":"Instant trade amount"})}),jsx("div",{className:"w-px bg-border h-4"}),jsx("div",{className:"flex items-center gap-1",children:Array.from({length:3}).map((a,m)=>jsx(Tooltip,{content:jsx(ws,{values:g.buy.presets[m]??E}),placement:"bottom",children:jsx(Button,{className:cn$1("w-auto min-w-0 h-auto min-h-0 px-1 py-0.5 text-xs bg-transparent rounded",{"text-primary hover:bg-primary/20":m===r,"text-neutral hover:bg-content3":m!==r}),disableRipple:true,onPress:()=>x(m),children:`P${m+1}`})},m))})]})}function ws({values:e}){return jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(SlippageIcon,{width:14,height:14}),jsx("span",{children:formatPercent((e.slippage??0)/100)})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(ZapFastIcon,{width:14,height:14}),jsx("span",{children:formatPrice(e.priorityFee??0)})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(CoinsIcon,{width:14,height:14}),jsx("span",{children:formatPrice(e.tipFee??0)})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[(!e.antiMev||e.antiMev==="off")&&jsx(ShieldOffIcon,{width:14,height:14}),e.antiMev==="reduced"&&jsx(ShieldIcon,{width:14,height:14}),e.antiMev==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14}),jsxs("span",{children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})]})]})}function Cs({className:e,children:t}){let{chain:r,tokenAddress:o,nativeToken:i,direction:s,amount:n,setAmount:l,currentPresetValues:p}=Y(),d=useWallets()[0]??null,g=useMemo(()=>getWrappedToken(r),[r]),{swap:f,isSwapping:x}=te(),a=!n||!d||!o,m=useCallback(async()=>{if(!n||!d||!o)return;let N=i??getNativeToken(r),v=N?.decimals??9,h=g?.address??N?.address??"",T=s==="buy",D=T?h:o,C=T?o:h,O=new ne(n).shiftedBy(v).decimalPlaces(0).toString(),A=p,V=new ne(A.priorityFee??E.priorityFee).shiftedBy(v).decimalPlaces(0).toString(),$=new ne(A.tipFee??E.tipFee).shiftedBy(v).decimalPlaces(0).toString();try{await f({chain:r,wallet:d,input:D,output:C,amount:O,slippage:A.slippage??E.slippage,priorityFee:V,tipFee:$,isAntiMev:A.antiMev!=="off"}),l(void 0);}catch{}},[n,d,o,i,g,r,s,p,f,l]);return jsx(Button,{fullWidth:true,size:"sm",color:s==="buy"?"primary":"secondary",className:e,disableRipple:true,isDisabled:a,isLoading:x,onPress:m,children:t??(s==="buy"?"Buy":"Sell")})}typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.3");var Fs="0.1.3";
2
- export{Sr as DEFAULT_BUY_AMOUNTS,Ue as DEFAULT_INSTANT_TRADE_SETTINGS,wr as DEFAULT_SELL_PERCENTAGES,E as DEFAULT_TRADE_PRESET,Ss as InstantTradeAmountInput,Cs as InstantTradeButton,Be as InstantTradeProvider,ze as InstantTradeUI,Jn as InstantTradeWidget,le as PresetFormUI,os as PresetFormWidget,Ee as SwapPreviewModal,ke as SwapUI,rn as SwapWidget,Y as useInstantTrade,De as useInstantTradeScript,te as useSwap,Ke as useSwapRoutePolling,Ie as useSwapScript,He as useTxConfirmation,Fs as version};//# sourceMappingURL=index.mjs.map
1
+ import {createContext,useState,useRef,useCallback,useMemo,useEffect,useContext}from'react';import {useDexClient,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,API,ChainNamespace}from'@liberfi.io/types';import {useWallets}from'@liberfi.io/wallet-connector';import {Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,Button,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,StyledModal,ScrollShadow,LightningIcon}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {getNativeToken,isSolanaChain,isBinanceChain,getWrappedToken,chainToNamespace,formatAmountUSD,formatPercent,formatPrice}from'@liberfi.io/utils';import le from'bignumber.js';import {useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';function zt(e){let t=atob(e),s=new Uint8Array(t.length);for(let o=0;o<t.length;o++)s[o]=t.charCodeAt(o);return s}function Qt(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function ie(e){let{client:t}=useDexClient(),[s,o]=useState(false),r=useRef(e);r.current=e;let a=useCallback(async n=>{let{wallet:l,chain:i,...d}=n;o(true);try{let m;try{m=await t.swapRoute({chain:i,userAddress:l.address,input:d.input,output:d.output,mode:d.mode??API.SwapMode.EXACT_IN,amount:d.amount,slippage:d.slippage,priorityFee:d.priorityFee,tipFee:d.tipFee,isAntiMev:d.isAntiMev,permit:d.permit,deadline:d.deadline});}catch(u){let x=u instanceof Error?u:new Error(String(u));throw r.current?.onError?.(x,"route"),x}let c;try{let u=zt(m.serializedTx);c=await l.signTransaction(u);}catch(u){let x=u instanceof Error?u:new Error(String(u));throw r.current?.onError?.(x,"sign"),x}let p;try{let u=Qt(c);p=await t.sendTx({chain:i,serializedTx:u});}catch(u){let x=u instanceof Error?u:new Error(String(u));throw r.current?.onError?.(x,"send"),x}let h={txHash:p.txHash,extra:p.extra};return r.current?.onSubmitted?.(h),h}finally{o(false);}},[t]);return useMemo(()=>({swap:a,isSwapping:s}),[a,s])}var Zt=12e3;function Ye(e,t){let s=t?.interval??Zt,o=t?.paused??false,r=useRef(t);r.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!o,l=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return useEffect(()=>{l.error&&r.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var tn=6e4;function et(e){let{client:t}=useDexClient(),[s,o]=useState(()=>new Map),r=useRef(e);r.current=e;let a=useCallback((d,m)=>{o(c=>{let p=c.get(d);if(!p||p.status===m)return c;let h=new Map(c);return h.set(d,{...p,status:m}),h});},[]),n=useCallback((d,m)=>{o(p=>{if(p.has(m))return p;let h=new Map(p);return h.set(m,{chain:d,txHash:m,status:"pending"}),h});let c=r.current?.timeout??tn;t.checkTxSuccess(d,m,c).then(p=>{if(p)a(m,"confirmed"),r.current?.onConfirmed?.(m);else {let h=new Error("Transaction failed on-chain");a(m,"failed"),r.current?.onFailed?.(m,h);}}).catch(p=>{let h=p instanceof Error?p:new Error(String(p));a(m,"failed"),r.current?.onFailed?.(m,h);});},[t,a]),l=useCallback(d=>{o(m=>{if(!m.has(d))return m;let c=new Map(m);return c.delete(d),c});},[]),i=useCallback(()=>{o(d=>d.size===0?d:new Map);},[]);return useMemo(()=>({track:n,clear:l,clearAll:i,transactions:s}),[n,l,i,s])}var an=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function on(e){return an.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var ln=1e4,un=15e3;function dn(e,t){if(e.length===0)return;let o=e[e.length-1].outputAmount;if(!o||o==="0")return "0";let r=o.padStart(t+1,"0"),a=r.slice(0,r.length-t)||"0",l=r.slice(r.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function Ee(e){let{chain:t}=e,s=useWallets(),o=on(t),r=useMemo(()=>s.find(v=>v.chainNamespace===o&&v.isConnected),[s,o]),a=r?.address??"",[n,l]=useState(e.from??""),[i,d]=useState(e.to??""),m=useRef(e.from),c=useRef(e.to);useEffect(()=>{e.from!==m.current&&(m.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==c.current&&(c.current=e.to,e.to&&d(e.to));},[e.to]);let p=useMemo(()=>[n,i].filter(Boolean),[n,i]),h=useTokensQuery({chain:t,addresses:p},{enabled:p.length>0,refetchInterval:ln}),u=useMemo(()=>h.data?.find(v=>v.address===n)??null,[h.data,n]),x=useMemo(()=>h.data?.find(v=>v.address===i)??null,[h.data,i]),P=useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:p},{enabled:!!a&&p.length>0,refetchInterval:un}),y=useMemo(()=>P.data?.find(v=>v.address===n)??null,[P.data,n]),w=useMemo(()=>P.data?.find(v=>v.address===i)??null,[P.data,i]),[g,F]=useState(void 0),D=useMemo(()=>{if(!g||u?.decimals==null)return;let v=g.split("."),B=v[0]??"0",Ce=(v[1]??"").slice(0,u.decimals).padEnd(u.decimals,"0");return (B+Ce).replace(/^0+/,"")||"0"},[g,u?.decimals]),L=useMemo(()=>{if(!g||!u?.marketData?.priceInUsd)return;let v=Number(u.marketData.priceInUsd),B=Number(g)*v;return Number.isFinite(B)?B.toString():void 0},[g,u?.marketData?.priceInUsd]),O=useCallback(()=>{if(!y)return;let v=Number(y.amount);if(!Number.isFinite(v)||v<=0)return;let B=v/2,xe=u?.decimals??9;F(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:xe}));},[y,u?.decimals]),R=useCallback(()=>{if(!y)return;let v=Number(y.amount);if(!Number.isFinite(v)||v<=0)return;let B=u?.decimals??9;F(v.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[y,u?.decimals]),I=useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:API.SwapMode.EXACT_IN,amount:D}),[t,a,n,i,D]),K=useRef(false),{route:C,isRouting:H,error:G}=Ye(I,{paused:K.current}),z=useMemo(()=>C&&x?dn(C.plans,x.decimals):void 0,[C,x]),Y=useMemo(()=>{if(!z||!x?.marketData?.priceInUsd)return;let v=Number(x.marketData.priceInUsd),B=Number(z)*v;return Number.isFinite(B)?B.toString():void 0},[z,x?.marketData?.priceInUsd]),{swap:S,isSwapping:k}=ie();K.current=k;let W=useRef(e.onComplete);W.current=e.onComplete;let{track:ee,transactions:X}=et({onConfirmed:v=>{W.current?.({success:true,txHash:v});},onFailed:v=>{W.current?.({success:false,txHash:v});}}),te=useMemo(()=>{if(X.size===0)return "idle";let v=Array.from(X.values());return v[v.length-1].status},[X]),Z=useCallback(async()=>{if(!(!r||!C||!n||!i||!D))try{let v=await S({chain:t,wallet:r,input:n,output:i,amount:D,mode:API.SwapMode.EXACT_IN});ee(t,v.txHash);}catch{}},[r,C,t,n,i,D,S,ee]),ne=h.isPending||P.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:d,fromToken:u,toToken:x,fromBalance:y,toBalance:w,amount:g,setAmount:F,setHalfAmount:O,setMaxAmount:R,amountInDecimals:D,amountInUsd:L,outputAmount:z,outputAmountInUsd:Y,route:C,isRouting:H,routeError:G,swap:Z,isSwapping:k,txStatus:te,isLoading:ne}),[n,i,u,x,y,w,g,O,R,D,L,z,Y,C,H,G,Z,k,te,ne])}function Re({isOpen:e,onOpenChange:t,fromToken:s,toToken:o,fromBalance:r,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:d,isRouting:m,routeError:c,onConfirm:p,isSwapping:h}){let{t:u}=useTranslation(),[x,P]=useState(false),y=useCallback(()=>P(g=>!g),[]),w=useMemo(()=>d?d.plans.map((g,F)=>({key:`plan-${F}`,name:g.name,input:g.input,inputAmount:g.inputAmount,output:g.output,outputAmount:g.outputAmount,feeQuote:g.feeQuote,feeAmount:g.feeAmount})):[],[d]);return jsx(Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children:u("trade.swap.preview")}),jsx(ModalBody,{children:jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.from")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsx(Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),r&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(Pn,{}),jsxs("span",{children:[Me(r.amount)," ",s?.symbol]})]})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Me(a)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",ot(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.estimatedReceive")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[o?.image&&jsx(Avatar,{size:"sm",src:o.image,name:o.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:o?.symbol??"\u2014"}),jsx("div",{className:"text-neutral text-[10px]",children:ye(o?.address)})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Me(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",ot(i)]})]})]})]}),x&&w.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:w.map(g=>jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:g.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[De(g.inputAmount)," ",ye(g.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[De(g.outputAmount)," ",ye(g.output)]})]})]}),g.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[De(g.feeAmount)," ",ye(g.feeQuote)]})]})]},g.key))})]}),w.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:x?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:y,children:u(x?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!d||!!c,isLoading:!d&&m||h,onPress:p,children:u("common.confirm")})})]})})}function Pn(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function ot(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Me(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function De(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function ye(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ue({fromToken:e,toToken:t,fromBalance:s,toBalance:o,amount:r,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:d,outputAmountInUsd:m,onFromTokenSelect:c,onToTokenSelect:p,route:h,isRouting:u,routeError:x,onPreview:P,isSwapping:y,className:w}){let{t:g}=useTranslation();return jsxs("div",{className:cn("px-4 pb-4 lg:pb-8",w),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:g("trade.swap.from")}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:r??"",onChange:F=>n(F.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsx(Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:e?e.symbol:g("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",mt(a)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(dt,{}),jsxs("span",{className:"text-neutral",children:[ct(s.amount)," ",s.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:g("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:g("common.max")})]})]}),x&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:x.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:g("trade.swap.to")}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:d??"",disabled:true,placeholder:"0",classNames:{inputWrapper:cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsx(Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:t?t.symbol:g("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",mt(m)]}),o&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(dt,{}),jsxs("span",{className:"text-neutral",children:[ct(o.amount)," ",o.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&u,onPress:P,children:g(y?"trade.swap.swapping":u?"trade.swap.findingRoute":"trade.swap.swap")})]})}function dt(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function mt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function ct(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function An({chain:e,from:t,to:s,onComplete:o,className:r}){let a=Ee({chain:e,from:t,to:s,onComplete:o}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:d}=useDisclosure(),m=useCallback(async()=>{await a.swap(),d();},[a,d]);return jsxs(Fragment,{children:[jsx(Ue,{fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,toBalance:a.toBalance,amount:a.amount,amountInUsd:a.amountInUsd,onAmountChange:a.setAmount,onHalfAmount:a.setHalfAmount,onMaxAmount:a.setMaxAmount,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,onFromTokenSelect:a.setFromTokenAddress,onToTokenSelect:a.setToTokenAddress,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onPreview:l,isSwapping:a.isSwapping,className:r}),jsx(Re,{isOpen:n,onOpenChange:i,fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,inputAmount:a.amount,inputAmountInUsd:a.amountInUsd,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onConfirm:m,isSwapping:a.isSwapping})]})}var ft={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},gt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},xt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},En={SOL:[.01,.1,1,10],ETH:[.01,.02,.5,1],BNB:[.025,.05,.1,.25],USDC:[25,50,100,200],USDT:[25,50,100,200]},Mn=[1,10,25,50];function ht(e){return En[e]??Mn}var bt=[10,25,50,100];function re(e){let t=getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let s=t.symbol;return isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return isSolanaChain(e)?ft:isBinanceChain(e)?xt:gt}function St(e){let t=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:ht(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...bt],presets:[{...t},{...t},{...t}]}}}var Un=St("900900900");function Pt(e){return `liberfi.instant-trade.settings.${e}`}function Bn(e,t){try{let s=localStorage.getItem(Pt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function _n(e,t){try{localStorage.setItem(Pt(e),JSON.stringify(t));}catch{}}var Nt=createContext(null);function ae(){let e=useContext(Nt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function _e({chain:e,tokenAddress:t,settings:s,onSettingsChange:o,children:r}){let a=useMemo(()=>getNativeToken(e),[e]),n=s!==void 0,l=useMemo(()=>St(e),[e]),[i,d]=useState(()=>n?l:Bn(e,l)),m=n?s:i,c=useCallback(I=>{n?o?.(I):(d(I),_n(String(e),I));},[n,o,e]),p=useCallback(I=>c({...m,buy:I}),[m,c]),h=useCallback(I=>c({...m,sell:I}),[m,c]),[u,x]=useState("buy"),[P,y]=useState(),[w,g]=useState(0),[F,D]=useState(0),L=useMemo(()=>V(e),[e]),O=useMemo(()=>{let I=u==="buy"?w:F;return (u==="buy"?m.buy.presets:m.sell.presets)[I]??L},[u,w,F,m,L]),R=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:u,setDirection:x,amount:P,setAmount:y,buyPreset:w,setBuyPreset:g,sellPreset:F,setSellPreset:D,settings:m,updateBuySettings:p,updateSellSettings:h,currentPresetValues:O}),[e,t,a,u,P,w,F,m,p,h,O]);return jsx(Nt.Provider,{value:R,children:r})}var Xn=15e3,Zn=1e4;function Oe(e){let{chain:t,tokenAddress:s,onSwapSubmitted:o,onSwapError:r}=e,{t:a}=useTranslation(),n=ae(),l=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),d=useWallets(),m=chainToNamespace(t),c=useMemo(()=>d.find(S=>S.chainNamespace===m&&S.isConnected),[d,m]),p=c?.address??"",h=useMemo(()=>{let S=[s];return l&&S.push(l.address),i&&S.push(i.address),S.filter(Boolean)},[s,l,i]),u=useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Zn}),x=useMemo(()=>u.data?.find(S=>S.address===s)??null,[u.data,s]),P=useWalletPortfoliosByTokensQuery({chain:t,address:p,tokenAddresses:h},{enabled:!!p&&h.length>0,refetchInterval:Xn}),y=l?.address??i?.address??"",w=useMemo(()=>P.data?.find(S=>S.address===y)??null,[P.data,y]),g=useMemo(()=>P.data?.find(S=>S.address===s)??null,[P.data,s]),[F,D]=useState(false),L=useRef(null),O=useCallback(S=>{let k=L.current;L.current=S,D(W=>k===null||k!==S?true:!W);},[]),R=useRef(o);R.current=o;let I=useRef(r);I.current=r;let{swap:K,isSwapping:C}=ie({onSubmitted:S=>R.current?.(S),onError:(S,k)=>I.current?.(S,k)}),H=useCallback(async()=>{if(!n.amount||!c||!s)return;let S=l?.decimals??9,k=i?.address??l?.address??"",W=n.direction==="buy",ee=W?k:s,X=W?s:k,te=W?S:x?.decimals??9,Z=new le(n.amount).shiftedBy(te).decimalPlaces(0).toString(),ne=n.currentPresetValues,v=V(t),B=ne.slippage??v.slippage??1,xe=ne.antiMev!=="off",Ce=isSolanaChain(t)?{priorityFee:new le(ne.priorityFee??v.priorityFee??0).shiftedBy(S).decimalPlaces(0).toString(),tipFee:new le(ne.tipFee??v.tipFee??0).shiftedBy(S).decimalPlaces(0).toString(),isAntiMev:xe}:{};try{await K({chain:t,wallet:c,input:ee,output:X,amount:Z,slippage:B,...Ce}),n.setAmount(void 0);}catch{}},[n,c,s,l,i,x,t,K]),G=useMemo(()=>{let S=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return S;let k=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ee=w?.amount;if(ee&&new le(ee).lt(n.amount))return `${S}${k}`;let X=l?.symbol??"",te=u.data?.find(Z=>Z.address===y)?.marketData?.priceInUsd;if(te){let Z=formatAmountUSD(new le(n.amount).times(Number(te)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:X,usd:Z})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:X})}let W=g?.amount;return W&&new le(W).lt(n.amount)?`${S}${k}`:S},[a,n.direction,n.amount,w,g,l,u.data,y]),z=!n.amount||!c||!s,Y=u.isPending||P.isPending;return useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:x,nativeBalance:w,tokenBalance:g,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:F,handlePresetClick:O,swap:H,isSwapping:C,submitText:G,isDisabled:z,isLoading:Y}),[t,s,l,x,w,g,n,F,O,H,C,G,z,Y])}function fe({value:e,onChange:t,chain:s,disableAnimation:o,className:r}){let a=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>re(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn("space-y-4",r),children:[jsx(os,{value:e.slippage,onChange:i=>a({slippage:i})}),jsx(is,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(ls,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx(us,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:o}),e.autoFee&&jsx(ds,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(ms,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:o}),n.showCustomRPC&&jsx(cs,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function os({value:e,onChange:t}){let{t:s}=useTranslation(),o=s("trade.preset.slippage");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children:o}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:r=>t(isNaN(r)?null:r),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":o})]})}function is({value:e,onChange:t,feeType:s,symbol:o,decimals:r}){let{t:a}=useTranslation(),n=a(`trade.preset.${s}`),l=a(`trade.preset.${s}.tooltip`);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsx(StyledTooltip,{content:l,children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsx("span",{className:"text-sm text-neutral",children:o}),"aria-label":n})]})}function ls({value:e,onChange:t,symbol:s,decimals:o}){let{t:r}=useTranslation(),a=r("trade.preset.tipFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsx(StyledTooltip,{content:r("trade.preset.tipFee.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function us({value:e,onChange:t,disableAnimation:s}){let{t:o}=useTranslation(),r=o("trade.preset.autoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[r,jsx(StyledTooltip,{content:o("trade.preset.autoFee.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":r,disableAnimation:s})})]})}function ds({value:e,onChange:t,symbol:s}){let{t:o}=useTranslation(),r=o("trade.preset.maxAutoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children:r}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":r})]})}function ms({value:e,onChange:t,options:s,disableAnimation:o}){let{t:r}=useTranslation(),a=r("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),l=useMemo(()=>({off:{title:r("trade.preset.antiMev.off"),desc:r("trade.preset.antiMev.off.desc")},reduced:{title:r("trade.preset.antiMev.reduced"),desc:r("trade.preset.antiMev.reduced.desc")},secure:{title:r("trade.preset.antiMev.secure"),desc:r("trade.preset.antiMev.secure.desc")}}),[r]);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsx(StyledTooltip,{content:r("trade.preset.antiMev.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledTabs,{variant:"bordered",color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:o,"aria-label":a,children:s.map(i=>{let d=n[i],m=l[i];return jsx(Tab,{title:jsx(StyledTooltip,{content:jsxs("div",{className:"text-xs",children:[jsx("div",{className:"font-medium text-foreground",children:m.title}),jsx("div",{className:"mt-0.5",children:m.desc})]}),children:jsx("span",{className:"flex items-center justify-center",children:jsx(d,{width:18,height:18})})})},i)})})})]})}function cs({value:e,onChange:t}){let{t:s}=useTranslation(),o=s("trade.preset.customRpc");return jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsx("div",{className:"flex-none text-sm text-neutral",children:o}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:r=>t(r||null),placeholder:"https://...","aria-label":o})})]})}function Ke({chain:e,direction:t,onDirectionChange:s,amount:o,onAmountChange:r,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:d,onCustomPercentagesEdit:m,tokenSymbol:c,nativeBalance:p,tokenBalance:h,amountConversion:u,preset:x,onPresetChange:P,presetValues:y,onPresetSettingsChange:w,showSettings:g,onPresetClick:F,submitText:D,isDisabled:L,isLoading:O,onSubmit:R,className:I,headerExtra:K}){let{t:C}=useTranslation(),H=useMemo(()=>getNativeToken(e),[e]),G=H?.symbol,z=H?.decimals??9;return jsxs("div",{className:cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",I),children:[jsxs(Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsx(Tab,{title:C("common.buy")},"buy"),jsx(Tab,{title:C("common.sell")},"sell")]}),jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsx(Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsx(Tab,{title:C("trade.market")},"market")}),K]}),jsx("div",{className:"mt-2.5",children:t==="buy"?jsx(Ns,{amount:o,onAmountChange:r,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:d,nativeSymbol:G,nativeDecimals:z,amountLabel:C("trade.amount")}):jsx(Ts,{amount:o,onAmountChange:r,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:m,tokenSymbol:c,amountLabel:C("trade.amount")})}),jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsx("span",{children:C("trade.balance")}),jsx("span",{children:t==="buy"?p?`${p} ${G??""}`:"--":h?`${h} ${c??""}`:"--"})]}),u&&jsx("div",{className:"text-xs text-neutral",children:u})]}),jsx("div",{className:"mt-4",children:jsx(Cs,{values:y,chain:e})}),jsx("div",{className:"mt-2",children:jsxs(Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${x}`,onSelectionChange:Y=>P(Number(Y)),disableAnimation:true,"aria-label":C("trade.preset.presets"),children:[jsx(Tab,{title:C("trade.preset.label",{n:1}),onClick:()=>F(0)},0),jsx(Tab,{title:C("trade.preset.label",{n:2}),onClick:()=>F(1)},1),jsx(Tab,{title:C("trade.preset.label",{n:3}),onClick:()=>F(2)},2)]})}),g&&jsx("div",{className:"mt-2.5",children:jsx(fe,{value:y,onChange:w,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:L,isLoading:O,onPress:R,children:D})]})}function Ns({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:o,onCustomAmountsEdit:r,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=useCallback(d=>{typeof d=="number"&&t(isNaN(d)?void 0:d);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:l}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Et,{values:s,onSelect:o,onEdit:r})]})}function Ts({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:o,onCustomPercentagesEdit:r,tokenSymbol:a,amountLabel:n}){let l=useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Et,{values:s,onSelect:o,onEdit:r,suffix:"%"})]})}function Et({values:e,onSelect:t,onEdit:s,suffix:o}){let[r,a]=useState(false),[n,l]=useState([]),i=useCallback(()=>{l([...e]),a(true);},[e]),d=useCallback(()=>{a(false),s(n);},[s,n]);return jsxs("div",{className:"flex gap-0.5",children:[jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((m,c)=>jsx("div",{className:cn("h-6 bg-content2 flex items-center justify-center",c===0&&"rounded-bl-lg"),children:r?jsx(NumberInput,{fullWidth:true,value:n[c]===null||n[c]===void 0?void 0:n[c],onChange:p=>{if(typeof p=="number"){let h=isNaN(p)?null:p;l(u=>{let x=[...u];return x[c]=h,x});}},min:0,hideStepper:true,classNames:{inputWrapper:cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",c===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[c]!=null&&t(e[c]),endContent:o?jsx("span",{className:"text-xs text-neutral",children:o}):null,children:e[c]??""})},c))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:r?jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:d,children:jsx(CheckIcon,{width:12,height:12})}):jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsx(EditIcon,{width:12,height:12})})})]})}function Cs({values:e,chain:t}){let{t:s}=useTranslation(),o=useMemo(()=>re(t),[t]),r=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(SlippageIcon,{width:14,height:14}),children:formatPercent((e.slippage??0)/100)})}),jsx(Tooltip,{content:s(`trade.preset.${o.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(ZapFastIcon,{width:14,height:14}),children:formatPrice(e.priorityFee??0)})}),o.showTipFee&&jsx(Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(CoinsIcon,{width:14,height:14}),children:formatPrice(e.tipFee??0)})}),jsx(Tooltip,{content:s("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxs(Fragment,{children:[r==="off"&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),r==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),r==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${r}`)})})]})}function Is({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o,settings:r,onSettingsChange:a,headerExtra:n,className:l}){return jsx(_e,{chain:e,tokenAddress:t,settings:r,onSettingsChange:a,children:jsx(Es,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o,headerExtra:n,className:l})})}function Es({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o,headerExtra:r,className:a}){let n=Oe({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o}),l=useCallback(u=>n.setAmount(u),[n]),i=useCallback(u=>{let x=n.tokenBalance?.amount;if(!x)return;let P=new le(x).times(u).div(100).toNumber();n.setAmount(P);},[n]),d=useCallback(u=>{n.updateBuySettings({...n.settings.buy,customAmounts:u});},[n]),m=useCallback(u=>{n.updateSellSettings({...n.settings.sell,customPercentages:u});},[n]),c=useCallback(u=>{let x=n.direction==="buy",P=x?n.buyPreset:n.sellPreset;if(x){let y=n.settings.buy,w=[...y.presets];w[P]=u,n.updateBuySettings({...y,presets:w});}else {let y=n.settings.sell,w=[...y.presets];w[P]=u,n.updateSellSettings({...y,presets:w});}},[n]),p=useCallback(u=>{n.direction==="buy"?n.setBuyPreset(u):n.setSellPreset(u);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(Ke,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:d,onCustomPercentagesEdit:m,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:p,presetValues:n.currentPresetValues,onPresetSettingsChange:c,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:a,headerExtra:r})}var Rs="liberfi.";function ks(e,t,s,o){return `${e}preset.${t}.${s}.${o}`}function Us(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),o=e.slice(t+1),[r,a,n]=o.split(".");return {prefix:s,chain:r,direction:a,index:Number(n)}}function Qe(e,t,s,o=Rs){return `${o}:${e}.${t}.${s}`}var je=atomFamily(e=>{let{prefix:t,chain:s,direction:o,index:r}=Us(e);return atomWithStorage(ks(t,String(s),o,r),V(s),void 0,{getOnInit:true})});function Ge({chain:e,presetIndex:t=0,storageKeyPrefix:s,onChange:o,disableAnimation:r,className:a}){let{t:n}=useTranslation(),[l,i]=useState("buy"),[d,m]=useAtom(je(Qe(e,l,t,s))),c=useCallback(p=>{m(p),o?.(l,p);},[m,o,l]);return jsxs("div",{className:cn("space-y-3",a),children:[jsxs(StyledTabs,{variant:"bordered",radius:"lg",color:"default",fullWidth:true,selectedKey:l,onSelectionChange:p=>i(p),"aria-label":"Buy / Sell",children:[jsx(Tab,{title:n("common.buy")},"buy"),jsx(Tab,{title:n("common.sell")},"sell")]}),jsx(fe,{value:d,onChange:c,chain:e,disableAnimation:r})]})}var Gs=3;function Ze({chain:e,storageKeyPrefix:t,onChange:s,disableAnimation:o,className:r}){let{t:a}=useTranslation(),[n,l]=useState(0),i=useCallback((d,m)=>{s?.(n,d,m);},[s,n]);return jsxs("div",{className:cn("space-y-3",r),children:[jsx(StyledTabs,{variant:"bordered",radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:d=>l(Number(d)),disableAnimation:o,"aria-label":a("trade.preset.presets"),children:Array.from({length:Gs},(d,m)=>jsx(Tab,{title:a("trade.preset.label",{n:m+1})},String(m)))}),jsx(Ge,{chain:e,presetIndex:n,storageKeyPrefix:t,onChange:i,disableAnimation:o})]})}var or="preset";function ir({id:e=or}){return jsx(AsyncModal,{id:e,children:t=>jsx(lr,{...t})})}function lr({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:o}=useTranslation(),{chains:r,defaultChain:a,storageKeyPrefix:n,onChange:l}=e,[i,d]=useState(a??r[0]),m=useCallback((c,p,h)=>{l?.(i,c,p,h);},[l,i]);return jsx(StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxs(ModalContent,{children:[jsx(ModalHeader,{children:jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:o("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:r,chain:i,onSelectChain:d})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(Ze,{chain:i,storageKeyPrefix:n,onChange:m})})})]})})}function wr({amount:e,onAmountChange:t,preset:s=0,onPresetChange:o,onPresetClick:r,variant:a="default",radius:n="full",size:l="sm",fullWidth:i=false,className:d}){let{t:m}=useTranslation(),{chain:c,nativeToken:p,settings:h}=ae(),u=useMemo(()=>V(c),[c]),x=useCallback(y=>{typeof y=="number"&&t(isNaN(y)?void 0:y);},[t]),P=useCallback(y=>{s===y?r?.(y):o?.(y);},[s,o,r]);return jsxs("div",{className:cn("flex items-center gap-1.5 overflow-hidden px-3",n==="full"&&"rounded-full",n==="lg"&&"rounded-lg",n==="md"&&"rounded-md",n==="sm"&&"rounded-sm",a==="bordered"&&"border-1 border-border",a==="default"&&"bg-content2",d),children:[jsx("div",{className:cn(i?"w-full":"w-20"),children:jsx(NumberInput,{fullWidth:true,value:e,onChange:x,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:p?.decimals??9},startContent:jsx(LightningIcon,{width:12,height:12,className:"text-neutral flex-none"}),endContent:p?jsx(Avatar,{className:"w-4 h-4 bg-transparent flex-none",name:p.symbol}):null,classNames:{inputWrapper:cn("bg-transparent data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","w-full min-w-0 min-h-0 p-0 rounded-none",l==="sm"&&"h-6",l==="lg"&&"h-8"),input:"text-sm"},placeholder:"0.0","aria-label":m("trade.instantTradeAmount")})}),jsx("div",{className:"w-px bg-border h-4"}),jsx("div",{className:"flex items-center gap-1",children:Array.from({length:3}).map((y,w)=>jsx(Tooltip,{content:jsx(Sr,{values:h.buy.presets[w]??u,chain:c}),placement:"bottom",children:jsx(Button,{className:cn("w-auto min-w-0 h-auto min-h-0 px-1 py-0.5 text-xs bg-transparent rounded",{"text-primary hover:bg-primary/20":w===s,"text-neutral hover:bg-content3":w!==s}),disableRipple:true,onPress:()=>P(w),children:m("trade.preset.short",{n:w+1})})},w))})]})}function Sr({values:e,chain:t}){let{t:s}=useTranslation(),o=useMemo(()=>re(t),[t]),r=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(SlippageIcon,{width:14,height:14}),jsx("span",{children:formatPercent((e.slippage??0)/100)})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(ZapFastIcon,{width:14,height:14}),jsxs("span",{children:[formatPrice(e.priorityFee??0)," ",o.feeUnit]})]}),o.showTipFee&&jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(CoinsIcon,{width:14,height:14}),jsxs("span",{children:[formatPrice(e.tipFee??0)," ",o.tipFeeUnit]})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[r==="off"&&jsx(ShieldOffIcon,{width:14,height:14}),r==="reduced"&&jsx(ShieldIcon,{width:14,height:14}),r==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14}),jsx("span",{children:s(`trade.preset.antiMev.${r}`)})]})]})}function Er({className:e,children:t}){let{t:s}=useTranslation(),{chain:o,tokenAddress:r,nativeToken:a,direction:n,amount:l,setAmount:i,currentPresetValues:d}=ae(),c=useWallets()[0]??null,p=useMemo(()=>getWrappedToken(o),[o]),{swap:h,isSwapping:u}=ie(),x=!l||!c||!r,P=useCallback(async()=>{if(!l||!c||!r)return;let y=a??getNativeToken(o),w=y?.decimals??9,g=p?.address??y?.address??"",F=n==="buy",D=F?g:r,L=F?r:g,O=new le(l).shiftedBy(w).decimalPlaces(0).toString(),R=d,I=V(o),K=new le(R.priorityFee??I.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),C=new le(R.tipFee??I.tipFee??0).shiftedBy(w).decimalPlaces(0).toString();try{await h({chain:o,wallet:c,input:D,output:L,amount:O,slippage:R.slippage??I.slippage??1,priorityFee:K,tipFee:C,isAntiMev:R.antiMev!=="off"}),i(void 0);}catch{}},[l,c,r,a,p,o,n,d,h,i]);return jsx(Button,{fullWidth:true,size:"sm",color:n==="buy"?"primary":"secondary",className:e,disableRipple:true,isDisabled:x,isLoading:u,onPress:P,children:t??s(n==="buy"?"common.buy":"common.sell")})}typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.5");var Dr="0.1.5";
2
+ export{xt as DEFAULT_BSC_TRADE_PRESET,gt as DEFAULT_EVM_TRADE_PRESET,Un as DEFAULT_INSTANT_TRADE_SETTINGS,bt as DEFAULT_SELL_PERCENTAGES,ft as DEFAULT_SOL_TRADE_PRESET,wr as InstantTradeAmountInput,Er as InstantTradeButton,_e as InstantTradeProvider,Ke as InstantTradeUI,Is as InstantTradeWidget,Ze as MultiPresetFormWidget,ir as PresetFormModal,fe as PresetFormUI,Ge as PresetFormWidget,Re as SwapPreviewModal,Ue as SwapUI,An as SwapWidget,re as getChainPresetFeatures,ht as getDefaultBuyAmounts,V as getDefaultPresetForChain,je as presetAtomFamily,Qe as presetKey,ae as useInstantTrade,Oe as useInstantTradeScript,ie as useSwap,Ye as useSwapRoutePolling,Ee as useSwapScript,et as useTxConfirmation,Dr as version};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.map