@liberfi.io/ui-trade 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -634,8 +634,8 @@ interface UseInstantTradeButtonParams {
634
634
  interface UseInstantTradeButtonResult {
635
635
  /** Current amount from the atom (user-facing units, e.g. 0.01). */
636
636
  amount: number | undefined;
637
- /** Payment token symbol (e.g. "SOL"). */
638
- tokenSymbol: string;
637
+ /** Payment token (e.g. SOL, ETH). */
638
+ token: PredefinedToken;
639
639
  /** Whether the button should be disabled (no amount or no output). */
640
640
  isDisabled: boolean;
641
641
  /** Whether a swap is currently in progress. */
@@ -714,6 +714,8 @@ interface UsePresetFormScriptParams {
714
714
  chain: Chain;
715
715
  /** Preset index (0, 1, or 2). Defaults to 0. */
716
716
  presetIndex?: number;
717
+ /** Initial buy/sell direction. Defaults to `"buy"`. */
718
+ defaultDirection?: "buy" | "sell";
717
719
  /** Storage key prefix. Defaults to `"liberfi."`. */
718
720
  storageKeyPrefix?: string;
719
721
  /** Notification callback when value changes (does not control state). */
@@ -739,6 +741,8 @@ interface PresetFormWidgetProps extends UsePresetFormScriptParams {
739
741
  interface UseMultiPresetFormScriptParams {
740
742
  /** Target chain — determines default values and visible fields. */
741
743
  chain: Chain;
744
+ /** Initial preset index. Defaults to `0`. */
745
+ defaultPresetIndex?: number;
742
746
  /** Storage key prefix. Defaults to `"liberfi."`. */
743
747
  storageKeyPrefix?: string;
744
748
  /** Notification callback when value changes (does not control state). */
@@ -757,6 +761,8 @@ interface UseMultiPresetFormScriptResult {
757
761
  }
758
762
  /** Props for {@link MultiPresetFormWidget}. */
759
763
  interface MultiPresetFormWidgetProps extends UseMultiPresetFormScriptParams {
764
+ /** Initial buy/sell direction forwarded to {@link PresetFormWidget}. Defaults to `"buy"`. */
765
+ defaultDirection?: "buy" | "sell";
760
766
  disableAnimation?: boolean;
761
767
  className?: string;
762
768
  }
@@ -766,6 +772,10 @@ interface PresetFormModalParams {
766
772
  chains: Chain[];
767
773
  /** Default chain when no param is passed on open. Defaults to first item in `chains`. */
768
774
  defaultChain?: Chain;
775
+ /** Default buy/sell direction when opening. Defaults to `"buy"`. */
776
+ defaultDirection?: "buy" | "sell";
777
+ /** Default preset index when opening. Defaults to `0`. */
778
+ defaultPresetIndex?: number;
769
779
  /** Storage key prefix. Defaults to `"liberfi."`. */
770
780
  storageKeyPrefix?: string;
771
781
  /** Notification callback when any preset value changes. */
@@ -850,7 +860,7 @@ declare function PresetFormWidget({ disableAnimation, className, ...scriptParams
850
860
  * Combines preset index tabs,
851
861
  * and a persisted {@link PresetFormWidget} into a single self-contained editor.
852
862
  */
853
- declare function MultiPresetFormWidget({ disableAnimation, className, ...scriptParams }: MultiPresetFormWidgetProps): react_jsx_runtime.JSX.Element;
863
+ declare function MultiPresetFormWidget({ defaultDirection, disableAnimation, className, ...scriptParams }: MultiPresetFormWidgetProps): react_jsx_runtime.JSX.Element;
854
864
 
855
865
  /**
856
866
  * Async-modal wrapper for multi-chain preset editing.
@@ -1042,6 +1052,6 @@ declare global {
1042
1052
  };
1043
1053
  }
1044
1054
  }
1045
- declare const _default: "0.1.11";
1055
+ declare const _default: "0.1.13";
1046
1056
 
1047
1057
  export { AmountPresetInputUI, type AmountPresetInputUIProps, AmountPresetInputWidget, type AmountPresetInputWidgetProps, type AmountPresetState, type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_SOL_TRADE_PRESET, type FeeType, InstantTradeButtonWidget, type InstantTradeButtonWidgetProps, type InstantTradeContextValue, InstantTradeListButtonWidget, type InstantTradeListButtonWidgetProps, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, type InstantTradeSwapFn, InstantTradeSwapProvider, type InstantTradeSwapProviderProps, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, MultiPresetFormWidget, type MultiPresetFormWidgetProps, type PresetDirection, PresetFormModal, type PresetFormModalParams, PresetFormUI, type PresetFormUIProps, PresetFormWidget, type PresetFormWidgetProps, type SellSettings, type SwapInput, type SwapPhase, SwapPreviewModal, type SwapPreviewModalProps, type SwapResult, SwapUI, type SwapUIProps, SwapWidget, type SwapWidgetProps, type TradePresetValues, type TxConfirmationStatus, type UseAmountPresetInputScriptParams, type UseAmountPresetInputScriptResult, type UseInstantTradeAmountParams, type UseInstantTradeButtonParams, type UseInstantTradeButtonResult, type UseInstantTradeListButtonParams, type UseInstantTradeListButtonResult, type UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseMultiPresetFormScriptParams, type UseMultiPresetFormScriptResult, type UsePresetFormScriptParams, type UsePresetFormScriptResult, type UsePresetValuesParams, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultBuyAmounts, getDefaultPresetForChain, instantTradeAmountAtomFamily, instantTradeAmountKey, presetAtomFamily, presetKey, useAmountPresetInputScript, useInstantTrade, useInstantTradeAmount, useInstantTradeButtonScript, useInstantTradeListButtonScript, useInstantTradeScript, useInstantTradeSwap, useMultiPresetFormScript, usePresetFormScript, usePresetValues, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
package/dist/index.d.ts CHANGED
@@ -634,8 +634,8 @@ interface UseInstantTradeButtonParams {
634
634
  interface UseInstantTradeButtonResult {
635
635
  /** Current amount from the atom (user-facing units, e.g. 0.01). */
636
636
  amount: number | undefined;
637
- /** Payment token symbol (e.g. "SOL"). */
638
- tokenSymbol: string;
637
+ /** Payment token (e.g. SOL, ETH). */
638
+ token: PredefinedToken;
639
639
  /** Whether the button should be disabled (no amount or no output). */
640
640
  isDisabled: boolean;
641
641
  /** Whether a swap is currently in progress. */
@@ -714,6 +714,8 @@ interface UsePresetFormScriptParams {
714
714
  chain: Chain;
715
715
  /** Preset index (0, 1, or 2). Defaults to 0. */
716
716
  presetIndex?: number;
717
+ /** Initial buy/sell direction. Defaults to `"buy"`. */
718
+ defaultDirection?: "buy" | "sell";
717
719
  /** Storage key prefix. Defaults to `"liberfi."`. */
718
720
  storageKeyPrefix?: string;
719
721
  /** Notification callback when value changes (does not control state). */
@@ -739,6 +741,8 @@ interface PresetFormWidgetProps extends UsePresetFormScriptParams {
739
741
  interface UseMultiPresetFormScriptParams {
740
742
  /** Target chain — determines default values and visible fields. */
741
743
  chain: Chain;
744
+ /** Initial preset index. Defaults to `0`. */
745
+ defaultPresetIndex?: number;
742
746
  /** Storage key prefix. Defaults to `"liberfi."`. */
743
747
  storageKeyPrefix?: string;
744
748
  /** Notification callback when value changes (does not control state). */
@@ -757,6 +761,8 @@ interface UseMultiPresetFormScriptResult {
757
761
  }
758
762
  /** Props for {@link MultiPresetFormWidget}. */
759
763
  interface MultiPresetFormWidgetProps extends UseMultiPresetFormScriptParams {
764
+ /** Initial buy/sell direction forwarded to {@link PresetFormWidget}. Defaults to `"buy"`. */
765
+ defaultDirection?: "buy" | "sell";
760
766
  disableAnimation?: boolean;
761
767
  className?: string;
762
768
  }
@@ -766,6 +772,10 @@ interface PresetFormModalParams {
766
772
  chains: Chain[];
767
773
  /** Default chain when no param is passed on open. Defaults to first item in `chains`. */
768
774
  defaultChain?: Chain;
775
+ /** Default buy/sell direction when opening. Defaults to `"buy"`. */
776
+ defaultDirection?: "buy" | "sell";
777
+ /** Default preset index when opening. Defaults to `0`. */
778
+ defaultPresetIndex?: number;
769
779
  /** Storage key prefix. Defaults to `"liberfi."`. */
770
780
  storageKeyPrefix?: string;
771
781
  /** Notification callback when any preset value changes. */
@@ -850,7 +860,7 @@ declare function PresetFormWidget({ disableAnimation, className, ...scriptParams
850
860
  * Combines preset index tabs,
851
861
  * and a persisted {@link PresetFormWidget} into a single self-contained editor.
852
862
  */
853
- declare function MultiPresetFormWidget({ disableAnimation, className, ...scriptParams }: MultiPresetFormWidgetProps): react_jsx_runtime.JSX.Element;
863
+ declare function MultiPresetFormWidget({ defaultDirection, disableAnimation, className, ...scriptParams }: MultiPresetFormWidgetProps): react_jsx_runtime.JSX.Element;
854
864
 
855
865
  /**
856
866
  * Async-modal wrapper for multi-chain preset editing.
@@ -1042,6 +1052,6 @@ declare global {
1042
1052
  };
1043
1053
  }
1044
1054
  }
1045
- declare const _default: "0.1.11";
1055
+ declare const _default: "0.1.13";
1046
1056
 
1047
1057
  export { AmountPresetInputUI, type AmountPresetInputUIProps, AmountPresetInputWidget, type AmountPresetInputWidgetProps, type AmountPresetState, type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_SOL_TRADE_PRESET, type FeeType, InstantTradeButtonWidget, type InstantTradeButtonWidgetProps, type InstantTradeContextValue, InstantTradeListButtonWidget, type InstantTradeListButtonWidgetProps, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, type InstantTradeSwapFn, InstantTradeSwapProvider, type InstantTradeSwapProviderProps, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, MultiPresetFormWidget, type MultiPresetFormWidgetProps, type PresetDirection, PresetFormModal, type PresetFormModalParams, PresetFormUI, type PresetFormUIProps, PresetFormWidget, type PresetFormWidgetProps, type SellSettings, type SwapInput, type SwapPhase, SwapPreviewModal, type SwapPreviewModalProps, type SwapResult, SwapUI, type SwapUIProps, SwapWidget, type SwapWidgetProps, type TradePresetValues, type TxConfirmationStatus, type UseAmountPresetInputScriptParams, type UseAmountPresetInputScriptResult, type UseInstantTradeAmountParams, type UseInstantTradeButtonParams, type UseInstantTradeButtonResult, type UseInstantTradeListButtonParams, type UseInstantTradeListButtonResult, type UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseMultiPresetFormScriptParams, type UseMultiPresetFormScriptResult, type UsePresetFormScriptParams, type UsePresetFormScriptResult, type UsePresetValuesParams, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultBuyAmounts, getDefaultPresetForChain, instantTradeAmountAtomFamily, instantTradeAmountKey, presetAtomFamily, presetKey, useAmountPresetInputScript, useInstantTrade, useInstantTradeAmount, useInstantTradeButtonScript, useInstantTradeListButtonScript, useInstantTradeScript, useInstantTradeSwap, useMultiPresetFormScript, usePresetFormScript, usePresetValues, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- 'use strict';var jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),de=require('bignumber.js'),uiChainSelect=require('@liberfi.io/ui-chain-select'),uiScaffold=require('@liberfi.io/ui-scaffold');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var de__default=/*#__PURE__*/_interopDefault(de);var sn="liberfi.",an={amount:void 0,preset:0};function on(e,t,r,s){return `${e}instant-trade.${t}.${r}.${s}`}function ln(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[a,o,n]=s.split(".");return {prefix:r,id:a,chain:o,tokenAddress:n}}function z(e,t,r,s=sn){return `${s}:${e}.${t}.${r}`}var H=jotaiFamily.atomFamily(e=>{let{prefix:t,id:r,chain:s,tokenAddress:a}=ln(e);return utils.atomWithStorage(on(t,r,String(s),a),an,void 0,{getOnInit:true})});function Aa({id:e,chain:t,tokenAddress:r,storageKeyPrefix:s}){return jotai.useAtomValue(H(z(e,t,r,s)))}var pt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ct={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ft={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},mn={SOL:[.01,.1,1,10],ETH:[.01,.02,.5,1],BNB:[.025,.05,.1,.25],USDC:[25,50,100,200],USDT:[25,50,100,200]},dn=[1,10,25,50];function gt(e){return mn[e]??dn}var ht=[10,25,50,100];function le(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let r=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:r,feeType:"priorityFee",feeUnit:r,feeDecimals:9,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.isBinanceChain(e)?{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function O(e){return utils$1.isSolanaChain(e)?pt:utils$1.isBinanceChain(e)?ft:ct}var gn="liberfi.";function hn(e,t,r,s){return `${e}preset.${t}.${r}.${s}`}function xn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[a,o,n]=s.split(".");return {prefix:r,chain:a,direction:o,index:Number(n)}}function D(e,t,r,s=gn){return `${s}:${e}.${t}.${r}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:r,direction:s,index:a}=xn(e);return utils.atomWithStorage(hn(t,String(r),s,a),O(r),void 0,{getOnInit:true})});function Wa({chain:e,direction:t,presetIndex:r=0,storageKeyPrefix:s}){return jotai.useAtomValue(L(D(e,t,r,s)))}function Cn(e){let t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}function In(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function te(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(false),a=react.useRef(e);a.current=e;let o=react.useCallback(async n=>{let{wallet:u,chain:i,...l}=n;s(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:u.address,input:l.input,output:l.output,mode:l.mode??types.API.SwapMode.EXACT_IN,amount:l.amount,slippage:l.slippage,priorityFee:l.priorityFee,tipFee:l.tipFee,isAntiMev:l.isAntiMev,permit:l.permit,deadline:l.deadline});}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"route"),f}let p;try{let m=Cn(d.serializedTx);p=await u.signTransaction(m);}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"sign"),f}let c;try{let m=In(p);c=await t.sendTx({chain:i,serializedTx:m});}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(f,"send"),f}let h={txHash:c.txHash,extra:c.extra};return a.current?.onSubmitted?.(h),h}finally{s(false);}},[t]);return react.useMemo(()=>({swap:o,isSwapping:r}),[o,r])}var En=12e3;function bt(e,t){let r=t?.interval??En,s=t?.paused??false,a=react.useRef(t);a.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!s,u=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return react.useEffect(()=>{u.error&&a.current?.onError?.(u.error);},[u.error]),react.useMemo(()=>({route:u.data,isRouting:u.isFetching,error:u.error}),[u.data,u.isFetching,u.error])}var Dn=6e4;function St(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(()=>new Map),a=react.useRef(e);a.current=e;let o=react.useCallback((l,d)=>{s(p=>{let c=p.get(l);if(!c||c.status===d)return p;let h=new Map(p);return h.set(l,{...c,status:d}),h});},[]),n=react.useCallback((l,d)=>{s(c=>{if(c.has(d))return c;let h=new Map(c);return h.set(d,{chain:l,txHash:d,status:"pending"}),h});let p=a.current?.timeout??Dn;t.checkTxSuccess(l,d,p).then(c=>{if(c)o(d,"confirmed"),a.current?.onConfirmed?.(d);else {let h=new Error("Transaction failed on-chain");o(d,"failed"),a.current?.onFailed?.(d,h);}}).catch(c=>{let h=c instanceof Error?c:new Error(String(c));o(d,"failed"),a.current?.onFailed?.(d,h);});},[t,o]),u=react.useCallback(l=>{s(d=>{if(!d.has(l))return d;let p=new Map(d);return p.delete(l),p});},[]),i=react.useCallback(()=>{s(l=>l.size===0?l:new Map);},[]);return react.useMemo(()=>({track:n,clear:u,clearAll:i,transactions:r}),[n,u,i,r])}var On=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function Vn(e){return On.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Kn=1e4,$n=15e3;function Qn(e,t){if(e.length===0)return;let s=e[e.length-1].outputAmount;if(!s||s==="0")return "0";let a=s.padStart(t+1,"0"),o=a.slice(0,a.length-t)||"0",u=a.slice(a.length-t).replace(/0+$/,"");return u?`${o}.${u}`:o}function Re(e){let{chain:t}=e,r=walletConnector.useWallets(),s=Vn(t),a=react.useMemo(()=>r.find(b=>b.chainNamespace===s&&b.isConnected),[r,s]),o=a?.address??"",[n,u]=react.useState(e.from??""),[i,l]=react.useState(e.to??""),d=react.useRef(e.from),p=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&u(e.from));},[e.from]),react.useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&l(e.to));},[e.to]);let c=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:c},{enabled:c.length>0,refetchInterval:Kn}),m=react.useMemo(()=>h.data?.find(b=>b.address===n)??null,[h.data,n]),f=react.useMemo(()=>h.data?.find(b=>b.address===i)??null,[h.data,i]),S=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:c},{enabled:!!o&&c.length>0,refetchInterval:$n}),P=react.useMemo(()=>S.data?.find(b=>b.address===n)??null,[S.data,n]),T=react.useMemo(()=>S.data?.find(b=>b.address===i)??null,[S.data,i]),[x,N]=react.useState(void 0),k=react.useMemo(()=>{if(!x||m?.decimals==null)return;let b=x.split("."),B=b[0]??"0",Fe=(b[1]??"").slice(0,m.decimals).padEnd(m.decimals,"0");return (B+Fe).replace(/^0+/,"")||"0"},[x,m?.decimals]),K=react.useMemo(()=>{if(!x||!m?.marketData?.priceInUsd)return;let b=Number(m.marketData.priceInUsd),B=Number(x)*b;return Number.isFinite(B)?B.toString():void 0},[x,m?.marketData?.priceInUsd]),$=react.useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let B=b/2,be=m?.decimals??9;N(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:be}));},[P,m?.decimals]),j=react.useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let B=m?.decimals??9;N(b.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[P,m?.decimals]),U=react.useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:types.API.SwapMode.EXACT_IN,amount:k}),[t,o,n,i,k]),Z=react.useRef(false),{route:A,isRouting:q,error:J}=bt(U,{paused:Z.current}),Q=react.useMemo(()=>A&&f?Qn(A.plans,f.decimals):void 0,[A,f]),se=react.useMemo(()=>{if(!Q||!f?.marketData?.priceInUsd)return;let b=Number(f.marketData.priceInUsd),B=Number(Q)*b;return Number.isFinite(B)?B.toString():void 0},[Q,f?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=te();Z.current=M;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:Y}=St({onConfirmed:b=>{W.current?.({success:true,txHash:b});},onFailed:b=>{W.current?.({success:false,txHash:b});}}),oe=react.useMemo(()=>{if(Y.size===0)return "idle";let b=Array.from(Y.values());return b[b.length-1].status},[Y]),ee=react.useCallback(async()=>{if(!(!a||!A||!n||!i||!k))try{let b=await w({chain:t,wallet:a,input:n,output:i,amount:k,mode:types.API.SwapMode.EXACT_IN});ae(t,b.txHash);}catch{}},[a,A,t,n,i,k,w,ae]),ie=h.isPending||S.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:u,setToTokenAddress:l,fromToken:m,toToken:f,fromBalance:P,toBalance:T,amount:x,setAmount:N,setHalfAmount:$,setMaxAmount:j,amountInDecimals:k,amountInUsd:K,outputAmount:Q,outputAmountInUsd:se,route:A,isRouting:q,routeError:J,swap:ee,isSwapping:M,txStatus:oe,isLoading:ie}),[n,i,m,f,P,T,x,$,j,k,K,Q,se,A,q,J,ee,M,oe,ie])}function De({isOpen:e,onOpenChange:t,fromToken:r,toToken:s,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:u,outputAmountInUsd:i,route:l,isRouting:d,routeError:p,onConfirm:c,isSwapping:h}){let{t:m}=i18n.useTranslation(),[f,S]=react.useState(false),P=react.useCallback(()=>S(x=>!x),[]),T=react.useMemo(()=>l?l.plans.map((x,N)=>({key:`plan-${N}`,name:x.name,input:x.input,inputAmount:x.inputAmount,output:x.output,outputAmount:x.outputAmount,feeQuote:x.feeQuote,feeAmount:x.feeAmount})):[],[l]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:m("trade.swap.preview")}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),a&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(rr,{}),jsxRuntime.jsxs("span",{children:[ke(a.amount)," ",r?.symbol]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:ke(o)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:we(s?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:ke(u)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",It(i)]})]})]})]}),f&&T.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:T.map(x=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:x.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[Be(x.inputAmount)," ",we(x.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[Be(x.outputAmount)," ",we(x.output)]})]})]}),x.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[Be(x.feeAmount)," ",we(x.feeQuote)]})]})]},x.key))})]}),T.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:f?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:m(f?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!l||!!p,isLoading:!l&&d||h,onPress:c,children:m("common.confirm")})})]})})}function rr(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function It(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function ke(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function Be(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function we(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function _e({fromToken:e,toToken:t,fromBalance:r,toBalance:s,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:u,onMaxAmount:i,outputAmount:l,outputAmountInUsd:d,onFromTokenSelect:p,onToTokenSelect:c,route:h,isRouting:m,routeError:f,onPreview:S,isSwapping:P,className:T}){let{t:x}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",T),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:x("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:a??"",onChange:N=>n(N.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:x("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Et(o)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Ut,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Mt(r.amount)," ",r.symbol]}),u&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:u,children:x("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:x("common.max")})]})]}),f&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:f.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:x("trade.swap.to")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:l??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:t?t.symbol:x("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Et(d)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Ut,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Mt(s.amount)," ",s.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&m,onPress:S,children:x(P?"trade.swap.swapping":m?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Ut(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Et(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Mt(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function ir({chain:e,from:t,to:r,onComplete:s,className:a}){let o=Re({chain:e,from:t,to:r,onComplete:s}),{isOpen:n,onOpen:u,onOpenChange:i,onClose:l}=ui.useDisclosure(),d=react.useCallback(async()=>{await o.swap(),l();},[o,l]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(_e,{fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,toBalance:o.toBalance,amount:o.amount,amountInUsd:o.amountInUsd,onAmountChange:o.setAmount,onHalfAmount:o.setHalfAmount,onMaxAmount:o.setMaxAmount,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,onFromTokenSelect:o.setFromTokenAddress,onToTokenSelect:o.setToTokenAddress,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onPreview:u,isSwapping:o.isSwapping,className:a}),jsxRuntime.jsx(De,{isOpen:n,onOpenChange:i,fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,inputAmount:o.amount,inputAmountInUsd:o.amountInUsd,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onConfirm:d,isSwapping:o.isSwapping})]})}function Bt(e){let t=O(e),r=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:gt(r),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...ht],presets:[{...t},{...t},{...t}]}}}var pr=Bt("900900900");function Dt(e){return `liberfi.instant-trade.settings.${e}`}function cr(e,t){try{let r=localStorage.getItem(Dt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function fr(e,t){try{localStorage.setItem(Dt(e),JSON.stringify(t));}catch{}}var Lt=react.createContext(null);function Oe(){let e=react.useContext(Lt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ve({chain:e,tokenAddress:t,settings:r,onSettingsChange:s,children:a}){let o=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=r!==void 0,u=react.useMemo(()=>Bt(e),[e]),[i,l]=react.useState(()=>n?u:cr(e,u)),d=n?r:i,p=react.useCallback(U=>{n?s?.(U):(l(U),fr(String(e),U));},[n,s,e]),c=react.useCallback(U=>p({...d,buy:U}),[d,p]),h=react.useCallback(U=>p({...d,sell:U}),[d,p]),[m,f]=react.useState("buy"),[S,P]=react.useState(),[T,x]=react.useState(0),[N,k]=react.useState(0),K=react.useMemo(()=>O(e),[e]),$=react.useMemo(()=>{let U=m==="buy"?T:N;return (m==="buy"?d.buy.presets:d.sell.presets)[U]??K},[m,T,N,d,K]),j=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:m,setDirection:f,amount:S,setAmount:P,buyPreset:T,setBuyPreset:x,sellPreset:N,setSellPreset:k,settings:d,updateBuySettings:c,updateSellSettings:h,currentPresetValues:$}),[e,t,o,m,S,T,N,d,c,h,$]);return jsxRuntime.jsx(Lt.Provider,{value:j,children:a})}var Ir=15e3,Ar=1e4;function $e(e){let{chain:t,tokenAddress:r,onSwapSubmitted:s,onSwapError:a}=e,{t:o}=i18n.useTranslation(),n=Oe(),u=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),l=walletConnector.useWallets(),d=utils$1.chainToNamespace(t),p=react.useMemo(()=>l.find(w=>w.chainNamespace===d&&w.isConnected),[l,d]),c=p?.address??"",h=react.useMemo(()=>{let w=[r];return u&&w.push(u.address),i&&w.push(i.address),w.filter(Boolean)},[r,u,i]),m=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Ar}),f=react.useMemo(()=>m.data?.find(w=>w.address===r)??null,[m.data,r]),S=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:c,tokenAddresses:h},{enabled:!!c&&h.length>0,refetchInterval:Ir}),P=u?.address??i?.address??"",T=react.useMemo(()=>S.data?.find(w=>w.address===P)??null,[S.data,P]),x=react.useMemo(()=>S.data?.find(w=>w.address===r)??null,[S.data,r]),[N,k]=react.useState(false),K=react.useRef(null),$=react.useCallback(w=>{let M=K.current;K.current=w,k(W=>M===null||M!==w?true:!W);},[]),j=react.useRef(s);j.current=s;let U=react.useRef(a);U.current=a;let{swap:Z,isSwapping:A}=te({onSubmitted:w=>j.current?.(w),onError:(w,M)=>U.current?.(w,M)}),q=react.useCallback(async()=>{if(!n.amount||!p||!r)return;let w=u?.decimals??9,M=i?.address??u?.address??"",W=n.direction==="buy",ae=W?M:r,Y=W?r:M,oe=W?w:f?.decimals??9,ee=new de__default.default(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,b=O(t),B=ie.slippage??b.slippage??1,be=ie.antiMev!=="off",Fe=utils$1.isSolanaChain(t)?{priorityFee:new de__default.default(ie.priorityFee??b.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de__default.default(ie.tipFee??b.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:be}:{};try{await Z({chain:t,wallet:p,input:ae,output:Y,amount:ee,slippage:B,...Fe}),n.setAmount(void 0);}catch{}},[n,p,r,u,i,f,t,Z]),J=react.useMemo(()=>{let w=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let M=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=T?.amount;if(ae&&new de__default.default(ae).lt(n.amount))return `${w}${M}`;let Y=u?.symbol??"",oe=m.data?.find(ee=>ee.address===P)?.marketData?.priceInUsd;if(oe){let ee=utils$1.formatAmountUSD(new de__default.default(n.amount).times(Number(oe)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:Y,usd:ee})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:Y})}let W=x?.amount;return W&&new de__default.default(W).lt(n.amount)?`${w}${M}`:w},[o,n.direction,n.amount,T,x,u,m.data,P]),Q=!n.amount||!p||!r,se=m.isPending||S.isPending;return react.useMemo(()=>({chain:t,tokenAddress:r,nativeToken:u,tokenInfo:f,nativeBalance:T,tokenBalance:x,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:N,handlePresetClick:$,swap:q,isSwapping:A,submitText:J,isDisabled:Q,isLoading:se}),[t,r,u,f,T,x,n,N,$,q,A,J,Q,se])}function xe({value:e,onChange:t,chain:r,disableAnimation:s,className:a}){let o=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>le(r),[r]),u=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",a),children:[jsxRuntime.jsx(Lr,{value:e.slippage,onChange:i=>o({slippage:i})}),jsxRuntime.jsx(_r,{value:e[u],onChange:i=>o({[u]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(Wr,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Or,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:s}),e.autoFee&&jsxRuntime.jsx(Vr,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(Kr,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:s}),n.showCustomRPC&&jsxRuntime.jsx($r,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function Lr({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:s}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":s})]})}function _r({value:e,onChange:t,feeType:r,symbol:s,decimals:a}){let{t:o}=i18n.useTranslation(),n=o(`trade.preset.${r}`),u=o(`trade.preset.${r}.tooltip`);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsxRuntime.jsx(ui.StyledTooltip,{content:u,children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":n})]})}function Wr({value:e,onChange:t,symbol:r,decimals:s}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.tipFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:s},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":o})]})}function Or({value:e,onChange:t,disableAnimation:r}){let{t:s}=i18n.useTranslation(),a=s("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:s("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":a,disableAnimation:r})})]})}function Vr({value:e,onChange:t,symbol:r}){let{t:s}=i18n.useTranslation(),a=s("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:a}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":a})]})}function Kr({value:e,onChange:t,options:r,disableAnimation:s}){let{t:a}=i18n.useTranslation(),o=a("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),u=react.useMemo(()=>({off:{title:a("trade.preset.antiMev.off"),desc:a("trade.preset.antiMev.off.desc")},reduced:{title:a("trade.preset.antiMev.reduced"),desc:a("trade.preset.antiMev.reduced.desc")},secure:{title:a("trade.preset.antiMev.secure"),desc:a("trade.preset.antiMev.secure.desc")}}),[a]);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:s,"aria-label":o,children:r.map(i=>{let l=n[i],d=u[i];return jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsxs("div",{className:"text-xs",children:[jsxRuntime.jsx("div",{className:"font-medium text-foreground",children:d.title}),jsxRuntime.jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsxRuntime.jsx("span",{className:"flex items-center justify-center",children:jsxRuntime.jsx(l,{width:18,height:18})})})},i)})})})]})}function $r({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:s}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:a=>t(a||null),placeholder:"https://...","aria-label":s})})]})}function He({chain:e,direction:t,onDirectionChange:r,amount:s,onAmountChange:a,customAmounts:o,customPercentages:n,onQuickAmountClick:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:p,nativeBalance:c,tokenBalance:h,amountConversion:m,preset:f,onPresetChange:S,presetValues:P,onPresetSettingsChange:T,showSettings:x,onPresetClick:N,submitText:k,isDisabled:K,isLoading:$,onSubmit:j,className:U,headerExtra:Z}){let{t:A}=i18n.useTranslation(),q=react.useMemo(()=>utils$1.getNativeToken(e),[e]),J=q?.symbol,Q=q?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",U),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:r,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:A("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:A("common.sell")},"sell")]}),jsxRuntime.jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsxRuntime.jsx(ui.Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsxRuntime.jsx(ui.Tab,{title:A("trade.market")},"market")}),Z]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(ts,{amount:s,onAmountChange:a,customAmounts:o,onQuickAmountClick:u,onCustomAmountsEdit:l,nativeSymbol:J,nativeDecimals:Q,amountLabel:A("trade.amount")}):jsxRuntime.jsx(ns,{amount:s,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:p,amountLabel:A("trade.amount")})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:A("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?c?`${c} ${J??""}`:"--":h?`${h} ${p??""}`:"--"})]}),m&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:m})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(rs,{values:P,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${f}`,onSelectionChange:se=>S(Number(se)),disableAnimation:true,"aria-label":A("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:A("trade.preset.label",{n:1}),onClick:()=>N(0)},0),jsxRuntime.jsx(ui.Tab,{title:A("trade.preset.label",{n:2}),onClick:()=>N(1)},1),jsxRuntime.jsx(ui.Tab,{title:A("trade.preset.label",{n:3}),onClick:()=>N(2)},2)]})}),x&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(xe,{value:P,onChange:T,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:K,isLoading:$,onPress:j,children:k})]})}function ts({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:s,onCustomAmountsEdit:a,nativeSymbol:o,nativeDecimals:n,amountLabel:u}){let i=react.useCallback(l=>{typeof l=="number"&&t(isNaN(l)?void 0:l);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:u}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx($t,{values:r,onSelect:s,onEdit:a})]})}function ns({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:s,onCustomPercentagesEdit:a,tokenSymbol:o,amountLabel:n}){let u=react.useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:u,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx($t,{values:r,onSelect:s,onEdit:a,suffix:"%"})]})}function $t({values:e,onSelect:t,onEdit:r,suffix:s}){let[a,o]=react.useState(false),[n,u]=react.useState([]),i=react.useCallback(()=>{u([...e]),o(true);},[e]),l=react.useCallback(()=>{o(false),r(n);},[r,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,p)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:a?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:c=>{if(typeof c=="number"){let h=isNaN(c)?null:c;u(m=>{let f=[...m];return f[p]=h,f});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:s?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:s}):null,children:e[p]??""})},p))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:l,children:jsxRuntime.jsx(ui.CheckIcon,{width:12,height:12})}):jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function rs({values:e,chain:t}){let{t:r}=i18n.useTranslation(),s=react.useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:r(`trade.preset.${s.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),s.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:r(`trade.preset.antiMev.${a}`)})})]})}function os({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,settings:a,onSettingsChange:o,headerExtra:n,className:u}){return jsxRuntime.jsx(Ve,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsxRuntime.jsx(is,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:n,className:u})})}function is({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:a,className:o}){let n=$e({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s}),u=react.useCallback(m=>n.setAmount(m),[n]),i=react.useCallback(m=>{let f=n.tokenBalance?.amount;if(!f)return;let S=new de__default.default(f).times(m).div(100).toNumber();n.setAmount(S);},[n]),l=react.useCallback(m=>{n.updateBuySettings({...n.settings.buy,customAmounts:m});},[n]),d=react.useCallback(m=>{n.updateSellSettings({...n.settings.sell,customPercentages:m});},[n]),p=react.useCallback(m=>{let f=n.direction==="buy",S=f?n.buyPreset:n.sellPreset;if(f){let P=n.settings.buy,T=[...P.presets];T[S]=m,n.updateBuySettings({...P,presets:T});}else {let P=n.settings.sell,T=[...P.presets];T[S]=m,n.updateSellSettings({...P,presets:T});}},[n]),c=react.useCallback(m=>{n.direction==="buy"?n.setBuyPreset(m):n.setSellPreset(m);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(He,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:c,presetValues:n.currentPresetValues,onPresetSettingsChange:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function Ze(e){let{id:t,chain:r,token:s,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:u}=e,[i,l]=jotai.useAtom(H(z(t,r,s.address,a))),d=jotai.useAtomValue(L(D(r,"buy",0,a))),p=jotai.useAtomValue(L(D(r,"buy",1,a))),c=jotai.useAtomValue(L(D(r,"buy",2,a))),h=react.useMemo(()=>[d,p,c],[d,p,c]),m=react.useCallback(S=>{l(P=>({...P,amount:S})),o?.(S);},[l,o]),f=react.useCallback(S=>{l(P=>({...P,preset:S})),n?.(S);},[l,n]);return {token:s,chain:r,amount:i.amount,handleAmountChange:m,preset:i.preset,handlePresetChange:f,onPresetClick:u,presetValues:h}}function Je({token:e,chain:t,amount:r,onAmountChange:s,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:u,radius:i="full",size:l="md",className:d}){let{t:p}=i18n.useTranslation(),c=react.useMemo(()=>O(t),[t]),h=react.useCallback(m=>{o?.(Number(m));},[o]);return jsxRuntime.jsxs("div",{className:ui.cn("flex items-center border-2 border-border",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",l==="sm"&&"h-8 pr-2",l==="md"&&"h-10 pr-2.5",l==="lg"&&"h-12 pr-3",d),children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:r,onValueChange:m=>s(isNaN(m)?void 0:m),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:l,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:l==="sm"?12:l==="md"?16:20,height:l==="sm"?12:l==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:l==="sm"?16:l==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}}),jsxRuntime.jsx("div",{className:"w-px bg-border self-stretch my-1.5 mx-1.5 flex-none"}),jsxRuntime.jsx(ui.StyledLightTabs,{color:"primary",size:l,selectedKey:String(a),onSelectionChange:h,classNames:{base:"flex-none h-full",tabList:ui.cn("bg-transparent gap-0 h-full",l==="sm"&&"p-0.5",l==="md"&&"p-1",l==="lg"&&"p-1.5"),tab:ui.cn("h-full",l==="sm"&&"text-xs px-2",l==="md"&&"text-sm px-2.5",l==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((m,f)=>jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.Tooltip,{content:jsxRuntime.jsx(Ts,{values:u?.[f]??c,chain:t}),placement:"bottom",children:jsxRuntime.jsx("span",{onClick:()=>a===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))})]})}function Ts({values:e,chain:t}){let{t:r}=i18n.useTranslation(),s=react.useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils$1.formatPercent((e.slippage??0)/100)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.priorityFee??0)," ",s.feeUnit]})]}),s.showTipFee&&jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.tipFee??0)," ",s.tipFeeUnit]})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:r(`trade.preset.antiMev.${a}`)})]})]})}function Cs({size:e,radius:t,className:r,...s}){let{token:a,chain:o,amount:n,handleAmountChange:u,preset:i,handlePresetChange:l,onPresetClick:d,presetValues:p}=Ze(s);return jsxRuntime.jsx(Je,{token:a,chain:o,amount:n,onAmountChange:u,preset:i,onPresetChange:l,onPresetClick:d,presetValues:p,size:e,radius:t,className:r})}function Ye(e){let{chain:t,presetIndex:r=0,storageKeyPrefix:s,onChange:a}=e,[o,n]=react.useState("buy"),[u,i]=jotai.useAtom(L(D(t,o,r,s))),l=react.useCallback(d=>{i(d),a?.(o,d);},[i,a,o]);return {direction:o,setDirection:n,value:u,handleChange:l}}function tt({disableAnimation:e,className:t,...r}){let{t:s}=i18n.useTranslation(),{direction:a,setDirection:o,value:n,handleChange:u}=Ye(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:a,onSelectionChange:i=>o(i),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:s("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:s("common.sell")},"sell")]}),jsxRuntime.jsx(xe,{value:n,onChange:u,chain:r.chain,disableAnimation:e})]})}var Bs=3;function nt(e){let{onChange:t}=e,[r,s]=react.useState(0),a=react.useCallback((o,n)=>{t?.(r,o,n);},[t,r]);return {presetCount:Bs,presetIndex:r,setPresetIndex:s,handlePresetChange:a}}function st({disableAnimation:e,className:t,...r}){let{t:s}=i18n.useTranslation(),{presetCount:a,presetIndex:o,setPresetIndex:n,handlePresetChange:u}=nt(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(o),onSelectionChange:i=>n(Number(i)),disableAnimation:e,"aria-label":s("trade.preset.presets"),children:Array.from({length:a},(i,l)=>jsxRuntime.jsx(ui.Tab,{title:s("trade.preset.label",{n:l+1})},String(l)))}),jsxRuntime.jsx(tt,{chain:r.chain,presetIndex:o,storageKeyPrefix:r.storageKeyPrefix,onChange:u,disableAnimation:e})]})}var qs="preset";function Js({id:e=qs}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(Ys,{...t})})}function Ys({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:r}){let{t:s}=i18n.useTranslation(),{chains:a,defaultChain:o,storageKeyPrefix:n,onChange:u}=e,[i,l]=react.useState(o??a[0]),d=react.useCallback((p,c,h)=>{u?.(i,p,c,h);},[u,i]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:r,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:s("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:a,chain:i,onSelectChain:l})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(st,{chain:i,storageKeyPrefix:n,onChange:d})})})]})})}function Ne(e,t,r,s,a){let o=O(a),n=new de__default.default(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),u=new de__default.default(s.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de__default.default(s.tipFee??o.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:r,amount:n,slippage:s.slippage??o.slippage??1,priorityFee:u,tipFee:i,isAntiMev:s.antiMev!=="off"}}function it(e){let{id:t,chain:r,token:s,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:u}=e,{amount:i,preset:l}=jotai.useAtomValue(H(z(t,r,s.address,o))),d=jotai.useAtomValue(L(D(r,"buy",l,o))),p=walletConnector.useConnectedWallet(r),{swap:c,isSwapping:h}=te({onSubmitted:n,onError:u}),m=!i||!a,f=walletConnector.useAuthCallback(async()=>{if(!i||!p||!a)return;let S=Ne(i,s,a,d,r);try{await c({...S,chain:r,wallet:p});}catch{}},[p,i,a,r,s,d,c]);return react.useMemo(()=>({amount:i,tokenSymbol:s.symbol,isDisabled:m,isSwapping:h,handleSwap:f}),[i,s.symbol,m,h,f])}function aa({size:e="sm",radius:t,color:r="primary",className:s,...a}){let{amount:o,tokenSymbol:n,isDisabled:u,isSwapping:i,handleSwap:l}=it(a);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:t,color:r,className:s,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:u,isLoading:i,onPress:l,children:o!=null?`${o} ${n}`:n})}var Yt=react.createContext(null);function da({chain:e,onSwapSubmitted:t,onSwapError:r,children:s}){let a=walletConnector.useConnectedWallet(e),{swap:o}=te({onSubmitted:t,onError:r}),n=react.useRef(a);n.current=a;let u=react.useRef(o);u.current=o;let i=react.useRef(e);i.current=e;let l=react.useCallback(async p=>{let c=n.current;if(c)return u.current({...p,wallet:c,chain:i.current})},[]),d=walletConnector.useAuthCallback(l,[]);return jsxRuntime.jsx(Yt.Provider,{value:d,children:s})}function ut(){let e=react.useContext(Yt);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function dt(e){let{id:t,chain:r,token:s,output:a,storageKeyPrefix:o}=e,{amount:n,preset:u}=jotai.useAtomValue(H(z(t,r,s.address,o))),i=jotai.useAtomValue(L(D(r,"buy",u,o))),l=ut(),[d,p]=react.useState(false),c=!n||!a,h=react.useRef(s);h.current=s;let m=react.useRef(i);m.current=i;let f=react.useRef(r);f.current=r;let S=react.useCallback(async()=>{if(!n||!a)return;let P=Ne(n,h.current,a,m.current,f.current);p(true);try{await l(P);}catch{}finally{p(false);}},[n,a,l]);return react.useMemo(()=>({amount:n,tokenSymbol:s.symbol,isDisabled:c,isSwapping:d,handleSwap:S}),[n,s.symbol,c,d,S])}var ba=react.memo(function({size:t="sm",radius:r,color:s="primary",className:a,...o}){let{amount:n,tokenSymbol:u,isDisabled:i,isSwapping:l,handleSwap:d}=dt(o);return jsxRuntime.jsx(ui.Button,{variant:"solid",fullWidth:true,size:t,radius:r,color:s,className:a,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:i,isLoading:l,onPress:d,children:n!=null?`${n} ${u}`:u})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.11");var Sa="0.1.11";
2
- exports.AmountPresetInputUI=Je;exports.AmountPresetInputWidget=Cs;exports.DEFAULT_BSC_TRADE_PRESET=ft;exports.DEFAULT_EVM_TRADE_PRESET=ct;exports.DEFAULT_INSTANT_TRADE_SETTINGS=pr;exports.DEFAULT_SELL_PERCENTAGES=ht;exports.DEFAULT_SOL_TRADE_PRESET=pt;exports.InstantTradeButtonWidget=aa;exports.InstantTradeListButtonWidget=ba;exports.InstantTradeProvider=Ve;exports.InstantTradeSwapProvider=da;exports.InstantTradeUI=He;exports.InstantTradeWidget=os;exports.MultiPresetFormWidget=st;exports.PresetFormModal=Js;exports.PresetFormUI=xe;exports.PresetFormWidget=tt;exports.SwapPreviewModal=De;exports.SwapUI=_e;exports.SwapWidget=ir;exports.getChainPresetFeatures=le;exports.getDefaultBuyAmounts=gt;exports.getDefaultPresetForChain=O;exports.instantTradeAmountAtomFamily=H;exports.instantTradeAmountKey=z;exports.presetAtomFamily=L;exports.presetKey=D;exports.useAmountPresetInputScript=Ze;exports.useInstantTrade=Oe;exports.useInstantTradeAmount=Aa;exports.useInstantTradeButtonScript=it;exports.useInstantTradeListButtonScript=dt;exports.useInstantTradeScript=$e;exports.useInstantTradeSwap=ut;exports.useMultiPresetFormScript=nt;exports.usePresetFormScript=Ye;exports.usePresetValues=Wa;exports.useSwap=te;exports.useSwapRoutePolling=bt;exports.useSwapScript=Re;exports.useTxConfirmation=St;exports.version=Sa;//# sourceMappingURL=index.js.map
1
+ 'use strict';var jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),de=require('bignumber.js'),uiChainSelect=require('@liberfi.io/ui-chain-select'),uiScaffold=require('@liberfi.io/ui-scaffold');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var de__default=/*#__PURE__*/_interopDefault(de);var rn="liberfi.",an={amount:void 0,preset:0};function on(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function ln(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 H(e,t,s,r=rn){return `${r}:${e}.${t}.${s}`}var G=jotaiFamily.atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:a}=ln(e);return utils.atomWithStorage(on(t,s,String(r),a),an,void 0,{getOnInit:true})});function Aa({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return jotai.useAtomValue(G(H(e,t,s,r)))}var pt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},ct={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ft={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},mn={SOL:[.01,.1,1,10],ETH:[.01,.02,.5,1],BNB:[.025,.05,.1,.25],USDC:[25,50,100,200],USDT:[25,50,100,200]},dn=[1,10,25,50];function gt(e){return mn[e]??dn}var xt=[10,25,50,100];function le(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let 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 O(e){return utils$1.isSolanaChain(e)?pt:utils$1.isBinanceChain(e)?ft:ct}var gn="liberfi.";function xn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function hn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[a,o,n]=r.split(".");return {prefix:s,chain:a,direction:o,index:Number(n)}}function D(e,t,s,r=gn){return `${r}:${e}.${t}.${s}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:a}=hn(e);return utils.atomWithStorage(xn(t,String(s),r,a),O(s),void 0,{getOnInit:true})});function Oa({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return jotai.useAtomValue(L(D(e,t,s,r)))}function Nn(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 ne(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:u,chain:i,...l}=n;r(true);try{let d;try{d=await t.swapRoute({chain:i,userAddress:u.address,input:l.input,output:l.output,mode:l.mode??types.API.SwapMode.EXACT_IN,amount:l.amount,slippage:l.slippage,priorityFee:l.priorityFee,tipFee:l.tipFee,isAntiMev:l.isAntiMev,permit:l.permit,deadline:l.deadline});}catch(m){let c=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(c,"route"),c}let p;try{let m=Nn(d.serializedTx);p=await u.signTransaction(m);}catch(m){let c=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(c,"sign"),c}let f;try{let m=Cn(p);f=await t.sendTx({chain:i,serializedTx:m});}catch(m){let c=m instanceof Error?m:new Error(String(m));throw a.current?.onError?.(c,"send"),c}let x={txHash:f.txHash,extra:f.extra};return a.current?.onSubmitted?.(x),x}finally{r(false);}},[t]);return react.useMemo(()=>({swap:o,isSwapping:s}),[o,s])}var En=12e3;function bt(e,t){let s=t?.interval??En,r=t?.paused??false,a=react.useRef(t);a.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,u=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return react.useEffect(()=>{u.error&&a.current?.onError?.(u.error);},[u.error]),react.useMemo(()=>({route:u.data,isRouting:u.isFetching,error:u.error}),[u.data,u.isFetching,u.error])}var Dn=6e4;function St(e){let{client:t}=react$1.useDexClient(),[s,r]=react.useState(()=>new Map),a=react.useRef(e);a.current=e;let o=react.useCallback((l,d)=>{r(p=>{let f=p.get(l);if(!f||f.status===d)return p;let x=new Map(p);return x.set(l,{...f,status:d}),x});},[]),n=react.useCallback((l,d)=>{r(f=>{if(f.has(d))return f;let x=new Map(f);return x.set(d,{chain:l,txHash:d,status:"pending"}),x});let p=a.current?.timeout??Dn;t.checkTxSuccess(l,d,p).then(f=>{if(f)o(d,"confirmed"),a.current?.onConfirmed?.(d);else {let x=new Error("Transaction failed on-chain");o(d,"failed"),a.current?.onFailed?.(d,x);}}).catch(f=>{let x=f instanceof Error?f:new Error(String(f));o(d,"failed"),a.current?.onFailed?.(d,x);});},[t,o]),u=react.useCallback(l=>{r(d=>{if(!d.has(l))return d;let p=new Map(d);return p.delete(l),p});},[]),i=react.useCallback(()=>{r(l=>l.size===0?l:new Map);},[]);return react.useMemo(()=>({track:n,clear:u,clearAll:i,transactions:s}),[n,u,i,s])}var On=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function Vn(e){return On.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Kn=1e4,$n=15e3;function Qn(e,t){if(e.length===0)return;let 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",u=a.slice(a.length-t).replace(/0+$/,"");return u?`${o}.${u}`:o}function Re(e){let{chain:t}=e,s=walletConnector.useWallets(),r=Vn(t),a=react.useMemo(()=>s.find(b=>b.chainNamespace===r&&b.isConnected),[s,r]),o=a?.address??"",[n,u]=react.useState(e.from??""),[i,l]=react.useState(e.to??""),d=react.useRef(e.from),p=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&u(e.from));},[e.from]),react.useEffect(()=>{e.to!==p.current&&(p.current=e.to,e.to&&l(e.to));},[e.to]);let f=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),x=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Kn}),m=react.useMemo(()=>x.data?.find(b=>b.address===n)??null,[x.data,n]),c=react.useMemo(()=>x.data?.find(b=>b.address===i)??null,[x.data,i]),S=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:o,tokenAddresses:f},{enabled:!!o&&f.length>0,refetchInterval:$n}),P=react.useMemo(()=>S.data?.find(b=>b.address===n)??null,[S.data,n]),T=react.useMemo(()=>S.data?.find(b=>b.address===i)??null,[S.data,i]),[h,F]=react.useState(void 0),B=react.useMemo(()=>{if(!h||m?.decimals==null)return;let b=h.split("."),k=b[0]??"0",Fe=(b[1]??"").slice(0,m.decimals).padEnd(m.decimals,"0");return (k+Fe).replace(/^0+/,"")||"0"},[h,m?.decimals]),$=react.useMemo(()=>{if(!h||!m?.marketData?.priceInUsd)return;let b=Number(m.marketData.priceInUsd),k=Number(h)*b;return Number.isFinite(k)?k.toString():void 0},[h,m?.marketData?.priceInUsd]),Q=react.useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let k=b/2,be=m?.decimals??9;F(k.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:be}));},[P,m?.decimals]),z=react.useCallback(()=>{if(!P)return;let b=Number(P.amount);if(!Number.isFinite(b)||b<=0)return;let k=m?.decimals??9;F(b.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:k}));},[P,m?.decimals]),U=react.useMemo(()=>({chain:t,userAddress:o||void 0,input:n||void 0,output:i||void 0,mode:types.API.SwapMode.EXACT_IN,amount:B}),[t,o,n,i,B]),q=react.useRef(false),{route:I,isRouting:J,error:Y}=bt(U,{paused:q.current}),j=react.useMemo(()=>I&&c?Qn(I.plans,c.decimals):void 0,[I,c]),re=react.useMemo(()=>{if(!j||!c?.marketData?.priceInUsd)return;let b=Number(c.marketData.priceInUsd),k=Number(j)*b;return Number.isFinite(k)?k.toString():void 0},[j,c?.marketData?.priceInUsd]),{swap:w,isSwapping:M}=ne();q.current=M;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:ee}=St({onConfirmed:b=>{W.current?.({success:true,txHash:b});},onFailed:b=>{W.current?.({success:false,txHash:b});}}),oe=react.useMemo(()=>{if(ee.size===0)return "idle";let b=Array.from(ee.values());return b[b.length-1].status},[ee]),te=react.useCallback(async()=>{if(!(!a||!I||!n||!i||!B))try{let b=await w({chain:t,wallet:a,input:n,output:i,amount:B,mode:types.API.SwapMode.EXACT_IN});ae(t,b.txHash);}catch{}},[a,I,t,n,i,B,w,ae]),ie=x.isPending||S.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:u,setToTokenAddress:l,fromToken:m,toToken:c,fromBalance:P,toBalance:T,amount:h,setAmount:F,setHalfAmount:Q,setMaxAmount:z,amountInDecimals:B,amountInUsd:$,outputAmount:j,outputAmountInUsd:re,route:I,isRouting:J,routeError:Y,swap:te,isSwapping:M,txStatus:oe,isLoading:ie}),[n,i,m,c,P,T,h,Q,z,B,$,j,re,I,J,Y,te,M,oe,ie])}function De({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:a,inputAmount:o,inputAmountInUsd:n,outputAmount:u,outputAmountInUsd:i,route:l,isRouting:d,routeError:p,onConfirm:f,isSwapping:x}){let{t:m}=i18n.useTranslation(),[c,S]=react.useState(false),P=react.useCallback(()=>S(h=>!h),[]),T=react.useMemo(()=>l?l.plans.map((h,F)=>({key:`plan-${F}`,name:h.name,input:h.input,inputAmount:h.inputAmount,output:h.output,outputAmount:h.outputAmount,feeQuote:h.feeQuote,feeAmount:h.feeAmount})):[],[l]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:m("trade.swap.preview")}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),a&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(ss,{}),jsxRuntime.jsxs("span",{children:[Be(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:Be(o)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ct(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[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:we(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:Be(u)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ct(i)]})]})]})]}),c&&T.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:m("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:T.map(h=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:h.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[ke(h.inputAmount)," ",we(h.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[ke(h.outputAmount)," ",we(h.output)]})]})]}),h.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:m("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[ke(h.feeAmount)," ",we(h.feeQuote)]})]})]},h.key))})]}),T.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:c?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:m(c?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!l||!!p,isLoading:!l&&d||x,onPress:f,children:m("common.confirm")})})]})})}function ss(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Ct(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 Be(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 we(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function _e({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:a,amountInUsd:o,onAmountChange:n,onHalfAmount:u,onMaxAmount:i,outputAmount:l,outputAmountInUsd:d,onFromTokenSelect:p,onToTokenSelect:f,route:x,isRouting:m,routeError:c,onPreview:S,isSwapping:P,className:T}){let{t:h}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",T),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:h("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:F=>n(F.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:h("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Et(o)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Ut,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Mt(s.amount)," ",s.symbol]}),u&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:u,children:h("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:h("common.max")})]})]}),c&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:c.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:h("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:()=>f(""),children:t?t.symbol:h("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Et(d)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(Ut,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Mt(r.amount)," ",r.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!x,isLoading:!x&&m,onPress:S,children:h(P?"trade.swap.swapping":m?"trade.swap.findingRoute":"trade.swap.swap")})]})}function Ut(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function Et(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Mt(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function is({chain:e,from:t,to:s,onComplete:r,className:a}){let o=Re({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:u,onOpenChange:i,onClose:l}=ui.useDisclosure(),d=react.useCallback(async()=>{await o.swap(),l();},[o,l]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(_e,{fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,toBalance:o.toBalance,amount:o.amount,amountInUsd:o.amountInUsd,onAmountChange:o.setAmount,onHalfAmount:o.setHalfAmount,onMaxAmount:o.setMaxAmount,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,onFromTokenSelect:o.setFromTokenAddress,onToTokenSelect:o.setToTokenAddress,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onPreview:u,isSwapping:o.isSwapping,className:a}),jsxRuntime.jsx(De,{isOpen:n,onOpenChange:i,fromToken:o.fromToken,toToken:o.toToken,fromBalance:o.fromBalance,inputAmount:o.amount,inputAmountInUsd:o.amountInUsd,outputAmount:o.outputAmount,outputAmountInUsd:o.outputAmountInUsd,route:o.route,isRouting:o.isRouting,routeError:o.routeError,onConfirm:d,isSwapping:o.isSwapping})]})}function kt(e){let t=O(e),s=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:gt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...xt],presets:[{...t},{...t},{...t}]}}}var ps=kt("900900900");function Dt(e){return `liberfi.instant-trade.settings.${e}`}function cs(e,t){try{let s=localStorage.getItem(Dt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function fs(e,t){try{localStorage.setItem(Dt(e),JSON.stringify(t));}catch{}}var Lt=react.createContext(null);function Oe(){let e=react.useContext(Lt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Ve({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:a}){let o=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=s!==void 0,u=react.useMemo(()=>kt(e),[e]),[i,l]=react.useState(()=>n?u:cs(e,u)),d=n?s:i,p=react.useCallback(U=>{n?r?.(U):(l(U),fs(String(e),U));},[n,r,e]),f=react.useCallback(U=>p({...d,buy:U}),[d,p]),x=react.useCallback(U=>p({...d,sell:U}),[d,p]),[m,c]=react.useState("buy"),[S,P]=react.useState(),[T,h]=react.useState(0),[F,B]=react.useState(0),$=react.useMemo(()=>O(e),[e]),Q=react.useMemo(()=>{let U=m==="buy"?T:F;return (m==="buy"?d.buy.presets:d.sell.presets)[U]??$},[m,T,F,d,$]),z=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:o,direction:m,setDirection:c,amount:S,setAmount:P,buyPreset:T,setBuyPreset:h,sellPreset:F,setSellPreset:B,settings:d,updateBuySettings:f,updateSellSettings:x,currentPresetValues:Q}),[e,t,o,m,S,T,F,d,f,x,Q]);return jsxRuntime.jsx(Lt.Provider,{value:z,children:a})}var Cs=15e3,Is=1e4;function $e(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:a}=e,{t:o}=i18n.useTranslation(),n=Oe(),u=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),l=walletConnector.useWallets(),d=utils$1.chainToNamespace(t),p=react.useMemo(()=>l.find(w=>w.chainNamespace===d&&w.isConnected),[l,d]),f=p?.address??"",x=react.useMemo(()=>{let w=[s];return u&&w.push(u.address),i&&w.push(i.address),w.filter(Boolean)},[s,u,i]),m=react$1.useTokensQuery({chain:t,addresses:x},{enabled:x.length>0,refetchInterval:Is}),c=react.useMemo(()=>m.data?.find(w=>w.address===s)??null,[m.data,s]),S=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:f,tokenAddresses:x},{enabled:!!f&&x.length>0,refetchInterval:Cs}),P=u?.address??i?.address??"",T=react.useMemo(()=>S.data?.find(w=>w.address===P)??null,[S.data,P]),h=react.useMemo(()=>S.data?.find(w=>w.address===s)??null,[S.data,s]),[F,B]=react.useState(false),$=react.useRef(null),Q=react.useCallback(w=>{let M=$.current;$.current=w,B(W=>M===null||M!==w?true:!W);},[]),z=react.useRef(r);z.current=r;let U=react.useRef(a);U.current=a;let{swap:q,isSwapping:I}=ne({onSubmitted:w=>z.current?.(w),onError:(w,M)=>U.current?.(w,M)}),J=react.useCallback(async()=>{if(!n.amount||!p||!s)return;let w=u?.decimals??9,M=i?.address??u?.address??"",W=n.direction==="buy",ae=W?M:s,ee=W?s:M,oe=W?w:c?.decimals??9,te=new de__default.default(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,b=O(t),k=ie.slippage??b.slippage??1,be=ie.antiMev!=="off",Fe=utils$1.isSolanaChain(t)?{priorityFee:new de__default.default(ie.priorityFee??b.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de__default.default(ie.tipFee??b.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:be}:{};try{await q({chain:t,wallet:p,input:ae,output:ee,amount:te,slippage:k,...Fe}),n.setAmount(void 0);}catch{}},[n,p,s,u,i,c,t,q]),Y=react.useMemo(()=>{let w=o(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let M=` (${o("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=T?.amount;if(ae&&new de__default.default(ae).lt(n.amount))return `${w}${M}`;let ee=u?.symbol??"",oe=m.data?.find(te=>te.address===P)?.marketData?.priceInUsd;if(oe){let te=utils$1.formatAmountUSD(new de__default.default(n.amount).times(Number(oe)));return o("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return o("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=h?.amount;return W&&new de__default.default(W).lt(n.amount)?`${w}${M}`:w},[o,n.direction,n.amount,T,h,u,m.data,P]),j=!n.amount||!p||!s,re=m.isPending||S.isPending;return react.useMemo(()=>({chain:t,tokenAddress:s,nativeToken:u,tokenInfo:c,nativeBalance:T,tokenBalance:h,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:F,handlePresetClick:Q,swap:J,isSwapping:I,submitText:Y,isDisabled:j,isLoading:re}),[t,s,u,c,T,h,n,F,Q,J,I,Y,j,re])}function he({value:e,onChange:t,chain:s,disableAnimation:r,className:a}){let o=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>le(s),[s]),u=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",a),children:[jsxRuntime.jsx(Ls,{value:e.slippage,onChange:i=>o({slippage:i})}),jsxRuntime.jsx(_s,{value:e[u],onChange:i=>o({[u]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(Ws,{value:e.tipFee,onChange:i=>o({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Os,{value:e.autoFee,onChange:i=>o({autoFee:i}),disableAnimation:r}),e.autoFee&&jsxRuntime.jsx(Vs,{value:e.maxAutoFee,onChange:i=>o({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(Ks,{value:e.antiMev,onChange:i=>o({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsxRuntime.jsx($s,{value:e.customRPC,onChange:i=>o({customRPC:i})})]})}function Ls({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 _s({value:e,onChange:t,feeType:s,symbol:r,decimals:a}){let{t:o}=i18n.useTranslation(),n=o(`trade.preset.${s}`),u=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:u,children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function Ws({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 Os({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 Vs({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 Ks({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}),[]),u=react.useMemo(()=>({off:{title:a("trade.preset.antiMev.off"),desc:a("trade.preset.antiMev.off.desc")},reduced:{title:a("trade.preset.antiMev.reduced"),desc:a("trade.preset.antiMev.reduced.desc")},secure:{title:a("trade.preset.antiMev.secure"),desc:a("trade.preset.antiMev.secure.desc")}}),[a]);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:a("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:r,"aria-label":o,children:s.map(i=>{let l=n[i],d=u[i];return jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsxs("div",{className:"text-xs",children:[jsxRuntime.jsx("div",{className:"font-medium text-foreground",children:d.title}),jsxRuntime.jsx("div",{className:"mt-0.5",children:d.desc})]}),children:jsxRuntime.jsx("span",{className:"flex items-center justify-center",children:jsxRuntime.jsx(l,{width:18,height:18})})})},i)})})})]})}function $s({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:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:p,nativeBalance:f,tokenBalance:x,amountConversion:m,preset:c,onPresetChange:S,presetValues:P,onPresetSettingsChange:T,showSettings:h,onPresetClick:F,submitText:B,isDisabled:$,isLoading:Q,onSubmit:z,className:U,headerExtra:q}){let{t:I}=i18n.useTranslation(),J=react.useMemo(()=>utils$1.getNativeToken(e),[e]),Y=J?.symbol,j=J?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",U),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:I("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:I("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:I("trade.market")},"market")}),q]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(tr,{amount:r,onAmountChange:a,customAmounts:o,onQuickAmountClick:u,onCustomAmountsEdit:l,nativeSymbol:Y,nativeDecimals:j,amountLabel:I("trade.amount")}):jsxRuntime.jsx(nr,{amount:r,onAmountChange:a,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:d,tokenSymbol:p,amountLabel:I("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:I("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?f?`${f} ${Y??""}`:"--":x?`${x} ${p??""}`:"--"})]}),m&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:m})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(sr,{values:P,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${c}`,onSelectionChange:re=>S(Number(re)),disableAnimation:true,"aria-label":I("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:I("trade.preset.label",{n:1}),onClick:()=>F(0)},0),jsxRuntime.jsx(ui.Tab,{title:I("trade.preset.label",{n:2}),onClick:()=>F(1)},1),jsxRuntime.jsx(ui.Tab,{title:I("trade.preset.label",{n:3}),onClick:()=>F(2)},2)]})}),h&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(he,{value:P,onChange:T,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:Q,onPress:z,children:B})]})}function tr({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:a,nativeSymbol:o,nativeDecimals:n,amountLabel:u}){let i=react.useCallback(l=>{typeof l=="number"&&t(isNaN(l)?void 0:l);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:u}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx($t,{values:s,onSelect:r,onEdit:a})]})}function nr({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:a,tokenSymbol:o,amountLabel:n}){let u=react.useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:u,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:o??""}),classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx($t,{values:s,onSelect:r,onEdit:a,suffix:"%"})]})}function $t({values:e,onSelect:t,onEdit:s,suffix:r}){let[a,o]=react.useState(false),[n,u]=react.useState([]),i=react.useCallback(()=>{u([...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,p)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:a?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:f=>{if(typeof f=="number"){let x=isNaN(f)?null:f;u(m=>{let c=[...m];return c[p]=x,c});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:r?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[p]??""})},p))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:a?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:l,children:jsxRuntime.jsx(ui.CheckIcon,{width:12,height:12})}):jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function sr({values:e,chain:t}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content: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 or({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:a,onSettingsChange:o,headerExtra:n,className:u}){return jsxRuntime.jsx(Ve,{chain:e,tokenAddress:t,settings:a,onSettingsChange:o,children:jsxRuntime.jsx(ir,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:u})})}function ir({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:a,className:o}){let n=$e({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),u=react.useCallback(m=>n.setAmount(m),[n]),i=react.useCallback(m=>{let c=n.tokenBalance?.amount;if(!c)return;let S=new de__default.default(c).times(m).div(100).toNumber();n.setAmount(S);},[n]),l=react.useCallback(m=>{n.updateBuySettings({...n.settings.buy,customAmounts:m});},[n]),d=react.useCallback(m=>{n.updateSellSettings({...n.settings.sell,customPercentages:m});},[n]),p=react.useCallback(m=>{let c=n.direction==="buy",S=c?n.buyPreset:n.sellPreset;if(c){let P=n.settings.buy,T=[...P.presets];T[S]=m,n.updateBuySettings({...P,presets:T});}else {let P=n.settings.sell,T=[...P.presets];T[S]=m,n.updateSellSettings({...P,presets:T});}},[n]),f=react.useCallback(m=>{n.direction==="buy"?n.setBuyPreset(m):n.setSellPreset(m);},[n]),x=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(He,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:u,onQuickPercentageClick:i,onCustomAmountsEdit:l,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:x,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:o,headerExtra:a})}function Ze(e){let{id:t,chain:s,token:r,storageKeyPrefix:a,onAmountChange:o,onPresetChange:n,onPresetClick:u}=e,[i,l]=jotai.useAtom(G(H(t,s,r.address,a))),d=jotai.useAtomValue(L(D(s,"buy",0,a))),p=jotai.useAtomValue(L(D(s,"buy",1,a))),f=jotai.useAtomValue(L(D(s,"buy",2,a))),x=react.useMemo(()=>[d,p,f],[d,p,f]),m=react.useCallback(S=>{l(P=>({...P,amount:S})),o?.(S);},[l,o]),c=react.useCallback(S=>{l(P=>({...P,preset:S})),n?.(S);},[l,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:m,preset:i.preset,handlePresetChange:c,onPresetClick:u,presetValues:x}}function Je({token:e,chain:t,amount:s,onAmountChange:r,preset:a=0,onPresetChange:o,onPresetClick:n,presetValues:u,radius:i="full",size:l="md",className:d}){let{t:p}=i18n.useTranslation(),f=react.useMemo(()=>O(t),[t]),x=react.useCallback(m=>{o?.(Number(m));},[o]);return jsxRuntime.jsxs("div",{className:ui.cn("flex items-center border-2 border-border",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",l==="sm"&&"h-8 pr-2",l==="md"&&"h-10 pr-2.5",l==="lg"&&"h-12 pr-3",d),children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:m=>r(isNaN(m)?void 0:m),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:l,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:l==="sm"?12:l==="md"?16:20,height:l==="sm"?12:l==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:l==="sm"?16:l==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),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:x,classNames:{base:"flex-none h-full",tabList:ui.cn("bg-transparent gap-0 h-full",l==="sm"&&"p-0.5",l==="md"&&"p-1",l==="lg"&&"p-1.5"),tab:ui.cn("h-full",l==="sm"&&"text-xs px-2",l==="md"&&"text-sm px-2.5",l==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((m,c)=>jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsx(Tr,{values:u?.[c]??f,chain:t}),classNames:{content:"w-fit bg-content2 p-4"},offset:12,children:jsxRuntime.jsx("span",{onClick:()=>a===c&&n?.(c),children:p("trade.preset.short",{n:c+1})})})},String(c)))})]})}function Tr({values:e,chain:t}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>le(t),[t]),a=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"w-full flex flex-col gap-2 text-sm text-neutral",children:[jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxRuntime.jsxs("span",{className:"flex gap-1 items-center",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:18,height:18}),jsxRuntime.jsx("span",{className:"font-medium",children:s("trade.preset.slippage")})]}),jsxRuntime.jsx("span",{className:"text-foreground",children:utils$1.formatPercent((e.slippage??0)/100)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxRuntime.jsxs("span",{className:"flex gap-1 items-center",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:18,height:18}),jsxRuntime.jsx("span",{className:"font-medium",children:s(`trade.preset.${r.feeType}`)})]}),jsxRuntime.jsxs("span",{className:"text-foreground",children:[utils$1.formatPrice(e.priorityFee??0)," ",r.feeUnit]})]}),r.showTipFee&&jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxRuntime.jsxs("span",{className:"flex gap-1 items-center",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:18,height:18}),jsxRuntime.jsx("span",{className:"font-medium",children:s("trade.preset.tipFee")})]}),jsxRuntime.jsxs("span",{className:"text-foreground",children:[utils$1.formatPrice(e.tipFee??0)," ",r.tipFeeUnit]})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-4 h-6",children:[jsxRuntime.jsxs("span",{className:"flex gap-1 items-center",children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:18,height:18}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:18,height:18}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:18,height:18}),jsxRuntime.jsx("span",{className:"font-medium",children:s("trade.preset.antiMev")})]}),jsxRuntime.jsx("span",{className:"text-foreground",children:s(`trade.preset.antiMev.${a}`)})]})]})}function Nr({size:e,radius:t,className:s,...r}){let{token:a,chain:o,amount:n,handleAmountChange:u,preset:i,handlePresetChange:l,onPresetClick:d,presetValues:p}=Ze(r);return jsxRuntime.jsx(Je,{token:a,chain:o,amount:n,onAmountChange:u,preset:i,onPresetChange:l,onPresetClick:d,presetValues:p,size:e,radius:t,className:s})}function Ye(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:a,onChange:o}=e,[n,u]=react.useState(r),[i,l]=jotai.useAtom(L(D(t,n,s,a))),d=react.useCallback(p=>{l(p),o?.(n,p);},[l,o,n]);return {direction:n,setDirection:u,value:i,handleChange:d}}function tt({disableAnimation:e,className:t,...s}){let{t:r}=i18n.useTranslation(),{direction:a,setDirection:o,value:n,handleChange:u}=Ye(s);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:a,onSelectionChange:i=>o(i),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:r("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:r("common.sell")},"sell")]}),jsxRuntime.jsx(he,{value:n,onChange:u,chain:s.chain,disableAnimation:e})]})}var kr=3;function nt(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,a]=react.useState(t),o=react.useCallback((n,u)=>{s?.(r,n,u);},[s,r]);return {presetCount:kr,presetIndex:r,setPresetIndex:a,handlePresetChange:o}}function rt({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:a}=i18n.useTranslation(),{presetCount:o,presetIndex:n,setPresetIndex:u,handlePresetChange:i}=nt(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",s),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:l=>u(Number(l)),disableAnimation:t,"aria-label":a("trade.preset.presets"),children:Array.from({length:o},(l,d)=>jsxRuntime.jsx(ui.Tab,{title:a("trade.preset.label",{n:d+1})},String(d)))}),jsxRuntime.jsx(tt,{chain:r.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var Jr="preset";function Yr({id:e=Jr}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(ea,{...t})})}function ea({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=i18n.useTranslation(),{chains:a,defaultChain:o,defaultDirection:n,defaultPresetIndex:u,storageKeyPrefix:i,onChange:l}=e,[d,p]=react.useState(o??a[0]);react.useEffect(()=>{p(o??a[0]);},[o,a]);let f=react.useCallback((x,m,c)=>{l?.(d,x,m,c);},[l,d]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:r("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:a,chain:d,onSelectChain:p})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(rt,{chain:d,defaultDirection:n,defaultPresetIndex:u,storageKeyPrefix:i,onChange:f})})})]})})}function Ae(e,t,s,r,a){let o=O(a),n=new de__default.default(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),u=new de__default.default(r.priorityFee??o.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de__default.default(r.tipFee??o.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??o.slippage??1,priorityFee:u,tipFee:i,isAntiMev:r.antiMev!=="off"}}function it(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o,onSwapSubmitted:n,onSwapError:u}=e,{amount:i,preset:l}=jotai.useAtomValue(G(H(t,s,r.address,o))),d=jotai.useAtomValue(L(D(s,"buy",l,o))),p=walletConnector.useConnectedWallet(s),{swap:f,isSwapping:x}=ne({onSubmitted:n,onError:u}),m=!i||!a,c=walletConnector.useAuthCallback(async()=>{if(!i||!p||!a)return;let S=Ae(i,r,a,d,s);try{await f({...S,chain:s,wallet:p});}catch{}},[p,i,a,s,r,d,f]);return react.useMemo(()=>({amount:i,token:r,isDisabled:m,isSwapping:x,handleSwap:c}),[i,r,m,x,c])}function oa({size:e="sm",radius:t,color:s="primary",className:r,...a}){let{amount:o,token:n,isDisabled:u,isSwapping:i,handleSwap:l}=it(a);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:t,color:s,className:r,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:u,isLoading:i,onPress:l,children:o!=null?`${o} ${n.symbol}`:n.symbol})}var Yt=react.createContext(null);function pa({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let a=walletConnector.useConnectedWallet(e),{swap:o}=ne({onSubmitted:t,onError:s}),n=react.useRef(a);n.current=a;let u=react.useRef(o);u.current=o;let i=react.useRef(e);i.current=e;let l=react.useCallback(async p=>{let f=n.current;if(f)return u.current({...p,wallet:f,chain:i.current})},[]),d=walletConnector.useAuthCallback(l,[]);return jsxRuntime.jsx(Yt.Provider,{value:d,children:r})}function ut(){let e=react.useContext(Yt);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function dt(e){let{id:t,chain:s,token:r,output:a,storageKeyPrefix:o}=e,{amount:n,preset:u}=jotai.useAtomValue(G(H(t,s,r.address,o))),i=jotai.useAtomValue(L(D(s,"buy",u,o))),l=ut(),[d,p]=react.useState(false),f=!n||!a,x=react.useRef(r);x.current=r;let m=react.useRef(i);m.current=i;let c=react.useRef(s);c.current=s;let S=react.useCallback(async()=>{if(!n||!a)return;let P=Ae(n,x.current,a,m.current,c.current);p(true);try{await l(P);}catch{}finally{p(false);}},[n,a,l]);return react.useMemo(()=>({amount:n,token:r,isDisabled:f,isSwapping:d,handleSwap:S}),[n,r,f,d,S])}var Sa=react.memo(function({size:t="sm",radius:s,color:r="primary",className:a,...o}){let{amount:n,token:u,isDisabled:i,isSwapping:l,handleSwap:d}=dt(o);return jsxRuntime.jsx(ui.Button,{variant:"solid",fullWidth:true,size:t,radius:s,color:r,className:a,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{className:"flex-none"}),isDisabled:i,isLoading:l,onPress:d,children:n!=null?`${n} ${u.symbol}`:u.symbol})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.13");var Pa="0.1.13";
2
+ exports.AmountPresetInputUI=Je;exports.AmountPresetInputWidget=Nr;exports.DEFAULT_BSC_TRADE_PRESET=ft;exports.DEFAULT_EVM_TRADE_PRESET=ct;exports.DEFAULT_INSTANT_TRADE_SETTINGS=ps;exports.DEFAULT_SELL_PERCENTAGES=xt;exports.DEFAULT_SOL_TRADE_PRESET=pt;exports.InstantTradeButtonWidget=oa;exports.InstantTradeListButtonWidget=Sa;exports.InstantTradeProvider=Ve;exports.InstantTradeSwapProvider=pa;exports.InstantTradeUI=He;exports.InstantTradeWidget=or;exports.MultiPresetFormWidget=rt;exports.PresetFormModal=Yr;exports.PresetFormUI=he;exports.PresetFormWidget=tt;exports.SwapPreviewModal=De;exports.SwapUI=_e;exports.SwapWidget=is;exports.getChainPresetFeatures=le;exports.getDefaultBuyAmounts=gt;exports.getDefaultPresetForChain=O;exports.instantTradeAmountAtomFamily=G;exports.instantTradeAmountKey=H;exports.presetAtomFamily=L;exports.presetKey=D;exports.useAmountPresetInputScript=Ze;exports.useInstantTrade=Oe;exports.useInstantTradeAmount=Aa;exports.useInstantTradeButtonScript=it;exports.useInstantTradeListButtonScript=dt;exports.useInstantTradeScript=$e;exports.useInstantTradeSwap=ut;exports.useMultiPresetFormScript=nt;exports.usePresetFormScript=Ye;exports.usePresetValues=Oa;exports.useSwap=ne;exports.useSwapRoutePolling=bt;exports.useSwapScript=Re;exports.useTxConfirmation=St;exports.version=Pa;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map