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