@liberfi.io/ui-trade 3.0.18 → 3.0.20
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 +23 -18
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),pe=require('bignumber.js'),uiChainSelect=require('@liberfi.io/ui-chain-select'),uiScaffold=require('@liberfi.io/ui-scaffold');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var pe__default=/*#__PURE__*/_interopDefault(pe);var cn="liberfi.",fn={amount:void 0,preset:0};function gn(e,t,r,s){return `${e}instant-trade.${t}.${r}.${s}`}function xn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[o,a,n]=s.split(".");return {prefix:r,id:o,chain:a,tokenAddress:n}}function G(e,t,r,s=cn){return `${s}:${e}.${t}.${r}`}var j=jotaiFamily.atomFamily(e=>{let{prefix:t,id:r,chain:s,tokenAddress:o}=xn(e);return utils.atomWithStorage(gn(t,r,String(s),o),fn,void 0,{getOnInit:true})});function qa({id:e,chain:t,tokenAddress:r,storageKeyPrefix:s}){return jotai.useAtomValue(j(G(e,t,r,s)))}var ge=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},yn={SOL:[.01,.1,1,10],ETH:[.01,.02,.5,1],BNB:[.025,.05,.1,.25],USDC:[25,50,100,200],USDT:[25,50,100,200]},bn=[1,10,25,50];function yt(e){return yn[e]??bn}var bt=[10,25,50,100];function le(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let r=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:r,feeType:"priorityFee",feeUnit:r,feeDecimals:9,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.isBinanceChain(e)?{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return utils$1.isSolanaChain(e)?gt:utils$1.isBinanceChain(e)?ht:xt}var wn="liberfi.";function Tn(e,t,r,s){return `${e}preset.${t}.${r}.${s}`}function Nn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[o,a,n]=s.split(".");return {prefix:r,chain:o,direction:a,index:Number(n)}}function D(e,t,r,s=wn){return `${s}:${e}.${t}.${r}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:r,direction:s,index:o}=Nn(e);return utils.atomWithStorage(Tn(t,String(r),s,o),V(r),void 0,{getOnInit:true})});function io({chain:e,direction:t,presetIndex:r=0,storageKeyPrefix:s}){return jotai.useAtomValue(L(D(e,t,r,s)))}var In=150,Fn=12e3,Pt=60,wt=40;function Ue(e,t,r,s){if(!utils$1.isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!r.data||Date.now()-r.dataUpdatedAt>Fn)throw new ge("Latest Solana block data is stale. Please refresh the quote.");let o=r.data.lastValidBlockHeight-In;if(t.lastValidBlockHeight-o<s)throw new ge("Swap route is close to blockhash expiry. Please refresh the quote.")}function _n(e){let t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}function On(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function ne(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(false),o=react.useRef(e);o.current=e;let a=react$1.useLatestBlockCacheReader({chain:types.Chain.SOLANA}),n=react.useCallback(async l=>{let{wallet:i,chain:u,...m}=l;s(true);try{let p;try{p=await t.swapRoute({chain:u,userAddress:i.address,input:m.input,output:m.output,mode:m.mode??types.SwapMode.EXACT_IN,amount:m.amount,slippage:m.slippage,priorityFee:m.priorityFee,tipFee:m.tipFee,isAntiMev:m.isAntiMev,permit:m.permit,deadline:m.deadline});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"route"),x}try{Ue(u,p,a(),Pt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let g;try{let c=_n(p.serializedTx);g=await i.signTransaction(c);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"sign"),x}try{Ue(u,p,a(),wt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let h;try{let c=On(g);h=await t.sendTx({chain:u,serializedTx:c});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"send"),x}let d={txHash:h.txHash,extra:h.extra};return o.current?.onSubmitted?.(d),d}finally{s(false);}},[t,a]);return react.useMemo(()=>({swap:n,isSwapping:r}),[n,r])}var Hn=12e3;function Tt(e,t){let r=t?.interval??Hn,s=t?.paused??false,o=react.useRef(t);o.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!s,l=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return react.useEffect(()=>{l.error&&o.current?.onError?.(l.error);},[l.error]),react.useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var qn=6e4;function Nt(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(()=>new Map),o=react.useRef(e);o.current=e;let a=react.useCallback((u,m)=>{s(p=>{let g=p.get(u);if(!g||g.status===m)return p;let h=new Map(p);return h.set(u,{...g,status:m}),h});},[]),n=react.useCallback((u,m)=>{s(g=>{if(g.has(m))return g;let h=new Map(g);return h.set(m,{chain:u,txHash:m,status:"pending"}),h});let p=o.current?.timeout??qn;t.checkTxSuccess(u,m,p).then(g=>{if(g)a(m,"confirmed"),o.current?.onConfirmed?.(m);else {let h=new Error("Transaction failed on-chain");a(m,"failed"),o.current?.onFailed?.(m,h);}}).catch(g=>{let h=g instanceof Error?g:new Error(String(g));a(m,"failed"),o.current?.onFailed?.(m,h);});},[t,a]),l=react.useCallback(u=>{s(m=>{if(!m.has(u))return m;let p=new Map(m);return p.delete(u),p});},[]),i=react.useCallback(()=>{s(u=>u.size===0?u:new Map);},[]);return react.useMemo(()=>({track:n,clear:l,clearAll:i,transactions:r}),[n,l,i,r])}var Jn=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function er(e){return Jn.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var tr=1e4,nr=15e3;function rr(e,t){if(e.length===0)return;let s=e[e.length-1].outputAmount;if(!s||s==="0")return "0";let o=s.padStart(t+1,"0"),a=o.slice(0,o.length-t)||"0",l=o.slice(o.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function De(e){let{chain:t}=e,r=walletConnector.useWallets(),s=er(t),o=react.useMemo(()=>r.find(S=>S.chainNamespace===s&&S.isConnected),[r,s]),a=o?.address??"",[n,l]=react.useState(e.from??""),[i,u]=react.useState(e.to??""),m=react.useRef(e.from),p=react.useRef(e.to);react.useEffect(()=>{e.from!==m.current&&(m.current=e.from,e.from&&l(e.from));},[e.from]),react.useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&u(e.to));},[e.to]);let g=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:g},{enabled:g.length>0,refetchInterval:tr}),d=react.useMemo(()=>h.data?.find(S=>S.address===n)??null,[h.data,n]),c=react.useMemo(()=>h.data?.find(S=>S.address===i)??null,[h.data,i]),x=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:g},{enabled:!!a&&g.length>0,refetchInterval:nr}),v=react.useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),P=react.useMemo(()=>x.data?.find(S=>S.address===i)??null,[x.data,i]),[f,I]=react.useState(void 0),U=react.useMemo(()=>{if(!f||d?.decimals==null)return;let S=f.split("."),k=S[0]??"0",Me=(S[1]??"").slice(0,d.decimals).padEnd(d.decimals,"0");return (k+Me).replace(/^0+/,"")||"0"},[f,d?.decimals]),$=react.useMemo(()=>{if(!f||!d?.marketData?.priceInUsd)return;let S=Number(d.marketData.priceInUsd),k=Number(f)*S;return Number.isFinite(k)?k.toString():void 0},[f,d?.marketData?.priceInUsd]),H=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let k=S/2,ve=d?.decimals??9;I(k.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[v,d?.decimals]),z=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let k=d?.decimals??9;I(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:k}));},[v,d?.decimals]),E=react.useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:types.SwapMode.EXACT_IN,amount:U}),[t,a,n,i,U]),Z=react.useRef(false),{route:F,isRouting:Y,error:J}=Tt(E,{paused:Z.current}),Q=react.useMemo(()=>F&&c?rr(F.plans,c.decimals):void 0,[F,c]),se=react.useMemo(()=>{if(!Q||!c?.marketData?.priceInUsd)return;let S=Number(c.marketData.priceInUsd),k=Number(Q)*S;return Number.isFinite(k)?k.toString():void 0},[Q,c?.marketData?.priceInUsd]),{swap:w,isSwapping:R}=ne();Z.current=R;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:S=>{W.current?.({success:true,txHash:S});},onFailed:S=>{W.current?.({success:false,txHash:S});}}),oe=react.useMemo(()=>{if(ee.size===0)return "idle";let S=Array.from(ee.values());return S[S.length-1].status},[ee]),te=react.useCallback(async()=>{if(!(!o||!F||!n||!i||!U))try{let S=await w({chain:t,wallet:o,input:n,output:i,amount:U,mode:types.SwapMode.EXACT_IN});ae(t,S.txHash);}catch{}},[o,F,t,n,i,U,w,ae]),ie=h.isPending||x.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:d,toToken:c,fromBalance:v,toBalance:P,amount:f,setAmount:I,setHalfAmount:H,setMaxAmount:z,amountInDecimals:U,amountInUsd:$,outputAmount:Q,outputAmountInUsd:se,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:R,txStatus:oe,isLoading:ie}),[n,i,d,c,v,P,f,H,z,U,$,Q,se,F,Y,J,te,R,oe,ie])}function Oe({isOpen:e,onOpenChange:t,fromToken:r,toToken:s,fromBalance:o,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:m,routeError:p,onConfirm:g,isSwapping:h}){let{t:d}=i18n.useTranslation(),[c,x]=react.useState(false),v=react.useCallback(()=>x(f=>!f),[]),P=react.useMemo(()=>u?u.plans.map((f,I)=>({key:`plan-${I}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.feeAmount})):[],[u]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:d("trade.swap.preview")}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:d("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),o&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(xr,{}),jsxRuntime.jsxs("span",{children:[Le(o.amount)," ",r?.symbol]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:Le(a)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:d("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:Te(s?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:Le(l)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(i)]})]})]})]}),c&&P.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:d("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:P.map(f=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[_e(f.inputAmount)," ",Te(f.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[_e(f.outputAmount)," ",Te(f.output)]})]})]}),f.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[_e(f.feeAmount)," ",Te(f.feeQuote)]})]})]},f.key))})]}),P.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:c?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:v,children:d(c?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!p,isLoading:!u&&m||h,onPress:g,children:d("common.confirm")})})]})})}function xr(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Mt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Le(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function _e(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function Te(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ve({fromToken:e,toToken:t,fromBalance:r,toBalance:s,amount:o,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:m,onFromTokenSelect:p,onToTokenSelect:g,route:h,isRouting:d,routeError:c,onPreview:x,isSwapping:v,className:P}){let{t:f}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",P),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:o??"",onChange:I=>n(I.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.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:ui.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")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Dt(a)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(kt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Lt(r.amount)," ",r.symbol]}),l&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:f("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),c&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:c.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.to")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:u??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.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:ui.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")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>g(""),children:t?t.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Dt(m)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(kt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Lt(s.amount)," ",s.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&d,onPress:x,children:f(v?"trade.swap.swapping":d?"trade.swap.findingRoute":"trade.swap.swap")})]})}function kt(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Dt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Lt(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function Sr({chain:e,from:t,to:r,onComplete:s,className:o}){let a=De({chain:e,from:t,to:r,onComplete:s}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=ui.useDisclosure(),m=react.useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ve,{fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,toBalance:a.toBalance,amount:a.amount,amountInUsd:a.amountInUsd,onAmountChange:a.setAmount,onHalfAmount:a.setHalfAmount,onMaxAmount:a.setMaxAmount,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,onFromTokenSelect:a.setFromTokenAddress,onToTokenSelect:a.setToTokenAddress,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onPreview:l,isSwapping:a.isSwapping,className:o}),jsxRuntime.jsx(Oe,{isOpen:n,onOpenChange:i,fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,inputAmount:a.amount,inputAmountInUsd:a.amountInUsd,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onConfirm:m,isSwapping:a.isSwapping})]})}function Wt(e){let t=V(e),r=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(r),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...bt],presets:[{...t},{...t},{...t}]}}}var Nr=Wt("900900900");function Vt(e){return `liberfi.instant-trade.settings.${e}`}function Cr(e,t){try{let r=localStorage.getItem(Vt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function Ar(e,t){try{localStorage.setItem(Vt(e),JSON.stringify(t));}catch{}}var Kt=react.createContext(null);function $e(){let e=react.useContext(Kt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function He({chain:e,tokenAddress:t,settings:r,onSettingsChange:s,children:o}){let a=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=r!==void 0,l=react.useMemo(()=>Wt(e),[e]),[i,u]=react.useState(()=>n?l:Cr(e,l)),m=n?r:i,p=react.useCallback(E=>{n?s?.(E):(u(E),Ar(String(e),E));},[n,s,e]),g=react.useCallback(E=>p({...m,buy:E}),[m,p]),h=react.useCallback(E=>p({...m,sell:E}),[m,p]),[d,c]=react.useState("buy"),[x,v]=react.useState(),[P,f]=react.useState(0),[I,U]=react.useState(0),$=react.useMemo(()=>V(e),[e]),H=react.useMemo(()=>{let E=d==="buy"?P:I;return (d==="buy"?m.buy.presets:m.sell.presets)[E]??$},[d,P,I,m,$]),z=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:d,setDirection:c,amount:x,setAmount:v,buyPreset:P,setBuyPreset:f,sellPreset:I,setSellPreset:U,settings:m,updateBuySettings:g,updateSellSettings:h,currentPresetValues:H}),[e,t,a,d,x,P,I,m,g,h,H]);return jsxRuntime.jsx(Kt.Provider,{value:z,children:o})}var Wr=15e3,Vr=1e4,Kr=1e4;function ze(e){let{chain:t,tokenAddress:r,onSwapSubmitted:s,onSwapError:o}=e,{t:a}=i18n.useTranslation(),n=$e(),l=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),u=walletConnector.useWallets(),m=utils$1.chainToNamespace(t),p=react.useMemo(()=>u.find(w=>w.chainNamespace===m&&w.isConnected),[u,m]),g=p?.address??"",h=react.useMemo(()=>{let w=[r];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[r,l,i]),d=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Vr}),c=react.useMemo(()=>d.data?.find(w=>w.address===r)??null,[d.data,r]),x=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:g,tokenAddresses:h},{enabled:!!g&&h.length>0,refetchInterval:Wr});react$1.useLatestBlockQuery({chain:types.Chain.SOLANA},{enabled:utils$1.isSolanaChain(t),refetchInterval:Kr,staleTime:8e3});let v=l?.address??i?.address??"",P=react.useMemo(()=>x.data?.find(w=>w.address===v)??null,[x.data,v]),f=react.useMemo(()=>x.data?.find(w=>w.address===r)??null,[x.data,r]),[I,U]=react.useState(false),$=react.useRef(null),H=react.useCallback(w=>{let R=$.current;$.current=w,U(W=>R===null||R!==w?true:!W);},[]),z=react.useRef(s);z.current=s;let E=react.useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>z.current?.(w),onError:(w,R)=>E.current?.(w,R)}),Y=react.useCallback(async()=>{if(!n.amount||!p||!r)return;let w=l?.decimals??9,R=i?.address??l?.address??"",W=n.direction==="buy",ae=W?R:r,ee=W?r:R,oe=W?w:c?.decimals??9,te=new pe__default.default(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,S=V(t),k=ie.slippage??S.slippage??1,ve=ie.antiMev!=="off",Me=utils$1.isSolanaChain(t)?{priorityFee:new pe__default.default(ie.priorityFee??S.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new pe__default.default(ie.tipFee??S.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:ve}:{};try{await Z({chain:t,wallet:p,input:ae,output:ee,amount:te,slippage:k,...Me}),n.setAmount(void 0);}catch{}},[n,p,r,l,i,c,t,Z]),J=react.useMemo(()=>{let w=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let R=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=P?.amount;if(ae&&new pe__default.default(ae).lt(n.amount))return `${w}${R}`;let ee=l?.symbol??"",oe=d.data?.find(te=>te.address===v)?.marketData?.priceInUsd;if(oe){let te=utils$1.formatAmountUSD(new pe__default.default(n.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=f?.amount;return W&&new pe__default.default(W).lt(n.amount)?`${w}${R}`:w},[a,n.direction,n.amount,P,f,l,d.data,v]),Q=!n.amount||!p||!r,se=d.isPending||x.isPending;return react.useMemo(()=>({chain:t,tokenAddress:r,nativeToken:l,tokenInfo:c,nativeBalance:P,tokenBalance:f,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:I,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:se}),[t,r,l,c,P,f,n,I,H,Y,F,J,Q,se])}function be({value:e,onChange:t,chain:r,disableAnimation:s,className:o}){let a=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>le(r),[r]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",o),children:[jsxRuntime.jsx(Yr,{value:e.slippage,onChange:i=>a({slippage:i})}),jsxRuntime.jsx(Jr,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(es,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(ts,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:s}),e.autoFee&&jsxRuntime.jsx(ns,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(rs,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:s}),n.showCustomRPC&&jsxRuntime.jsx(ss,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Yr({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:s}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":s})]})}function Jr({value:e,onChange:t,feeType:r,symbol:s,decimals:o}){let{t:a}=i18n.useTranslation(),n=a(`trade.preset.${r}`),l=a(`trade.preset.${r}.tooltip`);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsxRuntime.jsx(ui.StyledTooltip,{content:l,children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":n})]})}function es({value:e,onChange:t,symbol:r,decimals:s}){let{t:o}=i18n.useTranslation(),a=o("trade.preset.tipFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:o("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:s},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":a})]})}function ts({value:e,onChange:t,disableAnimation:r}){let{t:s}=i18n.useTranslation(),o=s("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:s("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":o,disableAnimation:r})})]})}function ns({value:e,onChange:t,symbol:r}){let{t:s}=i18n.useTranslation(),o=s("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:o}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":o})]})}function rs({value:e,onChange:t,options:r,disableAnimation:s}){let{t:o}=i18n.useTranslation(),a=o("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),l=react.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 jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:o("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:s,"aria-label":a,children:r.map(i=>{let u=n[i],m=l[i];return jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsxs("div",{className:"text-xs",children:[jsxRuntime.jsx("div",{className:"font-medium text-foreground",children:m.title}),jsxRuntime.jsx("div",{className:"mt-0.5",children:m.desc})]}),children:jsxRuntime.jsx("span",{className:"flex items-center justify-center",children:jsxRuntime.jsx(u,{width:18,height:18})})})},i)})})})]})}function ss({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:s}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>t(o||null),placeholder:"https://...","aria-label":s})})]})}function Xe({chain:e,direction:t,onDirectionChange:r,amount:s,onAmountChange:o,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:m,tokenSymbol:p,nativeBalance:g,tokenBalance:h,amountConversion:d,preset:c,onPresetChange:x,presetValues:v,onPresetSettingsChange:P,showSettings:f,onPresetClick:I,submitText:U,isDisabled:$,isLoading:H,onSubmit:z,className:E,headerExtra:Z}){let{t:F}=i18n.useTranslation(),Y=react.useMemo(()=>utils$1.getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",E),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:r,classNames:{tabList:"bg-content2",tab:ui.cn("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:F("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:F("common.sell")},"sell")]}),jsxRuntime.jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsxRuntime.jsx(ui.Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsxRuntime.jsx(ui.Tab,{title:F("trade.market")},"market")}),Z]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(xs,{amount:s,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsxRuntime.jsx(hs,{amount:s,onAmountChange:o,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:m,tokenSymbol:p,amountLabel:F("trade.amount")})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:F("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?g?`${g} ${J??""}`:"--":h?`${h} ${p??""}`:"--"})]}),d&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:d})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(ys,{values:v,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${c}`,onSelectionChange:se=>x(Number(se)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>I(0)},0),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>I(1)},1),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>I(2)},2)]})}),f&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(be,{value:v,onChange:P,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:H,onPress:z,children:U})]})}function xs({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:s,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=react.useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:l}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:ui.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"}}),jsxRuntime.jsx(qt,{values:r,onSelect:s,onEdit:o})]})}function hs({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:s,onCustomPercentagesEdit:o,tokenSymbol:a,amountLabel:n}){let l=react.useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),classNames:{inputWrapper:ui.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"}}),jsxRuntime.jsx(qt,{values:r,onSelect:s,onEdit:o,suffix:"%"})]})}function qt({values:e,onSelect:t,onEdit:r,suffix:s}){let[o,a]=react.useState(false),[n,l]=react.useState([]),i=react.useCallback(()=>{l([...e]),a(true);},[e]),u=react.useCallback(()=>{a(false),r(n);},[r,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((m,p)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:o?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:g=>{if(typeof g=="number"){let h=isNaN(g)?null:g;l(d=>{let c=[...d];return c[p]=h,c});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:s?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:s}):null,children:e[p]??""})},p))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:o?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:u,children:jsxRuntime.jsx(ui.CheckIcon,{width:12,height:12})}):jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function ys({values:e,chain:t}){let{t:r}=i18n.useTranslation(),s=react.useMemo(()=>le(t),[t]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:r(`trade.preset.${s.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),s.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[o==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),o==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),o==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:r(`trade.preset.antiMev.${o}`)})})]})}function vs({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,settings:o,onSettingsChange:a,headerExtra:n,className:l}){return jsxRuntime.jsx(He,{chain:e,tokenAddress:t,settings:o,onSettingsChange:a,children:jsxRuntime.jsx(Ps,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:n,className:l})})}function Ps({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:o,className:a}){let n=ze({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s}),l=react.useCallback(d=>n.setAmount(d),[n]),i=react.useCallback(d=>{let c=n.tokenBalance?.amount;if(!c)return;let x=new pe__default.default(c).times(d).div(100).toNumber();n.setAmount(x);},[n]),u=react.useCallback(d=>{n.updateBuySettings({...n.settings.buy,customAmounts:d});},[n]),m=react.useCallback(d=>{n.updateSellSettings({...n.settings.sell,customPercentages:d});},[n]),p=react.useCallback(d=>{let c=n.direction==="buy",x=c?n.buyPreset:n.sellPreset;if(c){let v=n.settings.buy,P=[...v.presets];P[x]=d,n.updateBuySettings({...v,presets:P});}else {let v=n.settings.sell,P=[...v.presets];P[x]=d,n.updateSellSettings({...v,presets:P});}},[n]),g=react.useCallback(d=>{n.direction==="buy"?n.setBuyPreset(d):n.setSellPreset(d);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(Xe,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:m,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:g,presetValues:n.currentPresetValues,onPresetSettingsChange:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:a,headerExtra:o})}function Je(e){let{id:t,chain:r,token:s,storageKeyPrefix:o,onAmountChange:a,onPresetChange:n,onPresetClick:l}=e,[i,u]=jotai.useAtom(j(G(t,r,s.address,o))),m=jotai.useAtomValue(L(D(r,"buy",0,o))),p=jotai.useAtomValue(L(D(r,"buy",1,o))),g=jotai.useAtomValue(L(D(r,"buy",2,o))),h=react.useMemo(()=>[m,p,g],[m,p,g]),d=react.useCallback(x=>{u(v=>({...v,amount:x})),a?.(x);},[u,a]),c=react.useCallback(x=>{u(v=>({...v,preset:x})),n?.(x);},[u,n]);return {token:s,chain:r,amount:i.amount,handleAmountChange:d,preset:i.preset,handlePresetChange:c,onPresetClick:l,presetValues:h}}function et({token:e,chain:t,amount:r,onAmountChange:s,preset:o=0,onPresetChange:a,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:m}){let{t:p}=i18n.useTranslation(),{isMobile:g}=ui.useScreen(),h=react.useRef(null),d=react.useMemo(()=>V(t),[t]),[c,x]=react.useState(null),v=react.useCallback(P=>{a?.(Number(P));},[a]);return jsxRuntime.jsxs("div",{ref:h,className:ui.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",m),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:r,onValueChange:P=>s(isNaN(P)?void 0:P),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsxRuntime.jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsxRuntime.jsx(ui.StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:v,classNames:{base:"flex-none h-full",tabList:ui.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:ui.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)=>jsxRuntime.jsx(ui.Tab,{title:g?jsxRuntime.jsx("span",{onClick:I=>{o===f&&(I.stopPropagation(),x(U=>U===f?null:f));},children:p("trade.preset.short",{n:f+1})}):jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsx(nn,{label:p("trade.preset.short",{n:f+1}),values:l?.[f]??d,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsxRuntime.jsx("span",{onClick:()=>o===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))}),g&&c!==null&&jsxRuntime.jsx(Vs,{label:p("trade.preset.short",{n:c+1}),values:l?.[c]??d,chain:t,onClose:()=>x(null),containerRef:h})]})}function Vs({label:e,values:t,chain:r,onClose:s,containerRef:o}){let a=react.useRef(null);return react.useEffect(()=>{let n=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&s();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[s,o]),jsxRuntime.jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsxRuntime.jsx(nn,{label:e,values:t,chain:r})})}function nn({label:e,values:t,chain:r}){let{t:s}=i18n.useTranslation(),o=react.useMemo(()=>le(r),[r]),a=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxRuntime.jsxs("div",{className:"flex flex-col py-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsxRuntime.jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s("trade.preset.slippage")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:utils$1.formatPercent(n)})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s(`trade.preset.${o.feeType}`)})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.priorityFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:o.feeUnit})]})]}),o.showTipFee&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s("trade.preset.tipFee")})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.tipFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:o.tipFeeUnit})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:12,height:12,className:"flex-none"}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:12,height:12,className:"flex-none"}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s("trade.preset.antiMev")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",a==="off"&&"text-zinc-500",a==="reduced"&&"text-amber-400",a==="secure"&&"text-emerald-400"),children:s(`trade.preset.antiMev.${a}`)})]})]})}function Ks({size:e,radius:t,className:r,...s}){let{token:o,chain:a,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:m,presetValues:p}=Je(s);return jsxRuntime.jsx(et,{token:o,chain:a,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:m,presetValues:p,size:e,radius:t,className:r})}function tt(e){let{chain:t,presetIndex:r=0,defaultDirection:s="buy",storageKeyPrefix:o,onChange:a}=e,[n,l]=react.useState(s),[i,u]=jotai.useAtom(L(D(t,n,r,o))),m=react.useCallback(p=>{u(p),a?.(n,p);},[u,a,n]);return {direction:n,setDirection:l,value:i,handleChange:m}}function rt({disableAnimation:e,className:t,...r}){let{t:s}=i18n.useTranslation(),{direction:o,setDirection:a,value:n,handleChange:l}=tt(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:s("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:s("common.sell")},"sell")]}),jsxRuntime.jsx(be,{value:n,onChange:l,chain:r.chain,disableAnimation:e})]})}var Ys=3;function st(e){let{defaultPresetIndex:t=0,onChange:r}=e,[s,o]=react.useState(t),a=react.useCallback((n,l)=>{r?.(s,n,l);},[r,s]);return {presetCount:Ys,presetIndex:s,setPresetIndex:o,handlePresetChange:a}}function ot({defaultDirection:e,disableAnimation:t,className:r,...s}){let{t:o}=i18n.useTranslation(),{presetCount:a,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=st(s);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",r),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,m)=>jsxRuntime.jsx(ui.Tab,{title:o("trade.preset.label",{n:m+1})},String(m)))}),jsxRuntime.jsx(rt,{chain:s.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:s.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var ga="preset";function xa({id:e=ga}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(ha,{...t})})}function ha({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:r}){let{t:s}=i18n.useTranslation(),{chains:o,defaultChain:a,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[m,p]=react.useState(a??o[0]);react.useEffect(()=>{p(a??o[0]);},[a,o]);let g=react.useCallback((h,d,c)=>{u?.(m,h,d,c);},[u,m]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:r,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:s("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:o,chain:m,onSelectChain:p})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(ot,{chain:m,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:g})})})]})})}function Ee(e,t,r,s,o){let a=V(o),n=new pe__default.default(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new pe__default.default(s.priorityFee??a.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new pe__default.default(s.tipFee??a.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:r,amount:n,slippage:s.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:s.antiMev!=="off"}}function ut(e){let{id:t,chain:r,token:s,output:o,storageKeyPrefix:a,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=jotai.useAtomValue(j(G(t,r,s.address,a))),m=jotai.useAtomValue(L(D(r,"buy",u,a))),p=walletConnector.useConnectedWallet(r),{swap:g,isSwapping:h}=ne({onSubmitted:n,onError:l}),d=!i||!o,c=walletConnector.useAuthCallback(async()=>{if(!i||!p||!o)return;let x=Ee(i,s,o,m,r);try{await g({...x,chain:r,wallet:p});}catch{}},[p,i,o,r,s,m,g]);return react.useMemo(()=>({amount:i,token:s,isDisabled:d,isSwapping:h,handleSwap:c}),[i,s,d,h,c])}function wa({size:e="sm",radius:t,color:r="primary",className:s,...o}){let{amount:a,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:t,color:r,className:s,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${n.symbol}`:n.symbol})}var un=react.createContext(null);function Fa({chain:e,onSwapSubmitted:t,onSwapError:r,children:s}){let o=walletConnector.useConnectedWallet(e),{swap:a}=ne({onSubmitted:t,onError:r}),n=react.useRef(o);n.current=o;let l=react.useRef(a);l.current=a;let i=react.useRef(e);i.current=e;let u=react.useCallback(async p=>{let g=n.current;g&&await l.current({...p,wallet:g,chain:i.current});},[]),m=walletConnector.useAuthCallback(u,[]);return jsxRuntime.jsx(un.Provider,{value:m,children:s})}function pt(){let e=react.useContext(un);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:t,chain:r,token:s,output:o,storageKeyPrefix:a}=e,{amount:n,preset:l}=jotai.useAtomValue(j(G(t,r,s.address,a))),i=jotai.useAtomValue(L(D(r,"buy",l,a))),u=pt(),{t:m}=i18n.useTranslation(),[p,g]=react.useState(false),h=!o,d=react.useRef(s);d.current=s;let c=react.useRef(i);c.current=i;let x=react.useRef(r);x.current=r;let v=react.useCallback(async()=>{if(!o)return;if(!n){ui.toast(m("trade.instantTradeAmountRequired"));return}let P=Ee(n,d.current,o,c.current,x.current);g(true);try{await u(P);}catch{}finally{g(false);}},[n,o,u,m]);return react.useMemo(()=>({amount:n,token:s,isDisabled:h,isSwapping:p,handleSwap:v}),[n,s,h,p,v])}var Ka=react.memo(function({size:t="sm",radius:r,color:s="primary",className:o,...a}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:m}=ct(a),p=n!=null?`${utils$1.formatAmountCompact(n)} ${l.symbol}`:void 0;return jsxRuntime.jsx(ui.Button,{variant:"solid",size:t,radius:r,color:s,className:ui.cn("min-w-0 w-auto flex-none",o),disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),onPress:m,style:{background:"linear-gradient(rgba(199,255,46,0.08), rgba(199,255,46,0.08)), #0a0a0b",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:p})});
|
|
2
|
-
exports.AmountPresetInputUI=
|
|
1
|
+
'use strict';var jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),ce=require('bignumber.js'),uiChainSelect=require('@liberfi.io/ui-chain-select'),uiScaffold=require('@liberfi.io/ui-scaffold');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ce__default=/*#__PURE__*/_interopDefault(ce);var gn="liberfi.",xn={amount:void 0,preset:0};function hn(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function bn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,id:a,chain:o,tokenAddress:n}}function G(e,t,s,r=gn){return `${r}:${e}.${t}.${s}`}var j=jotaiFamily.atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:a}=bn(e);return utils.atomWithStorage(hn(t,s,String(r),a),xn,void 0,{getOnInit:true})});function Za({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return jotai.useAtomValue(j(G(e,t,s,r)))}var ne=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},xt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ht={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},bt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},Sn={SOL:[.01,.1,1,10],ETH:[.01,.02,.5,1],BNB:[.025,.05,.1,.25],USDC:[25,50,100,200],USDT:[25,50,100,200]},Pn=[1,10,25,50];function yt(e){return Sn[e]??Pn}var St=[10,25,50,100];function ue(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let s=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.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 utils$1.isSolanaChain(e)?xt:utils$1.isBinanceChain(e)?bt:ht}var Nn="liberfi.";function Cn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function An(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,chain:a,direction:o,index:Number(n)}}function D(e,t,s,r=Nn){return `${r}:${e}.${t}.${s}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:a}=An(e);return utils.atomWithStorage(Cn(t,String(s),r,a),V(s),void 0,{getOnInit:true})});function uo({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return jotai.useAtomValue(L(D(e,t,s,r)))}var En=150,Mn=12e3,vt=60,Tt=40;function Ue(e,t,s,r){if(!utils$1.isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!s.data||Date.now()-s.dataUpdatedAt>Mn)throw new ne("Latest Solana block data is stale. Please refresh the quote.");let a=s.data.lastValidBlockHeight-En;if(t.lastValidBlockHeight-a<r)throw new ne("Swap route is close to blockhash expiry. Please refresh the quote.")}function Nt(e){let t=(e instanceof Error?e.message:String(e)).toLowerCase();return t.includes("block height exceeded")||t.includes("blockhash not found")||t.includes("blockhashnotfound")}var Wn=6e3,Vn=6e3;function pe(e){return e instanceof Error?e:new Error(String(e))}function Kn(e){let t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return s}function $n(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function se(e){let{client:t}=react$1.useDexClient(),[s,r]=react.useState(false),a=react.useRef(e);a.current=e;let o=react.useMemo(()=>({chain:types.Chain.SOLANA}),[]),n=react$1.useLatestBlockFetcher(o),l=react.useCallback(async i=>{let{wallet:u,chain:d,...m}=i,f=utils$1.isSolanaChain(d);r(true);try{let h=t.swapRoute({chain:d,userAddress:u.address,input:m.input,output:m.output,mode:m.mode??types.SwapMode.EXACT_IN,amount:m.amount,slippage:m.slippage,priorityFee:m.priorityFee,tipFee:m.tipFee,isAntiMev:m.isAntiMev,permit:m.permit,deadline:m.deadline}),c=f?n({staleTime:Wn}).then(p=>({ok:!0,value:p}),p=>({ok:!1,error:pe(p)})):void 0,g;try{g=await h;}catch(p){let v=pe(p);throw a.current?.onError?.(v,"route"),v}if(f&&g.lastValidBlockHeight!=null)try{let p=await c;if(!p.ok)throw new ne("Unable to validate latest Solana block data. Please refresh the quote.");Ue(d,g,p.value,vt);}catch(p){let v=pe(p);throw a.current?.onError?.(v,"expired"),v}let b;try{let p=Kn(g.serializedTx);b=await u.signTransaction(p);}catch(p){let v=pe(p);throw a.current?.onError?.(v,"sign"),v}if(f&&g.lastValidBlockHeight!=null)try{Ue(d,g,await n({staleTime:Vn}),Tt);}catch(p){let v=pe(p);throw a.current?.onError?.(v,"expired"),v}let S;try{let p=$n(b);S=await t.sendTx({chain:d,serializedTx:p});}catch(p){if(f&&Nt(p)){let E=new ne("Swap route expired before transaction submission. Please refresh the quote.");throw a.current?.onError?.(E,"expired"),E}let v=pe(p);throw a.current?.onError?.(v,"send"),v}let w={txHash:S.txHash,extra:S.extra};return a.current?.onSubmitted?.(w),w}finally{r(false);}},[t,n]);return react.useMemo(()=>({swap:l,isSwapping:s}),[l,s])}var jn=12e3;function At(e,t){let s=t?.interval??jn,r=t?.paused??false,a=react.useRef(t);a.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,l=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return react.useEffect(()=>{l.error&&a.current?.onError?.(l.error);},[l.error]),react.useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var Jn=6e4;function It(e){let{client:t}=react$1.useDexClient(),[s,r]=react.useState(()=>new Map),a=react.useRef(e);a.current=e;let o=react.useCallback((u,d)=>{r(m=>{let f=m.get(u);if(!f||f.status===d)return m;let h=new Map(m);return h.set(u,{...f,status:d}),h});},[]),n=react.useCallback((u,d)=>{r(f=>{if(f.has(d))return f;let h=new Map(f);return h.set(d,{chain:u,txHash:d,status:"pending"}),h});let m=a.current?.timeout??Jn;t.checkTxSuccess(u,d,m).then(f=>{if(f)o(d,"confirmed"),a.current?.onConfirmed?.(d);else {let h=new Error("Transaction failed on-chain");o(d,"failed"),a.current?.onFailed?.(d,h);}}).catch(f=>{let h=f instanceof Error?f:new Error(String(f));o(d,"failed"),a.current?.onFailed?.(d,h);});},[t,o]),l=react.useCallback(u=>{r(d=>{if(!d.has(u))return d;let m=new Map(d);return m.delete(u),m});},[]),i=react.useCallback(()=>{r(u=>u.size===0?u:new Map);},[]);return react.useMemo(()=>({track:n,clear:l,clearAll:i,transactions:s}),[n,l,i,s])}var ss=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function rs(e){return ss.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var as=1e4,os=15e3;function is(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let a=r.padStart(t+1,"0"),o=a.slice(0,a.length-t)||"0",l=a.slice(a.length-t).replace(/0+$/,"");return l?`${o}.${l}`:o}function Le(e){let{chain:t}=e,s=walletConnector.useWallets(),r=rs(t),a=react.useMemo(()=>s.find(P=>P.chainNamespace===r&&P.isConnected),[s,r]),o=a?.address??"",[n,l]=react.useState(e.from??""),[i,u]=react.useState(e.to??""),d=react.useRef(e.from),m=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&l(e.from));},[e.from]),react.useEffect(()=>{e.to!==m.current&&(m.current=e.to,e.to&&u(e.to));},[e.to]);let f=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:as}),c=react.useMemo(()=>h.data?.find(P=>P.address===n)??null,[h.data,n]),g=react.useMemo(()=>h.data?.find(P=>P.address===i)??null,[h.data,i]),b=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:f},{enabled:!!o&&f.length>0,refetchInterval:os}),S=react.useMemo(()=>b.data?.find(P=>P.address===n)??null,[b.data,n]),w=react.useMemo(()=>b.data?.find(P=>P.address===i)??null,[b.data,i]),[p,v]=react.useState(void 0),E=react.useMemo(()=>{if(!p||c?.decimals==null)return;let P=p.split("."),B=P[0]??"0",ke=(P[1]??"").slice(0,c.decimals).padEnd(c.decimals,"0");return (B+ke).replace(/^0+/,"")||"0"},[p,c?.decimals]),$=react.useMemo(()=>{if(!p||!c?.marketData?.priceInUsd)return;let P=Number(c.marketData.priceInUsd),B=Number(p)*P;return Number.isFinite(B)?B.toString():void 0},[p,c?.marketData?.priceInUsd]),H=react.useCallback(()=>{if(!S)return;let P=Number(S.amount);if(!Number.isFinite(P)||P<=0)return;let B=P/2,we=c?.decimals??9;v(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:we}));},[S,c?.decimals]),z=react.useCallback(()=>{if(!S)return;let P=Number(S.amount);if(!Number.isFinite(P)||P<=0)return;let B=c?.decimals??9;v(P.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[S,c?.decimals]),M=react.useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:types.SwapMode.EXACT_IN,amount:E}),[t,o,n,i,E]),Z=react.useRef(false),{route:F,isRouting:Y,error:J}=At(M,{paused:Z.current}),Q=react.useMemo(()=>F&&g?is(F.plans,g.decimals):void 0,[F,g]),ae=react.useMemo(()=>{if(!Q||!g?.marketData?.priceInUsd)return;let P=Number(g.marketData.priceInUsd),B=Number(Q)*P;return Number.isFinite(B)?B.toString():void 0},[Q,g?.marketData?.priceInUsd]),{swap:T,isSwapping:U}=se();Z.current=U;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:oe,transactions:ee}=It({onConfirmed:P=>{W.current?.({success:true,txHash:P});},onFailed:P=>{W.current?.({success:false,txHash:P});}}),ie=react.useMemo(()=>{if(ee.size===0)return "idle";let P=Array.from(ee.values());return P[P.length-1].status},[ee]),te=react.useCallback(async()=>{if(!(!a||!F||!n||!i||!E))try{let P=await T({chain:t,wallet:a,input:n,output:i,amount:E,mode:types.SwapMode.EXACT_IN});oe(t,P.txHash);}catch{}},[a,F,t,n,i,E,T,oe]),le=h.isPending||b.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:c,toToken:g,fromBalance:S,toBalance:w,amount:p,setAmount:v,setHalfAmount:H,setMaxAmount:z,amountInDecimals:E,amountInUsd:$,outputAmount:Q,outputAmountInUsd:ae,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:U,txStatus:ie,isLoading:le}),[n,i,c,g,S,w,p,H,z,E,$,Q,ae,F,Y,J,te,U,ie,le])}function We({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:d,routeError:m,onConfirm:f,isSwapping:h}){let{t:c}=i18n.useTranslation(),[g,b]=react.useState(false),S=react.useCallback(()=>b(p=>!p),[]),w=react.useMemo(()=>u?u.plans.map((p,v)=>({key:`plan-${v}`,name:p.name,input:p.input,inputAmount:p.inputAmount,output:p.output,outputAmount:p.outputAmount,feeQuote:p.feeQuote,feeAmount:p.feeAmount})):[],[u]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:c("trade.swap.preview")}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:c("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),a&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(Ss,{}),jsxRuntime.jsxs("span",{children:[_e(a.amount)," ",s?.symbol]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:_e(o)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Rt(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:c("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:Ne(r?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:_e(l)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Rt(i)]})]})]})]}),g&&w.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:c("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:w.map(p=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:c("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:p.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:c("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[Oe(p.inputAmount)," ",Ne(p.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[Oe(p.outputAmount)," ",Ne(p.output)]})]})]}),p.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:c("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[Oe(p.feeAmount)," ",Ne(p.feeQuote)]})]})]},p.key))})]}),w.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:g?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:S,children:c(g?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!m,isLoading:!u&&d||h,onPress:f,children:c("common.confirm")})})]})})}function Ss(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Rt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function _e(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function Oe(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function Ne(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ke({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:m,onToTokenSelect:f,route:h,isRouting:c,routeError:g,onPreview:b,isSwapping:S,className:w}){let{t:p}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",w),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:p("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:a??"",onChange:v=>n(v.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.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:ui.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")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>m(""),children:e?e.symbol:p("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Ot(o)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(_t,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Wt(s.amount)," ",s.symbol]}),l&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:p("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:p("common.max")})]})]}),g&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:g.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:p("trade.swap.to")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:u??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.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:ui.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")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>f(""),children:t?t.symbol:p("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Ot(d)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(_t,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Wt(r.amount)," ",r.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&c,onPress:b,children:p(S?"trade.swap.swapping":c?"trade.swap.findingRoute":"trade.swap.swap")})]})}function _t(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Ot(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Wt(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function Ts({chain:e,from:t,to:s,onComplete:r,className:a}){let o=Le({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=ui.useDisclosure(),d=react.useCallback(async()=>{await o.swap(),u();},[o,u]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ke,{fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,toBalance:o.toBalance,amount:o.amount,amountInUsd:o.amountInUsd,onAmountChange:o.setAmount,onHalfAmount:o.setHalfAmount,onMaxAmount:o.setMaxAmount,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,onFromTokenSelect:o.setFromTokenAddress,onToTokenSelect:o.setToTokenAddress,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onPreview:l,isSwapping:o.isSwapping,className:a}),jsxRuntime.jsx(We,{isOpen:n,onOpenChange:i,fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,inputAmount:o.amount,inputAmountInUsd:o.amountInUsd,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onConfirm:d,isSwapping:o.isSwapping})]})}function $t(e){let t=V(e),s=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...St],presets:[{...t},{...t},{...t}]}}}var Fs=$t("900900900");function Ht(e){return `liberfi.instant-trade.settings.${e}`}function Es(e,t){try{let s=localStorage.getItem(Ht(String(e)));if(s)return JSON.parse(s)}catch{}return t}function Ms(e,t){try{localStorage.setItem(Ht(e),JSON.stringify(t));}catch{}}var Qt=react.createContext(null);function He(){let e=react.useContext(Qt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Qe({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:a}){let o=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=s!==void 0,l=react.useMemo(()=>$t(e),[e]),[i,u]=react.useState(()=>n?l:Es(e,l)),d=n?s:i,m=react.useCallback(M=>{n?r?.(M):(u(M),Ms(String(e),M));},[n,r,e]),f=react.useCallback(M=>m({...d,buy:M}),[d,m]),h=react.useCallback(M=>m({...d,sell:M}),[d,m]),[c,g]=react.useState("buy"),[b,S]=react.useState(),[w,p]=react.useState(0),[v,E]=react.useState(0),$=react.useMemo(()=>V(e),[e]),H=react.useMemo(()=>{let M=c==="buy"?w:v;return (c==="buy"?d.buy.presets:d.sell.presets)[M]??$},[c,w,v,d,$]),z=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:c,setDirection:g,amount:b,setAmount:S,buyPreset:w,setBuyPreset:p,sellPreset:v,setSellPreset:E,settings:d,updateBuySettings:f,updateSellSettings:h,currentPresetValues:H}),[e,t,o,c,b,w,v,d,f,h,H]);return jsxRuntime.jsx(Qt.Provider,{value:z,children:a})}var $s=15e3,Hs=1e4;function Ge(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:a}=e,{t:o}=i18n.useTranslation(),n=He(),l=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),u=walletConnector.useWallets(),d=utils$1.chainToNamespace(t),m=react.useMemo(()=>u.find(T=>T.chainNamespace===d&&T.isConnected),[u,d]),f=m?.address??"",h=react.useMemo(()=>{let T=[s];return l&&T.push(l.address),i&&T.push(i.address),T.filter(Boolean)},[s,l,i]),c=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Hs}),g=react.useMemo(()=>c.data?.find(T=>T.address===s)??null,[c.data,s]),b=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:f,tokenAddresses:h},{enabled:!!f&&h.length>0,refetchInterval:$s}),S=l?.address??i?.address??"",w=react.useMemo(()=>b.data?.find(T=>T.address===S)??null,[b.data,S]),p=react.useMemo(()=>b.data?.find(T=>T.address===s)??null,[b.data,s]),[v,E]=react.useState(false),$=react.useRef(null),H=react.useCallback(T=>{let U=$.current;$.current=T,E(W=>U===null||U!==T?true:!W);},[]),z=react.useRef(r);z.current=r;let M=react.useRef(a);M.current=a;let{swap:Z,isSwapping:F}=se({onSubmitted:T=>z.current?.(T),onError:(T,U)=>M.current?.(T,U)}),Y=react.useCallback(async()=>{if(!n.amount||!m||!s)return;let T=l?.decimals??9,U=i?.address??l?.address??"",W=n.direction==="buy",oe=W?U:s,ee=W?s:U,ie=W?T:g?.decimals??9,te=new ce__default.default(n.amount).shiftedBy(ie).decimalPlaces(0).toString(),le=n.currentPresetValues,P=V(t),B=le.slippage??P.slippage??1,we=le.antiMev!=="off",ke=utils$1.isSolanaChain(t)?{priorityFee:new ce__default.default(le.priorityFee??P.priorityFee??0).shiftedBy(T).decimalPlaces(0).toString(),tipFee:new ce__default.default(le.tipFee??P.tipFee??0).shiftedBy(T).decimalPlaces(0).toString(),isAntiMev:we}:{};try{await Z({chain:t,wallet:m,input:oe,output:ee,amount:te,slippage:B,...ke}),n.setAmount(void 0);}catch{}},[n,m,s,l,i,g,t,Z]),J=react.useMemo(()=>{let T=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return T;let U=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let oe=w?.amount;if(oe&&new ce__default.default(oe).lt(n.amount))return `${T}${U}`;let ee=l?.symbol??"",ie=c.data?.find(te=>te.address===S)?.marketData?.priceInUsd;if(ie){let te=utils$1.formatAmountUSD(new ce__default.default(n.amount).times(Number(ie)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=p?.amount;return W&&new ce__default.default(W).lt(n.amount)?`${T}${U}`:T},[o,n.direction,n.amount,w,p,l,c.data,S]),Q=!n.amount||!m||!s,ae=c.isPending||b.isPending;return react.useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:g,nativeBalance:w,tokenBalance:p,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:v,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:ae}),[t,s,l,g,w,p,n,v,H,Y,F,J,Q,ae])}function Se({value:e,onChange:t,chain:s,disableAnimation:r,className:a}){let o=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>ue(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",a),children:[jsxRuntime.jsx(er,{value:e.slippage,onChange:i=>o({slippage:i})}),jsxRuntime.jsx(tr,{value:e[l],onChange:i=>o({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(nr,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(sr,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:r}),e.autoFee&&jsxRuntime.jsx(rr,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(ar,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsxRuntime.jsx(or,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function er({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),r=s("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:r}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function tr({value:e,onChange:t,feeType:s,symbol:r,decimals:a}){let{t:o}=i18n.useTranslation(),n=o(`trade.preset.${s}`),l=o(`trade.preset.${s}.tooltip`);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsxRuntime.jsx(ui.StyledTooltip,{content:l,children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function nr({value:e,onChange:t,symbol:s,decimals:r}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.tipFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":o})]})}function sr({value:e,onChange:t,disableAnimation:s}){let{t:r}=i18n.useTranslation(),a=r("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:r("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":a,disableAnimation:s})})]})}function rr({value:e,onChange:t,symbol:s}){let{t:r}=i18n.useTranslation(),a=r("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:a}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function ar({value:e,onChange:t,options:s,disableAnimation:r}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),l=react.useMemo(()=>({off:{title:a("trade.preset.antiMev.off"),desc:a("trade.preset.antiMev.off.desc")},reduced:{title:a("trade.preset.antiMev.reduced"),desc:a("trade.preset.antiMev.reduced.desc")},secure:{title:a("trade.preset.antiMev.secure"),desc:a("trade.preset.antiMev.secure.desc")}}),[a]);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:r,"aria-label":o,children:s.map(i=>{let u=n[i],d=l[i];return jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsxs("div",{className:"text-xs",children:[jsxRuntime.jsx("div",{className:"font-medium text-foreground",children:d.title}),jsxRuntime.jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsxRuntime.jsx("span",{className:"flex items-center justify-center",children:jsxRuntime.jsx(u,{width:18,height:18})})})},i)})})})]})}function or({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),r=s("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:r}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:a=>t(a||null),placeholder:"https://...","aria-label":r})})]})}function Ze({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:m,nativeBalance:f,tokenBalance:h,amountConversion:c,preset:g,onPresetChange:b,presetValues:S,onPresetSettingsChange:w,showSettings:p,onPresetClick:v,submitText:E,isDisabled:$,isLoading:H,onSubmit:z,className:M,headerExtra:Z}){let{t:F}=i18n.useTranslation(),Y=react.useMemo(()=>utils$1.getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",M),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:ui.cn("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:F("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:F("common.sell")},"sell")]}),jsxRuntime.jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsxRuntime.jsx(ui.Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsxRuntime.jsx(ui.Tab,{title:F("trade.market")},"market")}),Z]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(br,{amount:r,onAmountChange:a,customAmounts:o,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsxRuntime.jsx(yr,{amount:r,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:m,amountLabel:F("trade.amount")})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:F("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?f?`${f} ${J??""}`:"--":h?`${h} ${m??""}`:"--"})]}),c&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:c})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(Sr,{values:S,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${g}`,onSelectionChange:ae=>b(Number(ae)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>v(0)},0),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>v(1)},1),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>v(2)},2)]})}),p&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(Se,{value:S,onChange:w,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:H,onPress:z,children:E})]})}function br({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:a,nativeSymbol:o,nativeDecimals:n,amountLabel:l}){let i=react.useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:l}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:ui.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"}}),jsxRuntime.jsx(Zt,{values:s,onSelect:r,onEdit:a})]})}function yr({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:a,tokenSymbol:o,amountLabel:n}){let l=react.useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),classNames:{inputWrapper:ui.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"}}),jsxRuntime.jsx(Zt,{values:s,onSelect:r,onEdit:a,suffix:"%"})]})}function Zt({values:e,onSelect:t,onEdit:s,suffix:r}){let[a,o]=react.useState(false),[n,l]=react.useState([]),i=react.useCallback(()=>{l([...e]),o(true);},[e]),u=react.useCallback(()=>{o(false),s(n);},[s,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,m)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",m===0&&"rounded-bl-lg"),children:a?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[m]===null||n[m]===void 0?void 0:n[m],onChange:f=>{if(typeof f=="number"){let h=isNaN(f)?null:f;l(c=>{let g=[...c];return g[m]=h,g});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.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"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[m]!=null&&t(e[m]),endContent:r?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[m]??""})},m))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:u,children:jsxRuntime.jsx(ui.CheckIcon,{width:12,height:12})}):jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function Sr({values:e,chain:t}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>ue(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:s(`trade.preset.${r.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),r.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${a}`)})})]})}function vr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:a,onSettingsChange:o,headerExtra:n,className:l}){return jsxRuntime.jsx(Qe,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsxRuntime.jsx(Tr,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:l})})}function Tr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:a,className:o}){let n=Ge({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),l=react.useCallback(c=>n.setAmount(c),[n]),i=react.useCallback(c=>{let g=n.tokenBalance?.amount;if(!g)return;let b=new ce__default.default(g).times(c).div(100).toNumber();n.setAmount(b);},[n]),u=react.useCallback(c=>{n.updateBuySettings({...n.settings.buy,customAmounts:c});},[n]),d=react.useCallback(c=>{n.updateSellSettings({...n.settings.sell,customPercentages:c});},[n]),m=react.useCallback(c=>{let g=n.direction==="buy",b=g?n.buyPreset:n.sellPreset;if(g){let S=n.settings.buy,w=[...S.presets];w[b]=c,n.updateBuySettings({...S,presets:w});}else {let S=n.settings.sell,w=[...S.presets];w[b]=c,n.updateSellSettings({...S,presets:w});}},[n]),f=react.useCallback(c=>{n.direction==="buy"?n.setBuyPreset(c):n.setSellPreset(c);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(Ze,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:m,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function et(e){let{id:t,chain:s,token:r,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:l}=e,[i,u]=jotai.useAtom(j(G(t,s,r.address,a))),d=jotai.useAtomValue(L(D(s,"buy",0,a))),m=jotai.useAtomValue(L(D(s,"buy",1,a))),f=jotai.useAtomValue(L(D(s,"buy",2,a))),h=react.useMemo(()=>[d,m,f],[d,m,f]),c=react.useCallback(b=>{u(S=>({...S,amount:b})),o?.(b);},[u,o]),g=react.useCallback(b=>{u(S=>({...S,preset:b})),n?.(b);},[u,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:c,preset:i.preset,handlePresetChange:g,onPresetClick:l,presetValues:h}}function tt({token:e,chain:t,amount:s,onAmountChange:r,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:d}){let{t:m}=i18n.useTranslation(),{isMobile:f}=ui.useScreen(),h=react.useRef(null),c=react.useMemo(()=>V(t),[t]),[g,b]=react.useState(null),S=react.useCallback(w=>{o?.(Number(w));},[o]);return jsxRuntime.jsxs("div",{ref:h,className:ui.cn("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",d),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:w=>r(isNaN(w)?void 0:w),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":m("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsxRuntime.jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsxRuntime.jsx(ui.StyledLightTabs,{color:"primary",size:u,selectedKey:String(a),onSelectionChange:S,classNames:{base:"flex-none h-full",tabList:ui.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:ui.cn("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((w,p)=>jsxRuntime.jsx(ui.Tab,{title:f?jsxRuntime.jsx("span",{onClick:v=>{a===p&&(v.stopPropagation(),b(E=>E===p?null:p));},children:m("trade.preset.short",{n:p+1})}):jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsx(rn,{label:m("trade.preset.short",{n:p+1}),values:l?.[p]??c,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsxRuntime.jsx("span",{onClick:()=>a===p&&n?.(p),children:m("trade.preset.short",{n:p+1})})})},String(p)))}),f&&g!==null&&jsxRuntime.jsx($r,{label:m("trade.preset.short",{n:g+1}),values:l?.[g]??c,chain:t,onClose:()=>b(null),containerRef:h})]})}function $r({label:e,values:t,chain:s,onClose:r,containerRef:a}){let o=react.useRef(null);return react.useEffect(()=>{let n=l=>{let i=l.target;o.current&&!o.current.contains(i)&&a.current&&!a.current.contains(i)&&r();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[r,a]),jsxRuntime.jsx("div",{ref:o,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsxRuntime.jsx(rn,{label:e,values:t,chain:s})})}function rn({label:e,values:t,chain:s}){let{t:r}=i18n.useTranslation(),a=react.useMemo(()=>ue(s),[s]),o=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxRuntime.jsxs("div",{className:"flex flex-col py-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsxRuntime.jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r("trade.preset.slippage")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:utils$1.formatPercent(n)})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r(`trade.preset.${a.feeType}`)})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.priorityFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:a.feeUnit})]})]}),a.showTipFee&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r("trade.preset.tipFee")})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.tipFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:a.tipFeeUnit})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[o==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:12,height:12,className:"flex-none"}),o==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:12,height:12,className:"flex-none"}),o==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r("trade.preset.antiMev")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",o==="off"&&"text-zinc-500",o==="reduced"&&"text-amber-400",o==="secure"&&"text-emerald-400"),children:r(`trade.preset.antiMev.${o}`)})]})]})}function Hr({size:e,radius:t,className:s,...r}){let{token:a,chain:o,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:d,presetValues:m}=et(r);return jsxRuntime.jsx(tt,{token:a,chain:o,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:d,presetValues:m,size:e,radius:t,className:s})}function nt(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:a,onChange:o}=e,[n,l]=react.useState(r),[i,u]=jotai.useAtom(L(D(t,n,s,a))),d=react.useCallback(m=>{u(m),o?.(n,m);},[u,o,n]);return {direction:n,setDirection:l,value:i,handleChange:d}}function rt({disableAnimation:e,className:t,...s}){let{t:r}=i18n.useTranslation(),{direction:a,setDirection:o,value:n,handleChange:l}=nt(s);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:a,onSelectionChange:i=>o(i),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:r("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:r("common.sell")},"sell")]}),jsxRuntime.jsx(Se,{value:n,onChange:l,chain:s.chain,disableAnimation:e})]})}var ea=3;function at(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,a]=react.useState(t),o=react.useCallback((n,l)=>{s?.(r,n,l);},[s,r]);return {presetCount:ea,presetIndex:r,setPresetIndex:a,handlePresetChange:o}}function it({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:a}=i18n.useTranslation(),{presetCount:o,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=at(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",s),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":a("trade.preset.presets"),children:Array.from({length:o},(u,d)=>jsxRuntime.jsx(ui.Tab,{title:a("trade.preset.label",{n:d+1})},String(d)))}),jsxRuntime.jsx(rt,{chain:r.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var ha="preset";function ba({id:e=ha}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(ya,{...t})})}function ya({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=i18n.useTranslation(),{chains:a,defaultChain:o,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[d,m]=react.useState(o??a[0]);react.useEffect(()=>{m(o??a[0]);},[o,a]);let f=react.useCallback((h,c,g)=>{u?.(d,h,c,g);},[u,d]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:r("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:a,chain:d,onSelectChain:m})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(it,{chain:d,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:f})})})]})})}function Me(e,t,s,r,a){let o=V(a),n=new ce__default.default(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new ce__default.default(r.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new ce__default.default(r.tipFee??o.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??o.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function mt(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=jotai.useAtomValue(j(G(t,s,r.address,o))),d=jotai.useAtomValue(L(D(s,"buy",u,o))),m=walletConnector.useConnectedWallet(s),{swap:f,isSwapping:h}=se({onSubmitted:n,onError:l}),c=!i||!a,g=walletConnector.useAuthCallback(async()=>{if(!i||!m||!a)return;let b=Me(i,r,a,d,s);try{await f({...b,chain:s,wallet:m});}catch{}},[m,i,a,s,r,d,f]);return react.useMemo(()=>({amount:i,token:r,isDisabled:c,isSwapping:h,handleSwap:g}),[i,r,c,h,g])}function Na({size:e="sm",radius:t,color:s="primary",className:r,...a}){let{amount:o,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=mt(a);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:t,color:s,className:r,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:o!=null?`${o} ${n.symbol}`:n.symbol})}var dn=react.createContext(null);function Ma({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let a=walletConnector.useConnectedWallet(e),{swap:o}=se({onSubmitted:t,onError:s}),n=react.useRef(a);n.current=a;let l=react.useRef(o);l.current=o;let i=react.useRef(e);i.current=e;let u=react.useCallback(async m=>{let f=n.current;f&&await l.current({...m,wallet:f,chain:i.current});},[]),d=walletConnector.useAuthCallback(u,[]);return jsxRuntime.jsx(dn.Provider,{value:d,children:r})}function pt(){let e=react.useContext(dn);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ft(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o}=e,{amount:n,preset:l}=jotai.useAtomValue(j(G(t,s,r.address,o))),i=jotai.useAtomValue(L(D(s,"buy",l,o))),u=pt(),{t:d}=i18n.useTranslation(),[m,f]=react.useState(false),h=!a,c=react.useRef(r);c.current=r;let g=react.useRef(i);g.current=i;let b=react.useRef(s);b.current=s;let S=react.useCallback(async()=>{if(!a)return;if(!n){ui.toast(d("trade.instantTradeAmountRequired"));return}let w=Me(n,c.current,a,g.current,b.current);f(true);try{await u(w);}catch{}finally{f(false);}},[n,a,u,d]);return react.useMemo(()=>({amount:n,token:r,isDisabled:h,isSwapping:m,handleSwap:S}),[n,r,h,m,S])}var Ha=react.memo(function({size:t="sm",radius:s,color:r="primary",className:a,...o}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:d}=ft(o),m=n!=null?`${utils$1.formatAmountCompact(n)} ${l.symbol}`:void 0;return jsxRuntime.jsx(ui.Button,{variant:"solid",size:t,radius:s,color:r,className:ui.cn("min-w-0 w-auto flex-none",a),disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),onPress:d,style:{background:"linear-gradient(rgba(199,255,46,0.08), rgba(199,255,46,0.08)), #0a0a0b",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:m})});
|
|
2
|
+
exports.AmountPresetInputUI=tt;exports.AmountPresetInputWidget=Hr;exports.DEFAULT_BSC_TRADE_PRESET=bt;exports.DEFAULT_EVM_TRADE_PRESET=ht;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Fs;exports.DEFAULT_SELL_PERCENTAGES=St;exports.DEFAULT_SOL_TRADE_PRESET=xt;exports.InstantTradeButtonWidget=Na;exports.InstantTradeListButtonWidget=Ha;exports.InstantTradeProvider=Qe;exports.InstantTradeSwapProvider=Ma;exports.InstantTradeUI=Ze;exports.InstantTradeWidget=vr;exports.MultiPresetFormWidget=it;exports.PresetFormModal=ba;exports.PresetFormUI=Se;exports.PresetFormWidget=rt;exports.SwapPreviewModal=We;exports.SwapRouteExpiredError=ne;exports.SwapUI=Ke;exports.SwapWidget=Ts;exports.getChainPresetFeatures=ue;exports.getDefaultBuyAmounts=yt;exports.getDefaultPresetForChain=V;exports.instantTradeAmountAtomFamily=j;exports.instantTradeAmountKey=G;exports.presetAtomFamily=L;exports.presetKey=D;exports.useAmountPresetInputScript=et;exports.useInstantTrade=He;exports.useInstantTradeAmount=Za;exports.useInstantTradeButtonScript=mt;exports.useInstantTradeListButtonScript=ft;exports.useInstantTradeScript=Ge;exports.useInstantTradeSwap=pt;exports.useMultiPresetFormScript=at;exports.usePresetFormScript=nt;exports.usePresetValues=uo;exports.useSwap=se;exports.useSwapRoutePolling=At;exports.useSwapScript=Le;exports.useTxConfirmation=It;//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|