@liberfi.io/ui-trade 0.1.3 → 0.1.4

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
@@ -82,6 +82,10 @@ interface TradePresetValues {
82
82
  }
83
83
  /** Default preset values matching Solana-typical settings. */
84
84
  declare const DEFAULT_TRADE_PRESET: TradePresetValues;
85
+ /** Default preset values for EVM chains (gas fee in Gwei). */
86
+ declare const DEFAULT_EVM_TRADE_PRESET: TradePresetValues;
87
+ /** Default preset values for BSC (gas in Gwei + tip in BNB). */
88
+ declare const DEFAULT_BSC_TRADE_PRESET: TradePresetValues;
85
89
  /** Default quick-buy amounts (native token units). */
86
90
  declare const DEFAULT_BUY_AMOUNTS: number[];
87
91
  /** Default quick-sell percentages. */
@@ -402,6 +406,7 @@ interface InstantTradeWidgetProps {
402
406
  }
403
407
  /** Props for {@link InstantTradeUI}. */
404
408
  interface InstantTradeUIProps {
409
+ chain: Chain;
405
410
  direction: "buy" | "sell";
406
411
  onDirectionChange: (d: "buy" | "sell") => void;
407
412
  amount: number | undefined;
@@ -485,6 +490,8 @@ interface InstantTradeButtonProps {
485
490
  interface PresetFormUIProps {
486
491
  value: TradePresetValues;
487
492
  onChange: (value: TradePresetValues) => void;
493
+ /** Target chain — determines which fields are shown (e.g. anti-MEV for Solana only). */
494
+ chain: Chain;
488
495
  nativeSymbol?: string;
489
496
  nativeDecimals?: number;
490
497
  className?: string;
@@ -562,15 +569,20 @@ declare function PresetFormWidget({ value, onChange, chain, className, }: Preset
562
569
  * Receives all data and callbacks via props — no API calls, no context access.
563
570
  * Consumers can replace this component while reusing `useInstantTradeScript`.
564
571
  */
565
- declare function InstantTradeUI({ direction, onDirectionChange, amount, onAmountChange, customAmounts, customPercentages, onQuickAmountClick, onQuickPercentageClick, onCustomAmountsEdit, onCustomPercentagesEdit, tokenSymbol, nativeSymbol, nativeDecimals, nativeBalance, tokenBalance, amountConversion, preset, onPresetChange, presetValues, onPresetSettingsChange, showSettings, onPresetClick, submitText, isDisabled, isLoading, onSubmit, className, headerExtra, }: InstantTradeUIProps): react_jsx_runtime.JSX.Element;
572
+ declare function InstantTradeUI({ chain, direction, onDirectionChange, amount, onAmountChange, customAmounts, customPercentages, onQuickAmountClick, onQuickPercentageClick, onCustomAmountsEdit, onCustomPercentagesEdit, tokenSymbol, nativeSymbol, nativeDecimals, nativeBalance, tokenBalance, amountConversion, preset, onPresetChange, presetValues, onPresetSettingsChange, showSettings, onPresetClick, submitText, isDisabled, isLoading, onSubmit, className, headerExtra, }: InstantTradeUIProps): react_jsx_runtime.JSX.Element;
566
573
 
567
574
  /**
568
575
  * Pure presentational preset-settings form.
569
576
  *
570
577
  * Renders inputs for slippage, priority fee, tip fee, auto fee,
571
- * max auto fee, anti-MEV and custom RPC. All data via props.
578
+ * max auto fee, anti-MEV and custom RPC.
579
+ *
580
+ * The `chain` prop controls which fields are visible:
581
+ * - Solana: priority fee (SOL), tip fee (SOL), anti-MEV
582
+ * - Ethereum: gas fee (Gwei) only
583
+ * - BSC: gas fee (Gwei) + tip fee (BNB)
572
584
  */
573
- declare function PresetFormUI({ value, onChange, nativeSymbol, nativeDecimals, className, }: PresetFormUIProps): react_jsx_runtime.JSX.Element;
585
+ declare function PresetFormUI({ value, onChange, chain, nativeSymbol, nativeDecimals, className, }: PresetFormUIProps): react_jsx_runtime.JSX.Element;
574
586
 
575
587
  /**
576
588
  * Compact amount input with preset selector buttons.
@@ -588,6 +600,40 @@ declare function InstantTradeAmountInput({ amount, onAmountChange, preset, onPre
588
600
  */
589
601
  declare function InstantTradeButton({ className, children, }: InstantTradeButtonProps): react_jsx_runtime.JSX.Element;
590
602
 
603
+ type AntiMevOption = "off" | "reduced" | "secure";
604
+ interface ChainPresetFeatures {
605
+ /** Label for the priority/gas fee field */
606
+ feeLabel: string;
607
+ /** Unit displayed for the fee input (e.g. "SOL", "Gwei") */
608
+ feeUnit: string;
609
+ /** Decimal places for the fee input */
610
+ feeDecimals: number;
611
+ /** Whether this chain supports a separate tip/bribe fee */
612
+ showTipFee: boolean;
613
+ /** Unit for tip fee (e.g. "SOL", "BNB"). Empty when hidden. */
614
+ tipFeeUnit: string;
615
+ /** Decimal places for the tip fee input */
616
+ tipFeeDecimals: number;
617
+ /**
618
+ * Available anti-MEV protection levels for this chain.
619
+ * - Solana: ["off", "reduced", "secure"]
620
+ * - ETH / BSC: ["off", "secure"]
621
+ */
622
+ antiMevOptions: AntiMevOption[];
623
+ }
624
+ /**
625
+ * Returns the set of preset form features applicable to a given chain.
626
+ *
627
+ * - Solana: priority fee (SOL), tip fee (SOL/Jito), anti-MEV
628
+ * - Ethereum: gas fee (Gwei) only
629
+ * - BSC: gas fee (Gwei) + tip fee (BNB)
630
+ * - Other EVM: gas fee (Gwei), same as Ethereum by default
631
+ */
632
+ declare function getChainPresetFeatures(chain: Chain, nativeSymbol?: string): ChainPresetFeatures;
633
+ declare function isSolanaChain(chain: Chain): boolean;
634
+ /** Returns chain-appropriate default preset values. */
635
+ declare function getDefaultPresetForChain(chain: Chain): TradePresetValues;
636
+
591
637
  declare global {
592
638
  interface Window {
593
639
  __LIBERFI_VERSION__?: {
@@ -595,6 +641,6 @@ declare global {
595
641
  };
596
642
  }
597
643
  }
598
- declare const _default: "0.1.3";
644
+ declare const _default: "0.1.4";
599
645
 
600
- export { type BuySettings, DEFAULT_BUY_AMOUNTS, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_TRADE_PRESET, InstantTradeAmountInput, type InstantTradeAmountInputProps, InstantTradeButton, type InstantTradeButtonProps, type InstantTradeContextValue, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, 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 UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, useInstantTrade, useInstantTradeScript, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
646
+ export { type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_BUY_AMOUNTS, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_TRADE_PRESET, InstantTradeAmountInput, type InstantTradeAmountInputProps, InstantTradeButton, type InstantTradeButtonProps, type InstantTradeContextValue, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, 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 UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultPresetForChain, isSolanaChain, useInstantTrade, useInstantTradeScript, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
package/dist/index.d.ts CHANGED
@@ -82,6 +82,10 @@ interface TradePresetValues {
82
82
  }
83
83
  /** Default preset values matching Solana-typical settings. */
84
84
  declare const DEFAULT_TRADE_PRESET: TradePresetValues;
85
+ /** Default preset values for EVM chains (gas fee in Gwei). */
86
+ declare const DEFAULT_EVM_TRADE_PRESET: TradePresetValues;
87
+ /** Default preset values for BSC (gas in Gwei + tip in BNB). */
88
+ declare const DEFAULT_BSC_TRADE_PRESET: TradePresetValues;
85
89
  /** Default quick-buy amounts (native token units). */
86
90
  declare const DEFAULT_BUY_AMOUNTS: number[];
87
91
  /** Default quick-sell percentages. */
@@ -402,6 +406,7 @@ interface InstantTradeWidgetProps {
402
406
  }
403
407
  /** Props for {@link InstantTradeUI}. */
404
408
  interface InstantTradeUIProps {
409
+ chain: Chain;
405
410
  direction: "buy" | "sell";
406
411
  onDirectionChange: (d: "buy" | "sell") => void;
407
412
  amount: number | undefined;
@@ -485,6 +490,8 @@ interface InstantTradeButtonProps {
485
490
  interface PresetFormUIProps {
486
491
  value: TradePresetValues;
487
492
  onChange: (value: TradePresetValues) => void;
493
+ /** Target chain — determines which fields are shown (e.g. anti-MEV for Solana only). */
494
+ chain: Chain;
488
495
  nativeSymbol?: string;
489
496
  nativeDecimals?: number;
490
497
  className?: string;
@@ -562,15 +569,20 @@ declare function PresetFormWidget({ value, onChange, chain, className, }: Preset
562
569
  * Receives all data and callbacks via props — no API calls, no context access.
563
570
  * Consumers can replace this component while reusing `useInstantTradeScript`.
564
571
  */
565
- declare function InstantTradeUI({ direction, onDirectionChange, amount, onAmountChange, customAmounts, customPercentages, onQuickAmountClick, onQuickPercentageClick, onCustomAmountsEdit, onCustomPercentagesEdit, tokenSymbol, nativeSymbol, nativeDecimals, nativeBalance, tokenBalance, amountConversion, preset, onPresetChange, presetValues, onPresetSettingsChange, showSettings, onPresetClick, submitText, isDisabled, isLoading, onSubmit, className, headerExtra, }: InstantTradeUIProps): react_jsx_runtime.JSX.Element;
572
+ declare function InstantTradeUI({ chain, direction, onDirectionChange, amount, onAmountChange, customAmounts, customPercentages, onQuickAmountClick, onQuickPercentageClick, onCustomAmountsEdit, onCustomPercentagesEdit, tokenSymbol, nativeSymbol, nativeDecimals, nativeBalance, tokenBalance, amountConversion, preset, onPresetChange, presetValues, onPresetSettingsChange, showSettings, onPresetClick, submitText, isDisabled, isLoading, onSubmit, className, headerExtra, }: InstantTradeUIProps): react_jsx_runtime.JSX.Element;
566
573
 
567
574
  /**
568
575
  * Pure presentational preset-settings form.
569
576
  *
570
577
  * Renders inputs for slippage, priority fee, tip fee, auto fee,
571
- * max auto fee, anti-MEV and custom RPC. All data via props.
578
+ * max auto fee, anti-MEV and custom RPC.
579
+ *
580
+ * The `chain` prop controls which fields are visible:
581
+ * - Solana: priority fee (SOL), tip fee (SOL), anti-MEV
582
+ * - Ethereum: gas fee (Gwei) only
583
+ * - BSC: gas fee (Gwei) + tip fee (BNB)
572
584
  */
573
- declare function PresetFormUI({ value, onChange, nativeSymbol, nativeDecimals, className, }: PresetFormUIProps): react_jsx_runtime.JSX.Element;
585
+ declare function PresetFormUI({ value, onChange, chain, nativeSymbol, nativeDecimals, className, }: PresetFormUIProps): react_jsx_runtime.JSX.Element;
574
586
 
575
587
  /**
576
588
  * Compact amount input with preset selector buttons.
@@ -588,6 +600,40 @@ declare function InstantTradeAmountInput({ amount, onAmountChange, preset, onPre
588
600
  */
589
601
  declare function InstantTradeButton({ className, children, }: InstantTradeButtonProps): react_jsx_runtime.JSX.Element;
590
602
 
603
+ type AntiMevOption = "off" | "reduced" | "secure";
604
+ interface ChainPresetFeatures {
605
+ /** Label for the priority/gas fee field */
606
+ feeLabel: string;
607
+ /** Unit displayed for the fee input (e.g. "SOL", "Gwei") */
608
+ feeUnit: string;
609
+ /** Decimal places for the fee input */
610
+ feeDecimals: number;
611
+ /** Whether this chain supports a separate tip/bribe fee */
612
+ showTipFee: boolean;
613
+ /** Unit for tip fee (e.g. "SOL", "BNB"). Empty when hidden. */
614
+ tipFeeUnit: string;
615
+ /** Decimal places for the tip fee input */
616
+ tipFeeDecimals: number;
617
+ /**
618
+ * Available anti-MEV protection levels for this chain.
619
+ * - Solana: ["off", "reduced", "secure"]
620
+ * - ETH / BSC: ["off", "secure"]
621
+ */
622
+ antiMevOptions: AntiMevOption[];
623
+ }
624
+ /**
625
+ * Returns the set of preset form features applicable to a given chain.
626
+ *
627
+ * - Solana: priority fee (SOL), tip fee (SOL/Jito), anti-MEV
628
+ * - Ethereum: gas fee (Gwei) only
629
+ * - BSC: gas fee (Gwei) + tip fee (BNB)
630
+ * - Other EVM: gas fee (Gwei), same as Ethereum by default
631
+ */
632
+ declare function getChainPresetFeatures(chain: Chain, nativeSymbol?: string): ChainPresetFeatures;
633
+ declare function isSolanaChain(chain: Chain): boolean;
634
+ /** Returns chain-appropriate default preset values. */
635
+ declare function getDefaultPresetForChain(chain: Chain): TradePresetValues;
636
+
591
637
  declare global {
592
638
  interface Window {
593
639
  __LIBERFI_VERSION__?: {
@@ -595,6 +641,6 @@ declare global {
595
641
  };
596
642
  }
597
643
  }
598
- declare const _default: "0.1.3";
644
+ declare const _default: "0.1.4";
599
645
 
600
- export { type BuySettings, DEFAULT_BUY_AMOUNTS, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_TRADE_PRESET, InstantTradeAmountInput, type InstantTradeAmountInputProps, InstantTradeButton, type InstantTradeButtonProps, type InstantTradeContextValue, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, 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 UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, useInstantTrade, useInstantTradeScript, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
646
+ export { type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_BUY_AMOUNTS, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_TRADE_PRESET, InstantTradeAmountInput, type InstantTradeAmountInputProps, InstantTradeButton, type InstantTradeButtonProps, type InstantTradeContextValue, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, 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 UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultPresetForChain, isSolanaChain, useInstantTrade, useInstantTradeScript, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- 'use strict';var react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),jsxRuntime=require('react/jsx-runtime'),utils=require('@liberfi.io/utils'),ne=require('bignumber.js'),hooks=require('@liberfi.io/hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ne__default=/*#__PURE__*/_interopDefault(ne);function Pt(e){let t=atob(e),r=new Uint8Array(t.length);for(let o=0;o<t.length;o++)r[o]=t.charCodeAt(o);return r}function Tt(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,o]=react.useState(false),i=react.useRef(e);i.current=e;let s=react.useCallback(async n=>{let{wallet:l,chain:p,...u}=n;o(true);try{let d;try{d=await t.swapRoute({chain:p,userAddress:l.address,input:u.input,output:u.output,mode:u.mode??types.API.SwapMode.EXACT_IN,amount:u.amount,slippage:u.slippage,priorityFee:u.priorityFee,tipFee:u.tipFee,isAntiMev:u.isAntiMev,permit:u.permit,deadline:u.deadline});}catch(a){let m=a instanceof Error?a:new Error(String(a));throw i.current?.onError?.(m,"route"),m}let g;try{let a=Pt(d.serializedTx);g=await l.signTransaction(a);}catch(a){let m=a instanceof Error?a:new Error(String(a));throw i.current?.onError?.(m,"sign"),m}let f;try{let a=Tt(g);f=await t.sendTx({chain:p,serializedTx:a});}catch(a){let m=a instanceof Error?a:new Error(String(a));throw i.current?.onError?.(m,"send"),m}let x={txHash:f.txHash,extra:f.extra};return i.current?.onSubmitted?.(x),x}finally{o(false);}},[t]);return react.useMemo(()=>({swap:s,isSwapping:r}),[s,r])}var Ft=12e3;function Ke(e,t){let r=t?.interval??Ft,o=t?.paused??false,i=react.useRef(t);i.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!o,l=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return react.useEffect(()=>{l.error&&i.current?.onError?.(l.error);},[l.error]),react.useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var Bt=6e4;function He(e){let{client:t}=react$1.useDexClient(),[r,o]=react.useState(()=>new Map),i=react.useRef(e);i.current=e;let s=react.useCallback((u,d)=>{o(g=>{let f=g.get(u);if(!f||f.status===d)return g;let x=new Map(g);return x.set(u,{...f,status:d}),x});},[]),n=react.useCallback((u,d)=>{o(f=>{if(f.has(d))return f;let x=new Map(f);return x.set(d,{chain:u,txHash:d,status:"pending"}),x});let g=i.current?.timeout??Bt;t.checkTxSuccess(u,d,g).then(f=>{if(f)s(d,"confirmed"),i.current?.onConfirmed?.(d);else {let x=new Error("Transaction failed on-chain");s(d,"failed"),i.current?.onFailed?.(d,x);}}).catch(f=>{let x=f instanceof Error?f:new Error(String(f));s(d,"failed"),i.current?.onFailed?.(d,x);});},[t,s]),l=react.useCallback(u=>{o(d=>{if(!d.has(u))return d;let g=new Map(d);return g.delete(u),g});},[]),p=react.useCallback(()=>{o(u=>u.size===0?u:new Map);},[]);return react.useMemo(()=>({track:n,clear:l,clearAll:p,transactions:r}),[n,l,p,r])}var Ot=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function Wt(e){return Ot.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Vt=1e4,zt=15e3;function $t(e,t){if(e.length===0)return;let o=e[e.length-1].outputAmount;if(!o||o==="0")return "0";let i=o.padStart(t+1,"0"),s=i.slice(0,i.length-t)||"0",l=i.slice(i.length-t).replace(/0+$/,"");return l?`${s}.${l}`:s}function Ie(e){let{chain:t}=e,r=walletConnector.useWallets(),o=Wt(t),i=react.useMemo(()=>r.find(S=>S.chainNamespace===o&&S.isConnected),[r,o]),s=i?.address??"",[n,l]=react.useState(e.from??""),[p,u]=react.useState(e.to??""),d=react.useRef(e.from),g=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&l(e.from));},[e.from]),react.useEffect(()=>{e.to!==g.current&&(g.current=e.to,e.to&&u(e.to));},[e.to]);let f=react.useMemo(()=>[n,p].filter(Boolean),[n,p]),x=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Vt}),a=react.useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),m=react.useMemo(()=>x.data?.find(S=>S.address===p)??null,[x.data,p]),N=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:s,tokenAddresses:f},{enabled:!!s&&f.length>0,refetchInterval:zt}),v=react.useMemo(()=>N.data?.find(S=>S.address===n)??null,[N.data,n]),h=react.useMemo(()=>N.data?.find(S=>S.address===p)??null,[N.data,p]),[T,D]=react.useState(void 0),C=react.useMemo(()=>{if(!T||a?.decimals==null)return;let S=T.split("."),W=S[0]??"0",ht=(S[1]??"").slice(0,a.decimals).padEnd(a.decimals,"0");return (W+ht).replace(/^0+/,"")||"0"},[T,a?.decimals]),O=react.useMemo(()=>{if(!T||!a?.marketData?.priceInUsd)return;let S=Number(a.marketData.priceInUsd),W=Number(T)*S;return Number.isFinite(W)?W.toString():void 0},[T,a?.marketData?.priceInUsd]),A=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let W=S/2,je=a?.decimals??9;D(W.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:je}));},[v,a?.decimals]),V=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let W=a?.decimals??9;D(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:W}));},[v,a?.decimals]),$=react.useMemo(()=>({chain:t,userAddress:s||void 0,input:n||void 0,output:p||void 0,mode:types.API.SwapMode.EXACT_IN,amount:C}),[t,s,n,p,C]),X=react.useRef(false),{route:B,isRouting:Z,error:ae}=Ke($,{paused:X.current}),Q=react.useMemo(()=>B&&m?$t(B.plans,m.decimals):void 0,[B,m]),w=react.useMemo(()=>{if(!Q||!m?.marketData?.priceInUsd)return;let S=Number(m.marketData.priceInUsd),W=Number(Q)*S;return Number.isFinite(W)?W.toString():void 0},[Q,m?.marketData?.priceInUsd]),{swap:R,isSwapping:_}=te();X.current=_;let j=react.useRef(e.onComplete);j.current=e.onComplete;let{track:oe,transactions:K}=He({onConfirmed:S=>{j.current?.({success:true,txHash:S});},onFailed:S=>{j.current?.({success:false,txHash:S});}}),H=react.useMemo(()=>{if(K.size===0)return "idle";let S=Array.from(K.values());return S[S.length-1].status},[K]),q=react.useCallback(async()=>{if(!(!i||!B||!n||!p||!C))try{let S=await R({chain:t,wallet:i,input:n,output:p,amount:C,mode:types.API.SwapMode.EXACT_IN});oe(t,S.txHash);}catch{}},[i,B,t,n,p,C,R,oe]),me=x.isPending||N.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:p,setFromTokenAddress:l,setToTokenAddress:u,fromToken:a,toToken:m,fromBalance:v,toBalance:h,amount:T,setAmount:D,setHalfAmount:A,setMaxAmount:V,amountInDecimals:C,amountInUsd:O,outputAmount:Q,outputAmountInUsd:w,route:B,isRouting:Z,routeError:ae,swap:q,isSwapping:_,txStatus:H,isLoading:me}),[n,p,a,m,v,h,T,A,V,C,O,Q,w,B,Z,ae,q,_,H,me])}function Ee({isOpen:e,onOpenChange:t,fromToken:r,toToken:o,fromBalance:i,inputAmount:s,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:p,route:u,isRouting:d,routeError:g,onConfirm:f,isSwapping:x}){let[a,m]=react.useState(false),N=react.useCallback(()=>m(h=>!h),[]),v=react.useMemo(()=>u?u.plans.map((h,T)=>({key:`plan-${T}`,name:h.name,input:h.input,inputAmount:h.inputAmount,output:h.output,outputAmount:h.outputAmount,feeQuote:h.feeQuote,feeAmount:h.feeAmount})):[],[u]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:"Preview"}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"From"}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),i&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(tn,{}),jsxRuntime.jsxs("span",{children:[Ae(i.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:Ae(s)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ye(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"Estimated Receive"}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[o?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:o.image,name:o.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:o?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:fe(o?.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:Ae(l)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Ye(p)]})]})]})]}),a&&v.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"Route Details"}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:v.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:"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:"Swap"}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[Ce(h.inputAmount)," ",fe(h.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[Ce(h.outputAmount)," ",fe(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:"Fee"}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[Ce(h.feeAmount)," ",fe(h.feeQuote)]})]})]},h.key))})]}),v.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:a?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:N,children:a?"Show Less":"Show More"})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!g,isLoading:!u&&d||x,onPress:f,children:"Confirm"})})]})})}function tn(){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 Ye(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 Ae(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 Ce(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 fe(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function ke({fromToken:e,toToken:t,fromBalance:r,toBalance:o,amount:i,amountInUsd:s,onAmountChange:n,onHalfAmount:l,onMaxAmount:p,outputAmount:u,outputAmountInUsd:d,onFromTokenSelect:g,onToTokenSelect:f,route:x,isRouting:a,routeError:m,onPreview:N,isSwapping:v,className:h}){return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",h),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:"From"}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:i??"",onChange:T=>n(T.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>g(""),children:e?e.symbol:"Select token"})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",rt(s)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(st,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[at(r.amount)," ",r.symbol]}),l&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:"Half"}),p&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:p,children:"Max"})]})]}),m&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:m.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:"To"}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:u??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>f(""),children:t?t.symbol:"Select token"})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",rt(d)]}),o&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(st,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[at(o.amount)," ",o.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!x,isLoading:!x&&a,onPress:N,children:v?"Swapping...":a?"Finding route...":"Swap"})]})}function st(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function rt(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 at(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 rn({chain:e,from:t,to:r,onComplete:o,className:i}){let s=Ie({chain:e,from:t,to:r,onComplete:o}),{isOpen:n,onOpen:l,onOpenChange:p,onClose:u}=ui.useDisclosure(),d=react.useCallback(async()=>{await s.swap(),u();},[s,u]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(ke,{fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,toBalance:s.toBalance,amount:s.amount,amountInUsd:s.amountInUsd,onAmountChange:s.setAmount,onHalfAmount:s.setHalfAmount,onMaxAmount:s.setMaxAmount,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,onFromTokenSelect:s.setFromTokenAddress,onToTokenSelect:s.setToTokenAddress,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onPreview:l,isSwapping:s.isSwapping,className:i}),jsxRuntime.jsx(Ee,{isOpen:n,onOpenChange:p,fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,inputAmount:s.amount,inputAmountInUsd:s.amountInUsd,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onConfirm:d,isSwapping:s.isSwapping})]})}var E={slippage:20,priorityFee:.001,tipFee:.001,autoFee:false,maxAutoFee:.1,antiMev:"off",customRPC:null},Sr=[.01,.1,1,10],wr=[10,25,50,100];var mn={customAmounts:[.01,.1,1,10],presets:[{...E},{...E},{...E}]},cn={customPercentages:[10,25,50,100],presets:[{...E},{...E},{...E}]},Ue={buy:mn,sell:cn};function it(e){return `liberfi.instant-trade.settings.${e}`}function pn(e){try{let t=localStorage.getItem(it(e));if(t)return JSON.parse(t)}catch{}return Ue}function fn(e,t){try{localStorage.setItem(it(e),JSON.stringify(t));}catch{}}var lt=react.createContext(null);function Y(){let e=react.useContext(lt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function Be({chain:e,tokenAddress:t,settings:r,onSettingsChange:o,children:i}){let s=react.useMemo(()=>utils.getNativeToken(e),[e]),n=r!==void 0,[l,p]=react.useState(()=>n?Ue:pn(String(e))),u=n?r:l,d=react.useCallback(A=>{n?o?.(A):(p(A),fn(String(e),A));},[n,o,e]),g=react.useCallback(A=>d({...u,buy:A}),[u,d]),f=react.useCallback(A=>d({...u,sell:A}),[u,d]),[x,a]=react.useState("buy"),[m,N]=react.useState(),[v,h]=react.useState(0),[T,D]=react.useState(0),C=react.useMemo(()=>{let A=x==="buy"?v:T;return (x==="buy"?u.buy.presets:u.sell.presets)[A]??E},[x,v,T,u]),O=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:s,direction:x,setDirection:a,amount:m,setAmount:N,buyPreset:v,setBuyPreset:h,sellPreset:T,setSellPreset:D,settings:u,updateBuySettings:g,updateSellSettings:f,currentPresetValues:C}),[e,t,s,x,m,v,T,u,g,f,C]);return jsxRuntime.jsx(lt.Provider,{value:O,children:i})}var Nn=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function Pn(e){return Nn.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Tn=15e3,In=1e4;function De(e){let{chain:t,tokenAddress:r,onSwapSubmitted:o,onSwapError:i}=e,s=Y(),n=react.useMemo(()=>utils.getNativeToken(t),[t]),l=react.useMemo(()=>utils.getWrappedToken(t),[t]),p=walletConnector.useWallets(),u=Pn(t),d=react.useMemo(()=>p.find(w=>w.chainNamespace===u&&w.isConnected),[p,u]),g=d?.address??"",f=react.useMemo(()=>{let w=[r];return n&&w.push(n.address),l&&w.push(l.address),w.filter(Boolean)},[r,n,l]),x=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:In}),a=react.useMemo(()=>x.data?.find(w=>w.address===r)??null,[x.data,r]),m=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:g,tokenAddresses:f},{enabled:!!g&&f.length>0,refetchInterval:Tn}),N=n?.address??l?.address??"",v=react.useMemo(()=>m.data?.find(w=>w.address===N)??null,[m.data,N]),h=react.useMemo(()=>m.data?.find(w=>w.address===r)??null,[m.data,r]),[T,D]=react.useState(false),C=react.useRef(null),O=react.useCallback(w=>{let R=C.current;C.current=w,D(_=>R===null||R!==w?true:!_);},[]),A=react.useRef(o);A.current=o;let V=react.useRef(i);V.current=i;let{swap:$,isSwapping:X}=te({onSubmitted:w=>A.current?.(w),onError:(w,R)=>V.current?.(w,R)}),B=react.useCallback(async()=>{if(!s.amount||!d||!r)return;let w=n?.decimals??9,R=l?.address??n?.address??"",_=s.direction==="buy",j=_?R:r,oe=_?r:R,K=_?w:a?.decimals??9,H=new ne__default.default(s.amount).shiftedBy(K).decimalPlaces(0).toString(),q=s.currentPresetValues,me=new ne__default.default(q.priorityFee??E.priorityFee).shiftedBy(w).decimalPlaces(0).toString(),S=new ne__default.default(q.tipFee??E.tipFee).shiftedBy(w).decimalPlaces(0).toString();try{await $({chain:t,wallet:d,input:j,output:oe,amount:H,slippage:q.slippage??E.slippage,priorityFee:me,tipFee:S,isAntiMev:q.antiMev!=="off"}),s.setAmount(void 0);}catch{}},[s,d,r,n,l,a,t,$]),Z=react.useMemo(()=>{let w=s.direction==="buy"?"Buy":"Sell";if(!s.amount)return w;if(s.direction==="buy"){let _=v?.amount;if(_&&new ne__default.default(_).lt(s.amount))return `${w} (Insufficient balance)`;let j=n?.symbol??"";a?.marketData?.priceInUsd?Number(a.marketData.priceInUsd):null;let K=x.data?.find(H=>H.address===N)?.marketData?.priceInUsd;if(K){let H=utils.formatAmountUSD(new ne__default.default(s.amount).times(Number(K)));return `${w} ${s.amount} ${j} (${H})`}return `${w} ${s.amount} ${j}`}let R=h?.amount;return R&&new ne__default.default(R).lt(s.amount)?`${w} (Insufficient balance)`:w},[s.direction,s.amount,v,h,n,a,x.data,N]),ae=!s.amount||!d||!r,Q=x.isPending||m.isPending;return react.useMemo(()=>({chain:t,tokenAddress:r,nativeToken:n,tokenInfo:a,nativeBalance:v,tokenBalance:h,direction:s.direction,setDirection:s.setDirection,amount:s.amount,setAmount:s.setAmount,buyPreset:s.buyPreset,setBuyPreset:s.setBuyPreset,sellPreset:s.sellPreset,setSellPreset:s.setSellPreset,currentPresetValues:s.currentPresetValues,settings:s.settings,updateBuySettings:s.updateBuySettings,updateSellSettings:s.updateSellSettings,showSettings:T,handlePresetClick:O,swap:B,isSwapping:X,submitText:Z,isDisabled:ae,isLoading:Q}),[t,r,n,a,v,h,s,T,O,B,X,Z,ae,Q])}function le({value:e,onChange:t,nativeSymbol:r="SOL",nativeDecimals:o=9,className:i}){let s=react.useCallback(n=>t({...e,...n}),[e,t]);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-1.5",i),children:[jsxRuntime.jsx(kn,{value:e.slippage,onChange:n=>s({slippage:n})}),jsxRuntime.jsx(Rn,{value:e.priorityFee,onChange:n=>s({priorityFee:n}),symbol:r,decimals:o}),jsxRuntime.jsx(Mn,{value:e.tipFee,onChange:n=>s({tipFee:n}),symbol:r,decimals:o}),jsxRuntime.jsx(Un,{value:e.autoFee,onChange:n=>s({autoFee:n})}),e.autoFee&&jsxRuntime.jsx(Bn,{value:e.maxAutoFee,onChange:n=>s({maxAutoFee:n}),symbol:r}),jsxRuntime.jsx(_n,{value:e.antiMev,onChange:n=>s({antiMev:n})}),jsxRuntime.jsx(Ln,{value:e.customRPC,onChange:n=>s({customRPC:n})})]})}var ue={inputWrapper:"bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3 h-8 min-h-0 py-0",input:"text-xs"};function ve(e){return react.useCallback(t=>{typeof t=="number"&&e(isNaN(t)?null:t);},[e])}function kn({value:e,onChange:t}){let r=ve(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:"Slippage"}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:r,hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:"%"}),classNames:ue,"aria-label":"Slippage"})]})}function Rn({value:e,onChange:t,symbol:r,decimals:o}){let i=ve(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Priority Fee",jsxRuntime.jsx(ui.Tooltip,{content:"Extra fee paid to validators to prioritize your transaction.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:i,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}),classNames:ue,"aria-label":"Priority Fee"})]})}function Mn({value:e,onChange:t,symbol:r,decimals:o}){let i=ve(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Tip Fee",jsxRuntime.jsx(ui.Tooltip,{content:"Additional tip sent alongside the transaction (e.g. Jito tip).",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:i,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}),classNames:ue,"aria-label":"Tip Fee"})]})}function Un({value:e,onChange:t}){return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Auto Fee",jsxRuntime.jsx(ui.Tooltip,{content:"Automatically estimate optimal fee based on network conditions.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.Switch,{isSelected:e,onValueChange:t,color:"primary",size:"sm","aria-label":"Auto Fee"})})]})}function Bn({value:e,onChange:t,symbol:r}){let o=ve(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:"Max Auto Fee"}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:o,hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}),classNames:ue,"aria-label":"Max Auto Fee"})]})}function _n({value:e,onChange:t}){return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Anti-MEV",jsxRuntime.jsx(ui.Tooltip,{content:"MEV protection shields your transaction from sandwich attacks.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",color:"primary",size:"sm",disableAnimation:true,radius:"lg",classNames:{tabList:"border-border border-1 gap-0",tab:"min-h-0 h-5 px-2"},selectedKey:e,onSelectionChange:t,"aria-label":"Anti-MEV",children:[jsxRuntime.jsx(ui.Tab,{title:"Off"},"off"),jsxRuntime.jsx(ui.Tab,{title:"Reduced"},"reduced"),jsxRuntime.jsx(ui.Tab,{title:"Secure"},"secure")]})})]})}function Ln({value:e,onChange:t}){return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-xs text-neutral",children:"Custom RPC"}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.Input,{fullWidth:true,value:e??"",onValueChange:r=>t(r||null),classNames:ue,placeholder:"https://...","aria-label":"Custom RPC"})})]})}function ze({direction:e,onDirectionChange:t,amount:r,onAmountChange:o,customAmounts:i,customPercentages:s,onQuickAmountClick:n,onQuickPercentageClick:l,onCustomAmountsEdit:p,onCustomPercentagesEdit:u,tokenSymbol:d,nativeSymbol:g,nativeDecimals:f,nativeBalance:x,tokenBalance:a,amountConversion:m,preset:N,onPresetChange:v,presetValues:h,onPresetSettingsChange:T,showSettings:D,onPresetClick:C,submitText:O,isDisabled:A,isLoading:V,onSubmit:$,className:X,headerExtra:B}){return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",X),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",selectedKey:e,onSelectionChange:t,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:"Buy"},"buy"),jsxRuntime.jsx(ui.Tab,{title:"Sell"},"sell")]}),jsxRuntime.jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsxRuntime.jsx(ui.Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsxRuntime.jsx(ui.Tab,{title:"Market"},"market")}),B]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:e==="buy"?jsxRuntime.jsx(Hn,{amount:r,onAmountChange:o,customAmounts:i,onQuickAmountClick:n,onCustomAmountsEdit:p,nativeSymbol:g,nativeDecimals:f}):jsxRuntime.jsx(Gn,{amount:r,onAmountChange:o,customPercentages:s,onQuickPercentageClick:l,onCustomPercentagesEdit:u,tokenSymbol:d})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:"Balance:"}),jsxRuntime.jsx("span",{children:e==="buy"?x?`${x} ${g??""}`:"--":a?`${a} ${d??""}`:"--"})]}),m&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:m})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(Xn,{values:h})}),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:`${N}`,onSelectionChange:Z=>v(Number(Z)),disableAnimation:true,"aria-label":"Presets",children:[jsxRuntime.jsx(ui.Tab,{title:"Preset 1",onClick:()=>C(0)},0),jsxRuntime.jsx(ui.Tab,{title:"Preset 2",onClick:()=>C(1)},1),jsxRuntime.jsx(ui.Tab,{title:"Preset 3",onClick:()=>C(2)},2)]})}),D&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(le,{value:h,onChange:T,nativeSymbol:g,nativeDecimals:f})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:e==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:A,isLoading:V,onPress:$,children:O})]})}function Hn({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:o,onCustomAmountsEdit:i,nativeSymbol:s,nativeDecimals:n}){let l=react.useCallback(p=>{typeof p=="number"&&t(isNaN(p)?void 0:p);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),formatOptions:{maximumFractionDigits:n??9},classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx(ft,{values:r,onSelect:o,onEdit:i})]})}function Gn({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:o,onCustomPercentagesEdit:i,tokenSymbol:s}){let n=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:n,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx(ft,{values:r,onSelect:o,onEdit:i,suffix:"%"})]})}function ft({values:e,onSelect:t,onEdit:r,suffix:o}){let[i,s]=react.useState(false),[n,l]=react.useState([]),p=react.useCallback(()=>{l([...e]),s(true);},[e]),u=react.useCallback(()=>{s(false),r(n);},[r,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,g)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",g===0&&"rounded-bl-lg"),children:i?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[g]===null||n[g]===void 0?void 0:n[g],onChange:f=>{if(typeof f=="number"){let x=isNaN(f)?null:f;l(a=>{let m=[...a];return m[g]=x,m});}},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",g===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[g]!=null&&t(e[g]),endContent:o?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:o}):null,children:e[g]??""})},g))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:i?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:u,children:jsxRuntime.jsx(ui.CheckIcon,{width:12,height:12})}):jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:p,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function Xn({values:e}){return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:"Slippage",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:"Priority Fee",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils.formatPrice(e.priorityFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:"Tip Fee",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:"Anti-MEV",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsxs(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[(!e.antiMev||e.antiMev==="off")&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})})]})}function Jn({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o,settings:i,onSettingsChange:s,headerExtra:n,className:l}){return jsxRuntime.jsx(Be,{chain:e,tokenAddress:t,settings:i,onSettingsChange:s,children:jsxRuntime.jsx(Yn,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o,headerExtra:n,className:l})})}function Yn({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o,headerExtra:i,className:s}){let n=De({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:o}),l=react.useCallback(a=>n.setAmount(a),[n]),p=react.useCallback(a=>{let m=n.tokenBalance?.amount;if(!m)return;let N=new ne__default.default(m).times(a).div(100).toNumber();n.setAmount(N);},[n]),u=react.useCallback(a=>{n.updateBuySettings({...n.settings.buy,customAmounts:a});},[n]),d=react.useCallback(a=>{n.updateSellSettings({...n.settings.sell,customPercentages:a});},[n]),g=react.useCallback(a=>{let m=n.direction==="buy",N=m?n.buyPreset:n.sellPreset;if(m){let v=n.settings.buy,h=[...v.presets];h[N]=a,n.updateBuySettings({...v,presets:h});}else {let v=n.settings.sell,h=[...v.presets];h[N]=a,n.updateSellSettings({...v,presets:h});}},[n]),f=react.useCallback(a=>{n.direction==="buy"?n.setBuyPreset(a):n.setSellPreset(a);},[n]),x=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(ze,{direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:l,onQuickPercentageClick:p,onCustomAmountsEdit:u,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeSymbol:n.nativeToken?.symbol,nativeDecimals:n.nativeToken?.decimals,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:x,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:g,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:s,headerExtra:i})}function os({value:e,onChange:t,chain:r,className:o}){let i=react.useMemo(()=>utils.getNativeToken(r),[r]),s=hooks.useCallbackRef(t),[n,l]=react.useState(e);react.useEffect(()=>{l(e);},[e]);let p=react.useCallback(u=>{l(u),s(u);},[s]);return jsxRuntime.jsx(le,{value:n,onChange:p,nativeSymbol:i?.symbol,nativeDecimals:i?.decimals,className:o})}function Ss({amount:e,onAmountChange:t,preset:r=0,onPresetChange:o,onPresetClick:i,variant:s="default",radius:n="full",size:l="sm",fullWidth:p=false,className:u}){let{nativeToken:d,settings:g}=Y(),f=react.useCallback(a=>{typeof a=="number"&&t(isNaN(a)?void 0:a);},[t]),x=react.useCallback(a=>{r===a?i?.(a):o?.(a);},[r,o,i]);return jsxRuntime.jsxs("div",{className:ui.cn("flex items-center gap-1.5 overflow-hidden px-3",n==="full"&&"rounded-full",n==="lg"&&"rounded-lg",n==="md"&&"rounded-md",n==="sm"&&"rounded-sm",s==="bordered"&&"border-1 border-border",s==="default"&&"bg-content2",u),children:[jsxRuntime.jsx("div",{className:ui.cn(p?"w-full":"w-20"),children:jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e,onChange:f,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:d?.decimals??9},startContent:jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-neutral flex-none"}),endContent:d?jsxRuntime.jsx(ui.Avatar,{className:"w-4 h-4 bg-transparent flex-none",name:d.symbol}):null,classNames:{inputWrapper:ui.cn("bg-transparent data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","w-full min-w-0 min-h-0 p-0 rounded-none",l==="sm"&&"h-6",l==="lg"&&"h-8"),input:"text-sm"},placeholder:"0.0","aria-label":"Instant trade amount"})}),jsxRuntime.jsx("div",{className:"w-px bg-border h-4"}),jsxRuntime.jsx("div",{className:"flex items-center gap-1",children:Array.from({length:3}).map((a,m)=>jsxRuntime.jsx(ui.Tooltip,{content:jsxRuntime.jsx(ws,{values:g.buy.presets[m]??E}),placement:"bottom",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("w-auto min-w-0 h-auto min-h-0 px-1 py-0.5 text-xs bg-transparent rounded",{"text-primary hover:bg-primary/20":m===r,"text-neutral hover:bg-content3":m!==r}),disableRipple:true,onPress:()=>x(m),children:`P${m+1}`})},m))})]})}function ws({values:e}){return jsxRuntime.jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils.formatPercent((e.slippage??0)/100)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils.formatPrice(e.priorityFee??0)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils.formatPrice(e.tipFee??0)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[(!e.antiMev||e.antiMev==="off")&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14}),e.antiMev==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14}),e.antiMev==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})]})]})}function Cs({className:e,children:t}){let{chain:r,tokenAddress:o,nativeToken:i,direction:s,amount:n,setAmount:l,currentPresetValues:p}=Y(),d=walletConnector.useWallets()[0]??null,g=react.useMemo(()=>utils.getWrappedToken(r),[r]),{swap:f,isSwapping:x}=te(),a=!n||!d||!o,m=react.useCallback(async()=>{if(!n||!d||!o)return;let N=i??utils.getNativeToken(r),v=N?.decimals??9,h=g?.address??N?.address??"",T=s==="buy",D=T?h:o,C=T?o:h,O=new ne__default.default(n).shiftedBy(v).decimalPlaces(0).toString(),A=p,V=new ne__default.default(A.priorityFee??E.priorityFee).shiftedBy(v).decimalPlaces(0).toString(),$=new ne__default.default(A.tipFee??E.tipFee).shiftedBy(v).decimalPlaces(0).toString();try{await f({chain:r,wallet:d,input:D,output:C,amount:O,slippage:A.slippage??E.slippage,priorityFee:V,tipFee:$,isAntiMev:A.antiMev!=="off"}),l(void 0);}catch{}},[n,d,o,i,g,r,s,p,f,l]);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:s==="buy"?"primary":"secondary",className:e,disableRipple:true,isDisabled:a,isLoading:x,onPress:m,children:t??(s==="buy"?"Buy":"Sell")})}typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.3");var Fs="0.1.3";
2
- exports.DEFAULT_BUY_AMOUNTS=Sr;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Ue;exports.DEFAULT_SELL_PERCENTAGES=wr;exports.DEFAULT_TRADE_PRESET=E;exports.InstantTradeAmountInput=Ss;exports.InstantTradeButton=Cs;exports.InstantTradeProvider=Be;exports.InstantTradeUI=ze;exports.InstantTradeWidget=Jn;exports.PresetFormUI=le;exports.PresetFormWidget=os;exports.SwapPreviewModal=Ee;exports.SwapUI=ke;exports.SwapWidget=rn;exports.useInstantTrade=Y;exports.useInstantTradeScript=De;exports.useSwap=te;exports.useSwapRoutePolling=Ke;exports.useSwapScript=Ie;exports.useTxConfirmation=He;exports.version=Fs;//# sourceMappingURL=index.js.map
1
+ 'use strict';var react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),jsxRuntime=require('react/jsx-runtime'),utils=require('@liberfi.io/utils'),ae=require('bignumber.js'),hooks=require('@liberfi.io/hooks');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ae__default=/*#__PURE__*/_interopDefault(ae);function kt(e){let t=atob(e),r=new Uint8Array(t.length);for(let a=0;a<t.length;a++)r[a]=t.charCodeAt(a);return r}function Mt(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function re(e){let{client:t}=react$1.useDexClient(),[r,a]=react.useState(false),l=react.useRef(e);l.current=e;let s=react.useCallback(async n=>{let{wallet:o,chain:u,...c}=n;a(true);try{let d;try{d=await t.swapRoute({chain:u,userAddress:o.address,input:c.input,output:c.output,mode:c.mode??types.API.SwapMode.EXACT_IN,amount:c.amount,slippage:c.slippage,priorityFee:c.priorityFee,tipFee:c.tipFee,isAntiMev:c.isAntiMev,permit:c.permit,deadline:c.deadline});}catch(i){let g=i instanceof Error?i:new Error(String(i));throw l.current?.onError?.(g,"route"),g}let m;try{let i=kt(d.serializedTx);m=await o.signTransaction(i);}catch(i){let g=i instanceof Error?i:new Error(String(i));throw l.current?.onError?.(g,"sign"),g}let f;try{let i=Mt(m);f=await t.sendTx({chain:u,serializedTx:i});}catch(i){let g=i instanceof Error?i:new Error(String(i));throw l.current?.onError?.(g,"send"),g}let h={txHash:f.txHash,extra:f.extra};return l.current?.onSubmitted?.(h),h}finally{a(false);}},[t]);return react.useMemo(()=>({swap:s,isSwapping:r}),[s,r])}var _t=12e3;function Ke(e,t){let r=t?.interval??_t,a=t?.paused??false,l=react.useRef(t);l.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!a,o=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return react.useEffect(()=>{o.error&&l.current?.onError?.(o.error);},[o.error]),react.useMemo(()=>({route:o.data,isRouting:o.isFetching,error:o.error}),[o.data,o.isFetching,o.error])}var zt=6e4;function Ge(e){let{client:t}=react$1.useDexClient(),[r,a]=react.useState(()=>new Map),l=react.useRef(e);l.current=e;let s=react.useCallback((c,d)=>{a(m=>{let f=m.get(c);if(!f||f.status===d)return m;let h=new Map(m);return h.set(c,{...f,status:d}),h});},[]),n=react.useCallback((c,d)=>{a(f=>{if(f.has(d))return f;let h=new Map(f);return h.set(d,{chain:c,txHash:d,status:"pending"}),h});let m=l.current?.timeout??zt;t.checkTxSuccess(c,d,m).then(f=>{if(f)s(d,"confirmed"),l.current?.onConfirmed?.(d);else {let h=new Error("Transaction failed on-chain");s(d,"failed"),l.current?.onFailed?.(d,h);}}).catch(f=>{let h=f instanceof Error?f:new Error(String(f));s(d,"failed"),l.current?.onFailed?.(d,h);});},[t,s]),o=react.useCallback(c=>{a(d=>{if(!d.has(c))return d;let m=new Map(d);return m.delete(c),m});},[]),u=react.useCallback(()=>{a(c=>c.size===0?c:new Map);},[]);return react.useMemo(()=>({track:n,clear:o,clearAll:u,transactions:r}),[n,o,u,r])}var Ht=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function Kt(e){return Ht.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Gt=1e4,Xt=15e3;function Zt(e,t){if(e.length===0)return;let a=e[e.length-1].outputAmount;if(!a||a==="0")return "0";let l=a.padStart(t+1,"0"),s=l.slice(0,l.length-t)||"0",o=l.slice(l.length-t).replace(/0+$/,"");return o?`${s}.${o}`:s}function Fe(e){let{chain:t}=e,r=walletConnector.useWallets(),a=Kt(t),l=react.useMemo(()=>r.find(w=>w.chainNamespace===a&&w.isConnected),[r,a]),s=l?.address??"",[n,o]=react.useState(e.from??""),[u,c]=react.useState(e.to??""),d=react.useRef(e.from),m=react.useRef(e.to);react.useEffect(()=>{e.from!==d.current&&(d.current=e.from,e.from&&o(e.from));},[e.from]),react.useEffect(()=>{e.to!==m.current&&(m.current=e.to,e.to&&c(e.to));},[e.to]);let f=react.useMemo(()=>[n,u].filter(Boolean),[n,u]),h=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Gt}),i=react.useMemo(()=>h.data?.find(w=>w.address===n)??null,[h.data,n]),g=react.useMemo(()=>h.data?.find(w=>w.address===u)??null,[h.data,u]),v=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:s,tokenAddresses:f},{enabled:!!s&&f.length>0,refetchInterval:Xt}),b=react.useMemo(()=>v.data?.find(w=>w.address===n)??null,[v.data,n]),x=react.useMemo(()=>v.data?.find(w=>w.address===u)??null,[v.data,u]),[T,M]=react.useState(void 0),I=react.useMemo(()=>{if(!T||i?.decimals==null)return;let w=T.split("."),D=w[0]??"0",Pt=(w[1]??"").slice(0,i.decimals).padEnd(i.decimals,"0");return (D+Pt).replace(/^0+/,"")||"0"},[T,i?.decimals]),R=react.useMemo(()=>{if(!T||!i?.marketData?.priceInUsd)return;let w=Number(i.marketData.priceInUsd),D=Number(T)*w;return Number.isFinite(D)?D.toString():void 0},[T,i?.marketData?.priceInUsd]),k=react.useCallback(()=>{if(!b)return;let w=Number(b.amount);if(!Number.isFinite(w)||w<=0)return;let D=w/2,He=i?.decimals??9;M(D.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:He}));},[b,i?.decimals]),U=react.useCallback(()=>{if(!b)return;let w=Number(b.amount);if(!Number.isFinite(w)||w<=0)return;let D=i?.decimals??9;M(w.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:D}));},[b,i?.decimals]),A=react.useMemo(()=>({chain:t,userAddress:s||void 0,input:n||void 0,output:u||void 0,mode:types.API.SwapMode.EXACT_IN,amount:I}),[t,s,n,u,I]),z=react.useRef(false),{route:L,isRouting:q,error:J}=Ke(A,{paused:z.current}),H=react.useMemo(()=>L&&g?Zt(L.plans,g.decimals):void 0,[L,g]),y=react.useMemo(()=>{if(!H||!g?.marketData?.priceInUsd)return;let w=Number(g.marketData.priceInUsd),D=Number(H)*w;return Number.isFinite(D)?D.toString():void 0},[H,g?.marketData?.priceInUsd]),{swap:B,isSwapping:O}=re();z.current=O;let K=react.useRef(e.onComplete);K.current=e.onComplete;let{track:le,transactions:G}=Ge({onConfirmed:w=>{K.current?.({success:true,txHash:w});},onFailed:w=>{K.current?.({success:false,txHash:w});}}),X=react.useMemo(()=>{if(G.size===0)return "idle";let w=Array.from(G.values());return w[w.length-1].status},[G]),Y=react.useCallback(async()=>{if(!(!l||!L||!n||!u||!I))try{let w=await B({chain:t,wallet:l,input:n,output:u,amount:I,mode:types.API.SwapMode.EXACT_IN});le(t,w.txHash);}catch{}},[l,L,t,n,u,I,B,le]),se=h.isPending||v.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:u,setFromTokenAddress:o,setToTokenAddress:c,fromToken:i,toToken:g,fromBalance:b,toBalance:x,amount:T,setAmount:M,setHalfAmount:k,setMaxAmount:U,amountInDecimals:I,amountInUsd:R,outputAmount:H,outputAmountInUsd:y,route:L,isRouting:q,routeError:J,swap:Y,isSwapping:O,txStatus:X,isLoading:se}),[n,u,i,g,b,x,T,k,U,I,R,H,y,L,q,J,Y,O,X,se])}function Me({isOpen:e,onOpenChange:t,fromToken:r,toToken:a,fromBalance:l,inputAmount:s,inputAmountInUsd:n,outputAmount:o,outputAmountInUsd:u,route:c,isRouting:d,routeError:m,onConfirm:f,isSwapping:h}){let[i,g]=react.useState(false),v=react.useCallback(()=>g(x=>!x),[]),b=react.useMemo(()=>c?c.plans.map((x,T)=>({key:`plan-${T}`,name:x.name,input:x.input,inputAmount:x.inputAmount,output:x.output,outputAmount:x.outputAmount,feeQuote:x.feeQuote,feeAmount:x.feeAmount})):[],[c]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:"Preview"}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"From"}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),l&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(un,{}),jsxRuntime.jsxs("span",{children:[Ee(l.amount)," ",r?.symbol]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:Ee(s)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",et(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"Estimated Receive"}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[a?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:a.image,name:a.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:a?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:he(a?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:Ee(o)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",et(u)]})]})]})]}),i&&b.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:"Route Details"}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:b.map(x=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:"DEX"}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:x.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:"Swap"}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[ke(x.inputAmount)," ",he(x.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[ke(x.outputAmount)," ",he(x.output)]})]})]}),x.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:"Fee"}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[ke(x.feeAmount)," ",he(x.feeQuote)]})]})]},x.key))})]}),b.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:i?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:v,children:i?"Show Less":"Show More"})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!c||!!m,isLoading:!c&&d||h,onPress:f,children:"Confirm"})})]})})}function un(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function et(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function Ee(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function ke(e){if(!e||e==="0")return "0";let t=Number(e);return Number.isFinite(t)?t>=1e12?(t/1e12).toFixed(2)+"T":t>=1e9?(t/1e9).toFixed(2)+"B":t>=1e6?(t/1e6).toFixed(2)+"M":t>=1e3?(t/1e3).toFixed(2)+"K":e:e}function he(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ue({fromToken:e,toToken:t,fromBalance:r,toBalance:a,amount:l,amountInUsd:s,onAmountChange:n,onHalfAmount:o,onMaxAmount:u,outputAmount:c,outputAmountInUsd:d,onFromTokenSelect:m,onToTokenSelect:f,route:h,isRouting:i,routeError:g,onPreview:v,isSwapping:b,className:x}){return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",x),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:"From"}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:l??"",onChange:T=>n(T.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>m(""),children:e?e.symbol:"Select token"})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",at(s)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(rt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[it(r.amount)," ",r.symbol]}),o&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:o,children:"Half"}),u&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:u,children:"Max"})]})]}),g&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:g.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:"To"}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:c??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>f(""),children:t?t.symbol:"Select token"})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",at(d)]}),a&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(rt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[it(a.amount)," ",a.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&i,onPress:v,children:b?"Swapping...":i?"Finding route...":"Swap"})]})}function rt(){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral",children:[jsxRuntime.jsx("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),jsxRuntime.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),jsxRuntime.jsx("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"})]})}function at(e){if(!e)return "0.00";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"}function it(e){if(!e)return "0";let t=Number(e);return Number.isFinite(t)?t>=1e6?(t/1e6).toLocaleString("en-US",{maximumFractionDigits:2})+"M":t>=1e3?(t/1e3).toLocaleString("en-US",{maximumFractionDigits:2})+"K":t.toLocaleString("en-US",{maximumFractionDigits:6}):"0"}function mn({chain:e,from:t,to:r,onComplete:a,className:l}){let s=Fe({chain:e,from:t,to:r,onComplete:a}),{isOpen:n,onOpen:o,onOpenChange:u,onClose:c}=ui.useDisclosure(),d=react.useCallback(async()=>{await s.swap(),c();},[s,c]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ue,{fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,toBalance:s.toBalance,amount:s.amount,amountInUsd:s.amountInUsd,onAmountChange:s.setAmount,onHalfAmount:s.setHalfAmount,onMaxAmount:s.setMaxAmount,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,onFromTokenSelect:s.setFromTokenAddress,onToTokenSelect:s.setToTokenAddress,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onPreview:o,isSwapping:s.isSwapping,className:l}),jsxRuntime.jsx(Me,{isOpen:n,onOpenChange:u,fromToken:s.fromToken,toToken:s.toToken,fromBalance:s.fromBalance,inputAmount:s.amount,inputAmountInUsd:s.amountInUsd,outputAmount:s.outputAmount,outputAmountInUsd:s.outputAmountInUsd,route:s.route,isRouting:s.isRouting,routeError:s.routeError,onConfirm:d,isSwapping:s.isSwapping})]})}var lt={slippage:20,priorityFee:.001,tipFee:.001,autoFee:false,maxAutoFee:.1,antiMev:"off",customRPC:null},ut={slippage:1,priorityFee:5,tipFee:null,autoFee:false,maxAutoFee:null,antiMev:"off",customRPC:null},dt={slippage:1,priorityFee:5,tipFee:.001,autoFee:false,maxAutoFee:null,antiMev:"off",customRPC:null},kr=[.01,.1,1,10],Mr=[10,25,50,100];var Be=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]),ct=new Set([types.Chain.BINANCE,types.Chain.BINANCE_TESTNET]);function te(e,t="ETH"){return Be.has(e)?{feeLabel:"Priority Fee",feeUnit:"SOL",feeDecimals:9,showTipFee:true,tipFeeUnit:"SOL",tipFeeDecimals:9,antiMevOptions:["off","reduced","secure"]}:ct.has(e)?{feeLabel:"Gas Fee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:"BNB",tipFeeDecimals:9,antiMevOptions:["off","secure"]}:{feeLabel:"Gas Fee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:t,tipFeeDecimals:9,antiMevOptions:["off","secure"]}}function gn(e){return Be.has(e)}function $(e){return Be.has(e)?lt:ct.has(e)?dt:ut}function mt(e){let t=$(e);return {buy:{customAmounts:[.01,.1,1,10],presets:[{...t},{...t},{...t}]},sell:{customPercentages:[10,25,50,100],presets:[{...t},{...t},{...t}]}}}var vn=mt("900900900");function pt(e){return `liberfi.instant-trade.settings.${e}`}function Sn(e,t){try{let r=localStorage.getItem(pt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function wn(e,t){try{localStorage.setItem(pt(e),JSON.stringify(t));}catch{}}var ft=react.createContext(null);function ne(){let e=react.useContext(ft);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function _e({chain:e,tokenAddress:t,settings:r,onSettingsChange:a,children:l}){let s=react.useMemo(()=>utils.getNativeToken(e),[e]),n=r!==void 0,o=react.useMemo(()=>mt(e),[e]),[u,c]=react.useState(()=>n?o:Sn(e,o)),d=n?r:u,m=react.useCallback(A=>{n?a?.(A):(c(A),wn(String(e),A));},[n,a,e]),f=react.useCallback(A=>m({...d,buy:A}),[d,m]),h=react.useCallback(A=>m({...d,sell:A}),[d,m]),[i,g]=react.useState("buy"),[v,b]=react.useState(),[x,T]=react.useState(0),[M,I]=react.useState(0),R=react.useMemo(()=>$(e),[e]),k=react.useMemo(()=>{let A=i==="buy"?x:M;return (i==="buy"?d.buy.presets:d.sell.presets)[A]??R},[i,x,M,d,R]),U=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:s,direction:i,setDirection:g,amount:v,setAmount:b,buyPreset:x,setBuyPreset:T,sellPreset:M,setSellPreset:I,settings:d,updateBuySettings:f,updateSellSettings:h,currentPresetValues:k}),[e,t,s,i,v,x,M,d,f,h,k]);return jsxRuntime.jsx(ft.Provider,{value:U,children:l})}var En=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function kn(e){return En.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var Mn=15e3,Rn=1e4;function Ve(e){let{chain:t,tokenAddress:r,onSwapSubmitted:a,onSwapError:l}=e,s=ne(),n=react.useMemo(()=>utils.getNativeToken(t),[t]),o=react.useMemo(()=>utils.getWrappedToken(t),[t]),u=walletConnector.useWallets(),c=kn(t),d=react.useMemo(()=>u.find(y=>y.chainNamespace===c&&y.isConnected),[u,c]),m=d?.address??"",f=react.useMemo(()=>{let y=[r];return n&&y.push(n.address),o&&y.push(o.address),y.filter(Boolean)},[r,n,o]),h=react$1.useTokensQuery({chain:t,addresses:f},{enabled:f.length>0,refetchInterval:Rn}),i=react.useMemo(()=>h.data?.find(y=>y.address===r)??null,[h.data,r]),g=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:m,tokenAddresses:f},{enabled:!!m&&f.length>0,refetchInterval:Mn}),v=n?.address??o?.address??"",b=react.useMemo(()=>g.data?.find(y=>y.address===v)??null,[g.data,v]),x=react.useMemo(()=>g.data?.find(y=>y.address===r)??null,[g.data,r]),[T,M]=react.useState(false),I=react.useRef(null),R=react.useCallback(y=>{let B=I.current;I.current=y,M(O=>B===null||B!==y?true:!O);},[]),k=react.useRef(a);k.current=a;let U=react.useRef(l);U.current=l;let{swap:A,isSwapping:z}=re({onSubmitted:y=>k.current?.(y),onError:(y,B)=>U.current?.(y,B)}),L=react.useCallback(async()=>{if(!s.amount||!d||!r)return;let y=n?.decimals??9,B=o?.address??n?.address??"",O=s.direction==="buy",K=O?B:r,le=O?r:B,G=O?y:i?.decimals??9,X=new ae__default.default(s.amount).shiftedBy(G).decimalPlaces(0).toString(),Y=s.currentPresetValues,se=$(t),w=new ae__default.default(Y.priorityFee??se.priorityFee??0).shiftedBy(y).decimalPlaces(0).toString(),D=new ae__default.default(Y.tipFee??se.tipFee??0).shiftedBy(y).decimalPlaces(0).toString();try{await A({chain:t,wallet:d,input:K,output:le,amount:X,slippage:Y.slippage??se.slippage??1,priorityFee:w,tipFee:D,isAntiMev:Y.antiMev!=="off"}),s.setAmount(void 0);}catch{}},[s,d,r,n,o,i,t,A]),q=react.useMemo(()=>{let y=s.direction==="buy"?"Buy":"Sell";if(!s.amount)return y;if(s.direction==="buy"){let O=b?.amount;if(O&&new ae__default.default(O).lt(s.amount))return `${y} (Insufficient balance)`;let K=n?.symbol??"";i?.marketData?.priceInUsd?Number(i.marketData.priceInUsd):null;let G=h.data?.find(X=>X.address===v)?.marketData?.priceInUsd;if(G){let X=utils.formatAmountUSD(new ae__default.default(s.amount).times(Number(G)));return `${y} ${s.amount} ${K} (${X})`}return `${y} ${s.amount} ${K}`}let B=x?.amount;return B&&new ae__default.default(B).lt(s.amount)?`${y} (Insufficient balance)`:y},[s.direction,s.amount,b,x,n,i,h.data,v]),J=!s.amount||!d||!r,H=h.isPending||g.isPending;return react.useMemo(()=>({chain:t,tokenAddress:r,nativeToken:n,tokenInfo:i,nativeBalance:b,tokenBalance:x,direction:s.direction,setDirection:s.setDirection,amount:s.amount,setAmount:s.setAmount,buyPreset:s.buyPreset,setBuyPreset:s.setBuyPreset,sellPreset:s.sellPreset,setSellPreset:s.setSellPreset,currentPresetValues:s.currentPresetValues,settings:s.settings,updateBuySettings:s.updateBuySettings,updateSellSettings:s.updateSellSettings,showSettings:T,handlePresetClick:R,swap:L,isSwapping:z,submitText:q,isDisabled:J,isLoading:H}),[t,r,n,i,b,x,s,T,R,L,z,q,J,H])}function me({value:e,onChange:t,chain:r,nativeSymbol:a="SOL",nativeDecimals:l=9,className:s}){let n=react.useCallback(u=>t({...e,...u}),[e,t]),o=react.useMemo(()=>te(r,a),[r,a]);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-1.5",s),children:[jsxRuntime.jsx(Vn,{value:e.slippage,onChange:u=>n({slippage:u})}),jsxRuntime.jsx(Wn,{value:e.priorityFee,onChange:u=>n({priorityFee:u}),label:o.feeLabel,symbol:o.feeUnit,decimals:o.feeDecimals}),o.showTipFee&&jsxRuntime.jsx(zn,{value:e.tipFee,onChange:u=>n({tipFee:u}),symbol:o.tipFeeUnit,decimals:o.tipFeeDecimals}),jsxRuntime.jsx($n,{value:e.autoFee,onChange:u=>n({autoFee:u})}),e.autoFee&&jsxRuntime.jsx(Qn,{value:e.maxAutoFee,onChange:u=>n({maxAutoFee:u}),symbol:a}),jsxRuntime.jsx(Hn,{value:e.antiMev,onChange:u=>n({antiMev:u}),options:o.antiMevOptions}),jsxRuntime.jsx(Kn,{value:e.customRPC,onChange:u=>n({customRPC:u})})]})}var pe={inputWrapper:"bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3 h-8 min-h-0 py-0",input:"text-xs"};function ye(e){return react.useCallback(t=>{typeof t=="number"&&e(isNaN(t)?null:t);},[e])}function Vn({value:e,onChange:t}){let r=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:"Slippage"}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:r,hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:"%"}),classNames:pe,"aria-label":"Slippage"})]})}function Wn({value:e,onChange:t,label:r="Priority Fee",symbol:a,decimals:l}){let s=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:[r,jsxRuntime.jsx(ui.Tooltip,{content:"Extra fee paid to validators to prioritize your transaction.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:s,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:l},endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:a}),classNames:pe,"aria-label":"Priority Fee"})]})}function zn({value:e,onChange:t,symbol:r,decimals:a}){let l=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Tip Fee",jsxRuntime.jsx(ui.Tooltip,{content:"Additional tip sent alongside the transaction (e.g. Jito tip).",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:l,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:a},endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}),classNames:pe,"aria-label":"Tip Fee"})]})}function $n({value:e,onChange:t}){return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Auto Fee",jsxRuntime.jsx(ui.Tooltip,{content:"Automatically estimate optimal fee based on network conditions.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.Switch,{isSelected:e,onValueChange:t,color:"primary",size:"sm","aria-label":"Auto Fee"})})]})}function Qn({value:e,onChange:t,symbol:r}){let a=ye(t);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:"Max Auto Fee"}),jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e===null?void 0:e,onChange:a,hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}),classNames:pe,"aria-label":"Max Auto Fee"})]})}var jn={off:"Off",reduced:"Reduced",secure:"Secure"};function Hn({value:e,onChange:t,options:r}){return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral flex items-center gap-1",children:["Anti-MEV",jsxRuntime.jsx(ui.Tooltip,{content:"MEV protection shields your transaction from sandwich attacks.",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",size:"sm",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.Tabs,{variant:"bordered",color:"primary",size:"sm",disableAnimation:true,radius:"lg",classNames:{tabList:"border-border border-1 gap-0",tab:"min-h-0 h-5 px-2"},selectedKey:e,onSelectionChange:t,"aria-label":"Anti-MEV",children:r.map(a=>jsxRuntime.jsx(ui.Tab,{title:jn[a]??a},a))})})]})}function Kn({value:e,onChange:t}){return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-xs text-neutral",children:"Custom RPC"}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.Input,{fullWidth:true,value:e??"",onValueChange:r=>t(r||null),classNames:pe,placeholder:"https://...","aria-label":"Custom RPC"})})]})}function $e({chain:e,direction:t,onDirectionChange:r,amount:a,onAmountChange:l,customAmounts:s,customPercentages:n,onQuickAmountClick:o,onQuickPercentageClick:u,onCustomAmountsEdit:c,onCustomPercentagesEdit:d,tokenSymbol:m,nativeSymbol:f,nativeDecimals:h,nativeBalance:i,tokenBalance:g,amountConversion:v,preset:b,onPresetChange:x,presetValues:T,onPresetSettingsChange:M,showSettings:I,onPresetClick:R,submitText:k,isDisabled:U,isLoading:A,onSubmit:z,className:L,headerExtra:q}){return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",L),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:r,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:"Buy"},"buy"),jsxRuntime.jsx(ui.Tab,{title:"Sell"},"sell")]}),jsxRuntime.jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsxRuntime.jsx(ui.Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsxRuntime.jsx(ui.Tab,{title:"Market"},"market")}),q]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(rs,{amount:a,onAmountChange:l,customAmounts:s,onQuickAmountClick:o,onCustomAmountsEdit:c,nativeSymbol:f,nativeDecimals:h}):jsxRuntime.jsx(as,{amount:a,onAmountChange:l,customPercentages:n,onQuickPercentageClick:u,onCustomPercentagesEdit:d,tokenSymbol:m})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:"Balance:"}),jsxRuntime.jsx("span",{children:t==="buy"?i?`${i} ${f??""}`:"--":g?`${g} ${m??""}`:"--"})]}),v&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:v})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(is,{values:T,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${b}`,onSelectionChange:J=>x(Number(J)),disableAnimation:true,"aria-label":"Presets",children:[jsxRuntime.jsx(ui.Tab,{title:"Preset 1",onClick:()=>R(0)},0),jsxRuntime.jsx(ui.Tab,{title:"Preset 2",onClick:()=>R(1)},1),jsxRuntime.jsx(ui.Tab,{title:"Preset 3",onClick:()=>R(2)},2)]})}),I&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(me,{value:T,onChange:M,chain:e,nativeSymbol:f,nativeDecimals:h})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:U,isLoading:A,onPress:z,children:k})]})}function rs({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:a,onCustomAmountsEdit:l,nativeSymbol:s,nativeDecimals:n}){let o=react.useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:o,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),formatOptions:{maximumFractionDigits:n??9},classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx(St,{values:r,onSelect:a,onEdit:l})]})}function as({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:a,onCustomPercentagesEdit:l,tokenSymbol:s}){let n=react.useCallback(o=>{typeof o=="number"&&t(isNaN(o)?void 0:o);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:n,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:"Amount"}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:s??""}),classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx(St,{values:r,onSelect:a,onEdit:l,suffix:"%"})]})}function St({values:e,onSelect:t,onEdit:r,suffix:a}){let[l,s]=react.useState(false),[n,o]=react.useState([]),u=react.useCallback(()=>{o([...e]),s(true);},[e]),c=react.useCallback(()=>{s(false),r(n);},[r,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((d,m)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",m===0&&"rounded-bl-lg"),children:l?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[m]===null||n[m]===void 0?void 0:n[m],onChange:f=>{if(typeof f=="number"){let h=isNaN(f)?null:f;o(i=>{let g=[...i];return g[m]=h,g});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",m===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[m]!=null&&t(e[m]),endContent:a?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:a}):null,children:e[m]??""})},m))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:l?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:c,children:jsxRuntime.jsx(ui.CheckIcon,{width:12,height:12})}):jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:u,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function is({values:e,chain:t}){let r=react.useMemo(()=>te(t),[t]);return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:"Slippage",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:r.feeLabel,classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils.formatPrice(e.priorityFee??0)})}),r.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:"Tip Fee",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:"Anti-MEV",classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsxs(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[(!e.antiMev||e.antiMev==="off")&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),e.antiMev==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})})]})}function us({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a,settings:l,onSettingsChange:s,headerExtra:n,className:o}){return jsxRuntime.jsx(_e,{chain:e,tokenAddress:t,settings:l,onSettingsChange:s,children:jsxRuntime.jsx(ds,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a,headerExtra:n,className:o})})}function ds({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a,headerExtra:l,className:s}){let n=Ve({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:a}),o=react.useCallback(i=>n.setAmount(i),[n]),u=react.useCallback(i=>{let g=n.tokenBalance?.amount;if(!g)return;let v=new ae__default.default(g).times(i).div(100).toNumber();n.setAmount(v);},[n]),c=react.useCallback(i=>{n.updateBuySettings({...n.settings.buy,customAmounts:i});},[n]),d=react.useCallback(i=>{n.updateSellSettings({...n.settings.sell,customPercentages:i});},[n]),m=react.useCallback(i=>{let g=n.direction==="buy",v=g?n.buyPreset:n.sellPreset;if(g){let b=n.settings.buy,x=[...b.presets];x[v]=i,n.updateBuySettings({...b,presets:x});}else {let b=n.settings.sell,x=[...b.presets];x[v]=i,n.updateSellSettings({...b,presets:x});}},[n]),f=react.useCallback(i=>{n.direction==="buy"?n.setBuyPreset(i):n.setSellPreset(i);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx($e,{chain:e,direction:n.direction,onDirectionChange:n.setDirection,amount:n.amount,onAmountChange:n.setAmount,customAmounts:n.settings.buy.customAmounts,customPercentages:n.settings.sell.customPercentages,onQuickAmountClick:o,onQuickPercentageClick:u,onCustomAmountsEdit:c,onCustomPercentagesEdit:d,tokenSymbol:n.tokenInfo?.symbol,nativeSymbol:n.nativeToken?.symbol,nativeDecimals:n.nativeToken?.decimals,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:f,presetValues:n.currentPresetValues,onPresetSettingsChange:m,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:s,headerExtra:l})}function hs({value:e,onChange:t,chain:r,className:a}){let l=react.useMemo(()=>utils.getNativeToken(r),[r]),s=hooks.useCallbackRef(t),[n,o]=react.useState(e);react.useEffect(()=>{o(e);},[e]);let u=react.useCallback(c=>{o(c),s(c);},[s]);return jsxRuntime.jsx(me,{value:n,onChange:u,chain:r,nativeSymbol:l?.symbol,nativeDecimals:l?.decimals,className:a})}function ks({amount:e,onAmountChange:t,preset:r=0,onPresetChange:a,onPresetClick:l,variant:s="default",radius:n="full",size:o="sm",fullWidth:u=false,className:c}){let{chain:d,nativeToken:m,settings:f}=ne(),h=react.useMemo(()=>$(d),[d]),i=react.useCallback(v=>{typeof v=="number"&&t(isNaN(v)?void 0:v);},[t]),g=react.useCallback(v=>{r===v?l?.(v):a?.(v);},[r,a,l]);return jsxRuntime.jsxs("div",{className:ui.cn("flex items-center gap-1.5 overflow-hidden px-3",n==="full"&&"rounded-full",n==="lg"&&"rounded-lg",n==="md"&&"rounded-md",n==="sm"&&"rounded-sm",s==="bordered"&&"border-1 border-border",s==="default"&&"bg-content2",c),children:[jsxRuntime.jsx("div",{className:ui.cn(u?"w-full":"w-20"),children:jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e,onChange:i,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:m?.decimals??9},startContent:jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-neutral flex-none"}),endContent:m?jsxRuntime.jsx(ui.Avatar,{className:"w-4 h-4 bg-transparent flex-none",name:m.symbol}):null,classNames:{inputWrapper:ui.cn("bg-transparent data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","w-full min-w-0 min-h-0 p-0 rounded-none",o==="sm"&&"h-6",o==="lg"&&"h-8"),input:"text-sm"},placeholder:"0.0","aria-label":"Instant trade amount"})}),jsxRuntime.jsx("div",{className:"w-px bg-border h-4"}),jsxRuntime.jsx("div",{className:"flex items-center gap-1",children:Array.from({length:3}).map((v,b)=>jsxRuntime.jsx(ui.Tooltip,{content:jsxRuntime.jsx(Ms,{values:f.buy.presets[b]??h,chain:d}),placement:"bottom",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("w-auto min-w-0 h-auto min-h-0 px-1 py-0.5 text-xs bg-transparent rounded",{"text-primary hover:bg-primary/20":b===r,"text-neutral hover:bg-content3":b!==r}),disableRipple:true,onPress:()=>g(b),children:`P${b+1}`})},b))})]})}function Ms({values:e,chain:t}){let r=react.useMemo(()=>te(t),[t]);return jsxRuntime.jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils.formatPercent((e.slippage??0)/100)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils.formatPrice(e.priorityFee??0)," ",r.feeUnit]})]}),r.showTipFee&&jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils.formatPrice(e.tipFee??0)," ",r.tipFeeUnit]})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[(!e.antiMev||e.antiMev==="off")&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14}),e.antiMev==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14}),e.antiMev==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[(!e.antiMev||e.antiMev==="off")&&"Off",e.antiMev==="reduced"&&"Reduced",e.antiMev==="secure"&&"Secure"]})]})]})}function Os({className:e,children:t}){let{chain:r,tokenAddress:a,nativeToken:l,direction:s,amount:n,setAmount:o,currentPresetValues:u}=ne(),d=walletConnector.useWallets()[0]??null,m=react.useMemo(()=>utils.getWrappedToken(r),[r]),{swap:f,isSwapping:h}=re(),i=!n||!d||!a,g=react.useCallback(async()=>{if(!n||!d||!a)return;let v=l??utils.getNativeToken(r),b=v?.decimals??9,x=m?.address??v?.address??"",T=s==="buy",M=T?x:a,I=T?a:x,R=new ae__default.default(n).shiftedBy(b).decimalPlaces(0).toString(),k=u,U=$(r),A=new ae__default.default(k.priorityFee??U.priorityFee??0).shiftedBy(b).decimalPlaces(0).toString(),z=new ae__default.default(k.tipFee??U.tipFee??0).shiftedBy(b).decimalPlaces(0).toString();try{await f({chain:r,wallet:d,input:M,output:I,amount:R,slippage:k.slippage??U.slippage??1,priorityFee:A,tipFee:z,isAntiMev:k.antiMev!=="off"}),o(void 0);}catch{}},[n,d,a,l,m,r,s,u,f,o]);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:s==="buy"?"primary":"secondary",className:e,disableRipple:true,isDisabled:i,isLoading:h,onPress:g,children:t??(s==="buy"?"Buy":"Sell")})}typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.4");var Ws="0.1.4";
2
+ exports.DEFAULT_BSC_TRADE_PRESET=dt;exports.DEFAULT_BUY_AMOUNTS=kr;exports.DEFAULT_EVM_TRADE_PRESET=ut;exports.DEFAULT_INSTANT_TRADE_SETTINGS=vn;exports.DEFAULT_SELL_PERCENTAGES=Mr;exports.DEFAULT_TRADE_PRESET=lt;exports.InstantTradeAmountInput=ks;exports.InstantTradeButton=Os;exports.InstantTradeProvider=_e;exports.InstantTradeUI=$e;exports.InstantTradeWidget=us;exports.PresetFormUI=me;exports.PresetFormWidget=hs;exports.SwapPreviewModal=Me;exports.SwapUI=Ue;exports.SwapWidget=mn;exports.getChainPresetFeatures=te;exports.getDefaultPresetForChain=$;exports.isSolanaChain=gn;exports.useInstantTrade=ne;exports.useInstantTradeScript=Ve;exports.useSwap=re;exports.useSwapRoutePolling=Ke;exports.useSwapScript=Fe;exports.useTxConfirmation=Ge;exports.version=Ws;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map