@liberfi.io/ui-trade 0.1.4 → 0.1.6
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 +235 -47
- package/dist/index.d.mts +217 -41
- package/dist/index.d.ts +217 -41
- 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 +20 -11
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var 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'),jsxRuntime=require('react/jsx-runtime'),utils=require('@liberfi.io/utils'),ae=require('bignumber.js'),hooks=require('@liberfi.io/hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ae__default=/*#__PURE__*/_interopDefault(ae);function kt(e){let t=atob(e),r=new Uint8Array(t.length);for(let a=0;a<t.length;a++)r[a]=t.charCodeAt(a);return r}function Mt(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function re(e){let{client:t}=react$1.useDexClient(),[r,a]=react.useState(false),l=react.useRef(e);l.current=e;let s=react.useCallback(async n=>{let{wallet:o,chain:u,...c}=n;a(true);try{let d;try{d=await t.swapRoute({chain:u,userAddress:o.address,input:c.input,output:c.output,mode:c.mode??types.API.SwapMode.EXACT_IN,amount:c.amount,slippage:c.slippage,priorityFee:c.priorityFee,tipFee:c.tipFee,isAntiMev:c.isAntiMev,permit:c.permit,deadline:c.deadline});}catch(i){let g=i instanceof Error?i:new Error(String(i));throw l.current?.onError?.(g,"route"),g}let m;try{let i=kt(d.serializedTx);m=await o.signTransaction(i);}catch(i){let g=i instanceof Error?i:new Error(String(i));throw l.current?.onError?.(g,"sign"),g}let f;try{let i=Mt(m);f=await t.sendTx({chain:u,serializedTx:i});}catch(i){let g=i instanceof Error?i:new Error(String(i));throw l.current?.onError?.(g,"send"),g}let h={txHash:f.txHash,extra:f.extra};return l.current?.onSubmitted?.(h),h}finally{a(false);}},[t]);return react.useMemo(()=>({swap:s,isSwapping:r}),[s,r])}var _t=12e3;function Ke(e,t){let r=t?.interval??_t,a=t?.paused??false,l=react.useRef(t);l.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!a,o=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return react.useEffect(()=>{o.error&&l.current?.onError?.(o.error);},[o.error]),react.useMemo(()=>({route:o.data,isRouting:o.isFetching,error:o.error}),[o.data,o.isFetching,o.error])}var zt=6e4;function Ge(e){let{client:t}=react$1.useDexClient(),[r,a]=react.useState(()=>new Map),l=react.useRef(e);l.current=e;let s=react.useCallback((c,d)=>{a(m=>{let f=m.get(c);if(!f||f.status===d)return m;let h=new Map(m);return h.set(c,{...f,status:d}),h});},[]),n=react.useCallback((c,d)=>{a(f=>{if(f.has(d))return f;let h=new Map(f);return h.set(d,{chain:c,txHash:d,status:"pending"}),h});let m=l.current?.timeout??zt;t.checkTxSuccess(c,d,m).then(f=>{if(f)s(d,"confirmed"),l.current?.onConfirmed?.(d);else {let h=new Error("Transaction failed on-chain");s(d,"failed"),l.current?.onFailed?.(d,h);}}).catch(f=>{let h=f instanceof Error?f:new Error(String(f));s(d,"failed"),l.current?.onFailed?.(d,h);});},[t,s]),o=react.useCallback(c=>{a(d=>{if(!d.has(c))return d;let m=new Map(d);return m.delete(c),m});},[]),u=react.useCallback(()=>{a(c=>c.size===0?c:new Map);},[]);return react.useMemo(()=>({track:n,clear:o,clearAll:u,transactions:r}),[n,o,u,r])}var Ht=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function Kt(e){return Ht.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Gt=1e4,Xt=15e3;function Zt(e,t){if(e.length===0)return;let a=e[e.length-1].outputAmount;if(!a||a==="0")return "0";let l=a.padStart(t+1,"0"),s=l.slice(0,l.length-t)||"0",o=l.slice(l.length-t).replace(/0+$/,"");return o?`${s}.${o}`:s}function Fe(e){let{chain:t}=e,r=walletConnector.useWallets(),a=Kt(t),l=react.useMemo(()=>r.find(w=>w.chainNamespace===a&&w.isConnected),[r,a]),s=l?.address??"",[n,o]=react.useState(e.from??""),[u,c]=react.useState(e.to??""),d=react.useRef(e.from),m=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&o(e.from));},[e.from]),react.useEffect(()=>{e.to!==m.current&&(m.current=e.to,e.to&&c(e.to));},[e.to]);let f=react.useMemo(()=>[n,u].filter(Boolean),[n,u]),h=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Gt}),i=react.useMemo(()=>h.data?.find(w=>w.address===n)??null,[h.data,n]),g=react.useMemo(()=>h.data?.find(w=>w.address===u)??null,[h.data,u]),v=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:s,tokenAddresses:f},{enabled:!!s&&f.length>0,refetchInterval:Xt}),b=react.useMemo(()=>v.data?.find(w=>w.address===n)??null,[v.data,n]),x=react.useMemo(()=>v.data?.find(w=>w.address===u)??null,[v.data,u]),[T,M]=react.useState(void 0),I=react.useMemo(()=>{if(!T||i?.decimals==null)return;let w=T.split("."),D=w[0]??"0",Pt=(w[1]??"").slice(0,i.decimals).padEnd(i.decimals,"0");return (D+Pt).replace(/^0+/,"")||"0"},[T,i?.decimals]),R=react.useMemo(()=>{if(!T||!i?.marketData?.priceInUsd)return;let w=Number(i.marketData.priceInUsd),D=Number(T)*w;return Number.isFinite(D)?D.toString():void 0},[T,i?.marketData?.priceInUsd]),k=react.useCallback(()=>{if(!b)return;let w=Number(b.amount);if(!Number.isFinite(w)||w<=0)return;let D=w/2,He=i?.decimals??9;M(D.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:He}));},[b,i?.decimals]),U=react.useCallback(()=>{if(!b)return;let w=Number(b.amount);if(!Number.isFinite(w)||w<=0)return;let D=i?.decimals??9;M(w.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:D}));},[b,i?.decimals]),A=react.useMemo(()=>({chain:t,userAddress:s||void 0,input:n||void 0,output:u||void 0,mode:types.API.SwapMode.EXACT_IN,amount:I}),[t,s,n,u,I]),z=react.useRef(false),{route:L,isRouting:q,error:J}=Ke(A,{paused:z.current}),H=react.useMemo(()=>L&&g?Zt(L.plans,g.decimals):void 0,[L,g]),y=react.useMemo(()=>{if(!H||!g?.marketData?.priceInUsd)return;let w=Number(g.marketData.priceInUsd),D=Number(H)*w;return Number.isFinite(D)?D.toString():void 0},[H,g?.marketData?.priceInUsd]),{swap:B,isSwapping:O}=re();z.current=O;let K=react.useRef(e.onComplete);K.current=e.onComplete;let{track:le,transactions:G}=Ge({onConfirmed:w=>{K.current?.({success:true,txHash:w});},onFailed:w=>{K.current?.({success:false,txHash:w});}}),X=react.useMemo(()=>{if(G.size===0)return "idle";let w=Array.from(G.values());return w[w.length-1].status},[G]),Y=react.useCallback(async()=>{if(!(!l||!L||!n||!u||!I))try{let w=await B({chain:t,wallet:l,input:n,output:u,amount:I,mode:types.API.SwapMode.EXACT_IN});le(t,w.txHash);}catch{}},[l,L,t,n,u,I,B,le]),se=h.isPending||v.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:u,setFromTokenAddress:o,setToTokenAddress:c,fromToken:i,toToken:g,fromBalance:b,toBalance:x,amount:T,setAmount:M,setHalfAmount:k,setMaxAmount:U,amountInDecimals:I,amountInUsd:R,outputAmount:H,outputAmountInUsd:y,route:L,isRouting:q,routeError:J,swap:Y,isSwapping:O,txStatus:X,isLoading:se}),[n,u,i,g,b,x,T,k,U,I,R,H,y,L,q,J,Y,O,X,se])}function Me({isOpen:e,onOpenChange:t,fromToken:r,toToken:a,fromBalance:l,inputAmount:s,inputAmountInUsd:n,outputAmount:o,outputAmountInUsd:u,route:c,isRouting:d,routeError:m,onConfirm:f,isSwapping:h}){let[i,g]=react.useState(false),v=react.useCallback(()=>g(x=>!x),[]),b=react.useMemo(()=>c?c.plans.map((x,T)=>({key:`plan-${T}`,name:x.name,input:x.input,inputAmount:x.inputAmount,output:x.output,outputAmount:x.outputAmount,feeQuote:x.feeQuote,feeAmount:x.feeAmount})):[],[c]);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:"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:"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"}),l&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(un,{}),jsxRuntime.jsxs("span",{children:[Ee(l.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:Ee(s)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",et(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"Estimated Receive"}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[a?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:a.image,name:a.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:a?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:he(a?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:Ee(o)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",et(u)]})]})]})]}),i&&b.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:"Route Details"}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:b.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:"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:"Swap"}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[ke(x.inputAmount)," ",he(x.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[ke(x.outputAmount)," ",he(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:"Fee"}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[ke(x.feeAmount)," ",he(x.feeQuote)]})]})]},x.key))})]}),b.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:i?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:v,children:i?"Show Less":"Show More"})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!c||!!m,isLoading:!c&&d||h,onPress:f,children:"Confirm"})})]})})}function un(){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 Ee(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 ke(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 he(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ue({fromToken:e,toToken:t,fromBalance:r,toBalance:a,amount:l,amountInUsd:s,onAmountChange:n,onHalfAmount:o,onMaxAmount:u,outputAmount:c,outputAmountInUsd:d,onFromTokenSelect:m,onToTokenSelect:f,route:h,isRouting:i,routeError:g,onPreview:v,isSwapping:b,className:x}){return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",x),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:"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:l??"",onChange:T=>n(T.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>m(""),children:e?e.symbol:"Select token"})})]}),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 $",at(s)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(rt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[it(r.amount)," ",r.symbol]}),o&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:o,children:"Half"}),u&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:u,children:"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:"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:c??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>f(""),children:t?t.symbol:"Select token"})})]}),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 $",at(d)]}),a&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(rt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[it(a.amount)," ",a.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&i,onPress:v,children:b?"Swapping...":i?"Finding route...":"Swap"})]})}function rt(){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 at(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 it(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 mn({chain:e,from:t,to:r,onComplete:a,className:l}){let s=Fe({chain:e,from:t,to:r,onComplete:a}),{isOpen:n,onOpen:o,onOpenChange:u,onClose:c}=ui.useDisclosure(),d=react.useCallback(async()=>{await s.swap(),c();},[s,c]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ue,{fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,toBalance:s.toBalance,amount:s.amount,amountInUsd:s.amountInUsd,onAmountChange:s.setAmount,onHalfAmount:s.setHalfAmount,onMaxAmount:s.setMaxAmount,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,onFromTokenSelect:s.setFromTokenAddress,onToTokenSelect:s.setToTokenAddress,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onPreview:o,isSwapping:s.isSwapping,className:l}),jsxRuntime.jsx(Me,{isOpen:n,onOpenChange:u,fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,inputAmount:s.amount,inputAmountInUsd:s.amountInUsd,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onConfirm:d,isSwapping:s.isSwapping})]})}var lt={slippage:20,priorityFee:.001,tipFee:.001,autoFee:false,maxAutoFee:.1,antiMev:"off",customRPC:null},ut={slippage:1,priorityFee:5,tipFee:null,autoFee:false,maxAutoFee:null,antiMev:"off",customRPC:null},dt={slippage:1,priorityFee:5,tipFee:.001,autoFee:false,maxAutoFee:null,antiMev:"off",customRPC:null},kr=[.01,.1,1,10],Mr=[10,25,50,100];var Be=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]),ct=new Set([types.Chain.BINANCE,types.Chain.BINANCE_TESTNET]);function te(e,t="ETH"){return Be.has(e)?{feeLabel:"Priority Fee",feeUnit:"SOL",feeDecimals:9,showTipFee:true,tipFeeUnit:"SOL",tipFeeDecimals:9,antiMevOptions:["off","reduced","secure"]}:ct.has(e)?{feeLabel:"Gas Fee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:"BNB",tipFeeDecimals:9,antiMevOptions:["off","secure"]}:{feeLabel:"Gas Fee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:t,tipFeeDecimals:9,antiMevOptions:["off","secure"]}}function gn(e){return Be.has(e)}function $(e){return Be.has(e)?lt:ct.has(e)?dt:ut}function mt(e){let t=$(e);return {buy:{customAmounts:[.01,.1,1,10],presets:[{...t},{...t},{...t}]},sell:{customPercentages:[10,25,50,100],presets:[{...t},{...t},{...t}]}}}var vn=mt("900900900");function pt(e){return `liberfi.instant-trade.settings.${e}`}function Sn(e,t){try{let r=localStorage.getItem(pt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function wn(e,t){try{localStorage.setItem(pt(e),JSON.stringify(t));}catch{}}var ft=react.createContext(null);function ne(){let e=react.useContext(ft);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function _e({chain:e,tokenAddress:t,settings:r,onSettingsChange:a,children:l}){let s=react.useMemo(()=>utils.getNativeToken(e),[e]),n=r!==void 0,o=react.useMemo(()=>mt(e),[e]),[u,c]=react.useState(()=>n?o:Sn(e,o)),d=n?r:u,m=react.useCallback(A=>{n?a?.(A):(c(A),wn(String(e),A));},[n,a,e]),f=react.useCallback(A=>m({...d,buy:A}),[d,m]),h=react.useCallback(A=>m({...d,sell:A}),[d,m]),[i,g]=react.useState("buy"),[v,b]=react.useState(),[x,T]=react.useState(0),[M,I]=react.useState(0),R=react.useMemo(()=>$(e),[e]),k=react.useMemo(()=>{let A=i==="buy"?x:M;return (i==="buy"?d.buy.presets:d.sell.presets)[A]??R},[i,x,M,d,R]),U=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:s,direction:i,setDirection:g,amount:v,setAmount:b,buyPreset:x,setBuyPreset:T,sellPreset:M,setSellPreset:I,settings:d,updateBuySettings:f,updateSellSettings:h,currentPresetValues:k}),[e,t,s,i,v,x,M,d,f,h,k]);return jsxRuntime.jsx(ft.Provider,{value:U,children:l})}var En=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function kn(e){return En.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Mn=15e3,Rn=1e4;function Ve(e){let{chain:t,tokenAddress:r,onSwapSubmitted:a,onSwapError:l}=e,s=ne(),n=react.useMemo(()=>utils.getNativeToken(t),[t]),o=react.useMemo(()=>utils.getWrappedToken(t),[t]),u=walletConnector.useWallets(),c=kn(t),d=react.useMemo(()=>u.find(y=>y.chainNamespace===c&&y.isConnected),[u,c]),m=d?.address??"",f=react.useMemo(()=>{let y=[r];return n&&y.push(n.address),o&&y.push(o.address),y.filter(Boolean)},[r,n,o]),h=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Rn}),i=react.useMemo(()=>h.data?.find(y=>y.address===r)??null,[h.data,r]),g=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:m,tokenAddresses:f},{enabled:!!m&&f.length>0,refetchInterval:Mn}),v=n?.address??o?.address??"",b=react.useMemo(()=>g.data?.find(y=>y.address===v)??null,[g.data,v]),x=react.useMemo(()=>g.data?.find(y=>y.address===r)??null,[g.data,r]),[T,M]=react.useState(false),I=react.useRef(null),R=react.useCallback(y=>{let B=I.current;I.current=y,M(O=>B===null||B!==y?true:!O);},[]),k=react.useRef(a);k.current=a;let U=react.useRef(l);U.current=l;let{swap:A,isSwapping:z}=re({onSubmitted:y=>k.current?.(y),onError:(y,B)=>U.current?.(y,B)}),L=react.useCallback(async()=>{if(!s.amount||!d||!r)return;let y=n?.decimals??9,B=o?.address??n?.address??"",O=s.direction==="buy",K=O?B:r,le=O?r:B,G=O?y:i?.decimals??9,X=new ae__default.default(s.amount).shiftedBy(G).decimalPlaces(0).toString(),Y=s.currentPresetValues,se=$(t),w=new ae__default.default(Y.priorityFee??se.priorityFee??0).shiftedBy(y).decimalPlaces(0).toString(),D=new ae__default.default(Y.tipFee??se.tipFee??0).shiftedBy(y).decimalPlaces(0).toString();try{await A({chain:t,wallet:d,input:K,output:le,amount:X,slippage:Y.slippage??se.slippage??1,priorityFee:w,tipFee:D,isAntiMev:Y.antiMev!=="off"}),s.setAmount(void 0);}catch{}},[s,d,r,n,o,i,t,A]),q=react.useMemo(()=>{let y=s.direction==="buy"?"Buy":"Sell";if(!s.amount)return y;if(s.direction==="buy"){let O=b?.amount;if(O&&new ae__default.default(O).lt(s.amount))return `${y} (Insufficient balance)`;let K=n?.symbol??"";i?.marketData?.priceInUsd?Number(i.marketData.priceInUsd):null;let G=h.data?.find(X=>X.address===v)?.marketData?.priceInUsd;if(G){let X=utils.formatAmountUSD(new ae__default.default(s.amount).times(Number(G)));return `${y} ${s.amount} ${K} (${X})`}return `${y} ${s.amount} ${K}`}let B=x?.amount;return B&&new ae__default.default(B).lt(s.amount)?`${y} (Insufficient balance)`:y},[s.direction,s.amount,b,x,n,i,h.data,v]),J=!s.amount||!d||!r,H=h.isPending||g.isPending;return react.useMemo(()=>({chain:t,tokenAddress:r,nativeToken:n,tokenInfo:i,nativeBalance:b,tokenBalance:x,direction:s.direction,setDirection:s.setDirection,amount:s.amount,setAmount:s.setAmount,buyPreset:s.buyPreset,setBuyPreset:s.setBuyPreset,sellPreset:s.sellPreset,setSellPreset:s.setSellPreset,currentPresetValues:s.currentPresetValues,settings:s.settings,updateBuySettings:s.updateBuySettings,updateSellSettings:s.updateSellSettings,showSettings:T,handlePresetClick:R,swap:L,isSwapping:z,submitText:q,isDisabled:J,isLoading:H}),[t,r,n,i,b,x,s,T,R,L,z,q,J,H])}function me({value:e,onChange:t,chain:r,nativeSymbol:a="SOL",nativeDecimals:l=9,className:s}){let n=react.useCallback(u=>t({...e,...u}),[e,t]),o=react.useMemo(()=>te(r,a),[r,a]);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-1.5",s),children:[jsxRuntime.jsx(Vn,{value:e.slippage,onChange:u=>n({slippage:u})}),jsxRuntime.jsx(Wn,{value:e.priorityFee,onChange:u=>n({priorityFee:u}),label:o.feeLabel,symbol:o.feeUnit,decimals:o.feeDecimals}),o.showTipFee&&jsxRuntime.jsx(zn,{value:e.tipFee,onChange:u=>n({tipFee:u}),symbol:o.tipFeeUnit,decimals:o.tipFeeDecimals}),jsxRuntime.jsx($n,{value:e.autoFee,onChange:u=>n({autoFee:u})}),e.autoFee&&jsxRuntime.jsx(Qn,{value:e.maxAutoFee,onChange:u=>n({maxAutoFee:u}),symbol:a}),jsxRuntime.jsx(Hn,{value:e.antiMev,onChange:u=>n({antiMev:u}),options:o.antiMevOptions}),jsxRuntime.jsx(Kn,{value:e.customRPC,onChange:u=>n({customRPC:u})})]})}var pe={inputWrapper:"bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3 h-8 min-h-0 py-0",input:"text-xs"};function ye(e){return react.useCallback(t=>{typeof t=="number"&&e(isNaN(t)?null:t);},[e])}function Vn({value:e,onChange:t}){let r=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:"Slippage"}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:r,hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:"%"}),classNames:pe,"aria-label":"Slippage"})]})}function Wn({value:e,onChange:t,label:r="Priority Fee",symbol:a,decimals:l}){let s=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:[r,jsxRuntime.jsx(ui.Tooltip,{content:"Extra fee paid to validators to prioritize your transaction.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:s,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:l},endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:a}),classNames:pe,"aria-label":"Priority Fee"})]})}function zn({value:e,onChange:t,symbol:r,decimals:a}){let l=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Tip Fee",jsxRuntime.jsx(ui.Tooltip,{content:"Additional tip sent alongside the transaction (e.g. Jito tip).",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:l,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}),classNames:pe,"aria-label":"Tip Fee"})]})}function $n({value:e,onChange:t}){return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Auto Fee",jsxRuntime.jsx(ui.Tooltip,{content:"Automatically estimate optimal fee based on network conditions.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",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.Switch,{isSelected:e,onValueChange:t,color:"primary",size:"sm","aria-label":"Auto Fee"})})]})}function Qn({value:e,onChange:t,symbol:r}){let a=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:"Max Auto Fee"}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:a,hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}),classNames:pe,"aria-label":"Max Auto Fee"})]})}var jn={off:"Off",reduced:"Reduced",secure:"Secure"};function Hn({value:e,onChange:t,options:r}){return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Anti-MEV",jsxRuntime.jsx(ui.Tooltip,{content:"MEV protection shields your transaction from sandwich attacks.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",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.Tabs,{variant:"bordered",color:"primary",size:"sm",disableAnimation:true,radius:"lg",classNames:{tabList:"border-border border-1 gap-0",tab:"min-h-0 h-5 px-2"},selectedKey:e,onSelectionChange:t,"aria-label":"Anti-MEV",children:r.map(a=>jsxRuntime.jsx(ui.Tab,{title:jn[a]??a},a))})})]})}function Kn({value:e,onChange:t}){return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-xs text-neutral",children:"Custom RPC"}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.Input,{fullWidth:true,value:e??"",onValueChange:r=>t(r||null),classNames:pe,placeholder:"https://...","aria-label":"Custom RPC"})})]})}function $e({chain:e,direction:t,onDirectionChange:r,amount:a,onAmountChange:l,customAmounts:s,customPercentages:n,onQuickAmountClick:o,onQuickPercentageClick:u,onCustomAmountsEdit:c,onCustomPercentagesEdit:d,tokenSymbol:m,nativeSymbol:f,nativeDecimals:h,nativeBalance:i,tokenBalance:g,amountConversion:v,preset:b,onPresetChange:x,presetValues:T,onPresetSettingsChange:M,showSettings:I,onPresetClick:R,submitText:k,isDisabled:U,isLoading:A,onSubmit:z,className:L,headerExtra:q}){return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",L),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:"Buy"},"buy"),jsxRuntime.jsx(ui.Tab,{title:"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:"Market"},"market")}),q]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(rs,{amount:a,onAmountChange:l,customAmounts:s,onQuickAmountClick:o,onCustomAmountsEdit:c,nativeSymbol:f,nativeDecimals:h}):jsxRuntime.jsx(as,{amount:a,onAmountChange:l,customPercentages:n,onQuickPercentageClick:u,onCustomPercentagesEdit:d,tokenSymbol:m})}),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:"Balance:"}),jsxRuntime.jsx("span",{children:t==="buy"?i?`${i} ${f??""}`:"--":g?`${g} ${m??""}`:"--"})]}),v&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:v})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(is,{values:T,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:`${b}`,onSelectionChange:J=>x(Number(J)),disableAnimation:true,"aria-label":"Presets",children:[jsxRuntime.jsx(ui.Tab,{title:"Preset 1",onClick:()=>R(0)},0),jsxRuntime.jsx(ui.Tab,{title:"Preset 2",onClick:()=>R(1)},1),jsxRuntime.jsx(ui.Tab,{title:"Preset 3",onClick:()=>R(2)},2)]})}),I&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(me,{value:T,onChange:M,chain:e,nativeSymbol:f,nativeDecimals:h})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:U,isLoading:A,onPress:z,children:k})]})}function rs({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:a,onCustomAmountsEdit:l,nativeSymbol:s,nativeDecimals:n}){let o=react.useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:o,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),formatOptions:{maximumFractionDigits:n??9},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(St,{values:r,onSelect:a,onEdit:l})]})}function as({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:a,onCustomPercentagesEdit:l,tokenSymbol:s}){let n=react.useCallback(o=>{typeof o=="number"&&t(isNaN(o)?void 0:o);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:n,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),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(St,{values:r,onSelect:a,onEdit:l,suffix:"%"})]})}function St({values:e,onSelect:t,onEdit:r,suffix:a}){let[l,s]=react.useState(false),[n,o]=react.useState([]),u=react.useCallback(()=>{o([...e]),s(true);},[e]),c=react.useCallback(()=>{s(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,m)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",m===0&&"rounded-bl-lg"),children:l?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[m]===null||n[m]===void 0?void 0:n[m],onChange:f=>{if(typeof f=="number"){let h=isNaN(f)?null:f;o(i=>{let g=[...i];return g[m]=h,g});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",m===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[m]!=null&&t(e[m]),endContent:a?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:a}):null,children:e[m]??""})},m))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:l?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:c,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:u,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function is({values:e,chain:t}){let r=react.useMemo(()=>te(t),[t]);return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:"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.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:r.feeLabel,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.formatPrice(e.priorityFee??0)})}),r.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:"Tip Fee",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.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:"Anti-MEV",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsxs(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:[(!e.antiMev||e.antiMev==="off")&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})})]})}function us({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a,settings:l,onSettingsChange:s,headerExtra:n,className:o}){return jsxRuntime.jsx(_e,{chain:e,tokenAddress:t,settings:l,onSettingsChange:s,children:jsxRuntime.jsx(ds,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a,headerExtra:n,className:o})})}function ds({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a,headerExtra:l,className:s}){let n=Ve({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a}),o=react.useCallback(i=>n.setAmount(i),[n]),u=react.useCallback(i=>{let g=n.tokenBalance?.amount;if(!g)return;let v=new ae__default.default(g).times(i).div(100).toNumber();n.setAmount(v);},[n]),c=react.useCallback(i=>{n.updateBuySettings({...n.settings.buy,customAmounts:i});},[n]),d=react.useCallback(i=>{n.updateSellSettings({...n.settings.sell,customPercentages:i});},[n]),m=react.useCallback(i=>{let g=n.direction==="buy",v=g?n.buyPreset:n.sellPreset;if(g){let b=n.settings.buy,x=[...b.presets];x[v]=i,n.updateBuySettings({...b,presets:x});}else {let b=n.settings.sell,x=[...b.presets];x[v]=i,n.updateSellSettings({...b,presets:x});}},[n]),f=react.useCallback(i=>{n.direction==="buy"?n.setBuyPreset(i):n.setSellPreset(i);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx($e,{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:o,onQuickPercentageClick:u,onCustomAmountsEdit:c,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeSymbol:n.nativeToken?.symbol,nativeDecimals:n.nativeToken?.decimals,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:m,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:s,headerExtra:l})}function hs({value:e,onChange:t,chain:r,className:a}){let l=react.useMemo(()=>utils.getNativeToken(r),[r]),s=hooks.useCallbackRef(t),[n,o]=react.useState(e);react.useEffect(()=>{o(e);},[e]);let u=react.useCallback(c=>{o(c),s(c);},[s]);return jsxRuntime.jsx(me,{value:n,onChange:u,chain:r,nativeSymbol:l?.symbol,nativeDecimals:l?.decimals,className:a})}function ks({amount:e,onAmountChange:t,preset:r=0,onPresetChange:a,onPresetClick:l,variant:s="default",radius:n="full",size:o="sm",fullWidth:u=false,className:c}){let{chain:d,nativeToken:m,settings:f}=ne(),h=react.useMemo(()=>$(d),[d]),i=react.useCallback(v=>{typeof v=="number"&&t(isNaN(v)?void 0:v);},[t]),g=react.useCallback(v=>{r===v?l?.(v):a?.(v);},[r,a,l]);return jsxRuntime.jsxs("div",{className:ui.cn("flex items-center gap-1.5 overflow-hidden px-3",n==="full"&&"rounded-full",n==="lg"&&"rounded-lg",n==="md"&&"rounded-md",n==="sm"&&"rounded-sm",s==="bordered"&&"border-1 border-border",s==="default"&&"bg-content2",c),children:[jsxRuntime.jsx("div",{className:ui.cn(u?"w-full":"w-20"),children:jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e,onChange:i,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:m?.decimals??9},startContent:jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-neutral flex-none"}),endContent:m?jsxRuntime.jsx(ui.Avatar,{className:"w-4 h-4 bg-transparent flex-none",name:m.symbol}):null,classNames:{inputWrapper:ui.cn("bg-transparent data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","w-full min-w-0 min-h-0 p-0 rounded-none",o==="sm"&&"h-6",o==="lg"&&"h-8"),input:"text-sm"},placeholder:"0.0","aria-label":"Instant trade amount"})}),jsxRuntime.jsx("div",{className:"w-px bg-border h-4"}),jsxRuntime.jsx("div",{className:"flex items-center gap-1",children:Array.from({length:3}).map((v,b)=>jsxRuntime.jsx(ui.Tooltip,{content:jsxRuntime.jsx(Ms,{values:f.buy.presets[b]??h,chain:d}),placement:"bottom",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("w-auto min-w-0 h-auto min-h-0 px-1 py-0.5 text-xs bg-transparent rounded",{"text-primary hover:bg-primary/20":b===r,"text-neutral hover:bg-content3":b!==r}),disableRipple:true,onPress:()=>g(b),children:`P${b+1}`})},b))})]})}function Ms({values:e,chain:t}){let r=react.useMemo(()=>te(t),[t]);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.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.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.formatPrice(e.tipFee??0)," ",r.tipFeeUnit]})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[(!e.antiMev||e.antiMev==="off")&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14}),e.antiMev==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14}),e.antiMev==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})]})]})}function Os({className:e,children:t}){let{chain:r,tokenAddress:a,nativeToken:l,direction:s,amount:n,setAmount:o,currentPresetValues:u}=ne(),d=walletConnector.useWallets()[0]??null,m=react.useMemo(()=>utils.getWrappedToken(r),[r]),{swap:f,isSwapping:h}=re(),i=!n||!d||!a,g=react.useCallback(async()=>{if(!n||!d||!a)return;let v=l??utils.getNativeToken(r),b=v?.decimals??9,x=m?.address??v?.address??"",T=s==="buy",M=T?x:a,I=T?a:x,R=new ae__default.default(n).shiftedBy(b).decimalPlaces(0).toString(),k=u,U=$(r),A=new ae__default.default(k.priorityFee??U.priorityFee??0).shiftedBy(b).decimalPlaces(0).toString(),z=new ae__default.default(k.tipFee??U.tipFee??0).shiftedBy(b).decimalPlaces(0).toString();try{await f({chain:r,wallet:d,input:M,output:I,amount:R,slippage:k.slippage??U.slippage??1,priorityFee:A,tipFee:z,isAntiMev:k.antiMev!=="off"}),o(void 0);}catch{}},[n,d,a,l,m,r,s,u,f,o]);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:s==="buy"?"primary":"secondary",className:e,disableRipple:true,isDisabled:i,isLoading:h,onPress:g,children:t??(s==="buy"?"Buy":"Sell")})}typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.4");var Ws="0.1.4";
|
|
2
|
-
exports.
|
|
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=Xe;exports.AmountPresetInputWidget=dr;exports.DEFAULT_BSC_TRADE_PRESET=at;exports.DEFAULT_EVM_TRADE_PRESET=rt;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Jn;exports.DEFAULT_SELL_PERCENTAGES=it;exports.DEFAULT_SOL_TRADE_PRESET=st;exports.InstantTradeButton=zr;exports.InstantTradeProvider=Ve;exports.InstantTradeUI=He;exports.InstantTradeWidget=Hs;exports.MultiPresetFormWidget=et;exports.PresetFormModal=Lr;exports.PresetFormUI=ye;exports.PresetFormWidget=Je;exports.SwapPreviewModal=Be;exports.SwapUI=Le;exports.SwapWidget=zn;exports.getChainPresetFeatures=ae;exports.getDefaultBuyAmounts=ot;exports.getDefaultPresetForChain=W;exports.instantTradeAmountAtomFamily=pe;exports.instantTradeAmountKey=ce;exports.presetAtomFamily=H;exports.presetKey=j;exports.useInstantTrade=xe;exports.useInstantTradeAmount=na;exports.useInstantTradeScript=Ke;exports.usePresetValues=fa;exports.useSwap=le;exports.useSwapRoutePolling=mt;exports.useSwapScript=ke;exports.useTxConfirmation=dt;exports.version=Xr;//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|