@liberfi.io/ui-trade 2.0.12 → 2.0.14
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/README.md +29 -29
- package/dist/index.d.mts +7 -16
- package/dist/index.d.ts +7 -16
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +17 -17
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {isSolanaChain,isBinanceChain,getNativeToken,getWrappedToken,chainToNamespace,formatAmountUSD,formatPercent,formatPrice}from'@liberfi.io/utils';import {createContext,memo,useState,useRef,useCallback,useMemo,useContext,useEffect}from'react';import {useDexClient,useLatestBlockCacheReader,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery,useLatestBlockQuery}from'@liberfi.io/react';import {Chain,API,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,Spinner,LightningIcon,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn as cn$1,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,useScreen,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import de from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var cn="liberfi.",fn={amount:void 0,preset:0};function gn(e,t,r,s){return `${e}instant-trade.${t}.${r}.${s}`}function xn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[o,a,n]=s.split(".");return {prefix:r,id:o,chain:a,tokenAddress:n}}function G(e,t,r,s=cn){return `${s}:${e}.${t}.${r}`}var j=atomFamily(e=>{let{prefix:t,id:r,chain:s,tokenAddress:o}=xn(e);return atomWithStorage(gn(t,r,String(s),o),fn,void 0,{getOnInit:true})});function za({id:e,chain:t,tokenAddress:r,storageKeyPrefix:s}){return useAtomValue(j(G(e,t,r,s)))}var ge=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},yn={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]},bn=[1,10,25,50];function yt(e){return yn[e]??bn}var bt=[10,25,50,100];function le(e){let t=getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let r=t.symbol;return isSolanaChain(e)?{nativeSymbol:r,feeType:"priorityFee",feeUnit:r,feeDecimals:9,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return isSolanaChain(e)?gt:isBinanceChain(e)?ht:xt}var wn="liberfi.";function Tn(e,t,r,s){return `${e}preset.${t}.${r}.${s}`}function Nn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[o,a,n]=s.split(".");return {prefix:r,chain:o,direction:a,index:Number(n)}}function L(e,t,r,s=wn){return `${s}:${e}.${t}.${r}`}var _=atomFamily(e=>{let{prefix:t,chain:r,direction:s,index:o}=Nn(e);return atomWithStorage(Tn(t,String(r),s,o),V(r),void 0,{getOnInit:true})});function so({chain:e,direction:t,presetIndex:r=0,storageKeyPrefix:s}){return useAtomValue(_(L(e,t,r,s)))}var An=150,Fn=12e3,vt=60,wt=40;function Re(e,t,r,s){if(!isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!r.data||Date.now()-r.dataUpdatedAt>Fn)throw new ge("Latest Solana block data is stale. Please refresh the quote.");let o=r.data.lastValidBlockHeight-An;if(t.lastValidBlockHeight-o<s)throw new ge("Swap route is close to blockhash expiry. Please refresh the quote.")}function Dn(e){let t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}function On(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function ne(e){let{client:t}=useDexClient(),[r,s]=useState(false),o=useRef(e);o.current=e;let a=useLatestBlockCacheReader({chain:Chain.SOLANA}),n=useCallback(async l=>{let{wallet:i,chain:u,...m}=l;s(true);try{let d;try{d=await t.swapRoute({chain:u,userAddress:i.address,input:m.input,output:m.output,mode:m.mode??API.SwapMode.EXACT_IN,amount:m.amount,slippage:m.slippage,priorityFee:m.priorityFee,tipFee:m.tipFee,isAntiMev:m.isAntiMev,permit:m.permit,deadline:m.deadline});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"route"),x}try{Re(u,d,a(),vt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let g;try{let c=Dn(d.serializedTx);g=await i.signTransaction(c);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"sign"),x}try{Re(u,d,a(),wt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let h;try{let c=On(g);h=await t.sendTx({chain:u,serializedTx:c});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"send"),x}let p={txHash:h.txHash,extra:h.extra};return o.current?.onSubmitted?.(p),p}finally{s(false);}},[t,a]);return useMemo(()=>({swap:n,isSwapping:r}),[n,r])}var Hn=12e3;function Tt(e,t){let r=t?.interval??Hn,s=t?.paused??false,o=useRef(t);o.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!s,l=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return useEffect(()=>{l.error&&o.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var qn=6e4;function Nt(e){let{client:t}=useDexClient(),[r,s]=useState(()=>new Map),o=useRef(e);o.current=e;let a=useCallback((u,m)=>{s(d=>{let g=d.get(u);if(!g||g.status===m)return d;let h=new Map(d);return h.set(u,{...g,status:m}),h});},[]),n=useCallback((u,m)=>{s(g=>{if(g.has(m))return g;let h=new Map(g);return h.set(m,{chain:u,txHash:m,status:"pending"}),h});let d=o.current?.timeout??qn;t.checkTxSuccess(u,m,d).then(g=>{if(g)a(m,"confirmed"),o.current?.onConfirmed?.(m);else {let h=new Error("Transaction failed on-chain");a(m,"failed"),o.current?.onFailed?.(m,h);}}).catch(g=>{let h=g instanceof Error?g:new Error(String(g));a(m,"failed"),o.current?.onFailed?.(m,h);});},[t,a]),l=useCallback(u=>{s(m=>{if(!m.has(u))return m;let d=new Map(m);return d.delete(u),d});},[]),i=useCallback(()=>{s(u=>u.size===0?u:new Map);},[]);return useMemo(()=>({track:n,clear:l,clearAll:i,transactions:r}),[n,l,i,r])}var Jn=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function er(e){return Jn.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var tr=1e4,nr=15e3;function rr(e,t){if(e.length===0)return;let s=e[e.length-1].outputAmount;if(!s||s==="0")return "0";let o=s.padStart(t+1,"0"),a=o.slice(0,o.length-t)||"0",l=o.slice(o.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function Le(e){let{chain:t}=e,r=useWallets(),s=er(t),o=useMemo(()=>r.find(S=>S.chainNamespace===s&&S.isConnected),[r,s]),a=o?.address??"",[n,l]=useState(e.from??""),[i,u]=useState(e.to??""),m=useRef(e.from),d=useRef(e.to);useEffect(()=>{e.from!==m.current&&(m.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==d.current&&(d.current=e.to,e.to&&u(e.to));},[e.to]);let g=useMemo(()=>[n,i].filter(Boolean),[n,i]),h=useTokensQuery({chain:t,addresses:g},{enabled:g.length>0,refetchInterval:tr}),p=useMemo(()=>h.data?.find(S=>S.address===n)??null,[h.data,n]),c=useMemo(()=>h.data?.find(S=>S.address===i)??null,[h.data,i]),x=useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:g},{enabled:!!a&&g.length>0,refetchInterval:nr}),P=useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),v=useMemo(()=>x.data?.find(S=>S.address===i)??null,[x.data,i]),[f,A]=useState(void 0),R=useMemo(()=>{if(!f||p?.decimals==null)return;let S=f.split("."),k=S[0]??"0",Me=(S[1]??"").slice(0,p.decimals).padEnd(p.decimals,"0");return (k+Me).replace(/^0+/,"")||"0"},[f,p?.decimals]),$=useMemo(()=>{if(!f||!p?.marketData?.priceInUsd)return;let S=Number(p.marketData.priceInUsd),k=Number(f)*S;return Number.isFinite(k)?k.toString():void 0},[f,p?.marketData?.priceInUsd]),H=useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let k=S/2,Pe=p?.decimals??9;A(k.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:Pe}));},[P,p?.decimals]),z=useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let k=p?.decimals??9;A(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:k}));},[P,p?.decimals]),E=useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:API.SwapMode.EXACT_IN,amount:R}),[t,a,n,i,R]),Z=useRef(false),{route:F,isRouting:Y,error:J}=Tt(E,{paused:Z.current}),Q=useMemo(()=>F&&c?rr(F.plans,c.decimals):void 0,[F,c]),se=useMemo(()=>{if(!Q||!c?.marketData?.priceInUsd)return;let S=Number(c.marketData.priceInUsd),k=Number(Q)*S;return Number.isFinite(k)?k.toString():void 0},[Q,c?.marketData?.priceInUsd]),{swap:w,isSwapping:U}=ne();Z.current=U;let W=useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:S=>{W.current?.({success:true,txHash:S});},onFailed:S=>{W.current?.({success:false,txHash:S});}}),oe=useMemo(()=>{if(ee.size===0)return "idle";let S=Array.from(ee.values());return S[S.length-1].status},[ee]),te=useCallback(async()=>{if(!(!o||!F||!n||!i||!R))try{let S=await w({chain:t,wallet:o,input:n,output:i,amount:R,mode:API.SwapMode.EXACT_IN});ae(t,S.txHash);}catch{}},[o,F,t,n,i,R,w,ae]),ie=h.isPending||x.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:p,toToken:c,fromBalance:P,toBalance:v,amount:f,setAmount:A,setHalfAmount:H,setMaxAmount:z,amountInDecimals:R,amountInUsd:$,outputAmount:Q,outputAmountInUsd:se,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:U,txStatus:oe,isLoading:ie}),[n,i,p,c,P,v,f,H,z,R,$,Q,se,F,Y,J,te,U,oe,ie])}function Oe({isOpen:e,onOpenChange:t,fromToken:r,toToken:s,fromBalance:o,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:m,routeError:d,onConfirm:g,isSwapping:h}){let{t:p}=useTranslation(),[c,x]=useState(false),P=useCallback(()=>x(f=>!f),[]),v=useMemo(()=>u?u.plans.map((f,A)=>({key:`plan-${A}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.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:p("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:p("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:[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"}),o&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(xr,{}),jsxs("span",{children:[_e(o.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:_e(a)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:p("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:[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"}),jsx("div",{className:"text-neutral text-[10px]",children:Te(s?.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:_e(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(i)]})]})]})]}),c&&v.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:p("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:v.map(f=>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:p("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:p("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[De(f.inputAmount)," ",Te(f.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[De(f.outputAmount)," ",Te(f.output)]})]})]}),f.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:p("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[De(f.feeAmount)," ",Te(f.feeQuote)]})]})]},f.key))})]}),v.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:c?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:p(c?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!d,isLoading:!u&&m||h,onPress:g,children:p("common.confirm")})})]})})}function xr(){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 _e(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 Te(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ve({fromToken:e,toToken:t,fromBalance:r,toBalance:s,amount:o,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:m,onFromTokenSelect:d,onToTokenSelect:g,route:h,isRouting:p,routeError:c,onPreview:x,isSwapping:P,className:v}){let{t:f}=useTranslation();return jsxs("div",{className:cn$1("px-4 pb-4 lg:pb-8",v),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("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:o??"",onChange:A=>n(A.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:()=>d(""),children:e?e.symbol:f("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 $",Lt(a)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(kt,{}),jsxs("span",{className:"text-neutral",children:[_t(r.amount)," ",r.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:f("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),c&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:c.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("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: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:()=>g(""),children:t?t.symbol:f("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 $",Lt(m)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(kt,{}),jsxs("span",{className:"text-neutral",children:[_t(s.amount)," ",s.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&p,onPress:x,children:f(P?"trade.swap.swapping":p?"trade.swap.findingRoute":"trade.swap.swap")})]})}function kt(){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 Lt(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 _t(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 Sr({chain:e,from:t,to:r,onComplete:s,className:o}){let a=Le({chain:e,from:t,to:r,onComplete:s}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),m=useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxs(Fragment,{children:[jsx(Ve,{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:o}),jsx(Oe,{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})]})}function Wt(e){let t=V(e),r=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(r),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...bt],presets:[{...t},{...t},{...t}]}}}var Nr=Wt("900900900");function Vt(e){return `liberfi.instant-trade.settings.${e}`}function Cr(e,t){try{let r=localStorage.getItem(Vt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function Ir(e,t){try{localStorage.setItem(Vt(e),JSON.stringify(t));}catch{}}var Kt=createContext(null);function $e(){let e=useContext(Kt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function He({chain:e,tokenAddress:t,settings:r,onSettingsChange:s,children:o}){let a=useMemo(()=>getNativeToken(e),[e]),n=r!==void 0,l=useMemo(()=>Wt(e),[e]),[i,u]=useState(()=>n?l:Cr(e,l)),m=n?r:i,d=useCallback(E=>{n?s?.(E):(u(E),Ir(String(e),E));},[n,s,e]),g=useCallback(E=>d({...m,buy:E}),[m,d]),h=useCallback(E=>d({...m,sell:E}),[m,d]),[p,c]=useState("buy"),[x,P]=useState(),[v,f]=useState(0),[A,R]=useState(0),$=useMemo(()=>V(e),[e]),H=useMemo(()=>{let E=p==="buy"?v:A;return (p==="buy"?m.buy.presets:m.sell.presets)[E]??$},[p,v,A,m,$]),z=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:p,setDirection:c,amount:x,setAmount:P,buyPreset:v,setBuyPreset:f,sellPreset:A,setSellPreset:R,settings:m,updateBuySettings:g,updateSellSettings:h,currentPresetValues:H}),[e,t,a,p,x,v,A,m,g,h,H]);return jsx(Kt.Provider,{value:z,children:o})}var Wr=15e3,Vr=1e4,Kr=1e4;function ze(e){let{chain:t,tokenAddress:r,onSwapSubmitted:s,onSwapError:o}=e,{t:a}=useTranslation(),n=$e(),l=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),u=useWallets(),m=chainToNamespace(t),d=useMemo(()=>u.find(w=>w.chainNamespace===m&&w.isConnected),[u,m]),g=d?.address??"",h=useMemo(()=>{let w=[r];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[r,l,i]),p=useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Vr}),c=useMemo(()=>p.data?.find(w=>w.address===r)??null,[p.data,r]),x=useWalletPortfoliosByTokensQuery({chain:t,address:g,tokenAddresses:h},{enabled:!!g&&h.length>0,refetchInterval:Wr});useLatestBlockQuery({chain:Chain.SOLANA},{enabled:isSolanaChain(t),refetchInterval:Kr,staleTime:8e3});let P=l?.address??i?.address??"",v=useMemo(()=>x.data?.find(w=>w.address===P)??null,[x.data,P]),f=useMemo(()=>x.data?.find(w=>w.address===r)??null,[x.data,r]),[A,R]=useState(false),$=useRef(null),H=useCallback(w=>{let U=$.current;$.current=w,R(W=>U===null||U!==w?true:!W);},[]),z=useRef(s);z.current=s;let E=useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>z.current?.(w),onError:(w,U)=>E.current?.(w,U)}),Y=useCallback(async()=>{if(!n.amount||!d||!r)return;let w=l?.decimals??9,U=i?.address??l?.address??"",W=n.direction==="buy",ae=W?U:r,ee=W?r:U,oe=W?w:c?.decimals??9,te=new de(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,S=V(t),k=ie.slippage??S.slippage??1,Pe=ie.antiMev!=="off",Me=isSolanaChain(t)?{priorityFee:new de(ie.priorityFee??S.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de(ie.tipFee??S.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:Pe}:{};try{await Z({chain:t,wallet:d,input:ae,output:ee,amount:te,slippage:k,...Me}),n.setAmount(void 0);}catch{}},[n,d,r,l,i,c,t,Z]),J=useMemo(()=>{let w=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let U=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=v?.amount;if(ae&&new de(ae).lt(n.amount))return `${w}${U}`;let ee=l?.symbol??"",oe=p.data?.find(te=>te.address===P)?.marketData?.priceInUsd;if(oe){let te=formatAmountUSD(new de(n.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=f?.amount;return W&&new de(W).lt(n.amount)?`${w}${U}`:w},[a,n.direction,n.amount,v,f,l,p.data,P]),Q=!n.amount||!d||!r,se=p.isPending||x.isPending;return useMemo(()=>({chain:t,tokenAddress:r,nativeToken:l,tokenInfo:c,nativeBalance:v,tokenBalance:f,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:A,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:se}),[t,r,l,c,v,f,n,A,H,Y,F,J,Q,se])}function be({value:e,onChange:t,chain:r,disableAnimation:s,className:o}){let a=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>le(r),[r]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn$1("space-y-4",o),children:[jsx(Yr,{value:e.slippage,onChange:i=>a({slippage:i})}),jsx(Jr,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(es,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx(ts,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:s}),e.autoFee&&jsx(ns,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(rs,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:s}),n.showCustomRPC&&jsx(ss,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Yr({value:e,onChange:t}){let{t:r}=useTranslation(),s=r("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:s}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":s})]})}function Jr({value:e,onChange:t,feeType:r,symbol:s,decimals:o}){let{t:a}=useTranslation(),n=a(`trade.preset.${r}`),l=a(`trade.preset.${r}.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:o},endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":n})]})}function es({value:e,onChange:t,symbol:r,decimals:s}){let{t:o}=useTranslation(),a=o("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:o("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:s},endContent:jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":a})]})}function ts({value:e,onChange:t,disableAnimation:r}){let{t:s}=useTranslation(),o=s("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:[o,jsx(StyledTooltip,{content:s("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":o,disableAnimation:r})})]})}function ns({value:e,onChange:t,symbol:r}){let{t:s}=useTranslation(),o=s("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:o}),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:r}),"aria-label":o})]})}function rs({value:e,onChange:t,options:r,disableAnimation:s}){let{t:o}=useTranslation(),a=o("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),l=useMemo(()=>({off:{title:o("trade.preset.antiMev.off"),desc:o("trade.preset.antiMev.off.desc")},reduced:{title:o("trade.preset.antiMev.reduced"),desc:o("trade.preset.antiMev.reduced.desc")},secure:{title:o("trade.preset.antiMev.secure"),desc:o("trade.preset.antiMev.secure.desc")}}),[o]);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:o("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(StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:s,"aria-label":a,children:r.map(i=>{let u=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(u,{width:18,height:18})})})},i)})})})]})}function ss({value:e,onChange:t}){let{t:r}=useTranslation(),s=r("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:s}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>t(o||null),placeholder:"https://...","aria-label":s})})]})}function Xe({chain:e,direction:t,onDirectionChange:r,amount:s,onAmountChange:o,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:m,tokenSymbol:d,nativeBalance:g,tokenBalance:h,amountConversion:p,preset:c,onPresetChange:x,presetValues:P,onPresetSettingsChange:v,showSettings:f,onPresetClick:A,submitText:R,isDisabled:$,isLoading:H,onSubmit:z,className:E,headerExtra:Z}){let{t:F}=useTranslation(),Y=useMemo(()=>getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxs("div",{className:cn$1("flex-none sm:px-3 py-3 bg-content1 rounded-lg",E),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:r,classNames:{tabList:"bg-content2",tab:cn$1("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsx(Tab,{title:F("common.buy")},"buy"),jsx(Tab,{title:F("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:F("trade.market")},"market")}),Z]}),jsx("div",{className:"mt-2.5",children:t==="buy"?jsx(xs,{amount:s,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsx(hs,{amount:s,onAmountChange:o,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:m,tokenSymbol:d,amountLabel:F("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:F("trade.balance")}),jsx("span",{children:t==="buy"?g?`${g} ${J??""}`:"--":h?`${h} ${d??""}`:"--"})]}),p&&jsx("div",{className:"text-xs text-neutral",children:p})]}),jsx("div",{className:"mt-4",children:jsx(ys,{values:P,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:`${c}`,onSelectionChange:se=>x(Number(se)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsx(Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>A(0)},0),jsx(Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>A(1)},1),jsx(Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>A(2)},2)]})}),f&&jsx("div",{className:"mt-2.5",children:jsx(be,{value:P,onChange:v,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:H,onPress:z,children:R})]})}function xs({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:s,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[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$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(qt,{values:r,onSelect:s,onEdit:o})]})}function hs({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:s,onCustomPercentagesEdit:o,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$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(qt,{values:r,onSelect:s,onEdit:o,suffix:"%"})]})}function qt({values:e,onSelect:t,onEdit:r,suffix:s}){let[o,a]=useState(false),[n,l]=useState([]),i=useCallback(()=>{l([...e]),a(true);},[e]),u=useCallback(()=>{a(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((m,d)=>jsx("div",{className:cn$1("h-6 bg-content2 flex items-center justify-center",d===0&&"rounded-bl-lg"),children:o?jsx(NumberInput,{fullWidth:true,value:n[d]===null||n[d]===void 0?void 0:n[d],onChange:g=>{if(typeof g=="number"){let h=isNaN(g)?null:g;l(p=>{let c=[...p];return c[d]=h,c});}},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",d===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[d]!=null&&t(e[d]),endContent:s?jsx("span",{className:"text-xs text-neutral",children:s}):null,children:e[d]??""})},d))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:o?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:i,children:jsx(EditIcon,{width:12,height:12})})})]})}function ys({values:e,chain:t}){let{t:r}=useTranslation(),s=useMemo(()=>le(t),[t]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:r("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:r(`trade.preset.${s.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)})}),s.showTipFee&&jsx(Tooltip,{content:r("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:r("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:[o==="off"&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),o==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),o==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:r(`trade.preset.antiMev.${o}`)})})]})}function Ps({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,settings:o,onSettingsChange:a,headerExtra:n,className:l}){return jsx(He,{chain:e,tokenAddress:t,settings:o,onSettingsChange:a,children:jsx(vs,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:n,className:l})})}function vs({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:o,className:a}){let n=ze({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s}),l=useCallback(p=>n.setAmount(p),[n]),i=useCallback(p=>{let c=n.tokenBalance?.amount;if(!c)return;let x=new de(c).times(p).div(100).toNumber();n.setAmount(x);},[n]),u=useCallback(p=>{n.updateBuySettings({...n.settings.buy,customAmounts:p});},[n]),m=useCallback(p=>{n.updateSellSettings({...n.settings.sell,customPercentages:p});},[n]),d=useCallback(p=>{let c=n.direction==="buy",x=c?n.buyPreset:n.sellPreset;if(c){let P=n.settings.buy,v=[...P.presets];v[x]=p,n.updateBuySettings({...P,presets:v});}else {let P=n.settings.sell,v=[...P.presets];v[x]=p,n.updateSellSettings({...P,presets:v});}},[n]),g=useCallback(p=>{n.direction==="buy"?n.setBuyPreset(p):n.setSellPreset(p);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(Xe,{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:u,onCustomPercentagesEdit:m,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:g,presetValues:n.currentPresetValues,onPresetSettingsChange:d,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:a,headerExtra:o})}function Je(e){let{id:t,chain:r,token:s,storageKeyPrefix:o,onAmountChange:a,onPresetChange:n,onPresetClick:l}=e,[i,u]=useAtom(j(G(t,r,s.address,o))),m=useAtomValue(_(L(r,"buy",0,o))),d=useAtomValue(_(L(r,"buy",1,o))),g=useAtomValue(_(L(r,"buy",2,o))),h=useMemo(()=>[m,d,g],[m,d,g]),p=useCallback(x=>{u(P=>({...P,amount:x})),a?.(x);},[u,a]),c=useCallback(x=>{u(P=>({...P,preset:x})),n?.(x);},[u,n]);return {token:s,chain:r,amount:i.amount,handleAmountChange:p,preset:i.preset,handlePresetChange:c,onPresetClick:l,presetValues:h}}function et({token:e,chain:t,amount:r,onAmountChange:s,preset:o=0,onPresetChange:a,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:m}){let{t:d}=useTranslation(),{isMobile:g}=useScreen(),h=useRef(null),p=useMemo(()=>V(t),[t]),[c,x]=useState(null),P=useCallback(v=>{a?.(Number(v));},[a]);return jsxs("div",{ref:h,className:cn$1("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",m),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:r,onValueChange:v=>s(isNaN(v)?void 0:v),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsx(LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":d("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsx(StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:P,classNames:{base:"flex-none h-full",tabList:cn$1("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:cn$1("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((v,f)=>jsx(Tab,{title:g?jsx("span",{onClick:A=>{o===f&&(A.stopPropagation(),x(R=>R===f?null:f));},children:d("trade.preset.short",{n:f+1})}):jsx(StyledTooltip,{content:jsx(nn,{label:d("trade.preset.short",{n:f+1}),values:l?.[f]??p,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsx("span",{onClick:()=>o===f&&n?.(f),children:d("trade.preset.short",{n:f+1})})})},String(f)))}),g&&c!==null&&jsx(Vs,{label:d("trade.preset.short",{n:c+1}),values:l?.[c]??p,chain:t,onClose:()=>x(null),containerRef:h})]})}function Vs({label:e,values:t,chain:r,onClose:s,containerRef:o}){let a=useRef(null);return useEffect(()=>{let n=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&s();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[s,o]),jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsx(nn,{label:e,values:t,chain:r})})}function nn({label:e,values:t,chain:r}){let{t:s}=useTranslation(),o=useMemo(()=>le(r),[r]),a=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxs("div",{className:"flex flex-col py-2",children:[jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsx(LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(SlippageIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:s("trade.preset.slippage")})]}),jsx("span",{className:cn$1("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:formatPercent(n)})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:s(`trade.preset.${o.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.priorityFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.feeUnit})]})]}),o.showTipFee&&jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(CoinsIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:s("trade.preset.tipFee")})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.tipFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.tipFeeUnit})]})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[a==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),a==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),a==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:s("trade.preset.antiMev")})]}),jsx("span",{className:cn$1("text-xs font-medium",a==="off"&&"text-zinc-500",a==="reduced"&&"text-amber-400",a==="secure"&&"text-emerald-400"),children:s(`trade.preset.antiMev.${a}`)})]})]})}function Ks({size:e,radius:t,className:r,...s}){let{token:o,chain:a,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:m,presetValues:d}=Je(s);return jsx(et,{token:o,chain:a,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:m,presetValues:d,size:e,radius:t,className:r})}function tt(e){let{chain:t,presetIndex:r=0,defaultDirection:s="buy",storageKeyPrefix:o,onChange:a}=e,[n,l]=useState(s),[i,u]=useAtom(_(L(t,n,r,o))),m=useCallback(d=>{u(d),a?.(n,d);},[u,a,n]);return {direction:n,setDirection:l,value:i,handleChange:m}}function rt({disableAnimation:e,className:t,...r}){let{t:s}=useTranslation(),{direction:o,setDirection:a,value:n,handleChange:l}=tt(r);return jsxs("div",{className:cn$1("space-y-3",t),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":"Buy / Sell",children:[jsx(Tab,{title:s("common.buy")},"buy"),jsx(Tab,{title:s("common.sell")},"sell")]}),jsx(be,{value:n,onChange:l,chain:r.chain,disableAnimation:e})]})}var Ys=3;function st(e){let{defaultPresetIndex:t=0,onChange:r}=e,[s,o]=useState(t),a=useCallback((n,l)=>{r?.(s,n,l);},[r,s]);return {presetCount:Ys,presetIndex:s,setPresetIndex:o,handlePresetChange:a}}function ot({defaultDirection:e,disableAnimation:t,className:r,...s}){let{t:o}=useTranslation(),{presetCount:a,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=st(s);return jsxs("div",{className:cn$1("space-y-3",r),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,m)=>jsx(Tab,{title:o("trade.preset.label",{n:m+1})},String(m)))}),jsx(rt,{chain:s.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:s.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var ga="preset";function xa({id:e=ga}){return jsx(AsyncModal,{id:e,children:t=>jsx(ha,{...t})})}function ha({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:r}){let{t:s}=useTranslation(),{chains:o,defaultChain:a,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[m,d]=useState(a??o[0]);useEffect(()=>{d(a??o[0]);},[a,o]);let g=useCallback((h,p,c)=>{u?.(m,h,p,c);},[u,m]);return jsx(StyledModal,{isOpen:t,onOpenChange:r,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:s("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:o,chain:m,onSelectChain:d})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(ot,{chain:m,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:g})})})]})})}function Ee(e,t,r,s,o){let a=V(o),n=new de(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new de(s.priorityFee??a.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de(s.tipFee??a.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:r,amount:n,slippage:s.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:s.antiMev!=="off"}}function ut(e){let{id:t,chain:r,token:s,output:o,storageKeyPrefix:a,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(j(G(t,r,s.address,a))),m=useAtomValue(_(L(r,"buy",u,a))),d=useConnectedWallet(r),{swap:g,isSwapping:h}=ne({onSubmitted:n,onError:l}),p=!i||!o,c=useAuthCallback(async()=>{if(!i||!d||!o)return;let x=Ee(i,s,o,m,r);try{await g({...x,chain:r,wallet:d});}catch{}},[d,i,o,r,s,m,g]);return useMemo(()=>({amount:i,token:s,isDisabled:p,isSwapping:h,handleSwap:c}),[i,s,p,h,c])}function wa({size:e="sm",radius:t,color:r="primary",className:s,...o}){let{amount:a,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsx(Button,{fullWidth:true,size:e,radius:t,color:r,className:s,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${n.symbol}`:n.symbol})}var un=createContext(null);function Fa({chain:e,onSwapSubmitted:t,onSwapError:r,children:s}){let o=useConnectedWallet(e),{swap:a}=ne({onSubmitted:t,onError:r}),n=useRef(o);n.current=o;let l=useRef(a);l.current=a;let i=useRef(e);i.current=e;let u=useCallback(async d=>{let g=n.current;if(g)return l.current({...d,wallet:g,chain:i.current})},[]),m=useAuthCallback(u,[]);return jsx(un.Provider,{value:m,children:s})}function dt(){let e=useContext(un);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:t,chain:r,token:s,output:o,storageKeyPrefix:a}=e,{amount:n,preset:l}=useAtomValue(j(G(t,r,s.address,a))),i=useAtomValue(_(L(r,"buy",l,a))),u=dt(),[m,d]=useState(false),g=!n||!o,h=useRef(s);h.current=s;let p=useRef(i);p.current=i;let c=useRef(r);c.current=r;let x=useCallback(async()=>{if(!n||!o)return;let P=Ee(n,h.current,o,p.current,c.current);d(true);try{await u(P);}catch{}finally{d(false);}},[n,o,u]);return useMemo(()=>({amount:n,token:s,isDisabled:g,isSwapping:m,handleSwap:x}),[n,s,g,m,x])}var Da=memo(function({size:t="sm",radius:r,color:s="primary",className:o,...a}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:m}=ct(a);return jsx(Button,{variant:"solid",fullWidth:true,size:t,radius:r,color:s,className:o,disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:m,style:{background:"rgba(199,255,46,0.08)",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:n!=null?`${n} ${l.symbol}`:l.symbol})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="2.0.12");var Oa="2.0.12";
|
|
2
|
-
export{et as AmountPresetInputUI,
|
|
1
|
+
import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {isSolanaChain,isBinanceChain,getNativeToken,getWrappedToken,chainToNamespace,formatAmountUSD,formatPercent,formatPrice}from'@liberfi.io/utils';import {createContext,memo,useState,useRef,useCallback,useMemo,useContext,useEffect}from'react';import {useDexClient,useLatestBlockCacheReader,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery,useLatestBlockQuery}from'@liberfi.io/react';import {Chain,SwapMode,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,Spinner,LightningIcon,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn as cn$1,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,useScreen,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import pe from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var cn="liberfi.",fn={amount:void 0,preset:0};function gn(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function xn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,id:o,chain:a,tokenAddress:n}}function G(e,t,s,r=cn){return `${r}:${e}.${t}.${s}`}var j=atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:o}=xn(e);return atomWithStorage(gn(t,s,String(r),o),fn,void 0,{getOnInit:true})});function Qa({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return useAtomValue(j(G(e,t,s,r)))}var ge=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},yn={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]},bn=[1,10,25,50];function yt(e){return yn[e]??bn}var bt=[10,25,50,100];function le(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)?gt:isBinanceChain(e)?ht:xt}var wn="liberfi.";function Tn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function Nn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,chain:o,direction:a,index:Number(n)}}function D(e,t,s,r=wn){return `${r}:${e}.${t}.${s}`}var L=atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:o}=Nn(e);return atomWithStorage(Tn(t,String(s),r,o),V(s),void 0,{getOnInit:true})});function so({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return useAtomValue(L(D(e,t,s,r)))}var In=150,Fn=12e3,Pt=60,wt=40;function Ue(e,t,s,r){if(!isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!s.data||Date.now()-s.dataUpdatedAt>Fn)throw new ge("Latest Solana block data is stale. Please refresh the quote.");let o=s.data.lastValidBlockHeight-In;if(t.lastValidBlockHeight-o<r)throw new ge("Swap route is close to blockhash expiry. Please refresh the quote.")}function _n(e){let t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return s}function On(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function ne(e){let{client:t}=useDexClient(),[s,r]=useState(false),o=useRef(e);o.current=e;let a=useLatestBlockCacheReader({chain:Chain.SOLANA}),n=useCallback(async l=>{let{wallet:i,chain:u,...m}=l;r(true);try{let p;try{p=await t.swapRoute({chain:u,userAddress:i.address,input:m.input,output:m.output,mode:m.mode??SwapMode.EXACT_IN,amount:m.amount,slippage:m.slippage,priorityFee:m.priorityFee,tipFee:m.tipFee,isAntiMev:m.isAntiMev,permit:m.permit,deadline:m.deadline});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"route"),x}try{Ue(u,p,a(),Pt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let g;try{let c=_n(p.serializedTx);g=await i.signTransaction(c);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"sign"),x}try{Ue(u,p,a(),wt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let h;try{let c=On(g);h=await t.sendTx({chain:u,serializedTx:c});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"send"),x}let d={txHash:h.txHash,extra:h.extra};return o.current?.onSubmitted?.(d),d}finally{r(false);}},[t,a]);return useMemo(()=>({swap:n,isSwapping:s}),[n,s])}var Hn=12e3;function Tt(e,t){let s=t?.interval??Hn,r=t?.paused??false,o=useRef(t);o.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,l=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return useEffect(()=>{l.error&&o.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var qn=6e4;function Nt(e){let{client:t}=useDexClient(),[s,r]=useState(()=>new Map),o=useRef(e);o.current=e;let a=useCallback((u,m)=>{r(p=>{let g=p.get(u);if(!g||g.status===m)return p;let h=new Map(p);return h.set(u,{...g,status:m}),h});},[]),n=useCallback((u,m)=>{r(g=>{if(g.has(m))return g;let h=new Map(g);return h.set(m,{chain:u,txHash:m,status:"pending"}),h});let p=o.current?.timeout??qn;t.checkTxSuccess(u,m,p).then(g=>{if(g)a(m,"confirmed"),o.current?.onConfirmed?.(m);else {let h=new Error("Transaction failed on-chain");a(m,"failed"),o.current?.onFailed?.(m,h);}}).catch(g=>{let h=g instanceof Error?g:new Error(String(g));a(m,"failed"),o.current?.onFailed?.(m,h);});},[t,a]),l=useCallback(u=>{r(m=>{if(!m.has(u))return m;let p=new Map(m);return p.delete(u),p});},[]),i=useCallback(()=>{r(u=>u.size===0?u:new Map);},[]);return useMemo(()=>({track:n,clear:l,clearAll:i,transactions:s}),[n,l,i,s])}var Jn=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function es(e){return Jn.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var ts=1e4,ns=15e3;function ss(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let o=r.padStart(t+1,"0"),a=o.slice(0,o.length-t)||"0",l=o.slice(o.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function De(e){let{chain:t}=e,s=useWallets(),r=es(t),o=useMemo(()=>s.find(S=>S.chainNamespace===r&&S.isConnected),[s,r]),a=o?.address??"",[n,l]=useState(e.from??""),[i,u]=useState(e.to??""),m=useRef(e.from),p=useRef(e.to);useEffect(()=>{e.from!==m.current&&(m.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&u(e.to));},[e.to]);let g=useMemo(()=>[n,i].filter(Boolean),[n,i]),h=useTokensQuery({chain:t,addresses:g},{enabled:g.length>0,refetchInterval:ts}),d=useMemo(()=>h.data?.find(S=>S.address===n)??null,[h.data,n]),c=useMemo(()=>h.data?.find(S=>S.address===i)??null,[h.data,i]),x=useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:g},{enabled:!!a&&g.length>0,refetchInterval:ns}),v=useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),P=useMemo(()=>x.data?.find(S=>S.address===i)??null,[x.data,i]),[f,I]=useState(void 0),U=useMemo(()=>{if(!f||d?.decimals==null)return;let S=f.split("."),k=S[0]??"0",Me=(S[1]??"").slice(0,d.decimals).padEnd(d.decimals,"0");return (k+Me).replace(/^0+/,"")||"0"},[f,d?.decimals]),$=useMemo(()=>{if(!f||!d?.marketData?.priceInUsd)return;let S=Number(d.marketData.priceInUsd),k=Number(f)*S;return Number.isFinite(k)?k.toString():void 0},[f,d?.marketData?.priceInUsd]),H=useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let k=S/2,ve=d?.decimals??9;I(k.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[v,d?.decimals]),z=useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let k=d?.decimals??9;I(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:k}));},[v,d?.decimals]),E=useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:SwapMode.EXACT_IN,amount:U}),[t,a,n,i,U]),Z=useRef(false),{route:F,isRouting:Y,error:J}=Tt(E,{paused:Z.current}),Q=useMemo(()=>F&&c?ss(F.plans,c.decimals):void 0,[F,c]),re=useMemo(()=>{if(!Q||!c?.marketData?.priceInUsd)return;let S=Number(c.marketData.priceInUsd),k=Number(Q)*S;return Number.isFinite(k)?k.toString():void 0},[Q,c?.marketData?.priceInUsd]),{swap:w,isSwapping:R}=ne();Z.current=R;let W=useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:S=>{W.current?.({success:true,txHash:S});},onFailed:S=>{W.current?.({success:false,txHash:S});}}),oe=useMemo(()=>{if(ee.size===0)return "idle";let S=Array.from(ee.values());return S[S.length-1].status},[ee]),te=useCallback(async()=>{if(!(!o||!F||!n||!i||!U))try{let S=await w({chain:t,wallet:o,input:n,output:i,amount:U,mode:SwapMode.EXACT_IN});ae(t,S.txHash);}catch{}},[o,F,t,n,i,U,w,ae]),ie=h.isPending||x.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:d,toToken:c,fromBalance:v,toBalance:P,amount:f,setAmount:I,setHalfAmount:H,setMaxAmount:z,amountInDecimals:U,amountInUsd:$,outputAmount:Q,outputAmountInUsd:re,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:R,txStatus:oe,isLoading:ie}),[n,i,d,c,v,P,f,H,z,U,$,Q,re,F,Y,J,te,R,oe,ie])}function Oe({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:o,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:m,routeError:p,onConfirm:g,isSwapping:h}){let{t:d}=useTranslation(),[c,x]=useState(false),v=useCallback(()=>x(f=>!f),[]),P=useMemo(()=>u?u.plans.map((f,I)=>({key:`plan-${I}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.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:d("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:d("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"}),o&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(xs,{}),jsxs("span",{children:[Le(o.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:Le(a)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:d("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:[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"}),jsx("div",{className:"text-neutral text-[10px]",children:Te(r?.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:Le(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(i)]})]})]})]}),c&&P.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:d("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:P.map(f=>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:d("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[_e(f.inputAmount)," ",Te(f.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[_e(f.outputAmount)," ",Te(f.output)]})]})]}),f.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[_e(f.feeAmount)," ",Te(f.feeQuote)]})]})]},f.key))})]}),P.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:c?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:v,children:d(c?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!p,isLoading:!u&&m||h,onPress:g,children:d("common.confirm")})})]})})}function xs(){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 Le(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 _e(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 Te(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ve({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:o,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:m,onFromTokenSelect:p,onToTokenSelect:g,route:h,isRouting:d,routeError:c,onPreview:x,isSwapping:v,className:P}){let{t:f}=useTranslation();return jsxs("div",{className:cn$1("px-4 pb-4 lg:pb-8",P),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("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:o??"",onChange:I=>n(I.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:()=>p(""),children:e?e.symbol:f("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 $",Dt(a)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(kt,{}),jsxs("span",{className:"text-neutral",children:[Lt(s.amount)," ",s.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:f("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),c&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:c.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("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: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:()=>g(""),children:t?t.symbol:f("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 $",Dt(m)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(kt,{}),jsxs("span",{className:"text-neutral",children:[Lt(r.amount)," ",r.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&d,onPress:x,children:f(v?"trade.swap.swapping":d?"trade.swap.findingRoute":"trade.swap.swap")})]})}function kt(){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 Dt(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 Lt(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 Ss({chain:e,from:t,to:s,onComplete:r,className:o}){let a=De({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),m=useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxs(Fragment,{children:[jsx(Ve,{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:o}),jsx(Oe,{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})]})}function Wt(e){let t=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...bt],presets:[{...t},{...t},{...t}]}}}var Ns=Wt("900900900");function Vt(e){return `liberfi.instant-trade.settings.${e}`}function Cs(e,t){try{let s=localStorage.getItem(Vt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function As(e,t){try{localStorage.setItem(Vt(e),JSON.stringify(t));}catch{}}var Kt=createContext(null);function $e(){let e=useContext(Kt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function He({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:o}){let a=useMemo(()=>getNativeToken(e),[e]),n=s!==void 0,l=useMemo(()=>Wt(e),[e]),[i,u]=useState(()=>n?l:Cs(e,l)),m=n?s:i,p=useCallback(E=>{n?r?.(E):(u(E),As(String(e),E));},[n,r,e]),g=useCallback(E=>p({...m,buy:E}),[m,p]),h=useCallback(E=>p({...m,sell:E}),[m,p]),[d,c]=useState("buy"),[x,v]=useState(),[P,f]=useState(0),[I,U]=useState(0),$=useMemo(()=>V(e),[e]),H=useMemo(()=>{let E=d==="buy"?P:I;return (d==="buy"?m.buy.presets:m.sell.presets)[E]??$},[d,P,I,m,$]),z=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:d,setDirection:c,amount:x,setAmount:v,buyPreset:P,setBuyPreset:f,sellPreset:I,setSellPreset:U,settings:m,updateBuySettings:g,updateSellSettings:h,currentPresetValues:H}),[e,t,a,d,x,P,I,m,g,h,H]);return jsx(Kt.Provider,{value:z,children:o})}var Ws=15e3,Vs=1e4,Ks=1e4;function ze(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:o}=e,{t:a}=useTranslation(),n=$e(),l=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),u=useWallets(),m=chainToNamespace(t),p=useMemo(()=>u.find(w=>w.chainNamespace===m&&w.isConnected),[u,m]),g=p?.address??"",h=useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),d=useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Vs}),c=useMemo(()=>d.data?.find(w=>w.address===s)??null,[d.data,s]),x=useWalletPortfoliosByTokensQuery({chain:t,address:g,tokenAddresses:h},{enabled:!!g&&h.length>0,refetchInterval:Ws});useLatestBlockQuery({chain:Chain.SOLANA},{enabled:isSolanaChain(t),refetchInterval:Ks,staleTime:8e3});let v=l?.address??i?.address??"",P=useMemo(()=>x.data?.find(w=>w.address===v)??null,[x.data,v]),f=useMemo(()=>x.data?.find(w=>w.address===s)??null,[x.data,s]),[I,U]=useState(false),$=useRef(null),H=useCallback(w=>{let R=$.current;$.current=w,U(W=>R===null||R!==w?true:!W);},[]),z=useRef(r);z.current=r;let E=useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>z.current?.(w),onError:(w,R)=>E.current?.(w,R)}),Y=useCallback(async()=>{if(!n.amount||!p||!s)return;let w=l?.decimals??9,R=i?.address??l?.address??"",W=n.direction==="buy",ae=W?R:s,ee=W?s:R,oe=W?w:c?.decimals??9,te=new pe(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,S=V(t),k=ie.slippage??S.slippage??1,ve=ie.antiMev!=="off",Me=isSolanaChain(t)?{priorityFee:new pe(ie.priorityFee??S.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new pe(ie.tipFee??S.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:ve}:{};try{await Z({chain:t,wallet:p,input:ae,output:ee,amount:te,slippage:k,...Me}),n.setAmount(void 0);}catch{}},[n,p,s,l,i,c,t,Z]),J=useMemo(()=>{let w=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let R=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=P?.amount;if(ae&&new pe(ae).lt(n.amount))return `${w}${R}`;let ee=l?.symbol??"",oe=d.data?.find(te=>te.address===v)?.marketData?.priceInUsd;if(oe){let te=formatAmountUSD(new pe(n.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=f?.amount;return W&&new pe(W).lt(n.amount)?`${w}${R}`:w},[a,n.direction,n.amount,P,f,l,d.data,v]),Q=!n.amount||!p||!s,re=d.isPending||x.isPending;return useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:c,nativeBalance:P,tokenBalance:f,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:I,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:re}),[t,s,l,c,P,f,n,I,H,Y,F,J,Q,re])}function be({value:e,onChange:t,chain:s,disableAnimation:r,className:o}){let a=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>le(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn$1("space-y-4",o),children:[jsx(Ys,{value:e.slippage,onChange:i=>a({slippage:i})}),jsx(Js,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(er,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx(tr,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:r}),e.autoFee&&jsx(nr,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(sr,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsx(rr,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Ys({value:e,onChange:t}){let{t:s}=useTranslation(),r=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:r}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function Js({value:e,onChange:t,feeType:s,symbol:r,decimals:o}){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:o},endContent:jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function er({value:e,onChange:t,symbol:s,decimals:r}){let{t:o}=useTranslation(),a=o("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:o("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:r},endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function tr({value:e,onChange:t,disableAnimation:s}){let{t:r}=useTranslation(),o=r("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:[o,jsx(StyledTooltip,{content:r("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":o,disableAnimation:s})})]})}function nr({value:e,onChange:t,symbol:s}){let{t:r}=useTranslation(),o=r("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:o}),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":o})]})}function sr({value:e,onChange:t,options:s,disableAnimation:r}){let{t:o}=useTranslation(),a=o("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),l=useMemo(()=>({off:{title:o("trade.preset.antiMev.off"),desc:o("trade.preset.antiMev.off.desc")},reduced:{title:o("trade.preset.antiMev.reduced"),desc:o("trade.preset.antiMev.reduced.desc")},secure:{title:o("trade.preset.antiMev.secure"),desc:o("trade.preset.antiMev.secure.desc")}}),[o]);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:o("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(StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:r,"aria-label":a,children:s.map(i=>{let u=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(u,{width:18,height:18})})})},i)})})})]})}function rr({value:e,onChange:t}){let{t:s}=useTranslation(),r=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:r}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>t(o||null),placeholder:"https://...","aria-label":r})})]})}function Xe({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:o,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:m,tokenSymbol:p,nativeBalance:g,tokenBalance:h,amountConversion:d,preset:c,onPresetChange:x,presetValues:v,onPresetSettingsChange:P,showSettings:f,onPresetClick:I,submitText:U,isDisabled:$,isLoading:H,onSubmit:z,className:E,headerExtra:Z}){let{t:F}=useTranslation(),Y=useMemo(()=>getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxs("div",{className:cn$1("flex-none sm:px-3 py-3 bg-content1 rounded-lg",E),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:cn$1("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsx(Tab,{title:F("common.buy")},"buy"),jsx(Tab,{title:F("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:F("trade.market")},"market")}),Z]}),jsx("div",{className:"mt-2.5",children:t==="buy"?jsx(xr,{amount:r,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsx(hr,{amount:r,onAmountChange:o,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:m,tokenSymbol:p,amountLabel:F("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:F("trade.balance")}),jsx("span",{children:t==="buy"?g?`${g} ${J??""}`:"--":h?`${h} ${p??""}`:"--"})]}),d&&jsx("div",{className:"text-xs text-neutral",children:d})]}),jsx("div",{className:"mt-4",children:jsx(yr,{values:v,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:`${c}`,onSelectionChange:re=>x(Number(re)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsx(Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>I(0)},0),jsx(Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>I(1)},1),jsx(Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>I(2)},2)]})}),f&&jsx("div",{className:"mt-2.5",children:jsx(be,{value:v,onChange:P,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:H,onPress:z,children:U})]})}function xr({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[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$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(qt,{values:s,onSelect:r,onEdit:o})]})}function hr({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:o,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$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(qt,{values:s,onSelect:r,onEdit:o,suffix:"%"})]})}function qt({values:e,onSelect:t,onEdit:s,suffix:r}){let[o,a]=useState(false),[n,l]=useState([]),i=useCallback(()=>{l([...e]),a(true);},[e]),u=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,p)=>jsx("div",{className:cn$1("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:o?jsx(NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:g=>{if(typeof g=="number"){let h=isNaN(g)?null:g;l(d=>{let c=[...d];return c[p]=h,c});}},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",p===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[p]!=null&&t(e[p]),endContent:r?jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[p]??""})},p))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:o?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:i,children:jsx(EditIcon,{width:12,height:12})})})]})}function yr({values:e,chain:t}){let{t:s}=useTranslation(),r=useMemo(()=>le(t),[t]),o=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.${r.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)})}),r.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:[o==="off"&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),o==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),o==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${o}`)})})]})}function vr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:o,onSettingsChange:a,headerExtra:n,className:l}){return jsx(He,{chain:e,tokenAddress:t,settings:o,onSettingsChange:a,children:jsx(Pr,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:l})})}function Pr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:o,className:a}){let n=ze({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),l=useCallback(d=>n.setAmount(d),[n]),i=useCallback(d=>{let c=n.tokenBalance?.amount;if(!c)return;let x=new pe(c).times(d).div(100).toNumber();n.setAmount(x);},[n]),u=useCallback(d=>{n.updateBuySettings({...n.settings.buy,customAmounts:d});},[n]),m=useCallback(d=>{n.updateSellSettings({...n.settings.sell,customPercentages:d});},[n]),p=useCallback(d=>{let c=n.direction==="buy",x=c?n.buyPreset:n.sellPreset;if(c){let v=n.settings.buy,P=[...v.presets];P[x]=d,n.updateBuySettings({...v,presets:P});}else {let v=n.settings.sell,P=[...v.presets];P[x]=d,n.updateSellSettings({...v,presets:P});}},[n]),g=useCallback(d=>{n.direction==="buy"?n.setBuyPreset(d):n.setSellPreset(d);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(Xe,{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:u,onCustomPercentagesEdit:m,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:g,presetValues:n.currentPresetValues,onPresetSettingsChange:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:a,headerExtra:o})}function Je(e){let{id:t,chain:s,token:r,storageKeyPrefix:o,onAmountChange:a,onPresetChange:n,onPresetClick:l}=e,[i,u]=useAtom(j(G(t,s,r.address,o))),m=useAtomValue(L(D(s,"buy",0,o))),p=useAtomValue(L(D(s,"buy",1,o))),g=useAtomValue(L(D(s,"buy",2,o))),h=useMemo(()=>[m,p,g],[m,p,g]),d=useCallback(x=>{u(v=>({...v,amount:x})),a?.(x);},[u,a]),c=useCallback(x=>{u(v=>({...v,preset:x})),n?.(x);},[u,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:d,preset:i.preset,handlePresetChange:c,onPresetClick:l,presetValues:h}}function et({token:e,chain:t,amount:s,onAmountChange:r,preset:o=0,onPresetChange:a,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:m}){let{t:p}=useTranslation(),{isMobile:g}=useScreen(),h=useRef(null),d=useMemo(()=>V(t),[t]),[c,x]=useState(null),v=useCallback(P=>{a?.(Number(P));},[a]);return jsxs("div",{ref:h,className:cn$1("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",m),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:P=>r(isNaN(P)?void 0:P),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsx(LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsx(StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:v,classNames:{base:"flex-none h-full",tabList:cn$1("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:cn$1("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((P,f)=>jsx(Tab,{title:g?jsx("span",{onClick:I=>{o===f&&(I.stopPropagation(),x(U=>U===f?null:f));},children:p("trade.preset.short",{n:f+1})}):jsx(StyledTooltip,{content:jsx(nn,{label:p("trade.preset.short",{n:f+1}),values:l?.[f]??d,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsx("span",{onClick:()=>o===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))}),g&&c!==null&&jsx(Vr,{label:p("trade.preset.short",{n:c+1}),values:l?.[c]??d,chain:t,onClose:()=>x(null),containerRef:h})]})}function Vr({label:e,values:t,chain:s,onClose:r,containerRef:o}){let a=useRef(null);return useEffect(()=>{let n=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&r();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[r,o]),jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsx(nn,{label:e,values:t,chain:s})})}function nn({label:e,values:t,chain:s}){let{t:r}=useTranslation(),o=useMemo(()=>le(s),[s]),a=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxs("div",{className:"flex flex-col py-2",children:[jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsx(LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(SlippageIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.slippage")})]}),jsx("span",{className:cn$1("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:formatPercent(n)})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r(`trade.preset.${o.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.priorityFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.feeUnit})]})]}),o.showTipFee&&jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(CoinsIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.tipFee")})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.tipFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.tipFeeUnit})]})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[a==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),a==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),a==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.antiMev")})]}),jsx("span",{className:cn$1("text-xs font-medium",a==="off"&&"text-zinc-500",a==="reduced"&&"text-amber-400",a==="secure"&&"text-emerald-400"),children:r(`trade.preset.antiMev.${a}`)})]})]})}function Kr({size:e,radius:t,className:s,...r}){let{token:o,chain:a,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:m,presetValues:p}=Je(r);return jsx(et,{token:o,chain:a,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:m,presetValues:p,size:e,radius:t,className:s})}function tt(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:o,onChange:a}=e,[n,l]=useState(r),[i,u]=useAtom(L(D(t,n,s,o))),m=useCallback(p=>{u(p),a?.(n,p);},[u,a,n]);return {direction:n,setDirection:l,value:i,handleChange:m}}function st({disableAnimation:e,className:t,...s}){let{t:r}=useTranslation(),{direction:o,setDirection:a,value:n,handleChange:l}=tt(s);return jsxs("div",{className:cn$1("space-y-3",t),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":"Buy / Sell",children:[jsx(Tab,{title:r("common.buy")},"buy"),jsx(Tab,{title:r("common.sell")},"sell")]}),jsx(be,{value:n,onChange:l,chain:s.chain,disableAnimation:e})]})}var Yr=3;function rt(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,o]=useState(t),a=useCallback((n,l)=>{s?.(r,n,l);},[s,r]);return {presetCount:Yr,presetIndex:r,setPresetIndex:o,handlePresetChange:a}}function ot({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:o}=useTranslation(),{presetCount:a,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=rt(r);return jsxs("div",{className:cn$1("space-y-3",s),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,m)=>jsx(Tab,{title:o("trade.preset.label",{n:m+1})},String(m)))}),jsx(st,{chain:r.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var ga="preset";function xa({id:e=ga}){return jsx(AsyncModal,{id:e,children:t=>jsx(ha,{...t})})}function ha({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=useTranslation(),{chains:o,defaultChain:a,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[m,p]=useState(a??o[0]);useEffect(()=>{p(a??o[0]);},[a,o]);let g=useCallback((h,d,c)=>{u?.(m,h,d,c);},[u,m]);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:r("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:o,chain:m,onSelectChain:p})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(ot,{chain:m,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:g})})})]})})}function Ee(e,t,s,r,o){let a=V(o),n=new pe(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new pe(r.priorityFee??a.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new pe(r.tipFee??a.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function ut(e){let{id:t,chain:s,token:r,output:o,storageKeyPrefix:a,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(j(G(t,s,r.address,a))),m=useAtomValue(L(D(s,"buy",u,a))),p=useConnectedWallet(s),{swap:g,isSwapping:h}=ne({onSubmitted:n,onError:l}),d=!i||!o,c=useAuthCallback(async()=>{if(!i||!p||!o)return;let x=Ee(i,r,o,m,s);try{await g({...x,chain:s,wallet:p});}catch{}},[p,i,o,s,r,m,g]);return useMemo(()=>({amount:i,token:r,isDisabled:d,isSwapping:h,handleSwap:c}),[i,r,d,h,c])}function wa({size:e="sm",radius:t,color:s="primary",className:r,...o}){let{amount:a,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsx(Button,{fullWidth:true,size:e,radius:t,color:s,className:r,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${n.symbol}`:n.symbol})}var un=createContext(null);function Fa({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let o=useConnectedWallet(e),{swap:a}=ne({onSubmitted:t,onError:s}),n=useRef(o);n.current=o;let l=useRef(a);l.current=a;let i=useRef(e);i.current=e;let u=useCallback(async p=>{let g=n.current;if(g)return l.current({...p,wallet:g,chain:i.current})},[]),m=useAuthCallback(u,[]);return jsx(un.Provider,{value:m,children:r})}function pt(){let e=useContext(un);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:t,chain:s,token:r,output:o,storageKeyPrefix:a}=e,{amount:n,preset:l}=useAtomValue(j(G(t,s,r.address,a))),i=useAtomValue(L(D(s,"buy",l,a))),u=pt(),[m,p]=useState(false),g=!n||!o,h=useRef(r);h.current=r;let d=useRef(i);d.current=i;let c=useRef(s);c.current=s;let x=useCallback(async()=>{if(!n||!o)return;let v=Ee(n,h.current,o,d.current,c.current);p(true);try{await u(v);}catch{}finally{p(false);}},[n,o,u]);return useMemo(()=>({amount:n,token:r,isDisabled:g,isSwapping:m,handleSwap:x}),[n,r,g,m,x])}var _a=memo(function({size:t="sm",radius:s,color:r="primary",className:o,...a}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:m}=ct(a);return jsx(Button,{variant:"solid",fullWidth:true,size:t,radius:s,color:r,className:o,disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:m,style:{background:"rgba(199,255,46,0.08)",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:n!=null?`${n} ${l.symbol}`:l.symbol})});
|
|
2
|
+
export{et as AmountPresetInputUI,Kr as AmountPresetInputWidget,ht as DEFAULT_BSC_TRADE_PRESET,xt as DEFAULT_EVM_TRADE_PRESET,Ns as DEFAULT_INSTANT_TRADE_SETTINGS,bt as DEFAULT_SELL_PERCENTAGES,gt as DEFAULT_SOL_TRADE_PRESET,wa as InstantTradeButtonWidget,_a as InstantTradeListButtonWidget,He as InstantTradeProvider,Fa as InstantTradeSwapProvider,Xe as InstantTradeUI,vr as InstantTradeWidget,ot as MultiPresetFormWidget,xa as PresetFormModal,be as PresetFormUI,st as PresetFormWidget,Oe as SwapPreviewModal,ge as SwapRouteExpiredError,Ve as SwapUI,Ss as SwapWidget,le as getChainPresetFeatures,yt as getDefaultBuyAmounts,V as getDefaultPresetForChain,j as instantTradeAmountAtomFamily,G as instantTradeAmountKey,L as presetAtomFamily,D as presetKey,Je as useAmountPresetInputScript,$e as useInstantTrade,Qa as useInstantTradeAmount,ut as useInstantTradeButtonScript,ct as useInstantTradeListButtonScript,ze as useInstantTradeScript,pt as useInstantTradeSwap,rt as useMultiPresetFormScript,tt as usePresetFormScript,so as usePresetValues,ne as useSwap,Tt as useSwapRoutePolling,De as useSwapScript,Nt as useTxConfirmation};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|