@liberfi.io/ui-trade 3.0.28 → 3.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {formatAmountCompact,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,useLatestBlockFetcher,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,SwapMode,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,cn,Spinner,LightningIcon,toast,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,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 ce from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var gn="liberfi.",xn={amount:void 0,preset:0};function hn(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function bn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,id:a,chain:o,tokenAddress:n}}function G(e,t,s,r=gn){return `${r}:${e}.${t}.${s}`}var j=atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:a}=bn(e);return atomWithStorage(hn(t,s,String(r),a),xn,void 0,{getOnInit:true})});function Za({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return useAtomValue(j(G(e,t,s,r)))}var ne=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},xt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ht={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},bt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},Sn={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]},Pn=[1,10,25,50];function yt(e){return Sn[e]??Pn}var St=[10,25,50,100];function ue(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)?xt:isBinanceChain(e)?bt:ht}var Nn="liberfi.";function Cn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function An(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,chain:a,direction:o,index:Number(n)}}function D(e,t,s,r=Nn){return `${r}:${e}.${t}.${s}`}var L=atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:a}=An(e);return atomWithStorage(Cn(t,String(s),r,a),V(s),void 0,{getOnInit:true})});function uo({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return useAtomValue(L(D(e,t,s,r)))}var En=150,Mn=12e3,vt=60,Tt=40;function Ue(e,t,s,r){if(!isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!s.data||Date.now()-s.dataUpdatedAt>Mn)throw new ne("Latest Solana block data is stale. Please refresh the quote.");let a=s.data.lastValidBlockHeight-En;if(t.lastValidBlockHeight-a<r)throw new ne("Swap route is close to blockhash expiry. Please refresh the quote.")}function Nt(e){let t=(e instanceof Error?e.message:String(e)).toLowerCase();return t.includes("block height exceeded")||t.includes("blockhash not found")||t.includes("blockhashnotfound")}var Wn=6e3,Vn=6e3;function pe(e){return e instanceof Error?e:new Error(String(e))}function Kn(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 $n(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function se(e){let{client:t}=useDexClient(),[s,r]=useState(false),a=useRef(e);a.current=e;let o=useMemo(()=>({chain:Chain.SOLANA}),[]),n=useLatestBlockFetcher(o),l=useCallback(async i=>{let{wallet:u,chain:d,...m}=i,f=isSolanaChain(d);r(true);try{let h=t.swapRoute({chain:d,userAddress:u.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}),c=f?n({staleTime:Wn}).then(p=>({ok:!0,value:p}),p=>({ok:!1,error:pe(p)})):void 0,g;try{g=await h;}catch(p){let v=pe(p);throw a.current?.onError?.(v,"route"),v}if(f&&g.lastValidBlockHeight!=null)try{let p=await c;if(!p.ok)throw new ne("Unable to validate latest Solana block data. Please refresh the quote.");Ue(d,g,p.value,vt);}catch(p){let v=pe(p);throw a.current?.onError?.(v,"expired"),v}let b;try{let p=Kn(g.serializedTx);b=await u.signTransaction(p);}catch(p){let v=pe(p);throw a.current?.onError?.(v,"sign"),v}if(f&&g.lastValidBlockHeight!=null)try{Ue(d,g,await n({staleTime:Vn}),Tt);}catch(p){let v=pe(p);throw a.current?.onError?.(v,"expired"),v}let S;try{let p=$n(b);S=await t.sendTx({chain:d,serializedTx:p});}catch(p){if(f&&Nt(p)){let E=new ne("Swap route expired before transaction submission. Please refresh the quote.");throw a.current?.onError?.(E,"expired"),E}let v=pe(p);throw a.current?.onError?.(v,"send"),v}let w={txHash:S.txHash,extra:S.extra};return a.current?.onSubmitted?.(w),w}finally{r(false);}},[t,n]);return useMemo(()=>({swap:l,isSwapping:s}),[l,s])}var jn=12e3;function At(e,t){let s=t?.interval??jn,r=t?.paused??false,a=useRef(t);a.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&&a.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var Jn=6e4;function It(e){let{client:t}=useDexClient(),[s,r]=useState(()=>new Map),a=useRef(e);a.current=e;let o=useCallback((u,d)=>{r(m=>{let f=m.get(u);if(!f||f.status===d)return m;let h=new Map(m);return h.set(u,{...f,status:d}),h});},[]),n=useCallback((u,d)=>{r(f=>{if(f.has(d))return f;let h=new Map(f);return h.set(d,{chain:u,txHash:d,status:"pending"}),h});let m=a.current?.timeout??Jn;t.checkTxSuccess(u,d,m).then(f=>{if(f)o(d,"confirmed"),a.current?.onConfirmed?.(d);else {let h=new Error("Transaction failed on-chain");o(d,"failed"),a.current?.onFailed?.(d,h);}}).catch(f=>{let h=f instanceof Error?f:new Error(String(f));o(d,"failed"),a.current?.onFailed?.(d,h);});},[t,o]),l=useCallback(u=>{r(d=>{if(!d.has(u))return d;let m=new Map(d);return m.delete(u),m});},[]),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 ss=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function rs(e){return ss.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var as=1e4,os=15e3;function is(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let a=r.padStart(t+1,"0"),o=a.slice(0,a.length-t)||"0",l=a.slice(a.length-t).replace(/0+$/,"");return l?`${o}.${l}`:o}function Le(e){let{chain:t}=e,s=useWallets(),r=rs(t),a=useMemo(()=>s.find(P=>P.chainNamespace===r&&P.isConnected),[s,r]),o=a?.address??"",[n,l]=useState(e.from??""),[i,u]=useState(e.to??""),d=useRef(e.from),m=useRef(e.to);useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==m.current&&(m.current=e.to,e.to&&u(e.to));},[e.to]);let f=useMemo(()=>[n,i].filter(Boolean),[n,i]),h=useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:as}),c=useMemo(()=>h.data?.find(P=>P.address===n)??null,[h.data,n]),g=useMemo(()=>h.data?.find(P=>P.address===i)??null,[h.data,i]),b=useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:f},{enabled:!!o&&f.length>0,refetchInterval:os}),S=useMemo(()=>b.data?.find(P=>P.address===n)??null,[b.data,n]),w=useMemo(()=>b.data?.find(P=>P.address===i)??null,[b.data,i]),[p,v]=useState(void 0),E=useMemo(()=>{if(!p||c?.decimals==null)return;let P=p.split("."),B=P[0]??"0",ke=(P[1]??"").slice(0,c.decimals).padEnd(c.decimals,"0");return (B+ke).replace(/^0+/,"")||"0"},[p,c?.decimals]),$=useMemo(()=>{if(!p||!c?.marketData?.priceInUsd)return;let P=Number(c.marketData.priceInUsd),B=Number(p)*P;return Number.isFinite(B)?B.toString():void 0},[p,c?.marketData?.priceInUsd]),H=useCallback(()=>{if(!S)return;let P=Number(S.amount);if(!Number.isFinite(P)||P<=0)return;let B=P/2,we=c?.decimals??9;v(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:we}));},[S,c?.decimals]),z=useCallback(()=>{if(!S)return;let P=Number(S.amount);if(!Number.isFinite(P)||P<=0)return;let B=c?.decimals??9;v(P.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[S,c?.decimals]),M=useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:SwapMode.EXACT_IN,amount:E}),[t,o,n,i,E]),Z=useRef(false),{route:F,isRouting:Y,error:J}=At(M,{paused:Z.current}),Q=useMemo(()=>F&&g?is(F.plans,g.decimals):void 0,[F,g]),ae=useMemo(()=>{if(!Q||!g?.marketData?.priceInUsd)return;let P=Number(g.marketData.priceInUsd),B=Number(Q)*P;return Number.isFinite(B)?B.toString():void 0},[Q,g?.marketData?.priceInUsd]),{swap:T,isSwapping:U}=se();Z.current=U;let W=useRef(e.onComplete);W.current=e.onComplete;let{track:oe,transactions:ee}=It({onConfirmed:P=>{W.current?.({success:true,txHash:P});},onFailed:P=>{W.current?.({success:false,txHash:P});}}),ie=useMemo(()=>{if(ee.size===0)return "idle";let P=Array.from(ee.values());return P[P.length-1].status},[ee]),te=useCallback(async()=>{if(!(!a||!F||!n||!i||!E))try{let P=await T({chain:t,wallet:a,input:n,output:i,amount:E,mode:SwapMode.EXACT_IN});oe(t,P.txHash);}catch{}},[a,F,t,n,i,E,T,oe]),le=h.isPending||b.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:c,toToken:g,fromBalance:S,toBalance:w,amount:p,setAmount:v,setHalfAmount:H,setMaxAmount:z,amountInDecimals:E,amountInUsd:$,outputAmount:Q,outputAmountInUsd:ae,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:U,txStatus:ie,isLoading:le}),[n,i,c,g,S,w,p,H,z,E,$,Q,ae,F,Y,J,te,U,ie,le])}function We({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:d,routeError:m,onConfirm:f,isSwapping:h}){let{t:c}=useTranslation(),[g,b]=useState(false),S=useCallback(()=>b(p=>!p),[]),w=useMemo(()=>u?u.plans.map((p,v)=>({key:`plan-${v}`,name:p.name,input:p.input,inputAmount:p.inputAmount,output:p.output,outputAmount:p.outputAmount,feeQuote:p.feeQuote,feeAmount:p.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:c("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:c("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"}),a&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(Ss,{}),jsxs("span",{children:[_e(a.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:_e(o)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Rt(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:c("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:Ne(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:_e(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Rt(i)]})]})]})]}),g&&w.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:c("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:w.map(p=>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:c("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:p.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:c("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[Oe(p.inputAmount)," ",Ne(p.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[Oe(p.outputAmount)," ",Ne(p.output)]})]})]}),p.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:c("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[Oe(p.feeAmount)," ",Ne(p.feeQuote)]})]})]},p.key))})]}),w.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:g?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:S,children:c(g?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!m,isLoading:!u&&d||h,onPress:f,children:c("common.confirm")})})]})})}function Ss(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Rt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function _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 Oe(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 Ne(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ke({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:m,onToTokenSelect:f,route:h,isRouting:c,routeError:g,onPreview:b,isSwapping:S,className:w}){let{t:p}=useTranslation();return jsxs("div",{className:cn("px-4 pb-4 lg:pb-8",w),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:p("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:a??"",onChange:v=>n(v.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsx(Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>m(""),children:e?e.symbol:p("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 $",Ot(o)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(_t,{}),jsxs("span",{className:"text-neutral",children:[Wt(s.amount)," ",s.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:p("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:p("common.max")})]})]}),g&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:g.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:p("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("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsx(Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>f(""),children:t?t.symbol:p("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 $",Ot(d)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(_t,{}),jsxs("span",{className:"text-neutral",children:[Wt(r.amount)," ",r.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&c,onPress:b,children:p(S?"trade.swap.swapping":c?"trade.swap.findingRoute":"trade.swap.swap")})]})}function _t(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Ot(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Wt(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 Ts({chain:e,from:t,to:s,onComplete:r,className:a}){let o=Le({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),d=useCallback(async()=>{await o.swap(),u();},[o,u]);return jsxs(Fragment,{children:[jsx(Ke,{fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,toBalance:o.toBalance,amount:o.amount,amountInUsd:o.amountInUsd,onAmountChange:o.setAmount,onHalfAmount:o.setHalfAmount,onMaxAmount:o.setMaxAmount,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,onFromTokenSelect:o.setFromTokenAddress,onToTokenSelect:o.setToTokenAddress,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onPreview:l,isSwapping:o.isSwapping,className:a}),jsx(We,{isOpen:n,onOpenChange:i,fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,inputAmount:o.amount,inputAmountInUsd:o.amountInUsd,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onConfirm:d,isSwapping:o.isSwapping})]})}function $t(e){let t=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...St],presets:[{...t},{...t},{...t}]}}}var Fs=$t("900900900");function Ht(e){return `liberfi.instant-trade.settings.${e}`}function Es(e,t){try{let s=localStorage.getItem(Ht(String(e)));if(s)return JSON.parse(s)}catch{}return t}function Ms(e,t){try{localStorage.setItem(Ht(e),JSON.stringify(t));}catch{}}var Qt=createContext(null);function He(){let e=useContext(Qt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Qe({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:a}){let o=useMemo(()=>getNativeToken(e),[e]),n=s!==void 0,l=useMemo(()=>$t(e),[e]),[i,u]=useState(()=>n?l:Es(e,l)),d=n?s:i,m=useCallback(M=>{n?r?.(M):(u(M),Ms(String(e),M));},[n,r,e]),f=useCallback(M=>m({...d,buy:M}),[d,m]),h=useCallback(M=>m({...d,sell:M}),[d,m]),[c,g]=useState("buy"),[b,S]=useState(),[w,p]=useState(0),[v,E]=useState(0),$=useMemo(()=>V(e),[e]),H=useMemo(()=>{let M=c==="buy"?w:v;return (c==="buy"?d.buy.presets:d.sell.presets)[M]??$},[c,w,v,d,$]),z=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:c,setDirection:g,amount:b,setAmount:S,buyPreset:w,setBuyPreset:p,sellPreset:v,setSellPreset:E,settings:d,updateBuySettings:f,updateSellSettings:h,currentPresetValues:H}),[e,t,o,c,b,w,v,d,f,h,H]);return jsx(Qt.Provider,{value:z,children:a})}var $s=15e3,Hs=1e4;function Ge(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:a}=e,{t:o}=useTranslation(),n=He(),l=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),u=useWallets(),d=chainToNamespace(t),m=useMemo(()=>u.find(T=>T.chainNamespace===d&&T.isConnected),[u,d]),f=m?.address??"",h=useMemo(()=>{let T=[s];return l&&T.push(l.address),i&&T.push(i.address),T.filter(Boolean)},[s,l,i]),c=useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Hs}),g=useMemo(()=>c.data?.find(T=>T.address===s)??null,[c.data,s]),b=useWalletPortfoliosByTokensQuery({chain:t,address:f,tokenAddresses:h},{enabled:!!f&&h.length>0,refetchInterval:$s}),S=l?.address??i?.address??"",w=useMemo(()=>b.data?.find(T=>T.address===S)??null,[b.data,S]),p=useMemo(()=>b.data?.find(T=>T.address===s)??null,[b.data,s]),[v,E]=useState(false),$=useRef(null),H=useCallback(T=>{let U=$.current;$.current=T,E(W=>U===null||U!==T?true:!W);},[]),z=useRef(r);z.current=r;let M=useRef(a);M.current=a;let{swap:Z,isSwapping:F}=se({onSubmitted:T=>z.current?.(T),onError:(T,U)=>M.current?.(T,U)}),Y=useCallback(async()=>{if(!n.amount||!m||!s)return;let T=l?.decimals??9,U=i?.address??l?.address??"",W=n.direction==="buy",oe=W?U:s,ee=W?s:U,ie=W?T:g?.decimals??9,te=new ce(n.amount).shiftedBy(ie).decimalPlaces(0).toString(),le=n.currentPresetValues,P=V(t),B=le.slippage??P.slippage??1,we=le.antiMev!=="off",ke=isSolanaChain(t)?{priorityFee:new ce(le.priorityFee??P.priorityFee??0).shiftedBy(T).decimalPlaces(0).toString(),tipFee:new ce(le.tipFee??P.tipFee??0).shiftedBy(T).decimalPlaces(0).toString(),isAntiMev:we}:{};try{await Z({chain:t,wallet:m,input:oe,output:ee,amount:te,slippage:B,...ke}),n.setAmount(void 0);}catch{}},[n,m,s,l,i,g,t,Z]),J=useMemo(()=>{let T=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return T;let U=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let oe=w?.amount;if(oe&&new ce(oe).lt(n.amount))return `${T}${U}`;let ee=l?.symbol??"",ie=c.data?.find(te=>te.address===S)?.marketData?.priceInUsd;if(ie){let te=formatAmountUSD(new ce(n.amount).times(Number(ie)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=p?.amount;return W&&new ce(W).lt(n.amount)?`${T}${U}`:T},[o,n.direction,n.amount,w,p,l,c.data,S]),Q=!n.amount||!m||!s,ae=c.isPending||b.isPending;return useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:g,nativeBalance:w,tokenBalance:p,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:v,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:ae}),[t,s,l,g,w,p,n,v,H,Y,F,J,Q,ae])}function Se({value:e,onChange:t,chain:s,disableAnimation:r,className:a}){let o=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>ue(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn("space-y-4",a),children:[jsx(er,{value:e.slippage,onChange:i=>o({slippage:i})}),jsx(tr,{value:e[l],onChange:i=>o({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(nr,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx(sr,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:r}),e.autoFee&&jsx(rr,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(ar,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsx(or,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function er({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:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function tr({value:e,onChange:t,feeType:s,symbol:r,decimals:a}){let{t:o}=useTranslation(),n=o(`trade.preset.${s}`),l=o(`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:a},endContent:jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function nr({value:e,onChange:t,symbol:s,decimals:r}){let{t:a}=useTranslation(),o=a("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:[o,jsx(StyledTooltip,{content:a("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":o})]})}function sr({value:e,onChange:t,disableAnimation:s}){let{t:r}=useTranslation(),a=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:[a,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":a,disableAnimation:s})})]})}function rr({value:e,onChange:t,symbol:s}){let{t:r}=useTranslation(),a=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:a}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function ar({value:e,onChange:t,options:s,disableAnimation:r}){let{t:a}=useTranslation(),o=a("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),l=useMemo(()=>({off:{title:a("trade.preset.antiMev.off"),desc:a("trade.preset.antiMev.off.desc")},reduced:{title:a("trade.preset.antiMev.reduced"),desc:a("trade.preset.antiMev.reduced.desc")},secure:{title:a("trade.preset.antiMev.secure"),desc:a("trade.preset.antiMev.secure.desc")}}),[a]);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:a("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":o,children:s.map(i=>{let u=n[i],d=l[i];return jsx(Tab,{title:jsx(StyledTooltip,{content:jsxs("div",{className:"text-xs",children:[jsx("div",{className:"font-medium text-foreground",children:d.title}),jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsx("span",{className:"flex items-center justify-center",children:jsx(u,{width:18,height:18})})})},i)})})})]})}function or({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:a=>t(a||null),placeholder:"https://...","aria-label":r})})]})}function Ze({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:m,nativeBalance:f,tokenBalance:h,amountConversion:c,preset:g,onPresetChange:b,presetValues:S,onPresetSettingsChange:w,showSettings:p,onPresetClick:v,submitText:E,isDisabled:$,isLoading:H,onSubmit:z,className:M,headerExtra:Z}){let{t:F}=useTranslation(),Y=useMemo(()=>getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxs("div",{className:cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",M),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:cn("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(br,{amount:r,onAmountChange:a,customAmounts:o,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsx(yr,{amount:r,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:m,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"?f?`${f} ${J??""}`:"--":h?`${h} ${m??""}`:"--"})]}),c&&jsx("div",{className:"text-xs text-neutral",children:c})]}),jsx("div",{className:"mt-4",children:jsx(Sr,{values:S,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:`${g}`,onSelectionChange:ae=>b(Number(ae)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsx(Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>v(0)},0),jsx(Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>v(1)},1),jsx(Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>v(2)},2)]})}),p&&jsx("div",{className:"mt-2.5",children:jsx(Se,{value:S,onChange:w,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:E})]})}function br({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:a,nativeSymbol:o,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:o??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Zt,{values:s,onSelect:r,onEdit:a})]})}function yr({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:a,tokenSymbol:o,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:o??""}),classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Zt,{values:s,onSelect:r,onEdit:a,suffix:"%"})]})}function Zt({values:e,onSelect:t,onEdit:s,suffix:r}){let[a,o]=useState(false),[n,l]=useState([]),i=useCallback(()=>{l([...e]),o(true);},[e]),u=useCallback(()=>{o(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((d,m)=>jsx("div",{className:cn("h-6 bg-content2 flex items-center justify-center",m===0&&"rounded-bl-lg"),children:a?jsx(NumberInput,{fullWidth:true,value:n[m]===null||n[m]===void 0?void 0:n[m],onChange:f=>{if(typeof f=="number"){let h=isNaN(f)?null:f;l(c=>{let g=[...c];return g[m]=h,g});}},min:0,hideStepper:true,classNames:{inputWrapper:cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",m===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[m]!=null&&t(e[m]),endContent:r?jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[m]??""})},m))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?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 Sr({values:e,chain:t}){let{t:s}=useTranslation(),r=useMemo(()=>ue(t),[t]),a=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:[a==="off"&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),a==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),a==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${a}`)})})]})}function vr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:a,onSettingsChange:o,headerExtra:n,className:l}){return jsx(Qe,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsx(Tr,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:l})})}function Tr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:a,className:o}){let n=Ge({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),l=useCallback(c=>n.setAmount(c),[n]),i=useCallback(c=>{let g=n.tokenBalance?.amount;if(!g)return;let b=new ce(g).times(c).div(100).toNumber();n.setAmount(b);},[n]),u=useCallback(c=>{n.updateBuySettings({...n.settings.buy,customAmounts:c});},[n]),d=useCallback(c=>{n.updateSellSettings({...n.settings.sell,customPercentages:c});},[n]),m=useCallback(c=>{let g=n.direction==="buy",b=g?n.buyPreset:n.sellPreset;if(g){let S=n.settings.buy,w=[...S.presets];w[b]=c,n.updateBuySettings({...S,presets:w});}else {let S=n.settings.sell,w=[...S.presets];w[b]=c,n.updateSellSettings({...S,presets:w});}},[n]),f=useCallback(c=>{n.direction==="buy"?n.setBuyPreset(c):n.setSellPreset(c);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(Ze,{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:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:m,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function et(e){let{id:t,chain:s,token:r,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:l}=e,[i,u]=useAtom(j(G(t,s,r.address,a))),d=useAtomValue(L(D(s,"buy",0,a))),m=useAtomValue(L(D(s,"buy",1,a))),f=useAtomValue(L(D(s,"buy",2,a))),h=useMemo(()=>[d,m,f],[d,m,f]),c=useCallback(b=>{u(S=>({...S,amount:b})),o?.(b);},[u,o]),g=useCallback(b=>{u(S=>({...S,preset:b})),n?.(b);},[u,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:c,preset:i.preset,handlePresetChange:g,onPresetClick:l,presetValues:h}}function tt({token:e,chain:t,amount:s,onAmountChange:r,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:d}){let{t:m}=useTranslation(),{isMobile:f}=useScreen(),h=useRef(null),c=useMemo(()=>V(t),[t]),[g,b]=useState(null),S=useCallback(w=>{o?.(Number(w));},[o]);return jsxs("div",{ref:h,className:cn("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",d),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:w=>r(isNaN(w)?void 0:w),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":m("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(a),onSelectionChange:S,classNames:{base:"flex-none h-full",tabList:cn("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("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((w,p)=>jsx(Tab,{title:f?jsx("span",{onClick:v=>{a===p&&(v.stopPropagation(),b(E=>E===p?null:p));},children:m("trade.preset.short",{n:p+1})}):jsx(StyledTooltip,{content:jsx(rn,{label:m("trade.preset.short",{n:p+1}),values:l?.[p]??c,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:()=>a===p&&n?.(p),children:m("trade.preset.short",{n:p+1})})})},String(p)))}),f&&g!==null&&jsx($r,{label:m("trade.preset.short",{n:g+1}),values:l?.[g]??c,chain:t,onClose:()=>b(null),containerRef:h})]})}function $r({label:e,values:t,chain:s,onClose:r,containerRef:a}){let o=useRef(null);return useEffect(()=>{let n=l=>{let i=l.target;o.current&&!o.current.contains(i)&&a.current&&!a.current.contains(i)&&r();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[r,a]),jsx("div",{ref:o,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(rn,{label:e,values:t,chain:s})})}function rn({label:e,values:t,chain:s}){let{t:r}=useTranslation(),a=useMemo(()=>ue(s),[s]),o=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("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.${a.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.priorityFee??0)," ",jsx("span",{className:"text-zinc-500",children:a.feeUnit})]})]}),a.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:a.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:[o==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),o==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),o==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.antiMev")})]}),jsx("span",{className:cn("text-xs font-medium",o==="off"&&"text-zinc-500",o==="reduced"&&"text-amber-400",o==="secure"&&"text-emerald-400"),children:r(`trade.preset.antiMev.${o}`)})]})]})}function Hr({size:e,radius:t,className:s,...r}){let{token:a,chain:o,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:d,presetValues:m}=et(r);return jsx(tt,{token:a,chain:o,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:d,presetValues:m,size:e,radius:t,className:s})}function nt(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:a,onChange:o}=e,[n,l]=useState(r),[i,u]=useAtom(L(D(t,n,s,a))),d=useCallback(m=>{u(m),o?.(n,m);},[u,o,n]);return {direction:n,setDirection:l,value:i,handleChange:d}}function rt({disableAnimation:e,className:t,...s}){let{t:r}=useTranslation(),{direction:a,setDirection:o,value:n,handleChange:l}=nt(s);return jsxs("div",{className:cn("space-y-3",t),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:a,onSelectionChange:i=>o(i),"aria-label":"Buy / Sell",children:[jsx(Tab,{title:r("common.buy")},"buy"),jsx(Tab,{title:r("common.sell")},"sell")]}),jsx(Se,{value:n,onChange:l,chain:s.chain,disableAnimation:e})]})}var ea=3;function at(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,a]=useState(t),o=useCallback((n,l)=>{s?.(r,n,l);},[s,r]);return {presetCount:ea,presetIndex:r,setPresetIndex:a,handlePresetChange:o}}function it({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:a}=useTranslation(),{presetCount:o,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=at(r);return jsxs("div",{className:cn("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":a("trade.preset.presets"),children:Array.from({length:o},(u,d)=>jsx(Tab,{title:a("trade.preset.label",{n:d+1})},String(d)))}),jsx(rt,{chain:r.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var ha="preset";function ba({id:e=ha}){return jsx(AsyncModal,{id:e,children:t=>jsx(ya,{...t})})}function ya({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=useTranslation(),{chains:a,defaultChain:o,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[d,m]=useState(o??a[0]);useEffect(()=>{m(o??a[0]);},[o,a]);let f=useCallback((h,c,g)=>{u?.(d,h,c,g);},[u,d]);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:a,chain:d,onSelectChain:m})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(it,{chain:d,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:f})})})]})})}function Me(e,t,s,r,a){let o=V(a),n=new ce(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new ce(r.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new ce(r.tipFee??o.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??o.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function mt(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(j(G(t,s,r.address,o))),d=useAtomValue(L(D(s,"buy",u,o))),m=useConnectedWallet(s),{swap:f,isSwapping:h}=se({onSubmitted:n,onError:l}),c=!i||!a,g=useAuthCallback(async()=>{if(!i||!m||!a)return;let b=Me(i,r,a,d,s);try{await f({...b,chain:s,wallet:m});}catch{}},[m,i,a,s,r,d,f]);return useMemo(()=>({amount:i,token:r,isDisabled:c,isSwapping:h,handleSwap:g}),[i,r,c,h,g])}function Na({size:e="sm",radius:t,color:s="primary",className:r,...a}){let{amount:o,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=mt(a);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:o!=null?`${o} ${n.symbol}`:n.symbol})}var dn=createContext(null);function Ma({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let a=useConnectedWallet(e),{swap:o}=se({onSubmitted:t,onError:s}),n=useRef(a);n.current=a;let l=useRef(o);l.current=o;let i=useRef(e);i.current=e;let u=useCallback(async m=>{let f=n.current;f&&await l.current({...m,wallet:f,chain:i.current});},[]),d=useAuthCallback(u,[]);return jsx(dn.Provider,{value:d,children:r})}function pt(){let e=useContext(dn);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ft(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o}=e,{amount:n,preset:l}=useAtomValue(j(G(t,s,r.address,o))),i=useAtomValue(L(D(s,"buy",l,o))),u=pt(),{t:d}=useTranslation(),[m,f]=useState(false),h=!a,c=useRef(r);c.current=r;let g=useRef(i);g.current=i;let b=useRef(s);b.current=s;let S=useCallback(async()=>{if(!a)return;if(!n){toast(d("trade.instantTradeAmountRequired"));return}let w=Me(n,c.current,a,g.current,b.current);f(true);try{await u(w);}catch{}finally{f(false);}},[n,a,u,d]);return useMemo(()=>({amount:n,token:r,isDisabled:h,isSwapping:m,handleSwap:S}),[n,r,h,m,S])}var Ha=memo(function({size:t="sm",radius:s,color:r="primary",className:a,...o}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:d}=ft(o),m=n!=null?`${formatAmountCompact(n)} ${l.symbol}`:void 0;return jsx(Button,{variant:"solid",size:t,radius:s,color:r,className:cn("min-w-0 w-auto flex-none",a),disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:d,style:{background:"linear-gradient(rgba(199,255,46,0.08), rgba(199,255,46,0.08)), #0a0a0b",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:m})});
2
- export{tt as AmountPresetInputUI,Hr as AmountPresetInputWidget,bt as DEFAULT_BSC_TRADE_PRESET,ht as DEFAULT_EVM_TRADE_PRESET,Fs as DEFAULT_INSTANT_TRADE_SETTINGS,St as DEFAULT_SELL_PERCENTAGES,xt as DEFAULT_SOL_TRADE_PRESET,Na as InstantTradeButtonWidget,Ha as InstantTradeListButtonWidget,Qe as InstantTradeProvider,Ma as InstantTradeSwapProvider,Ze as InstantTradeUI,vr as InstantTradeWidget,it as MultiPresetFormWidget,ba as PresetFormModal,Se as PresetFormUI,rt as PresetFormWidget,We as SwapPreviewModal,ne as SwapRouteExpiredError,Ke as SwapUI,Ts as SwapWidget,ue as getChainPresetFeatures,yt as getDefaultBuyAmounts,V as getDefaultPresetForChain,j as instantTradeAmountAtomFamily,G as instantTradeAmountKey,L as presetAtomFamily,D as presetKey,et as useAmountPresetInputScript,He as useInstantTrade,Za as useInstantTradeAmount,mt as useInstantTradeButtonScript,ft as useInstantTradeListButtonScript,Ge as useInstantTradeScript,pt as useInstantTradeSwap,at as useMultiPresetFormScript,nt as usePresetFormScript,uo as usePresetValues,se as useSwap,At as useSwapRoutePolling,Le as useSwapScript,It as useTxConfirmation};//# sourceMappingURL=index.mjs.map
1
+ import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {formatAmount,isSolanaChain,isBinanceChain,getNativeToken,formatAmountInUsd,getWrappedToken,chainToNamespace,formatPercent,formatPrice}from'@liberfi.io/utils';import {createContext,memo,useState,useRef,useCallback,useMemo,useContext,useEffect}from'react';import {useDexClient,useLatestBlockFetcher,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,SwapMode,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,cn,Spinner,LightningIcon,toast,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,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 ce from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var hn="liberfi.",xn={amount:void 0,preset:0};function yn(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function bn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,id:a,chain:o,tokenAddress:n}}function G(e,t,s,r=hn){return `${r}:${e}.${t}.${s}`}var j=atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:a}=bn(e);return atomWithStorage(yn(t,s,String(r),a),xn,void 0,{getOnInit:true})});function to({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return useAtomValue(j(G(e,t,s,r)))}var ne=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},ht={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},yt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},vn={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]},Pn=[1,10,25,50];function bt(e){return vn[e]??Pn}var St=[10,25,50,100];function ue(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)?ht:isBinanceChain(e)?yt:xt}var Nn="liberfi.";function An(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function In(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,chain:a,direction:o,index:Number(n)}}function D(e,t,s,r=Nn){return `${r}:${e}.${t}.${s}`}var L=atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:a}=In(e);return atomWithStorage(An(t,String(s),r,a),V(s),void 0,{getOnInit:true})});function fo({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return useAtomValue(L(D(e,t,s,r)))}var kn=150,Mn=12e3,wt=60,Tt=40;function Re(e,t,s,r){if(!isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!s.data||Date.now()-s.dataUpdatedAt>Mn)throw new ne("Latest Solana block data is stale. Please refresh the quote.");let a=s.data.lastValidBlockHeight-kn;if(t.lastValidBlockHeight-a<r)throw new ne("Swap route is close to blockhash expiry. Please refresh the quote.")}function Ct(e){let t=(e instanceof Error?e.message:String(e)).toLowerCase();return t.includes("block height exceeded")||t.includes("blockhash not found")||t.includes("blockhashnotfound")}var Vn=6e3,Kn=6e3;function pe(e){return e instanceof Error?e:new Error(String(e))}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 Hn(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function se(e){let{client:t}=useDexClient(),[s,r]=useState(false),a=useRef(e);a.current=e;let o=useMemo(()=>({chain:Chain.SOLANA}),[]),n=useLatestBlockFetcher(o),l=useCallback(async i=>{let{wallet:u,chain:d,...m}=i,f=isSolanaChain(d);r(true);try{let x=t.swapRoute({chain:d,userAddress:u.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}),c=f?n({staleTime:Vn}).then(p=>({ok:!0,value:p}),p=>({ok:!1,error:pe(p)})):void 0,g;try{g=await x;}catch(p){let w=pe(p);throw a.current?.onError?.(w,"route"),w}if(f&&g.lastValidBlockHeight!=null)try{let p=await c;if(!p.ok)throw new ne("Unable to validate latest Solana block data. Please refresh the quote.");Re(d,g,p.value,wt);}catch(p){let w=pe(p);throw a.current?.onError?.(w,"expired"),w}let y;try{let p=$n(g.serializedTx);y=await u.signTransaction(p);}catch(p){let w=pe(p);throw a.current?.onError?.(w,"sign"),w}if(f&&g.lastValidBlockHeight!=null)try{Re(d,g,await n({staleTime:Kn}),Tt);}catch(p){let w=pe(p);throw a.current?.onError?.(w,"expired"),w}let S;try{let p=Hn(y);S=await t.sendTx({chain:d,serializedTx:p});}catch(p){if(f&&Ct(p)){let E=new ne("Swap route expired before transaction submission. Please refresh the quote.");throw a.current?.onError?.(E,"expired"),E}let w=pe(p);throw a.current?.onError?.(w,"send"),w}let P={txHash:S.txHash,extra:S.extra};return a.current?.onSubmitted?.(P),P}finally{r(false);}},[t,n]);return useMemo(()=>({swap:l,isSwapping:s}),[l,s])}var qn=12e3;function At(e,t){let s=t?.interval??qn,r=t?.paused??false,a=useRef(t);a.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&&a.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var es=6e4;function It(e){let{client:t}=useDexClient(),[s,r]=useState(()=>new Map),a=useRef(e);a.current=e;let o=useCallback((u,d)=>{r(m=>{let f=m.get(u);if(!f||f.status===d)return m;let x=new Map(m);return x.set(u,{...f,status:d}),x});},[]),n=useCallback((u,d)=>{r(f=>{if(f.has(d))return f;let x=new Map(f);return x.set(d,{chain:u,txHash:d,status:"pending"}),x});let m=a.current?.timeout??es;t.checkTxSuccess(u,d,m).then(f=>{if(f)o(d,"confirmed"),a.current?.onConfirmed?.(d);else {let x=new Error("Transaction failed on-chain");o(d,"failed"),a.current?.onFailed?.(d,x);}}).catch(f=>{let x=f instanceof Error?f:new Error(String(f));o(d,"failed"),a.current?.onFailed?.(d,x);});},[t,o]),l=useCallback(u=>{r(d=>{if(!d.has(u))return d;let m=new Map(d);return m.delete(u),m});},[]),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 rs=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function as(e){return rs.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var os=1e4,is=15e3;function ls(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let a=r.padStart(t+1,"0"),o=a.slice(0,a.length-t)||"0",l=a.slice(a.length-t).replace(/0+$/,"");return l?`${o}.${l}`:o}function Le(e){let{chain:t}=e,s=useWallets(),r=as(t),a=useMemo(()=>s.find(v=>v.chainNamespace===r&&v.isConnected),[s,r]),o=a?.address??"",[n,l]=useState(e.from??""),[i,u]=useState(e.to??""),d=useRef(e.from),m=useRef(e.to);useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==m.current&&(m.current=e.to,e.to&&u(e.to));},[e.to]);let f=useMemo(()=>[n,i].filter(Boolean),[n,i]),x=useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:os}),c=useMemo(()=>x.data?.find(v=>v.address===n)??null,[x.data,n]),g=useMemo(()=>x.data?.find(v=>v.address===i)??null,[x.data,i]),y=useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:f},{enabled:!!o&&f.length>0,refetchInterval:is}),S=useMemo(()=>y.data?.find(v=>v.address===n)??null,[y.data,n]),P=useMemo(()=>y.data?.find(v=>v.address===i)??null,[y.data,i]),[p,w]=useState(void 0),E=useMemo(()=>{if(!p||c?.decimals==null)return;let v=p.split("."),B=v[0]??"0",Me=(v[1]??"").slice(0,c.decimals).padEnd(c.decimals,"0");return (B+Me).replace(/^0+/,"")||"0"},[p,c?.decimals]),$=useMemo(()=>{if(!p||!c?.marketData?.priceInUsd)return;let v=Number(c.marketData.priceInUsd),B=Number(p)*v;return Number.isFinite(B)?B.toString():void 0},[p,c?.marketData?.priceInUsd]),H=useCallback(()=>{if(!S)return;let v=Number(S.amount);if(!Number.isFinite(v)||v<=0)return;let B=v/2,Pe=c?.decimals??9;w(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:Pe}));},[S,c?.decimals]),z=useCallback(()=>{if(!S)return;let v=Number(S.amount);if(!Number.isFinite(v)||v<=0)return;let B=c?.decimals??9;w(v.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[S,c?.decimals]),k=useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:SwapMode.EXACT_IN,amount:E}),[t,o,n,i,E]),Z=useRef(false),{route:F,isRouting:Y,error:J}=At(k,{paused:Z.current}),Q=useMemo(()=>F&&g?ls(F.plans,g.decimals):void 0,[F,g]),ae=useMemo(()=>{if(!Q||!g?.marketData?.priceInUsd)return;let v=Number(g.marketData.priceInUsd),B=Number(Q)*v;return Number.isFinite(B)?B.toString():void 0},[Q,g?.marketData?.priceInUsd]),{swap:T,isSwapping:R}=se();Z.current=R;let W=useRef(e.onComplete);W.current=e.onComplete;let{track:oe,transactions:ee}=It({onConfirmed:v=>{W.current?.({success:true,txHash:v});},onFailed:v=>{W.current?.({success:false,txHash:v});}}),ie=useMemo(()=>{if(ee.size===0)return "idle";let v=Array.from(ee.values());return v[v.length-1].status},[ee]),te=useCallback(async()=>{if(!(!a||!F||!n||!i||!E))try{let v=await T({chain:t,wallet:a,input:n,output:i,amount:E,mode:SwapMode.EXACT_IN});oe(t,v.txHash);}catch{}},[a,F,t,n,i,E,T,oe]),le=x.isPending||y.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:c,toToken:g,fromBalance:S,toBalance:P,amount:p,setAmount:w,setHalfAmount:H,setMaxAmount:z,amountInDecimals:E,amountInUsd:$,outputAmount:Q,outputAmountInUsd:ae,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:R,txStatus:ie,isLoading:le}),[n,i,c,g,S,P,p,H,z,E,$,Q,ae,F,Y,J,te,R,ie,le])}function We({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:d,routeError:m,onConfirm:f,isSwapping:x}){let{t:c}=useTranslation(),[g,y]=useState(false),S=useCallback(()=>y(p=>!p),[]),P=useMemo(()=>u?u.plans.map((p,w)=>({key:`plan-${w}`,name:p.name,input:p.input,inputAmount:p.inputAmount,output:p.output,outputAmount:p.outputAmount,feeQuote:p.feeQuote,feeAmount:p.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:c("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:c("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"}),a&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(Ps,{}),jsxs("span",{children:[_e(a.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:_e(o)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ut(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:c("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:Ce(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:_e(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ut(i)]})]})]})]}),g&&P.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:c("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:P.map(p=>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:c("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:p.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:c("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[Oe(p.inputAmount)," ",Ce(p.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[Oe(p.outputAmount)," ",Ce(p.output)]})]})]}),p.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:c("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[Oe(p.feeAmount)," ",Ce(p.feeQuote)]})]})]},p.key))})]}),P.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:g?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:S,children:c(g?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!m,isLoading:!u&&d||x,onPress:f,children:c("common.confirm")})})]})})}function Ps(){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 Ut(e){let t=formatAmountInUsd(e??0);return t.startsWith("$")?t.slice(1):t}function _e(e){return formatAmount(e??0)}function Oe(e){return formatAmount(e??0)}function Ce(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ke({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:m,onToTokenSelect:f,route:x,isRouting:c,routeError:g,onPreview:y,isSwapping:S,className:P}){let{t:p}=useTranslation();return jsxs("div",{className:cn("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:p("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:a??"",onChange:w=>n(w.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsx(Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>m(""),children:e?e.symbol:p("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 $",Wt(o)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Ot,{}),jsxs("span",{className:"text-neutral",children:[Vt(s.amount)," ",s.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:p("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:p("common.max")})]})]}),g&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:g.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:p("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("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsx(Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>f(""),children:t?t.symbol:p("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 $",Wt(d)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Ot,{}),jsxs("span",{className:"text-neutral",children:[Vt(r.amount)," ",r.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!x,isLoading:!x&&c,onPress:y,children:p(S?"trade.swap.swapping":c?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Ot(){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 Wt(e){let t=formatAmountInUsd(e??0);return t.startsWith("$")?t.slice(1):t}function Vt(e){return formatAmount(e??0)}function Is({chain:e,from:t,to:s,onComplete:r,className:a}){let o=Le({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),d=useCallback(async()=>{await o.swap(),u();},[o,u]);return jsxs(Fragment,{children:[jsx(Ke,{fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,toBalance:o.toBalance,amount:o.amount,amountInUsd:o.amountInUsd,onAmountChange:o.setAmount,onHalfAmount:o.setHalfAmount,onMaxAmount:o.setMaxAmount,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,onFromTokenSelect:o.setFromTokenAddress,onToTokenSelect:o.setToTokenAddress,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onPreview:l,isSwapping:o.isSwapping,className:a}),jsx(We,{isOpen:n,onOpenChange:i,fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,inputAmount:o.amount,inputAmountInUsd:o.amountInUsd,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onConfirm:d,isSwapping:o.isSwapping})]})}function Ht(e){let t=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:bt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...St],presets:[{...t},{...t},{...t}]}}}var Rs=Ht("900900900");function Qt(e){return `liberfi.instant-trade.settings.${e}`}function Us(e,t){try{let s=localStorage.getItem(Qt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function Bs(e,t){try{localStorage.setItem(Qt(e),JSON.stringify(t));}catch{}}var zt=createContext(null);function He(){let e=useContext(zt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Qe({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:a}){let o=useMemo(()=>getNativeToken(e),[e]),n=s!==void 0,l=useMemo(()=>Ht(e),[e]),[i,u]=useState(()=>n?l:Us(e,l)),d=n?s:i,m=useCallback(k=>{n?r?.(k):(u(k),Bs(String(e),k));},[n,r,e]),f=useCallback(k=>m({...d,buy:k}),[d,m]),x=useCallback(k=>m({...d,sell:k}),[d,m]),[c,g]=useState("buy"),[y,S]=useState(),[P,p]=useState(0),[w,E]=useState(0),$=useMemo(()=>V(e),[e]),H=useMemo(()=>{let k=c==="buy"?P:w;return (c==="buy"?d.buy.presets:d.sell.presets)[k]??$},[c,P,w,d,$]),z=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:c,setDirection:g,amount:y,setAmount:S,buyPreset:P,setBuyPreset:p,sellPreset:w,setSellPreset:E,settings:d,updateBuySettings:f,updateSellSettings:x,currentPresetValues:H}),[e,t,o,c,y,P,w,d,f,x,H]);return jsx(zt.Provider,{value:z,children:a})}var Gs=15e3,js=1e4;function Ge(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:a}=e,{t:o}=useTranslation(),n=He(),l=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),u=useWallets(),d=chainToNamespace(t),m=useMemo(()=>u.find(T=>T.chainNamespace===d&&T.isConnected),[u,d]),f=m?.address??"",x=useMemo(()=>{let T=[s];return l&&T.push(l.address),i&&T.push(i.address),T.filter(Boolean)},[s,l,i]),c=useTokensQuery({chain:t,addresses:x},{enabled:x.length>0,refetchInterval:js}),g=useMemo(()=>c.data?.find(T=>T.address===s)??null,[c.data,s]),y=useWalletPortfoliosByTokensQuery({chain:t,address:f,tokenAddresses:x},{enabled:!!f&&x.length>0,refetchInterval:Gs}),S=l?.address??i?.address??"",P=useMemo(()=>y.data?.find(T=>T.address===S)??null,[y.data,S]),p=useMemo(()=>y.data?.find(T=>T.address===s)??null,[y.data,s]),[w,E]=useState(false),$=useRef(null),H=useCallback(T=>{let R=$.current;$.current=T,E(W=>R===null||R!==T?true:!W);},[]),z=useRef(r);z.current=r;let k=useRef(a);k.current=a;let{swap:Z,isSwapping:F}=se({onSubmitted:T=>z.current?.(T),onError:(T,R)=>k.current?.(T,R)}),Y=useCallback(async()=>{if(!n.amount||!m||!s)return;let T=l?.decimals??9,R=i?.address??l?.address??"",W=n.direction==="buy",oe=W?R:s,ee=W?s:R,ie=W?T:g?.decimals??9,te=new ce(n.amount).shiftedBy(ie).decimalPlaces(0).toString(),le=n.currentPresetValues,v=V(t),B=le.slippage??v.slippage??1,Pe=le.antiMev!=="off",Me=isSolanaChain(t)?{priorityFee:new ce(le.priorityFee??v.priorityFee??0).shiftedBy(T).decimalPlaces(0).toString(),tipFee:new ce(le.tipFee??v.tipFee??0).shiftedBy(T).decimalPlaces(0).toString(),isAntiMev:Pe}:{};try{await Z({chain:t,wallet:m,input:oe,output:ee,amount:te,slippage:B,...Me}),n.setAmount(void 0);}catch{}},[n,m,s,l,i,g,t,Z]),J=useMemo(()=>{let T=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return T;let R=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let oe=P?.amount;if(oe&&new ce(oe).lt(n.amount))return `${T}${R}`;let ee=l?.symbol??"",ie=c.data?.find(te=>te.address===S)?.marketData?.priceInUsd;if(ie){let te=formatAmountInUsd(new ce(n.amount).times(Number(ie)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=p?.amount;return W&&new ce(W).lt(n.amount)?`${T}${R}`:T},[o,n.direction,n.amount,P,p,l,c.data,S]),Q=!n.amount||!m||!s,ae=c.isPending||y.isPending;return useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:g,nativeBalance:P,tokenBalance:p,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:w,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:ae}),[t,s,l,g,P,p,n,w,H,Y,F,J,Q,ae])}function Se({value:e,onChange:t,chain:s,disableAnimation:r,className:a}){let o=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>ue(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn("space-y-4",a),children:[jsx(rr,{value:e.slippage,onChange:i=>o({slippage:i})}),jsx(ar,{value:e[l],onChange:i=>o({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(or,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx(ir,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:r}),e.autoFee&&jsx(lr,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(ur,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsx(mr,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function rr({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:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function ar({value:e,onChange:t,feeType:s,symbol:r,decimals:a}){let{t:o}=useTranslation(),n=o(`trade.preset.${s}`),l=o(`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:a},endContent:jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function or({value:e,onChange:t,symbol:s,decimals:r}){let{t:a}=useTranslation(),o=a("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:[o,jsx(StyledTooltip,{content:a("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":o})]})}function ir({value:e,onChange:t,disableAnimation:s}){let{t:r}=useTranslation(),a=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:[a,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":a,disableAnimation:s})})]})}function lr({value:e,onChange:t,symbol:s}){let{t:r}=useTranslation(),a=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:a}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function ur({value:e,onChange:t,options:s,disableAnimation:r}){let{t:a}=useTranslation(),o=a("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),l=useMemo(()=>({off:{title:a("trade.preset.antiMev.off"),desc:a("trade.preset.antiMev.off.desc")},reduced:{title:a("trade.preset.antiMev.reduced"),desc:a("trade.preset.antiMev.reduced.desc")},secure:{title:a("trade.preset.antiMev.secure"),desc:a("trade.preset.antiMev.secure.desc")}}),[a]);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:a("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":o,children:s.map(i=>{let u=n[i],d=l[i];return jsx(Tab,{title:jsx(StyledTooltip,{content:jsxs("div",{className:"text-xs",children:[jsx("div",{className:"font-medium text-foreground",children:d.title}),jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsx("span",{className:"flex items-center justify-center",children:jsx(u,{width:18,height:18})})})},i)})})})]})}function mr({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:a=>t(a||null),placeholder:"https://...","aria-label":r})})]})}function Ze({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:m,nativeBalance:f,tokenBalance:x,amountConversion:c,preset:g,onPresetChange:y,presetValues:S,onPresetSettingsChange:P,showSettings:p,onPresetClick:w,submitText:E,isDisabled:$,isLoading:H,onSubmit:z,className:k,headerExtra:Z}){let{t:F}=useTranslation(),Y=useMemo(()=>getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxs("div",{className:cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",k),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:cn("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(Pr,{amount:r,onAmountChange:a,customAmounts:o,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsx(wr,{amount:r,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:m,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"?f?`${f} ${J??""}`:"--":x?`${x} ${m??""}`:"--"})]}),c&&jsx("div",{className:"text-xs text-neutral",children:c})]}),jsx("div",{className:"mt-4",children:jsx(Tr,{values:S,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:`${g}`,onSelectionChange:ae=>y(Number(ae)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsx(Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>w(0)},0),jsx(Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>w(1)},1),jsx(Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>w(2)},2)]})}),p&&jsx("div",{className:"mt-2.5",children:jsx(Se,{value:S,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:E})]})}function Pr({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:a,nativeSymbol:o,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:o??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Yt,{values:s,onSelect:r,onEdit:a})]})}function wr({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:a,tokenSymbol:o,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:o??""}),classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Yt,{values:s,onSelect:r,onEdit:a,suffix:"%"})]})}function Yt({values:e,onSelect:t,onEdit:s,suffix:r}){let[a,o]=useState(false),[n,l]=useState([]),i=useCallback(()=>{l([...e]),o(true);},[e]),u=useCallback(()=>{o(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((d,m)=>jsx("div",{className:cn("h-6 bg-content2 flex items-center justify-center",m===0&&"rounded-bl-lg"),children:a?jsx(NumberInput,{fullWidth:true,value:n[m]===null||n[m]===void 0?void 0:n[m],onChange:f=>{if(typeof f=="number"){let x=isNaN(f)?null:f;l(c=>{let g=[...c];return g[m]=x,g});}},min:0,hideStepper:true,classNames:{inputWrapper:cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",m===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[m]!=null&&t(e[m]),endContent:r?jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[m]??""})},m))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?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 Tr({values:e,chain:t}){let{t:s}=useTranslation(),r=useMemo(()=>ue(t),[t]),a=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:[a==="off"&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),a==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),a==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${a}`)})})]})}function Ar({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:a,onSettingsChange:o,headerExtra:n,className:l}){return jsx(Qe,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsx(Ir,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:l})})}function Ir({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:a,className:o}){let n=Ge({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),l=useCallback(c=>n.setAmount(c),[n]),i=useCallback(c=>{let g=n.tokenBalance?.amount;if(!g)return;let y=new ce(g).times(c).div(100).toNumber();n.setAmount(y);},[n]),u=useCallback(c=>{n.updateBuySettings({...n.settings.buy,customAmounts:c});},[n]),d=useCallback(c=>{n.updateSellSettings({...n.settings.sell,customPercentages:c});},[n]),m=useCallback(c=>{let g=n.direction==="buy",y=g?n.buyPreset:n.sellPreset;if(g){let S=n.settings.buy,P=[...S.presets];P[y]=c,n.updateBuySettings({...S,presets:P});}else {let S=n.settings.sell,P=[...S.presets];P[y]=c,n.updateSellSettings({...S,presets:P});}},[n]),f=useCallback(c=>{n.direction==="buy"?n.setBuyPreset(c):n.setSellPreset(c);},[n]),x=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(Ze,{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:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:x,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:m,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function et(e){let{id:t,chain:s,token:r,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:l}=e,[i,u]=useAtom(j(G(t,s,r.address,a))),d=useAtomValue(L(D(s,"buy",0,a))),m=useAtomValue(L(D(s,"buy",1,a))),f=useAtomValue(L(D(s,"buy",2,a))),x=useMemo(()=>[d,m,f],[d,m,f]),c=useCallback(y=>{u(S=>({...S,amount:y})),o?.(y);},[u,o]),g=useCallback(y=>{u(S=>({...S,preset:y})),n?.(y);},[u,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:c,preset:i.preset,handlePresetChange:g,onPresetClick:l,presetValues:x}}function tt({token:e,chain:t,amount:s,onAmountChange:r,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:d}){let{t:m}=useTranslation(),{isMobile:f}=useScreen(),x=useRef(null),c=useMemo(()=>V(t),[t]),[g,y]=useState(null),S=useCallback(P=>{o?.(Number(P));},[o]);return jsxs("div",{ref:x,className:cn("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",d),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":m("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(a),onSelectionChange:S,classNames:{base:"flex-none h-full",tabList:cn("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("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,p)=>jsx(Tab,{title:f?jsx("span",{onClick:w=>{a===p&&(w.stopPropagation(),y(E=>E===p?null:p));},children:m("trade.preset.short",{n:p+1})}):jsx(StyledTooltip,{content:jsx(an,{label:m("trade.preset.short",{n:p+1}),values:l?.[p]??c,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:()=>a===p&&n?.(p),children:m("trade.preset.short",{n:p+1})})})},String(p)))}),f&&g!==null&&jsx(Gr,{label:m("trade.preset.short",{n:g+1}),values:l?.[g]??c,chain:t,onClose:()=>y(null),containerRef:x})]})}function Gr({label:e,values:t,chain:s,onClose:r,containerRef:a}){let o=useRef(null);return useEffect(()=>{let n=l=>{let i=l.target;o.current&&!o.current.contains(i)&&a.current&&!a.current.contains(i)&&r();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[r,a]),jsx("div",{ref:o,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(an,{label:e,values:t,chain:s})})}function an({label:e,values:t,chain:s}){let{t:r}=useTranslation(),a=useMemo(()=>ue(s),[s]),o=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("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.${a.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.priorityFee??0)," ",jsx("span",{className:"text-zinc-500",children:a.feeUnit})]})]}),a.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:a.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:[o==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),o==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),o==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.antiMev")})]}),jsx("span",{className:cn("text-xs font-medium",o==="off"&&"text-zinc-500",o==="reduced"&&"text-amber-400",o==="secure"&&"text-emerald-400"),children:r(`trade.preset.antiMev.${o}`)})]})]})}function jr({size:e,radius:t,className:s,...r}){let{token:a,chain:o,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:d,presetValues:m}=et(r);return jsx(tt,{token:a,chain:o,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:d,presetValues:m,size:e,radius:t,className:s})}function nt(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:a,onChange:o}=e,[n,l]=useState(r),[i,u]=useAtom(L(D(t,n,s,a))),d=useCallback(m=>{u(m),o?.(n,m);},[u,o,n]);return {direction:n,setDirection:l,value:i,handleChange:d}}function rt({disableAnimation:e,className:t,...s}){let{t:r}=useTranslation(),{direction:a,setDirection:o,value:n,handleChange:l}=nt(s);return jsxs("div",{className:cn("space-y-3",t),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:a,onSelectionChange:i=>o(i),"aria-label":"Buy / Sell",children:[jsx(Tab,{title:r("common.buy")},"buy"),jsx(Tab,{title:r("common.sell")},"sell")]}),jsx(Se,{value:n,onChange:l,chain:s.chain,disableAnimation:e})]})}var ra=3;function at(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,a]=useState(t),o=useCallback((n,l)=>{s?.(r,n,l);},[s,r]);return {presetCount:ra,presetIndex:r,setPresetIndex:a,handlePresetChange:o}}function it({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:a}=useTranslation(),{presetCount:o,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=at(r);return jsxs("div",{className:cn("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":a("trade.preset.presets"),children:Array.from({length:o},(u,d)=>jsx(Tab,{title:a("trade.preset.label",{n:d+1})},String(d)))}),jsx(rt,{chain:r.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var va="preset";function Pa({id:e=va}){return jsx(AsyncModal,{id:e,children:t=>jsx(wa,{...t})})}function wa({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=useTranslation(),{chains:a,defaultChain:o,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[d,m]=useState(o??a[0]);useEffect(()=>{m(o??a[0]);},[o,a]);let f=useCallback((x,c,g)=>{u?.(d,x,c,g);},[u,d]);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:a,chain:d,onSelectChain:m})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(it,{chain:d,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:f})})})]})})}function ke(e,t,s,r,a){let o=V(a),n=new ce(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new ce(r.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new ce(r.tipFee??o.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??o.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function mt(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(j(G(t,s,r.address,o))),d=useAtomValue(L(D(s,"buy",u,o))),m=useConnectedWallet(s),{swap:f,isSwapping:x}=se({onSubmitted:n,onError:l}),c=!i||!a,g=useAuthCallback(async()=>{if(!i||!m||!a)return;let y=ke(i,r,a,d,s);try{await f({...y,chain:s,wallet:m});}catch{}},[m,i,a,s,r,d,f]);return useMemo(()=>({amount:i,token:r,isDisabled:c,isSwapping:x,handleSwap:g}),[i,r,c,x,g])}function Fa({size:e="sm",radius:t,color:s="primary",className:r,...a}){let{amount:o,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=mt(a);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:o!=null?`${o} ${n.symbol}`:n.symbol})}var pn=createContext(null);function Ba({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let a=useConnectedWallet(e),{swap:o}=se({onSubmitted:t,onError:s}),n=useRef(a);n.current=a;let l=useRef(o);l.current=o;let i=useRef(e);i.current=e;let u=useCallback(async m=>{let f=n.current;f&&await l.current({...m,wallet:f,chain:i.current});},[]),d=useAuthCallback(u,[]);return jsx(pn.Provider,{value:d,children:r})}function pt(){let e=useContext(pn);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ft(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o}=e,{amount:n,preset:l}=useAtomValue(j(G(t,s,r.address,o))),i=useAtomValue(L(D(s,"buy",l,o))),u=pt(),{t:d}=useTranslation(),[m,f]=useState(false),x=!a,c=useRef(r);c.current=r;let g=useRef(i);g.current=i;let y=useRef(s);y.current=s;let S=useCallback(async()=>{if(!a)return;if(!n){toast(d("trade.instantTradeAmountRequired"));return}let P=ke(n,c.current,a,g.current,y.current);f(true);try{await u(P);}catch{}finally{f(false);}},[n,a,u,d]);return useMemo(()=>({amount:n,token:r,isDisabled:x,isSwapping:m,handleSwap:S}),[n,r,x,m,S])}var ja=memo(function({size:t="sm",radius:s,color:r="primary",className:a,...o}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:d}=ft(o),m=n!=null?`${formatAmount(n)} ${l.symbol}`:void 0;return jsx(Button,{variant:"solid",size:t,radius:s,color:r,className:cn("min-w-0 w-auto flex-none",a),disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:d,style:{background:"linear-gradient(rgba(199,255,46,0.08), rgba(199,255,46,0.08)), #0a0a0b",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:m})});
2
+ export{tt as AmountPresetInputUI,jr as AmountPresetInputWidget,yt as DEFAULT_BSC_TRADE_PRESET,xt as DEFAULT_EVM_TRADE_PRESET,Rs as DEFAULT_INSTANT_TRADE_SETTINGS,St as DEFAULT_SELL_PERCENTAGES,ht as DEFAULT_SOL_TRADE_PRESET,Fa as InstantTradeButtonWidget,ja as InstantTradeListButtonWidget,Qe as InstantTradeProvider,Ba as InstantTradeSwapProvider,Ze as InstantTradeUI,Ar as InstantTradeWidget,it as MultiPresetFormWidget,Pa as PresetFormModal,Se as PresetFormUI,rt as PresetFormWidget,We as SwapPreviewModal,ne as SwapRouteExpiredError,Ke as SwapUI,Is as SwapWidget,ue as getChainPresetFeatures,bt as getDefaultBuyAmounts,V as getDefaultPresetForChain,j as instantTradeAmountAtomFamily,G as instantTradeAmountKey,L as presetAtomFamily,D as presetKey,et as useAmountPresetInputScript,He as useInstantTrade,to as useInstantTradeAmount,mt as useInstantTradeButtonScript,ft as useInstantTradeListButtonScript,Ge as useInstantTradeScript,pt as useInstantTradeSwap,at as useMultiPresetFormScript,nt as usePresetFormScript,fo as usePresetValues,se as useSwap,At as useSwapRoutePolling,Le as useSwapScript,It as useTxConfirmation};//# sourceMappingURL=index.mjs.map
3
3
  //# sourceMappingURL=index.mjs.map