@liberfi.io/ui-trade 0.1.136 → 0.1.138
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 +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- 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,Spinner,LightningIcon,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn as cn$1,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,useScreen,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import de from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var ln="liberfi.",un={amount:void 0,preset:0};function mn(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function dn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,id:o,chain:a,tokenAddress:n}}function j(e,t,s,r=ln){return `${r}:${e}.${t}.${s}`}var G=atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:o}=dn(e);return atomWithStorage(mn(t,s,String(r),o),un,void 0,{getOnInit:true})});function ka({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return useAtomValue(G(j(e,t,s,r)))}var ct={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ft={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},gt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},cn={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]},fn=[1,10,25,50];function xt(e){return cn[e]??fn}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 s=t.symbol;return isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return isSolanaChain(e)?ct:isBinanceChain(e)?gt:ft}var yn="liberfi.";function bn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function Sn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,chain:o,direction:a,index:Number(n)}}function D(e,t,s,r=yn){return `${r}:${e}.${t}.${s}`}var L=atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:o}=Sn(e);return atomWithStorage(bn(t,String(s),r,o),V(s),void 0,{getOnInit:true})});function Ha({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return useAtomValue(L(D(e,t,s,r)))}function An(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 Fn(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function ne(e){let{client:t}=useDexClient(),[s,r]=useState(false),o=useRef(e);o.current=e;let a=useCallback(async n=>{let{wallet:l,chain:i,...u}=n;r(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:l.address,input:u.input,output:u.output,mode:u.mode??API.SwapMode.EXACT_IN,amount:u.amount,slippage:u.slippage,priorityFee:u.priorityFee,tipFee:u.tipFee,isAntiMev:u.isAntiMev,permit:u.permit,deadline:u.deadline});}catch(m){let g=m instanceof Error?m:new Error(String(m));throw o.current?.onError?.(g,"route"),g}let p;try{let m=An(d.serializedTx);p=await l.signTransaction(m);}catch(m){let g=m instanceof Error?m:new Error(String(m));throw o.current?.onError?.(g,"sign"),g}let c;try{let m=Fn(p);c=await t.sendTx({chain:i,serializedTx:m});}catch(m){let g=m instanceof Error?m:new Error(String(m));throw o.current?.onError?.(g,"send"),g}let x={txHash:c.txHash,extra:c.extra};return o.current?.onSubmitted?.(x),x}finally{r(false);}},[t]);return useMemo(()=>({swap:a,isSwapping:s}),[a,s])}var kn=12e3;function St(e,t){let s=t?.interval??kn,r=t?.paused??false,o=useRef(t);o.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,l=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return useEffect(()=>{l.error&&o.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var Wn=6e4;function Pt(e){let{client:t}=useDexClient(),[s,r]=useState(()=>new Map),o=useRef(e);o.current=e;let a=useCallback((u,d)=>{r(p=>{let c=p.get(u);if(!c||c.status===d)return p;let x=new Map(p);return x.set(u,{...c,status:d}),x});},[]),n=useCallback((u,d)=>{r(c=>{if(c.has(d))return c;let x=new Map(c);return x.set(d,{chain:u,txHash:d,status:"pending"}),x});let p=o.current?.timeout??Wn;t.checkTxSuccess(u,d,p).then(c=>{if(c)a(d,"confirmed"),o.current?.onConfirmed?.(d);else {let x=new Error("Transaction failed on-chain");a(d,"failed"),o.current?.onFailed?.(d,x);}}).catch(c=>{let x=c instanceof Error?c:new Error(String(c));a(d,"failed"),o.current?.onFailed?.(d,x);});},[t,a]),l=useCallback(u=>{r(d=>{if(!d.has(u))return d;let p=new Map(d);return p.delete(u),p});},[]),i=useCallback(()=>{r(u=>u.size===0?u:new Map);},[]);return useMemo(()=>({track:n,clear:l,clearAll:i,transactions:s}),[n,l,i,s])}var $n=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function Qn(e){return $n.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var zn=1e4,Hn=15e3;function jn(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let o=r.padStart(t+1,"0"),a=o.slice(0,o.length-t)||"0",l=o.slice(o.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function ke(e){let{chain:t}=e,s=useWallets(),r=Qn(t),o=useMemo(()=>s.find(S=>S.chainNamespace===r&&S.isConnected),[s,r]),a=o?.address??"",[n,l]=useState(e.from??""),[i,u]=useState(e.to??""),d=useRef(e.from),p=useRef(e.to);useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&u(e.to));},[e.to]);let c=useMemo(()=>[n,i].filter(Boolean),[n,i]),x=useTokensQuery({chain:t,addresses:c},{enabled:c.length>0,refetchInterval:zn}),m=useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),g=useMemo(()=>x.data?.find(S=>S.address===i)??null,[x.data,i]),b=useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:c},{enabled:!!a&&c.length>0,refetchInterval:Hn}),P=useMemo(()=>b.data?.find(S=>S.address===n)??null,[b.data,n]),v=useMemo(()=>b.data?.find(S=>S.address===i)??null,[b.data,i]),[f,A]=useState(void 0),M=useMemo(()=>{if(!f||m?.decimals==null)return;let S=f.split("."),B=S[0]??"0",Ue=(S[1]??"").slice(0,m.decimals).padEnd(m.decimals,"0");return (B+Ue).replace(/^0+/,"")||"0"},[f,m?.decimals]),$=useMemo(()=>{if(!f||!m?.marketData?.priceInUsd)return;let S=Number(m.marketData.priceInUsd),B=Number(f)*S;return Number.isFinite(B)?B.toString():void 0},[f,m?.marketData?.priceInUsd]),Q=useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let B=S/2,Se=m?.decimals??9;A(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:Se}));},[P,m?.decimals]),H=useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let B=m?.decimals??9;A(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[P,m?.decimals]),U=useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:API.SwapMode.EXACT_IN,amount:M}),[t,a,n,i,M]),q=useRef(false),{route:F,isRouting:J,error:Y}=St(U,{paused:q.current}),z=useMemo(()=>F&&g?jn(F.plans,g.decimals):void 0,[F,g]),re=useMemo(()=>{if(!z||!g?.marketData?.priceInUsd)return;let S=Number(g.marketData.priceInUsd),B=Number(z)*S;return Number.isFinite(B)?B.toString():void 0},[z,g?.marketData?.priceInUsd]),{swap:w,isSwapping:R}=ne();q.current=R;let O=useRef(e.onComplete);O.current=e.onComplete;let{track:ae,transactions:ee}=Pt({onConfirmed:S=>{O.current?.({success:true,txHash:S});},onFailed:S=>{O.current?.({success:false,txHash:S});}}),oe=useMemo(()=>{if(ee.size===0)return "idle";let S=Array.from(ee.values());return S[S.length-1].status},[ee]),te=useCallback(async()=>{if(!(!o||!F||!n||!i||!M))try{let S=await w({chain:t,wallet:o,input:n,output:i,amount:M,mode:API.SwapMode.EXACT_IN});ae(t,S.txHash);}catch{}},[o,F,t,n,i,M,w,ae]),ie=x.isPending||b.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:m,toToken:g,fromBalance:P,toBalance:v,amount:f,setAmount:A,setHalfAmount:Q,setMaxAmount:H,amountInDecimals:M,amountInUsd:$,outputAmount:z,outputAmountInUsd:re,route:F,isRouting:J,routeError:Y,swap:te,isSwapping:R,txStatus:oe,isLoading:ie}),[n,i,m,g,P,v,f,Q,H,M,$,z,re,F,J,Y,te,R,oe,ie])}function Le({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:o,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:d,routeError:p,onConfirm:c,isSwapping:x}){let{t:m}=useTranslation(),[g,b]=useState(false),P=useCallback(()=>b(f=>!f),[]),v=useMemo(()=>u?u.plans.map((f,A)=>({key:`plan-${A}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.feeAmount})):[],[u]);return jsx(Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children: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"}),o&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(os,{}),jsxs("span",{children:[Be(o.amount)," ",s?.symbol]})]})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Be(a)}),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:[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(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(i)]})]})]})]}),g&&v.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:v.map(f=>jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[De(f.inputAmount)," ",we(f.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[De(f.outputAmount)," ",we(f.output)]})]})]}),f.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:[De(f.feeAmount)," ",we(f.feeQuote)]})]})]},f.key))})]}),v.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:g?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:m(g?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!p,isLoading:!u&&d||x,onPress:c,children:m("common.confirm")})})]})})}function os(){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 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 De(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function we(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function We({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:o,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:p,onToTokenSelect:c,route:x,isRouting:m,routeError:g,onPreview:b,isSwapping:P,className:v}){let{t:f}=useTranslation();return jsxs("div",{className:cn$1("px-4 pb-4 lg:pb-8",v),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.from")}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:o??"",onChange:A=>n(A.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn$1("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn$1("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn$1("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsx(Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Mt(a)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Et,{}),jsxs("span",{className:"text-neutral",children:[Rt(s.amount)," ",s.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:f("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),g&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:g.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.to")}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:u??"",disabled:true,placeholder:"0",classNames:{inputWrapper:cn$1("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn$1("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn$1("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsx(Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:t?t.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Mt(d)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Et,{}),jsxs("span",{className:"text-neutral",children:[Rt(r.amount)," ",r.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!x,isLoading:!x&&m,onPress:b,children:f(P?"trade.swap.swapping":m?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Et(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Mt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Rt(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 ms({chain:e,from:t,to:s,onComplete:r,className:o}){let a=ke({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),d=useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxs(Fragment,{children:[jsx(We,{fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,toBalance:a.toBalance,amount:a.amount,amountInUsd:a.amountInUsd,onAmountChange:a.setAmount,onHalfAmount:a.setHalfAmount,onMaxAmount:a.setMaxAmount,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,onFromTokenSelect:a.setFromTokenAddress,onToTokenSelect:a.setToTokenAddress,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onPreview:l,isSwapping:a.isSwapping,className:o}),jsx(Le,{isOpen:n,onOpenChange:i,fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,inputAmount:a.amount,inputAmountInUsd:a.amountInUsd,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onConfirm:d,isSwapping:a.isSwapping})]})}function Dt(e){let t=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:xt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...ht],presets:[{...t},{...t},{...t}]}}}var gs=Dt("900900900");function Lt(e){return `liberfi.instant-trade.settings.${e}`}function xs(e,t){try{let s=localStorage.getItem(Lt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function hs(e,t){try{localStorage.setItem(Lt(e),JSON.stringify(t));}catch{}}var _t=createContext(null);function Ve(){let e=useContext(_t);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ke({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:o}){let a=useMemo(()=>getNativeToken(e),[e]),n=s!==void 0,l=useMemo(()=>Dt(e),[e]),[i,u]=useState(()=>n?l:xs(e,l)),d=n?s:i,p=useCallback(U=>{n?r?.(U):(u(U),hs(String(e),U));},[n,r,e]),c=useCallback(U=>p({...d,buy:U}),[d,p]),x=useCallback(U=>p({...d,sell:U}),[d,p]),[m,g]=useState("buy"),[b,P]=useState(),[v,f]=useState(0),[A,M]=useState(0),$=useMemo(()=>V(e),[e]),Q=useMemo(()=>{let U=m==="buy"?v:A;return (m==="buy"?d.buy.presets:d.sell.presets)[U]??$},[m,v,A,d,$]),H=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:m,setDirection:g,amount:b,setAmount:P,buyPreset:v,setBuyPreset:f,sellPreset:A,setSellPreset:M,settings:d,updateBuySettings:c,updateSellSettings:x,currentPresetValues:Q}),[e,t,a,m,b,v,A,d,c,x,Q]);return jsx(_t.Provider,{value:H,children:o})}var Fs=15e3,Us=1e4;function Qe(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:o}=e,{t:a}=useTranslation(),n=Ve(),l=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),u=useWallets(),d=chainToNamespace(t),p=useMemo(()=>u.find(w=>w.chainNamespace===d&&w.isConnected),[u,d]),c=p?.address??"",x=useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),m=useTokensQuery({chain:t,addresses:x},{enabled:x.length>0,refetchInterval:Us}),g=useMemo(()=>m.data?.find(w=>w.address===s)??null,[m.data,s]),b=useWalletPortfoliosByTokensQuery({chain:t,address:c,tokenAddresses:x},{enabled:!!c&&x.length>0,refetchInterval:Fs}),P=l?.address??i?.address??"",v=useMemo(()=>b.data?.find(w=>w.address===P)??null,[b.data,P]),f=useMemo(()=>b.data?.find(w=>w.address===s)??null,[b.data,s]),[A,M]=useState(false),$=useRef(null),Q=useCallback(w=>{let R=$.current;$.current=w,M(O=>R===null||R!==w?true:!O);},[]),H=useRef(r);H.current=r;let U=useRef(o);U.current=o;let{swap:q,isSwapping:F}=ne({onSubmitted:w=>H.current?.(w),onError:(w,R)=>U.current?.(w,R)}),J=useCallback(async()=>{if(!n.amount||!p||!s)return;let w=l?.decimals??9,R=i?.address??l?.address??"",O=n.direction==="buy",ae=O?R:s,ee=O?s:R,oe=O?w:g?.decimals??9,te=new de(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,S=V(t),B=ie.slippage??S.slippage??1,Se=ie.antiMev!=="off",Ue=isSolanaChain(t)?{priorityFee:new de(ie.priorityFee??S.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de(ie.tipFee??S.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:Se}:{};try{await q({chain:t,wallet:p,input:ae,output:ee,amount:te,slippage:B,...Ue}),n.setAmount(void 0);}catch{}},[n,p,s,l,i,g,t,q]),Y=useMemo(()=>{let w=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let R=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=v?.amount;if(ae&&new de(ae).lt(n.amount))return `${w}${R}`;let ee=l?.symbol??"",oe=m.data?.find(te=>te.address===P)?.marketData?.priceInUsd;if(oe){let te=formatAmountUSD(new de(n.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let O=f?.amount;return O&&new de(O).lt(n.amount)?`${w}${R}`:w},[a,n.direction,n.amount,v,f,l,m.data,P]),z=!n.amount||!p||!s,re=m.isPending||b.isPending;return useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:g,nativeBalance:v,tokenBalance:f,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:A,handlePresetClick:Q,swap:J,isSwapping:F,submitText:Y,isDisabled:z,isLoading:re}),[t,s,l,g,v,f,n,A,Q,J,F,Y,z,re])}function ye({value:e,onChange:t,chain:s,disableAnimation:r,className:o}){let a=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>le(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn$1("space-y-4",o),children:[jsx(Os,{value:e.slippage,onChange:i=>a({slippage:i})}),jsx(Vs,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(Ks,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx($s,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:r}),e.autoFee&&jsx(Qs,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(zs,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsx(Hs,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Os({value:e,onChange:t}){let{t:s}=useTranslation(),r=s("trade.preset.slippage");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children:r}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function Vs({value:e,onChange:t,feeType:s,symbol:r,decimals:o}){let{t:a}=useTranslation(),n=a(`trade.preset.${s}`),l=a(`trade.preset.${s}.tooltip`);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsx(StyledTooltip,{content:l,children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function Ks({value:e,onChange:t,symbol:s,decimals:r}){let{t:o}=useTranslation(),a=o("trade.preset.tipFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsx(StyledTooltip,{content:o("trade.preset.tipFee.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function $s({value:e,onChange:t,disableAnimation:s}){let{t:r}=useTranslation(),o=r("trade.preset.autoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsx(StyledTooltip,{content:r("trade.preset.autoFee.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":o,disableAnimation:s})})]})}function Qs({value:e,onChange:t,symbol:s}){let{t:r}=useTranslation(),o=r("trade.preset.maxAutoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children:o}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":o})]})}function zs({value:e,onChange:t,options:s,disableAnimation:r}){let{t:o}=useTranslation(),a=o("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),l=useMemo(()=>({off:{title:o("trade.preset.antiMev.off"),desc:o("trade.preset.antiMev.off.desc")},reduced:{title:o("trade.preset.antiMev.reduced"),desc:o("trade.preset.antiMev.reduced.desc")},secure:{title:o("trade.preset.antiMev.secure"),desc:o("trade.preset.antiMev.secure.desc")}}),[o]);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsx(StyledTooltip,{content:o("trade.preset.antiMev.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:r,"aria-label":a,children:s.map(i=>{let u=n[i],d=l[i];return jsx(Tab,{title:jsx(StyledTooltip,{content:jsxs("div",{className:"text-xs",children:[jsx("div",{className:"font-medium text-foreground",children:d.title}),jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsx("span",{className:"flex items-center justify-center",children:jsx(u,{width:18,height:18})})})},i)})})})]})}function Hs({value:e,onChange:t}){let{t:s}=useTranslation(),r=s("trade.preset.customRpc");return jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsx("div",{className:"flex-none text-sm text-neutral",children:r}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>t(o||null),placeholder:"https://...","aria-label":r})})]})}function Ge({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:o,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:p,nativeBalance:c,tokenBalance:x,amountConversion:m,preset:g,onPresetChange:b,presetValues:P,onPresetSettingsChange:v,showSettings:f,onPresetClick:A,submitText:M,isDisabled:$,isLoading:Q,onSubmit:H,className:U,headerExtra:q}){let{t:F}=useTranslation(),J=useMemo(()=>getNativeToken(e),[e]),Y=J?.symbol,z=J?.decimals??9;return jsxs("div",{className:cn$1("flex-none sm:px-3 py-3 bg-content1 rounded-lg",U),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:cn$1("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsx(Tab,{title:F("common.buy")},"buy"),jsx(Tab,{title:F("common.sell")},"sell")]}),jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsx(Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsx(Tab,{title:F("trade.market")},"market")}),q]}),jsx("div",{className:"mt-2.5",children:t==="buy"?jsx(rr,{amount:r,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:Y,nativeDecimals:z,amountLabel:F("trade.amount")}):jsx(ar,{amount:r,onAmountChange:o,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:p,amountLabel:F("trade.amount")})}),jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsx("span",{children:F("trade.balance")}),jsx("span",{children:t==="buy"?c?`${c} ${Y??""}`:"--":x?`${x} ${p??""}`:"--"})]}),m&&jsx("div",{className:"text-xs text-neutral",children:m})]}),jsx("div",{className:"mt-4",children:jsx(or,{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:`${g}`,onSelectionChange:re=>b(Number(re)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsx(Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>A(0)},0),jsx(Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>A(1)},1),jsx(Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>A(2)},2)]})}),f&&jsx("div",{className:"mt-2.5",children:jsx(ye,{value:P,onChange:v,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:Q,onPress:H,children:M})]})}function rr({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:l}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:cn$1("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Qt,{values:s,onSelect:r,onEdit:o})]})}function ar({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:o,tokenSymbol:a,amountLabel:n}){let l=useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),classNames:{inputWrapper:cn$1("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Qt,{values:s,onSelect:r,onEdit:o,suffix:"%"})]})}function Qt({values:e,onSelect:t,onEdit:s,suffix:r}){let[o,a]=useState(false),[n,l]=useState([]),i=useCallback(()=>{l([...e]),a(true);},[e]),u=useCallback(()=>{a(false),s(n);},[s,n]);return jsxs("div",{className:"flex gap-0.5",children:[jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,p)=>jsx("div",{className:cn$1("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:o?jsx(NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:c=>{if(typeof c=="number"){let x=isNaN(c)?null:c;l(m=>{let g=[...m];return g[p]=x,g});}},min:0,hideStepper:true,classNames:{inputWrapper:cn$1("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:r?jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[p]??""})},p))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:o?jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:u,children:jsx(CheckIcon,{width:12,height:12})}):jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsx(EditIcon,{width:12,height:12})})})]})}function or({values:e,chain:t}){let{t:s}=useTranslation(),r=useMemo(()=>le(t),[t]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(SlippageIcon,{width:14,height:14}),children:formatPercent((e.slippage??0)/100)})}),jsx(Tooltip,{content:s(`trade.preset.${r.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(ZapFastIcon,{width:14,height:14}),children:formatPrice(e.priorityFee??0)})}),r.showTipFee&&jsx(Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(CoinsIcon,{width:14,height:14}),children:formatPrice(e.tipFee??0)})}),jsx(Tooltip,{content:s("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxs(Fragment,{children:[o==="off"&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),o==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),o==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${o}`)})})]})}function ur({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:o,onSettingsChange:a,headerExtra:n,className:l}){return jsx(Ke,{chain:e,tokenAddress:t,settings:o,onSettingsChange:a,children:jsx(mr,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:l})})}function mr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:o,className:a}){let n=Qe({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),l=useCallback(m=>n.setAmount(m),[n]),i=useCallback(m=>{let g=n.tokenBalance?.amount;if(!g)return;let b=new de(g).times(m).div(100).toNumber();n.setAmount(b);},[n]),u=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 g=n.direction==="buy",b=g?n.buyPreset:n.sellPreset;if(g){let P=n.settings.buy,v=[...P.presets];v[b]=m,n.updateBuySettings({...P,presets:v});}else {let P=n.settings.sell,v=[...P.presets];v[b]=m,n.updateSellSettings({...P,presets:v});}},[n]),c=useCallback(m=>{n.direction==="buy"?n.setBuyPreset(m):n.setSellPreset(m);},[n]),x=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(Ge,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:x,onPresetChange: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:a,headerExtra:o})}function qe(e){let{id:t,chain:s,token:r,storageKeyPrefix:o,onAmountChange:a,onPresetChange:n,onPresetClick:l}=e,[i,u]=useAtom(G(j(t,s,r.address,o))),d=useAtomValue(L(D(s,"buy",0,o))),p=useAtomValue(L(D(s,"buy",1,o))),c=useAtomValue(L(D(s,"buy",2,o))),x=useMemo(()=>[d,p,c],[d,p,c]),m=useCallback(b=>{u(P=>({...P,amount:b})),a?.(b);},[u,a]),g=useCallback(b=>{u(P=>({...P,preset:b})),n?.(b);},[u,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:m,preset:i.preset,handlePresetChange:g,onPresetClick:l,presetValues:x}}function Je({token:e,chain:t,amount:s,onAmountChange:r,preset:o=0,onPresetChange:a,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:d}){let{t:p}=useTranslation(),{isMobile:c}=useScreen(),x=useRef(null),m=useMemo(()=>V(t),[t]),[g,b]=useState(null),P=useCallback(v=>{a?.(Number(v));},[a]);return jsxs("div",{ref:x,className:cn$1("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",d),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:v=>r(isNaN(v)?void 0:v),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsx(LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsx(StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:P,classNames:{base:"flex-none h-full",tabList:cn$1("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:cn$1("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((v,f)=>jsx(Tab,{title:c?jsx("span",{onClick:A=>{o===f&&(A.stopPropagation(),b(M=>M===f?null:f));},children:p("trade.preset.short",{n:f+1})}):jsx(StyledTooltip,{content:jsx(qt,{label:p("trade.preset.short",{n:f+1}),values:l?.[f]??m,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsx("span",{onClick:()=>o===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))}),c&&g!==null&&jsx(Fr,{label:p("trade.preset.short",{n:g+1}),values:l?.[g]??m,chain:t,onClose:()=>b(null),containerRef:x})]})}function Fr({label:e,values:t,chain:s,onClose:r,containerRef:o}){let a=useRef(null);return useEffect(()=>{let n=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&r();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[r,o]),jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsx(qt,{label:e,values:t,chain:s})})}function qt({label:e,values:t,chain:s}){let{t:r}=useTranslation(),o=useMemo(()=>le(s),[s]),a=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxs("div",{className:"flex flex-col py-2",children:[jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsx(LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(SlippageIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.slippage")})]}),jsx("span",{className:cn$1("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:formatPercent(n)})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r(`trade.preset.${o.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.priorityFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.feeUnit})]})]}),o.showTipFee&&jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(CoinsIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.tipFee")})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.tipFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.tipFeeUnit})]})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[a==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),a==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),a==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.antiMev")})]}),jsx("span",{className:cn$1("text-xs font-medium",a==="off"&&"text-zinc-500",a==="reduced"&&"text-amber-400",a==="secure"&&"text-emerald-400"),children:r(`trade.preset.antiMev.${a}`)})]})]})}function Ur({size:e,radius:t,className:s,...r}){let{token:o,chain:a,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:d,presetValues:p}=qe(r);return jsx(Je,{token:o,chain:a,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:d,presetValues:p,size:e,radius:t,className:s})}function Ye(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:o,onChange:a}=e,[n,l]=useState(r),[i,u]=useAtom(L(D(t,n,s,o))),d=useCallback(p=>{u(p),a?.(n,p);},[u,a,n]);return {direction:n,setDirection:l,value:i,handleChange:d}}function tt({disableAnimation:e,className:t,...s}){let{t:r}=useTranslation(),{direction:o,setDirection:a,value:n,handleChange:l}=Ye(s);return jsxs("div",{className:cn$1("space-y-3",t),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":"Buy / Sell",children:[jsx(Tab,{title:r("common.buy")},"buy"),jsx(Tab,{title:r("common.sell")},"sell")]}),jsx(ye,{value:n,onChange:l,chain:s.chain,disableAnimation:e})]})}var Or=3;function nt(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,o]=useState(t),a=useCallback((n,l)=>{s?.(r,n,l);},[s,r]);return {presetCount:Or,presetIndex:r,setPresetIndex:o,handlePresetChange:a}}function rt({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:o}=useTranslation(),{presetCount:a,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=nt(r);return jsxs("div",{className:cn$1("space-y-3",s),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,d)=>jsx(Tab,{title:o("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 sa="preset";function ra({id:e=sa}){return jsx(AsyncModal,{id:e,children:t=>jsx(aa,{...t})})}function aa({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=useTranslation(),{chains:o,defaultChain:a,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[d,p]=useState(a??o[0]);useEffect(()=>{p(a??o[0]);},[a,o]);let c=useCallback((x,m,g)=>{u?.(d,x,m,g);},[u,d]);return jsx(StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxs(ModalContent,{children:[jsx(ModalHeader,{children:jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:r("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:o,chain:d,onSelectChain:p})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(rt,{chain:d,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:c})})})]})})}function Fe(e,t,s,r,o){let a=V(o),n=new de(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new de(r.priorityFee??a.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de(r.tipFee??a.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function it(e){let{id:t,chain:s,token:r,output:o,storageKeyPrefix:a,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(G(j(t,s,r.address,a))),d=useAtomValue(L(D(s,"buy",u,a))),p=useConnectedWallet(s),{swap:c,isSwapping:x}=ne({onSubmitted:n,onError:l}),m=!i||!o,g=useAuthCallback(async()=>{if(!i||!p||!o)return;let b=Fe(i,r,o,d,s);try{await c({...b,chain:s,wallet:p});}catch{}},[p,i,o,s,r,d,c]);return useMemo(()=>({amount:i,token:r,isDisabled:m,isSwapping:x,handleSwap:g}),[i,r,m,x,g])}function da({size:e="sm",radius:t,color:s="primary",className:r,...o}){let{amount:a,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=it(o);return jsx(Button,{fullWidth:true,size:e,radius:t,color:s,className:r,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${n.symbol}`:n.symbol})}var sn=createContext(null);function ha({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let o=useConnectedWallet(e),{swap:a}=ne({onSubmitted:t,onError:s}),n=useRef(o);n.current=o;let l=useRef(a);l.current=a;let i=useRef(e);i.current=e;let u=useCallback(async p=>{let c=n.current;if(c)return l.current({...p,wallet:c,chain:i.current})},[]),d=useAuthCallback(u,[]);return jsx(sn.Provider,{value:d,children:r})}function ut(){let e=useContext(sn);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:o,storageKeyPrefix:a}=e,{amount:n,preset:l}=useAtomValue(G(j(t,s,r.address,a))),i=useAtomValue(L(D(s,"buy",l,a))),u=ut(),[d,p]=useState(false),c=!n||!o,x=useRef(r);x.current=r;let m=useRef(i);m.current=i;let g=useRef(s);g.current=s;let b=useCallback(async()=>{if(!n||!o)return;let P=Fe(n,x.current,o,m.current,g.current);p(true);try{await u(P);}catch{}finally{p(false);}},[n,o,u]);return useMemo(()=>({amount:n,token:r,isDisabled:c,isSwapping:d,handleSwap:b}),[n,r,c,d,b])}var Ca=memo(function({size:t="sm",radius:s,color:r="primary",className:o,...a}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:d}=dt(a);return jsx(Button,{variant:"solid",fullWidth:true,size:t,radius:s,color:r,className:o,disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:d,style:{background:"rgba(199,255,46,0.08)",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:n!=null?`${n} ${l.symbol}`:l.symbol})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.136");var Ia="0.1.136";
|
|
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,Spinner,LightningIcon,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,cn as cn$1,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,useScreen,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import de from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var ln="liberfi.",un={amount:void 0,preset:0};function mn(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function dn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,id:o,chain:a,tokenAddress:n}}function j(e,t,s,r=ln){return `${r}:${e}.${t}.${s}`}var G=atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:o}=dn(e);return atomWithStorage(mn(t,s,String(r),o),un,void 0,{getOnInit:true})});function ka({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return useAtomValue(G(j(e,t,s,r)))}var ct={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ft={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},gt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},cn={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]},fn=[1,10,25,50];function xt(e){return cn[e]??fn}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 s=t.symbol;return isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return isSolanaChain(e)?ct:isBinanceChain(e)?gt:ft}var yn="liberfi.";function bn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function Sn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,chain:o,direction:a,index:Number(n)}}function D(e,t,s,r=yn){return `${r}:${e}.${t}.${s}`}var L=atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:o}=Sn(e);return atomWithStorage(bn(t,String(s),r,o),V(s),void 0,{getOnInit:true})});function Ha({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return useAtomValue(L(D(e,t,s,r)))}function An(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 Fn(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function ne(e){let{client:t}=useDexClient(),[s,r]=useState(false),o=useRef(e);o.current=e;let a=useCallback(async n=>{let{wallet:l,chain:i,...u}=n;r(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:l.address,input:u.input,output:u.output,mode:u.mode??API.SwapMode.EXACT_IN,amount:u.amount,slippage:u.slippage,priorityFee:u.priorityFee,tipFee:u.tipFee,isAntiMev:u.isAntiMev,permit:u.permit,deadline:u.deadline});}catch(m){let g=m instanceof Error?m:new Error(String(m));throw o.current?.onError?.(g,"route"),g}let p;try{let m=An(d.serializedTx);p=await l.signTransaction(m);}catch(m){let g=m instanceof Error?m:new Error(String(m));throw o.current?.onError?.(g,"sign"),g}let c;try{let m=Fn(p);c=await t.sendTx({chain:i,serializedTx:m});}catch(m){let g=m instanceof Error?m:new Error(String(m));throw o.current?.onError?.(g,"send"),g}let x={txHash:c.txHash,extra:c.extra};return o.current?.onSubmitted?.(x),x}finally{r(false);}},[t]);return useMemo(()=>({swap:a,isSwapping:s}),[a,s])}var kn=12e3;function St(e,t){let s=t?.interval??kn,r=t?.paused??false,o=useRef(t);o.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,l=useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return useEffect(()=>{l.error&&o.current?.onError?.(l.error);},[l.error]),useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var Wn=6e4;function Pt(e){let{client:t}=useDexClient(),[s,r]=useState(()=>new Map),o=useRef(e);o.current=e;let a=useCallback((u,d)=>{r(p=>{let c=p.get(u);if(!c||c.status===d)return p;let x=new Map(p);return x.set(u,{...c,status:d}),x});},[]),n=useCallback((u,d)=>{r(c=>{if(c.has(d))return c;let x=new Map(c);return x.set(d,{chain:u,txHash:d,status:"pending"}),x});let p=o.current?.timeout??Wn;t.checkTxSuccess(u,d,p).then(c=>{if(c)a(d,"confirmed"),o.current?.onConfirmed?.(d);else {let x=new Error("Transaction failed on-chain");a(d,"failed"),o.current?.onFailed?.(d,x);}}).catch(c=>{let x=c instanceof Error?c:new Error(String(c));a(d,"failed"),o.current?.onFailed?.(d,x);});},[t,a]),l=useCallback(u=>{r(d=>{if(!d.has(u))return d;let p=new Map(d);return p.delete(u),p});},[]),i=useCallback(()=>{r(u=>u.size===0?u:new Map);},[]);return useMemo(()=>({track:n,clear:l,clearAll:i,transactions:s}),[n,l,i,s])}var $n=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function Qn(e){return $n.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var zn=1e4,Hn=15e3;function jn(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let o=r.padStart(t+1,"0"),a=o.slice(0,o.length-t)||"0",l=o.slice(o.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function ke(e){let{chain:t}=e,s=useWallets(),r=Qn(t),o=useMemo(()=>s.find(S=>S.chainNamespace===r&&S.isConnected),[s,r]),a=o?.address??"",[n,l]=useState(e.from??""),[i,u]=useState(e.to??""),d=useRef(e.from),p=useRef(e.to);useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&u(e.to));},[e.to]);let c=useMemo(()=>[n,i].filter(Boolean),[n,i]),x=useTokensQuery({chain:t,addresses:c},{enabled:c.length>0,refetchInterval:zn}),m=useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),g=useMemo(()=>x.data?.find(S=>S.address===i)??null,[x.data,i]),b=useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:c},{enabled:!!a&&c.length>0,refetchInterval:Hn}),P=useMemo(()=>b.data?.find(S=>S.address===n)??null,[b.data,n]),v=useMemo(()=>b.data?.find(S=>S.address===i)??null,[b.data,i]),[f,A]=useState(void 0),M=useMemo(()=>{if(!f||m?.decimals==null)return;let S=f.split("."),B=S[0]??"0",Ue=(S[1]??"").slice(0,m.decimals).padEnd(m.decimals,"0");return (B+Ue).replace(/^0+/,"")||"0"},[f,m?.decimals]),$=useMemo(()=>{if(!f||!m?.marketData?.priceInUsd)return;let S=Number(m.marketData.priceInUsd),B=Number(f)*S;return Number.isFinite(B)?B.toString():void 0},[f,m?.marketData?.priceInUsd]),Q=useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let B=S/2,Se=m?.decimals??9;A(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:Se}));},[P,m?.decimals]),H=useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let B=m?.decimals??9;A(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[P,m?.decimals]),U=useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:API.SwapMode.EXACT_IN,amount:M}),[t,a,n,i,M]),q=useRef(false),{route:F,isRouting:J,error:Y}=St(U,{paused:q.current}),z=useMemo(()=>F&&g?jn(F.plans,g.decimals):void 0,[F,g]),re=useMemo(()=>{if(!z||!g?.marketData?.priceInUsd)return;let S=Number(g.marketData.priceInUsd),B=Number(z)*S;return Number.isFinite(B)?B.toString():void 0},[z,g?.marketData?.priceInUsd]),{swap:w,isSwapping:R}=ne();q.current=R;let O=useRef(e.onComplete);O.current=e.onComplete;let{track:ae,transactions:ee}=Pt({onConfirmed:S=>{O.current?.({success:true,txHash:S});},onFailed:S=>{O.current?.({success:false,txHash:S});}}),oe=useMemo(()=>{if(ee.size===0)return "idle";let S=Array.from(ee.values());return S[S.length-1].status},[ee]),te=useCallback(async()=>{if(!(!o||!F||!n||!i||!M))try{let S=await w({chain:t,wallet:o,input:n,output:i,amount:M,mode:API.SwapMode.EXACT_IN});ae(t,S.txHash);}catch{}},[o,F,t,n,i,M,w,ae]),ie=x.isPending||b.isPending;return useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:m,toToken:g,fromBalance:P,toBalance:v,amount:f,setAmount:A,setHalfAmount:Q,setMaxAmount:H,amountInDecimals:M,amountInUsd:$,outputAmount:z,outputAmountInUsd:re,route:F,isRouting:J,routeError:Y,swap:te,isSwapping:R,txStatus:oe,isLoading:ie}),[n,i,m,g,P,v,f,Q,H,M,$,z,re,F,J,Y,te,R,oe,ie])}function Le({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:o,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:d,routeError:p,onConfirm:c,isSwapping:x}){let{t:m}=useTranslation(),[g,b]=useState(false),P=useCallback(()=>b(f=>!f),[]),v=useMemo(()=>u?u.plans.map((f,A)=>({key:`plan-${A}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.feeAmount})):[],[u]);return jsx(Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children: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"}),o&&jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsx(os,{}),jsxs("span",{children:[Be(o.amount)," ",s?.symbol]})]})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Be(a)}),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:[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(l)}),jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(i)]})]})]})]}),g&&v.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:v.map(f=>jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[De(f.inputAmount)," ",we(f.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[De(f.outputAmount)," ",we(f.output)]})]})]}),f.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:[De(f.feeAmount)," ",we(f.feeQuote)]})]})]},f.key))})]}),v.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:g?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:m(g?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!p,isLoading:!u&&d||x,onPress:c,children:m("common.confirm")})})]})})}function os(){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 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 De(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function we(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function We({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:o,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:p,onToTokenSelect:c,route:x,isRouting:m,routeError:g,onPreview:b,isSwapping:P,className:v}){let{t:f}=useTranslation();return jsxs("div",{className:cn$1("px-4 pb-4 lg:pb-8",v),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.from")}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:o??"",onChange:A=>n(A.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn$1("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn$1("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn$1("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsx(Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Mt(a)]}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Et,{}),jsxs("span",{className:"text-neutral",children:[Rt(s.amount)," ",s.symbol]}),l&&jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:f("trade.swap.half")}),i&&jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),g&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:g.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.to")}),jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxs("div",{className:"flex items-center gap-2",children:[jsx("div",{className:"flex-1",children:jsx(Input,{type:"number",value:u??"",disabled:true,placeholder:"0",classNames:{inputWrapper:cn$1("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn$1("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn$1("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsx(Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:t?t.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Mt(d)]}),r&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Et,{}),jsxs("span",{className:"text-neutral",children:[Rt(r.amount)," ",r.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!x,isLoading:!x&&m,onPress:b,children:f(P?"trade.swap.swapping":m?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Et(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Mt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Rt(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 ms({chain:e,from:t,to:s,onComplete:r,className:o}){let a=ke({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),d=useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxs(Fragment,{children:[jsx(We,{fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,toBalance:a.toBalance,amount:a.amount,amountInUsd:a.amountInUsd,onAmountChange:a.setAmount,onHalfAmount:a.setHalfAmount,onMaxAmount:a.setMaxAmount,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,onFromTokenSelect:a.setFromTokenAddress,onToTokenSelect:a.setToTokenAddress,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onPreview:l,isSwapping:a.isSwapping,className:o}),jsx(Le,{isOpen:n,onOpenChange:i,fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,inputAmount:a.amount,inputAmountInUsd:a.amountInUsd,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onConfirm:d,isSwapping:a.isSwapping})]})}function Dt(e){let t=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:xt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...ht],presets:[{...t},{...t},{...t}]}}}var gs=Dt("900900900");function Lt(e){return `liberfi.instant-trade.settings.${e}`}function xs(e,t){try{let s=localStorage.getItem(Lt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function hs(e,t){try{localStorage.setItem(Lt(e),JSON.stringify(t));}catch{}}var _t=createContext(null);function Ve(){let e=useContext(_t);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ke({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:o}){let a=useMemo(()=>getNativeToken(e),[e]),n=s!==void 0,l=useMemo(()=>Dt(e),[e]),[i,u]=useState(()=>n?l:xs(e,l)),d=n?s:i,p=useCallback(U=>{n?r?.(U):(u(U),hs(String(e),U));},[n,r,e]),c=useCallback(U=>p({...d,buy:U}),[d,p]),x=useCallback(U=>p({...d,sell:U}),[d,p]),[m,g]=useState("buy"),[b,P]=useState(),[v,f]=useState(0),[A,M]=useState(0),$=useMemo(()=>V(e),[e]),Q=useMemo(()=>{let U=m==="buy"?v:A;return (m==="buy"?d.buy.presets:d.sell.presets)[U]??$},[m,v,A,d,$]),H=useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:m,setDirection:g,amount:b,setAmount:P,buyPreset:v,setBuyPreset:f,sellPreset:A,setSellPreset:M,settings:d,updateBuySettings:c,updateSellSettings:x,currentPresetValues:Q}),[e,t,a,m,b,v,A,d,c,x,Q]);return jsx(_t.Provider,{value:H,children:o})}var Fs=15e3,Us=1e4;function Qe(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:o}=e,{t:a}=useTranslation(),n=Ve(),l=useMemo(()=>getNativeToken(t),[t]),i=useMemo(()=>getWrappedToken(t),[t]),u=useWallets(),d=chainToNamespace(t),p=useMemo(()=>u.find(w=>w.chainNamespace===d&&w.isConnected),[u,d]),c=p?.address??"",x=useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),m=useTokensQuery({chain:t,addresses:x},{enabled:x.length>0,refetchInterval:Us}),g=useMemo(()=>m.data?.find(w=>w.address===s)??null,[m.data,s]),b=useWalletPortfoliosByTokensQuery({chain:t,address:c,tokenAddresses:x},{enabled:!!c&&x.length>0,refetchInterval:Fs}),P=l?.address??i?.address??"",v=useMemo(()=>b.data?.find(w=>w.address===P)??null,[b.data,P]),f=useMemo(()=>b.data?.find(w=>w.address===s)??null,[b.data,s]),[A,M]=useState(false),$=useRef(null),Q=useCallback(w=>{let R=$.current;$.current=w,M(O=>R===null||R!==w?true:!O);},[]),H=useRef(r);H.current=r;let U=useRef(o);U.current=o;let{swap:q,isSwapping:F}=ne({onSubmitted:w=>H.current?.(w),onError:(w,R)=>U.current?.(w,R)}),J=useCallback(async()=>{if(!n.amount||!p||!s)return;let w=l?.decimals??9,R=i?.address??l?.address??"",O=n.direction==="buy",ae=O?R:s,ee=O?s:R,oe=O?w:g?.decimals??9,te=new de(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,S=V(t),B=ie.slippage??S.slippage??1,Se=ie.antiMev!=="off",Ue=isSolanaChain(t)?{priorityFee:new de(ie.priorityFee??S.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de(ie.tipFee??S.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:Se}:{};try{await q({chain:t,wallet:p,input:ae,output:ee,amount:te,slippage:B,...Ue}),n.setAmount(void 0);}catch{}},[n,p,s,l,i,g,t,q]),Y=useMemo(()=>{let w=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let R=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=v?.amount;if(ae&&new de(ae).lt(n.amount))return `${w}${R}`;let ee=l?.symbol??"",oe=m.data?.find(te=>te.address===P)?.marketData?.priceInUsd;if(oe){let te=formatAmountUSD(new de(n.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let O=f?.amount;return O&&new de(O).lt(n.amount)?`${w}${R}`:w},[a,n.direction,n.amount,v,f,l,m.data,P]),z=!n.amount||!p||!s,re=m.isPending||b.isPending;return useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:g,nativeBalance:v,tokenBalance:f,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:A,handlePresetClick:Q,swap:J,isSwapping:F,submitText:Y,isDisabled:z,isLoading:re}),[t,s,l,g,v,f,n,A,Q,J,F,Y,z,re])}function ye({value:e,onChange:t,chain:s,disableAnimation:r,className:o}){let a=useCallback(i=>t({...e,...i}),[e,t]),n=useMemo(()=>le(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn$1("space-y-4",o),children:[jsx(Os,{value:e.slippage,onChange:i=>a({slippage:i})}),jsx(Vs,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsx(Ks,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxs(Fragment,{children:[jsx($s,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:r}),e.autoFee&&jsx(Qs,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsx(zs,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsx(Hs,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Os({value:e,onChange:t}){let{t:s}=useTranslation(),r=s("trade.preset.slippage");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children:r}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function Vs({value:e,onChange:t,feeType:s,symbol:r,decimals:o}){let{t:a}=useTranslation(),n=a(`trade.preset.${s}`),l=a(`trade.preset.${s}.tooltip`);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsx(StyledTooltip,{content:l,children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function Ks({value:e,onChange:t,symbol:s,decimals:r}){let{t:o}=useTranslation(),a=o("trade.preset.tipFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsx(StyledTooltip,{content:o("trade.preset.tipFee.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function $s({value:e,onChange:t,disableAnimation:s}){let{t:r}=useTranslation(),o=r("trade.preset.autoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsx(StyledTooltip,{content:r("trade.preset.autoFee.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":o,disableAnimation:s})})]})}function Qs({value:e,onChange:t,symbol:s}){let{t:r}=useTranslation(),o=r("trade.preset.maxAutoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-neutral",children:o}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":o})]})}function zs({value:e,onChange:t,options:s,disableAnimation:r}){let{t:o}=useTranslation(),a=o("trade.preset.antiMev"),n=useMemo(()=>({off:ShieldOffIcon,reduced:ShieldIcon,secure:ShieldPlusIcon}),[]),l=useMemo(()=>({off:{title:o("trade.preset.antiMev.off"),desc:o("trade.preset.antiMev.off.desc")},reduced:{title:o("trade.preset.antiMev.reduced"),desc:o("trade.preset.antiMev.reduced.desc")},secure:{title:o("trade.preset.antiMev.secure"),desc:o("trade.preset.antiMev.secure.desc")}}),[o]);return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsx(StyledTooltip,{content:o("trade.preset.antiMev.tooltip"),children:jsx(Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsx(InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:r,"aria-label":a,children:s.map(i=>{let u=n[i],d=l[i];return jsx(Tab,{title:jsx(StyledTooltip,{content:jsxs("div",{className:"text-xs",children:[jsx("div",{className:"font-medium text-foreground",children:d.title}),jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsx("span",{className:"flex items-center justify-center",children:jsx(u,{width:18,height:18})})})},i)})})})]})}function Hs({value:e,onChange:t}){let{t:s}=useTranslation(),r=s("trade.preset.customRpc");return jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsx("div",{className:"flex-none text-sm text-neutral",children:r}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>t(o||null),placeholder:"https://...","aria-label":r})})]})}function Ge({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:o,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:p,nativeBalance:c,tokenBalance:x,amountConversion:m,preset:g,onPresetChange:b,presetValues:P,onPresetSettingsChange:v,showSettings:f,onPresetClick:A,submitText:M,isDisabled:$,isLoading:Q,onSubmit:H,className:U,headerExtra:q}){let{t:F}=useTranslation(),J=useMemo(()=>getNativeToken(e),[e]),Y=J?.symbol,z=J?.decimals??9;return jsxs("div",{className:cn$1("flex-none sm:px-3 py-3 bg-content1 rounded-lg",U),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:cn$1("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsx(Tab,{title:F("common.buy")},"buy"),jsx(Tab,{title:F("common.sell")},"sell")]}),jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsx(Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsx(Tab,{title:F("trade.market")},"market")}),q]}),jsx("div",{className:"mt-2.5",children:t==="buy"?jsx(rr,{amount:r,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:Y,nativeDecimals:z,amountLabel:F("trade.amount")}):jsx(ar,{amount:r,onAmountChange:o,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:p,amountLabel:F("trade.amount")})}),jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsx("span",{children:F("trade.balance")}),jsx("span",{children:t==="buy"?c?`${c} ${Y??""}`:"--":x?`${x} ${p??""}`:"--"})]}),m&&jsx("div",{className:"text-xs text-neutral",children:m})]}),jsx("div",{className:"mt-4",children:jsx(or,{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:`${g}`,onSelectionChange:re=>b(Number(re)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsx(Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>A(0)},0),jsx(Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>A(1)},1),jsx(Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>A(2)},2)]})}),f&&jsx("div",{className:"mt-2.5",children:jsx(ye,{value:P,onChange:v,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:Q,onPress:H,children:M})]})}function rr({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:l}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:cn$1("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Qt,{values:s,onSelect:r,onEdit:o})]})}function ar({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:o,tokenSymbol:a,amountLabel:n}){let l=useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxs("div",{className:"space-y-0.5",children:[jsx(NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),classNames:{inputWrapper:cn$1("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Qt,{values:s,onSelect:r,onEdit:o,suffix:"%"})]})}function Qt({values:e,onSelect:t,onEdit:s,suffix:r}){let[o,a]=useState(false),[n,l]=useState([]),i=useCallback(()=>{l([...e]),a(true);},[e]),u=useCallback(()=>{a(false),s(n);},[s,n]);return jsxs("div",{className:"flex gap-0.5",children:[jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,p)=>jsx("div",{className:cn$1("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:o?jsx(NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:c=>{if(typeof c=="number"){let x=isNaN(c)?null:c;l(m=>{let g=[...m];return g[p]=x,g});}},min:0,hideStepper:true,classNames:{inputWrapper:cn$1("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:r?jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[p]??""})},p))}),jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:o?jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:u,children:jsx(CheckIcon,{width:12,height:12})}):jsx(Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsx(EditIcon,{width:12,height:12})})})]})}function or({values:e,chain:t}){let{t:s}=useTranslation(),r=useMemo(()=>le(t),[t]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(SlippageIcon,{width:14,height:14}),children:formatPercent((e.slippage??0)/100)})}),jsx(Tooltip,{content:s(`trade.preset.${r.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(ZapFastIcon,{width:14,height:14}),children:formatPrice(e.priorityFee??0)})}),r.showTipFee&&jsx(Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsx(CoinsIcon,{width:14,height:14}),children:formatPrice(e.tipFee??0)})}),jsx(Tooltip,{content:s("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsx(Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxs(Fragment,{children:[o==="off"&&jsx(ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),o==="reduced"&&jsx(ShieldIcon,{width:14,height:14,className:"text-neutral"}),o==="secure"&&jsx(ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${o}`)})})]})}function ur({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:o,onSettingsChange:a,headerExtra:n,className:l}){return jsx(Ke,{chain:e,tokenAddress:t,settings:o,onSettingsChange:a,children:jsx(mr,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:l})})}function mr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:o,className:a}){let n=Qe({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),l=useCallback(m=>n.setAmount(m),[n]),i=useCallback(m=>{let g=n.tokenBalance?.amount;if(!g)return;let b=new de(g).times(m).div(100).toNumber();n.setAmount(b);},[n]),u=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 g=n.direction==="buy",b=g?n.buyPreset:n.sellPreset;if(g){let P=n.settings.buy,v=[...P.presets];v[b]=m,n.updateBuySettings({...P,presets:v});}else {let P=n.settings.sell,v=[...P.presets];v[b]=m,n.updateSellSettings({...P,presets:v});}},[n]),c=useCallback(m=>{n.direction==="buy"?n.setBuyPreset(m):n.setSellPreset(m);},[n]),x=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsx(Ge,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:x,onPresetChange: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:a,headerExtra:o})}function qe(e){let{id:t,chain:s,token:r,storageKeyPrefix:o,onAmountChange:a,onPresetChange:n,onPresetClick:l}=e,[i,u]=useAtom(G(j(t,s,r.address,o))),d=useAtomValue(L(D(s,"buy",0,o))),p=useAtomValue(L(D(s,"buy",1,o))),c=useAtomValue(L(D(s,"buy",2,o))),x=useMemo(()=>[d,p,c],[d,p,c]),m=useCallback(b=>{u(P=>({...P,amount:b})),a?.(b);},[u,a]),g=useCallback(b=>{u(P=>({...P,preset:b})),n?.(b);},[u,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:m,preset:i.preset,handlePresetChange:g,onPresetClick:l,presetValues:x}}function Je({token:e,chain:t,amount:s,onAmountChange:r,preset:o=0,onPresetChange:a,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:d}){let{t:p}=useTranslation(),{isMobile:c}=useScreen(),x=useRef(null),m=useMemo(()=>V(t),[t]),[g,b]=useState(null),P=useCallback(v=>{a?.(Number(v));},[a]);return jsxs("div",{ref:x,className:cn$1("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",d),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:v=>r(isNaN(v)?void 0:v),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsx(LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsx(StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:P,classNames:{base:"flex-none h-full",tabList:cn$1("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:cn$1("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((v,f)=>jsx(Tab,{title:c?jsx("span",{onClick:A=>{o===f&&(A.stopPropagation(),b(M=>M===f?null:f));},children:p("trade.preset.short",{n:f+1})}):jsx(StyledTooltip,{content:jsx(qt,{label:p("trade.preset.short",{n:f+1}),values:l?.[f]??m,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsx("span",{onClick:()=>o===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))}),c&&g!==null&&jsx(Fr,{label:p("trade.preset.short",{n:g+1}),values:l?.[g]??m,chain:t,onClose:()=>b(null),containerRef:x})]})}function Fr({label:e,values:t,chain:s,onClose:r,containerRef:o}){let a=useRef(null);return useEffect(()=>{let n=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&r();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[r,o]),jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsx(qt,{label:e,values:t,chain:s})})}function qt({label:e,values:t,chain:s}){let{t:r}=useTranslation(),o=useMemo(()=>le(s),[s]),a=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxs("div",{className:"flex flex-col py-2",children:[jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsx(LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(SlippageIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.slippage")})]}),jsx("span",{className:cn$1("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:formatPercent(n)})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r(`trade.preset.${o.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.priorityFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.feeUnit})]})]}),o.showTipFee&&jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsx(CoinsIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.tipFee")})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(t.tipFee??0)," ",jsx("span",{className:"text-zinc-500",children:o.tipFeeUnit})]})]}),jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[a==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),a==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),a==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:r("trade.preset.antiMev")})]}),jsx("span",{className:cn$1("text-xs font-medium",a==="off"&&"text-zinc-500",a==="reduced"&&"text-amber-400",a==="secure"&&"text-emerald-400"),children:r(`trade.preset.antiMev.${a}`)})]})]})}function Ur({size:e,radius:t,className:s,...r}){let{token:o,chain:a,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:d,presetValues:p}=qe(r);return jsx(Je,{token:o,chain:a,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:d,presetValues:p,size:e,radius:t,className:s})}function Ye(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:o,onChange:a}=e,[n,l]=useState(r),[i,u]=useAtom(L(D(t,n,s,o))),d=useCallback(p=>{u(p),a?.(n,p);},[u,a,n]);return {direction:n,setDirection:l,value:i,handleChange:d}}function tt({disableAnimation:e,className:t,...s}){let{t:r}=useTranslation(),{direction:o,setDirection:a,value:n,handleChange:l}=Ye(s);return jsxs("div",{className:cn$1("space-y-3",t),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":"Buy / Sell",children:[jsx(Tab,{title:r("common.buy")},"buy"),jsx(Tab,{title:r("common.sell")},"sell")]}),jsx(ye,{value:n,onChange:l,chain:s.chain,disableAnimation:e})]})}var Or=3;function nt(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,o]=useState(t),a=useCallback((n,l)=>{s?.(r,n,l);},[s,r]);return {presetCount:Or,presetIndex:r,setPresetIndex:o,handlePresetChange:a}}function rt({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:o}=useTranslation(),{presetCount:a,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=nt(r);return jsxs("div",{className:cn$1("space-y-3",s),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,d)=>jsx(Tab,{title:o("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 sa="preset";function ra({id:e=sa}){return jsx(AsyncModal,{id:e,children:t=>jsx(aa,{...t})})}function aa({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=useTranslation(),{chains:o,defaultChain:a,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[d,p]=useState(a??o[0]);useEffect(()=>{p(a??o[0]);},[a,o]);let c=useCallback((x,m,g)=>{u?.(d,x,m,g);},[u,d]);return jsx(StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxs(ModalContent,{children:[jsx(ModalHeader,{children:jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:r("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:o,chain:d,onSelectChain:p})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(rt,{chain:d,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:c})})})]})})}function Fe(e,t,s,r,o){let a=V(o),n=new de(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new de(r.priorityFee??a.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de(r.tipFee??a.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function it(e){let{id:t,chain:s,token:r,output:o,storageKeyPrefix:a,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(G(j(t,s,r.address,a))),d=useAtomValue(L(D(s,"buy",u,a))),p=useConnectedWallet(s),{swap:c,isSwapping:x}=ne({onSubmitted:n,onError:l}),m=!i||!o,g=useAuthCallback(async()=>{if(!i||!p||!o)return;let b=Fe(i,r,o,d,s);try{await c({...b,chain:s,wallet:p});}catch{}},[p,i,o,s,r,d,c]);return useMemo(()=>({amount:i,token:r,isDisabled:m,isSwapping:x,handleSwap:g}),[i,r,m,x,g])}function da({size:e="sm",radius:t,color:s="primary",className:r,...o}){let{amount:a,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=it(o);return jsx(Button,{fullWidth:true,size:e,radius:t,color:s,className:r,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${n.symbol}`:n.symbol})}var sn=createContext(null);function ha({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let o=useConnectedWallet(e),{swap:a}=ne({onSubmitted:t,onError:s}),n=useRef(o);n.current=o;let l=useRef(a);l.current=a;let i=useRef(e);i.current=e;let u=useCallback(async p=>{let c=n.current;if(c)return l.current({...p,wallet:c,chain:i.current})},[]),d=useAuthCallback(u,[]);return jsx(sn.Provider,{value:d,children:r})}function ut(){let e=useContext(sn);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:o,storageKeyPrefix:a}=e,{amount:n,preset:l}=useAtomValue(G(j(t,s,r.address,a))),i=useAtomValue(L(D(s,"buy",l,a))),u=ut(),[d,p]=useState(false),c=!n||!o,x=useRef(r);x.current=r;let m=useRef(i);m.current=i;let g=useRef(s);g.current=s;let b=useCallback(async()=>{if(!n||!o)return;let P=Fe(n,x.current,o,m.current,g.current);p(true);try{await u(P);}catch{}finally{p(false);}},[n,o,u]);return useMemo(()=>({amount:n,token:r,isDisabled:c,isSwapping:d,handleSwap:b}),[n,r,c,d,b])}var Ca=memo(function({size:t="sm",radius:s,color:r="primary",className:o,...a}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:d}=dt(a);return jsx(Button,{variant:"solid",fullWidth:true,size:t,radius:s,color:r,className:o,disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:d,style:{background:"rgba(199,255,46,0.08)",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:n!=null?`${n} ${l.symbol}`:l.symbol})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.138");var Ia="0.1.138";
|
|
2
2
|
export{Je as AmountPresetInputUI,Ur as AmountPresetInputWidget,gt as DEFAULT_BSC_TRADE_PRESET,ft as DEFAULT_EVM_TRADE_PRESET,gs as DEFAULT_INSTANT_TRADE_SETTINGS,ht as DEFAULT_SELL_PERCENTAGES,ct as DEFAULT_SOL_TRADE_PRESET,da as InstantTradeButtonWidget,Ca as InstantTradeListButtonWidget,Ke as InstantTradeProvider,ha as InstantTradeSwapProvider,Ge as InstantTradeUI,ur as InstantTradeWidget,rt as MultiPresetFormWidget,ra as PresetFormModal,ye as PresetFormUI,tt as PresetFormWidget,Le as SwapPreviewModal,We as SwapUI,ms as SwapWidget,le as getChainPresetFeatures,xt as getDefaultBuyAmounts,V as getDefaultPresetForChain,G as instantTradeAmountAtomFamily,j as instantTradeAmountKey,L as presetAtomFamily,D as presetKey,qe as useAmountPresetInputScript,Ve as useInstantTrade,ka as useInstantTradeAmount,it as useInstantTradeButtonScript,dt as useInstantTradeListButtonScript,Qe as useInstantTradeScript,ut as useInstantTradeSwap,nt as useMultiPresetFormScript,Ye as usePresetFormScript,Ha as usePresetValues,ne as useSwap,St as useSwapRoutePolling,ke as useSwapScript,Pt as useTxConfirmation,Ia as version};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|