@liberfi.io/ui-trade 0.1.3 → 0.1.5

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.ts CHANGED
@@ -4,6 +4,9 @@ import { WalletAdapter } from '@liberfi.io/wallet-connector';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { ReactNode } from 'react';
6
6
  import { PredefinedToken } from '@liberfi.io/utils';
7
+ import * as jotai_family from 'jotai-family';
8
+ import * as jotai from 'jotai';
9
+ import * as jotai_utils from 'jotai/utils';
7
10
 
8
11
  /**
9
12
  * Input parameters for the `swap()` function returned by {@link useSwap}.
@@ -67,23 +70,29 @@ interface UseSwapRoutePollingOptions {
67
70
  interface TradePresetValues {
68
71
  /** Slippage tolerance, 0-100 (percent). `null` = use default. */
69
72
  slippage: number | null;
70
- /** Priority fee in native token units. `null` = use default. */
73
+ /** Priority fee in SOL. `null` = use default. (Solana only) */
71
74
  priorityFee: number | null;
72
- /** Tip fee in native token units. `null` = use default. */
73
- tipFee: number | null;
74
- /** Whether automatic fee estimation is enabled. */
75
+ /** Whether automatic fee estimation is enabled. (Solana only) */
75
76
  autoFee: boolean;
76
- /** Maximum fee cap when auto-fee is on (native token units). */
77
+ /** Maximum fee cap when auto-fee is on, in SOL. (Solana only) */
77
78
  maxAutoFee: number | null;
79
+ /** Gas fee in Gwei. `null` = use default. (EVM only) */
80
+ gasFee: number | null;
81
+ /** Tip/bribe fee in native token units. `null` = not applicable. (Solana, BSC) */
82
+ tipFee: number | null;
78
83
  /** Anti-MEV protection level. */
79
84
  antiMev: "off" | "reduced" | "secure";
80
85
  /** Custom RPC endpoint URL. `null` = use default. */
81
86
  customRPC: string | null;
82
87
  }
83
88
  /** Default preset values matching Solana-typical settings. */
84
- declare const DEFAULT_TRADE_PRESET: TradePresetValues;
85
- /** Default quick-buy amounts (native token units). */
86
- declare const DEFAULT_BUY_AMOUNTS: number[];
89
+ declare const DEFAULT_SOL_TRADE_PRESET: TradePresetValues;
90
+ /** Default preset values for EVM chains (gas fee in Gwei). */
91
+ declare const DEFAULT_EVM_TRADE_PRESET: TradePresetValues;
92
+ /** Default preset values for BSC (gas in Gwei + tip in BNB). */
93
+ declare const DEFAULT_BSC_TRADE_PRESET: TradePresetValues;
94
+ /** Returns default quick-buy amounts for the given token symbol. */
95
+ declare function getDefaultBuyAmounts(symbol: string): number[];
87
96
  /** Default quick-sell percentages. */
88
97
  declare const DEFAULT_SELL_PERCENTAGES: number[];
89
98
  /** Confirmation status of a tracked transaction. */
@@ -402,6 +411,7 @@ interface InstantTradeWidgetProps {
402
411
  }
403
412
  /** Props for {@link InstantTradeUI}. */
404
413
  interface InstantTradeUIProps {
414
+ chain: Chain;
405
415
  direction: "buy" | "sell";
406
416
  onDirectionChange: (d: "buy" | "sell") => void;
407
417
  amount: number | undefined;
@@ -413,8 +423,6 @@ interface InstantTradeUIProps {
413
423
  onCustomAmountsEdit: (amounts: (number | null)[]) => void;
414
424
  onCustomPercentagesEdit: (pcts: (number | null)[]) => void;
415
425
  tokenSymbol?: string;
416
- nativeSymbol?: string;
417
- nativeDecimals?: number;
418
426
  nativeBalance?: string;
419
427
  tokenBalance?: string;
420
428
  amountConversion?: string;
@@ -485,17 +493,46 @@ interface InstantTradeButtonProps {
485
493
  interface PresetFormUIProps {
486
494
  value: TradePresetValues;
487
495
  onChange: (value: TradePresetValues) => void;
488
- nativeSymbol?: string;
489
- nativeDecimals?: number;
496
+ /** Target chain — determines which fields are shown and native token info. */
497
+ chain: Chain;
498
+ disableAnimation?: boolean;
490
499
  className?: string;
491
500
  }
492
501
  /** Props for {@link PresetFormWidget}. */
493
502
  interface PresetFormWidgetProps {
494
- value: TradePresetValues;
495
- onChange: (value: TradePresetValues) => void;
503
+ /** Target chain — determines default values and visible fields. */
504
+ chain: Chain;
505
+ /** Preset index (0, 1, or 2). Defaults to 0. */
506
+ presetIndex?: number;
507
+ /** Storage key prefix. Defaults to `"liberfi."`. */
508
+ storageKeyPrefix?: string;
509
+ /** Notification callback when value changes (does not control state). */
510
+ onChange?: (direction: "buy" | "sell", value: TradePresetValues) => void;
511
+ disableAnimation?: boolean;
512
+ className?: string;
513
+ }
514
+ /** Props for {@link MultiPresetFormWidget}. */
515
+ interface MultiPresetFormWidgetProps {
516
+ /** Target chain — determines default values and visible fields. */
496
517
  chain: Chain;
518
+ /** Storage key prefix. Defaults to `"liberfi."`. */
519
+ storageKeyPrefix?: string;
520
+ /** Notification callback when value changes (does not control state). */
521
+ onChange?: (presetIndex: number, direction: "buy" | "sell", value: TradePresetValues) => void;
522
+ disableAnimation?: boolean;
497
523
  className?: string;
498
524
  }
525
+ /** Params passed when opening the preset-form modal via `useAsyncModal`. */
526
+ interface PresetFormModalParams {
527
+ /** Available chains to switch between. */
528
+ chains: Chain[];
529
+ /** Default chain when no param is passed on open. Defaults to first item in `chains`. */
530
+ defaultChain?: Chain;
531
+ /** Storage key prefix. Defaults to `"liberfi."`. */
532
+ storageKeyPrefix?: string;
533
+ /** Notification callback when any preset value changes. */
534
+ onChange?: (chain: Chain, presetIndex: number, direction: "buy" | "sell", value: TradePresetValues) => void;
535
+ }
499
536
 
500
537
  /** Buy-side trade settings. */
501
538
  interface BuySettings {
@@ -549,12 +586,35 @@ declare function useInstantTradeScript(params: UseInstantTradeScriptParams): Use
549
586
  declare function InstantTradeWidget({ chain, tokenAddress, onSwapSubmitted, onSwapError, settings, onSettingsChange, headerExtra, className, }: InstantTradeWidgetProps): react_jsx_runtime.JSX.Element;
550
587
 
551
588
  /**
552
- * Preset form widget — thin orchestration layer.
589
+ * Preset form widget — atom-backed orchestration layer with Buy/Sell tabs.
590
+ *
591
+ * State is persisted via `atomWithStorage` (keyed by prefix + chain + direction + preset index).
592
+ * Pass `storageKeyPrefix` to customize the storage key prefix.
593
+ *
594
+ * For a pure presentational form without persistence, use {@link PresetFormUI}.
595
+ */
596
+ declare function PresetFormWidget({ chain, presetIndex, storageKeyPrefix, onChange, disableAnimation, className, }: PresetFormWidgetProps): react_jsx_runtime.JSX.Element;
597
+
598
+ /**
599
+ * Multi preset form widget.
553
600
  *
554
- * Manages local state initialized from `value`, resolves chain-specific
555
- * native token info, and syncs changes upward via `onChange`.
601
+ * Combines preset index tabs,
602
+ * and a persisted {@link PresetFormWidget} into a single self-contained editor.
556
603
  */
557
- declare function PresetFormWidget({ value, onChange, chain, className, }: PresetFormWidgetProps): react_jsx_runtime.JSX.Element;
604
+ declare function MultiPresetFormWidget({ chain, storageKeyPrefix, onChange, disableAnimation, className, }: MultiPresetFormWidgetProps): react_jsx_runtime.JSX.Element;
605
+
606
+ /**
607
+ * Async-modal wrapper for multi-chain preset editing.
608
+ *
609
+ * Place this component once in the tree (e.g. layout). Open it from anywhere
610
+ * via `useAsyncModal("preset").onOpen({ params: { chains, defaultChain, storageKeyPrefix, onChange } })`.
611
+ *
612
+ * Header: title + chain switcher.
613
+ * Body: multi-preset form.
614
+ */
615
+ declare function PresetFormModal({ id }: {
616
+ id?: string;
617
+ }): react_jsx_runtime.JSX.Element;
558
618
 
559
619
  /**
560
620
  * Pure presentational component for the instant trade form.
@@ -562,15 +622,20 @@ declare function PresetFormWidget({ value, onChange, chain, className, }: Preset
562
622
  * Receives all data and callbacks via props — no API calls, no context access.
563
623
  * Consumers can replace this component while reusing `useInstantTradeScript`.
564
624
  */
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;
625
+ declare function InstantTradeUI({ chain, direction, onDirectionChange, amount, onAmountChange, customAmounts, customPercentages, onQuickAmountClick, onQuickPercentageClick, onCustomAmountsEdit, onCustomPercentagesEdit, tokenSymbol, nativeBalance, tokenBalance, amountConversion, preset, onPresetChange, presetValues, onPresetSettingsChange, showSettings, onPresetClick, submitText, isDisabled, isLoading, onSubmit, className, headerExtra, }: InstantTradeUIProps): react_jsx_runtime.JSX.Element;
566
626
 
567
627
  /**
568
628
  * Pure presentational preset-settings form.
569
629
  *
570
630
  * Renders inputs for slippage, priority fee, tip fee, auto fee,
571
- * max auto fee, anti-MEV and custom RPC. All data via props.
631
+ * max auto fee, anti-MEV and custom RPC.
632
+ *
633
+ * The `chain` prop controls which fields are visible:
634
+ * - Solana: priority fee (SOL), tip fee (SOL), anti-MEV
635
+ * - Ethereum: gas fee (Gwei) only
636
+ * - BSC: gas fee (Gwei) + tip fee (BNB)
572
637
  */
573
- declare function PresetFormUI({ value, onChange, nativeSymbol, nativeDecimals, className, }: PresetFormUIProps): react_jsx_runtime.JSX.Element;
638
+ declare function PresetFormUI({ value, onChange, chain, disableAnimation, className, }: PresetFormUIProps): react_jsx_runtime.JSX.Element;
574
639
 
575
640
  /**
576
641
  * Compact amount input with preset selector buttons.
@@ -588,6 +653,64 @@ declare function InstantTradeAmountInput({ amount, onAmountChange, preset, onPre
588
653
  */
589
654
  declare function InstantTradeButton({ className, children, }: InstantTradeButtonProps): react_jsx_runtime.JSX.Element;
590
655
 
656
+ type AntiMevOption = "off" | "reduced" | "secure";
657
+ type FeeType = "priorityFee" | "gasFee";
658
+ interface ChainPresetFeatures {
659
+ /** Native token symbol (e.g. "SOL", "ETH", "BNB") */
660
+ nativeSymbol: string;
661
+ /** Semantic fee type — UI maps this to a translated label via i18n key. */
662
+ feeType: FeeType;
663
+ /** Unit displayed for the fee input (e.g. "SOL", "Gwei") */
664
+ feeUnit: string;
665
+ /** Decimal places for the fee input */
666
+ feeDecimals: number;
667
+ /** Whether this chain supports a separate tip/bribe fee */
668
+ showTipFee: boolean;
669
+ /** Unit for tip fee (e.g. "SOL", "BNB"). Empty when hidden. */
670
+ tipFeeUnit: string;
671
+ /** Decimal places for the tip fee input */
672
+ tipFeeDecimals: number;
673
+ /** Whether this chain supports automatic fee estimation */
674
+ showAutoFee: boolean;
675
+ /** Whether this chain supports custom RPC endpoint */
676
+ showCustomRPC: boolean;
677
+ /**
678
+ * Available anti-MEV protection levels for this chain.
679
+ * - Solana: ["off", "reduced", "secure"]
680
+ * - ETH / BSC: ["off", "secure"]
681
+ */
682
+ antiMevOptions: AntiMevOption[];
683
+ }
684
+ /**
685
+ * Returns the set of preset form features applicable to a given chain.
686
+ *
687
+ * - Solana: priority fee (SOL), tip fee (SOL/Jito), anti-MEV
688
+ * - Ethereum: gas fee (Gwei) only
689
+ * - BSC: gas fee (Gwei) + tip fee (BNB)
690
+ * - Other EVM: gas fee (Gwei), same as Ethereum by default
691
+ */
692
+ declare function getChainPresetFeatures(chain: Chain): ChainPresetFeatures;
693
+ /** Returns chain-appropriate default preset values. */
694
+ declare function getDefaultPresetForChain(chain: Chain): TradePresetValues;
695
+
696
+ type PresetDirection = "buy" | "sell";
697
+ /**
698
+ * Construct an atomFamily key from chain, direction, preset index and prefix.
699
+ *
700
+ * @param chain - Target chain.
701
+ * @param direction - Trade direction: `"buy"` or `"sell"`.
702
+ * @param index - Preset index (0, 1, or 2).
703
+ * @param prefix - Storage key prefix. Defaults to `"liberfi."`.
704
+ */
705
+ declare function presetKey(chain: Chain, direction: PresetDirection, index: number, prefix?: string): string;
706
+ /**
707
+ * Atom family for trade preset values, persisted via `atomWithStorage`.
708
+ *
709
+ * Each atom is keyed by a string built with {@link presetKey}.
710
+ * Default values are chain-specific via `getDefaultPresetForChain`.
711
+ */
712
+ declare const presetAtomFamily: jotai_family.AtomFamily<string, jotai.WritableAtom<TradePresetValues, [TradePresetValues | typeof jotai_utils.RESET | ((prev: TradePresetValues) => TradePresetValues | typeof jotai_utils.RESET)], void>>;
713
+
591
714
  declare global {
592
715
  interface Window {
593
716
  __LIBERFI_VERSION__?: {
@@ -595,6 +718,6 @@ declare global {
595
718
  };
596
719
  }
597
720
  }
598
- declare const _default: "0.1.3";
721
+ declare const _default: "0.1.5";
599
722
 
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 };
723
+ export { type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_SOL_TRADE_PRESET, type FeeType, InstantTradeAmountInput, type InstantTradeAmountInputProps, InstantTradeButton, type InstantTradeButtonProps, type InstantTradeContextValue, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, MultiPresetFormWidget, type MultiPresetFormWidgetProps, type PresetDirection, PresetFormModal, type PresetFormModalParams, PresetFormUI, type PresetFormUIProps, PresetFormWidget, type PresetFormWidgetProps, type SellSettings, type SwapInput, type SwapPhase, SwapPreviewModal, type SwapPreviewModalProps, type SwapResult, SwapUI, type SwapUIProps, SwapWidget, type SwapWidgetProps, type TradePresetValues, type TxConfirmationStatus, type UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultBuyAmounts, getDefaultPresetForChain, presetAtomFamily, presetKey, 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'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),utils$1=require('@liberfi.io/utils'),le=require('bignumber.js'),jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),uiChainSelect=require('@liberfi.io/ui-chain-select'),uiScaffold=require('@liberfi.io/ui-scaffold');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var le__default=/*#__PURE__*/_interopDefault(le);function zt(e){let t=atob(e),s=new Uint8Array(t.length);for(let o=0;o<t.length;o++)s[o]=t.charCodeAt(o);return s}function Qt(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function ie(e){let{client:t}=react$1.useDexClient(),[s,o]=react.useState(false),r=react.useRef(e);r.current=e;let a=react.useCallback(async n=>{let{wallet:l,chain:i,...d}=n;o(true);try{let m;try{m=await t.swapRoute({chain:i,userAddress:l.address,input:d.input,output:d.output,mode:d.mode??types.API.SwapMode.EXACT_IN,amount:d.amount,slippage:d.slippage,priorityFee:d.priorityFee,tipFee:d.tipFee,isAntiMev:d.isAntiMev,permit:d.permit,deadline:d.deadline});}catch(u){let x=u instanceof Error?u:new Error(String(u));throw r.current?.onError?.(x,"route"),x}let c;try{let u=zt(m.serializedTx);c=await l.signTransaction(u);}catch(u){let x=u instanceof Error?u:new Error(String(u));throw r.current?.onError?.(x,"sign"),x}let p;try{let u=Qt(c);p=await t.sendTx({chain:i,serializedTx:u});}catch(u){let x=u instanceof Error?u:new Error(String(u));throw r.current?.onError?.(x,"send"),x}let h={txHash:p.txHash,extra:p.extra};return r.current?.onSubmitted?.(h),h}finally{o(false);}},[t]);return react.useMemo(()=>({swap:a,isSwapping:s}),[a,s])}var Zt=12e3;function Ye(e,t){let s=t?.interval??Zt,o=t?.paused??false,r=react.useRef(t);r.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!o,l=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return react.useEffect(()=>{l.error&&r.current?.onError?.(l.error);},[l.error]),react.useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var tn=6e4;function et(e){let{client:t}=react$1.useDexClient(),[s,o]=react.useState(()=>new Map),r=react.useRef(e);r.current=e;let a=react.useCallback((d,m)=>{o(c=>{let p=c.get(d);if(!p||p.status===m)return c;let h=new Map(c);return h.set(d,{...p,status:m}),h});},[]),n=react.useCallback((d,m)=>{o(p=>{if(p.has(m))return p;let h=new Map(p);return h.set(m,{chain:d,txHash:m,status:"pending"}),h});let c=r.current?.timeout??tn;t.checkTxSuccess(d,m,c).then(p=>{if(p)a(m,"confirmed"),r.current?.onConfirmed?.(m);else {let h=new Error("Transaction failed on-chain");a(m,"failed"),r.current?.onFailed?.(m,h);}}).catch(p=>{let h=p instanceof Error?p:new Error(String(p));a(m,"failed"),r.current?.onFailed?.(m,h);});},[t,a]),l=react.useCallback(d=>{o(m=>{if(!m.has(d))return m;let c=new Map(m);return c.delete(d),c});},[]),i=react.useCallback(()=>{o(d=>d.size===0?d:new Map);},[]);return react.useMemo(()=>({track:n,clear:l,clearAll:i,transactions:s}),[n,l,i,s])}var an=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function on(e){return an.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var ln=1e4,un=15e3;function dn(e,t){if(e.length===0)return;let o=e[e.length-1].outputAmount;if(!o||o==="0")return "0";let r=o.padStart(t+1,"0"),a=r.slice(0,r.length-t)||"0",l=r.slice(r.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function Ee(e){let{chain:t}=e,s=walletConnector.useWallets(),o=on(t),r=react.useMemo(()=>s.find(v=>v.chainNamespace===o&&v.isConnected),[s,o]),a=r?.address??"",[n,l]=react.useState(e.from??""),[i,d]=react.useState(e.to??""),m=react.useRef(e.from),c=react.useRef(e.to);react.useEffect(()=>{e.from!==m.current&&(m.current=e.from,e.from&&l(e.from));},[e.from]),react.useEffect(()=>{e.to!==c.current&&(c.current=e.to,e.to&&d(e.to));},[e.to]);let p=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:p},{enabled:p.length>0,refetchInterval:ln}),u=react.useMemo(()=>h.data?.find(v=>v.address===n)??null,[h.data,n]),x=react.useMemo(()=>h.data?.find(v=>v.address===i)??null,[h.data,i]),P=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:p},{enabled:!!a&&p.length>0,refetchInterval:un}),y=react.useMemo(()=>P.data?.find(v=>v.address===n)??null,[P.data,n]),w=react.useMemo(()=>P.data?.find(v=>v.address===i)??null,[P.data,i]),[g,F]=react.useState(void 0),D=react.useMemo(()=>{if(!g||u?.decimals==null)return;let v=g.split("."),B=v[0]??"0",Ce=(v[1]??"").slice(0,u.decimals).padEnd(u.decimals,"0");return (B+Ce).replace(/^0+/,"")||"0"},[g,u?.decimals]),L=react.useMemo(()=>{if(!g||!u?.marketData?.priceInUsd)return;let v=Number(u.marketData.priceInUsd),B=Number(g)*v;return Number.isFinite(B)?B.toString():void 0},[g,u?.marketData?.priceInUsd]),O=react.useCallback(()=>{if(!y)return;let v=Number(y.amount);if(!Number.isFinite(v)||v<=0)return;let B=v/2,xe=u?.decimals??9;F(B.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:xe}));},[y,u?.decimals]),R=react.useCallback(()=>{if(!y)return;let v=Number(y.amount);if(!Number.isFinite(v)||v<=0)return;let B=u?.decimals??9;F(v.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:B}));},[y,u?.decimals]),I=react.useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:types.API.SwapMode.EXACT_IN,amount:D}),[t,a,n,i,D]),K=react.useRef(false),{route:C,isRouting:H,error:G}=Ye(I,{paused:K.current}),z=react.useMemo(()=>C&&x?dn(C.plans,x.decimals):void 0,[C,x]),Y=react.useMemo(()=>{if(!z||!x?.marketData?.priceInUsd)return;let v=Number(x.marketData.priceInUsd),B=Number(z)*v;return Number.isFinite(B)?B.toString():void 0},[z,x?.marketData?.priceInUsd]),{swap:S,isSwapping:k}=ie();K.current=k;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:ee,transactions:X}=et({onConfirmed:v=>{W.current?.({success:true,txHash:v});},onFailed:v=>{W.current?.({success:false,txHash:v});}}),te=react.useMemo(()=>{if(X.size===0)return "idle";let v=Array.from(X.values());return v[v.length-1].status},[X]),Z=react.useCallback(async()=>{if(!(!r||!C||!n||!i||!D))try{let v=await S({chain:t,wallet:r,input:n,output:i,amount:D,mode:types.API.SwapMode.EXACT_IN});ee(t,v.txHash);}catch{}},[r,C,t,n,i,D,S,ee]),ne=h.isPending||P.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:d,fromToken:u,toToken:x,fromBalance:y,toBalance:w,amount:g,setAmount:F,setHalfAmount:O,setMaxAmount:R,amountInDecimals:D,amountInUsd:L,outputAmount:z,outputAmountInUsd:Y,route:C,isRouting:H,routeError:G,swap:Z,isSwapping:k,txStatus:te,isLoading:ne}),[n,i,u,x,y,w,g,O,R,D,L,z,Y,C,H,G,Z,k,te,ne])}function Re({isOpen:e,onOpenChange:t,fromToken:s,toToken:o,fromBalance:r,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:d,isRouting:m,routeError:c,onConfirm:p,isSwapping:h}){let{t:u}=i18n.useTranslation(),[x,P]=react.useState(false),y=react.useCallback(()=>P(g=>!g),[]),w=react.useMemo(()=>d?d.plans.map((g,F)=>({key:`plan-${F}`,name:g.name,input:g.input,inputAmount:g.inputAmount,output:g.output,outputAmount:g.outputAmount,feeQuote:g.feeQuote,feeAmount:g.feeAmount})):[],[d]);return jsxRuntime.jsx(ui.Modal,{isOpen:e,onOpenChange:t,hideCloseButton:true,scrollBehavior:"inside",backdrop:"blur",children:jsxRuntime.jsxs(ui.ModalContent,{className:"bg-content2 rounded-lg",children:[jsxRuntime.jsx(ui.ModalHeader,{children:u("trade.swap.preview")}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsxs("div",{className:"flex w-full max-h-[70vh] flex-1 flex-col overflow-y-auto py-2",children:[jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),r&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(Pn,{}),jsxRuntime.jsxs("span",{children:[Me(r.amount)," ",s?.symbol]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:Me(a)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",ot(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[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:ye(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:Me(l)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",ot(i)]})]})]})]}),x&&w.length>0&&jsxRuntime.jsxs("div",{className:"my-3",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:u("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:w.map(g=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:g.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[De(g.inputAmount)," ",ye(g.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[De(g.outputAmount)," ",ye(g.output)]})]})]}),g.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:u("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[De(g.feeAmount)," ",ye(g.feeQuote)]})]})]},g.key))})]}),w.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:x?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:y,children:u(x?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!d||!!c,isLoading:!d&&m||h,onPress:p,children:u("common.confirm")})})]})})}function Pn(){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 ot(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 Me(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 De(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 ye(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ue({fromToken:e,toToken:t,fromBalance:s,toBalance:o,amount:r,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:d,outputAmountInUsd:m,onFromTokenSelect:c,onToTokenSelect:p,route:h,isRouting:u,routeError:x,onPreview:P,isSwapping:y,className:w}){let{t:g}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",w),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:g("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:r??"",onChange:F=>n(F.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>c(""),children:e?e.symbol:g("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",mt(a)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(dt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[ct(s.amount)," ",s.symbol]}),l&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:g("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:g("common.max")})]})]}),x&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:x.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:g("trade.swap.to")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:d??"",disabled:true,placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",t?"text-foreground":"text-neutral"),disableRipple:true,startContent:t?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:t.image,name:t.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:t?t.symbol:g("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",mt(m)]}),o&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(dt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[ct(o.amount)," ",o.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&u,onPress:P,children:g(y?"trade.swap.swapping":u?"trade.swap.findingRoute":"trade.swap.swap")})]})}function dt(){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 mt(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 ct(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 An({chain:e,from:t,to:s,onComplete:o,className:r}){let a=Ee({chain:e,from:t,to:s,onComplete:o}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:d}=ui.useDisclosure(),m=react.useCallback(async()=>{await a.swap(),d();},[a,d]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ue,{fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,toBalance:a.toBalance,amount:a.amount,amountInUsd:a.amountInUsd,onAmountChange:a.setAmount,onHalfAmount:a.setHalfAmount,onMaxAmount:a.setMaxAmount,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,onFromTokenSelect:a.setFromTokenAddress,onToTokenSelect:a.setToTokenAddress,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onPreview:l,isSwapping:a.isSwapping,className:r}),jsxRuntime.jsx(Re,{isOpen:n,onOpenChange:i,fromToken:a.fromToken,toToken:a.toToken,fromBalance:a.fromBalance,inputAmount:a.amount,inputAmountInUsd:a.amountInUsd,outputAmount:a.outputAmount,outputAmountInUsd:a.outputAmountInUsd,route:a.route,isRouting:a.isRouting,routeError:a.routeError,onConfirm:m,isSwapping:a.isSwapping})]})}var ft={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},gt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},xt={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},En={SOL:[.01,.1,1,10],ETH:[.01,.02,.5,1],BNB:[.025,.05,.1,.25],USDC:[25,50,100,200],USDT:[25,50,100,200]},Mn=[1,10,25,50];function ht(e){return En[e]??Mn}var bt=[10,25,50,100];function re(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let s=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return utils$1.isSolanaChain(e)?ft:utils$1.isBinanceChain(e)?xt:gt}function St(e){let t=V(e),s=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:ht(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...bt],presets:[{...t},{...t},{...t}]}}}var Un=St("900900900");function Pt(e){return `liberfi.instant-trade.settings.${e}`}function Bn(e,t){try{let s=localStorage.getItem(Pt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function _n(e,t){try{localStorage.setItem(Pt(e),JSON.stringify(t));}catch{}}var Nt=react.createContext(null);function ae(){let e=react.useContext(Nt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function _e({chain:e,tokenAddress:t,settings:s,onSettingsChange:o,children:r}){let a=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=s!==void 0,l=react.useMemo(()=>St(e),[e]),[i,d]=react.useState(()=>n?l:Bn(e,l)),m=n?s:i,c=react.useCallback(I=>{n?o?.(I):(d(I),_n(String(e),I));},[n,o,e]),p=react.useCallback(I=>c({...m,buy:I}),[m,c]),h=react.useCallback(I=>c({...m,sell:I}),[m,c]),[u,x]=react.useState("buy"),[P,y]=react.useState(),[w,g]=react.useState(0),[F,D]=react.useState(0),L=react.useMemo(()=>V(e),[e]),O=react.useMemo(()=>{let I=u==="buy"?w:F;return (u==="buy"?m.buy.presets:m.sell.presets)[I]??L},[u,w,F,m,L]),R=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:u,setDirection:x,amount:P,setAmount:y,buyPreset:w,setBuyPreset:g,sellPreset:F,setSellPreset:D,settings:m,updateBuySettings:p,updateSellSettings:h,currentPresetValues:O}),[e,t,a,u,P,w,F,m,p,h,O]);return jsxRuntime.jsx(Nt.Provider,{value:R,children:r})}var Xn=15e3,Zn=1e4;function Oe(e){let{chain:t,tokenAddress:s,onSwapSubmitted:o,onSwapError:r}=e,{t:a}=i18n.useTranslation(),n=ae(),l=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),d=walletConnector.useWallets(),m=utils$1.chainToNamespace(t),c=react.useMemo(()=>d.find(S=>S.chainNamespace===m&&S.isConnected),[d,m]),p=c?.address??"",h=react.useMemo(()=>{let S=[s];return l&&S.push(l.address),i&&S.push(i.address),S.filter(Boolean)},[s,l,i]),u=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Zn}),x=react.useMemo(()=>u.data?.find(S=>S.address===s)??null,[u.data,s]),P=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:p,tokenAddresses:h},{enabled:!!p&&h.length>0,refetchInterval:Xn}),y=l?.address??i?.address??"",w=react.useMemo(()=>P.data?.find(S=>S.address===y)??null,[P.data,y]),g=react.useMemo(()=>P.data?.find(S=>S.address===s)??null,[P.data,s]),[F,D]=react.useState(false),L=react.useRef(null),O=react.useCallback(S=>{let k=L.current;L.current=S,D(W=>k===null||k!==S?true:!W);},[]),R=react.useRef(o);R.current=o;let I=react.useRef(r);I.current=r;let{swap:K,isSwapping:C}=ie({onSubmitted:S=>R.current?.(S),onError:(S,k)=>I.current?.(S,k)}),H=react.useCallback(async()=>{if(!n.amount||!c||!s)return;let S=l?.decimals??9,k=i?.address??l?.address??"",W=n.direction==="buy",ee=W?k:s,X=W?s:k,te=W?S:x?.decimals??9,Z=new le__default.default(n.amount).shiftedBy(te).decimalPlaces(0).toString(),ne=n.currentPresetValues,v=V(t),B=ne.slippage??v.slippage??1,xe=ne.antiMev!=="off",Ce=utils$1.isSolanaChain(t)?{priorityFee:new le__default.default(ne.priorityFee??v.priorityFee??0).shiftedBy(S).decimalPlaces(0).toString(),tipFee:new le__default.default(ne.tipFee??v.tipFee??0).shiftedBy(S).decimalPlaces(0).toString(),isAntiMev:xe}:{};try{await K({chain:t,wallet:c,input:ee,output:X,amount:Z,slippage:B,...Ce}),n.setAmount(void 0);}catch{}},[n,c,s,l,i,x,t,K]),G=react.useMemo(()=>{let S=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return S;let k=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ee=w?.amount;if(ee&&new le__default.default(ee).lt(n.amount))return `${S}${k}`;let X=l?.symbol??"",te=u.data?.find(Z=>Z.address===y)?.marketData?.priceInUsd;if(te){let Z=utils$1.formatAmountUSD(new le__default.default(n.amount).times(Number(te)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:X,usd:Z})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:X})}let W=g?.amount;return W&&new le__default.default(W).lt(n.amount)?`${S}${k}`:S},[a,n.direction,n.amount,w,g,l,u.data,y]),z=!n.amount||!c||!s,Y=u.isPending||P.isPending;return react.useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:x,nativeBalance:w,tokenBalance:g,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:F,handlePresetClick:O,swap:H,isSwapping:C,submitText:G,isDisabled:z,isLoading:Y}),[t,s,l,x,w,g,n,F,O,H,C,G,z,Y])}function fe({value:e,onChange:t,chain:s,disableAnimation:o,className:r}){let a=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>re(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",r),children:[jsxRuntime.jsx(os,{value:e.slippage,onChange:i=>a({slippage:i})}),jsxRuntime.jsx(is,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(ls,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(us,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:o}),e.autoFee&&jsxRuntime.jsx(ds,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(ms,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:o}),n.showCustomRPC&&jsxRuntime.jsx(cs,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function os({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),o=s("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:o}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:r=>t(isNaN(r)?null:r),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":o})]})}function is({value:e,onChange:t,feeType:s,symbol:o,decimals:r}){let{t:a}=i18n.useTranslation(),n=a(`trade.preset.${s}`),l=a(`trade.preset.${s}.tooltip`);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsxRuntime.jsx(ui.StyledTooltip,{content:l,children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:i=>t(isNaN(i)?null:i),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:o}),"aria-label":n})]})}function ls({value:e,onChange:t,symbol:s,decimals:o}){let{t:r}=i18n.useTranslation(),a=r("trade.preset.tipFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:r("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:o},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function us({value:e,onChange:t,disableAnimation:s}){let{t:o}=i18n.useTranslation(),r=o("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[r,jsxRuntime.jsx(ui.StyledTooltip,{content:o("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":r,disableAnimation:s})})]})}function ds({value:e,onChange:t,symbol:s}){let{t:o}=i18n.useTranslation(),r=o("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:r}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:a=>t(isNaN(a)?null:a),hideStepper:true,minValue:0,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":r})]})}function ms({value:e,onChange:t,options:s,disableAnimation:o}){let{t:r}=i18n.useTranslation(),a=r("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),l=react.useMemo(()=>({off:{title:r("trade.preset.antiMev.off"),desc:r("trade.preset.antiMev.off.desc")},reduced:{title:r("trade.preset.antiMev.reduced"),desc:r("trade.preset.antiMev.reduced.desc")},secure:{title:r("trade.preset.antiMev.secure"),desc:r("trade.preset.antiMev.secure.desc")}}),[r]);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[a,jsxRuntime.jsx(ui.StyledTooltip,{content:r("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledTabs,{variant:"bordered",color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:o,"aria-label":a,children:s.map(i=>{let d=n[i],m=l[i];return jsxRuntime.jsx(ui.Tab,{title:jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsxs("div",{className:"text-xs",children:[jsxRuntime.jsx("div",{className:"font-medium text-foreground",children:m.title}),jsxRuntime.jsx("div",{className:"mt-0.5",children:m.desc})]}),children:jsxRuntime.jsx("span",{className:"flex items-center justify-center",children:jsxRuntime.jsx(d,{width:18,height:18})})})},i)})})})]})}function cs({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),o=s("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:o}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:r=>t(r||null),placeholder:"https://...","aria-label":o})})]})}function Ke({chain:e,direction:t,onDirectionChange:s,amount:o,onAmountChange:r,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:d,onCustomPercentagesEdit:m,tokenSymbol:c,nativeBalance:p,tokenBalance:h,amountConversion:u,preset:x,onPresetChange:P,presetValues:y,onPresetSettingsChange:w,showSettings:g,onPresetClick:F,submitText:D,isDisabled:L,isLoading:O,onSubmit:R,className:I,headerExtra:K}){let{t:C}=i18n.useTranslation(),H=react.useMemo(()=>utils$1.getNativeToken(e),[e]),G=H?.symbol,z=H?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",I),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:"data-[selected=true]:bg-content3 h-6"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:C("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:C("common.sell")},"sell")]}),jsxRuntime.jsxs("div",{className:"mt-2.5 h-8 flex items-center justify-between",children:[jsxRuntime.jsx(ui.Tabs,{size:"sm",variant:"underlined",classNames:{tabList:"gap-0",tab:"px-1.5"},selectedKey:"market",disableAnimation:true,children:jsxRuntime.jsx(ui.Tab,{title:C("trade.market")},"market")}),K]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(Ns,{amount:o,onAmountChange:r,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:d,nativeSymbol:G,nativeDecimals:z,amountLabel:C("trade.amount")}):jsxRuntime.jsx(Ts,{amount:o,onAmountChange:r,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:m,tokenSymbol:c,amountLabel:C("trade.amount")})}),jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"text-xs text-neutral space-x-1",children:[jsxRuntime.jsx("span",{children:C("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?p?`${p} ${G??""}`:"--":h?`${h} ${c??""}`:"--"})]}),u&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:u})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(Cs,{values:y,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:`${x}`,onSelectionChange:Y=>P(Number(Y)),disableAnimation:true,"aria-label":C("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:C("trade.preset.label",{n:1}),onClick:()=>F(0)},0),jsxRuntime.jsx(ui.Tab,{title:C("trade.preset.label",{n:2}),onClick:()=>F(1)},1),jsxRuntime.jsx(ui.Tab,{title:C("trade.preset.label",{n:3}),onClick:()=>F(2)},2)]})}),g&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(fe,{value:y,onChange:w,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:L,isLoading:O,onPress:R,children:D})]})}function Ns({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:o,onCustomAmountsEdit:r,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=react.useCallback(d=>{typeof d=="number"&&t(isNaN(d)?void 0:d);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:i,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:l}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),formatOptions:{maximumFractionDigits:n},classNames:{inputWrapper:ui.cn("h-8 min-h-0 py-0 rounded-lg rounded-b-none shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3"),input:"text-xs"}}),jsxRuntime.jsx(Et,{values:s,onSelect:o,onEdit:r})]})}function Ts({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:o,onCustomPercentagesEdit:r,tokenSymbol:a,amountLabel:n}){let l=react.useCallback(i=>{typeof i=="number"&&t(isNaN(i)?void 0:i);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange:l,fullWidth:true,hideStepper:true,startContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:n}),endContent:jsxRuntime.jsx("span",{className:"flex-none text-xs text-neutral",children:a??""}),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(Et,{values:s,onSelect:o,onEdit:r,suffix:"%"})]})}function Et({values:e,onSelect:t,onEdit:s,suffix:o}){let[r,a]=react.useState(false),[n,l]=react.useState([]),i=react.useCallback(()=>{l([...e]),a(true);},[e]),d=react.useCallback(()=>{a(false),s(n);},[s,n]);return jsxRuntime.jsxs("div",{className:"flex gap-0.5",children:[jsxRuntime.jsx("div",{className:"flex-auto grid grid-cols-4 gap-0.5",children:Array.from({length:4}).map((m,c)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",c===0&&"rounded-bl-lg"),children:r?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[c]===null||n[c]===void 0?void 0:n[c],onChange:p=>{if(typeof p=="number"){let h=isNaN(p)?null:p;l(u=>{let x=[...u];return x[c]=h,x});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",c===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[c]!=null&&t(e[c]),endContent:o?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:o}):null,children:e[c]??""})},c))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:r?jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:d,children:jsxRuntime.jsx(ui.CheckIcon,{width:12,height:12})}):jsxRuntime.jsx(ui.Button,{size:"sm",isIconOnly:true,className:"bg-transparent h-6 min-h-6 p-0",disableRipple:true,onPress:i,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function Cs({values:e,chain:t}){let{t:s}=i18n.useTranslation(),o=react.useMemo(()=>re(t),[t]),r=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:s(`trade.preset.${o.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),o.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[r==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),r==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),r==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${r}`)})})]})}function Is({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o,settings:r,onSettingsChange:a,headerExtra:n,className:l}){return jsxRuntime.jsx(_e,{chain:e,tokenAddress:t,settings:r,onSettingsChange:a,children:jsxRuntime.jsx(Es,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o,headerExtra:n,className:l})})}function Es({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o,headerExtra:r,className:a}){let n=Oe({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:o}),l=react.useCallback(u=>n.setAmount(u),[n]),i=react.useCallback(u=>{let x=n.tokenBalance?.amount;if(!x)return;let P=new le__default.default(x).times(u).div(100).toNumber();n.setAmount(P);},[n]),d=react.useCallback(u=>{n.updateBuySettings({...n.settings.buy,customAmounts:u});},[n]),m=react.useCallback(u=>{n.updateSellSettings({...n.settings.sell,customPercentages:u});},[n]),c=react.useCallback(u=>{let x=n.direction==="buy",P=x?n.buyPreset:n.sellPreset;if(x){let y=n.settings.buy,w=[...y.presets];w[P]=u,n.updateBuySettings({...y,presets:w});}else {let y=n.settings.sell,w=[...y.presets];w[P]=u,n.updateSellSettings({...y,presets:w});}},[n]),p=react.useCallback(u=>{n.direction==="buy"?n.setBuyPreset(u):n.setSellPreset(u);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(Ke,{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:l,onQuickPercentageClick:i,onCustomAmountsEdit:d,onCustomPercentagesEdit:m,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:p,presetValues:n.currentPresetValues,onPresetSettingsChange:c,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:a,headerExtra:r})}var Rs="liberfi.";function ks(e,t,s,o){return `${e}preset.${t}.${s}.${o}`}function Us(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),o=e.slice(t+1),[r,a,n]=o.split(".");return {prefix:s,chain:r,direction:a,index:Number(n)}}function Qe(e,t,s,o=Rs){return `${o}:${e}.${t}.${s}`}var je=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:s,direction:o,index:r}=Us(e);return utils.atomWithStorage(ks(t,String(s),o,r),V(s),void 0,{getOnInit:true})});function Ge({chain:e,presetIndex:t=0,storageKeyPrefix:s,onChange:o,disableAnimation:r,className:a}){let{t:n}=i18n.useTranslation(),[l,i]=react.useState("buy"),[d,m]=jotai.useAtom(je(Qe(e,l,t,s))),c=react.useCallback(p=>{m(p),o?.(l,p);},[m,o,l]);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",a),children:[jsxRuntime.jsxs(ui.StyledTabs,{variant:"bordered",radius:"lg",color:"default",fullWidth:true,selectedKey:l,onSelectionChange:p=>i(p),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:n("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:n("common.sell")},"sell")]}),jsxRuntime.jsx(fe,{value:d,onChange:c,chain:e,disableAnimation:r})]})}var Gs=3;function Ze({chain:e,storageKeyPrefix:t,onChange:s,disableAnimation:o,className:r}){let{t:a}=i18n.useTranslation(),[n,l]=react.useState(0),i=react.useCallback((d,m)=>{s?.(n,d,m);},[s,n]);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",r),children:[jsxRuntime.jsx(ui.StyledTabs,{variant:"bordered",radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:d=>l(Number(d)),disableAnimation:o,"aria-label":a("trade.preset.presets"),children:Array.from({length:Gs},(d,m)=>jsxRuntime.jsx(ui.Tab,{title:a("trade.preset.label",{n:m+1})},String(m)))}),jsxRuntime.jsx(Ge,{chain:e,presetIndex:n,storageKeyPrefix:t,onChange:i,disableAnimation:o})]})}var or="preset";function ir({id:e=or}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(lr,{...t})})}function lr({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:o}=i18n.useTranslation(),{chains:r,defaultChain:a,storageKeyPrefix:n,onChange:l}=e,[i,d]=react.useState(a??r[0]),m=react.useCallback((c,p,h)=>{l?.(i,c,p,h);},[l,i]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:o("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:r,chain:i,onSelectChain:d})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(Ze,{chain:i,storageKeyPrefix:n,onChange:m})})})]})})}function wr({amount:e,onAmountChange:t,preset:s=0,onPresetChange:o,onPresetClick:r,variant:a="default",radius:n="full",size:l="sm",fullWidth:i=false,className:d}){let{t:m}=i18n.useTranslation(),{chain:c,nativeToken:p,settings:h}=ae(),u=react.useMemo(()=>V(c),[c]),x=react.useCallback(y=>{typeof y=="number"&&t(isNaN(y)?void 0:y);},[t]),P=react.useCallback(y=>{s===y?r?.(y):o?.(y);},[s,o,r]);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",a==="bordered"&&"border-1 border-border",a==="default"&&"bg-content2",d),children:[jsxRuntime.jsx("div",{className:ui.cn(i?"w-full":"w-20"),children:jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:e,onChange:x,hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:p?.decimals??9},startContent:jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-neutral flex-none"}),endContent:p?jsxRuntime.jsx(ui.Avatar,{className:"w-4 h-4 bg-transparent flex-none",name:p.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":m("trade.instantTradeAmount")})}),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((y,w)=>jsxRuntime.jsx(ui.Tooltip,{content:jsxRuntime.jsx(Sr,{values:h.buy.presets[w]??u,chain:c}),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":w===s,"text-neutral hover:bg-content3":w!==s}),disableRipple:true,onPress:()=>P(w),children:m("trade.preset.short",{n:w+1})})},w))})]})}function Sr({values:e,chain:t}){let{t:s}=i18n.useTranslation(),o=react.useMemo(()=>re(t),[t]),r=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"px-1 py-0.5 flex flex-col gap-1.5 text-xs text-neutral",children:[jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:utils$1.formatPercent((e.slippage??0)/100)})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.priorityFee??0)," ",o.feeUnit]})]}),o.showTipFee&&jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),jsxRuntime.jsxs("span",{children:[utils$1.formatPrice(e.tipFee??0)," ",o.tipFeeUnit]})]}),jsxRuntime.jsxs("div",{className:"w-full flex items-center justify-between gap-3",children:[r==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14}),r==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14}),r==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14}),jsxRuntime.jsx("span",{children:s(`trade.preset.antiMev.${r}`)})]})]})}function Er({className:e,children:t}){let{t:s}=i18n.useTranslation(),{chain:o,tokenAddress:r,nativeToken:a,direction:n,amount:l,setAmount:i,currentPresetValues:d}=ae(),c=walletConnector.useWallets()[0]??null,p=react.useMemo(()=>utils$1.getWrappedToken(o),[o]),{swap:h,isSwapping:u}=ie(),x=!l||!c||!r,P=react.useCallback(async()=>{if(!l||!c||!r)return;let y=a??utils$1.getNativeToken(o),w=y?.decimals??9,g=p?.address??y?.address??"",F=n==="buy",D=F?g:r,L=F?r:g,O=new le__default.default(l).shiftedBy(w).decimalPlaces(0).toString(),R=d,I=V(o),K=new le__default.default(R.priorityFee??I.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),C=new le__default.default(R.tipFee??I.tipFee??0).shiftedBy(w).decimalPlaces(0).toString();try{await h({chain:o,wallet:c,input:D,output:L,amount:O,slippage:R.slippage??I.slippage??1,priorityFee:K,tipFee:C,isAntiMev:R.antiMev!=="off"}),i(void 0);}catch{}},[l,c,r,a,p,o,n,d,h,i]);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:n==="buy"?"primary":"secondary",className:e,disableRipple:true,isDisabled:x,isLoading:u,onPress:P,children:t??s(n==="buy"?"common.buy":"common.sell")})}typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="0.1.5");var Dr="0.1.5";
2
+ exports.DEFAULT_BSC_TRADE_PRESET=xt;exports.DEFAULT_EVM_TRADE_PRESET=gt;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Un;exports.DEFAULT_SELL_PERCENTAGES=bt;exports.DEFAULT_SOL_TRADE_PRESET=ft;exports.InstantTradeAmountInput=wr;exports.InstantTradeButton=Er;exports.InstantTradeProvider=_e;exports.InstantTradeUI=Ke;exports.InstantTradeWidget=Is;exports.MultiPresetFormWidget=Ze;exports.PresetFormModal=ir;exports.PresetFormUI=fe;exports.PresetFormWidget=Ge;exports.SwapPreviewModal=Re;exports.SwapUI=Ue;exports.SwapWidget=An;exports.getChainPresetFeatures=re;exports.getDefaultBuyAmounts=ht;exports.getDefaultPresetForChain=V;exports.presetAtomFamily=je;exports.presetKey=Qe;exports.useInstantTrade=ae;exports.useInstantTradeScript=Oe;exports.useSwap=ie;exports.useSwapRoutePolling=Ye;exports.useSwapScript=Ee;exports.useTxConfirmation=et;exports.version=Dr;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map