@liberfi.io/ui-trade 3.0.93 → 3.0.94
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.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +17 -17
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {createContext,memo,useState,useRef,useCallback,useMemo,useContext,useEffect}from'react';import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {formatAmount,isSolanaChain,isBinanceChain,getNativeToken,formatAmountInUsd,getWrappedToken,chainToNamespace,formatPercent,formatPrice}from'@liberfi.io/utils';import {useDexClient,useLatestBlockFetcher,TradeExecutionRuntime,createClientTradeExecutionAdapter,PRE_SIGN_STALE_MS,TradeRouteExpiredError,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,SwapMode,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,cn,Spinner,LightningIcon,toast,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,useScreen,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import pe from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var xn="liberfi.",hn={amount:void 0,preset:0};function yn(e,n,s,a){return `${e}instant-trade.${n}.${s}.${a}`}function bn(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),a=e.slice(n+1),[o,r,t]=a.split(".");return {prefix:s,id:o,chain:r,tokenAddress:t}}function z(e,n,s,a=xn){return `${a}:${e}.${n}.${s}`}var G=atomFamily(e=>{let{prefix:n,id:s,chain:a,tokenAddress:o}=bn(e);return atomWithStorage(yn(n,s,String(a),o),hn,void 0,{getOnInit:false})});function Ya({id:e,chain:n,tokenAddress:s,storageKeyPrefix:a}){let[o,r]=useAtom(G(z(e,n,s,a))),t=useCallback(l=>{r(i=>({...i,preset:l}));},[r]);return {...o,setPreset:t}}var de=class extends Error{constructor(n="Swap route expired. Please refresh the quote."){super(n),this.name="SwapRouteExpiredError";}},xt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ht={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},yt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},Pn={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]},wn=[1,10,25,50];function bt(e){return Pn[e]??wn}var St=[10,25,50,100];function le(e){let n=getNativeToken(e);if(!n)throw new Error(`No native token defined for chain "${e}"`);let s=n.symbol;return isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return isSolanaChain(e)?xt:isBinanceChain(e)?yt:ht}var In="liberfi.";function An(e,n,s,a){return `${e}preset.${n}.${s}.${a}`}function Fn(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),a=e.slice(n+1),[o,r,t]=a.split(".");return {prefix:s,chain:o,direction:r,index:Number(t)}}function D(e,n,s,a=In){return `${a}:${e}.${n}.${s}`}var L=atomFamily(e=>{let{prefix:n,chain:s,direction:a,index:o}=Fn(e);return atomWithStorage(An(n,String(s),a,o),V(s),void 0,{getOnInit:true})});function po({chain:e,direction:n,presetIndex:s=0,storageKeyPrefix:a}){return useAtomValue(L(D(e,n,s,a)))}function Tt(e){return e instanceof Error?e:new Error(String(e))}function _n(e){return {chain:e.chain,userAddress:e.wallet?.address??"",input:e.input,output:e.output,amount:e.amount,mode:e.mode??SwapMode.EXACT_IN,slippage:e.slippage,priorityFee:e.priorityFee,tipFee:e.tipFee,isAntiMev:e.isAntiMev,permit:e.permit,deadline:e.deadline}}function Vn(e){if(e==="route"||e==="sign"||e==="expired"||e==="send")return e;if(e==="confirm")return "send"}function Kn(e,n,s){let a=Vn(n);if(s==="stale"||a==="expired"||e instanceof TradeRouteExpiredError||e instanceof de){let r=Tt(e).message;return {error:e instanceof de?e:new de(r),phase:"expired"}}let o=a==="sign"||a==="send"||a==="route"?a:"route";return {error:Tt(e),phase:o}}function ne(e){let{client:n}=useDexClient(),[s,a]=useState(false),o=useRef(e);o.current=e;let r=useMemo(()=>({chain:Chain.SOLANA}),[]),t=useLatestBlockFetcher(r),l=useRef(n);l.current=n;let i=useRef(t);i.current=t;let u=useRef(null);u.current===null&&(u.current=new TradeExecutionRuntime({adapter:createClientTradeExecutionAdapter({swapRoute:m=>l.current.swapRoute(m),sendTx:m=>l.current.sendTx(m),getLatestBlock:async()=>{let m=await i.current({staleTime:PRE_SIGN_STALE_MS});if(!m.data)throw new TradeRouteExpiredError("Latest Solana block data is stale. Please refresh the quote.");return {blockhash:m.data.blockhash,lastValidBlockHeight:m.data.lastValidBlockHeight,dataUpdatedAt:m.dataUpdatedAt}},checkTxSuccess:(m,c,g)=>l.current.checkTxSuccess(m,c,g)})}));let p=useCallback(async m=>{let c=u.current;a(true);try{let g=await c.execute(_n(m),{sign:typeof m.wallet?.signTransaction=="function"?x=>m.wallet.signTransaction(x):void 0}),d={txHash:g.txHash,extra:g.extra};return o.current?.onSubmitted?.(d),d}catch(g){let d=c.getSnapshot(),x=Kn(g,d.phase,d.state);throw o.current?.onError?.(x.error,x.phase),x.error}finally{a(false);}},[]);return useMemo(()=>({swap:p,isSwapping:s}),[p,s])}var zn=12e3;function Nt(e,n){let s=n?.interval??zn,a=n?.paused??false,o=useRef(n);o.current=n;let t=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!a,l=useSwapRouteQuery(e,{enabled:t,refetchInterval:t?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 Jn=6e4;function It(e){let{client:n}=useDexClient(),[s,a]=useState(()=>new Map),o=useRef(e);o.current=e;let r=useCallback((u,p)=>{a(m=>{let c=m.get(u);if(!c||c.status===p)return m;let g=new Map(m);return g.set(u,{...c,status:p}),g});},[]),t=useCallback((u,p)=>{a(c=>{if(c.has(p))return c;let g=new Map(c);return g.set(p,{chain:u,txHash:p,status:"pending"}),g});let m=o.current?.timeout??Jn;n.checkTxSuccess(u,p,m).then(c=>{if(c)r(p,"confirmed"),o.current?.onConfirmed?.(p);else {let g=new Error("Transaction failed on-chain");r(p,"failed"),o.current?.onFailed?.(p,g);}}).catch(c=>{let g=c instanceof Error?c:new Error(String(c));r(p,"failed"),o.current?.onFailed?.(p,g);});},[n,r]),l=useCallback(u=>{a(p=>{if(!p.has(u))return p;let m=new Map(p);return m.delete(u),m});},[]),i=useCallback(()=>{a(u=>u.size===0?u:new Map);},[]);return useMemo(()=>({track:t,clear:l,clearAll:i,transactions:s}),[t,l,i,s])}var ns=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function ss(e){return ns.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var rs=1e4,as=15e3;function os(e,n){if(e.length===0)return;let a=e[e.length-1].outputAmount;if(!a||a==="0")return "0";let o=a.padStart(n+1,"0"),r=o.slice(0,o.length-n)||"0",l=o.slice(o.length-n).replace(/0+$/,"");return l?`${r}.${l}`:r}function De(e){let{chain:n}=e,s=useWallets(),a=ss(n),o=useMemo(()=>s.find(v=>v.chainNamespace===a&&v.isConnected),[s,a]),r=o?.address??"",[t,l]=useState(e.from??""),[i,u]=useState(e.to??""),p=useRef(e.from),m=useRef(e.to);useEffect(()=>{e.from!==p.current&&(p.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==m.current&&(m.current=e.to,e.to&&u(e.to));},[e.to]);let c=useMemo(()=>[t,i].filter(Boolean),[t,i]),g=useTokensQuery({chain:n,addresses:c},{enabled:c.length>0,refetchInterval:rs}),d=useMemo(()=>g.data?.find(v=>v.address===t)??null,[g.data,t]),x=useMemo(()=>g.data?.find(v=>v.address===i)??null,[g.data,i]),y=useWalletPortfoliosByTokensQuery({chain:n,address:r,tokenAddresses:c},{enabled:!!r&&c.length>0,refetchInterval:as}),S=useMemo(()=>y.data?.find(v=>v.address===t)??null,[y.data,t]),P=useMemo(()=>y.data?.find(v=>v.address===i)??null,[y.data,i]),[f,A]=useState(void 0),U=useMemo(()=>{if(!f||d?.decimals==null)return;let v=f.split("."),B=v[0]??"0",Me=(v[1]??"").slice(0,d.decimals).padEnd(d.decimals,"0");return (B+Me).replace(/^0+/,"")||"0"},[f,d?.decimals]),K=useMemo(()=>{if(!f||!d?.marketData?.priceInUsd)return;let v=Number(d.marketData.priceInUsd),B=Number(f)*v;return Number.isFinite(B)?B.toString():void 0},[f,d?.marketData?.priceInUsd]),$=useCallback(()=>{if(!S)return;let v=Number(S.amount);if(!Number.isFinite(v)||v<=0)return;let B=v/2,ve=d?.decimals??9;A(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[S,d?.decimals]),j=useCallback(()=>{if(!S)return;let v=Number(S.amount);if(!Number.isFinite(v)||v<=0)return;let B=d?.decimals??9;A(v.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[S,d?.decimals]),E=useMemo(()=>({chain:n,userAddress:r||void 0,input:t||void 0,output:i||void 0,mode:SwapMode.EXACT_IN,amount:U}),[n,r,t,i,U]),Z=useRef(false),{route:F,isRouting:J,error:Y}=Nt(E,{paused:Z.current}),Q=useMemo(()=>F&&x?os(F.plans,x.decimals):void 0,[F,x]),re=useMemo(()=>{if(!Q||!x?.marketData?.priceInUsd)return;let v=Number(x.marketData.priceInUsd),B=Number(Q)*v;return Number.isFinite(B)?B.toString():void 0},[Q,x?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=ne();Z.current=M;let _=useRef(e.onComplete);_.current=e.onComplete;let{track:ae,transactions:ee}=It({onConfirmed:v=>{_.current?.({success:true,txHash:v});},onFailed:v=>{_.current?.({success:false,txHash:v});}}),oe=useMemo(()=>{if(ee.size===0)return "idle";let v=Array.from(ee.values());return v[v.length-1].status},[ee]),te=useCallback(async()=>{if(!(!o||!F||!t||!i||!U))try{let v=await w({chain:n,wallet:o,input:t,output:i,amount:U,mode:SwapMode.EXACT_IN});ae(n,v.txHash);}catch{}},[o,F,n,t,i,U,w,ae]),ie=g.isPending||y.isPending;return useMemo(()=>({fromTokenAddress:t,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:d,toToken:x,fromBalance:S,toBalance:P,amount:f,setAmount:A,setHalfAmount:$,setMaxAmount:j,amountInDecimals:U,amountInUsd:K,outputAmount:Q,outputAmountInUsd:re,route:F,isRouting:J,routeError:Y,swap:te,isSwapping:M,txStatus:oe,isLoading:ie}),[t,i,d,x,S,P,f,$,j,U,K,Q,re,F,J,Y,te,M,oe,ie])}function Oe({isOpen:e,onOpenChange:n,fromToken:s,toToken:a,fromBalance:o,inputAmount:r,inputAmountInUsd:t,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:p,routeError:m,onConfirm:c,isSwapping:g}){let{t:d}=useTranslation(),[x,y]=useState(false),S=useCallback(()=>y(f=>!f),[]),P=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:n,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children:d("trade.swap.preview")}),jsx(ModalBody,{children:jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:d("trade.swap.from")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsx(Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),o&&jsxs("div",{className:"text-text-muted flex items-center gap-1 text-[10px]",children:[jsx(Ss,{}),jsxs("span",{children:[Le(o.amount)," ",s?.symbol]})]})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Le(r)}),jsxs("div",{className:"text-text-muted text-[10px]",children:["$",Rt(t)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:d("trade.swap.estimatedReceive")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[a?.image&&jsx(Avatar,{size:"sm",src:a.image,name:a.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:a?.symbol??"\u2014"}),jsx("div",{className:"text-text-muted text-[10px]",children:Ce(a?.address)})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Le(l)}),jsxs("div",{className:"text-text-muted text-[10px]",children:["$",Rt(i)]})]})]})]}),x&&P.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:d("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:P.map(f=>jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-text-muted text-xs",children:d("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-text-muted text-xs",children:d("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[We(f.inputAmount)," ",Ce(f.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[We(f.outputAmount)," ",Ce(f.output)]})]})]}),f.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-text-muted text-xs",children:d("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[We(f.feeAmount)," ",Ce(f.feeQuote)]})]})]},f.key))})]}),P.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-text-muted flex bg-transparent text-xs",endContent:x?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:S,children:d(x?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!m,isLoading:!u&&p||g,onPress:c,children:d("common.confirm")})})]})})}function Ss(){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-text-muted",children:[jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Rt(e){let n=formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Le(e){return formatAmount(e??0)}function We(e){return formatAmount(e??0)}function Ce(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ve({fromToken:e,toToken:n,fromBalance:s,toBalance:a,amount:o,amountInUsd:r,onAmountChange:t,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:p,onFromTokenSelect:m,onToTokenSelect:c,route:g,isRouting:d,routeError:x,onPreview:y,isSwapping:S,className:P}){let{t:f}=useTranslation();return jsxs("div",{className:cn("px-4 pb-4 lg:pb-8",P),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-text-muted 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=>t(A.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-text-muted"),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-text-muted"}),onPress:()=>m(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsx("div",{className:"text-text-muted flex-1 text-xs",children:Ot(r)}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Wt,{}),jsxs("span",{className:"text-text-muted",children:[_t(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")})]})]}),x&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:x.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-text-muted 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("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",n?"text-foreground":"text-text-muted"),disableRipple:true,startContent:n?.image?jsx(Avatar,{size:"sm",src:n.image,name:n.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-text-muted"}),onPress:()=>c(""),children:n?n.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsx("div",{className:"text-text-muted flex-1 text-xs",children:Ot(p)}),a&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Wt,{}),jsxs("span",{className:"text-text-muted",children:[_t(a.amount)," ",a.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!g,isLoading:!g&&d,onPress:y,children:f(S?"trade.swap.swapping":d?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Wt(){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-text-muted",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 Ts(e){let n=formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Ot(e){return `\u2248 $${Ts(e)}`}function _t(e){return formatAmount(e??0)}function Is({chain:e,from:n,to:s,onComplete:a,className:o}){let r=De({chain:e,from:n,to:s,onComplete:a}),{isOpen:t,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),p=useCallback(async()=>{await r.swap(),u();},[r,u]);return jsxs(Fragment,{children:[jsx(Ve,{fromToken:r.fromToken,toToken:r.toToken,fromBalance:r.fromBalance,toBalance:r.toBalance,amount:r.amount,amountInUsd:r.amountInUsd,onAmountChange:r.setAmount,onHalfAmount:r.setHalfAmount,onMaxAmount:r.setMaxAmount,outputAmount:r.outputAmount,outputAmountInUsd:r.outputAmountInUsd,onFromTokenSelect:r.setFromTokenAddress,onToTokenSelect:r.setToTokenAddress,route:r.route,isRouting:r.isRouting,routeError:r.routeError,onPreview:l,isSwapping:r.isSwapping,className:o}),jsx(Oe,{isOpen:t,onOpenChange:i,fromToken:r.fromToken,toToken:r.toToken,fromBalance:r.fromBalance,inputAmount:r.amount,inputAmountInUsd:r.amountInUsd,outputAmount:r.outputAmount,outputAmountInUsd:r.outputAmountInUsd,route:r.route,isRouting:r.isRouting,routeError:r.routeError,onConfirm:p,isSwapping:r.isSwapping})]})}function $t(e){let n=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:bt(s),presets:[{...n},{...n},{...n}]},sell:{customPercentages:[...St],presets:[{...n},{...n},{...n}]}}}var Ms=$t("900900900");function Qt(e){return `liberfi.instant-trade.settings.${e}`}function Rs(e,n){try{let s=localStorage.getItem(Qt(String(e)));if(s)return JSON.parse(s)}catch{}return n}function ks(e,n){try{localStorage.setItem(Qt(e),JSON.stringify(n));}catch{}}var Ht=createContext(null);function $e(){let e=useContext(Ht);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Qe({chain:e,tokenAddress:n,settings:s,onSettingsChange:a,children:o}){let r=useMemo(()=>getNativeToken(e),[e]),t=s!==void 0,l=useMemo(()=>$t(e),[e]),[i,u]=useState(()=>t?l:Rs(e,l)),p=t?s:i,m=useCallback(E=>{t?a?.(E):(u(E),ks(String(e),E));},[t,a,e]),c=useCallback(E=>m({...p,buy:E}),[p,m]),g=useCallback(E=>m({...p,sell:E}),[p,m]),[d,x]=useState("buy"),[y,S]=useState(),[P,f]=useState(0),[A,U]=useState(0),K=useMemo(()=>V(e),[e]),$=useMemo(()=>{let E=d==="buy"?P:A;return (d==="buy"?p.buy.presets:p.sell.presets)[E]??K},[d,P,A,p,K]),j=useMemo(()=>({chain:e,tokenAddress:n,nativeToken:r,direction:d,setDirection:x,amount:y,setAmount:S,buyPreset:P,setBuyPreset:f,sellPreset:A,setSellPreset:U,settings:p,updateBuySettings:c,updateSellSettings:g,currentPresetValues:$}),[e,n,r,d,y,P,A,p,c,g,$]);return jsx(Ht.Provider,{value:j,children:o})}var js=15e3,zs=1e4;function je(e){let{chain:n,tokenAddress:s,onSwapSubmitted:a,onSwapError:o}=e,{t:r}=useTranslation(),t=$e(),l=useMemo(()=>getNativeToken(n),[n]),i=useMemo(()=>getWrappedToken(n),[n]),u=useWallets(),p=chainToNamespace(n),m=useMemo(()=>u.find(w=>w.chainNamespace===p&&w.isConnected),[u,p]),c=m?.address??"",g=useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),d=useTokensQuery({chain:n,addresses:g},{enabled:g.length>0,refetchInterval:zs}),x=useMemo(()=>d.data?.find(w=>w.address===s)??null,[d.data,s]),y=useWalletPortfoliosByTokensQuery({chain:n,address:c,tokenAddresses:g},{enabled:!!c&&g.length>0,refetchInterval:js}),S=l?.address??i?.address??"",P=useMemo(()=>y.data?.find(w=>w.address===S)??null,[y.data,S]),f=useMemo(()=>y.data?.find(w=>w.address===s)??null,[y.data,s]),[A,U]=useState(false),K=useRef(null),$=useCallback(w=>{let M=K.current;K.current=w,U(_=>M===null||M!==w?true:!_);},[]),j=useRef(a);j.current=a;let E=useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>j.current?.(w),onError:(w,M)=>E.current?.(w,M)}),J=useCallback(async()=>{if(!t.amount||!m||!s)return;let w=l?.decimals??9,M=i?.address??l?.address??"",_=t.direction==="buy",ae=_?M:s,ee=_?s:M,oe=_?w:x?.decimals??9,te=new pe(t.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=t.currentPresetValues,v=V(n),B=ie.slippage??v.slippage??1,ve=ie.antiMev!=="off",Me=isSolanaChain(n)?{priorityFee:new pe(ie.priorityFee??v.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new pe(ie.tipFee??v.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:ve}:{};try{await Z({chain:n,wallet:m,input:ae,output:ee,amount:te,slippage:B,...Me}),t.setAmount(void 0);}catch{}},[t,m,s,l,i,x,n,Z]),Y=useMemo(()=>{let w=r(t.direction==="buy"?"common.buy":"common.sell");if(!t.amount)return w;let M=` (${r("trade.insufficientBalance")})`;if(t.direction==="buy"){let ae=P?.amount;if(ae&&new pe(ae).lt(t.amount))return `${w}${M}`;let ee=l?.symbol??"",oe=d.data?.find(te=>te.address===S)?.marketData?.priceInUsd;if(oe){let te=formatAmountInUsd(new pe(t.amount).times(Number(oe)));return r("trade.submitBuyAmount",{amount:t.amount,symbol:ee,usd:te})}return r("trade.submitBuyAmountNoUsd",{amount:t.amount,symbol:ee})}let _=f?.amount;return _&&new pe(_).lt(t.amount)?`${w}${M}`:w},[r,t.direction,t.amount,P,f,l,d.data,S]),Q=!t.amount||!m||!s,re=d.isPending||y.isPending;return useMemo(()=>({chain:n,tokenAddress:s,nativeToken:l,tokenInfo:x,nativeBalance:P,tokenBalance:f,direction:t.direction,setDirection:t.setDirection,amount:t.amount,setAmount:t.setAmount,buyPreset:t.buyPreset,setBuyPreset:t.setBuyPreset,sellPreset:t.sellPreset,setSellPreset:t.setSellPreset,currentPresetValues:t.currentPresetValues,settings:t.settings,updateBuySettings:t.updateBuySettings,updateSellSettings:t.updateSellSettings,showSettings:A,handlePresetClick:$,swap:J,isSwapping:F,submitText:Y,isDisabled:Q,isLoading:re}),[n,s,l,x,P,f,t,A,$,J,F,Y,Q,re])}function be({value:e,onChange:n,chain:s,disableAnimation:a,className:o}){let r=useCallback(i=>n({...e,...i}),[e,n]),t=useMemo(()=>le(s),[s]),l=t.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn("space-y-4",o),children:[jsx(sr,{value:e.slippage,onChange:i=>r({slippage:i})}),jsx(rr,{value:e[l],onChange:i=>r({[l]:i}),feeType:t.feeType,symbol:t.feeUnit,decimals:t.feeDecimals}),t.showTipFee&&jsx(ar,{value:e.tipFee,onChange:i=>r({tipFee:i}),symbol:t.tipFeeUnit,decimals:t.tipFeeDecimals}),t.showAutoFee&&jsxs(Fragment,{children:[jsx(or,{value:e.autoFee,onChange:i=>r({autoFee:i}),disableAnimation:a}),e.autoFee&&jsx(ir,{value:e.maxAutoFee,onChange:i=>r({maxAutoFee:i}),symbol:t.nativeSymbol})]}),jsx(lr,{value:e.antiMev,onChange:i=>r({antiMev:i}),options:t.antiMevOptions,disableAnimation:a}),t.showCustomRPC&&jsx(ur,{value:e.customRPC,onChange:i=>r({customRPC:i})})]})}function sr({value:e,onChange:n}){let{t:s}=useTranslation(),a=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-text-muted",children:a}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>n(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-text-muted",children:"%"}),"aria-label":a})]})}function rr({value:e,onChange:n,feeType:s,symbol:a,decimals:o}){let{t:r}=useTranslation(),t=r(`trade.preset.${s}`),l=r(`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-text-muted flex items-center gap-1",children:[t,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-text-muted"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>n(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsx("span",{className:"text-sm text-text-muted",children:a}),"aria-label":t})]})}function ar({value:e,onChange:n,symbol:s,decimals:a}){let{t:o}=useTranslation(),r=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-text-muted flex items-center gap-1",children:[r,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-text-muted"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:t=>n(isNaN(t)?null:t),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsx("span",{className:"text-sm text-text-muted",children:s}),"aria-label":r})]})}function or({value:e,onChange:n,disableAnimation:s}){let{t:a}=useTranslation(),o=a("trade.preset.autoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-text-muted flex items-center gap-1",children:[o,jsx(StyledTooltip,{content:a("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-text-muted"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledSwitch,{isSelected:e,onValueChange:n,color:"primary","aria-label":o,disableAnimation:s})})]})}function ir({value:e,onChange:n,symbol:s}){let{t:a}=useTranslation(),o=a("trade.preset.maxAutoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-text-muted",children:o}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:r=>n(isNaN(r)?null:r),hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-sm text-text-muted",children:s}),"aria-label":o})]})}function lr({value:e,onChange:n,options:s,disableAnimation:a}){let{t:o}=useTranslation(),r=o("trade.preset.antiMev"),t=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-text-muted flex items-center gap-1",children:[r,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-text-muted"})})})]}),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:n,disableAnimation:a,"aria-label":r,children:s.map(i=>{let u=t[i],p=l[i];return jsx(Tab,{title:jsx(StyledTooltip,{content:jsxs("div",{className:"text-xs",children:[jsx("div",{className:"font-medium text-foreground",children:p.title}),jsx("div",{className:"mt-0.5",children:p.desc})]}),children:jsx("span",{className:"flex items-center justify-center",children:jsx(u,{width:18,height:18})})})},i)})})})]})}function ur({value:e,onChange:n}){let{t:s}=useTranslation(),a=s("trade.preset.customRpc");return jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsx("div",{className:"flex-none text-sm text-text-muted",children:a}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>n(o||null),placeholder:"https://...","aria-label":a})})]})}function Xe({chain:e,direction:n,onDirectionChange:s,amount:a,onAmountChange:o,customAmounts:r,customPercentages:t,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:p,tokenSymbol:m,nativeBalance:c,tokenBalance:g,amountConversion:d,preset:x,onPresetChange:y,presetValues:S,onPresetSettingsChange:P,showSettings:f,onPresetClick:A,submitText:U,isDisabled:K,isLoading:$,onSubmit:j,className:E,headerExtra:Z}){let{t:F}=useTranslation(),J=useMemo(()=>getNativeToken(e),[e]),Y=J?.symbol,Q=J?.decimals??9;return jsxs("div",{className:cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",E),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:n==="buy"?"primary":"secondary",selectedKey:n,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:cn("h-6",n==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:n==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsx(Tab,{title:F("common.buy")},"buy"),jsx(Tab,{title:F("common.sell")},"sell")]}),jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsx(Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsx(Tab,{title:F("trade.market")},"market")}),Z]}),jsx("div",{className:"mt-2.5",children:n==="buy"?jsx(vr,{amount:a,onAmountChange:o,customAmounts:r,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:Y,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsx(Pr,{amount:a,onAmountChange:o,customPercentages:t,onQuickPercentageClick:i,onCustomPercentagesEdit:p,tokenSymbol:m,amountLabel:F("trade.amount")})}),jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxs("div",{className:"text-xs text-text-muted space-x-1",children:[jsx("span",{children:F("trade.balance")}),jsx("span",{children:n==="buy"?c?`${c} ${Y??""}`:"--":g?`${g} ${m??""}`:"--"})]}),d&&jsx("div",{className:"text-xs text-text-muted",children:d})]}),jsx("div",{className:"mt-4",children:jsx(wr,{values:S,chain:e})}),jsx("div",{className:"mt-2",children:jsxs(Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-text-muted"},selectedKey:`${x}`,onSelectionChange:re=>y(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(be,{value:S,onChange:P,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:n==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:K,isLoading:$,onPress:j,children:U})]})}function vr({amount:e,onAmountChange:n,customAmounts:s,onQuickAmountClick:a,onCustomAmountsEdit:o,nativeSymbol:r,nativeDecimals:t,amountLabel:l}){let i=useCallback(u=>{typeof u=="number"&&n(isNaN(u)?void 0:u);},[n]);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-text-muted",children:l}),endContent:jsx("span",{className:"flex-none text-xs text-text-muted",children:r??""}),formatOptions:{maximumFractionDigits:t},classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Zt,{values:s,onSelect:a,onEdit:o})]})}function Pr({amount:e,onAmountChange:n,customPercentages:s,onQuickPercentageClick:a,onCustomPercentagesEdit:o,tokenSymbol:r,amountLabel:t}){let l=useCallback(i=>{typeof i=="number"&&n(isNaN(i)?void 0:i);},[n]);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-text-muted",children:t}),endContent:jsx("span",{className:"flex-none text-xs text-text-muted",children:r??""}),classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Zt,{values:s,onSelect:a,onEdit:o,suffix:"%"})]})}function Zt({values:e,onSelect:n,onEdit:s,suffix:a}){let[o,r]=useState(false),[t,l]=useState([]),i=useCallback(()=>{l([...e]),r(true);},[e]),u=useCallback(()=>{r(false),s(t);},[s,t]);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((p,m)=>jsx("div",{className:cn("h-6 bg-content2 flex items-center justify-center",m===0&&"rounded-bl-lg"),children:o?jsx(NumberInput,{fullWidth:true,value:t[m]===null||t[m]===void 0?void 0:t[m],onChange:c=>{if(typeof c=="number"){let g=isNaN(c)?null:c;l(d=>{let x=[...d];return x[m]=g,x});}},min:0,hideStepper:true,classNames:{inputWrapper:cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",m===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[m]!=null&&n(e[m]),endContent:a?jsx("span",{className:"text-xs text-text-muted",children:a}):null,children:e[m]??""})},m))}),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 wr({values:e,chain:n}){let{t:s}=useTranslation(),a=useMemo(()=>le(n),[n]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off",r=o==="reduced"?ShieldIcon:o==="secure"?ShieldPlusIcon:ShieldOffIcon;return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-text-muted 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-text-muted",disableRipple:true,startContent:jsx(SlippageIcon,{width:14,height:14}),children:formatPercent((e.slippage??0)/100)})}),jsx(Tooltip,{content:s(`trade.preset.${a.feeType}`),classNames:{content:"text-xs text-text-muted 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-text-muted",disableRipple:true,startContent:jsx(ZapFastIcon,{width:14,height:14}),children:formatPrice(e.priorityFee??0)})}),a.showTipFee&&jsx(Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-text-muted 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-text-muted",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-text-muted 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-text-muted",disableRipple:true,startContent:jsx(r,{width:14,height:14,className:"text-text-muted"}),children:s(`trade.preset.antiMev.${o}`)})})]})}function Cr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a,settings:o,onSettingsChange:r,headerExtra:t,className:l}){return jsx(Qe,{chain:e,tokenAddress:n,settings:o,onSettingsChange:r,children:jsx(Nr,{chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a,headerExtra:t,className:l})})}function Nr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a,headerExtra:o,className:r}){let t=je({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a}),l=useCallback(d=>t.setAmount(d),[t]),i=useCallback(d=>{let x=t.tokenBalance?.amount;if(!x)return;let y=new pe(x).times(d).div(100).toNumber();t.setAmount(y);},[t]),u=useCallback(d=>{t.updateBuySettings({...t.settings.buy,customAmounts:d});},[t]),p=useCallback(d=>{t.updateSellSettings({...t.settings.sell,customPercentages:d});},[t]),m=useCallback(d=>{let x=t.direction==="buy",y=x?t.buyPreset:t.sellPreset;if(x){let S=t.settings.buy,P=[...S.presets];P[y]=d,t.updateBuySettings({...S,presets:P});}else {let S=t.settings.sell,P=[...S.presets];P[y]=d,t.updateSellSettings({...S,presets:P});}},[t]),c=useCallback(d=>{t.direction==="buy"?t.setBuyPreset(d):t.setSellPreset(d);},[t]),g=t.direction==="buy"?t.buyPreset:t.sellPreset;return jsx(Xe,{chain:e,direction:t.direction,onDirectionChange:t.setDirection,amount:t.amount,onAmountChange:t.setAmount,customAmounts:t.settings.buy.customAmounts,customPercentages:t.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:p,tokenSymbol:t.tokenInfo?.symbol,nativeBalance:t.nativeBalance?.amount,tokenBalance:t.tokenBalance?.amount,amountConversion:void 0,preset:g,onPresetChange:c,presetValues:t.currentPresetValues,onPresetSettingsChange:m,showSettings:t.showSettings,onPresetClick:t.handlePresetClick,submitText:t.submitText,isDisabled:t.isDisabled,isLoading:t.isSwapping,onSubmit:t.swap,className:r,headerExtra:o})}function Ye(e){let{id:n,chain:s,token:a,storageKeyPrefix:o,onAmountChange:r,onPresetChange:t,onPresetClick:l}=e,[i,u]=useAtom(G(z(n,s,a.address,o))),p=useAtomValue(L(D(s,"buy",0,o))),m=useAtomValue(L(D(s,"buy",1,o))),c=useAtomValue(L(D(s,"buy",2,o))),g=useMemo(()=>[p,m,c],[p,m,c]),d=useCallback(y=>{u(S=>({...S,amount:y})),r?.(y);},[u,r]),x=useCallback(y=>{u(S=>({...S,preset:y})),t?.(y);},[u,t]);return {token:a,chain:s,amount:i.amount,handleAmountChange:d,preset:i.preset,handlePresetChange:x,onPresetClick:l,presetValues:g}}function et({token:e,chain:n,amount:s,onAmountChange:a,preset:o=0,onPresetChange:r,onPresetClick:t,presetValues:l,radius:i="full",size:u="md",className:p}){let{t:m}=useTranslation(),{isMobile:c}=useScreen(),g=useRef(null),d=useMemo(()=>V(n),[n]),[x,y]=useState(null),S=useCallback(P=>{r?.(Number(P));},[r]);return jsxs("div",{ref:g,className:cn("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",p),style:{border:"1px solid rgba(63,63,70,0.5)",background:"hsl(var(--heroui-content3) / 0.6)"},children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:P=>a(isNaN(P)?void 0:P),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsx(LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":m("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${n}-${e.address}`),jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"hsl(var(--heroui-content4) / 0.5)"}}),jsx(StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:S,classNames:{base:"flex-none h-full",tabList:cn("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:cn("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((P,f)=>jsx(Tab,{title:c?jsx("span",{onClick:A=>{o===f&&(A.stopPropagation(),y(U=>U===f?null:f));},children:m("trade.preset.short",{n:f+1})}):jsx(StyledTooltip,{content:jsx(rn,{label:m("trade.preset.short",{n:f+1}),values:l?.[f]??d,chain:n}),classNames:{content:"!p-0 !rounded-[14px] !border !border-border-subtle !bg-surface-interactive !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsx("span",{onClick:()=>o===f&&t?.(f),children:m("trade.preset.short",{n:f+1})})})},String(f)))}),c&&x!==null&&jsx(Hr,{label:m("trade.preset.short",{n:x+1}),values:l?.[x]??d,chain:n,onClose:()=>y(null),containerRef:g})]})}function Hr({label:e,values:n,chain:s,onClose:a,containerRef:o}){let r=useRef(null);return useEffect(()=>{let t=l=>{let i=l.target;r.current&&!r.current.contains(i)&&o.current&&!o.current.contains(i)&&a();};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t);}},[a,o]),jsx("div",{ref:r,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid var(--color-border-control)",background:"var(--color-surface-interactive)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsx(rn,{label:e,values:n,chain:s})})}function rn({label:e,values:n,chain:s}){let{t:a}=useTranslation(),o=useMemo(()=>le(s),[s]),r=n.antiMev&&n.antiMev!=="off"?n.antiMev:"off",t=(n.slippage??0)/100,l=t>=.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 var(--color-border-control)"},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-text-muted text-xs",children:[jsx(SlippageIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a("trade.preset.slippage")})]}),jsx("span",{className:cn("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:formatPercent(t)})]}),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-text-muted text-xs",children:[jsx(ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a(`trade.preset.${o.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(n.priorityFee??0)," ",jsx("span",{className:"text-text-muted",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-text-muted text-xs",children:[jsx(CoinsIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a("trade.preset.tipFee")})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(n.tipFee??0)," ",jsx("span",{className:"text-text-muted",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-text-muted text-xs",children:[r==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),r==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),r==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a("trade.preset.antiMev")})]}),jsx("span",{className:cn("text-xs font-medium",r==="off"&&"text-text-muted",r==="reduced"&&"text-amber-400",r==="secure"&&"text-success"),children:a(`trade.preset.antiMev.${r}`)})]})]})}function jr({size:e,radius:n,className:s,...a}){let{token:o,chain:r,amount:t,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:p,presetValues:m}=Ye(a);return jsx(et,{token:o,chain:r,amount:t,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:p,presetValues:m,size:e,radius:n,className:s})}function tt(e){let{chain:n,presetIndex:s=0,defaultDirection:a="buy",storageKeyPrefix:o,onChange:r}=e,[t,l]=useState(a),[i,u]=useAtom(L(D(n,t,s,o))),p=useCallback(m=>{u(m),r?.(t,m);},[u,r,t]);return {direction:t,setDirection:l,value:i,handleChange:p}}function st({disableAnimation:e,className:n,...s}){let{t:a}=useTranslation(),{direction:o,setDirection:r,value:t,handleChange:l}=tt(s);return jsxs("div",{className:cn("space-y-3",n),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>r(i),"aria-label":a("common.buySell"),children:[jsx(Tab,{title:a("common.buy")},"buy"),jsx(Tab,{title:a("common.sell")},"sell")]}),jsx(be,{value:t,onChange:l,chain:s.chain,disableAnimation:e})]})}var na=3;function rt(e){let{defaultPresetIndex:n=0,onChange:s,onPresetIndexChange:a}=e,[o,r]=useState(n);useEffect(()=>{r(n);},[n]);let t=useCallback(i=>{r(i),a?.(i);},[a]),l=useCallback((i,u)=>{s?.(o,i,u);},[s,o]);return {presetCount:na,presetIndex:o,setPresetIndex:t,handlePresetChange:l}}function ot({defaultDirection:e,disableAnimation:n,className:s,...a}){let{t:o}=useTranslation(),{presetCount:r,presetIndex:t,setPresetIndex:l,handlePresetChange:i}=rt(a);return jsxs("div",{className:cn("space-y-3",s),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(t),onSelectionChange:u=>l(Number(u)),disableAnimation:n,"aria-label":o("trade.preset.presets"),children:Array.from({length:r},(u,p)=>jsx(Tab,{title:o("trade.preset.label",{n:p+1})},String(p)))}),jsx(st,{chain:a.chain,presetIndex:t,defaultDirection:e,storageKeyPrefix:a.storageKeyPrefix,onChange:i,disableAnimation:n})]})}var ya="preset";function ba({id:e=ya}){return jsx(AsyncModal,{id:e,children:n=>jsx(Sa,{...n})})}function Sa({params:e={chains:[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE]},isOpen:n,onOpenChange:s}){let{t:a}=useTranslation(),{chains:o,defaultChain:r,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u,onPresetIndexChange:p}=e,[m,c]=useState(r??o[0]);useEffect(()=>{c(r??o[0]);},[r,o]);let g=useCallback((y,S,P)=>{u?.(m,y,S,P);},[u,m]),d=useCallback(y=>{p?.(m,y);},[m,p]),x=useCallback(y=>{!y&&document.activeElement instanceof HTMLElement&&document.activeElement.blur(),s(y);},[s]);return jsx(StyledModal,{isOpen:n,onOpenChange:x,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:a("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:o,chain:m,onSelectChain:c})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(ot,{chain:m,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:g,onPresetIndexChange:d})})})]})})}function Ue(e,n,s,a,o){let r=V(o),t=new pe(e).shiftedBy(n.decimals).decimalPlaces(0).toString(),l=new pe(a.priorityFee??r.priorityFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString(),i=new pe(a.tipFee??r.tipFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString();return {input:n.address,output:s,amount:t,slippage:a.slippage??r.slippage??1,priorityFee:l,tipFee:i,isAntiMev:a.antiMev!=="off"}}function mt(e){let{id:n,chain:s,token:a,output:o,storageKeyPrefix:r,onSwapSubmitted:t,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(G(z(n,s,a.address,r))),p=useAtomValue(L(D(s,"buy",u,r))),m=useConnectedWallet(s),{swap:c,isSwapping:g}=ne({onSubmitted:t,onError:l}),d=!i||!o,x=useAuthCallback(async()=>{if(!i||!m||!o)return;let y=Ue(i,a,o,p,s);try{await c({...y,chain:s,wallet:m});}catch{}},[m,i,o,s,a,p,c]);return useMemo(()=>({amount:i,token:a,isDisabled:d,isSwapping:g,handleSwap:x}),[i,a,d,g,x])}function Na({size:e="sm",radius:n,color:s="primary",className:a,...o}){let{amount:r,token:t,isDisabled:l,isSwapping:i,handleSwap:u}=mt(o);return jsx(Button,{fullWidth:true,size:e,radius:n,color:s,className:a,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:r!=null?`${r} ${t.symbol}`:t.symbol})}var pn=createContext(null);function Ma({chain:e,onSwapSubmitted:n,onSwapError:s,children:a}){let o=useConnectedWallet(e),{swap:r}=ne({onSubmitted:n,onError:s}),t=useRef(o);t.current=o;let l=useRef(r);l.current=r;let i=useRef(e);i.current=e;let u=useCallback(async m=>{let c=t.current;c&&await l.current({...m,wallet:c,chain:i.current});},[]),p=useAuthCallback(u,[]);return jsx(pn.Provider,{value:p,children:a})}function pt(){let e=useContext(pn);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ft(e){let{id:n,chain:s,token:a,output:o,storageKeyPrefix:r}=e,{amount:t,preset:l}=useAtomValue(G(z(n,s,a.address,r))),i=useAtomValue(L(D(s,"buy",l,r))),u=pt(),{t:p}=useTranslation(),[m,c]=useState(false),g=!o,d=useRef(a);d.current=a;let x=useRef(i);x.current=i;let y=useRef(s);y.current=s;let S=useCallback(async()=>{if(!o)return;if(!t){toast(p("trade.instantTradeAmountRequired"));return}let P=Ue(t,d.current,o,x.current,y.current);c(true);try{await u(P);}catch{}finally{c(false);}},[t,o,u,p]);return useMemo(()=>({amount:t,token:a,isDisabled:g,isSwapping:m,handleSwap:S}),[t,a,g,m,S])}var Ha=memo(function({size:n="sm",radius:s,color:a="primary",className:o,...r}){let{amount:t,token:l,isDisabled:i,isSwapping:u,handleSwap:p}=ft(r),m=t!=null?`${formatAmount(t)} ${l.symbol}`:void 0;return jsx(Button,{variant:"solid",size:n,radius:s,color:a,className:cn("min-w-0 w-auto flex-none",o),disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"var(--color-brand-primary)"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:p,style:{background:"linear-gradient(hsl(var(--heroui-primary) / 0.08), hsl(var(--heroui-primary) / 0.08)), var(--color-surface-base)",border:"1px solid hsl(var(--heroui-primary) / 0.2)",color:"var(--color-brand-primary)",fontWeight:600},children:m})});
|
|
2
|
-
export{et as AmountPresetInputUI,
|
|
1
|
+
import {createContext,memo,useState,useRef,useCallback,useMemo,useContext,useEffect}from'react';import {useAtomValue,useAtom}from'jotai';import {atomFamily}from'jotai-family';import {atomWithStorage}from'jotai/utils';import {formatAmount,isSolanaChain,isBinanceChain,getNativeToken,formatAmountInUsd,getWrappedToken,chainToNamespace,formatPercent,formatPrice}from'@liberfi.io/utils';import {useDexClient,useLatestBlockFetcher,TradeExecutionRuntime,createClientTradeExecutionAdapter,PRE_SIGN_STALE_MS,TradeRouteExpiredError,useSwapRouteQuery,useTokensQuery,useWalletPortfoliosByTokensQuery}from'@liberfi.io/react';import {Chain,SwapMode,ChainNamespace}from'@liberfi.io/types';import {useWallets,useConnectedWallet,useAuthCallback}from'@liberfi.io/wallet-connector';import {Button,cn,Spinner,LightningIcon,toast,Modal,ModalContent,ModalHeader,ModalBody,Avatar,TradeIcon,ChevronUpIcon,ChevronDownIcon,ModalFooter,Input,useDisclosure,StyledNumberInput,StyledTooltip,InfoIcon,StyledSwitch,ShieldPlusIcon,ShieldIcon,ShieldOffIcon,StyledBorderedTabs,Tab,StyledInput,Tabs,NumberInput,CheckIcon,EditIcon,Tooltip,SlippageIcon,ZapFastIcon,CoinsIcon,useScreen,TokenIcon,StyledLightTabs,StyledSolidTabs,StyledModal,ScrollShadow}from'@liberfi.io/ui';import {useTranslation}from'@liberfi.io/i18n';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import pe from'bignumber.js';import {ChainSelectMobileUI}from'@liberfi.io/ui-chain-select';import {AsyncModal}from'@liberfi.io/ui-scaffold';var gn="liberfi.",xn={amount:void 0,preset:0};function hn(e,n,s,a){return `${e}instant-trade.${n}.${s}.${a}`}function yn(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),a=e.slice(n+1),[o,r,t]=a.split(".");return {prefix:s,id:o,chain:r,tokenAddress:t}}function z(e,n,s,a=gn){return `${a}:${e}.${n}.${s}`}var G=atomFamily(e=>{let{prefix:n,id:s,chain:a,tokenAddress:o}=yn(e);return atomWithStorage(hn(n,s,String(a),o),xn,void 0,{getOnInit:false})});function Ya({id:e,chain:n,tokenAddress:s,storageKeyPrefix:a}){let[o,r]=useAtom(G(z(e,n,s,a))),t=useCallback(l=>{r(i=>({...i,preset:l}));},[r]);return {...o,setPreset:t}}var de=class extends Error{constructor(n="Swap route expired. Please refresh the quote."){super(n),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},vn={SOL:[.01,.1,1,10],ETH:[.01,.02,.5,1],BNB:[.025,.05,.1,.25],USDC:[25,50,100,200],USDT:[25,50,100,200]},Pn=[1,10,25,50];function yt(e){return vn[e]??Pn}var bt=[10,25,50,100];function le(e){let n=getNativeToken(e);if(!n)throw new Error(`No native token defined for chain "${e}"`);let s=n.symbol;return isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return isSolanaChain(e)?gt:isBinanceChain(e)?ht:xt}var Nn="liberfi.";function In(e,n,s,a){return `${e}preset.${n}.${s}.${a}`}function An(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),a=e.slice(n+1),[o,r,t]=a.split(".");return {prefix:s,chain:o,direction:r,index:Number(t)}}function D(e,n,s,a=Nn){return `${a}:${e}.${n}.${s}`}var L=atomFamily(e=>{let{prefix:n,chain:s,direction:a,index:o}=An(e);return atomWithStorage(In(n,String(s),a,o),V(s),void 0,{getOnInit:true})});function po({chain:e,direction:n,presetIndex:s=0,storageKeyPrefix:a}){return useAtomValue(L(D(e,n,s,a)))}function wt(e){return e instanceof Error?e:new Error(String(e))}function _n(e){return {chain:e.chain,userAddress:e.wallet?.address??"",input:e.input,output:e.output,amount:e.amount,mode:e.mode??SwapMode.EXACT_IN,slippage:e.slippage,priorityFee:e.priorityFee,tipFee:e.tipFee,isAntiMev:e.isAntiMev,permit:e.permit,deadline:e.deadline}}function On(e){if(e==="route"||e==="sign"||e==="expired"||e==="send")return e;if(e==="confirm")return "send"}function Vn(e,n,s){let a=On(n);if(s==="stale"||a==="expired"||e instanceof TradeRouteExpiredError||e instanceof de){let r=wt(e).message;return {error:e instanceof de?e:new de(r),phase:"expired"}}let o=a==="sign"||a==="send"||a==="route"?a:"route";return {error:wt(e),phase:o}}function ne(e){let{client:n}=useDexClient(),[s,a]=useState(false),o=useRef(e);o.current=e;let r=useMemo(()=>({chain:Chain.SOLANA}),[]),t=useLatestBlockFetcher(r),l=useRef(n);l.current=n;let i=useRef(t);i.current=t;let u=useRef(null);u.current===null&&(u.current=new TradeExecutionRuntime({adapter:createClientTradeExecutionAdapter({swapRoute:m=>l.current.swapRoute(m),sendTx:m=>l.current.sendTx(m),getLatestBlock:async()=>{let m=await i.current({staleTime:PRE_SIGN_STALE_MS});if(!m.data)throw new TradeRouteExpiredError("Latest Solana block data is stale. Please refresh the quote.");return {blockhash:m.data.blockhash,lastValidBlockHeight:m.data.lastValidBlockHeight,dataUpdatedAt:m.dataUpdatedAt}},checkTxSuccess:(m,c,g)=>l.current.checkTxSuccess(m,c,g)})}));let p=useCallback(async m=>{let c=u.current;a(true);try{let g=await c.execute(_n(m),{sign:typeof m.wallet?.signTransaction=="function"?x=>m.wallet.signTransaction(x):void 0}),d={txHash:g.txHash,extra:g.extra};return o.current?.onSubmitted?.(d),d}catch(g){let d=c.getSnapshot(),x=Vn(g,d.phase,d.state);throw o.current?.onError?.(x.error,x.phase),x.error}finally{a(false);}},[]);return useMemo(()=>({swap:p,isSwapping:s}),[p,s])}var jn=12e3;function Ct(e,n){let s=n?.interval??jn,a=n?.paused??false,o=useRef(n);o.current=n;let t=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!a,l=useSwapRouteQuery(e,{enabled:t,refetchInterval:t?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 Zn=6e4;function Nt(e){let{client:n}=useDexClient(),[s,a]=useState(()=>new Map),o=useRef(e);o.current=e;let r=useCallback((u,p)=>{a(m=>{let c=m.get(u);if(!c||c.status===p)return m;let g=new Map(m);return g.set(u,{...c,status:p}),g});},[]),t=useCallback((u,p)=>{a(c=>{if(c.has(p))return c;let g=new Map(c);return g.set(p,{chain:u,txHash:p,status:"pending"}),g});let m=o.current?.timeout??Zn;n.checkTxSuccess(u,p,m).then(c=>{if(c)r(p,"confirmed"),o.current?.onConfirmed?.(p);else {let g=new Error("Transaction failed on-chain");r(p,"failed"),o.current?.onFailed?.(p,g);}}).catch(c=>{let g=c instanceof Error?c:new Error(String(c));r(p,"failed"),o.current?.onFailed?.(p,g);});},[n,r]),l=useCallback(u=>{a(p=>{if(!p.has(u))return p;let m=new Map(p);return m.delete(u),m});},[]),i=useCallback(()=>{a(u=>u.size===0?u:new Map);},[]);return useMemo(()=>({track:t,clear:l,clearAll:i,transactions:s}),[t,l,i,s])}var ts=new Set([Chain.SOLANA,Chain.SOLANA_TESTNET,Chain.SOLANA_DEVNET]);function ns(e){return ts.has(e)?ChainNamespace.SOLANA:ChainNamespace.EVM}var ss=1e4,rs=15e3;function as(e,n){if(e.length===0)return;let a=e[e.length-1].outputAmount;if(!a||a==="0")return "0";let o=a.padStart(n+1,"0"),r=o.slice(0,o.length-n)||"0",l=o.slice(o.length-n).replace(/0+$/,"");return l?`${r}.${l}`:r}function De(e){let{chain:n}=e,s=useWallets(),a=ns(n),o=useMemo(()=>s.find(v=>v.chainNamespace===a&&v.isConnected),[s,a]),r=o?.address??"",[t,l]=useState(e.from??""),[i,u]=useState(e.to??""),p=useRef(e.from),m=useRef(e.to);useEffect(()=>{e.from!==p.current&&(p.current=e.from,e.from&&l(e.from));},[e.from]),useEffect(()=>{e.to!==m.current&&(m.current=e.to,e.to&&u(e.to));},[e.to]);let c=useMemo(()=>[t,i].filter(Boolean),[t,i]),g=useTokensQuery({chain:n,addresses:c},{enabled:c.length>0,refetchInterval:ss}),d=useMemo(()=>g.data?.find(v=>v.address===t)??null,[g.data,t]),x=useMemo(()=>g.data?.find(v=>v.address===i)??null,[g.data,i]),y=useWalletPortfoliosByTokensQuery({chain:n,address:r,tokenAddresses:c},{enabled:!!r&&c.length>0,refetchInterval:rs}),S=useMemo(()=>y.data?.find(v=>v.address===t)??null,[y.data,t]),P=useMemo(()=>y.data?.find(v=>v.address===i)??null,[y.data,i]),[f,A]=useState(void 0),U=useMemo(()=>{if(!f||d?.decimals==null)return;let v=f.split("."),B=v[0]??"0",Me=(v[1]??"").slice(0,d.decimals).padEnd(d.decimals,"0");return (B+Me).replace(/^0+/,"")||"0"},[f,d?.decimals]),K=useMemo(()=>{if(!f||!d?.marketData?.priceInUsd)return;let v=Number(d.marketData.priceInUsd),B=Number(f)*v;return Number.isFinite(B)?B.toString():void 0},[f,d?.marketData?.priceInUsd]),$=useCallback(()=>{if(!S)return;let v=Number(S.amount);if(!Number.isFinite(v)||v<=0)return;let B=v/2,ve=d?.decimals??9;A(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[S,d?.decimals]),j=useCallback(()=>{if(!S)return;let v=Number(S.amount);if(!Number.isFinite(v)||v<=0)return;let B=d?.decimals??9;A(v.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[S,d?.decimals]),E=useMemo(()=>({chain:n,userAddress:r||void 0,input:t||void 0,output:i||void 0,mode:SwapMode.EXACT_IN,amount:U}),[n,r,t,i,U]),Z=useRef(false),{route:F,isRouting:J,error:Y}=Ct(E,{paused:Z.current}),Q=useMemo(()=>F&&x?as(F.plans,x.decimals):void 0,[F,x]),re=useMemo(()=>{if(!Q||!x?.marketData?.priceInUsd)return;let v=Number(x.marketData.priceInUsd),B=Number(Q)*v;return Number.isFinite(B)?B.toString():void 0},[Q,x?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=ne();Z.current=M;let O=useRef(e.onComplete);O.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:v=>{O.current?.({success:true,txHash:v});},onFailed:v=>{O.current?.({success:false,txHash:v});}}),oe=useMemo(()=>{if(ee.size===0)return "idle";let v=Array.from(ee.values());return v[v.length-1].status},[ee]),te=useCallback(async()=>{if(!(!o||!F||!t||!i||!U))try{let v=await w({chain:n,wallet:o,input:t,output:i,amount:U,mode:SwapMode.EXACT_IN});ae(n,v.txHash);}catch{}},[o,F,n,t,i,U,w,ae]),ie=g.isPending||y.isPending;return useMemo(()=>({fromTokenAddress:t,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:d,toToken:x,fromBalance:S,toBalance:P,amount:f,setAmount:A,setHalfAmount:$,setMaxAmount:j,amountInDecimals:U,amountInUsd:K,outputAmount:Q,outputAmountInUsd:re,route:F,isRouting:J,routeError:Y,swap:te,isSwapping:M,txStatus:oe,isLoading:ie}),[t,i,d,x,S,P,f,$,j,U,K,Q,re,F,J,Y,te,M,oe,ie])}function _e({isOpen:e,onOpenChange:n,fromToken:s,toToken:a,fromBalance:o,inputAmount:r,inputAmountInUsd:t,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:p,routeError:m,onConfirm:c,isSwapping:g}){let{t:d}=useTranslation(),[x,y]=useState(false),S=useCallback(()=>y(f=>!f),[]),P=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:n,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxs(ModalContent,{className:"bg-content2 rounded-lg",children:[jsx(ModalHeader,{children:d("trade.swap.preview")}),jsx(ModalBody,{children:jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:d("trade.swap.from")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsx(Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),o&&jsxs("div",{className:"text-text-muted flex items-center gap-1 text-[10px]",children:[jsx(bs,{}),jsxs("span",{children:[Le(o.amount)," ",s?.symbol]})]})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Le(r)}),jsxs("div",{className:"text-text-muted text-[10px]",children:["$",Mt(t)]})]})]})]}),jsxs("div",{className:"mb-5",children:[jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:d("trade.swap.estimatedReceive")}),jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex flex-1 items-center gap-3",children:[a?.image&&jsx(Avatar,{size:"sm",src:a.image,name:a.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:a?.symbol??"\u2014"}),jsx("div",{className:"text-text-muted text-[10px]",children:Ce(a?.address)})]})]}),jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsx("div",{className:"text-foreground text-xs",children:Le(l)}),jsxs("div",{className:"text-text-muted text-[10px]",children:["$",Mt(i)]})]})]})]}),x&&P.length>0&&jsxs("div",{className:"my-3",children:[jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:d("trade.swap.routeDetails")}),jsx("div",{className:"mt-3 flex flex-col gap-3",children:P.map(f=>jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-text-muted text-xs",children:d("trade.swap.dex")}),jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-text-muted text-xs",children:d("trade.swap.swap")}),jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxs("span",{children:[We(f.inputAmount)," ",Ce(f.input)]}),jsx(TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxs("span",{children:[We(f.outputAmount)," ",Ce(f.output)]})]})]}),f.feeAmount&&jsxs("div",{className:"flex w-full items-center justify-between",children:[jsx("div",{className:"text-text-muted text-xs",children:d("trade.swap.fee")}),jsxs("div",{className:"text-foreground text-xs",children:[We(f.feeAmount)," ",Ce(f.feeQuote)]})]})]},f.key))})]}),P.length>0&&jsx("div",{className:"flex justify-center",children:jsx(Button,{size:"sm",className:"text-text-muted flex bg-transparent text-xs",endContent:x?jsx(ChevronUpIcon,{width:12,height:12}):jsx(ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:S,children:d(x?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsx(ModalFooter,{children:jsx(Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!m,isLoading:!u&&p||g,onPress:c,children:d("common.confirm")})})]})})}function bs(){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-text-muted",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){let n=formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Le(e){return formatAmount(e??0)}function We(e){return formatAmount(e??0)}function Ce(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ve({fromToken:e,toToken:n,fromBalance:s,toBalance:a,amount:o,amountInUsd:r,onAmountChange:t,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:p,onFromTokenSelect:m,onToTokenSelect:c,route:g,isRouting:d,routeError:x,onPreview:y,isSwapping:S,className:P}){let{t:f}=useTranslation();return jsxs("div",{className:cn("px-4 pb-4 lg:pb-8",P),children:[jsxs("div",{className:"space-y-3",children:[jsx("p",{className:"text-text-muted 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=>t(A.target.value||void 0),placeholder:"0",classNames:{inputWrapper:cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-text-muted"),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-text-muted"}),onPress:()=>m(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsx("div",{className:"text-text-muted flex-1 text-xs",children:Wt(r)}),s&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Lt,{}),jsxs("span",{className:"text-text-muted",children:[_t(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")})]})]}),x&&jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:x.message})]})]}),jsxs("div",{className:"mt-4 space-y-3",children:[jsx("p",{className:"text-text-muted 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("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsx(Button,{className:cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",n?"text-foreground":"text-text-muted"),disableRipple:true,startContent:n?.image?jsx(Avatar,{size:"sm",src:n.image,name:n.symbol,className:"h-6 w-6"}):null,endContent:jsx(ChevronDownIcon,{width:16,height:16,className:"text-text-muted"}),onPress:()=>c(""),children:n?n.symbol:f("trade.swap.selectToken")})})]}),jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsx("div",{className:"text-text-muted flex-1 text-xs",children:Wt(p)}),a&&jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsx(Lt,{}),jsxs("span",{className:"text-text-muted",children:[_t(a.amount)," ",a.symbol]})]})]})]})]}),jsx(Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!g,isLoading:!g&&d,onPress:y,children:f(S?"trade.swap.swapping":d?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Lt(){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-text-muted",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 ws(e){let n=formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Wt(e){return `\u2248 $${ws(e)}`}function _t(e){return formatAmount(e??0)}function Ns({chain:e,from:n,to:s,onComplete:a,className:o}){let r=De({chain:e,from:n,to:s,onComplete:a}),{isOpen:t,onOpen:l,onOpenChange:i,onClose:u}=useDisclosure(),p=useCallback(async()=>{await r.swap(),u();},[r,u]);return jsxs(Fragment,{children:[jsx(Ve,{fromToken:r.fromToken,toToken:r.toToken,fromBalance:r.fromBalance,toBalance:r.toBalance,amount:r.amount,amountInUsd:r.amountInUsd,onAmountChange:r.setAmount,onHalfAmount:r.setHalfAmount,onMaxAmount:r.setMaxAmount,outputAmount:r.outputAmount,outputAmountInUsd:r.outputAmountInUsd,onFromTokenSelect:r.setFromTokenAddress,onToTokenSelect:r.setToTokenAddress,route:r.route,isRouting:r.isRouting,routeError:r.routeError,onPreview:l,isSwapping:r.isSwapping,className:o}),jsx(_e,{isOpen:t,onOpenChange:i,fromToken:r.fromToken,toToken:r.toToken,fromBalance:r.fromBalance,inputAmount:r.amount,inputAmountInUsd:r.amountInUsd,outputAmount:r.outputAmount,outputAmountInUsd:r.outputAmountInUsd,route:r.route,isRouting:r.isRouting,routeError:r.routeError,onConfirm:p,isSwapping:r.isSwapping})]})}function Kt(e){let n=V(e),s=getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(s),presets:[{...n},{...n},{...n}]},sell:{customPercentages:[...bt],presets:[{...n},{...n},{...n}]}}}var Us=Kt("900900900");function $t(e){return `liberfi.instant-trade.settings.${e}`}function Ms(e,n){try{let s=localStorage.getItem($t(String(e)));if(s)return JSON.parse(s)}catch{}return n}function Rs(e,n){try{localStorage.setItem($t(e),JSON.stringify(n));}catch{}}var Qt=createContext(null);function $e(){let e=useContext(Qt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Qe({chain:e,tokenAddress:n,settings:s,onSettingsChange:a,children:o}){let r=useMemo(()=>getNativeToken(e),[e]),t=s!==void 0,l=useMemo(()=>Kt(e),[e]),[i,u]=useState(()=>t?l:Ms(e,l)),p=t?s:i,m=useCallback(E=>{t?a?.(E):(u(E),Rs(String(e),E));},[t,a,e]),c=useCallback(E=>m({...p,buy:E}),[p,m]),g=useCallback(E=>m({...p,sell:E}),[p,m]),[d,x]=useState("buy"),[y,S]=useState(),[P,f]=useState(0),[A,U]=useState(0),K=useMemo(()=>V(e),[e]),$=useMemo(()=>{let E=d==="buy"?P:A;return (d==="buy"?p.buy.presets:p.sell.presets)[E]??K},[d,P,A,p,K]),j=useMemo(()=>({chain:e,tokenAddress:n,nativeToken:r,direction:d,setDirection:x,amount:y,setAmount:S,buyPreset:P,setBuyPreset:f,sellPreset:A,setSellPreset:U,settings:p,updateBuySettings:c,updateSellSettings:g,currentPresetValues:$}),[e,n,r,d,y,P,A,p,c,g,$]);return jsx(Qt.Provider,{value:j,children:o})}var Hs=15e3,js=1e4;function je(e){let{chain:n,tokenAddress:s,onSwapSubmitted:a,onSwapError:o}=e,{t:r}=useTranslation(),t=$e(),l=useMemo(()=>getNativeToken(n),[n]),i=useMemo(()=>getWrappedToken(n),[n]),u=useWallets(),p=chainToNamespace(n),m=useMemo(()=>u.find(w=>w.chainNamespace===p&&w.isConnected),[u,p]),c=m?.address??"",g=useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),d=useTokensQuery({chain:n,addresses:g},{enabled:g.length>0,refetchInterval:js}),x=useMemo(()=>d.data?.find(w=>w.address===s)??null,[d.data,s]),y=useWalletPortfoliosByTokensQuery({chain:n,address:c,tokenAddresses:g},{enabled:!!c&&g.length>0,refetchInterval:Hs}),S=l?.address??i?.address??"",P=useMemo(()=>y.data?.find(w=>w.address===S)??null,[y.data,S]),f=useMemo(()=>y.data?.find(w=>w.address===s)??null,[y.data,s]),[A,U]=useState(false),K=useRef(null),$=useCallback(w=>{let M=K.current;K.current=w,U(O=>M===null||M!==w?true:!O);},[]),j=useRef(a);j.current=a;let E=useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>j.current?.(w),onError:(w,M)=>E.current?.(w,M)}),J=useCallback(async()=>{if(!t.amount||!m||!s)return;let w=l?.decimals??9,M=i?.address??l?.address??"",O=t.direction==="buy",ae=O?M:s,ee=O?s:M,oe=O?w:x?.decimals??9,te=new pe(t.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=t.currentPresetValues,v=V(n),B=ie.slippage??v.slippage??1,ve=ie.antiMev!=="off",Me=isSolanaChain(n)?{priorityFee:new pe(ie.priorityFee??v.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new pe(ie.tipFee??v.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:ve}:{};try{await Z({chain:n,wallet:m,input:ae,output:ee,amount:te,slippage:B,...Me}),t.setAmount(void 0);}catch{}},[t,m,s,l,i,x,n,Z]),Y=useMemo(()=>{let w=r(t.direction==="buy"?"common.buy":"common.sell");if(!t.amount)return w;let M=` (${r("trade.insufficientBalance")})`;if(t.direction==="buy"){let ae=P?.amount;if(ae&&new pe(ae).lt(t.amount))return `${w}${M}`;let ee=l?.symbol??"",oe=d.data?.find(te=>te.address===S)?.marketData?.priceInUsd;if(oe){let te=formatAmountInUsd(new pe(t.amount).times(Number(oe)));return r("trade.submitBuyAmount",{amount:t.amount,symbol:ee,usd:te})}return r("trade.submitBuyAmountNoUsd",{amount:t.amount,symbol:ee})}let O=f?.amount;return O&&new pe(O).lt(t.amount)?`${w}${M}`:w},[r,t.direction,t.amount,P,f,l,d.data,S]),Q=!t.amount||!m||!s,re=d.isPending||y.isPending;return useMemo(()=>({chain:n,tokenAddress:s,nativeToken:l,tokenInfo:x,nativeBalance:P,tokenBalance:f,direction:t.direction,setDirection:t.setDirection,amount:t.amount,setAmount:t.setAmount,buyPreset:t.buyPreset,setBuyPreset:t.setBuyPreset,sellPreset:t.sellPreset,setSellPreset:t.setSellPreset,currentPresetValues:t.currentPresetValues,settings:t.settings,updateBuySettings:t.updateBuySettings,updateSellSettings:t.updateSellSettings,showSettings:A,handlePresetClick:$,swap:J,isSwapping:F,submitText:Y,isDisabled:Q,isLoading:re}),[n,s,l,x,P,f,t,A,$,J,F,Y,Q,re])}function be({value:e,onChange:n,chain:s,disableAnimation:a,className:o}){let r=useCallback(i=>n({...e,...i}),[e,n]),t=useMemo(()=>le(s),[s]),l=t.feeType==="gasFee"?"gasFee":"priorityFee";return jsxs("div",{className:cn("space-y-4",o),children:[jsx(nr,{value:e.slippage,onChange:i=>r({slippage:i})}),jsx(sr,{value:e[l],onChange:i=>r({[l]:i}),feeType:t.feeType,symbol:t.feeUnit,decimals:t.feeDecimals}),t.showTipFee&&jsx(rr,{value:e.tipFee,onChange:i=>r({tipFee:i}),symbol:t.tipFeeUnit,decimals:t.tipFeeDecimals}),t.showAutoFee&&jsxs(Fragment,{children:[jsx(ar,{value:e.autoFee,onChange:i=>r({autoFee:i}),disableAnimation:a}),e.autoFee&&jsx(or,{value:e.maxAutoFee,onChange:i=>r({maxAutoFee:i}),symbol:t.nativeSymbol})]}),jsx(ir,{value:e.antiMev,onChange:i=>r({antiMev:i}),options:t.antiMevOptions,disableAnimation:a}),t.showCustomRPC&&jsx(lr,{value:e.customRPC,onChange:i=>r({customRPC:i})})]})}function nr({value:e,onChange:n}){let{t:s}=useTranslation(),a=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-text-muted",children:a}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>n(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsx("span",{className:"text-sm text-text-muted",children:"%"}),"aria-label":a})]})}function sr({value:e,onChange:n,feeType:s,symbol:a,decimals:o}){let{t:r}=useTranslation(),t=r(`trade.preset.${s}`),l=r(`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-text-muted flex items-center gap-1",children:[t,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-text-muted"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>n(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsx("span",{className:"text-sm text-text-muted",children:a}),"aria-label":t})]})}function rr({value:e,onChange:n,symbol:s,decimals:a}){let{t:o}=useTranslation(),r=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-text-muted flex items-center gap-1",children:[r,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-text-muted"})})})]}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:t=>n(isNaN(t)?null:t),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsx("span",{className:"text-sm text-text-muted",children:s}),"aria-label":r})]})}function ar({value:e,onChange:n,disableAnimation:s}){let{t:a}=useTranslation(),o=a("trade.preset.autoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxs("div",{className:"text-sm text-text-muted flex items-center gap-1",children:[o,jsx(StyledTooltip,{content:a("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-text-muted"})})})]}),jsx("div",{className:"flex justify-end",children:jsx(StyledSwitch,{isSelected:e,onValueChange:n,color:"primary","aria-label":o,disableAnimation:s})})]})}function or({value:e,onChange:n,symbol:s}){let{t:a}=useTranslation(),o=a("trade.preset.maxAutoFee");return jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsx("div",{className:"text-sm text-text-muted",children:o}),jsx(StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:r=>n(isNaN(r)?null:r),hideStepper:true,minValue:0,endContent:jsx("span",{className:"text-sm text-text-muted",children:s}),"aria-label":o})]})}function ir({value:e,onChange:n,options:s,disableAnimation:a}){let{t:o}=useTranslation(),r=o("trade.preset.antiMev"),t=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-text-muted flex items-center gap-1",children:[r,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-text-muted"})})})]}),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:n,disableAnimation:a,"aria-label":r,children:s.map(i=>{let u=t[i],p=l[i];return jsx(Tab,{title:jsx(StyledTooltip,{content:jsxs("div",{className:"text-xs",children:[jsx("div",{className:"font-medium text-foreground",children:p.title}),jsx("div",{className:"mt-0.5",children:p.desc})]}),children:jsx("span",{className:"flex items-center justify-center",children:jsx(u,{width:18,height:18})})})},i)})})})]})}function lr({value:e,onChange:n}){let{t:s}=useTranslation(),a=s("trade.preset.customRpc");return jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsx("div",{className:"flex-none text-sm text-text-muted",children:a}),jsx("div",{className:"flex-auto",children:jsx(StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>n(o||null),placeholder:"https://...","aria-label":a})})]})}function Xe({chain:e,direction:n,onDirectionChange:s,amount:a,onAmountChange:o,customAmounts:r,customPercentages:t,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:p,tokenSymbol:m,nativeBalance:c,tokenBalance:g,amountConversion:d,preset:x,onPresetChange:y,presetValues:S,onPresetSettingsChange:P,showSettings:f,onPresetClick:A,submitText:U,isDisabled:K,isLoading:$,onSubmit:j,className:E,headerExtra:Z}){let{t:F}=useTranslation(),J=useMemo(()=>getNativeToken(e),[e]),Y=J?.symbol,Q=J?.decimals??9;return jsxs("div",{className:cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",E),children:[jsxs(Tabs,{fullWidth:true,size:"sm",color:n==="buy"?"primary":"secondary",selectedKey:n,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:cn("h-6",n==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:n==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsx(Tab,{title:F("common.buy")},"buy"),jsx(Tab,{title:F("common.sell")},"sell")]}),jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsx(Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsx(Tab,{title:F("trade.market")},"market")}),Z]}),jsx("div",{className:"mt-2.5",children:n==="buy"?jsx(Sr,{amount:a,onAmountChange:o,customAmounts:r,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:Y,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsx(vr,{amount:a,onAmountChange:o,customPercentages:t,onQuickPercentageClick:i,onCustomPercentagesEdit:p,tokenSymbol:m,amountLabel:F("trade.amount")})}),jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxs("div",{className:"text-xs text-text-muted space-x-1",children:[jsx("span",{children:F("trade.balance")}),jsx("span",{children:n==="buy"?c?`${c} ${Y??""}`:"--":g?`${g} ${m??""}`:"--"})]}),d&&jsx("div",{className:"text-xs text-text-muted",children:d})]}),jsx("div",{className:"mt-4",children:jsx(Pr,{values:S,chain:e})}),jsx("div",{className:"mt-2",children:jsxs(Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-text-muted"},selectedKey:`${x}`,onSelectionChange:re=>y(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(be,{value:S,onChange:P,chain:e})}),jsx(Button,{fullWidth:true,size:"sm",color:n==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:K,isLoading:$,onPress:j,children:U})]})}function Sr({amount:e,onAmountChange:n,customAmounts:s,onQuickAmountClick:a,onCustomAmountsEdit:o,nativeSymbol:r,nativeDecimals:t,amountLabel:l}){let i=useCallback(u=>{typeof u=="number"&&n(isNaN(u)?void 0:u);},[n]);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-text-muted",children:l}),endContent:jsx("span",{className:"flex-none text-xs text-text-muted",children:r??""}),formatOptions:{maximumFractionDigits:t},classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Xt,{values:s,onSelect:a,onEdit:o})]})}function vr({amount:e,onAmountChange:n,customPercentages:s,onQuickPercentageClick:a,onCustomPercentagesEdit:o,tokenSymbol:r,amountLabel:t}){let l=useCallback(i=>{typeof i=="number"&&n(isNaN(i)?void 0:i);},[n]);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-text-muted",children:t}),endContent:jsx("span",{className:"flex-none text-xs text-text-muted",children:r??""}),classNames:{inputWrapper:cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsx(Xt,{values:s,onSelect:a,onEdit:o,suffix:"%"})]})}function Xt({values:e,onSelect:n,onEdit:s,suffix:a}){let[o,r]=useState(false),[t,l]=useState([]),i=useCallback(()=>{l([...e]),r(true);},[e]),u=useCallback(()=>{r(false),s(t);},[s,t]);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((p,m)=>jsx("div",{className:cn("h-6 bg-content2 flex items-center justify-center",m===0&&"rounded-bl-lg"),children:o?jsx(NumberInput,{fullWidth:true,value:t[m]===null||t[m]===void 0?void 0:t[m],onChange:c=>{if(typeof c=="number"){let g=isNaN(c)?null:c;l(d=>{let x=[...d];return x[m]=g,x});}},min:0,hideStepper:true,classNames:{inputWrapper:cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",m===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsx(Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[m]!=null&&n(e[m]),endContent:a?jsx("span",{className:"text-xs text-text-muted",children:a}):null,children:e[m]??""})},m))}),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 Pr({values:e,chain:n}){let{t:s}=useTranslation(),a=useMemo(()=>le(n),[n]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off",r=o==="reduced"?ShieldIcon:o==="secure"?ShieldPlusIcon:ShieldOffIcon;return jsxs("div",{className:"flex items-center gap-2",children:[jsx(Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-text-muted 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-text-muted",disableRipple:true,startContent:jsx(SlippageIcon,{width:14,height:14}),children:formatPercent((e.slippage??0)/100)})}),jsx(Tooltip,{content:s(`trade.preset.${a.feeType}`),classNames:{content:"text-xs text-text-muted 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-text-muted",disableRipple:true,startContent:jsx(ZapFastIcon,{width:14,height:14}),children:formatPrice(e.priorityFee??0)})}),a.showTipFee&&jsx(Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-text-muted 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-text-muted",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-text-muted 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-text-muted",disableRipple:true,startContent:jsx(r,{width:14,height:14,className:"text-text-muted"}),children:s(`trade.preset.antiMev.${o}`)})})]})}function Tr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a,settings:o,onSettingsChange:r,headerExtra:t,className:l}){return jsx(Qe,{chain:e,tokenAddress:n,settings:o,onSettingsChange:r,children:jsx(Cr,{chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a,headerExtra:t,className:l})})}function Cr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a,headerExtra:o,className:r}){let t=je({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:a}),l=useCallback(d=>t.setAmount(d),[t]),i=useCallback(d=>{let x=t.tokenBalance?.amount;if(!x)return;let y=new pe(x).times(d).div(100).toNumber();t.setAmount(y);},[t]),u=useCallback(d=>{t.updateBuySettings({...t.settings.buy,customAmounts:d});},[t]),p=useCallback(d=>{t.updateSellSettings({...t.settings.sell,customPercentages:d});},[t]),m=useCallback(d=>{let x=t.direction==="buy",y=x?t.buyPreset:t.sellPreset;if(x){let S=t.settings.buy,P=[...S.presets];P[y]=d,t.updateBuySettings({...S,presets:P});}else {let S=t.settings.sell,P=[...S.presets];P[y]=d,t.updateSellSettings({...S,presets:P});}},[t]),c=useCallback(d=>{t.direction==="buy"?t.setBuyPreset(d):t.setSellPreset(d);},[t]),g=t.direction==="buy"?t.buyPreset:t.sellPreset;return jsx(Xe,{chain:e,direction:t.direction,onDirectionChange:t.setDirection,amount:t.amount,onAmountChange:t.setAmount,customAmounts:t.settings.buy.customAmounts,customPercentages:t.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:p,tokenSymbol:t.tokenInfo?.symbol,nativeBalance:t.nativeBalance?.amount,tokenBalance:t.tokenBalance?.amount,amountConversion:void 0,preset:g,onPresetChange:c,presetValues:t.currentPresetValues,onPresetSettingsChange:m,showSettings:t.showSettings,onPresetClick:t.handlePresetClick,submitText:t.submitText,isDisabled:t.isDisabled,isLoading:t.isSwapping,onSubmit:t.swap,className:r,headerExtra:o})}function Ye(e){let{id:n,chain:s,token:a,storageKeyPrefix:o,onAmountChange:r,onPresetChange:t,onPresetClick:l}=e,[i,u]=useAtom(G(z(n,s,a.address,o))),p=useAtomValue(L(D(s,"buy",0,o))),m=useAtomValue(L(D(s,"buy",1,o))),c=useAtomValue(L(D(s,"buy",2,o))),g=useMemo(()=>[p,m,c],[p,m,c]),d=useCallback(y=>{u(S=>({...S,amount:y})),r?.(y);},[u,r]),x=useCallback(y=>{u(S=>({...S,preset:y})),t?.(y);},[u,t]);return {token:a,chain:s,amount:i.amount,handleAmountChange:d,preset:i.preset,handlePresetChange:x,onPresetClick:l,presetValues:g}}function et({token:e,chain:n,amount:s,onAmountChange:a,preset:o=0,onPresetChange:r,onPresetClick:t,presetValues:l,radius:i="full",size:u="md",className:p}){let{t:m}=useTranslation(),{isMobile:c}=useScreen(),g=useRef(null),d=useMemo(()=>V(n),[n]),[x,y]=useState(null),S=useCallback(P=>{r?.(Number(P));},[r]);return jsxs("div",{ref:g,className:cn("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",p),style:{border:"1px solid rgba(63,63,70,0.5)",background:"hsl(var(--heroui-content3) / 0.6)"},children:[jsx(StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:P=>a(isNaN(P)?void 0:P),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsx(LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsx(TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":m("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${n}-${e.address}`),jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"hsl(var(--heroui-content4) / 0.5)"}}),jsx(StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:S,classNames:{base:"flex-none h-full",tabList:cn("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:cn("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((P,f)=>jsx(Tab,{title:c?jsx("span",{onClick:A=>{o===f&&(A.stopPropagation(),y(U=>U===f?null:f));},children:m("trade.preset.short",{n:f+1})}):jsx(StyledTooltip,{content:jsx(sn,{label:m("trade.preset.short",{n:f+1}),values:l?.[f]??d,chain:n}),classNames:{content:"!p-0 !rounded-[14px] !border !border-border-subtle !bg-surface-interactive !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsx("span",{onClick:()=>o===f&&t?.(f),children:m("trade.preset.short",{n:f+1})})})},String(f)))}),c&&x!==null&&jsx(Qr,{label:m("trade.preset.short",{n:x+1}),values:l?.[x]??d,chain:n,onClose:()=>y(null),containerRef:g})]})}function Qr({label:e,values:n,chain:s,onClose:a,containerRef:o}){let r=useRef(null);return useEffect(()=>{let t=l=>{let i=l.target;r.current&&!r.current.contains(i)&&o.current&&!o.current.contains(i)&&a();};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t);}},[a,o]),jsx("div",{ref:r,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid var(--color-border-control)",background:"var(--color-surface-interactive)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsx(sn,{label:e,values:n,chain:s})})}function sn({label:e,values:n,chain:s}){let{t:a}=useTranslation(),o=useMemo(()=>le(s),[s]),r=n.antiMev&&n.antiMev!=="off"?n.antiMev:"off",t=(n.slippage??0)/100,l=t>=.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 var(--color-border-control)"},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-text-muted text-xs",children:[jsx(SlippageIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a("trade.preset.slippage")})]}),jsx("span",{className:cn("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:formatPercent(t)})]}),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-text-muted text-xs",children:[jsx(ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a(`trade.preset.${o.feeType}`)})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(n.priorityFee??0)," ",jsx("span",{className:"text-text-muted",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-text-muted text-xs",children:[jsx(CoinsIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a("trade.preset.tipFee")})]}),jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[formatPrice(n.tipFee??0)," ",jsx("span",{className:"text-text-muted",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-text-muted text-xs",children:[r==="off"&&jsx(ShieldOffIcon,{width:12,height:12,className:"flex-none"}),r==="reduced"&&jsx(ShieldIcon,{width:12,height:12,className:"flex-none"}),r==="secure"&&jsx(ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsx("span",{children:a("trade.preset.antiMev")})]}),jsx("span",{className:cn("text-xs font-medium",r==="off"&&"text-text-muted",r==="reduced"&&"text-amber-400",r==="secure"&&"text-success"),children:a(`trade.preset.antiMev.${r}`)})]})]})}function Hr({size:e,radius:n,className:s,...a}){let{token:o,chain:r,amount:t,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:p,presetValues:m}=Ye(a);return jsx(et,{token:o,chain:r,amount:t,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:p,presetValues:m,size:e,radius:n,className:s})}function tt(e){let{chain:n,presetIndex:s=0,defaultDirection:a="buy",storageKeyPrefix:o,onChange:r}=e,[t,l]=useState(a),[i,u]=useAtom(L(D(n,t,s,o))),p=useCallback(m=>{u(m),r?.(t,m);},[u,r,t]);return {direction:t,setDirection:l,value:i,handleChange:p}}function st({disableAnimation:e,className:n,...s}){let{t:a}=useTranslation(),{direction:o,setDirection:r,value:t,handleChange:l}=tt(s);return jsxs("div",{className:cn("space-y-3",n),children:[jsxs(StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>r(i),"aria-label":a("common.buySell"),children:[jsx(Tab,{title:a("common.buy")},"buy"),jsx(Tab,{title:a("common.sell")},"sell")]}),jsx(be,{value:t,onChange:l,chain:s.chain,disableAnimation:e})]})}var ta=3;function rt(e){let{defaultPresetIndex:n=0,onChange:s,onPresetIndexChange:a}=e,[o,r]=useState(n);useEffect(()=>{r(n);},[n]);let t=useCallback(i=>{r(i),a?.(i);},[a]),l=useCallback((i,u)=>{s?.(o,i,u);},[s,o]);return {presetCount:ta,presetIndex:o,setPresetIndex:t,handlePresetChange:l}}function ot({defaultDirection:e,disableAnimation:n,className:s,...a}){let{t:o}=useTranslation(),{presetCount:r,presetIndex:t,setPresetIndex:l,handlePresetChange:i}=rt(a);return jsxs("div",{className:cn("space-y-3",s),children:[jsx(StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(t),onSelectionChange:u=>l(Number(u)),disableAnimation:n,"aria-label":o("trade.preset.presets"),children:Array.from({length:r},(u,p)=>jsx(Tab,{title:o("trade.preset.label",{n:p+1})},String(p)))}),jsx(st,{chain:a.chain,presetIndex:t,defaultDirection:e,storageKeyPrefix:a.storageKeyPrefix,onChange:i,disableAnimation:n})]})}var ya="preset";function ba({id:e=ya}){return jsx(AsyncModal,{id:e,children:n=>jsx(Sa,{...n})})}function Sa({params:e={chains:[Chain.BINANCE]},isOpen:n,onOpenChange:s}){let{t:a}=useTranslation(),{chains:o,defaultChain:r,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u,onPresetIndexChange:p}=e,[m,c]=useState(r??o[0]);useEffect(()=>{c(r??o[0]);},[r,o]);let g=useCallback((y,S,P)=>{u?.(m,y,S,P);},[u,m]),d=useCallback(y=>{p?.(m,y);},[m,p]),x=useCallback(y=>{!y&&document.activeElement instanceof HTMLElement&&document.activeElement.blur(),s(y);},[s]);return jsx(StyledModal,{isOpen:n,onOpenChange:x,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:a("trade.preset.instantTradeSettings")}),jsx(ChainSelectMobileUI,{candidates:o,chain:m,onSelectChain:c})]})}),jsx(ModalBody,{children:jsx(ScrollShadow,{children:jsx(ot,{chain:m,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:g,onPresetIndexChange:d})})})]})})}function Ue(e,n,s,a,o){let r=V(o),t=new pe(e).shiftedBy(n.decimals).decimalPlaces(0).toString(),l=new pe(a.priorityFee??r.priorityFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString(),i=new pe(a.tipFee??r.tipFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString();return {input:n.address,output:s,amount:t,slippage:a.slippage??r.slippage??1,priorityFee:l,tipFee:i,isAntiMev:a.antiMev!=="off"}}function ut(e){let{id:n,chain:s,token:a,output:o,storageKeyPrefix:r,onSwapSubmitted:t,onSwapError:l}=e,{amount:i,preset:u}=useAtomValue(G(z(n,s,a.address,r))),p=useAtomValue(L(D(s,"buy",u,r))),m=useConnectedWallet(s),{swap:c,isSwapping:g}=ne({onSubmitted:t,onError:l}),d=!i||!o,x=useAuthCallback(async()=>{if(!i||!m||!o)return;let y=Ue(i,a,o,p,s);try{await c({...y,chain:s,wallet:m});}catch{}},[m,i,o,s,a,p,c]);return useMemo(()=>({amount:i,token:a,isDisabled:d,isSwapping:g,handleSwap:x}),[i,a,d,g,x])}function Na({size:e="sm",radius:n,color:s="primary",className:a,...o}){let{amount:r,token:t,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsx(Button,{fullWidth:true,size:e,radius:n,color:s,className:a,disableRipple:true,startContent:jsx(LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:r!=null?`${r} ${t.symbol}`:t.symbol})}var dn=createContext(null);function Ma({chain:e,onSwapSubmitted:n,onSwapError:s,children:a}){let o=useConnectedWallet(e),{swap:r}=ne({onSubmitted:n,onError:s}),t=useRef(o);t.current=o;let l=useRef(r);l.current=r;let i=useRef(e);i.current=e;let u=useCallback(async m=>{let c=t.current;c&&await l.current({...m,wallet:c,chain:i.current});},[]),p=useAuthCallback(u,[]);return jsx(dn.Provider,{value:p,children:a})}function dt(){let e=useContext(dn);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:n,chain:s,token:a,output:o,storageKeyPrefix:r}=e,{amount:t,preset:l}=useAtomValue(G(z(n,s,a.address,r))),i=useAtomValue(L(D(s,"buy",l,r))),u=dt(),{t:p}=useTranslation(),[m,c]=useState(false),g=!o,d=useRef(a);d.current=a;let x=useRef(i);x.current=i;let y=useRef(s);y.current=s;let S=useCallback(async()=>{if(!o)return;if(!t){toast(p("trade.instantTradeAmountRequired"));return}let P=Ue(t,d.current,o,x.current,y.current);c(true);try{await u(P);}catch{}finally{c(false);}},[t,o,u,p]);return useMemo(()=>({amount:t,token:a,isDisabled:g,isSwapping:m,handleSwap:S}),[t,a,g,m,S])}var Ha=memo(function({size:n="sm",radius:s,color:a="primary",className:o,...r}){let{amount:t,token:l,isDisabled:i,isSwapping:u,handleSwap:p}=ct(r),m=t!=null?`${formatAmount(t)} ${l.symbol}`:void 0;return jsx(Button,{variant:"solid",size:n,radius:s,color:a,className:cn("min-w-0 w-auto flex-none",o),disableRipple:true,startContent:jsx(LightningIcon,{className:"flex-none",style:{color:"var(--color-brand-primary)"}}),isDisabled:i,isLoading:u,spinner:jsx(Spinner,{size:"sm",color:"current"}),onPress:p,style:{background:"linear-gradient(hsl(var(--heroui-primary) / 0.08), hsl(var(--heroui-primary) / 0.08)), var(--color-surface-base)",border:"1px solid hsl(var(--heroui-primary) / 0.2)",color:"var(--color-brand-primary)",fontWeight:600},children:m})});
|
|
2
|
+
export{et as AmountPresetInputUI,Hr as AmountPresetInputWidget,ht as DEFAULT_BSC_TRADE_PRESET,xt as DEFAULT_EVM_TRADE_PRESET,Us as DEFAULT_INSTANT_TRADE_SETTINGS,bt as DEFAULT_SELL_PERCENTAGES,gt as DEFAULT_SOL_TRADE_PRESET,Na as InstantTradeButtonWidget,Ha as InstantTradeListButtonWidget,Qe as InstantTradeProvider,Ma as InstantTradeSwapProvider,Xe as InstantTradeUI,Tr as InstantTradeWidget,ot as MultiPresetFormWidget,ba as PresetFormModal,be as PresetFormUI,st as PresetFormWidget,_e as SwapPreviewModal,de as SwapRouteExpiredError,Ve as SwapUI,Ns as SwapWidget,le as getChainPresetFeatures,yt as getDefaultBuyAmounts,V as getDefaultPresetForChain,G as instantTradeAmountAtomFamily,z as instantTradeAmountKey,L as presetAtomFamily,D as presetKey,Ye as useAmountPresetInputScript,$e as useInstantTrade,Ya as useInstantTradeAmount,ut as useInstantTradeButtonScript,ct as useInstantTradeListButtonScript,je as useInstantTradeScript,dt as useInstantTradeSwap,rt as useMultiPresetFormScript,tt as usePresetFormScript,po as usePresetValues,ne as useSwap,Ct as useSwapRoutePolling,De as useSwapScript,Nt as useTxConfirmation};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|