@liberfi.io/ui-trade 0.1.6 → 0.1.7
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/README.md +98 -1
- package/dist/index.d.mts +246 -21
- package/dist/index.d.ts +246 -21
- 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 jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),ue=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 ue__default=/*#__PURE__*/_interopDefault(ue);var Qt="liberfi.",jt={amount:void 0,preset:0};function Ht(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function zt(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,id:a,chain:o,tokenAddress:n}}function ce(e,t,s,r=Qt){return `${r}:${e}.${t}.${s}`}var pe=jotaiFamily.atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:a}=zt(e);return utils.atomWithStorage(Ht(t,s,String(r),a),jt,void 0,{getOnInit:true})});function na({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return jotai.useAtomValue(pe(ce(e,t,s,r)))}var st={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},rt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},at={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},Xt={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]},Zt=[1,10,25,50];function ot(e){return Xt[e]??Zt}var it=[10,25,50,100];function ae(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let s=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function W(e){return utils$1.isSolanaChain(e)?st:utils$1.isBinanceChain(e)?at:rt}var en="liberfi.";function tn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function nn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,chain:a,direction:o,index:Number(n)}}function j(e,t,s,r=en){return `${r}:${e}.${t}.${s}`}var H=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:a}=nn(e);return utils.atomWithStorage(tn(t,String(s),r,a),W(s),void 0,{getOnInit:true})});function fa({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return jotai.useAtomValue(H(j(e,t,s,r)))}function dn(e){let t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return s}function cn(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function le(e){let{client:t}=react$1.useDexClient(),[s,r]=react.useState(false),a=react.useRef(e);a.current=e;let o=react.useCallback(async n=>{let{wallet:m,chain:i,...l}=n;r(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:m.address,input:l.input,output:l.output,mode:l.mode??types.API.SwapMode.EXACT_IN,amount:l.amount,slippage:l.slippage,priorityFee:l.priorityFee,tipFee:l.tipFee,isAntiMev:l.isAntiMev,permit:l.permit,deadline:l.deadline});}catch(u){let g=u instanceof Error?u:new Error(String(u));throw a.current?.onError?.(g,"route"),g}let c;try{let u=dn(d.serializedTx);c=await m.signTransaction(u);}catch(u){let g=u instanceof Error?u:new Error(String(u));throw a.current?.onError?.(g,"sign"),g}let p;try{let u=cn(c);p=await t.sendTx({chain:i,serializedTx:u});}catch(u){let g=u instanceof Error?u:new Error(String(u));throw a.current?.onError?.(g,"send"),g}let h={txHash:p.txHash,extra:p.extra};return a.current?.onSubmitted?.(h),h}finally{r(false);}},[t]);return react.useMemo(()=>({swap:o,isSwapping:s}),[o,s])}var hn=12e3;function mt(e,t){let s=t?.interval??hn,r=t?.paused??false,a=react.useRef(t);a.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,m=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return react.useEffect(()=>{m.error&&a.current?.onError?.(m.error);},[m.error]),react.useMemo(()=>({route:m.data,isRouting:m.isFetching,error:m.error}),[m.data,m.isFetching,m.error])}var wn=6e4;function dt(e){let{client:t}=react$1.useDexClient(),[s,r]=react.useState(()=>new Map),a=react.useRef(e);a.current=e;let o=react.useCallback((l,d)=>{r(c=>{let p=c.get(l);if(!p||p.status===d)return c;let h=new Map(c);return h.set(l,{...p,status:d}),h});},[]),n=react.useCallback((l,d)=>{r(p=>{if(p.has(d))return p;let h=new Map(p);return h.set(d,{chain:l,txHash:d,status:"pending"}),h});let c=a.current?.timeout??wn;t.checkTxSuccess(l,d,c).then(p=>{if(p)o(d,"confirmed"),a.current?.onConfirmed?.(d);else {let h=new Error("Transaction failed on-chain");o(d,"failed"),a.current?.onFailed?.(d,h);}}).catch(p=>{let h=p instanceof Error?p:new Error(String(p));o(d,"failed"),a.current?.onFailed?.(d,h);});},[t,o]),m=react.useCallback(l=>{r(d=>{if(!d.has(l))return d;let c=new Map(d);return c.delete(l),c});},[]),i=react.useCallback(()=>{r(l=>l.size===0?l:new Map);},[]);return react.useMemo(()=>({track:n,clear:m,clearAll:i,transactions:s}),[n,m,i,s])}var Cn=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function An(e){return Cn.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var In=1e4,Fn=15e3;function En(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let a=r.padStart(t+1,"0"),o=a.slice(0,a.length-t)||"0",m=a.slice(a.length-t).replace(/0+$/,"");return m?`${o}.${m}`:o}function ke(e){let{chain:t}=e,s=walletConnector.useWallets(),r=An(t),a=react.useMemo(()=>s.find(b=>b.chainNamespace===r&&b.isConnected),[s,r]),o=a?.address??"",[n,m]=react.useState(e.from??""),[i,l]=react.useState(e.to??""),d=react.useRef(e.from),c=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&m(e.from));},[e.from]),react.useEffect(()=>{e.to!==c.current&&(c.current=e.to,e.to&&l(e.to));},[e.to]);let p=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:p},{enabled:p.length>0,refetchInterval:In}),u=react.useMemo(()=>h.data?.find(b=>b.address===n)??null,[h.data,n]),g=react.useMemo(()=>h.data?.find(b=>b.address===i)??null,[h.data,i]),P=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:p},{enabled:!!o&&p.length>0,refetchInterval:Fn}),S=react.useMemo(()=>P.data?.find(b=>b.address===n)??null,[P.data,n]),v=react.useMemo(()=>P.data?.find(b=>b.address===i)??null,[P.data,i]),[f,I]=react.useState(void 0),U=react.useMemo(()=>{if(!f||u?.decimals==null)return;let b=f.split("."),B=b[0]??"0",Fe=(b[1]??"").slice(0,u.decimals).padEnd(u.decimals,"0");return (B+Fe).replace(/^0+/,"")||"0"},[f,u?.decimals]),L=react.useMemo(()=>{if(!f||!u?.marketData?.priceInUsd)return;let b=Number(u.marketData.priceInUsd),B=Number(f)*b;return Number.isFinite(B)?B.toString():void 0},[f,u?.marketData?.priceInUsd]),O=react.useCallback(()=>{if(!S)return;let b=Number(S.amount);if(!Number.isFinite(b)||b<=0)return;let B=b/2,ve=u?.decimals??9;I(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[S,u?.decimals]),k=react.useCallback(()=>{if(!S)return;let b=Number(S.amount);if(!Number.isFinite(b)||b<=0)return;let B=u?.decimals??9;I(b.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[S,u?.decimals]),F=react.useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:types.API.SwapMode.EXACT_IN,amount:U}),[t,o,n,i,U]),$=react.useRef(false),{route:C,isRouting:X,error:Z}=mt(F,{paused:$.current}),Q=react.useMemo(()=>C&&g?En(C.plans,g.decimals):void 0,[C,g]),te=react.useMemo(()=>{if(!Q||!g?.marketData?.priceInUsd)return;let b=Number(g.marketData.priceInUsd),B=Number(Q)*b;return Number.isFinite(B)?B.toString():void 0},[Q,g?.marketData?.priceInUsd]),{swap:w,isSwapping:D}=le();$.current=D;let V=react.useRef(e.onComplete);V.current=e.onComplete;let{track:ne,transactions:q}=dt({onConfirmed:b=>{V.current?.({success:true,txHash:b});},onFailed:b=>{V.current?.({success:false,txHash:b});}}),se=react.useMemo(()=>{if(q.size===0)return "idle";let b=Array.from(q.values());return b[b.length-1].status},[q]),J=react.useCallback(async()=>{if(!(!a||!C||!n||!i||!U))try{let b=await w({chain:t,wallet:a,input:n,output:i,amount:U,mode:types.API.SwapMode.EXACT_IN});ne(t,b.txHash);}catch{}},[a,C,t,n,i,U,w,ne]),re=h.isPending||P.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:m,setToTokenAddress:l,fromToken:u,toToken:g,fromBalance:S,toBalance:v,amount:f,setAmount:I,setHalfAmount:O,setMaxAmount:k,amountInDecimals:U,amountInUsd:L,outputAmount:Q,outputAmountInUsd:te,route:C,isRouting:X,routeError:Z,swap:J,isSwapping:D,txStatus:se,isLoading:re}),[n,i,u,g,S,v,f,O,k,U,L,Q,te,C,X,Z,J,D,se,re])}function Be({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:m,outputAmountInUsd:i,route:l,isRouting:d,routeError:c,onConfirm:p,isSwapping:h}){let{t:u}=i18n.useTranslation(),[g,P]=react.useState(false),S=react.useCallback(()=>P(f=>!f),[]),v=react.useMemo(()=>l?l.plans.map((f,I)=>({key:`plan-${I}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.feeAmount})):[],[l]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:u("trade.swap.preview")}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),a&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx($n,{}),jsxRuntime.jsxs("span",{children:[De(a.amount)," ",s?.symbol]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:De(o)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",ht(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:Pe(r?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:De(m)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",ht(i)]})]})]})]}),g&&v.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:v.map(f=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[Re(f.inputAmount)," ",Pe(f.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[Re(f.outputAmount)," ",Pe(f.output)]})]})]}),f.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[Re(f.feeAmount)," ",Pe(f.feeQuote)]})]})]},f.key))})]}),v.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:g?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:S,children:u(g?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!l||!!c,isLoading:!l&&d||h,onPress:p,children:u("common.confirm")})})]})})}function $n(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function ht(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function De(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function Re(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function Pe(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Le({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:m,onMaxAmount:i,outputAmount:l,outputAmountInUsd:d,onFromTokenSelect:c,onToTokenSelect:p,route:h,isRouting:u,routeError:g,onPreview:P,isSwapping:S,className:v}){let{t:f}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",v),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:a??"",onChange:I=>n(I.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",wt(o)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(St,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Pt(s.amount)," ",s.symbol]}),m&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:m,children:f("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),g&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:g.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children: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:l??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:t?t.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",wt(d)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(St,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Pt(r.amount)," ",r.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&u,onPress:P,children:f(S?"trade.swap.swapping":u?"trade.swap.findingRoute":"trade.swap.swap")})]})}function St(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function wt(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Pt(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function zn({chain:e,from:t,to:s,onComplete:r,className:a}){let o=ke({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:m,onOpenChange:i,onClose:l}=ui.useDisclosure(),d=react.useCallback(async()=>{await o.swap(),l();},[o,l]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Le,{fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,toBalance:o.toBalance,amount:o.amount,amountInUsd:o.amountInUsd,onAmountChange:o.setAmount,onHalfAmount:o.setHalfAmount,onMaxAmount:o.setMaxAmount,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,onFromTokenSelect:o.setFromTokenAddress,onToTokenSelect:o.setToTokenAddress,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onPreview:m,isSwapping:o.isSwapping,className:a}),jsxRuntime.jsx(Be,{isOpen:n,onOpenChange:i,fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,inputAmount:o.amount,inputAmountInUsd:o.amountInUsd,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onConfirm:d,isSwapping:o.isSwapping})]})}function Ct(e){let t=W(e),s=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:ot(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...it],presets:[{...t},{...t},{...t}]}}}var Jn=Ct("900900900");function At(e){return `liberfi.instant-trade.settings.${e}`}function Yn(e,t){try{let s=localStorage.getItem(At(String(e)));if(s)return JSON.parse(s)}catch{}return t}function es(e,t){try{localStorage.setItem(At(e),JSON.stringify(t));}catch{}}var It=react.createContext(null);function xe(){let e=react.useContext(It);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ve({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:a}){let o=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=s!==void 0,m=react.useMemo(()=>Ct(e),[e]),[i,l]=react.useState(()=>n?m:Yn(e,m)),d=n?s:i,c=react.useCallback(F=>{n?r?.(F):(l(F),es(String(e),F));},[n,r,e]),p=react.useCallback(F=>c({...d,buy:F}),[d,c]),h=react.useCallback(F=>c({...d,sell:F}),[d,c]),[u,g]=react.useState("buy"),[P,S]=react.useState(),[v,f]=react.useState(0),[I,U]=react.useState(0),L=react.useMemo(()=>W(e),[e]),O=react.useMemo(()=>{let F=u==="buy"?v:I;return (u==="buy"?d.buy.presets:d.sell.presets)[F]??L},[u,v,I,d,L]),k=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:u,setDirection:g,amount:P,setAmount:S,buyPreset:v,setBuyPreset:f,sellPreset:I,setSellPreset:U,settings:d,updateBuySettings:p,updateSellSettings:h,currentPresetValues:O}),[e,t,o,u,P,v,I,d,p,h,O]);return jsxRuntime.jsx(It.Provider,{value:k,children:a})}var cs=15e3,ps=1e4;function Ke(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:a}=e,{t:o}=i18n.useTranslation(),n=xe(),m=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),l=walletConnector.useWallets(),d=utils$1.chainToNamespace(t),c=react.useMemo(()=>l.find(w=>w.chainNamespace===d&&w.isConnected),[l,d]),p=c?.address??"",h=react.useMemo(()=>{let w=[s];return m&&w.push(m.address),i&&w.push(i.address),w.filter(Boolean)},[s,m,i]),u=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:ps}),g=react.useMemo(()=>u.data?.find(w=>w.address===s)??null,[u.data,s]),P=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:p,tokenAddresses:h},{enabled:!!p&&h.length>0,refetchInterval:cs}),S=m?.address??i?.address??"",v=react.useMemo(()=>P.data?.find(w=>w.address===S)??null,[P.data,S]),f=react.useMemo(()=>P.data?.find(w=>w.address===s)??null,[P.data,s]),[I,U]=react.useState(false),L=react.useRef(null),O=react.useCallback(w=>{let D=L.current;L.current=w,U(V=>D===null||D!==w?true:!V);},[]),k=react.useRef(r);k.current=r;let F=react.useRef(a);F.current=a;let{swap:$,isSwapping:C}=le({onSubmitted:w=>k.current?.(w),onError:(w,D)=>F.current?.(w,D)}),X=react.useCallback(async()=>{if(!n.amount||!c||!s)return;let w=m?.decimals??9,D=i?.address??m?.address??"",V=n.direction==="buy",ne=V?D:s,q=V?s:D,se=V?w:g?.decimals??9,J=new ue__default.default(n.amount).shiftedBy(se).decimalPlaces(0).toString(),re=n.currentPresetValues,b=W(t),B=re.slippage??b.slippage??1,ve=re.antiMev!=="off",Fe=utils$1.isSolanaChain(t)?{priorityFee:new ue__default.default(re.priorityFee??b.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new ue__default.default(re.tipFee??b.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:ve}:{};try{await $({chain:t,wallet:c,input:ne,output:q,amount:J,slippage:B,...Fe}),n.setAmount(void 0);}catch{}},[n,c,s,m,i,g,t,$]),Z=react.useMemo(()=>{let w=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let D=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let ne=v?.amount;if(ne&&new ue__default.default(ne).lt(n.amount))return `${w}${D}`;let q=m?.symbol??"",se=u.data?.find(J=>J.address===S)?.marketData?.priceInUsd;if(se){let J=utils$1.formatAmountUSD(new ue__default.default(n.amount).times(Number(se)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:q,usd:J})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:q})}let V=f?.amount;return V&&new ue__default.default(V).lt(n.amount)?`${w}${D}`:w},[o,n.direction,n.amount,v,f,m,u.data,S]),Q=!n.amount||!c||!s,te=u.isPending||P.isPending;return react.useMemo(()=>({chain:t,tokenAddress:s,nativeToken:m,tokenInfo:g,nativeBalance:v,tokenBalance:f,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:I,handlePresetClick:O,swap:X,isSwapping:C,submitText:Z,isDisabled:Q,isLoading:te}),[t,s,m,g,v,f,n,I,O,X,C,Z,Q,te])}function ye({value:e,onChange:t,chain:s,disableAnimation:r,className:a}){let o=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>ae(s),[s]),m=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",a),children:[jsxRuntime.jsx(Ps,{value:e.slippage,onChange:i=>o({slippage:i})}),jsxRuntime.jsx(Ts,{value:e[m],onChange:i=>o({[m]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(Ns,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Cs,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:r}),e.autoFee&&jsxRuntime.jsx(As,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(Is,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsxRuntime.jsx(Fs,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function Ps({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),r=s("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:r}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function Ts({value:e,onChange:t,feeType:s,symbol:r,decimals:a}){let{t:o}=i18n.useTranslation(),n=o(`trade.preset.${s}`),m=o(`trade.preset.${s}.tooltip`);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsxRuntime.jsx(ui.StyledTooltip,{content:m,children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function Ns({value:e,onChange:t,symbol:s,decimals:r}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.tipFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":o})]})}function Cs({value:e,onChange:t,disableAnimation:s}){let{t:r}=i18n.useTranslation(),a=r("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:r("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":a,disableAnimation:s})})]})}function As({value:e,onChange:t,symbol:s}){let{t:r}=i18n.useTranslation(),a=r("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:a}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function Is({value:e,onChange:t,options:s,disableAnimation:r}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),m=react.useMemo(()=>({off:{title:a("trade.preset.antiMev.off"),desc:a("trade.preset.antiMev.off.desc")},reduced:{title:a("trade.preset.antiMev.reduced"),desc:a("trade.preset.antiMev.reduced.desc")},secure:{title:a("trade.preset.antiMev.secure"),desc:a("trade.preset.antiMev.secure.desc")}}),[a]);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:r,"aria-label":o,children:s.map(i=>{let l=n[i],d=m[i];return jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsxs("div",{className:"text-xs",children:[jsxRuntime.jsx("div",{className:"font-medium text-foreground",children:d.title}),jsxRuntime.jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsxRuntime.jsx("span",{className:"flex items-center justify-center",children:jsxRuntime.jsx(l,{width:18,height:18})})})},i)})})})]})}function Fs({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),r=s("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:r}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:a=>t(a||null),placeholder:"https://...","aria-label":r})})]})}function He({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:m,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:c,nativeBalance:p,tokenBalance:h,amountConversion:u,preset:g,onPresetChange:P,presetValues:S,onPresetSettingsChange:v,showSettings:f,onPresetClick:I,submitText:U,isDisabled:L,isLoading:O,onSubmit:k,className:F,headerExtra:$}){let{t:C}=i18n.useTranslation(),X=react.useMemo(()=>utils$1.getNativeToken(e),[e]),Z=X?.symbol,Q=X?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",F),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:C("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:C("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:C("trade.market")},"market")}),$]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(Ws,{amount:r,onAmountChange:a,customAmounts:o,onQuickAmountClick:m,onCustomAmountsEdit:l,nativeSymbol:Z,nativeDecimals:Q,amountLabel:C("trade.amount")}):jsxRuntime.jsx(Ks,{amount:r,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:c,amountLabel:C("trade.amount")})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:C("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?p?`${p} ${Z??""}`:"--":h?`${h} ${c??""}`:"--"})]}),u&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:u})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx($s,{values:S,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${g}`,onSelectionChange:te=>P(Number(te)),disableAnimation:true,"aria-label":C("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:C("trade.preset.label",{n:1}),onClick:()=>I(0)},0),jsxRuntime.jsx(ui.Tab,{title:C("trade.preset.label",{n:2}),onClick:()=>I(1)},1),jsxRuntime.jsx(ui.Tab,{title:C("trade.preset.label",{n:3}),onClick:()=>I(2)},2)]})}),f&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(ye,{value:S,onChange:v,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:L,isLoading:O,onPress:k,children:U})]})}function Ws({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:a,nativeSymbol:o,nativeDecimals:n,amountLabel:m}){let i=react.useCallback(l=>{typeof l=="number"&&t(isNaN(l)?void 0:l);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:m}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx(Dt,{values:s,onSelect:r,onEdit:a})]})}function Ks({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:a,tokenSymbol:o,amountLabel:n}){let m=react.useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:m,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx(Dt,{values:s,onSelect:r,onEdit:a,suffix:"%"})]})}function Dt({values:e,onSelect:t,onEdit:s,suffix:r}){let[a,o]=react.useState(false),[n,m]=react.useState([]),i=react.useCallback(()=>{m([...e]),o(true);},[e]),l=react.useCallback(()=>{o(false),s(n);},[s,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,c)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",c===0&&"rounded-bl-lg"),children:a?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[c]===null||n[c]===void 0?void 0:n[c],onChange:p=>{if(typeof p=="number"){let h=isNaN(p)?null:p;m(u=>{let g=[...u];return g[c]=h,g});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",c===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[c]!=null&&t(e[c]),endContent:r?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[c]??""})},c))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:l,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 $s({values:e,chain:t}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>ae(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:s(`trade.preset.${r.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),r.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${a}`)})})]})}function Hs({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:a,onSettingsChange:o,headerExtra:n,className:m}){return jsxRuntime.jsx(Ve,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsxRuntime.jsx(zs,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:m})})}function zs({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:a,className:o}){let n=Ke({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),m=react.useCallback(u=>n.setAmount(u),[n]),i=react.useCallback(u=>{let g=n.tokenBalance?.amount;if(!g)return;let P=new ue__default.default(g).times(u).div(100).toNumber();n.setAmount(P);},[n]),l=react.useCallback(u=>{n.updateBuySettings({...n.settings.buy,customAmounts:u});},[n]),d=react.useCallback(u=>{n.updateSellSettings({...n.settings.sell,customPercentages:u});},[n]),c=react.useCallback(u=>{let g=n.direction==="buy",P=g?n.buyPreset:n.sellPreset;if(g){let S=n.settings.buy,v=[...S.presets];v[P]=u,n.updateBuySettings({...S,presets:v});}else {let S=n.settings.sell,v=[...S.presets];v[P]=u,n.updateSellSettings({...S,presets:v});}},[n]),p=react.useCallback(u=>{n.direction==="buy"?n.setBuyPreset(u):n.setSellPreset(u);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(He,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:m,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:p,presetValues:n.currentPresetValues,onPresetSettingsChange:c,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function Xe({token:e,chain:t,amount:s,onAmountChange:r,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:m,radius:i="full",size:l="md",className:d}){let{t:c}=i18n.useTranslation(),p=react.useMemo(()=>W(t),[t]),h=react.useCallback(u=>{o?.(Number(u));},[o]);return jsxRuntime.jsxs("div",{className:ui.cn("flex items-center border-2 border-border",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",l==="sm"&&"h-8 pr-2",l==="md"&&"h-10 pr-2.5",l==="lg"&&"h-12 pr-3",d),children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:u=>r(isNaN(u)?void 0:u),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:l,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:l==="sm"?12:l==="md"?16:20,height:l==="sm"?12:l==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:l==="sm"?16:l==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":c("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}}),jsxRuntime.jsx("div",{className:"w-px bg-border self-stretch my-1.5 mx-1.5 flex-none"}),jsxRuntime.jsx(ui.StyledLightTabs,{color:"primary",size:l,selectedKey:String(a),onSelectionChange:h,classNames:{base:"flex-none h-full",tabList:ui.cn("bg-transparent gap-0 h-full",l==="sm"&&"p-0.5",l==="md"&&"p-1",l==="lg"&&"p-1.5"),tab:ui.cn("h-full",l==="sm"&&"text-xs px-2",l==="md"&&"text-sm px-2.5",l==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((u,g)=>jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.Tooltip,{content:jsxRuntime.jsx(lr,{values:m?.[g]??p,chain:t}),placement:"bottom",children:jsxRuntime.jsx("span",{onClick:()=>a===g&&n?.(g),children:c("trade.preset.short",{n:g+1})})})},String(g)))})]})}function lr({values:e,chain:t}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>ae(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils$1.formatPercent((e.slippage??0)/100)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.priorityFee??0)," ",r.feeUnit]})]}),r.showTipFee&&jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.tipFee??0)," ",r.tipFeeUnit]})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:s(`trade.preset.antiMev.${a}`)})]})]})}function dr({id:e,chain:t,token:s,storageKeyPrefix:r,onAmountChange:a,onPresetChange:o,onPresetClick:n,size:m,radius:i,className:l}){let[d,c]=jotai.useAtom(pe(ce(e,t,s.address,r))),p=jotai.useAtomValue(H(j(t,"buy",0,r))),h=jotai.useAtomValue(H(j(t,"buy",1,r))),u=jotai.useAtomValue(H(j(t,"buy",2,r))),g=react.useMemo(()=>[p,h,u],[p,h,u]),P=react.useCallback(v=>{c(f=>({...f,amount:v})),a?.(v);},[c,a]),S=react.useCallback(v=>{c(f=>({...f,preset:v})),o?.(v);},[c,o]);return jsxRuntime.jsx(Xe,{token:s,chain:t,amount:d.amount,onAmountChange:P,preset:d.preset,onPresetChange:S,onPresetClick:n,presetValues:g,size:m,radius:i,className:l})}function Je({chain:e,presetIndex:t=0,storageKeyPrefix:s,onChange:r,disableAnimation:a,className:o}){let{t:n}=i18n.useTranslation(),[m,i]=react.useState("buy"),[l,d]=jotai.useAtom(H(j(e,m,t,s))),c=react.useCallback(p=>{d(p),r?.(m,p);},[d,r,m]);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",o),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:m,onSelectionChange:p=>i(p),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:n("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:n("common.sell")},"sell")]}),jsxRuntime.jsx(ye,{value:l,onChange:c,chain:e,disableAnimation:a})]})}var Nr=3;function et({chain:e,storageKeyPrefix:t,onChange:s,disableAnimation:r,className:a}){let{t:o}=i18n.useTranslation(),[n,m]=react.useState(0),i=react.useCallback((l,d)=>{s?.(n,l,d);},[s,n]);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",a),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:l=>m(Number(l)),disableAnimation:r,"aria-label":o("trade.preset.presets"),children:Array.from({length:Nr},(l,d)=>jsxRuntime.jsx(ui.Tab,{title:o("trade.preset.label",{n:d+1})},String(d)))}),jsxRuntime.jsx(Je,{chain:e,presetIndex:n,storageKeyPrefix:t,onChange:i,disableAnimation:r})]})}var _r="preset";function Lr({id:e=_r}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(Or,{...t})})}function Or({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=i18n.useTranslation(),{chains:a,defaultChain:o,storageKeyPrefix:n,onChange:m}=e,[i,l]=react.useState(o??a[0]),d=react.useCallback((c,p,h)=>{m?.(i,c,p,h);},[m,i]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:r("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:a,chain:i,onSelectChain:l})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(et,{chain:i,storageKeyPrefix:n,onChange:d})})})]})})}function zr({className:e,children:t}){let{t:s}=i18n.useTranslation(),{chain:r,tokenAddress:a,nativeToken:o,direction:n,amount:m,setAmount:i,currentPresetValues:l}=xe(),c=walletConnector.useWallets()[0]??null,p=react.useMemo(()=>utils$1.getWrappedToken(r),[r]),{swap:h,isSwapping:u}=le(),g=!m||!c||!a,P=react.useCallback(async()=>{if(!m||!c||!a)return;let S=o??utils$1.getNativeToken(r),v=S?.decimals??9,f=p?.address??S?.address??"",I=n==="buy",U=I?f:a,L=I?a:f,O=new ue__default.default(m).shiftedBy(v).decimalPlaces(0).toString(),k=l,F=W(r),$=new ue__default.default(k.priorityFee??F.priorityFee??0).shiftedBy(v).decimalPlaces(0).toString(),C=new ue__default.default(k.tipFee??F.tipFee??0).shiftedBy(v).decimalPlaces(0).toString();try{await h({chain:r,wallet:c,input:U,output:L,amount:O,slippage:k.slippage??F.slippage??1,priorityFee:$,tipFee:C,isAntiMev:k.antiMev!=="off"}),i(void 0);}catch{}},[m,c,a,o,p,r,n,l,h,i]);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:n==="buy"?"primary":"secondary",className:e,disableRipple:true,isDisabled:g,isLoading:u,onPress:P,children:t??s(n==="buy"?"common.buy":"common.sell")})}typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.6");var Xr="0.1.6";
|
|
2
|
-
exports.AmountPresetInputUI=
|
|
1
|
+
'use strict';var jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),de=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 de__default=/*#__PURE__*/_interopDefault(de);var sn="liberfi.",an={amount:void 0,preset:0};function on(e,t,r,s){return `${e}instant-trade.${t}.${r}.${s}`}function ln(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[a,o,n]=s.split(".");return {prefix:r,id:a,chain:o,tokenAddress:n}}function z(e,t,r,s=sn){return `${s}:${e}.${t}.${r}`}var H=jotaiFamily.atomFamily(e=>{let{prefix:t,id:r,chain:s,tokenAddress:a}=ln(e);return utils.atomWithStorage(on(t,r,String(s),a),an,void 0,{getOnInit:true})});function Aa({id:e,chain:t,tokenAddress:r,storageKeyPrefix:s}){return jotai.useAtomValue(H(z(e,t,r,s)))}var pt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ct={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ft={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},mn={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]},dn=[1,10,25,50];function gt(e){return mn[e]??dn}var ht=[10,25,50,100];function le(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let r=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:r,feeType:"priorityFee",feeUnit:r,feeDecimals:9,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.isBinanceChain(e)?{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function O(e){return utils$1.isSolanaChain(e)?pt:utils$1.isBinanceChain(e)?ft:ct}var gn="liberfi.";function hn(e,t,r,s){return `${e}preset.${t}.${r}.${s}`}function xn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[a,o,n]=s.split(".");return {prefix:r,chain:a,direction:o,index:Number(n)}}function D(e,t,r,s=gn){return `${s}:${e}.${t}.${r}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:r,direction:s,index:a}=xn(e);return utils.atomWithStorage(hn(t,String(r),s,a),O(r),void 0,{getOnInit:true})});function Wa({chain:e,direction:t,presetIndex:r=0,storageKeyPrefix:s}){return jotai.useAtomValue(L(D(e,t,r,s)))}function Cn(e){let t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}function In(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function te(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(false),a=react.useRef(e);a.current=e;let o=react.useCallback(async n=>{let{wallet:u,chain:i,...l}=n;s(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:u.address,input:l.input,output:l.output,mode:l.mode??types.API.SwapMode.EXACT_IN,amount:l.amount,slippage:l.slippage,priorityFee:l.priorityFee,tipFee:l.tipFee,isAntiMev:l.isAntiMev,permit:l.permit,deadline:l.deadline});}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"route"),f}let p;try{let m=Cn(d.serializedTx);p=await u.signTransaction(m);}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"sign"),f}let c;try{let m=In(p);c=await t.sendTx({chain:i,serializedTx:m});}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"send"),f}let h={txHash:c.txHash,extra:c.extra};return a.current?.onSubmitted?.(h),h}finally{s(false);}},[t]);return react.useMemo(()=>({swap:o,isSwapping:r}),[o,r])}var En=12e3;function bt(e,t){let r=t?.interval??En,s=t?.paused??false,a=react.useRef(t);a.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!s,u=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return react.useEffect(()=>{u.error&&a.current?.onError?.(u.error);},[u.error]),react.useMemo(()=>({route:u.data,isRouting:u.isFetching,error:u.error}),[u.data,u.isFetching,u.error])}var Dn=6e4;function St(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(()=>new Map),a=react.useRef(e);a.current=e;let o=react.useCallback((l,d)=>{s(p=>{let c=p.get(l);if(!c||c.status===d)return p;let h=new Map(p);return h.set(l,{...c,status:d}),h});},[]),n=react.useCallback((l,d)=>{s(c=>{if(c.has(d))return c;let h=new Map(c);return h.set(d,{chain:l,txHash:d,status:"pending"}),h});let p=a.current?.timeout??Dn;t.checkTxSuccess(l,d,p).then(c=>{if(c)o(d,"confirmed"),a.current?.onConfirmed?.(d);else {let h=new Error("Transaction failed on-chain");o(d,"failed"),a.current?.onFailed?.(d,h);}}).catch(c=>{let h=c instanceof Error?c:new Error(String(c));o(d,"failed"),a.current?.onFailed?.(d,h);});},[t,o]),u=react.useCallback(l=>{s(d=>{if(!d.has(l))return d;let p=new Map(d);return p.delete(l),p});},[]),i=react.useCallback(()=>{s(l=>l.size===0?l:new Map);},[]);return react.useMemo(()=>({track:n,clear:u,clearAll:i,transactions:r}),[n,u,i,r])}var On=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function Vn(e){return On.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Kn=1e4,$n=15e3;function Qn(e,t){if(e.length===0)return;let s=e[e.length-1].outputAmount;if(!s||s==="0")return "0";let a=s.padStart(t+1,"0"),o=a.slice(0,a.length-t)||"0",u=a.slice(a.length-t).replace(/0+$/,"");return u?`${o}.${u}`:o}function Re(e){let{chain:t}=e,r=walletConnector.useWallets(),s=Vn(t),a=react.useMemo(()=>r.find(b=>b.chainNamespace===s&&b.isConnected),[r,s]),o=a?.address??"",[n,u]=react.useState(e.from??""),[i,l]=react.useState(e.to??""),d=react.useRef(e.from),p=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&u(e.from));},[e.from]),react.useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&l(e.to));},[e.to]);let c=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:c},{enabled:c.length>0,refetchInterval:Kn}),m=react.useMemo(()=>h.data?.find(b=>b.address===n)??null,[h.data,n]),f=react.useMemo(()=>h.data?.find(b=>b.address===i)??null,[h.data,i]),S=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:c},{enabled:!!o&&c.length>0,refetchInterval:$n}),P=react.useMemo(()=>S.data?.find(b=>b.address===n)??null,[S.data,n]),T=react.useMemo(()=>S.data?.find(b=>b.address===i)??null,[S.data,i]),[x,N]=react.useState(void 0),k=react.useMemo(()=>{if(!x||m?.decimals==null)return;let b=x.split("."),B=b[0]??"0",Fe=(b[1]??"").slice(0,m.decimals).padEnd(m.decimals,"0");return (B+Fe).replace(/^0+/,"")||"0"},[x,m?.decimals]),K=react.useMemo(()=>{if(!x||!m?.marketData?.priceInUsd)return;let b=Number(m.marketData.priceInUsd),B=Number(x)*b;return Number.isFinite(B)?B.toString():void 0},[x,m?.marketData?.priceInUsd]),$=react.useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let B=b/2,be=m?.decimals??9;N(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:be}));},[P,m?.decimals]),j=react.useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let B=m?.decimals??9;N(b.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[P,m?.decimals]),U=react.useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:types.API.SwapMode.EXACT_IN,amount:k}),[t,o,n,i,k]),Z=react.useRef(false),{route:A,isRouting:q,error:J}=bt(U,{paused:Z.current}),Q=react.useMemo(()=>A&&f?Qn(A.plans,f.decimals):void 0,[A,f]),se=react.useMemo(()=>{if(!Q||!f?.marketData?.priceInUsd)return;let b=Number(f.marketData.priceInUsd),B=Number(Q)*b;return Number.isFinite(B)?B.toString():void 0},[Q,f?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=te();Z.current=M;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:Y}=St({onConfirmed:b=>{W.current?.({success:true,txHash:b});},onFailed:b=>{W.current?.({success:false,txHash:b});}}),oe=react.useMemo(()=>{if(Y.size===0)return "idle";let b=Array.from(Y.values());return b[b.length-1].status},[Y]),ee=react.useCallback(async()=>{if(!(!a||!A||!n||!i||!k))try{let b=await w({chain:t,wallet:a,input:n,output:i,amount:k,mode:types.API.SwapMode.EXACT_IN});ae(t,b.txHash);}catch{}},[a,A,t,n,i,k,w,ae]),ie=h.isPending||S.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:u,setToTokenAddress:l,fromToken:m,toToken:f,fromBalance:P,toBalance:T,amount:x,setAmount:N,setHalfAmount:$,setMaxAmount:j,amountInDecimals:k,amountInUsd:K,outputAmount:Q,outputAmountInUsd:se,route:A,isRouting:q,routeError:J,swap:ee,isSwapping:M,txStatus:oe,isLoading:ie}),[n,i,m,f,P,T,x,$,j,k,K,Q,se,A,q,J,ee,M,oe,ie])}function De({isOpen:e,onOpenChange:t,fromToken:r,toToken:s,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:u,outputAmountInUsd:i,route:l,isRouting:d,routeError:p,onConfirm:c,isSwapping:h}){let{t:m}=i18n.useTranslation(),[f,S]=react.useState(false),P=react.useCallback(()=>S(x=>!x),[]),T=react.useMemo(()=>l?l.plans.map((x,N)=>({key:`plan-${N}`,name:x.name,input:x.input,inputAmount:x.inputAmount,output:x.output,outputAmount:x.outputAmount,feeQuote:x.feeQuote,feeAmount:x.feeAmount})):[],[l]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:m("trade.swap.preview")}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),a&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(rr,{}),jsxRuntime.jsxs("span",{children:[ke(a.amount)," ",r?.symbol]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:ke(o)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:we(s?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:ke(u)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(i)]})]})]})]}),f&&T.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:T.map(x=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:x.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[Be(x.inputAmount)," ",we(x.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[Be(x.outputAmount)," ",we(x.output)]})]})]}),x.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[Be(x.feeAmount)," ",we(x.feeQuote)]})]})]},x.key))})]}),T.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:f?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:m(f?"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:!l||!!p,isLoading:!l&&d||h,onPress:c,children:m("common.confirm")})})]})})}function rr(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function It(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function ke(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function Be(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function we(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function _e({fromToken:e,toToken:t,fromBalance:r,toBalance:s,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:u,onMaxAmount:i,outputAmount:l,outputAmountInUsd:d,onFromTokenSelect:p,onToTokenSelect:c,route:h,isRouting:m,routeError:f,onPreview:S,isSwapping:P,className:T}){let{t:x}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",T),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:x("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:a??"",onChange:N=>n(N.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:x("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Et(o)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Ut,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Mt(r.amount)," ",r.symbol]}),u&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:u,children:x("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:x("common.max")})]})]}),f&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:f.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:x("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:l??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:t?t.symbol:x("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Et(d)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Ut,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Mt(s.amount)," ",s.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&m,onPress:S,children:x(P?"trade.swap.swapping":m?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Ut(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Et(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Mt(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function ir({chain:e,from:t,to:r,onComplete:s,className:a}){let o=Re({chain:e,from:t,to:r,onComplete:s}),{isOpen:n,onOpen:u,onOpenChange:i,onClose:l}=ui.useDisclosure(),d=react.useCallback(async()=>{await o.swap(),l();},[o,l]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(_e,{fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,toBalance:o.toBalance,amount:o.amount,amountInUsd:o.amountInUsd,onAmountChange:o.setAmount,onHalfAmount:o.setHalfAmount,onMaxAmount:o.setMaxAmount,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,onFromTokenSelect:o.setFromTokenAddress,onToTokenSelect:o.setToTokenAddress,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onPreview:u,isSwapping:o.isSwapping,className:a}),jsxRuntime.jsx(De,{isOpen:n,onOpenChange:i,fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,inputAmount:o.amount,inputAmountInUsd:o.amountInUsd,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onConfirm:d,isSwapping:o.isSwapping})]})}function Bt(e){let t=O(e),r=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:gt(r),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...ht],presets:[{...t},{...t},{...t}]}}}var pr=Bt("900900900");function Dt(e){return `liberfi.instant-trade.settings.${e}`}function cr(e,t){try{let r=localStorage.getItem(Dt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function fr(e,t){try{localStorage.setItem(Dt(e),JSON.stringify(t));}catch{}}var Lt=react.createContext(null);function Oe(){let e=react.useContext(Lt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ve({chain:e,tokenAddress:t,settings:r,onSettingsChange:s,children:a}){let o=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=r!==void 0,u=react.useMemo(()=>Bt(e),[e]),[i,l]=react.useState(()=>n?u:cr(e,u)),d=n?r:i,p=react.useCallback(U=>{n?s?.(U):(l(U),fr(String(e),U));},[n,s,e]),c=react.useCallback(U=>p({...d,buy:U}),[d,p]),h=react.useCallback(U=>p({...d,sell:U}),[d,p]),[m,f]=react.useState("buy"),[S,P]=react.useState(),[T,x]=react.useState(0),[N,k]=react.useState(0),K=react.useMemo(()=>O(e),[e]),$=react.useMemo(()=>{let U=m==="buy"?T:N;return (m==="buy"?d.buy.presets:d.sell.presets)[U]??K},[m,T,N,d,K]),j=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:m,setDirection:f,amount:S,setAmount:P,buyPreset:T,setBuyPreset:x,sellPreset:N,setSellPreset:k,settings:d,updateBuySettings:c,updateSellSettings:h,currentPresetValues:$}),[e,t,o,m,S,T,N,d,c,h,$]);return jsxRuntime.jsx(Lt.Provider,{value:j,children:a})}var Ir=15e3,Ar=1e4;function $e(e){let{chain:t,tokenAddress:r,onSwapSubmitted:s,onSwapError:a}=e,{t:o}=i18n.useTranslation(),n=Oe(),u=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),l=walletConnector.useWallets(),d=utils$1.chainToNamespace(t),p=react.useMemo(()=>l.find(w=>w.chainNamespace===d&&w.isConnected),[l,d]),c=p?.address??"",h=react.useMemo(()=>{let w=[r];return u&&w.push(u.address),i&&w.push(i.address),w.filter(Boolean)},[r,u,i]),m=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Ar}),f=react.useMemo(()=>m.data?.find(w=>w.address===r)??null,[m.data,r]),S=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:c,tokenAddresses:h},{enabled:!!c&&h.length>0,refetchInterval:Ir}),P=u?.address??i?.address??"",T=react.useMemo(()=>S.data?.find(w=>w.address===P)??null,[S.data,P]),x=react.useMemo(()=>S.data?.find(w=>w.address===r)??null,[S.data,r]),[N,k]=react.useState(false),K=react.useRef(null),$=react.useCallback(w=>{let M=K.current;K.current=w,k(W=>M===null||M!==w?true:!W);},[]),j=react.useRef(s);j.current=s;let U=react.useRef(a);U.current=a;let{swap:Z,isSwapping:A}=te({onSubmitted:w=>j.current?.(w),onError:(w,M)=>U.current?.(w,M)}),q=react.useCallback(async()=>{if(!n.amount||!p||!r)return;let w=u?.decimals??9,M=i?.address??u?.address??"",W=n.direction==="buy",ae=W?M:r,Y=W?r:M,oe=W?w:f?.decimals??9,ee=new de__default.default(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,b=O(t),B=ie.slippage??b.slippage??1,be=ie.antiMev!=="off",Fe=utils$1.isSolanaChain(t)?{priorityFee:new de__default.default(ie.priorityFee??b.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de__default.default(ie.tipFee??b.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:be}:{};try{await Z({chain:t,wallet:p,input:ae,output:Y,amount:ee,slippage:B,...Fe}),n.setAmount(void 0);}catch{}},[n,p,r,u,i,f,t,Z]),J=react.useMemo(()=>{let w=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let M=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=T?.amount;if(ae&&new de__default.default(ae).lt(n.amount))return `${w}${M}`;let Y=u?.symbol??"",oe=m.data?.find(ee=>ee.address===P)?.marketData?.priceInUsd;if(oe){let ee=utils$1.formatAmountUSD(new de__default.default(n.amount).times(Number(oe)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:Y,usd:ee})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:Y})}let W=x?.amount;return W&&new de__default.default(W).lt(n.amount)?`${w}${M}`:w},[o,n.direction,n.amount,T,x,u,m.data,P]),Q=!n.amount||!p||!r,se=m.isPending||S.isPending;return react.useMemo(()=>({chain:t,tokenAddress:r,nativeToken:u,tokenInfo:f,nativeBalance:T,tokenBalance:x,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:N,handlePresetClick:$,swap:q,isSwapping:A,submitText:J,isDisabled:Q,isLoading:se}),[t,r,u,f,T,x,n,N,$,q,A,J,Q,se])}function xe({value:e,onChange:t,chain:r,disableAnimation:s,className:a}){let o=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>le(r),[r]),u=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",a),children:[jsxRuntime.jsx(Lr,{value:e.slippage,onChange:i=>o({slippage:i})}),jsxRuntime.jsx(_r,{value:e[u],onChange:i=>o({[u]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(Wr,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Or,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:s}),e.autoFee&&jsxRuntime.jsx(Vr,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(Kr,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:s}),n.showCustomRPC&&jsxRuntime.jsx($r,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function Lr({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:s}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":s})]})}function _r({value:e,onChange:t,feeType:r,symbol:s,decimals:a}){let{t:o}=i18n.useTranslation(),n=o(`trade.preset.${r}`),u=o(`trade.preset.${r}.tooltip`);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsxRuntime.jsx(ui.StyledTooltip,{content:u,children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":n})]})}function Wr({value:e,onChange:t,symbol:r,decimals:s}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.tipFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:s},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":o})]})}function Or({value:e,onChange:t,disableAnimation:r}){let{t:s}=i18n.useTranslation(),a=s("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:s("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":a,disableAnimation:r})})]})}function Vr({value:e,onChange:t,symbol:r}){let{t:s}=i18n.useTranslation(),a=s("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:a}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":a})]})}function Kr({value:e,onChange:t,options:r,disableAnimation:s}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),u=react.useMemo(()=>({off:{title:a("trade.preset.antiMev.off"),desc:a("trade.preset.antiMev.off.desc")},reduced:{title:a("trade.preset.antiMev.reduced"),desc:a("trade.preset.antiMev.reduced.desc")},secure:{title:a("trade.preset.antiMev.secure"),desc:a("trade.preset.antiMev.secure.desc")}}),[a]);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:s,"aria-label":o,children:r.map(i=>{let l=n[i],d=u[i];return jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsxs("div",{className:"text-xs",children:[jsxRuntime.jsx("div",{className:"font-medium text-foreground",children:d.title}),jsxRuntime.jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsxRuntime.jsx("span",{className:"flex items-center justify-center",children:jsxRuntime.jsx(l,{width:18,height:18})})})},i)})})})]})}function $r({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:s}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:a=>t(a||null),placeholder:"https://...","aria-label":s})})]})}function He({chain:e,direction:t,onDirectionChange:r,amount:s,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:p,nativeBalance:c,tokenBalance:h,amountConversion:m,preset:f,onPresetChange:S,presetValues:P,onPresetSettingsChange:T,showSettings:x,onPresetClick:N,submitText:k,isDisabled:K,isLoading:$,onSubmit:j,className:U,headerExtra:Z}){let{t:A}=i18n.useTranslation(),q=react.useMemo(()=>utils$1.getNativeToken(e),[e]),J=q?.symbol,Q=q?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",U),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:r,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:A("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:A("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:A("trade.market")},"market")}),Z]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(ts,{amount:s,onAmountChange:a,customAmounts:o,onQuickAmountClick:u,onCustomAmountsEdit:l,nativeSymbol:J,nativeDecimals:Q,amountLabel:A("trade.amount")}):jsxRuntime.jsx(ns,{amount:s,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:p,amountLabel:A("trade.amount")})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:A("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?c?`${c} ${J??""}`:"--":h?`${h} ${p??""}`:"--"})]}),m&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:m})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(rs,{values:P,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${f}`,onSelectionChange:se=>S(Number(se)),disableAnimation:true,"aria-label":A("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:A("trade.preset.label",{n:1}),onClick:()=>N(0)},0),jsxRuntime.jsx(ui.Tab,{title:A("trade.preset.label",{n:2}),onClick:()=>N(1)},1),jsxRuntime.jsx(ui.Tab,{title:A("trade.preset.label",{n:3}),onClick:()=>N(2)},2)]})}),x&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(xe,{value:P,onChange:T,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:K,isLoading:$,onPress:j,children:k})]})}function ts({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:s,onCustomAmountsEdit:a,nativeSymbol:o,nativeDecimals:n,amountLabel:u}){let i=react.useCallback(l=>{typeof l=="number"&&t(isNaN(l)?void 0:l);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:u}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx($t,{values:r,onSelect:s,onEdit:a})]})}function ns({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:s,onCustomPercentagesEdit:a,tokenSymbol:o,amountLabel:n}){let u=react.useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:u,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx($t,{values:r,onSelect:s,onEdit:a,suffix:"%"})]})}function $t({values:e,onSelect:t,onEdit:r,suffix:s}){let[a,o]=react.useState(false),[n,u]=react.useState([]),i=react.useCallback(()=>{u([...e]),o(true);},[e]),l=react.useCallback(()=>{o(false),r(n);},[r,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,p)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:a?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:c=>{if(typeof c=="number"){let h=isNaN(c)?null:c;u(m=>{let f=[...m];return f[p]=h,f});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:s?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:s}):null,children:e[p]??""})},p))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:l,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 rs({values:e,chain:t}){let{t:r}=i18n.useTranslation(),s=react.useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:r(`trade.preset.${s.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),s.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:r(`trade.preset.antiMev.${a}`)})})]})}function os({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,settings:a,onSettingsChange:o,headerExtra:n,className:u}){return jsxRuntime.jsx(Ve,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsxRuntime.jsx(is,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:n,className:u})})}function is({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:a,className:o}){let n=$e({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s}),u=react.useCallback(m=>n.setAmount(m),[n]),i=react.useCallback(m=>{let f=n.tokenBalance?.amount;if(!f)return;let S=new de__default.default(f).times(m).div(100).toNumber();n.setAmount(S);},[n]),l=react.useCallback(m=>{n.updateBuySettings({...n.settings.buy,customAmounts:m});},[n]),d=react.useCallback(m=>{n.updateSellSettings({...n.settings.sell,customPercentages:m});},[n]),p=react.useCallback(m=>{let f=n.direction==="buy",S=f?n.buyPreset:n.sellPreset;if(f){let P=n.settings.buy,T=[...P.presets];T[S]=m,n.updateBuySettings({...P,presets:T});}else {let P=n.settings.sell,T=[...P.presets];T[S]=m,n.updateSellSettings({...P,presets:T});}},[n]),c=react.useCallback(m=>{n.direction==="buy"?n.setBuyPreset(m):n.setSellPreset(m);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(He,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:c,presetValues:n.currentPresetValues,onPresetSettingsChange:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function Ze(e){let{id:t,chain:r,token:s,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:u}=e,[i,l]=jotai.useAtom(H(z(t,r,s.address,a))),d=jotai.useAtomValue(L(D(r,"buy",0,a))),p=jotai.useAtomValue(L(D(r,"buy",1,a))),c=jotai.useAtomValue(L(D(r,"buy",2,a))),h=react.useMemo(()=>[d,p,c],[d,p,c]),m=react.useCallback(S=>{l(P=>({...P,amount:S})),o?.(S);},[l,o]),f=react.useCallback(S=>{l(P=>({...P,preset:S})),n?.(S);},[l,n]);return {token:s,chain:r,amount:i.amount,handleAmountChange:m,preset:i.preset,handlePresetChange:f,onPresetClick:u,presetValues:h}}function Je({token:e,chain:t,amount:r,onAmountChange:s,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:u,radius:i="full",size:l="md",className:d}){let{t:p}=i18n.useTranslation(),c=react.useMemo(()=>O(t),[t]),h=react.useCallback(m=>{o?.(Number(m));},[o]);return jsxRuntime.jsxs("div",{className:ui.cn("flex items-center border-2 border-border",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",l==="sm"&&"h-8 pr-2",l==="md"&&"h-10 pr-2.5",l==="lg"&&"h-12 pr-3",d),children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:r,onValueChange:m=>s(isNaN(m)?void 0:m),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:l,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:l==="sm"?12:l==="md"?16:20,height:l==="sm"?12:l==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:l==="sm"?16:l==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}}),jsxRuntime.jsx("div",{className:"w-px bg-border self-stretch my-1.5 mx-1.5 flex-none"}),jsxRuntime.jsx(ui.StyledLightTabs,{color:"primary",size:l,selectedKey:String(a),onSelectionChange:h,classNames:{base:"flex-none h-full",tabList:ui.cn("bg-transparent gap-0 h-full",l==="sm"&&"p-0.5",l==="md"&&"p-1",l==="lg"&&"p-1.5"),tab:ui.cn("h-full",l==="sm"&&"text-xs px-2",l==="md"&&"text-sm px-2.5",l==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((m,f)=>jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.Tooltip,{content:jsxRuntime.jsx(Ts,{values:u?.[f]??c,chain:t}),placement:"bottom",children:jsxRuntime.jsx("span",{onClick:()=>a===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))})]})}function Ts({values:e,chain:t}){let{t:r}=i18n.useTranslation(),s=react.useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils$1.formatPercent((e.slippage??0)/100)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.priorityFee??0)," ",s.feeUnit]})]}),s.showTipFee&&jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.tipFee??0)," ",s.tipFeeUnit]})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:r(`trade.preset.antiMev.${a}`)})]})]})}function Cs({size:e,radius:t,className:r,...s}){let{token:a,chain:o,amount:n,handleAmountChange:u,preset:i,handlePresetChange:l,onPresetClick:d,presetValues:p}=Ze(s);return jsxRuntime.jsx(Je,{token:a,chain:o,amount:n,onAmountChange:u,preset:i,onPresetChange:l,onPresetClick:d,presetValues:p,size:e,radius:t,className:r})}function Ye(e){let{chain:t,presetIndex:r=0,storageKeyPrefix:s,onChange:a}=e,[o,n]=react.useState("buy"),[u,i]=jotai.useAtom(L(D(t,o,r,s))),l=react.useCallback(d=>{i(d),a?.(o,d);},[i,a,o]);return {direction:o,setDirection:n,value:u,handleChange:l}}function tt({disableAnimation:e,className:t,...r}){let{t:s}=i18n.useTranslation(),{direction:a,setDirection:o,value:n,handleChange:u}=Ye(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:a,onSelectionChange:i=>o(i),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:s("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:s("common.sell")},"sell")]}),jsxRuntime.jsx(xe,{value:n,onChange:u,chain:r.chain,disableAnimation:e})]})}var Bs=3;function nt(e){let{onChange:t}=e,[r,s]=react.useState(0),a=react.useCallback((o,n)=>{t?.(r,o,n);},[t,r]);return {presetCount:Bs,presetIndex:r,setPresetIndex:s,handlePresetChange:a}}function st({disableAnimation:e,className:t,...r}){let{t:s}=i18n.useTranslation(),{presetCount:a,presetIndex:o,setPresetIndex:n,handlePresetChange:u}=nt(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(o),onSelectionChange:i=>n(Number(i)),disableAnimation:e,"aria-label":s("trade.preset.presets"),children:Array.from({length:a},(i,l)=>jsxRuntime.jsx(ui.Tab,{title:s("trade.preset.label",{n:l+1})},String(l)))}),jsxRuntime.jsx(tt,{chain:r.chain,presetIndex:o,storageKeyPrefix:r.storageKeyPrefix,onChange:u,disableAnimation:e})]})}var qs="preset";function Js({id:e=qs}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(Ys,{...t})})}function Ys({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:r}){let{t:s}=i18n.useTranslation(),{chains:a,defaultChain:o,storageKeyPrefix:n,onChange:u}=e,[i,l]=react.useState(o??a[0]),d=react.useCallback((p,c,h)=>{u?.(i,p,c,h);},[u,i]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:r,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:s("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:a,chain:i,onSelectChain:l})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(st,{chain:i,storageKeyPrefix:n,onChange:d})})})]})})}function Ne(e,t,r,s,a){let o=O(a),n=new de__default.default(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),u=new de__default.default(s.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de__default.default(s.tipFee??o.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:r,amount:n,slippage:s.slippage??o.slippage??1,priorityFee:u,tipFee:i,isAntiMev:s.antiMev!=="off"}}function it(e){let{id:t,chain:r,token:s,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:u}=e,{amount:i,preset:l}=jotai.useAtomValue(H(z(t,r,s.address,o))),d=jotai.useAtomValue(L(D(r,"buy",l,o))),p=walletConnector.useConnectedWallet(r),{swap:c,isSwapping:h}=te({onSubmitted:n,onError:u}),m=!i||!a,f=walletConnector.useAuthCallback(async()=>{if(!i||!p||!a)return;let S=Ne(i,s,a,d,r);try{await c({...S,chain:r,wallet:p});}catch{}},[p,i,a,r,s,d,c]);return react.useMemo(()=>({amount:i,tokenSymbol:s.symbol,isDisabled:m,isSwapping:h,handleSwap:f}),[i,s.symbol,m,h,f])}function aa({size:e="sm",radius:t,color:r="primary",className:s,...a}){let{amount:o,tokenSymbol:n,isDisabled:u,isSwapping:i,handleSwap:l}=it(a);return jsxRuntime.jsx(ui.StyledButton,{fullWidth:true,size:e,radius:t,color:r,className:s,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:u,isLoading:i,onPress:l,children:o!=null?`${o} ${n}`:n})}var Yt=react.createContext(null);function da({chain:e,onSwapSubmitted:t,onSwapError:r,children:s}){let a=walletConnector.useConnectedWallet(e),{swap:o}=te({onSubmitted:t,onError:r}),n=react.useRef(a);n.current=a;let u=react.useRef(o);u.current=o;let i=react.useRef(e);i.current=e;let l=react.useCallback(async p=>{let c=n.current;if(c)return u.current({...p,wallet:c,chain:i.current})},[]),d=walletConnector.useAuthCallback(l,[]);return jsxRuntime.jsx(Yt.Provider,{value:d,children:s})}function ut(){let e=react.useContext(Yt);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function dt(e){let{id:t,chain:r,token:s,output:a,storageKeyPrefix:o}=e,{amount:n,preset:u}=jotai.useAtomValue(H(z(t,r,s.address,o))),i=jotai.useAtomValue(L(D(r,"buy",u,o))),l=ut(),[d,p]=react.useState(false),c=!n||!a,h=react.useRef(s);h.current=s;let m=react.useRef(i);m.current=i;let f=react.useRef(r);f.current=r;let S=react.useCallback(async()=>{if(!n||!a)return;let P=Ne(n,h.current,a,m.current,f.current);p(true);try{await l(P);}catch{}finally{p(false);}},[n,a,l]);return react.useMemo(()=>({amount:n,tokenSymbol:s.symbol,isDisabled:c,isSwapping:d,handleSwap:S}),[n,s.symbol,c,d,S])}var ba=react.memo(function({size:t="sm",radius:r,color:s="primary",className:a,...o}){let{amount:n,tokenSymbol:u,isDisabled:i,isSwapping:l,handleSwap:d}=dt(o);return jsxRuntime.jsx(ui.StyledButton,{fullWidth:true,size:t,radius:r,color:s,className:a,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:i,isLoading:l,onPress:d,children:n!=null?`${n} ${u}`:u})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.7");var Sa="0.1.7";
|
|
2
|
+
exports.AmountPresetInputUI=Je;exports.AmountPresetInputWidget=Cs;exports.DEFAULT_BSC_TRADE_PRESET=ft;exports.DEFAULT_EVM_TRADE_PRESET=ct;exports.DEFAULT_INSTANT_TRADE_SETTINGS=pr;exports.DEFAULT_SELL_PERCENTAGES=ht;exports.DEFAULT_SOL_TRADE_PRESET=pt;exports.InstantTradeButtonWidget=aa;exports.InstantTradeListButtonWidget=ba;exports.InstantTradeProvider=Ve;exports.InstantTradeSwapProvider=da;exports.InstantTradeUI=He;exports.InstantTradeWidget=os;exports.MultiPresetFormWidget=st;exports.PresetFormModal=Js;exports.PresetFormUI=xe;exports.PresetFormWidget=tt;exports.SwapPreviewModal=De;exports.SwapUI=_e;exports.SwapWidget=ir;exports.getChainPresetFeatures=le;exports.getDefaultBuyAmounts=gt;exports.getDefaultPresetForChain=O;exports.instantTradeAmountAtomFamily=H;exports.instantTradeAmountKey=z;exports.presetAtomFamily=L;exports.presetKey=D;exports.useAmountPresetInputScript=Ze;exports.useInstantTrade=Oe;exports.useInstantTradeAmount=Aa;exports.useInstantTradeButtonScript=it;exports.useInstantTradeListButtonScript=dt;exports.useInstantTradeScript=$e;exports.useInstantTradeSwap=ut;exports.useMultiPresetFormScript=nt;exports.usePresetFormScript=Ye;exports.usePresetValues=Wa;exports.useSwap=te;exports.useSwapRoutePolling=bt;exports.useSwapScript=Re;exports.useTxConfirmation=St;exports.version=Sa;//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|