@liberfi.io/ui-trade 3.0.75 → 3.0.76

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 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 fn="liberfi.",gn={amount:void 0,preset:0};function xn(e,n,s,r){return `${e}instant-trade.${n}.${s}.${r}`}function hn(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),r=e.slice(n+1),[o,a,t]=r.split(".");return {prefix:s,id:o,chain:a,tokenAddress:t}}function j(e,n,s,r=fn){return `${r}:${e}.${n}.${s}`}var G=jotaiFamily.atomFamily(e=>{let{prefix:n,id:s,chain:r,tokenAddress:o}=hn(e);return utils.atomWithStorage(xn(n,s,String(r),o),gn,void 0,{getOnInit:true})});function qa({id:e,chain:n,tokenAddress:s,storageKeyPrefix:r}){return jotai.useAtomValue(G(j(e,n,s,r)))}var de=class extends Error{constructor(n="Swap route expired. Please refresh the quote."){super(n),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},bn={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]},Sn=[1,10,25,50];function yt(e){return bn[e]??Sn}var bt=[10,25,50,100];function le(e){let n=utils$1.getNativeToken(e);if(!n)throw new Error(`No native token defined for chain "${e}"`);let s=n.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 _(e){return utils$1.isSolanaChain(e)?gt:utils$1.isBinanceChain(e)?ht:xt}var Tn="liberfi.";function Cn(e,n,s,r){return `${e}preset.${n}.${s}.${r}`}function Nn(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),r=e.slice(n+1),[o,a,t]=r.split(".");return {prefix:s,chain:o,direction:a,index:Number(t)}}function D(e,n,s,r=Tn){return `${r}:${e}.${n}.${s}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:n,chain:s,direction:r,index:o}=Nn(e);return utils.atomWithStorage(Cn(n,String(s),r,o),_(s),void 0,{getOnInit:true})});function io({chain:e,direction:n,presetIndex:s=0,storageKeyPrefix:r}){return jotai.useAtomValue(L(D(e,n,s,r)))}function wt(e){return e instanceof Error?e:new Error(String(e))}function Ln(e){return {chain:e.chain,userAddress:e.wallet?.address??"",input:e.input,output:e.output,amount:e.amount,mode:e.mode??types.SwapMode.EXACT_IN,slippage:e.slippage,priorityFee:e.priorityFee,tipFee:e.tipFee,isAntiMev:e.isAntiMev,permit:e.permit,deadline:e.deadline}}function Wn(e){if(e==="route"||e==="sign"||e==="expired"||e==="send")return e;if(e==="confirm")return "send"}function On(e,n,s){let r=Wn(n);if(s==="stale"||r==="expired"||e instanceof react$1.TradeRouteExpiredError||e instanceof de){let a=wt(e).message;return {error:e instanceof de?e:new de(a),phase:"expired"}}let o=r==="sign"||r==="send"||r==="route"?r:"route";return {error:wt(e),phase:o}}function ne(e){let{client:n}=react$1.useDexClient(),[s,r]=react.useState(false),o=react.useRef(e);o.current=e;let a=react.useMemo(()=>({chain:types.Chain.SOLANA}),[]),t=react$1.useLatestBlockFetcher(a),l=react.useRef(n);l.current=n;let i=react.useRef(t);i.current=t;let u=react.useRef(null);u.current===null&&(u.current=new react$1.TradeExecutionRuntime({adapter:react$1.createClientTradeExecutionAdapter({swapRoute:m=>l.current.swapRoute(m),sendTx:m=>l.current.sendTx(m),getLatestBlock:async()=>{let m=await i.current({staleTime:react$1.PRE_SIGN_STALE_MS});if(!m.data)throw new react$1.TradeRouteExpiredError("Latest Solana block data is stale. Please refresh the quote.");return {blockhash:m.data.blockhash,lastValidBlockHeight:m.data.lastValidBlockHeight,dataUpdatedAt:m.dataUpdatedAt}},checkTxSuccess:(m,c,g)=>l.current.checkTxSuccess(m,c,g)})}));let d=react.useCallback(async m=>{let c=u.current;r(true);try{let g=await c.execute(Ln(m),{sign:typeof m.wallet?.signTransaction=="function"?x=>m.wallet.signTransaction(x):void 0}),p={txHash:g.txHash,extra:g.extra};return o.current?.onSubmitted?.(p),p}catch(g){let p=c.getSnapshot(),x=On(g,p.phase,p.state);throw o.current?.onError?.(x.error,x.phase),x.error}finally{r(false);}},[]);return react.useMemo(()=>({swap:d,isSwapping:s}),[d,s])}var Qn=12e3;function Ct(e,n){let s=n?.interval??Qn,r=n?.paused??false,o=react.useRef(n);o.current=n;let t=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,l=react$1.useSwapRouteQuery(e,{enabled:t,refetchInterval:t?s: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:n}=react$1.useDexClient(),[s,r]=react.useState(()=>new Map),o=react.useRef(e);o.current=e;let a=react.useCallback((u,d)=>{r(m=>{let c=m.get(u);if(!c||c.status===d)return m;let g=new Map(m);return g.set(u,{...c,status:d}),g});},[]),t=react.useCallback((u,d)=>{r(c=>{if(c.has(d))return c;let g=new Map(c);return g.set(d,{chain:u,txHash:d,status:"pending"}),g});let m=o.current?.timeout??qn;n.checkTxSuccess(u,d,m).then(c=>{if(c)a(d,"confirmed"),o.current?.onConfirmed?.(d);else {let g=new Error("Transaction failed on-chain");a(d,"failed"),o.current?.onFailed?.(d,g);}}).catch(c=>{let g=c instanceof Error?c:new Error(String(c));a(d,"failed"),o.current?.onFailed?.(d,g);});},[n,a]),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:t,clear:l,clearAll:i,transactions:s}),[t,l,i,s])}var Yn=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function es(e){return Yn.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var ts=1e4,ns=15e3;function ss(e,n){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let o=r.padStart(n+1,"0"),a=o.slice(0,o.length-n)||"0",l=o.slice(o.length-n).replace(/0+$/,"");return l?`${a}.${l}`:a}function De(e){let{chain:n}=e,s=walletConnector.useWallets(),r=es(n),o=react.useMemo(()=>s.find(S=>S.chainNamespace===r&&S.isConnected),[s,r]),a=o?.address??"",[t,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 c=react.useMemo(()=>[t,i].filter(Boolean),[t,i]),g=react$1.useTokensQuery({chain:n,addresses:c},{enabled:c.length>0,refetchInterval:ts}),p=react.useMemo(()=>g.data?.find(S=>S.address===t)??null,[g.data,t]),x=react.useMemo(()=>g.data?.find(S=>S.address===i)??null,[g.data,i]),b=react$1.useWalletPortfoliosByTokensQuery({chain:n,address:a,tokenAddresses:c},{enabled:!!a&&c.length>0,refetchInterval:ns}),v=react.useMemo(()=>b.data?.find(S=>S.address===t)??null,[b.data,t]),P=react.useMemo(()=>b.data?.find(S=>S.address===i)??null,[b.data,i]),[f,I]=react.useState(void 0),U=react.useMemo(()=>{if(!f||p?.decimals==null)return;let S=f.split("."),B=S[0]??"0",Ue=(S[1]??"").slice(0,p.decimals).padEnd(p.decimals,"0");return (B+Ue).replace(/^0+/,"")||"0"},[f,p?.decimals]),K=react.useMemo(()=>{if(!f||!p?.marketData?.priceInUsd)return;let S=Number(p.marketData.priceInUsd),B=Number(f)*S;return Number.isFinite(B)?B.toString():void 0},[f,p?.marketData?.priceInUsd]),$=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let B=S/2,ve=p?.decimals??9;I(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[v,p?.decimals]),H=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let B=p?.decimals??9;I(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[v,p?.decimals]),E=react.useMemo(()=>({chain:n,userAddress:a||void 0,input:t||void 0,output:i||void 0,mode:types.SwapMode.EXACT_IN,amount:U}),[n,a,t,i,U]),Z=react.useRef(false),{route:F,isRouting:J,error:Y}=Ct(E,{paused:Z.current}),Q=react.useMemo(()=>F&&x?ss(F.plans,x.decimals):void 0,[F,x]),re=react.useMemo(()=>{if(!Q||!x?.marketData?.priceInUsd)return;let S=Number(x.marketData.priceInUsd),B=Number(Q)*S;return Number.isFinite(B)?B.toString():void 0},[Q,x?.marketData?.priceInUsd]),{swap:w,isSwapping:R}=ne();Z.current=R;let V=react.useRef(e.onComplete);V.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:S=>{V.current?.({success:true,txHash:S});},onFailed:S=>{V.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||!t||!i||!U))try{let S=await w({chain:n,wallet:o,input:t,output:i,amount:U,mode:types.SwapMode.EXACT_IN});ae(n,S.txHash);}catch{}},[o,F,n,t,i,U,w,ae]),ie=g.isPending||b.isPending;return react.useMemo(()=>({fromTokenAddress:t,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:p,toToken:x,fromBalance:v,toBalance:P,amount:f,setAmount:I,setHalfAmount:$,setMaxAmount:H,amountInDecimals:U,amountInUsd:K,outputAmount:Q,outputAmountInUsd:re,route:F,isRouting:J,routeError:Y,swap:te,isSwapping:R,txStatus:oe,isLoading:ie}),[t,i,p,x,v,P,f,$,H,U,K,Q,re,F,J,Y,te,R,oe,ie])}function Oe({isOpen:e,onOpenChange:n,fromToken:s,toToken:r,fromBalance:o,inputAmount:a,inputAmountInUsd:t,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:d,routeError:m,onConfirm:c,isSwapping:g}){let{t:p}=i18n.useTranslation(),[x,b]=react.useState(false),v=react.useCallback(()=>b(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:n,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:p("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:p("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"}),o&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(hs,{}),jsxRuntime.jsxs("span",{children:[Le(o.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:Le(a)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ut(t)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:p("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:Ce(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:Le(l)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ut(i)]})]})]})]}),x&&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:p("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:p("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:p("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[We(f.inputAmount)," ",Ce(f.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[We(f.outputAmount)," ",Ce(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:p("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[We(f.feeAmount)," ",Ce(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:x?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:v,children:p(x?"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||g,onPress:c,children:p("common.confirm")})})]})})}function hs(){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 Ut(e){let n=utils$1.formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Le(e){return utils$1.formatAmount(e??0)}function We(e){return utils$1.formatAmount(e??0)}function Ce(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function _e({fromToken:e,toToken:n,fromBalance:s,toBalance:r,amount:o,amountInUsd:a,onAmountChange:t,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:m,onToTokenSelect:c,route:g,isRouting:p,routeError:x,onPreview:b,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=>t(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:()=>m(""),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 $",Wt(a)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Lt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Ot(s.amount)," ",s.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")})]})]}),x&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:x.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",n?"text-foreground":"text-neutral"),disableRipple:true,startContent:n?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:n.image,name:n.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:n?n.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 $",Wt(d)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Lt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Ot(r.amount)," ",r.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!g,isLoading:!g&&p,onPress:b,children:f(v?"trade.swap.swapping":p?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Lt(){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 Wt(e){let n=utils$1.formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Ot(e){return utils$1.formatAmount(e??0)}function ws({chain:e,from:n,to:s,onComplete:r,className:o}){let a=De({chain:e,from:n,to:s,onComplete:r}),{isOpen:t,onOpen:l,onOpenChange:i,onClose:u}=ui.useDisclosure(),d=react.useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(_e,{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:t,onOpenChange:i,fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,inputAmount:a.amount,inputAmountInUsd:a.amountInUsd,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onConfirm:d,isSwapping:a.isSwapping})]})}function Kt(e){let n=_(e),s=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(s),presets:[{...n},{...n},{...n}]},sell:{customPercentages:[...bt],presets:[{...n},{...n},{...n}]}}}var Is=Kt("900900900");function $t(e){return `liberfi.instant-trade.settings.${e}`}function Fs(e,n){try{let s=localStorage.getItem($t(String(e)));if(s)return JSON.parse(s)}catch{}return n}function Es(e,n){try{localStorage.setItem($t(e),JSON.stringify(n));}catch{}}var Qt=react.createContext(null);function $e(){let e=react.useContext(Qt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Qe({chain:e,tokenAddress:n,settings:s,onSettingsChange:r,children:o}){let a=react.useMemo(()=>utils$1.getNativeToken(e),[e]),t=s!==void 0,l=react.useMemo(()=>Kt(e),[e]),[i,u]=react.useState(()=>t?l:Fs(e,l)),d=t?s:i,m=react.useCallback(E=>{t?r?.(E):(u(E),Es(String(e),E));},[t,r,e]),c=react.useCallback(E=>m({...d,buy:E}),[d,m]),g=react.useCallback(E=>m({...d,sell:E}),[d,m]),[p,x]=react.useState("buy"),[b,v]=react.useState(),[P,f]=react.useState(0),[I,U]=react.useState(0),K=react.useMemo(()=>_(e),[e]),$=react.useMemo(()=>{let E=p==="buy"?P:I;return (p==="buy"?d.buy.presets:d.sell.presets)[E]??K},[p,P,I,d,K]),H=react.useMemo(()=>({chain:e,tokenAddress:n,nativeToken:a,direction:p,setDirection:x,amount:b,setAmount:v,buyPreset:P,setBuyPreset:f,sellPreset:I,setSellPreset:U,settings:d,updateBuySettings:c,updateSellSettings:g,currentPresetValues:$}),[e,n,a,p,b,P,I,d,c,g,$]);return jsxRuntime.jsx(Qt.Provider,{value:H,children:o})}var Ks=15e3,$s=1e4;function He(e){let{chain:n,tokenAddress:s,onSwapSubmitted:r,onSwapError:o}=e,{t:a}=i18n.useTranslation(),t=$e(),l=react.useMemo(()=>utils$1.getNativeToken(n),[n]),i=react.useMemo(()=>utils$1.getWrappedToken(n),[n]),u=walletConnector.useWallets(),d=utils$1.chainToNamespace(n),m=react.useMemo(()=>u.find(w=>w.chainNamespace===d&&w.isConnected),[u,d]),c=m?.address??"",g=react.useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),p=react$1.useTokensQuery({chain:n,addresses:g},{enabled:g.length>0,refetchInterval:$s}),x=react.useMemo(()=>p.data?.find(w=>w.address===s)??null,[p.data,s]),b=react$1.useWalletPortfoliosByTokensQuery({chain:n,address:c,tokenAddresses:g},{enabled:!!c&&g.length>0,refetchInterval:Ks}),v=l?.address??i?.address??"",P=react.useMemo(()=>b.data?.find(w=>w.address===v)??null,[b.data,v]),f=react.useMemo(()=>b.data?.find(w=>w.address===s)??null,[b.data,s]),[I,U]=react.useState(false),K=react.useRef(null),$=react.useCallback(w=>{let R=K.current;K.current=w,U(V=>R===null||R!==w?true:!V);},[]),H=react.useRef(r);H.current=r;let E=react.useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>H.current?.(w),onError:(w,R)=>E.current?.(w,R)}),J=react.useCallback(async()=>{if(!t.amount||!m||!s)return;let w=l?.decimals??9,R=i?.address??l?.address??"",V=t.direction==="buy",ae=V?R:s,ee=V?s:R,oe=V?w:x?.decimals??9,te=new pe__default.default(t.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=t.currentPresetValues,S=_(n),B=ie.slippage??S.slippage??1,ve=ie.antiMev!=="off",Ue=utils$1.isSolanaChain(n)?{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:n,wallet:m,input:ae,output:ee,amount:te,slippage:B,...Ue}),t.setAmount(void 0);}catch{}},[t,m,s,l,i,x,n,Z]),Y=react.useMemo(()=>{let w=a(t.direction==="buy"?"common.buy":"common.sell");if(!t.amount)return w;let R=` (${a("trade.insufficientBalance")})`;if(t.direction==="buy"){let ae=P?.amount;if(ae&&new pe__default.default(ae).lt(t.amount))return `${w}${R}`;let ee=l?.symbol??"",oe=p.data?.find(te=>te.address===v)?.marketData?.priceInUsd;if(oe){let te=utils$1.formatAmountInUsd(new pe__default.default(t.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:t.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:t.amount,symbol:ee})}let V=f?.amount;return V&&new pe__default.default(V).lt(t.amount)?`${w}${R}`:w},[a,t.direction,t.amount,P,f,l,p.data,v]),Q=!t.amount||!m||!s,re=p.isPending||b.isPending;return react.useMemo(()=>({chain:n,tokenAddress:s,nativeToken:l,tokenInfo:x,nativeBalance:P,tokenBalance:f,direction:t.direction,setDirection:t.setDirection,amount:t.amount,setAmount:t.setAmount,buyPreset:t.buyPreset,setBuyPreset:t.setBuyPreset,sellPreset:t.sellPreset,setSellPreset:t.setSellPreset,currentPresetValues:t.currentPresetValues,settings:t.settings,updateBuySettings:t.updateBuySettings,updateSellSettings:t.updateSellSettings,showSettings:I,handlePresetClick:$,swap:J,isSwapping:F,submitText:Y,isDisabled:Q,isLoading:re}),[n,s,l,x,P,f,t,I,$,J,F,Y,Q,re])}function be({value:e,onChange:n,chain:s,disableAnimation:r,className:o}){let a=react.useCallback(i=>n({...e,...i}),[e,n]),t=react.useMemo(()=>le(s),[s]),l=t.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",o),children:[jsxRuntime.jsx(Ys,{value:e.slippage,onChange:i=>a({slippage:i})}),jsxRuntime.jsx(er,{value:e[l],onChange:i=>a({[l]:i}),feeType:t.feeType,symbol:t.feeUnit,decimals:t.feeDecimals}),t.showTipFee&&jsxRuntime.jsx(tr,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:t.tipFeeUnit,decimals:t.tipFeeDecimals}),t.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(nr,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:r}),e.autoFee&&jsxRuntime.jsx(sr,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:t.nativeSymbol})]}),jsxRuntime.jsx(rr,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:t.antiMevOptions,disableAnimation:r}),t.showCustomRPC&&jsxRuntime.jsx(ar,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Ys({value:e,onChange:n}){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:o=>n(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function er({value:e,onChange:n,feeType:s,symbol:r,decimals:o}){let{t:a}=i18n.useTranslation(),t=a(`trade.preset.${s}`),l=a(`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:[t,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=>n(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":t})]})}function tr({value:e,onChange:n,symbol:s,decimals:r}){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:t=>n(isNaN(t)?null:t),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function nr({value:e,onChange:n,disableAnimation:s}){let{t:r}=i18n.useTranslation(),o=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:[o,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:n,color:"primary","aria-label":o,disableAnimation:s})})]})}function sr({value:e,onChange:n,symbol:s}){let{t:r}=i18n.useTranslation(),o=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:o}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>n(isNaN(a)?null:a),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":o})]})}function rr({value:e,onChange:n,options:s,disableAnimation:r}){let{t:o}=i18n.useTranslation(),a=o("trade.preset.antiMev"),t=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:n,disableAnimation:r,"aria-label":a,children:s.map(i=>{let u=t[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 ar({value:e,onChange:n}){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:o=>n(o||null),placeholder:"https://...","aria-label":r})})]})}function Xe({chain:e,direction:n,onDirectionChange:s,amount:r,onAmountChange:o,customAmounts:a,customPercentages:t,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:m,nativeBalance:c,tokenBalance:g,amountConversion:p,preset:x,onPresetChange:b,presetValues:v,onPresetSettingsChange:P,showSettings:f,onPresetClick:I,submitText:U,isDisabled:K,isLoading:$,onSubmit:H,className:E,headerExtra:Z}){let{t:F}=i18n.useTranslation(),J=react.useMemo(()=>utils$1.getNativeToken(e),[e]),Y=J?.symbol,Q=J?.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:n==="buy"?"primary":"secondary",selectedKey:n,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:ui.cn("h-6",n==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:n==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[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:n==="buy"?jsxRuntime.jsx(hr,{amount:r,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:Y,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsxRuntime.jsx(yr,{amount:r,onAmountChange:o,customPercentages:t,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:n==="buy"?c?`${c} ${Y??""}`:"--":g?`${g} ${m??""}`:"--"})]}),p&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:p})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(br,{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:`${x}`,onSelectionChange:re=>b(Number(re)),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:n==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:K,isLoading:$,onPress:H,children:U})]})}function hr({amount:e,onAmountChange:n,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:t,amountLabel:l}){let i=react.useCallback(u=>{typeof u=="number"&&n(isNaN(u)?void 0:u);},[n]);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:t},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(Xt,{values:s,onSelect:r,onEdit:o})]})}function yr({amount:e,onAmountChange:n,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:o,tokenSymbol:a,amountLabel:t}){let l=react.useCallback(i=>{typeof i=="number"&&n(isNaN(i)?void 0:i);},[n]);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:t}),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(Xt,{values:s,onSelect:r,onEdit:o,suffix:"%"})]})}function Xt({values:e,onSelect:n,onEdit:s,suffix:r}){let[o,a]=react.useState(false),[t,l]=react.useState([]),i=react.useCallback(()=>{l([...e]),a(true);},[e]),u=react.useCallback(()=>{a(false),s(t);},[s,t]);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:o?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:t[m]===null||t[m]===void 0?void 0:t[m],onChange:c=>{if(typeof c=="number"){let g=isNaN(c)?null:c;l(p=>{let x=[...p];return x[m]=g,x});}},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&&n(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: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 br({values:e,chain:n}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>le(n),[n]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off",a=o==="reduced"?ui.ShieldIcon:o==="secure"?ui.ShieldPlusIcon:ui.ShieldOffIcon;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.jsx(a,{width:14,height:14,className:"text-neutral"}),children:s(`trade.preset.antiMev.${o}`)})})]})}function vr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r,settings:o,onSettingsChange:a,headerExtra:t,className:l}){return jsxRuntime.jsx(Qe,{chain:e,tokenAddress:n,settings:o,onSettingsChange:a,children:jsxRuntime.jsx(Pr,{chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r,headerExtra:t,className:l})})}function Pr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r,headerExtra:o,className:a}){let t=He({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r}),l=react.useCallback(p=>t.setAmount(p),[t]),i=react.useCallback(p=>{let x=t.tokenBalance?.amount;if(!x)return;let b=new pe__default.default(x).times(p).div(100).toNumber();t.setAmount(b);},[t]),u=react.useCallback(p=>{t.updateBuySettings({...t.settings.buy,customAmounts:p});},[t]),d=react.useCallback(p=>{t.updateSellSettings({...t.settings.sell,customPercentages:p});},[t]),m=react.useCallback(p=>{let x=t.direction==="buy",b=x?t.buyPreset:t.sellPreset;if(x){let v=t.settings.buy,P=[...v.presets];P[b]=p,t.updateBuySettings({...v,presets:P});}else {let v=t.settings.sell,P=[...v.presets];P[b]=p,t.updateSellSettings({...v,presets:P});}},[t]),c=react.useCallback(p=>{t.direction==="buy"?t.setBuyPreset(p):t.setSellPreset(p);},[t]),g=t.direction==="buy"?t.buyPreset:t.sellPreset;return jsxRuntime.jsx(Xe,{chain:e,direction:t.direction,onDirectionChange:t.setDirection,amount:t.amount,onAmountChange:t.setAmount,customAmounts:t.settings.buy.customAmounts,customPercentages:t.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:t.tokenInfo?.symbol,nativeBalance:t.nativeBalance?.amount,tokenBalance:t.tokenBalance?.amount,amountConversion:void 0,preset:g,onPresetChange:c,presetValues:t.currentPresetValues,onPresetSettingsChange:m,showSettings:t.showSettings,onPresetClick:t.handlePresetClick,submitText:t.submitText,isDisabled:t.isDisabled,isLoading:t.isSwapping,onSubmit:t.swap,className:a,headerExtra:o})}function Ye(e){let{id:n,chain:s,token:r,storageKeyPrefix:o,onAmountChange:a,onPresetChange:t,onPresetClick:l}=e,[i,u]=jotai.useAtom(G(j(n,s,r.address,o))),d=jotai.useAtomValue(L(D(s,"buy",0,o))),m=jotai.useAtomValue(L(D(s,"buy",1,o))),c=jotai.useAtomValue(L(D(s,"buy",2,o))),g=react.useMemo(()=>[d,m,c],[d,m,c]),p=react.useCallback(b=>{u(v=>({...v,amount:b})),a?.(b);},[u,a]),x=react.useCallback(b=>{u(v=>({...v,preset:b})),t?.(b);},[u,t]);return {token:r,chain:s,amount:i.amount,handleAmountChange:p,preset:i.preset,handlePresetChange:x,onPresetClick:l,presetValues:g}}function et({token:e,chain:n,amount:s,onAmountChange:r,preset:o=0,onPresetChange:a,onPresetClick:t,presetValues:l,radius:i="full",size:u="md",className:d}){let{t:m}=i18n.useTranslation(),{isMobile:c}=ui.useScreen(),g=react.useRef(null),p=react.useMemo(()=>_(n),[n]),[x,b]=react.useState(null),v=react.useCallback(P=>{a?.(Number(P));},[a]);return jsxRuntime.jsxs("div",{ref:g,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:P=>r(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":m("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${n}-${e.address}`),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:c?jsxRuntime.jsx("span",{onClick:I=>{o===f&&(I.stopPropagation(),b(U=>U===f?null:f));},children:m("trade.preset.short",{n:f+1})}):jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsx(sn,{label:m("trade.preset.short",{n:f+1}),values:l?.[f]??p,chain:n}),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&&t?.(f),children:m("trade.preset.short",{n:f+1})})})},String(f)))}),c&&x!==null&&jsxRuntime.jsx(_r,{label:m("trade.preset.short",{n:x+1}),values:l?.[x]??p,chain:n,onClose:()=>b(null),containerRef:g})]})}function _r({label:e,values:n,chain:s,onClose:r,containerRef:o}){let a=react.useRef(null);return react.useEffect(()=>{let t=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&r();};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t);}},[r,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(sn,{label:e,values:n,chain:s})})}function sn({label:e,values:n,chain:s}){let{t:r}=i18n.useTranslation(),o=react.useMemo(()=>le(s),[s]),a=n.antiMev&&n.antiMev!=="off"?n.antiMev:"off",t=(n.slippage??0)/100,l=t>=.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(t)})]}),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.${o.feeType}`)})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(n.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:r("trade.preset.tipFee")})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(n.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:r("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:r(`trade.preset.antiMev.${a}`)})]})]})}function Kr({size:e,radius:n,className:s,...r}){let{token:o,chain:a,amount:t,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:d,presetValues:m}=Ye(r);return jsxRuntime.jsx(et,{token:o,chain:a,amount:t,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:d,presetValues:m,size:e,radius:n,className:s})}function tt(e){let{chain:n,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:o,onChange:a}=e,[t,l]=react.useState(r),[i,u]=jotai.useAtom(L(D(n,t,s,o))),d=react.useCallback(m=>{u(m),a?.(t,m);},[u,a,t]);return {direction:t,setDirection:l,value:i,handleChange:d}}function st({disableAnimation:e,className:n,...s}){let{t:r}=i18n.useTranslation(),{direction:o,setDirection:a,value:t,handleChange:l}=tt(s);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",n),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:r("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:r("common.sell")},"sell")]}),jsxRuntime.jsx(be,{value:t,onChange:l,chain:s.chain,disableAnimation:e})]})}var Jr=3;function rt(e){let{defaultPresetIndex:n=0,onChange:s}=e,[r,o]=react.useState(n),a=react.useCallback((t,l)=>{s?.(r,t,l);},[s,r]);return {presetCount:Jr,presetIndex:r,setPresetIndex:o,handlePresetChange:a}}function ot({defaultDirection:e,disableAnimation:n,className:s,...r}){let{t:o}=i18n.useTranslation(),{presetCount:a,presetIndex:t,setPresetIndex:l,handlePresetChange:i}=rt(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(t),onSelectionChange:u=>l(Number(u)),disableAnimation:n,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,d)=>jsxRuntime.jsx(ui.Tab,{title:o("trade.preset.label",{n:d+1})},String(d)))}),jsxRuntime.jsx(st,{chain:r.chain,presetIndex:t,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:n})]})}var ga="preset";function xa({id:e=ga}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:n=>jsxRuntime.jsx(ha,{...n})})}function ha({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:n,onOpenChange:s}){let{t:r}=i18n.useTranslation(),{chains:o,defaultChain:a,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[d,m]=react.useState(a??o[0]);react.useEffect(()=>{m(a??o[0]);},[a,o]);let c=react.useCallback((g,p,x)=>{u?.(d,g,p,x);},[u,d]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:n,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:o,chain:d,onSelectChain:m})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(ot,{chain:d,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:c})})})]})})}function Me(e,n,s,r,o){let a=_(o),t=new pe__default.default(e).shiftedBy(n.decimals).decimalPlaces(0).toString(),l=new pe__default.default(r.priorityFee??a.priorityFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString(),i=new pe__default.default(r.tipFee??a.tipFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString();return {input:n.address,output:s,amount:t,slippage:r.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function ut(e){let{id:n,chain:s,token:r,output:o,storageKeyPrefix:a,onSwapSubmitted:t,onSwapError:l}=e,{amount:i,preset:u}=jotai.useAtomValue(G(j(n,s,r.address,a))),d=jotai.useAtomValue(L(D(s,"buy",u,a))),m=walletConnector.useConnectedWallet(s),{swap:c,isSwapping:g}=ne({onSubmitted:t,onError:l}),p=!i||!o,x=walletConnector.useAuthCallback(async()=>{if(!i||!m||!o)return;let b=Me(i,r,o,d,s);try{await c({...b,chain:s,wallet:m});}catch{}},[m,i,o,s,r,d,c]);return react.useMemo(()=>({amount:i,token:r,isDisabled:p,isSwapping:g,handleSwap:x}),[i,r,p,g,x])}function wa({size:e="sm",radius:n,color:s="primary",className:r,...o}){let{amount:a,token:t,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:n,color:s,className:r,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${t.symbol}`:t.symbol})}var mn=react.createContext(null);function Fa({chain:e,onSwapSubmitted:n,onSwapError:s,children:r}){let o=walletConnector.useConnectedWallet(e),{swap:a}=ne({onSubmitted:n,onError:s}),t=react.useRef(o);t.current=o;let l=react.useRef(a);l.current=a;let i=react.useRef(e);i.current=e;let u=react.useCallback(async m=>{let c=t.current;c&&await l.current({...m,wallet:c,chain:i.current});},[]),d=walletConnector.useAuthCallback(u,[]);return jsxRuntime.jsx(mn.Provider,{value:d,children:r})}function dt(){let e=react.useContext(mn);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:n,chain:s,token:r,output:o,storageKeyPrefix:a}=e,{amount:t,preset:l}=jotai.useAtomValue(G(j(n,s,r.address,a))),i=jotai.useAtomValue(L(D(s,"buy",l,a))),u=dt(),{t:d}=i18n.useTranslation(),[m,c]=react.useState(false),g=!o,p=react.useRef(r);p.current=r;let x=react.useRef(i);x.current=i;let b=react.useRef(s);b.current=s;let v=react.useCallback(async()=>{if(!o)return;if(!t){ui.toast(d("trade.instantTradeAmountRequired"));return}let P=Me(t,p.current,o,x.current,b.current);c(true);try{await u(P);}catch{}finally{c(false);}},[t,o,u,d]);return react.useMemo(()=>({amount:t,token:r,isDisabled:g,isSwapping:m,handleSwap:v}),[t,r,g,m,v])}var Ka=react.memo(function({size:n="sm",radius:s,color:r="primary",className:o,...a}){let{amount:t,token:l,isDisabled:i,isSwapping:u,handleSwap:d}=ct(a),m=t!=null?`${utils$1.formatAmount(t)} ${l.symbol}`:void 0;return jsxRuntime.jsx(ui.Button,{variant:"solid",size:n,radius:s,color:r,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: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=et;exports.AmountPresetInputWidget=Kr;exports.DEFAULT_BSC_TRADE_PRESET=ht;exports.DEFAULT_EVM_TRADE_PRESET=xt;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Is;exports.DEFAULT_SELL_PERCENTAGES=bt;exports.DEFAULT_SOL_TRADE_PRESET=gt;exports.InstantTradeButtonWidget=wa;exports.InstantTradeListButtonWidget=Ka;exports.InstantTradeProvider=Qe;exports.InstantTradeSwapProvider=Fa;exports.InstantTradeUI=Xe;exports.InstantTradeWidget=vr;exports.MultiPresetFormWidget=ot;exports.PresetFormModal=xa;exports.PresetFormUI=be;exports.PresetFormWidget=st;exports.SwapPreviewModal=Oe;exports.SwapRouteExpiredError=de;exports.SwapUI=_e;exports.SwapWidget=ws;exports.getChainPresetFeatures=le;exports.getDefaultBuyAmounts=yt;exports.getDefaultPresetForChain=_;exports.instantTradeAmountAtomFamily=G;exports.instantTradeAmountKey=j;exports.presetAtomFamily=L;exports.presetKey=D;exports.useAmountPresetInputScript=Ye;exports.useInstantTrade=$e;exports.useInstantTradeAmount=qa;exports.useInstantTradeButtonScript=ut;exports.useInstantTradeListButtonScript=ct;exports.useInstantTradeScript=He;exports.useInstantTradeSwap=dt;exports.useMultiPresetFormScript=rt;exports.usePresetFormScript=tt;exports.usePresetValues=io;exports.useSwap=ne;exports.useSwapRoutePolling=Ct;exports.useSwapScript=De;exports.useTxConfirmation=Nt;//# sourceMappingURL=index.js.map
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 fn="liberfi.",gn={amount:void 0,preset:0};function xn(e,n,s,r){return `${e}instant-trade.${n}.${s}.${r}`}function hn(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),r=e.slice(n+1),[o,a,t]=r.split(".");return {prefix:s,id:o,chain:a,tokenAddress:t}}function z(e,n,s,r=fn){return `${r}:${e}.${n}.${s}`}var G=jotaiFamily.atomFamily(e=>{let{prefix:n,id:s,chain:r,tokenAddress:o}=hn(e);return utils.atomWithStorage(xn(n,s,String(r),o),gn,void 0,{getOnInit:false})});function Xa({id:e,chain:n,tokenAddress:s,storageKeyPrefix:r}){return jotai.useAtomValue(G(z(e,n,s,r)))}var de=class extends Error{constructor(n="Swap route expired. Please refresh the quote."){super(n),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},bn={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]},Sn=[1,10,25,50];function yt(e){return bn[e]??Sn}var bt=[10,25,50,100];function le(e){let n=utils$1.getNativeToken(e);if(!n)throw new Error(`No native token defined for chain "${e}"`);let s=n.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 _(e){return utils$1.isSolanaChain(e)?gt:utils$1.isBinanceChain(e)?ht:xt}var Tn="liberfi.";function Cn(e,n,s,r){return `${e}preset.${n}.${s}.${r}`}function Nn(e){let n=e.lastIndexOf(":"),s=e.slice(0,n+1),r=e.slice(n+1),[o,a,t]=r.split(".");return {prefix:s,chain:o,direction:a,index:Number(t)}}function D(e,n,s,r=Tn){return `${r}:${e}.${n}.${s}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:n,chain:s,direction:r,index:o}=Nn(e);return utils.atomWithStorage(Cn(n,String(s),r,o),_(s),void 0,{getOnInit:true})});function lo({chain:e,direction:n,presetIndex:s=0,storageKeyPrefix:r}){return jotai.useAtomValue(L(D(e,n,s,r)))}function wt(e){return e instanceof Error?e:new Error(String(e))}function Ln(e){return {chain:e.chain,userAddress:e.wallet?.address??"",input:e.input,output:e.output,amount:e.amount,mode:e.mode??types.SwapMode.EXACT_IN,slippage:e.slippage,priorityFee:e.priorityFee,tipFee:e.tipFee,isAntiMev:e.isAntiMev,permit:e.permit,deadline:e.deadline}}function Wn(e){if(e==="route"||e==="sign"||e==="expired"||e==="send")return e;if(e==="confirm")return "send"}function On(e,n,s){let r=Wn(n);if(s==="stale"||r==="expired"||e instanceof react$1.TradeRouteExpiredError||e instanceof de){let a=wt(e).message;return {error:e instanceof de?e:new de(a),phase:"expired"}}let o=r==="sign"||r==="send"||r==="route"?r:"route";return {error:wt(e),phase:o}}function ne(e){let{client:n}=react$1.useDexClient(),[s,r]=react.useState(false),o=react.useRef(e);o.current=e;let a=react.useMemo(()=>({chain:types.Chain.SOLANA}),[]),t=react$1.useLatestBlockFetcher(a),l=react.useRef(n);l.current=n;let i=react.useRef(t);i.current=t;let u=react.useRef(null);u.current===null&&(u.current=new react$1.TradeExecutionRuntime({adapter:react$1.createClientTradeExecutionAdapter({swapRoute:m=>l.current.swapRoute(m),sendTx:m=>l.current.sendTx(m),getLatestBlock:async()=>{let m=await i.current({staleTime:react$1.PRE_SIGN_STALE_MS});if(!m.data)throw new react$1.TradeRouteExpiredError("Latest Solana block data is stale. Please refresh the quote.");return {blockhash:m.data.blockhash,lastValidBlockHeight:m.data.lastValidBlockHeight,dataUpdatedAt:m.dataUpdatedAt}},checkTxSuccess:(m,c,g)=>l.current.checkTxSuccess(m,c,g)})}));let d=react.useCallback(async m=>{let c=u.current;r(true);try{let g=await c.execute(Ln(m),{sign:typeof m.wallet?.signTransaction=="function"?x=>m.wallet.signTransaction(x):void 0}),p={txHash:g.txHash,extra:g.extra};return o.current?.onSubmitted?.(p),p}catch(g){let p=c.getSnapshot(),x=On(g,p.phase,p.state);throw o.current?.onError?.(x.error,x.phase),x.error}finally{r(false);}},[]);return react.useMemo(()=>({swap:d,isSwapping:s}),[d,s])}var Qn=12e3;function Ct(e,n){let s=n?.interval??Qn,r=n?.paused??false,o=react.useRef(n);o.current=n;let t=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,l=react$1.useSwapRouteQuery(e,{enabled:t,refetchInterval:t?s: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:n}=react$1.useDexClient(),[s,r]=react.useState(()=>new Map),o=react.useRef(e);o.current=e;let a=react.useCallback((u,d)=>{r(m=>{let c=m.get(u);if(!c||c.status===d)return m;let g=new Map(m);return g.set(u,{...c,status:d}),g});},[]),t=react.useCallback((u,d)=>{r(c=>{if(c.has(d))return c;let g=new Map(c);return g.set(d,{chain:u,txHash:d,status:"pending"}),g});let m=o.current?.timeout??qn;n.checkTxSuccess(u,d,m).then(c=>{if(c)a(d,"confirmed"),o.current?.onConfirmed?.(d);else {let g=new Error("Transaction failed on-chain");a(d,"failed"),o.current?.onFailed?.(d,g);}}).catch(c=>{let g=c instanceof Error?c:new Error(String(c));a(d,"failed"),o.current?.onFailed?.(d,g);});},[n,a]),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:t,clear:l,clearAll:i,transactions:s}),[t,l,i,s])}var Yn=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function es(e){return Yn.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var ts=1e4,ns=15e3;function ss(e,n){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let o=r.padStart(n+1,"0"),a=o.slice(0,o.length-n)||"0",l=o.slice(o.length-n).replace(/0+$/,"");return l?`${a}.${l}`:a}function De(e){let{chain:n}=e,s=walletConnector.useWallets(),r=es(n),o=react.useMemo(()=>s.find(S=>S.chainNamespace===r&&S.isConnected),[s,r]),a=o?.address??"",[t,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 c=react.useMemo(()=>[t,i].filter(Boolean),[t,i]),g=react$1.useTokensQuery({chain:n,addresses:c},{enabled:c.length>0,refetchInterval:ts}),p=react.useMemo(()=>g.data?.find(S=>S.address===t)??null,[g.data,t]),x=react.useMemo(()=>g.data?.find(S=>S.address===i)??null,[g.data,i]),b=react$1.useWalletPortfoliosByTokensQuery({chain:n,address:a,tokenAddresses:c},{enabled:!!a&&c.length>0,refetchInterval:ns}),v=react.useMemo(()=>b.data?.find(S=>S.address===t)??null,[b.data,t]),P=react.useMemo(()=>b.data?.find(S=>S.address===i)??null,[b.data,i]),[f,I]=react.useState(void 0),U=react.useMemo(()=>{if(!f||p?.decimals==null)return;let S=f.split("."),B=S[0]??"0",Me=(S[1]??"").slice(0,p.decimals).padEnd(p.decimals,"0");return (B+Me).replace(/^0+/,"")||"0"},[f,p?.decimals]),K=react.useMemo(()=>{if(!f||!p?.marketData?.priceInUsd)return;let S=Number(p.marketData.priceInUsd),B=Number(f)*S;return Number.isFinite(B)?B.toString():void 0},[f,p?.marketData?.priceInUsd]),$=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let B=S/2,ve=p?.decimals??9;I(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[v,p?.decimals]),j=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let B=p?.decimals??9;I(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[v,p?.decimals]),E=react.useMemo(()=>({chain:n,userAddress:a||void 0,input:t||void 0,output:i||void 0,mode:types.SwapMode.EXACT_IN,amount:U}),[n,a,t,i,U]),Z=react.useRef(false),{route:F,isRouting:J,error:Y}=Ct(E,{paused:Z.current}),Q=react.useMemo(()=>F&&x?ss(F.plans,x.decimals):void 0,[F,x]),re=react.useMemo(()=>{if(!Q||!x?.marketData?.priceInUsd)return;let S=Number(x.marketData.priceInUsd),B=Number(Q)*S;return Number.isFinite(B)?B.toString():void 0},[Q,x?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=ne();Z.current=M;let V=react.useRef(e.onComplete);V.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:S=>{V.current?.({success:true,txHash:S});},onFailed:S=>{V.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||!t||!i||!U))try{let S=await w({chain:n,wallet:o,input:t,output:i,amount:U,mode:types.SwapMode.EXACT_IN});ae(n,S.txHash);}catch{}},[o,F,n,t,i,U,w,ae]),ie=g.isPending||b.isPending;return react.useMemo(()=>({fromTokenAddress:t,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:p,toToken:x,fromBalance:v,toBalance:P,amount:f,setAmount:I,setHalfAmount:$,setMaxAmount:j,amountInDecimals:U,amountInUsd:K,outputAmount:Q,outputAmountInUsd:re,route:F,isRouting:J,routeError:Y,swap:te,isSwapping:M,txStatus:oe,isLoading:ie}),[t,i,p,x,v,P,f,$,j,U,K,Q,re,F,J,Y,te,M,oe,ie])}function Oe({isOpen:e,onOpenChange:n,fromToken:s,toToken:r,fromBalance:o,inputAmount:a,inputAmountInUsd:t,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:d,routeError:m,onConfirm:c,isSwapping:g}){let{t:p}=i18n.useTranslation(),[x,b]=react.useState(false),v=react.useCallback(()=>b(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:n,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:p("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-text-muted flex items-center justify-between text-xs font-medium",children:p("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"}),o&&jsxRuntime.jsxs("div",{className:"text-text-muted flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(hs,{}),jsxRuntime.jsxs("span",{children:[Le(o.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:Le(a)}),jsxRuntime.jsxs("div",{className:"text-text-muted text-[10px]",children:["$",Mt(t)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:p("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-text-muted text-[10px]",children:Ce(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:Le(l)}),jsxRuntime.jsxs("div",{className:"text-text-muted text-[10px]",children:["$",Mt(i)]})]})]})]}),x&&P.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-text-muted flex items-center justify-between text-xs font-medium",children:p("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-text-muted text-xs",children:p("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-text-muted text-xs",children:p("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[We(f.inputAmount)," ",Ce(f.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[We(f.outputAmount)," ",Ce(f.output)]})]})]}),f.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-text-muted text-xs",children:p("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[We(f.feeAmount)," ",Ce(f.feeQuote)]})]})]},f.key))})]}),P.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-text-muted flex bg-transparent text-xs",endContent:x?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:v,children:p(x?"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||g,onPress:c,children:p("common.confirm")})})]})})}function hs(){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-text-muted",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){let n=utils$1.formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Le(e){return utils$1.formatAmount(e??0)}function We(e){return utils$1.formatAmount(e??0)}function Ce(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function _e({fromToken:e,toToken:n,fromBalance:s,toBalance:r,amount:o,amountInUsd:a,onAmountChange:t,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:m,onToTokenSelect:c,route:g,isRouting:p,routeError:x,onPreview:b,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-text-muted 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=>t(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-text-muted"),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-text-muted"}),onPress:()=>m(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsx("div",{className:"text-text-muted flex-1 text-xs",children:Wt(a)}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Lt,{}),jsxRuntime.jsxs("span",{className:"text-text-muted",children:[Ot(s.amount)," ",s.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")})]})]}),x&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:x.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-text-muted 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",n?"text-foreground":"text-text-muted"),disableRipple:true,startContent:n?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:n.image,name:n.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-text-muted"}),onPress:()=>c(""),children:n?n.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsx("div",{className:"text-text-muted flex-1 text-xs",children:Wt(d)}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Lt,{}),jsxRuntime.jsxs("span",{className:"text-text-muted",children:[Ot(r.amount)," ",r.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!g,isLoading:!g&&p,onPress:b,children:f(v?"trade.swap.swapping":p?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Lt(){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-text-muted",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 vs(e){let n=utils$1.formatAmountInUsd(e??0);return n.startsWith("$")?n.slice(1):n}function Wt(e){return `\u2248 $${vs(e)}`}function Ot(e){return utils$1.formatAmount(e??0)}function Ts({chain:e,from:n,to:s,onComplete:r,className:o}){let a=De({chain:e,from:n,to:s,onComplete:r}),{isOpen:t,onOpen:l,onOpenChange:i,onClose:u}=ui.useDisclosure(),d=react.useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(_e,{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:t,onOpenChange:i,fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,inputAmount:a.amount,inputAmountInUsd:a.amountInUsd,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onConfirm:d,isSwapping:a.isSwapping})]})}function Kt(e){let n=_(e),s=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(s),presets:[{...n},{...n},{...n}]},sell:{customPercentages:[...bt],presets:[{...n},{...n},{...n}]}}}var Fs=Kt("900900900");function $t(e){return `liberfi.instant-trade.settings.${e}`}function Es(e,n){try{let s=localStorage.getItem($t(String(e)));if(s)return JSON.parse(s)}catch{}return n}function Us(e,n){try{localStorage.setItem($t(e),JSON.stringify(n));}catch{}}var Qt=react.createContext(null);function $e(){let e=react.useContext(Qt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Qe({chain:e,tokenAddress:n,settings:s,onSettingsChange:r,children:o}){let a=react.useMemo(()=>utils$1.getNativeToken(e),[e]),t=s!==void 0,l=react.useMemo(()=>Kt(e),[e]),[i,u]=react.useState(()=>t?l:Es(e,l)),d=t?s:i,m=react.useCallback(E=>{t?r?.(E):(u(E),Us(String(e),E));},[t,r,e]),c=react.useCallback(E=>m({...d,buy:E}),[d,m]),g=react.useCallback(E=>m({...d,sell:E}),[d,m]),[p,x]=react.useState("buy"),[b,v]=react.useState(),[P,f]=react.useState(0),[I,U]=react.useState(0),K=react.useMemo(()=>_(e),[e]),$=react.useMemo(()=>{let E=p==="buy"?P:I;return (p==="buy"?d.buy.presets:d.sell.presets)[E]??K},[p,P,I,d,K]),j=react.useMemo(()=>({chain:e,tokenAddress:n,nativeToken:a,direction:p,setDirection:x,amount:b,setAmount:v,buyPreset:P,setBuyPreset:f,sellPreset:I,setSellPreset:U,settings:d,updateBuySettings:c,updateSellSettings:g,currentPresetValues:$}),[e,n,a,p,b,P,I,d,c,g,$]);return jsxRuntime.jsx(Qt.Provider,{value:j,children:o})}var $s=15e3,Qs=1e4;function je(e){let{chain:n,tokenAddress:s,onSwapSubmitted:r,onSwapError:o}=e,{t:a}=i18n.useTranslation(),t=$e(),l=react.useMemo(()=>utils$1.getNativeToken(n),[n]),i=react.useMemo(()=>utils$1.getWrappedToken(n),[n]),u=walletConnector.useWallets(),d=utils$1.chainToNamespace(n),m=react.useMemo(()=>u.find(w=>w.chainNamespace===d&&w.isConnected),[u,d]),c=m?.address??"",g=react.useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),p=react$1.useTokensQuery({chain:n,addresses:g},{enabled:g.length>0,refetchInterval:Qs}),x=react.useMemo(()=>p.data?.find(w=>w.address===s)??null,[p.data,s]),b=react$1.useWalletPortfoliosByTokensQuery({chain:n,address:c,tokenAddresses:g},{enabled:!!c&&g.length>0,refetchInterval:$s}),v=l?.address??i?.address??"",P=react.useMemo(()=>b.data?.find(w=>w.address===v)??null,[b.data,v]),f=react.useMemo(()=>b.data?.find(w=>w.address===s)??null,[b.data,s]),[I,U]=react.useState(false),K=react.useRef(null),$=react.useCallback(w=>{let M=K.current;K.current=w,U(V=>M===null||M!==w?true:!V);},[]),j=react.useRef(r);j.current=r;let E=react.useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>j.current?.(w),onError:(w,M)=>E.current?.(w,M)}),J=react.useCallback(async()=>{if(!t.amount||!m||!s)return;let w=l?.decimals??9,M=i?.address??l?.address??"",V=t.direction==="buy",ae=V?M:s,ee=V?s:M,oe=V?w:x?.decimals??9,te=new pe__default.default(t.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=t.currentPresetValues,S=_(n),B=ie.slippage??S.slippage??1,ve=ie.antiMev!=="off",Me=utils$1.isSolanaChain(n)?{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:n,wallet:m,input:ae,output:ee,amount:te,slippage:B,...Me}),t.setAmount(void 0);}catch{}},[t,m,s,l,i,x,n,Z]),Y=react.useMemo(()=>{let w=a(t.direction==="buy"?"common.buy":"common.sell");if(!t.amount)return w;let M=` (${a("trade.insufficientBalance")})`;if(t.direction==="buy"){let ae=P?.amount;if(ae&&new pe__default.default(ae).lt(t.amount))return `${w}${M}`;let ee=l?.symbol??"",oe=p.data?.find(te=>te.address===v)?.marketData?.priceInUsd;if(oe){let te=utils$1.formatAmountInUsd(new pe__default.default(t.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:t.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:t.amount,symbol:ee})}let V=f?.amount;return V&&new pe__default.default(V).lt(t.amount)?`${w}${M}`:w},[a,t.direction,t.amount,P,f,l,p.data,v]),Q=!t.amount||!m||!s,re=p.isPending||b.isPending;return react.useMemo(()=>({chain:n,tokenAddress:s,nativeToken:l,tokenInfo:x,nativeBalance:P,tokenBalance:f,direction:t.direction,setDirection:t.setDirection,amount:t.amount,setAmount:t.setAmount,buyPreset:t.buyPreset,setBuyPreset:t.setBuyPreset,sellPreset:t.sellPreset,setSellPreset:t.setSellPreset,currentPresetValues:t.currentPresetValues,settings:t.settings,updateBuySettings:t.updateBuySettings,updateSellSettings:t.updateSellSettings,showSettings:I,handlePresetClick:$,swap:J,isSwapping:F,submitText:Y,isDisabled:Q,isLoading:re}),[n,s,l,x,P,f,t,I,$,J,F,Y,Q,re])}function be({value:e,onChange:n,chain:s,disableAnimation:r,className:o}){let a=react.useCallback(i=>n({...e,...i}),[e,n]),t=react.useMemo(()=>le(s),[s]),l=t.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",o),children:[jsxRuntime.jsx(er,{value:e.slippage,onChange:i=>a({slippage:i})}),jsxRuntime.jsx(tr,{value:e[l],onChange:i=>a({[l]:i}),feeType:t.feeType,symbol:t.feeUnit,decimals:t.feeDecimals}),t.showTipFee&&jsxRuntime.jsx(nr,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:t.tipFeeUnit,decimals:t.tipFeeDecimals}),t.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(sr,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:r}),e.autoFee&&jsxRuntime.jsx(rr,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:t.nativeSymbol})]}),jsxRuntime.jsx(ar,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:t.antiMevOptions,disableAnimation:r}),t.showCustomRPC&&jsxRuntime.jsx(or,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function er({value:e,onChange:n}){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-text-muted",children:r}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>n(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-text-muted",children:"%"}),"aria-label":r})]})}function tr({value:e,onChange:n,feeType:s,symbol:r,decimals:o}){let{t:a}=i18n.useTranslation(),t=a(`trade.preset.${s}`),l=a(`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-text-muted flex items-center gap-1",children:[t,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-text-muted"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>n(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsxRuntime.jsx("span",{className:"text-sm text-text-muted",children:r}),"aria-label":t})]})}function nr({value:e,onChange:n,symbol:s,decimals:r}){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-text-muted 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-text-muted"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:t=>n(isNaN(t)?null:t),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsxRuntime.jsx("span",{className:"text-sm text-text-muted",children:s}),"aria-label":a})]})}function sr({value:e,onChange:n,disableAnimation:s}){let{t:r}=i18n.useTranslation(),o=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-text-muted flex items-center gap-1",children:[o,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-text-muted"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:n,color:"primary","aria-label":o,disableAnimation:s})})]})}function rr({value:e,onChange:n,symbol:s}){let{t:r}=i18n.useTranslation(),o=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-text-muted",children:o}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>n(isNaN(a)?null:a),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-text-muted",children:s}),"aria-label":o})]})}function ar({value:e,onChange:n,options:s,disableAnimation:r}){let{t:o}=i18n.useTranslation(),a=o("trade.preset.antiMev"),t=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-text-muted 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-text-muted"})})})]}),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:n,disableAnimation:r,"aria-label":a,children:s.map(i=>{let u=t[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:n}){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-text-muted",children:r}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>n(o||null),placeholder:"https://...","aria-label":r})})]})}function Xe({chain:e,direction:n,onDirectionChange:s,amount:r,onAmountChange:o,customAmounts:a,customPercentages:t,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:m,nativeBalance:c,tokenBalance:g,amountConversion:p,preset:x,onPresetChange:b,presetValues:v,onPresetSettingsChange:P,showSettings:f,onPresetClick:I,submitText:U,isDisabled:K,isLoading:$,onSubmit:j,className:E,headerExtra:Z}){let{t:F}=i18n.useTranslation(),J=react.useMemo(()=>utils$1.getNativeToken(e),[e]),Y=J?.symbol,Q=J?.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:n==="buy"?"primary":"secondary",selectedKey:n,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:ui.cn("h-6",n==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:n==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[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:n==="buy"?jsxRuntime.jsx(yr,{amount:r,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:Y,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsxRuntime.jsx(br,{amount:r,onAmountChange:o,customPercentages:t,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-text-muted space-x-1",children:[jsxRuntime.jsx("span",{children:F("trade.balance")}),jsxRuntime.jsx("span",{children:n==="buy"?c?`${c} ${Y??""}`:"--":g?`${g} ${m??""}`:"--"})]}),p&&jsxRuntime.jsx("div",{className:"text-xs text-text-muted",children:p})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(Sr,{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-text-muted"},selectedKey:`${x}`,onSelectionChange:re=>b(Number(re)),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:n==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:K,isLoading:$,onPress:j,children:U})]})}function yr({amount:e,onAmountChange:n,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:t,amountLabel:l}){let i=react.useCallback(u=>{typeof u=="number"&&n(isNaN(u)?void 0:u);},[n]);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-text-muted",children:l}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-text-muted",children:a??""}),formatOptions:{maximumFractionDigits:t},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(Xt,{values:s,onSelect:r,onEdit:o})]})}function br({amount:e,onAmountChange:n,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:o,tokenSymbol:a,amountLabel:t}){let l=react.useCallback(i=>{typeof i=="number"&&n(isNaN(i)?void 0:i);},[n]);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-text-muted",children:t}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-text-muted",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(Xt,{values:s,onSelect:r,onEdit:o,suffix:"%"})]})}function Xt({values:e,onSelect:n,onEdit:s,suffix:r}){let[o,a]=react.useState(false),[t,l]=react.useState([]),i=react.useCallback(()=>{l([...e]),a(true);},[e]),u=react.useCallback(()=>{a(false),s(t);},[s,t]);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:o?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:t[m]===null||t[m]===void 0?void 0:t[m],onChange:c=>{if(typeof c=="number"){let g=isNaN(c)?null:c;l(p=>{let x=[...p];return x[m]=g,x});}},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&&n(e[m]),endContent:r?jsxRuntime.jsx("span",{className:"text-xs text-text-muted",children:r}):null,children:e[m]??""})},m))}),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 Sr({values:e,chain:n}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>le(n),[n]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off",a=o==="reduced"?ui.ShieldIcon:o==="secure"?ui.ShieldPlusIcon:ui.ShieldOffIcon;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-text-muted 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-text-muted",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-text-muted 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-text-muted",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-text-muted 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-text-muted",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-text-muted 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-text-muted",disableRipple:true,startContent:jsxRuntime.jsx(a,{width:14,height:14,className:"text-text-muted"}),children:s(`trade.preset.antiMev.${o}`)})})]})}function Pr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r,settings:o,onSettingsChange:a,headerExtra:t,className:l}){return jsxRuntime.jsx(Qe,{chain:e,tokenAddress:n,settings:o,onSettingsChange:a,children:jsxRuntime.jsx(wr,{chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r,headerExtra:t,className:l})})}function wr({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r,headerExtra:o,className:a}){let t=je({chain:e,tokenAddress:n,onSwapSubmitted:s,onSwapError:r}),l=react.useCallback(p=>t.setAmount(p),[t]),i=react.useCallback(p=>{let x=t.tokenBalance?.amount;if(!x)return;let b=new pe__default.default(x).times(p).div(100).toNumber();t.setAmount(b);},[t]),u=react.useCallback(p=>{t.updateBuySettings({...t.settings.buy,customAmounts:p});},[t]),d=react.useCallback(p=>{t.updateSellSettings({...t.settings.sell,customPercentages:p});},[t]),m=react.useCallback(p=>{let x=t.direction==="buy",b=x?t.buyPreset:t.sellPreset;if(x){let v=t.settings.buy,P=[...v.presets];P[b]=p,t.updateBuySettings({...v,presets:P});}else {let v=t.settings.sell,P=[...v.presets];P[b]=p,t.updateSellSettings({...v,presets:P});}},[t]),c=react.useCallback(p=>{t.direction==="buy"?t.setBuyPreset(p):t.setSellPreset(p);},[t]),g=t.direction==="buy"?t.buyPreset:t.sellPreset;return jsxRuntime.jsx(Xe,{chain:e,direction:t.direction,onDirectionChange:t.setDirection,amount:t.amount,onAmountChange:t.setAmount,customAmounts:t.settings.buy.customAmounts,customPercentages:t.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:t.tokenInfo?.symbol,nativeBalance:t.nativeBalance?.amount,tokenBalance:t.tokenBalance?.amount,amountConversion:void 0,preset:g,onPresetChange:c,presetValues:t.currentPresetValues,onPresetSettingsChange:m,showSettings:t.showSettings,onPresetClick:t.handlePresetClick,submitText:t.submitText,isDisabled:t.isDisabled,isLoading:t.isSwapping,onSubmit:t.swap,className:a,headerExtra:o})}function Ye(e){let{id:n,chain:s,token:r,storageKeyPrefix:o,onAmountChange:a,onPresetChange:t,onPresetClick:l}=e,[i,u]=jotai.useAtom(G(z(n,s,r.address,o))),d=jotai.useAtomValue(L(D(s,"buy",0,o))),m=jotai.useAtomValue(L(D(s,"buy",1,o))),c=jotai.useAtomValue(L(D(s,"buy",2,o))),g=react.useMemo(()=>[d,m,c],[d,m,c]),p=react.useCallback(b=>{u(v=>({...v,amount:b})),a?.(b);},[u,a]),x=react.useCallback(b=>{u(v=>({...v,preset:b})),t?.(b);},[u,t]);return {token:r,chain:s,amount:i.amount,handleAmountChange:p,preset:i.preset,handlePresetChange:x,onPresetClick:l,presetValues:g}}function et({token:e,chain:n,amount:s,onAmountChange:r,preset:o=0,onPresetChange:a,onPresetClick:t,presetValues:l,radius:i="full",size:u="md",className:d}){let{t:m}=i18n.useTranslation(),{isMobile:c}=ui.useScreen(),g=react.useRef(null),p=react.useMemo(()=>_(n),[n]),[x,b]=react.useState(null),v=react.useCallback(P=>{a?.(Number(P));},[a]);return jsxRuntime.jsxs("div",{ref:g,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:"hsl(var(--heroui-content3) / 0.6)"},children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:P=>r(isNaN(P)?void 0:P),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent: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"}},`${n}-${e.address}`),jsxRuntime.jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"hsl(var(--heroui-content4) / 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:c?jsxRuntime.jsx("span",{onClick:I=>{o===f&&(I.stopPropagation(),b(U=>U===f?null:f));},children:m("trade.preset.short",{n:f+1})}):jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsx(sn,{label:m("trade.preset.short",{n:f+1}),values:l?.[f]??p,chain:n}),classNames:{content:"!p-0 !rounded-[14px] !border !border-border-subtle !bg-surface-interactive !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsxRuntime.jsx("span",{onClick:()=>o===f&&t?.(f),children:m("trade.preset.short",{n:f+1})})})},String(f)))}),c&&x!==null&&jsxRuntime.jsx(Kr,{label:m("trade.preset.short",{n:x+1}),values:l?.[x]??p,chain:n,onClose:()=>b(null),containerRef:g})]})}function Kr({label:e,values:n,chain:s,onClose:r,containerRef:o}){let a=react.useRef(null);return react.useEffect(()=>{let t=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&r();};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t);}},[r,o]),jsxRuntime.jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid var(--color-border-control)",background:"var(--color-surface-interactive)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsxRuntime.jsx(sn,{label:e,values:n,chain:s})})}function sn({label:e,values:n,chain:s}){let{t:r}=i18n.useTranslation(),o=react.useMemo(()=>le(s),[s]),a=n.antiMev&&n.antiMev!=="off"?n.antiMev:"off",t=(n.slippage??0)/100,l=t>=.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 var(--color-border-control)"},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-text-muted 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(t)})]}),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-text-muted text-xs",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r(`trade.preset.${o.feeType}`)})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(n.priorityFee??0)," ",jsxRuntime.jsx("span",{className:"text-text-muted",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-text-muted 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(n.tipFee??0)," ",jsxRuntime.jsx("span",{className:"text-text-muted",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-text-muted 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:r("trade.preset.antiMev")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",a==="off"&&"text-text-muted",a==="reduced"&&"text-amber-400",a==="secure"&&"text-success"),children:r(`trade.preset.antiMev.${a}`)})]})]})}function $r({size:e,radius:n,className:s,...r}){let{token:o,chain:a,amount:t,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:d,presetValues:m}=Ye(r);return jsxRuntime.jsx(et,{token:o,chain:a,amount:t,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:d,presetValues:m,size:e,radius:n,className:s})}function tt(e){let{chain:n,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:o,onChange:a}=e,[t,l]=react.useState(r),[i,u]=jotai.useAtom(L(D(n,t,s,o))),d=react.useCallback(m=>{u(m),a?.(t,m);},[u,a,t]);return {direction:t,setDirection:l,value:i,handleChange:d}}function st({disableAnimation:e,className:n,...s}){let{t:r}=i18n.useTranslation(),{direction:o,setDirection:a,value:t,handleChange:l}=tt(s);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",n),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":r("common.buySell"),children:[jsxRuntime.jsx(ui.Tab,{title:r("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:r("common.sell")},"sell")]}),jsxRuntime.jsx(be,{value:t,onChange:l,chain:s.chain,disableAnimation:e})]})}var Yr=3;function rt(e){let{defaultPresetIndex:n=0,onChange:s}=e,[r,o]=react.useState(n),a=react.useCallback((t,l)=>{s?.(r,t,l);},[s,r]);return {presetCount:Yr,presetIndex:r,setPresetIndex:o,handlePresetChange:a}}function ot({defaultDirection:e,disableAnimation:n,className:s,...r}){let{t:o}=i18n.useTranslation(),{presetCount:a,presetIndex:t,setPresetIndex:l,handlePresetChange:i}=rt(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(t),onSelectionChange:u=>l(Number(u)),disableAnimation:n,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,d)=>jsxRuntime.jsx(ui.Tab,{title:o("trade.preset.label",{n:d+1})},String(d)))}),jsxRuntime.jsx(st,{chain:r.chain,presetIndex:t,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:n})]})}var xa="preset";function ha({id:e=xa}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:n=>jsxRuntime.jsx(ya,{...n})})}function ya({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:n,onOpenChange:s}){let{t:r}=i18n.useTranslation(),{chains:o,defaultChain:a,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[d,m]=react.useState(a??o[0]);react.useEffect(()=>{m(a??o[0]);},[a,o]);let c=react.useCallback((g,p,x)=>{u?.(d,g,p,x);},[u,d]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:n,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:o,chain:d,onSelectChain:m})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(ot,{chain:d,defaultDirection:t,defaultPresetIndex:l,storageKeyPrefix:i,onChange:c})})})]})})}function Ue(e,n,s,r,o){let a=_(o),t=new pe__default.default(e).shiftedBy(n.decimals).decimalPlaces(0).toString(),l=new pe__default.default(r.priorityFee??a.priorityFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString(),i=new pe__default.default(r.tipFee??a.tipFee??0).shiftedBy(n.decimals).decimalPlaces(0).toString();return {input:n.address,output:s,amount:t,slippage:r.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function ut(e){let{id:n,chain:s,token:r,output:o,storageKeyPrefix:a,onSwapSubmitted:t,onSwapError:l}=e,{amount:i,preset:u}=jotai.useAtomValue(G(z(n,s,r.address,a))),d=jotai.useAtomValue(L(D(s,"buy",u,a))),m=walletConnector.useConnectedWallet(s),{swap:c,isSwapping:g}=ne({onSubmitted:t,onError:l}),p=!i||!o,x=walletConnector.useAuthCallback(async()=>{if(!i||!m||!o)return;let b=Ue(i,r,o,d,s);try{await c({...b,chain:s,wallet:m});}catch{}},[m,i,o,s,r,d,c]);return react.useMemo(()=>({amount:i,token:r,isDisabled:p,isSwapping:g,handleSwap:x}),[i,r,p,g,x])}function Ta({size:e="sm",radius:n,color:s="primary",className:r,...o}){let{amount:a,token:t,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:n,color:s,className:r,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${t.symbol}`:t.symbol})}var mn=react.createContext(null);function Ea({chain:e,onSwapSubmitted:n,onSwapError:s,children:r}){let o=walletConnector.useConnectedWallet(e),{swap:a}=ne({onSubmitted:n,onError:s}),t=react.useRef(o);t.current=o;let l=react.useRef(a);l.current=a;let i=react.useRef(e);i.current=e;let u=react.useCallback(async m=>{let c=t.current;c&&await l.current({...m,wallet:c,chain:i.current});},[]),d=walletConnector.useAuthCallback(u,[]);return jsxRuntime.jsx(mn.Provider,{value:d,children:r})}function dt(){let e=react.useContext(mn);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:n,chain:s,token:r,output:o,storageKeyPrefix:a}=e,{amount:t,preset:l}=jotai.useAtomValue(G(z(n,s,r.address,a))),i=jotai.useAtomValue(L(D(s,"buy",l,a))),u=dt(),{t:d}=i18n.useTranslation(),[m,c]=react.useState(false),g=!o,p=react.useRef(r);p.current=r;let x=react.useRef(i);x.current=i;let b=react.useRef(s);b.current=s;let v=react.useCallback(async()=>{if(!o)return;if(!t){ui.toast(d("trade.instantTradeAmountRequired"));return}let P=Ue(t,p.current,o,x.current,b.current);c(true);try{await u(P);}catch{}finally{c(false);}},[t,o,u,d]);return react.useMemo(()=>({amount:t,token:r,isDisabled:g,isSwapping:m,handleSwap:v}),[t,r,g,m,v])}var $a=react.memo(function({size:n="sm",radius:s,color:r="primary",className:o,...a}){let{amount:t,token:l,isDisabled:i,isSwapping:u,handleSwap:d}=ct(a),m=t!=null?`${utils$1.formatAmount(t)} ${l.symbol}`:void 0;return jsxRuntime.jsx(ui.Button,{variant:"solid",size:n,radius:s,color:r,className:ui.cn("min-w-0 w-auto flex-none",o),disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{className:"flex-none",style:{color:"var(--color-brand-primary)"}}),isDisabled:i,isLoading:u,spinner:jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),onPress:d,style:{background:"linear-gradient(hsl(var(--heroui-primary) / 0.08), hsl(var(--heroui-primary) / 0.08)), var(--color-surface-base)",border:"1px solid hsl(var(--heroui-primary) / 0.2)",color:"var(--color-brand-primary)",fontWeight:600},children:m})});
2
+ exports.AmountPresetInputUI=et;exports.AmountPresetInputWidget=$r;exports.DEFAULT_BSC_TRADE_PRESET=ht;exports.DEFAULT_EVM_TRADE_PRESET=xt;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Fs;exports.DEFAULT_SELL_PERCENTAGES=bt;exports.DEFAULT_SOL_TRADE_PRESET=gt;exports.InstantTradeButtonWidget=Ta;exports.InstantTradeListButtonWidget=$a;exports.InstantTradeProvider=Qe;exports.InstantTradeSwapProvider=Ea;exports.InstantTradeUI=Xe;exports.InstantTradeWidget=Pr;exports.MultiPresetFormWidget=ot;exports.PresetFormModal=ha;exports.PresetFormUI=be;exports.PresetFormWidget=st;exports.SwapPreviewModal=Oe;exports.SwapRouteExpiredError=de;exports.SwapUI=_e;exports.SwapWidget=Ts;exports.getChainPresetFeatures=le;exports.getDefaultBuyAmounts=yt;exports.getDefaultPresetForChain=_;exports.instantTradeAmountAtomFamily=G;exports.instantTradeAmountKey=z;exports.presetAtomFamily=L;exports.presetKey=D;exports.useAmountPresetInputScript=Ye;exports.useInstantTrade=$e;exports.useInstantTradeAmount=Xa;exports.useInstantTradeButtonScript=ut;exports.useInstantTradeListButtonScript=ct;exports.useInstantTradeScript=je;exports.useInstantTradeSwap=dt;exports.useMultiPresetFormScript=rt;exports.usePresetFormScript=tt;exports.usePresetValues=lo;exports.useSwap=ne;exports.useSwapRoutePolling=Ct;exports.useSwapScript=De;exports.useTxConfirmation=Nt;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map