@liberfi.io/ui-trade 0.1.11 → 0.1.13
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.d.mts +14 -4
- package/dist/index.d.ts +14 -4
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +17 -17
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {isSolanaChain,isBinanceChain,getNativeToken,getWrappedToken,chainToNamespace,formatAmountUSD,formatPercent,formatPrice}from'@liberfi.io/utils';import {createContext,memo,useState,useRef,useCallback,useMemo,useContext,useEffect}from'react';import {useDexClient,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,API,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,LightningIcon,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import de from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var sn="liberfi.",an={amount:void 0,preset:0};function on(e,t,r,s){return `${e}instant-trade.${t}.${r}.${s}`}function ln(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[a,o,n]=s.split(".");return {prefix:r,id:a,chain:o,tokenAddress:n}}function z(e,t,r,s=sn){return `${s}:${e}.${t}.${r}`}var H=atomFamily(e=>{let{prefix:t,id:r,chain:s,tokenAddress:a}=ln(e);return atomWithStorage(on(t,r,String(s),a),an,void 0,{getOnInit:true})});function Aa({id:e,chain:t,tokenAddress:r,storageKeyPrefix:s}){return useAtomValue(H(z(e,t,r,s)))}var pt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ct={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ft={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},mn={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]},dn=[1,10,25,50];function gt(e){return mn[e]??dn}var ht=[10,25,50,100];function le(e){let t=getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let r=t.symbol;return isSolanaChain(e)?{nativeSymbol:r,feeType:"priorityFee",feeUnit:r,feeDecimals:9,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function O(e){return isSolanaChain(e)?pt:isBinanceChain(e)?ft:ct}var gn="liberfi.";function hn(e,t,r,s){return `${e}preset.${t}.${r}.${s}`}function xn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[a,o,n]=s.split(".");return {prefix:r,chain:a,direction:o,index:Number(n)}}function D(e,t,r,s=gn){return `${s}:${e}.${t}.${r}`}var L=atomFamily(e=>{let{prefix:t,chain:r,direction:s,index:a}=xn(e);return atomWithStorage(hn(t,String(r),s,a),O(r),void 0,{getOnInit:true})});function Wa({chain:e,direction:t,presetIndex:r=0,storageKeyPrefix:s}){return useAtomValue(L(D(e,t,r,s)))}function Cn(e){let t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}function In(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function te(e){let{client:t}=useDexClient(),[r,s]=useState(false),a=useRef(e);a.current=e;let o=useCallback(async n=>{let{wallet:u,chain:i,...l}=n;s(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:u.address,input:l.input,output:l.output,mode:l.mode??API.SwapMode.EXACT_IN,amount:l.amount,slippage:l.slippage,priorityFee:l.priorityFee,tipFee:l.tipFee,isAntiMev:l.isAntiMev,permit:l.permit,deadline:l.deadline});}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"route"),f}let p;try{let m=Cn(d.serializedTx);p=await u.signTransaction(m);}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"sign"),f}let c;try{let m=In(p);c=await t.sendTx({chain:i,serializedTx:m});}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"send"),f}let h={txHash:c.txHash,extra:c.extra};return a.current?.onSubmitted?.(h),h}finally{s(false);}},[t]);return useMemo(()=>({swap:o,isSwapping:r}),[o,r])}var En=12e3;function bt(e,t){let r=t?.interval??En,s=t?.paused??false,a=useRef(t);a.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!s,u=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return useEffect(()=>{u.error&&a.current?.onError?.(u.error);},[u.error]),useMemo(()=>({route:u.data,isRouting:u.isFetching,error:u.error}),[u.data,u.isFetching,u.error])}var Dn=6e4;function St(e){let{client:t}=useDexClient(),[r,s]=useState(()=>new Map),a=useRef(e);a.current=e;let o=useCallback((l,d)=>{s(p=>{let c=p.get(l);if(!c||c.status===d)return p;let h=new Map(p);return h.set(l,{...c,status:d}),h});},[]),n=useCallback((l,d)=>{s(c=>{if(c.has(d))return c;let h=new Map(c);return h.set(d,{chain:l,txHash:d,status:"pending"}),h});let p=a.current?.timeout??Dn;t.checkTxSuccess(l,d,p).then(c=>{if(c)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(c=>{let h=c instanceof Error?c:new Error(String(c));o(d,"failed"),a.current?.onFailed?.(d,h);});},[t,o]),u=useCallback(l=>{s(d=>{if(!d.has(l))return d;let p=new Map(d);return p.delete(l),p});},[]),i=useCallback(()=>{s(l=>l.size===0?l:new Map);},[]);return useMemo(()=>({track:n,clear:u,clearAll:i,transactions:r}),[n,u,i,r])}var On=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function Vn(e){return On.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var Kn=1e4,$n=15e3;function Qn(e,t){if(e.length===0)return;let s=e[e.length-1].outputAmount;if(!s||s==="0")return "0";let a=s.padStart(t+1,"0"),o=a.slice(0,a.length-t)||"0",u=a.slice(a.length-t).replace(/0+$/,"");return u?`${o}.${u}`:o}function Re(e){let{chain:t}=e,r=useWallets(),s=Vn(t),a=useMemo(()=>r.find(b=>b.chainNamespace===s&&b.isConnected),[r,s]),o=a?.address??"",[n,u]=useState(e.from??""),[i,l]=useState(e.to??""),d=useRef(e.from),p=useRef(e.to);useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&u(e.from));},[e.from]),useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&l(e.to));},[e.to]);let c=useMemo(()=>[n,i].filter(Boolean),[n,i]),h=useTokensQuery({chain:t,addresses:c},{enabled:c.length>0,refetchInterval:Kn}),m=useMemo(()=>h.data?.find(b=>b.address===n)??null,[h.data,n]),f=useMemo(()=>h.data?.find(b=>b.address===i)??null,[h.data,i]),S=useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:c},{enabled:!!o&&c.length>0,refetchInterval:$n}),P=useMemo(()=>S.data?.find(b=>b.address===n)??null,[S.data,n]),T=useMemo(()=>S.data?.find(b=>b.address===i)??null,[S.data,i]),[x,N]=useState(void 0),k=useMemo(()=>{if(!x||m?.decimals==null)return;let b=x.split("."),B=b[0]??"0",Fe=(b[1]??"").slice(0,m.decimals).padEnd(m.decimals,"0");return (B+Fe).replace(/^0+/,"")||"0"},[x,m?.decimals]),K=useMemo(()=>{if(!x||!m?.marketData?.priceInUsd)return;let b=Number(m.marketData.priceInUsd),B=Number(x)*b;return Number.isFinite(B)?B.toString():void 0},[x,m?.marketData?.priceInUsd]),$=useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let B=b/2,be=m?.decimals??9;N(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:be}));},[P,m?.decimals]),j=useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let B=m?.decimals??9;N(b.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[P,m?.decimals]),U=useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:API.SwapMode.EXACT_IN,amount:k}),[t,o,n,i,k]),Z=useRef(false),{route:A,isRouting:q,error:J}=bt(U,{paused:Z.current}),Q=useMemo(()=>A&&f?Qn(A.plans,f.decimals):void 0,[A,f]),se=useMemo(()=>{if(!Q||!f?.marketData?.priceInUsd)return;let b=Number(f.marketData.priceInUsd),B=Number(Q)*b;return Number.isFinite(B)?B.toString():void 0},[Q,f?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=te();Z.current=M;let W=useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:Y}=St({onConfirmed:b=>{W.current?.({success:true,txHash:b});},onFailed:b=>{W.current?.({success:false,txHash:b});}}),oe=useMemo(()=>{if(Y.size===0)return "idle";let b=Array.from(Y.values());return b[b.length-1].status},[Y]),ee=useCallback(async()=>{if(!(!a||!A||!n||!i||!k))try{let b=await w({chain:t,wallet:a,input:n,output:i,amount:k,mode:API.SwapMode.EXACT_IN});ae(t,b.txHash);}catch{}},[a,A,t,n,i,k,w,ae]),ie=h.isPending||S.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:u,setToTokenAddress:l,fromToken:m,toToken:f,fromBalance:P,toBalance:T,amount:x,setAmount:N,setHalfAmount:$,setMaxAmount:j,amountInDecimals:k,amountInUsd:K,outputAmount:Q,outputAmountInUsd:se,route:A,isRouting:q,routeError:J,swap:ee,isSwapping:M,txStatus:oe,isLoading:ie}),[n,i,m,f,P,T,x,$,j,k,K,Q,se,A,q,J,ee,M,oe,ie])}function De({isOpen:e,onOpenChange:t,fromToken:r,toToken:s,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:u,outputAmountInUsd:i,route:l,isRouting:d,routeError:p,onConfirm:c,isSwapping:h}){let{t:m}=useTranslation(),[f,S]=useState(false),P=useCallback(()=>S(x=>!x),[]),T=useMemo(()=>l?l.plans.map((x,N)=>({key:`plan-${N}`,name:x.name,input:x.input,inputAmount:x.inputAmount,output:x.output,outputAmount:x.outputAmount,feeQuote:x.feeQuote,feeAmount:x.feeAmount})):[],[l]);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:m("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:m("trade.swap.from")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsx(Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),a&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(rr,{}),jsxs("span",{children:[ke(a.amount)," ",r?.symbol]})]})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:ke(o)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.estimatedReceive")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsx(Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),jsx("div",{className:"text-neutral text-[10px]",children:we(s?.address)})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:ke(u)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(i)]})]})]})]}),f&&T.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:T.map(x=>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:m("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:x.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[Be(x.inputAmount)," ",we(x.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[Be(x.outputAmount)," ",we(x.output)]})]})]}),x.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[Be(x.feeAmount)," ",we(x.feeQuote)]})]})]},x.key))})]}),T.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:f?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:m(f?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!l||!!p,isLoading:!l&&d||h,onPress:c,children:m("common.confirm")})})]})})}function rr(){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 It(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 ke(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 Be(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 we(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function _e({fromToken:e,toToken:t,fromBalance:r,toBalance:s,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:u,onMaxAmount:i,outputAmount:l,outputAmountInUsd:d,onFromTokenSelect:p,onToTokenSelect:c,route:h,isRouting:m,routeError:f,onPreview:S,isSwapping:P,className:T}){let{t:x}=useTranslation();return jsxs("div",{className:cn("px-4 pb-4 lg:pb-8",T),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:x("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:N=>n(N.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:()=>p(""),children:e?e.symbol:x("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 $",Et(o)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Ut,{}),jsxs("span",{className:"text-neutral",children:[Mt(r.amount)," ",r.symbol]}),u&&jsx("span",{className:"text-primary cursor-pointer",onClick:u,children:x("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:x("common.max")})]})]}),f&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:f.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:x("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:l??"",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:()=>c(""),children:t?t.symbol:x("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 $",Et(d)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Ut,{}),jsxs("span",{className:"text-neutral",children:[Mt(s.amount)," ",s.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&m,onPress:S,children:x(P?"trade.swap.swapping":m?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Ut(){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 Et(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 Mt(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 ir({chain:e,from:t,to:r,onComplete:s,className:a}){let o=Re({chain:e,from:t,to:r,onComplete:s}),{isOpen:n,onOpen:u,onOpenChange:i,onClose:l}=useDisclosure(),d=useCallback(async()=>{await o.swap(),l();},[o,l]);return jsxs(Fragment,{children:[jsx(_e,{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:u,isSwapping:o.isSwapping,className:a}),jsx(De,{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 Bt(e){let t=O(e),r=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:gt(r),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...ht],presets:[{...t},{...t},{...t}]}}}var pr=Bt("900900900");function Dt(e){return `liberfi.instant-trade.settings.${e}`}function cr(e,t){try{let r=localStorage.getItem(Dt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function fr(e,t){try{localStorage.setItem(Dt(e),JSON.stringify(t));}catch{}}var Lt=createContext(null);function Oe(){let e=useContext(Lt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ve({chain:e,tokenAddress:t,settings:r,onSettingsChange:s,children:a}){let o=useMemo(()=>getNativeToken(e),[e]),n=r!==void 0,u=useMemo(()=>Bt(e),[e]),[i,l]=useState(()=>n?u:cr(e,u)),d=n?r:i,p=useCallback(U=>{n?s?.(U):(l(U),fr(String(e),U));},[n,s,e]),c=useCallback(U=>p({...d,buy:U}),[d,p]),h=useCallback(U=>p({...d,sell:U}),[d,p]),[m,f]=useState("buy"),[S,P]=useState(),[T,x]=useState(0),[N,k]=useState(0),K=useMemo(()=>O(e),[e]),$=useMemo(()=>{let U=m==="buy"?T:N;return (m==="buy"?d.buy.presets:d.sell.presets)[U]??K},[m,T,N,d,K]),j=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:m,setDirection:f,amount:S,setAmount:P,buyPreset:T,setBuyPreset:x,sellPreset:N,setSellPreset:k,settings:d,updateBuySettings:c,updateSellSettings:h,currentPresetValues:$}),[e,t,o,m,S,T,N,d,c,h,$]);return jsx(Lt.Provider,{value:j,children:a})}var Ir=15e3,Ar=1e4;function $e(e){let{chain:t,tokenAddress:r,onSwapSubmitted:s,onSwapError:a}=e,{t:o}=useTranslation(),n=Oe(),u=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),l=useWallets(),d=chainToNamespace(t),p=useMemo(()=>l.find(w=>w.chainNamespace===d&&w.isConnected),[l,d]),c=p?.address??"",h=useMemo(()=>{let w=[r];return u&&w.push(u.address),i&&w.push(i.address),w.filter(Boolean)},[r,u,i]),m=useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Ar}),f=useMemo(()=>m.data?.find(w=>w.address===r)??null,[m.data,r]),S=useWalletPortfoliosByTokensQuery({chain:t,address:c,tokenAddresses:h},{enabled:!!c&&h.length>0,refetchInterval:Ir}),P=u?.address??i?.address??"",T=useMemo(()=>S.data?.find(w=>w.address===P)??null,[S.data,P]),x=useMemo(()=>S.data?.find(w=>w.address===r)??null,[S.data,r]),[N,k]=useState(false),K=useRef(null),$=useCallback(w=>{let M=K.current;K.current=w,k(W=>M===null||M!==w?true:!W);},[]),j=useRef(s);j.current=s;let U=useRef(a);U.current=a;let{swap:Z,isSwapping:A}=te({onSubmitted:w=>j.current?.(w),onError:(w,M)=>U.current?.(w,M)}),q=useCallback(async()=>{if(!n.amount||!p||!r)return;let w=u?.decimals??9,M=i?.address??u?.address??"",W=n.direction==="buy",ae=W?M:r,Y=W?r:M,oe=W?w:f?.decimals??9,ee=new de(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,b=O(t),B=ie.slippage??b.slippage??1,be=ie.antiMev!=="off",Fe=isSolanaChain(t)?{priorityFee:new de(ie.priorityFee??b.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de(ie.tipFee??b.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:be}:{};try{await Z({chain:t,wallet:p,input:ae,output:Y,amount:ee,slippage:B,...Fe}),n.setAmount(void 0);}catch{}},[n,p,r,u,i,f,t,Z]),J=useMemo(()=>{let w=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let M=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=T?.amount;if(ae&&new de(ae).lt(n.amount))return `${w}${M}`;let Y=u?.symbol??"",oe=m.data?.find(ee=>ee.address===P)?.marketData?.priceInUsd;if(oe){let ee=formatAmountUSD(new de(n.amount).times(Number(oe)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:Y,usd:ee})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:Y})}let W=x?.amount;return W&&new de(W).lt(n.amount)?`${w}${M}`:w},[o,n.direction,n.amount,T,x,u,m.data,P]),Q=!n.amount||!p||!r,se=m.isPending||S.isPending;return useMemo(()=>({chain:t,tokenAddress:r,nativeToken:u,tokenInfo:f,nativeBalance:T,tokenBalance:x,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:N,handlePresetClick:$,swap:q,isSwapping:A,submitText:J,isDisabled:Q,isLoading:se}),[t,r,u,f,T,x,n,N,$,q,A,J,Q,se])}function xe({value:e,onChange:t,chain:r,disableAnimation:s,className:a}){let o=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>le(r),[r]),u=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn("space-y-4",a),children:[jsx(Lr,{value:e.slippage,onChange:i=>o({slippage:i})}),jsx(_r,{value:e[u],onChange:i=>o({[u]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(Wr,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx(Or,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:s}),e.autoFee&&jsx(Vr,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(Kr,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:s}),n.showCustomRPC&&jsx($r,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function Lr({value:e,onChange:t}){let{t:r}=useTranslation(),s=r("trade.preset.slippage");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children:s}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange: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":s})]})}function _r({value:e,onChange:t,feeType:r,symbol:s,decimals:a}){let{t:o}=useTranslation(),n=o(`trade.preset.${r}`),u=o(`trade.preset.${r}.tooltip`);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsx(StyledTooltip,{content:u,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:s}),"aria-label":n})]})}function Wr({value:e,onChange:t,symbol:r,decimals:s}){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:s},endContent:jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":o})]})}function Or({value:e,onChange:t,disableAnimation:r}){let{t:s}=useTranslation(),a=s("trade.preset.autoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsx(StyledTooltip,{content:s("trade.preset.autoFee.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":a,disableAnimation:r})})]})}function Vr({value:e,onChange:t,symbol:r}){let{t:s}=useTranslation(),a=s("trade.preset.maxAutoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children: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:r}),"aria-label":a})]})}function Kr({value:e,onChange:t,options:r,disableAnimation:s}){let{t:a}=useTranslation(),o=a("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),u=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:s,"aria-label":o,children:r.map(i=>{let l=n[i],d=u[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(l,{width:18,height:18})})})},i)})})})]})}function $r({value:e,onChange:t}){let{t:r}=useTranslation(),s=r("trade.preset.customRpc");return jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsx("div",{className:"flex-none text-sm text-neutral",children:s}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:a=>t(a||null),placeholder:"https://...","aria-label":s})})]})}function He({chain:e,direction:t,onDirectionChange:r,amount:s,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:p,nativeBalance:c,tokenBalance:h,amountConversion:m,preset:f,onPresetChange:S,presetValues:P,onPresetSettingsChange:T,showSettings:x,onPresetClick:N,submitText:k,isDisabled:K,isLoading:$,onSubmit:j,className:U,headerExtra:Z}){let{t:A}=useTranslation(),q=useMemo(()=>getNativeToken(e),[e]),J=q?.symbol,Q=q?.decimals??9;return jsxs("div",{className:cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",U),children:[jsxs(Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:r,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsx(Tab,{title:A("common.buy")},"buy"),jsx(Tab,{title:A("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:A("trade.market")},"market")}),Z]}),jsx("div",{className:"mt-2.5",children:t==="buy"?jsx(ts,{amount:s,onAmountChange:a,customAmounts:o,onQuickAmountClick:u,onCustomAmountsEdit:l,nativeSymbol:J,nativeDecimals:Q,amountLabel:A("trade.amount")}):jsx(ns,{amount:s,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:p,amountLabel:A("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:A("trade.balance")}),jsx("span",{children:t==="buy"?c?`${c} ${J??""}`:"--":h?`${h} ${p??""}`:"--"})]}),m&&jsx("div",{className:"text-xs text-neutral",children:m})]}),jsx("div",{className:"mt-4",children:jsx(rs,{values:P,chain:e})}),jsx("div",{className:"mt-2",children:jsxs(Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${f}`,onSelectionChange:se=>S(Number(se)),disableAnimation:true,"aria-label":A("trade.preset.presets"),children:[jsx(Tab,{title:A("trade.preset.label",{n:1}),onClick:()=>N(0)},0),jsx(Tab,{title:A("trade.preset.label",{n:2}),onClick:()=>N(1)},1),jsx(Tab,{title:A("trade.preset.label",{n:3}),onClick:()=>N(2)},2)]})}),x&&jsx("div",{className:"mt-2.5",children:jsx(xe,{value:P,onChange:T,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:K,isLoading:$,onPress:j,children:k})]})}function ts({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:s,onCustomAmountsEdit:a,nativeSymbol:o,nativeDecimals:n,amountLabel:u}){let i=useCallback(l=>{typeof l=="number"&&t(isNaN(l)?void 0:l);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:u}),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($t,{values:r,onSelect:s,onEdit:a})]})}function ns({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:s,onCustomPercentagesEdit:a,tokenSymbol:o,amountLabel:n}){let u=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:u,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($t,{values:r,onSelect:s,onEdit:a,suffix:"%"})]})}function $t({values:e,onSelect:t,onEdit:r,suffix:s}){let[a,o]=useState(false),[n,u]=useState([]),i=useCallback(()=>{u([...e]),o(true);},[e]),l=useCallback(()=>{o(false),r(n);},[r,n]);return jsxs("div",{className:"flex gap-0.5",children:[jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,p)=>jsx("div",{className:cn("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:a?jsx(NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:c=>{if(typeof c=="number"){let h=isNaN(c)?null:c;u(m=>{let f=[...m];return f[p]=h,f});}},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",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:s?jsx("span",{className:"text-xs text-neutral",children:s}):null,children:e[p]??""})},p))}),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:l,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 rs({values:e,chain:t}){let{t:r}=useTranslation(),s=useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:r("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(SlippageIcon,{width:14,height:14}),children:formatPercent((e.slippage??0)/100)})}),jsx(Tooltip,{content:r(`trade.preset.${s.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(ZapFastIcon,{width:14,height:14}),children:formatPrice(e.priorityFee??0)})}),s.showTipFee&&jsx(Tooltip,{content:r("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(CoinsIcon,{width:14,height:14}),children:formatPrice(e.tipFee??0)})}),jsx(Tooltip,{content:r("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxs(Fragment,{children:[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:r(`trade.preset.antiMev.${a}`)})})]})}function os({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,settings:a,onSettingsChange:o,headerExtra:n,className:u}){return jsx(Ve,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsx(is,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:n,className:u})})}function is({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:a,className:o}){let n=$e({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s}),u=useCallback(m=>n.setAmount(m),[n]),i=useCallback(m=>{let f=n.tokenBalance?.amount;if(!f)return;let S=new de(f).times(m).div(100).toNumber();n.setAmount(S);},[n]),l=useCallback(m=>{n.updateBuySettings({...n.settings.buy,customAmounts:m});},[n]),d=useCallback(m=>{n.updateSellSettings({...n.settings.sell,customPercentages:m});},[n]),p=useCallback(m=>{let f=n.direction==="buy",S=f?n.buyPreset:n.sellPreset;if(f){let P=n.settings.buy,T=[...P.presets];T[S]=m,n.updateBuySettings({...P,presets:T});}else {let P=n.settings.sell,T=[...P.presets];T[S]=m,n.updateSellSettings({...P,presets:T});}},[n]),c=useCallback(m=>{n.direction==="buy"?n.setBuyPreset(m):n.setSellPreset(m);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(He,{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:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:c,presetValues:n.currentPresetValues,onPresetSettingsChange:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function Ze(e){let{id:t,chain:r,token:s,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:u}=e,[i,l]=useAtom(H(z(t,r,s.address,a))),d=useAtomValue(L(D(r,"buy",0,a))),p=useAtomValue(L(D(r,"buy",1,a))),c=useAtomValue(L(D(r,"buy",2,a))),h=useMemo(()=>[d,p,c],[d,p,c]),m=useCallback(S=>{l(P=>({...P,amount:S})),o?.(S);},[l,o]),f=useCallback(S=>{l(P=>({...P,preset:S})),n?.(S);},[l,n]);return {token:s,chain:r,amount:i.amount,handleAmountChange:m,preset:i.preset,handlePresetChange:f,onPresetClick:u,presetValues:h}}function Je({token:e,chain:t,amount:r,onAmountChange:s,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:u,radius:i="full",size:l="md",className:d}){let{t:p}=useTranslation(),c=useMemo(()=>O(t),[t]),h=useCallback(m=>{o?.(Number(m));},[o]);return jsxs("div",{className:cn("flex items-center border-2 border-border",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",l==="sm"&&"h-8 pr-2",l==="md"&&"h-10 pr-2.5",l==="lg"&&"h-12 pr-3",d),children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:r,onValueChange:m=>s(isNaN(m)?void 0:m),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:l,startContent:jsx(LightningIcon,{width:l==="sm"?12:l==="md"?16:20,height:l==="sm"?12:l==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:l==="sm"?16:l==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}}),jsx("div",{className:"w-px bg-border self-stretch my-1.5 mx-1.5 flex-none"}),jsx(StyledLightTabs,{color:"primary",size:l,selectedKey:String(a),onSelectionChange:h,classNames:{base:"flex-none h-full",tabList:cn("bg-transparent gap-0 h-full",l==="sm"&&"p-0.5",l==="md"&&"p-1",l==="lg"&&"p-1.5"),tab:cn("h-full",l==="sm"&&"text-xs px-2",l==="md"&&"text-sm px-2.5",l==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((m,f)=>jsx(Tab,{title:jsx(Tooltip,{content:jsx(Ts,{values:u?.[f]??c,chain:t}),placement:"bottom",children:jsx("span",{onClick:()=>a===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))})]})}function Ts({values:e,chain:t}){let{t:r}=useTranslation(),s=useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(SlippageIcon,{width:14,height:14}),jsx("span",{children:formatPercent((e.slippage??0)/100)})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(ZapFastIcon,{width:14,height:14}),jsxs("span",{children:[formatPrice(e.priorityFee??0)," ",s.feeUnit]})]}),s.showTipFee&&jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsx(CoinsIcon,{width:14,height:14}),jsxs("span",{children:[formatPrice(e.tipFee??0)," ",s.tipFeeUnit]})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[a==="off"&&jsx(ShieldOffIcon,{width:14,height:14}),a==="reduced"&&jsx(ShieldIcon,{width:14,height:14}),a==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14}),jsx("span",{children:r(`trade.preset.antiMev.${a}`)})]})]})}function Cs({size:e,radius:t,className:r,...s}){let{token:a,chain:o,amount:n,handleAmountChange:u,preset:i,handlePresetChange:l,onPresetClick:d,presetValues:p}=Ze(s);return jsx(Je,{token:a,chain:o,amount:n,onAmountChange:u,preset:i,onPresetChange:l,onPresetClick:d,presetValues:p,size:e,radius:t,className:r})}function Ye(e){let{chain:t,presetIndex:r=0,storageKeyPrefix:s,onChange:a}=e,[o,n]=useState("buy"),[u,i]=useAtom(L(D(t,o,r,s))),l=useCallback(d=>{i(d),a?.(o,d);},[i,a,o]);return {direction:o,setDirection:n,value:u,handleChange:l}}function tt({disableAnimation:e,className:t,...r}){let{t:s}=useTranslation(),{direction:a,setDirection:o,value:n,handleChange:u}=Ye(r);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:s("common.buy")},"buy"),jsx(Tab,{title:s("common.sell")},"sell")]}),jsx(xe,{value:n,onChange:u,chain:r.chain,disableAnimation:e})]})}var Bs=3;function nt(e){let{onChange:t}=e,[r,s]=useState(0),a=useCallback((o,n)=>{t?.(r,o,n);},[t,r]);return {presetCount:Bs,presetIndex:r,setPresetIndex:s,handlePresetChange:a}}function st({disableAnimation:e,className:t,...r}){let{t:s}=useTranslation(),{presetCount:a,presetIndex:o,setPresetIndex:n,handlePresetChange:u}=nt(r);return jsxs("div",{className:cn("space-y-3",t),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(o),onSelectionChange:i=>n(Number(i)),disableAnimation:e,"aria-label":s("trade.preset.presets"),children:Array.from({length:a},(i,l)=>jsx(Tab,{title:s("trade.preset.label",{n:l+1})},String(l)))}),jsx(tt,{chain:r.chain,presetIndex:o,storageKeyPrefix:r.storageKeyPrefix,onChange:u,disableAnimation:e})]})}var qs="preset";function Js({id:e=qs}){return jsx(AsyncModal,{id:e,children:t=>jsx(Ys,{...t})})}function Ys({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:r}){let{t:s}=useTranslation(),{chains:a,defaultChain:o,storageKeyPrefix:n,onChange:u}=e,[i,l]=useState(o??a[0]),d=useCallback((p,c,h)=>{u?.(i,p,c,h);},[u,i]);return jsx(StyledModal,{isOpen:t,onOpenChange:r,size:"md",children:jsxs(ModalContent,{children:[jsx(ModalHeader,{children:jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:s("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:a,chain:i,onSelectChain:l})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(st,{chain:i,storageKeyPrefix:n,onChange:d})})})]})})}function Ne(e,t,r,s,a){let o=O(a),n=new de(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),u=new de(s.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de(s.tipFee??o.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:r,amount:n,slippage:s.slippage??o.slippage??1,priorityFee:u,tipFee:i,isAntiMev:s.antiMev!=="off"}}function it(e){let{id:t,chain:r,token:s,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:u}=e,{amount:i,preset:l}=useAtomValue(H(z(t,r,s.address,o))),d=useAtomValue(L(D(r,"buy",l,o))),p=useConnectedWallet(r),{swap:c,isSwapping:h}=te({onSubmitted:n,onError:u}),m=!i||!a,f=useAuthCallback(async()=>{if(!i||!p||!a)return;let S=Ne(i,s,a,d,r);try{await c({...S,chain:r,wallet:p});}catch{}},[p,i,a,r,s,d,c]);return useMemo(()=>({amount:i,tokenSymbol:s.symbol,isDisabled:m,isSwapping:h,handleSwap:f}),[i,s.symbol,m,h,f])}function aa({size:e="sm",radius:t,color:r="primary",className:s,...a}){let{amount:o,tokenSymbol:n,isDisabled:u,isSwapping:i,handleSwap:l}=it(a);return jsx(Button,{fullWidth:true,size:e,radius:t,color:r,className:s,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:u,isLoading:i,onPress:l,children:o!=null?`${o} ${n}`:n})}var Yt=createContext(null);function da({chain:e,onSwapSubmitted:t,onSwapError:r,children:s}){let a=useConnectedWallet(e),{swap:o}=te({onSubmitted:t,onError:r}),n=useRef(a);n.current=a;let u=useRef(o);u.current=o;let i=useRef(e);i.current=e;let l=useCallback(async p=>{let c=n.current;if(c)return u.current({...p,wallet:c,chain:i.current})},[]),d=useAuthCallback(l,[]);return jsx(Yt.Provider,{value:d,children:s})}function ut(){let e=useContext(Yt);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function dt(e){let{id:t,chain:r,token:s,output:a,storageKeyPrefix:o}=e,{amount:n,preset:u}=useAtomValue(H(z(t,r,s.address,o))),i=useAtomValue(L(D(r,"buy",u,o))),l=ut(),[d,p]=useState(false),c=!n||!a,h=useRef(s);h.current=s;let m=useRef(i);m.current=i;let f=useRef(r);f.current=r;let S=useCallback(async()=>{if(!n||!a)return;let P=Ne(n,h.current,a,m.current,f.current);p(true);try{await l(P);}catch{}finally{p(false);}},[n,a,l]);return useMemo(()=>({amount:n,tokenSymbol:s.symbol,isDisabled:c,isSwapping:d,handleSwap:S}),[n,s.symbol,c,d,S])}var ba=memo(function({size:t="sm",radius:r,color:s="primary",className:a,...o}){let{amount:n,tokenSymbol:u,isDisabled:i,isSwapping:l,handleSwap:d}=dt(o);return jsx(Button,{variant:"solid",fullWidth:true,size:t,radius:r,color:s,className:a,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:i,isLoading:l,onPress:d,children:n!=null?`${n} ${u}`:u})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.11");var Sa="0.1.11";
|
|
2
|
-
export{Je as AmountPresetInputUI,
|
|
1
|
+
import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {isSolanaChain,isBinanceChain,getNativeToken,getWrappedToken,chainToNamespace,formatAmountUSD,formatPercent,formatPrice}from'@liberfi.io/utils';import {createContext,memo,useState,useRef,useCallback,useMemo,useContext,useEffect}from'react';import {useDexClient,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,API,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,LightningIcon,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import de from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var rn="liberfi.",an={amount:void 0,preset:0};function on(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function ln(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 H(e,t,s,r=rn){return `${r}:${e}.${t}.${s}`}var G=atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:a}=ln(e);return atomWithStorage(on(t,s,String(r),a),an,void 0,{getOnInit:true})});function Aa({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return useAtomValue(G(H(e,t,s,r)))}var pt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ct={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ft={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},mn={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]},dn=[1,10,25,50];function gt(e){return mn[e]??dn}var xt=[10,25,50,100];function le(e){let t=getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let s=t.symbol;return isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function O(e){return isSolanaChain(e)?pt:isBinanceChain(e)?ft:ct}var gn="liberfi.";function xn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function hn(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=gn){return `${r}:${e}.${t}.${s}`}var L=atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:a}=hn(e);return atomWithStorage(xn(t,String(s),r,a),O(s),void 0,{getOnInit:true})});function Oa({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return useAtomValue(L(D(e,t,s,r)))}function Nn(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 Cn(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function ne(e){let{client:t}=useDexClient(),[s,r]=useState(false),a=useRef(e);a.current=e;let o=useCallback(async n=>{let{wallet:u,chain:i,...l}=n;r(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:u.address,input:l.input,output:l.output,mode:l.mode??API.SwapMode.EXACT_IN,amount:l.amount,slippage:l.slippage,priorityFee:l.priorityFee,tipFee:l.tipFee,isAntiMev:l.isAntiMev,permit:l.permit,deadline:l.deadline});}catch(m){let c=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(c,"route"),c}let p;try{let m=Nn(d.serializedTx);p=await u.signTransaction(m);}catch(m){let c=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(c,"sign"),c}let f;try{let m=Cn(p);f=await t.sendTx({chain:i,serializedTx:m});}catch(m){let c=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(c,"send"),c}let x={txHash:f.txHash,extra:f.extra};return a.current?.onSubmitted?.(x),x}finally{r(false);}},[t]);return useMemo(()=>({swap:o,isSwapping:s}),[o,s])}var En=12e3;function bt(e,t){let s=t?.interval??En,r=t?.paused??false,a=useRef(t);a.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,u=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return useEffect(()=>{u.error&&a.current?.onError?.(u.error);},[u.error]),useMemo(()=>({route:u.data,isRouting:u.isFetching,error:u.error}),[u.data,u.isFetching,u.error])}var Dn=6e4;function St(e){let{client:t}=useDexClient(),[s,r]=useState(()=>new Map),a=useRef(e);a.current=e;let o=useCallback((l,d)=>{r(p=>{let f=p.get(l);if(!f||f.status===d)return p;let x=new Map(p);return x.set(l,{...f,status:d}),x});},[]),n=useCallback((l,d)=>{r(f=>{if(f.has(d))return f;let x=new Map(f);return x.set(d,{chain:l,txHash:d,status:"pending"}),x});let p=a.current?.timeout??Dn;t.checkTxSuccess(l,d,p).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]),u=useCallback(l=>{r(d=>{if(!d.has(l))return d;let p=new Map(d);return p.delete(l),p});},[]),i=useCallback(()=>{r(l=>l.size===0?l:new Map);},[]);return useMemo(()=>({track:n,clear:u,clearAll:i,transactions:s}),[n,u,i,s])}var On=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function Vn(e){return On.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var Kn=1e4,$n=15e3;function Qn(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",u=a.slice(a.length-t).replace(/0+$/,"");return u?`${o}.${u}`:o}function Re(e){let{chain:t}=e,s=useWallets(),r=Vn(t),a=useMemo(()=>s.find(b=>b.chainNamespace===r&&b.isConnected),[s,r]),o=a?.address??"",[n,u]=useState(e.from??""),[i,l]=useState(e.to??""),d=useRef(e.from),p=useRef(e.to);useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&u(e.from));},[e.from]),useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&l(e.to));},[e.to]);let f=useMemo(()=>[n,i].filter(Boolean),[n,i]),x=useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Kn}),m=useMemo(()=>x.data?.find(b=>b.address===n)??null,[x.data,n]),c=useMemo(()=>x.data?.find(b=>b.address===i)??null,[x.data,i]),S=useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:f},{enabled:!!o&&f.length>0,refetchInterval:$n}),P=useMemo(()=>S.data?.find(b=>b.address===n)??null,[S.data,n]),T=useMemo(()=>S.data?.find(b=>b.address===i)??null,[S.data,i]),[h,F]=useState(void 0),B=useMemo(()=>{if(!h||m?.decimals==null)return;let b=h.split("."),k=b[0]??"0",Fe=(b[1]??"").slice(0,m.decimals).padEnd(m.decimals,"0");return (k+Fe).replace(/^0+/,"")||"0"},[h,m?.decimals]),$=useMemo(()=>{if(!h||!m?.marketData?.priceInUsd)return;let b=Number(m.marketData.priceInUsd),k=Number(h)*b;return Number.isFinite(k)?k.toString():void 0},[h,m?.marketData?.priceInUsd]),Q=useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let k=b/2,be=m?.decimals??9;F(k.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:be}));},[P,m?.decimals]),z=useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let k=m?.decimals??9;F(b.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:k}));},[P,m?.decimals]),U=useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:API.SwapMode.EXACT_IN,amount:B}),[t,o,n,i,B]),q=useRef(false),{route:I,isRouting:J,error:Y}=bt(U,{paused:q.current}),j=useMemo(()=>I&&c?Qn(I.plans,c.decimals):void 0,[I,c]),re=useMemo(()=>{if(!j||!c?.marketData?.priceInUsd)return;let b=Number(c.marketData.priceInUsd),k=Number(j)*b;return Number.isFinite(k)?k.toString():void 0},[j,c?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=ne();q.current=M;let W=useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:ee}=St({onConfirmed:b=>{W.current?.({success:true,txHash:b});},onFailed:b=>{W.current?.({success:false,txHash:b});}}),oe=useMemo(()=>{if(ee.size===0)return "idle";let b=Array.from(ee.values());return b[b.length-1].status},[ee]),te=useCallback(async()=>{if(!(!a||!I||!n||!i||!B))try{let b=await w({chain:t,wallet:a,input:n,output:i,amount:B,mode:API.SwapMode.EXACT_IN});ae(t,b.txHash);}catch{}},[a,I,t,n,i,B,w,ae]),ie=x.isPending||S.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:u,setToTokenAddress:l,fromToken:m,toToken:c,fromBalance:P,toBalance:T,amount:h,setAmount:F,setHalfAmount:Q,setMaxAmount:z,amountInDecimals:B,amountInUsd:$,outputAmount:j,outputAmountInUsd:re,route:I,isRouting:J,routeError:Y,swap:te,isSwapping:M,txStatus:oe,isLoading:ie}),[n,i,m,c,P,T,h,Q,z,B,$,j,re,I,J,Y,te,M,oe,ie])}function De({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:u,outputAmountInUsd:i,route:l,isRouting:d,routeError:p,onConfirm:f,isSwapping:x}){let{t:m}=useTranslation(),[c,S]=useState(false),P=useCallback(()=>S(h=>!h),[]),T=useMemo(()=>l?l.plans.map((h,F)=>({key:`plan-${F}`,name:h.name,input:h.input,inputAmount:h.inputAmount,output:h.output,outputAmount:h.outputAmount,feeQuote:h.feeQuote,feeAmount:h.feeAmount})):[],[l]);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:m("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:m("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:[Be(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:Be(o)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ct(n)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("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:we(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:Be(u)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ct(i)]})]})]})]}),c&&T.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:T.map(h=>jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:h.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[ke(h.inputAmount)," ",we(h.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[ke(h.outputAmount)," ",we(h.output)]})]})]}),h.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[ke(h.feeAmount)," ",we(h.feeQuote)]})]})]},h.key))})]}),T.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:c?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:m(c?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!l||!!p,isLoading:!l&&d||x,onPress:f,children:m("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 Ct(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 Be(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 ke(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 we(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function _e({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:u,onMaxAmount:i,outputAmount:l,outputAmountInUsd:d,onFromTokenSelect:p,onToTokenSelect:f,route:x,isRouting:m,routeError:c,onPreview:S,isSwapping:P,className:T}){let{t:h}=useTranslation();return jsxs("div",{className:cn("px-4 pb-4 lg:pb-8",T),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:h("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:F=>n(F.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsx(Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:h("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 $",Et(o)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Ut,{}),jsxs("span",{className:"text-neutral",children:[Mt(s.amount)," ",s.symbol]}),u&&jsx("span",{className:"text-primary cursor-pointer",onClick:u,children:h("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:h("common.max")})]})]}),c&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:c.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:h("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:l??"",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:h("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 $",Et(d)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Ut,{}),jsxs("span",{className:"text-neutral",children:[Mt(r.amount)," ",r.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!x,isLoading:!x&&m,onPress:S,children:h(P?"trade.swap.swapping":m?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Ut(){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 Et(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 Mt(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 is({chain:e,from:t,to:s,onComplete:r,className:a}){let o=Re({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:u,onOpenChange:i,onClose:l}=useDisclosure(),d=useCallback(async()=>{await o.swap(),l();},[o,l]);return jsxs(Fragment,{children:[jsx(_e,{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:u,isSwapping:o.isSwapping,className:a}),jsx(De,{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 kt(e){let t=O(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:gt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...xt],presets:[{...t},{...t},{...t}]}}}var ps=kt("900900900");function Dt(e){return `liberfi.instant-trade.settings.${e}`}function cs(e,t){try{let s=localStorage.getItem(Dt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function fs(e,t){try{localStorage.setItem(Dt(e),JSON.stringify(t));}catch{}}var Lt=createContext(null);function Oe(){let e=useContext(Lt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ve({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:a}){let o=useMemo(()=>getNativeToken(e),[e]),n=s!==void 0,u=useMemo(()=>kt(e),[e]),[i,l]=useState(()=>n?u:cs(e,u)),d=n?s:i,p=useCallback(U=>{n?r?.(U):(l(U),fs(String(e),U));},[n,r,e]),f=useCallback(U=>p({...d,buy:U}),[d,p]),x=useCallback(U=>p({...d,sell:U}),[d,p]),[m,c]=useState("buy"),[S,P]=useState(),[T,h]=useState(0),[F,B]=useState(0),$=useMemo(()=>O(e),[e]),Q=useMemo(()=>{let U=m==="buy"?T:F;return (m==="buy"?d.buy.presets:d.sell.presets)[U]??$},[m,T,F,d,$]),z=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:m,setDirection:c,amount:S,setAmount:P,buyPreset:T,setBuyPreset:h,sellPreset:F,setSellPreset:B,settings:d,updateBuySettings:f,updateSellSettings:x,currentPresetValues:Q}),[e,t,o,m,S,T,F,d,f,x,Q]);return jsx(Lt.Provider,{value:z,children:a})}var Cs=15e3,Is=1e4;function $e(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:a}=e,{t:o}=useTranslation(),n=Oe(),u=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),l=useWallets(),d=chainToNamespace(t),p=useMemo(()=>l.find(w=>w.chainNamespace===d&&w.isConnected),[l,d]),f=p?.address??"",x=useMemo(()=>{let w=[s];return u&&w.push(u.address),i&&w.push(i.address),w.filter(Boolean)},[s,u,i]),m=useTokensQuery({chain:t,addresses:x},{enabled:x.length>0,refetchInterval:Is}),c=useMemo(()=>m.data?.find(w=>w.address===s)??null,[m.data,s]),S=useWalletPortfoliosByTokensQuery({chain:t,address:f,tokenAddresses:x},{enabled:!!f&&x.length>0,refetchInterval:Cs}),P=u?.address??i?.address??"",T=useMemo(()=>S.data?.find(w=>w.address===P)??null,[S.data,P]),h=useMemo(()=>S.data?.find(w=>w.address===s)??null,[S.data,s]),[F,B]=useState(false),$=useRef(null),Q=useCallback(w=>{let M=$.current;$.current=w,B(W=>M===null||M!==w?true:!W);},[]),z=useRef(r);z.current=r;let U=useRef(a);U.current=a;let{swap:q,isSwapping:I}=ne({onSubmitted:w=>z.current?.(w),onError:(w,M)=>U.current?.(w,M)}),J=useCallback(async()=>{if(!n.amount||!p||!s)return;let w=u?.decimals??9,M=i?.address??u?.address??"",W=n.direction==="buy",ae=W?M:s,ee=W?s:M,oe=W?w:c?.decimals??9,te=new de(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,b=O(t),k=ie.slippage??b.slippage??1,be=ie.antiMev!=="off",Fe=isSolanaChain(t)?{priorityFee:new de(ie.priorityFee??b.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de(ie.tipFee??b.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:be}:{};try{await q({chain:t,wallet:p,input:ae,output:ee,amount:te,slippage:k,...Fe}),n.setAmount(void 0);}catch{}},[n,p,s,u,i,c,t,q]),Y=useMemo(()=>{let w=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let M=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=T?.amount;if(ae&&new de(ae).lt(n.amount))return `${w}${M}`;let ee=u?.symbol??"",oe=m.data?.find(te=>te.address===P)?.marketData?.priceInUsd;if(oe){let te=formatAmountUSD(new de(n.amount).times(Number(oe)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=h?.amount;return W&&new de(W).lt(n.amount)?`${w}${M}`:w},[o,n.direction,n.amount,T,h,u,m.data,P]),j=!n.amount||!p||!s,re=m.isPending||S.isPending;return useMemo(()=>({chain:t,tokenAddress:s,nativeToken:u,tokenInfo:c,nativeBalance:T,tokenBalance:h,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:F,handlePresetClick:Q,swap:J,isSwapping:I,submitText:Y,isDisabled:j,isLoading:re}),[t,s,u,c,T,h,n,F,Q,J,I,Y,j,re])}function he({value:e,onChange:t,chain:s,disableAnimation:r,className:a}){let o=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>le(s),[s]),u=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn("space-y-4",a),children:[jsx(Ls,{value:e.slippage,onChange:i=>o({slippage:i})}),jsx(_s,{value:e[u],onChange:i=>o({[u]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(Ws,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx(Os,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:r}),e.autoFee&&jsx(Vs,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(Ks,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsx($s,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function Ls({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 _s({value:e,onChange:t,feeType:s,symbol:r,decimals:a}){let{t:o}=useTranslation(),n=o(`trade.preset.${s}`),u=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:u,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 Ws({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 Os({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 Vs({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 Ks({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}),[]),u=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 l=n[i],d=u[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(l,{width:18,height:18})})})},i)})})})]})}function $s({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 He({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:p,nativeBalance:f,tokenBalance:x,amountConversion:m,preset:c,onPresetChange:S,presetValues:P,onPresetSettingsChange:T,showSettings:h,onPresetClick:F,submitText:B,isDisabled:$,isLoading:Q,onSubmit:z,className:U,headerExtra:q}){let{t:I}=useTranslation(),J=useMemo(()=>getNativeToken(e),[e]),Y=J?.symbol,j=J?.decimals??9;return jsxs("div",{className:cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",U),children:[jsxs(Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsx(Tab,{title:I("common.buy")},"buy"),jsx(Tab,{title:I("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:I("trade.market")},"market")}),q]}),jsx("div",{className:"mt-2.5",children:t==="buy"?jsx(tr,{amount:r,onAmountChange:a,customAmounts:o,onQuickAmountClick:u,onCustomAmountsEdit:l,nativeSymbol:Y,nativeDecimals:j,amountLabel:I("trade.amount")}):jsx(nr,{amount:r,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:p,amountLabel:I("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:I("trade.balance")}),jsx("span",{children:t==="buy"?f?`${f} ${Y??""}`:"--":x?`${x} ${p??""}`:"--"})]}),m&&jsx("div",{className:"text-xs text-neutral",children:m})]}),jsx("div",{className:"mt-4",children:jsx(sr,{values:P,chain:e})}),jsx("div",{className:"mt-2",children:jsxs(Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${c}`,onSelectionChange:re=>S(Number(re)),disableAnimation:true,"aria-label":I("trade.preset.presets"),children:[jsx(Tab,{title:I("trade.preset.label",{n:1}),onClick:()=>F(0)},0),jsx(Tab,{title:I("trade.preset.label",{n:2}),onClick:()=>F(1)},1),jsx(Tab,{title:I("trade.preset.label",{n:3}),onClick:()=>F(2)},2)]})}),h&&jsx("div",{className:"mt-2.5",children:jsx(he,{value:P,onChange:T,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:Q,onPress:z,children:B})]})}function tr({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:a,nativeSymbol:o,nativeDecimals:n,amountLabel:u}){let i=useCallback(l=>{typeof l=="number"&&t(isNaN(l)?void 0:l);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:u}),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($t,{values:s,onSelect:r,onEdit:a})]})}function nr({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:a,tokenSymbol:o,amountLabel:n}){let u=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:u,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($t,{values:s,onSelect:r,onEdit:a,suffix:"%"})]})}function $t({values:e,onSelect:t,onEdit:s,suffix:r}){let[a,o]=useState(false),[n,u]=useState([]),i=useCallback(()=>{u([...e]),o(true);},[e]),l=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,p)=>jsx("div",{className:cn("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:a?jsx(NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:f=>{if(typeof f=="number"){let x=isNaN(f)?null:f;u(m=>{let c=[...m];return c[p]=x,c});}},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",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:r?jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[p]??""})},p))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:l,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(()=>le(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 or({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:a,onSettingsChange:o,headerExtra:n,className:u}){return jsx(Ve,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsx(ir,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:u})})}function ir({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:a,className:o}){let n=$e({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),u=useCallback(m=>n.setAmount(m),[n]),i=useCallback(m=>{let c=n.tokenBalance?.amount;if(!c)return;let S=new de(c).times(m).div(100).toNumber();n.setAmount(S);},[n]),l=useCallback(m=>{n.updateBuySettings({...n.settings.buy,customAmounts:m});},[n]),d=useCallback(m=>{n.updateSellSettings({...n.settings.sell,customPercentages:m});},[n]),p=useCallback(m=>{let c=n.direction==="buy",S=c?n.buyPreset:n.sellPreset;if(c){let P=n.settings.buy,T=[...P.presets];T[S]=m,n.updateBuySettings({...P,presets:T});}else {let P=n.settings.sell,T=[...P.presets];T[S]=m,n.updateSellSettings({...P,presets:T});}},[n]),f=useCallback(m=>{n.direction==="buy"?n.setBuyPreset(m):n.setSellPreset(m);},[n]),x=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(He,{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:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,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:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function Ze(e){let{id:t,chain:s,token:r,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:u}=e,[i,l]=useAtom(G(H(t,s,r.address,a))),d=useAtomValue(L(D(s,"buy",0,a))),p=useAtomValue(L(D(s,"buy",1,a))),f=useAtomValue(L(D(s,"buy",2,a))),x=useMemo(()=>[d,p,f],[d,p,f]),m=useCallback(S=>{l(P=>({...P,amount:S})),o?.(S);},[l,o]),c=useCallback(S=>{l(P=>({...P,preset:S})),n?.(S);},[l,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:m,preset:i.preset,handlePresetChange:c,onPresetClick:u,presetValues:x}}function Je({token:e,chain:t,amount:s,onAmountChange:r,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:u,radius:i="full",size:l="md",className:d}){let{t:p}=useTranslation(),f=useMemo(()=>O(t),[t]),x=useCallback(m=>{o?.(Number(m));},[o]);return jsxs("div",{className:cn("flex items-center border-2 border-border",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",l==="sm"&&"h-8 pr-2",l==="md"&&"h-10 pr-2.5",l==="lg"&&"h-12 pr-3",d),children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:m=>r(isNaN(m)?void 0:m),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:l,startContent:jsx(LightningIcon,{width:l==="sm"?12:l==="md"?16:20,height:l==="sm"?12:l==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:l==="sm"?16:l==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsx("div",{className:"w-px bg-border self-stretch my-1.5 mx-1.5 flex-none"}),jsx(StyledLightTabs,{color:"primary",size:l,selectedKey:String(a),onSelectionChange:x,classNames:{base:"flex-none h-full",tabList:cn("bg-transparent gap-0 h-full",l==="sm"&&"p-0.5",l==="md"&&"p-1",l==="lg"&&"p-1.5"),tab:cn("h-full",l==="sm"&&"text-xs px-2",l==="md"&&"text-sm px-2.5",l==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((m,c)=>jsx(Tab,{title:jsx(StyledTooltip,{content:jsx(Tr,{values:u?.[c]??f,chain:t}),classNames:{content:"w-fit bg-content2 p-4"},offset:12,children:jsx("span",{onClick:()=>a===c&&n?.(c),children:p("trade.preset.short",{n:c+1})})})},String(c)))})]})}function Tr({values:e,chain:t}){let{t:s}=useTranslation(),r=useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"w-full flex flex-col gap-2 text-sm text-neutral",children:[jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxs("span",{className:"flex gap-1 items-center",children:[jsx(SlippageIcon,{width:18,height:18}),jsx("span",{className:"font-medium",children:s("trade.preset.slippage")})]}),jsx("span",{className:"text-foreground",children:formatPercent((e.slippage??0)/100)})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxs("span",{className:"flex gap-1 items-center",children:[jsx(ZapFastIcon,{width:18,height:18}),jsx("span",{className:"font-medium",children:s(`trade.preset.${r.feeType}`)})]}),jsxs("span",{className:"text-foreground",children:[formatPrice(e.priorityFee??0)," ",r.feeUnit]})]}),r.showTipFee&&jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxs("span",{className:"flex gap-1 items-center",children:[jsx(CoinsIcon,{width:18,height:18}),jsx("span",{className:"font-medium",children:s("trade.preset.tipFee")})]}),jsxs("span",{className:"text-foreground",children:[formatPrice(e.tipFee??0)," ",r.tipFeeUnit]})]}),jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxs("span",{className:"flex gap-1 items-center",children:[a==="off"&&jsx(ShieldOffIcon,{width:18,height:18}),a==="reduced"&&jsx(ShieldIcon,{width:18,height:18}),a==="secure"&&jsx(ShieldPlusIcon,{width:18,height:18}),jsx("span",{className:"font-medium",children:s("trade.preset.antiMev")})]}),jsx("span",{className:"text-foreground",children:s(`trade.preset.antiMev.${a}`)})]})]})}function Nr({size:e,radius:t,className:s,...r}){let{token:a,chain:o,amount:n,handleAmountChange:u,preset:i,handlePresetChange:l,onPresetClick:d,presetValues:p}=Ze(r);return jsx(Je,{token:a,chain:o,amount:n,onAmountChange:u,preset:i,onPresetChange:l,onPresetClick:d,presetValues:p,size:e,radius:t,className:s})}function Ye(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:a,onChange:o}=e,[n,u]=useState(r),[i,l]=useAtom(L(D(t,n,s,a))),d=useCallback(p=>{l(p),o?.(n,p);},[l,o,n]);return {direction:n,setDirection:u,value:i,handleChange:d}}function tt({disableAnimation:e,className:t,...s}){let{t:r}=useTranslation(),{direction:a,setDirection:o,value:n,handleChange:u}=Ye(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(he,{value:n,onChange:u,chain:s.chain,disableAnimation:e})]})}var kr=3;function nt(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,a]=useState(t),o=useCallback((n,u)=>{s?.(r,n,u);},[s,r]);return {presetCount:kr,presetIndex:r,setPresetIndex:a,handlePresetChange:o}}function rt({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:a}=useTranslation(),{presetCount:o,presetIndex:n,setPresetIndex:u,handlePresetChange:i}=nt(r);return jsxs("div",{className:cn("space-y-3",s),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:l=>u(Number(l)),disableAnimation:t,"aria-label":a("trade.preset.presets"),children:Array.from({length:o},(l,d)=>jsx(Tab,{title:a("trade.preset.label",{n:d+1})},String(d)))}),jsx(tt,{chain:r.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var Jr="preset";function Yr({id:e=Jr}){return jsx(AsyncModal,{id:e,children:t=>jsx(ea,{...t})})}function ea({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=useTranslation(),{chains:a,defaultChain:o,defaultDirection:n,defaultPresetIndex:u,storageKeyPrefix:i,onChange:l}=e,[d,p]=useState(o??a[0]);useEffect(()=>{p(o??a[0]);},[o,a]);let f=useCallback((x,m,c)=>{l?.(d,x,m,c);},[l,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:p})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(rt,{chain:d,defaultDirection:n,defaultPresetIndex:u,storageKeyPrefix:i,onChange:f})})})]})})}function Ae(e,t,s,r,a){let o=O(a),n=new de(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),u=new de(r.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de(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:u,tipFee:i,isAntiMev:r.antiMev!=="off"}}function it(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:u}=e,{amount:i,preset:l}=useAtomValue(G(H(t,s,r.address,o))),d=useAtomValue(L(D(s,"buy",l,o))),p=useConnectedWallet(s),{swap:f,isSwapping:x}=ne({onSubmitted:n,onError:u}),m=!i||!a,c=useAuthCallback(async()=>{if(!i||!p||!a)return;let S=Ae(i,r,a,d,s);try{await f({...S,chain:s,wallet:p});}catch{}},[p,i,a,s,r,d,f]);return useMemo(()=>({amount:i,token:r,isDisabled:m,isSwapping:x,handleSwap:c}),[i,r,m,x,c])}function oa({size:e="sm",radius:t,color:s="primary",className:r,...a}){let{amount:o,token:n,isDisabled:u,isSwapping:i,handleSwap:l}=it(a);return jsx(Button,{fullWidth:true,size:e,radius:t,color:s,className:r,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:u,isLoading:i,onPress:l,children:o!=null?`${o} ${n.symbol}`:n.symbol})}var Yt=createContext(null);function pa({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let a=useConnectedWallet(e),{swap:o}=ne({onSubmitted:t,onError:s}),n=useRef(a);n.current=a;let u=useRef(o);u.current=o;let i=useRef(e);i.current=e;let l=useCallback(async p=>{let f=n.current;if(f)return u.current({...p,wallet:f,chain:i.current})},[]),d=useAuthCallback(l,[]);return jsx(Yt.Provider,{value:d,children:r})}function ut(){let e=useContext(Yt);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function dt(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o}=e,{amount:n,preset:u}=useAtomValue(G(H(t,s,r.address,o))),i=useAtomValue(L(D(s,"buy",u,o))),l=ut(),[d,p]=useState(false),f=!n||!a,x=useRef(r);x.current=r;let m=useRef(i);m.current=i;let c=useRef(s);c.current=s;let S=useCallback(async()=>{if(!n||!a)return;let P=Ae(n,x.current,a,m.current,c.current);p(true);try{await l(P);}catch{}finally{p(false);}},[n,a,l]);return useMemo(()=>({amount:n,token:r,isDisabled:f,isSwapping:d,handleSwap:S}),[n,r,f,d,S])}var Sa=memo(function({size:t="sm",radius:s,color:r="primary",className:a,...o}){let{amount:n,token:u,isDisabled:i,isSwapping:l,handleSwap:d}=dt(o);return jsx(Button,{variant:"solid",fullWidth:true,size:t,radius:s,color:r,className:a,disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none"}),isDisabled:i,isLoading:l,onPress:d,children:n!=null?`${n} ${u.symbol}`:u.symbol})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.13");var Pa="0.1.13";
|
|
2
|
+
export{Je as AmountPresetInputUI,Nr as AmountPresetInputWidget,ft as DEFAULT_BSC_TRADE_PRESET,ct as DEFAULT_EVM_TRADE_PRESET,ps as DEFAULT_INSTANT_TRADE_SETTINGS,xt as DEFAULT_SELL_PERCENTAGES,pt as DEFAULT_SOL_TRADE_PRESET,oa as InstantTradeButtonWidget,Sa as InstantTradeListButtonWidget,Ve as InstantTradeProvider,pa as InstantTradeSwapProvider,He as InstantTradeUI,or as InstantTradeWidget,rt as MultiPresetFormWidget,Yr as PresetFormModal,he as PresetFormUI,tt as PresetFormWidget,De as SwapPreviewModal,_e as SwapUI,is as SwapWidget,le as getChainPresetFeatures,gt as getDefaultBuyAmounts,O as getDefaultPresetForChain,G as instantTradeAmountAtomFamily,H as instantTradeAmountKey,L as presetAtomFamily,D as presetKey,Ze as useAmountPresetInputScript,Oe as useInstantTrade,Aa as useInstantTradeAmount,it as useInstantTradeButtonScript,dt as useInstantTradeListButtonScript,$e as useInstantTradeScript,ut as useInstantTradeSwap,nt as useMultiPresetFormScript,Ye as usePresetFormScript,Oa as usePresetValues,ne as useSwap,bt as useSwapRoutePolling,Re as useSwapScript,St as useTxConfirmation,Pa as version};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|