@liberfi.io/ui-trade 2.0.13 → 2.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -62,20 +62,20 @@ Polls for swap route quotes at a configurable interval. Built on `useSwapRouteQu
62
62
 
63
63
  **Parameters:**
64
64
 
65
- | Name | Type | Description |
66
- | ------------------ | ------------------------- | ---------------------------------------------------------------------- |
67
- | `params` | `Partial<API.SwapParams>` | Route parameters. Polling starts when all required fields are present. |
68
- | `options.interval` | `number` | Polling interval in ms. Defaults to 12000. |
69
- | `options.paused` | `boolean` | Pause polling (e.g. during swap execution). |
70
- | `options.onError` | `(error: Error) => void` | Called when a route fetch fails. |
65
+ | Name | Type | Description |
66
+ | ------------------ | ------------------------ | ---------------------------------------------------------------------- |
67
+ | `params` | `Partial<SwapParams>` | Route parameters. Polling starts when all required fields are present. |
68
+ | `options.interval` | `number` | Polling interval in ms. Defaults to 12000. |
69
+ | `options.paused` | `boolean` | Pause polling (e.g. during swap execution). |
70
+ | `options.onError` | `(error: Error) => void` | Called when a route fetch fails. |
71
71
 
72
72
  **Returns:** `{ route, isRouting, error }`
73
73
 
74
- | Name | Type | Description |
75
- | ----------- | ---------------------------- | --------------------------------- |
76
- | `route` | `API.SwapRoute \| undefined` | Current route quote. |
77
- | `isRouting` | `boolean` | Whether a route is being fetched. |
78
- | `error` | `Error \| null` | Latest route fetch error. |
74
+ | Name | Type | Description |
75
+ | ----------- | ------------------------ | --------------------------------- |
76
+ | `route` | `SwapRoute \| undefined` | Current route quote. |
77
+ | `isRouting` | `boolean` | Whether a route is being fetched. |
78
+ | `error` | `Error \| null` | Latest route fetch error. |
79
79
 
80
80
  #### `useTxConfirmation(options?: UseTxConfirmationOptions)`
81
81
 
@@ -159,7 +159,7 @@ Script layer hook. Encapsulates all data fetching, state management, and swap ex
159
159
  | `amountInUsd` | `string \| undefined` | Amount in USD. |
160
160
  | `outputAmount` | `string \| undefined` | Formatted output amount from route. |
161
161
  | `outputAmountInUsd` | `string \| undefined` | Output amount in USD. |
162
- | `route` | `API.SwapRoute \| undefined` | Current route quote. |
162
+ | `route` | `SwapRoute \| undefined` | Current route quote. |
163
163
  | `isRouting` | `boolean` | Whether a route is being fetched. |
164
164
  | `routeError` | `Error \| null` | Route fetch error. |
165
165
  | `swap` | `() => Promise<void>` | Execute the swap. |
@@ -188,7 +188,7 @@ Pure presentational component for the swap form. Renders the From/To token input
188
188
  | `outputAmountInUsd` | `string \| undefined` | Output amount in USD. |
189
189
  | `onFromTokenSelect` | `(addr: string) => void` | From-token selection handler. |
190
190
  | `onToTokenSelect` | `(addr: string) => void` | To-token selection handler. |
191
- | `route` | `API.SwapRoute \| undefined` | Current swap route quote. |
191
+ | `route` | `SwapRoute \| undefined` | Current swap route quote. |
192
192
  | `isRouting` | `boolean` | Whether a route is being fetched. |
193
193
  | `routeError` | `Error \| null` | Route error. |
194
194
  | `onPreview` | `() => void` | Open preview modal handler. |
@@ -201,22 +201,22 @@ Modal component that previews swap details before confirmation. Shows from/to to
201
201
 
202
202
  **Props (`SwapPreviewModalProps`):**
203
203
 
204
- | Name | Type | Description |
205
- | ------------------- | ---------------------------- | --------------------------------- |
206
- | `isOpen` | `boolean` | Whether the modal is open. |
207
- | `onOpenChange` | `(isOpen: boolean) => void` | Modal open/close handler. |
208
- | `fromToken` | `Token \| null` | From-token metadata. |
209
- | `toToken` | `Token \| null` | To-token metadata. |
210
- | `fromBalance` | `Portfolio \| null` | User's from-token balance. |
211
- | `inputAmount` | `string \| undefined` | Input amount (human-readable). |
212
- | `inputAmountInUsd` | `string \| undefined` | Input amount in USD. |
213
- | `outputAmount` | `string \| undefined` | Output amount (human-readable). |
214
- | `outputAmountInUsd` | `string \| undefined` | Output amount in USD. |
215
- | `route` | `API.SwapRoute \| undefined` | Current swap route. |
216
- | `isRouting` | `boolean` | Whether a route is being fetched. |
217
- | `routeError` | `Error \| null` | Route error. |
218
- | `onConfirm` | `() => void` | Confirm swap handler. |
219
- | `isSwapping` | `boolean` | Whether a swap is in progress. |
204
+ | Name | Type | Description |
205
+ | ------------------- | --------------------------- | --------------------------------- |
206
+ | `isOpen` | `boolean` | Whether the modal is open. |
207
+ | `onOpenChange` | `(isOpen: boolean) => void` | Modal open/close handler. |
208
+ | `fromToken` | `Token \| null` | From-token metadata. |
209
+ | `toToken` | `Token \| null` | To-token metadata. |
210
+ | `fromBalance` | `Portfolio \| null` | User's from-token balance. |
211
+ | `inputAmount` | `string \| undefined` | Input amount (human-readable). |
212
+ | `inputAmountInUsd` | `string \| undefined` | Input amount in USD. |
213
+ | `outputAmount` | `string \| undefined` | Output amount (human-readable). |
214
+ | `outputAmountInUsd` | `string \| undefined` | Output amount in USD. |
215
+ | `route` | `SwapRoute \| undefined` | Current swap route. |
216
+ | `isRouting` | `boolean` | Whether a route is being fetched. |
217
+ | `routeError` | `Error \| null` | Route error. |
218
+ | `onConfirm` | `() => void` | Confirm swap handler. |
219
+ | `isSwapping` | `boolean` | Whether a swap is in progress. |
220
220
 
221
221
  ### Types
222
222
 
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _liberfi_io_types from '@liberfi.io/types';
2
- import { Chain, API, Token, Portfolio } from '@liberfi.io/types';
2
+ import { Chain, SwapMode, SwapParams, Token, Portfolio, SwapRoute } from '@liberfi.io/types';
3
3
  import * as jotai_family from 'jotai-family';
4
4
  import * as jotai from 'jotai';
5
5
  import * as jotai_utils from 'jotai/utils';
@@ -68,7 +68,7 @@ interface SwapInput {
68
68
  /** Amount in smallest unit (lamports for Solana, wei for EVM) */
69
69
  amount: string;
70
70
  /** Swap mode, defaults to EXACT_IN */
71
- mode?: API.SwapMode;
71
+ mode?: SwapMode;
72
72
  /** Slippage tolerance, 0-100, defaults to 1 */
73
73
  slippage?: number;
74
74
  /** Priority fee in microLamports (Solana only) */
@@ -212,7 +212,7 @@ declare function useSwap(options?: UseSwapOptions): {
212
212
  * Polling pauses when `paused` is true (e.g. during swap execution) or
213
213
  * when required params are missing.
214
214
  */
215
- declare function useSwapRoutePolling(params: Partial<API.SwapParams>, options?: UseSwapRoutePollingOptions): {
215
+ declare function useSwapRoutePolling(params: Partial<SwapParams>, options?: UseSwapRoutePollingOptions): {
216
216
  route: _liberfi_io_types.SwapRoute | undefined;
217
217
  isRouting: boolean;
218
218
  error: Error | null;
@@ -294,7 +294,7 @@ interface UseSwapScriptResult {
294
294
  /** Output amount converted to USD using to-token price */
295
295
  outputAmountInUsd: string | undefined;
296
296
  /** Current swap route quote */
297
- route: API.SwapRoute | undefined;
297
+ route: SwapRoute | undefined;
298
298
  /** Whether a route is currently being fetched */
299
299
  isRouting: boolean;
300
300
  /** Route fetch error, if any */
@@ -353,7 +353,7 @@ interface SwapUIProps {
353
353
  /** To-token selection handler */
354
354
  onToTokenSelect: (addr: string) => void;
355
355
  /** Current swap route quote */
356
- route: API.SwapRoute | undefined;
356
+ route: SwapRoute | undefined;
357
357
  /** Whether a route is being fetched */
358
358
  isRouting: boolean;
359
359
  /** Route error */
@@ -386,7 +386,7 @@ interface SwapPreviewModalProps {
386
386
  /** Output amount in USD */
387
387
  outputAmountInUsd: string | undefined;
388
388
  /** Current swap route */
389
- route: API.SwapRoute | undefined;
389
+ route: SwapRoute | undefined;
390
390
  /** Whether a route is being fetched */
391
391
  isRouting: boolean;
392
392
  /** Route error */
@@ -1049,13 +1049,4 @@ declare function getChainPresetFeatures(chain: Chain): ChainPresetFeatures;
1049
1049
  /** Returns chain-appropriate default preset values. */
1050
1050
  declare function getDefaultPresetForChain(chain: Chain): TradePresetValues;
1051
1051
 
1052
- declare global {
1053
- interface Window {
1054
- __LIBERFI_VERSION__?: {
1055
- [key: string]: string;
1056
- };
1057
- }
1058
- }
1059
- declare const _default: "2.0.13";
1060
-
1061
- export { AmountPresetInputUI, type AmountPresetInputUIProps, AmountPresetInputWidget, type AmountPresetInputWidgetProps, type AmountPresetState, type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_SOL_TRADE_PRESET, type FeeType, InstantTradeButtonWidget, type InstantTradeButtonWidgetProps, type InstantTradeContextValue, InstantTradeListButtonWidget, type InstantTradeListButtonWidgetProps, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, type InstantTradeSwapFn, InstantTradeSwapProvider, type InstantTradeSwapProviderProps, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, MultiPresetFormWidget, type MultiPresetFormWidgetProps, type PresetDirection, PresetFormModal, type PresetFormModalParams, PresetFormUI, type PresetFormUIProps, PresetFormWidget, type PresetFormWidgetProps, type SellSettings, type SwapInput, type SwapPhase, SwapPreviewModal, type SwapPreviewModalProps, type SwapResult, SwapRouteExpiredError, SwapUI, type SwapUIProps, SwapWidget, type SwapWidgetProps, type TradePresetValues, type TxConfirmationStatus, type UseAmountPresetInputScriptParams, type UseAmountPresetInputScriptResult, type UseInstantTradeAmountParams, type UseInstantTradeButtonParams, type UseInstantTradeButtonResult, type UseInstantTradeListButtonParams, type UseInstantTradeListButtonResult, type UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseMultiPresetFormScriptParams, type UseMultiPresetFormScriptResult, type UsePresetFormScriptParams, type UsePresetFormScriptResult, type UsePresetValuesParams, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultBuyAmounts, getDefaultPresetForChain, instantTradeAmountAtomFamily, instantTradeAmountKey, presetAtomFamily, presetKey, useAmountPresetInputScript, useInstantTrade, useInstantTradeAmount, useInstantTradeButtonScript, useInstantTradeListButtonScript, useInstantTradeScript, useInstantTradeSwap, useMultiPresetFormScript, usePresetFormScript, usePresetValues, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
1052
+ export { AmountPresetInputUI, type AmountPresetInputUIProps, AmountPresetInputWidget, type AmountPresetInputWidgetProps, type AmountPresetState, type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_SOL_TRADE_PRESET, type FeeType, InstantTradeButtonWidget, type InstantTradeButtonWidgetProps, type InstantTradeContextValue, InstantTradeListButtonWidget, type InstantTradeListButtonWidgetProps, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, type InstantTradeSwapFn, InstantTradeSwapProvider, type InstantTradeSwapProviderProps, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, MultiPresetFormWidget, type MultiPresetFormWidgetProps, type PresetDirection, PresetFormModal, type PresetFormModalParams, PresetFormUI, type PresetFormUIProps, PresetFormWidget, type PresetFormWidgetProps, type SellSettings, type SwapInput, type SwapPhase, SwapPreviewModal, type SwapPreviewModalProps, type SwapResult, SwapRouteExpiredError, SwapUI, type SwapUIProps, SwapWidget, type SwapWidgetProps, type TradePresetValues, type TxConfirmationStatus, type UseAmountPresetInputScriptParams, type UseAmountPresetInputScriptResult, type UseInstantTradeAmountParams, type UseInstantTradeButtonParams, type UseInstantTradeButtonResult, type UseInstantTradeListButtonParams, type UseInstantTradeListButtonResult, type UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseMultiPresetFormScriptParams, type UseMultiPresetFormScriptResult, type UsePresetFormScriptParams, type UsePresetFormScriptResult, type UsePresetValuesParams, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultBuyAmounts, getDefaultPresetForChain, instantTradeAmountAtomFamily, instantTradeAmountKey, presetAtomFamily, presetKey, useAmountPresetInputScript, useInstantTrade, useInstantTradeAmount, useInstantTradeButtonScript, useInstantTradeListButtonScript, useInstantTradeScript, useInstantTradeSwap, useMultiPresetFormScript, usePresetFormScript, usePresetValues, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _liberfi_io_types from '@liberfi.io/types';
2
- import { Chain, API, Token, Portfolio } from '@liberfi.io/types';
2
+ import { Chain, SwapMode, SwapParams, Token, Portfolio, SwapRoute } from '@liberfi.io/types';
3
3
  import * as jotai_family from 'jotai-family';
4
4
  import * as jotai from 'jotai';
5
5
  import * as jotai_utils from 'jotai/utils';
@@ -68,7 +68,7 @@ interface SwapInput {
68
68
  /** Amount in smallest unit (lamports for Solana, wei for EVM) */
69
69
  amount: string;
70
70
  /** Swap mode, defaults to EXACT_IN */
71
- mode?: API.SwapMode;
71
+ mode?: SwapMode;
72
72
  /** Slippage tolerance, 0-100, defaults to 1 */
73
73
  slippage?: number;
74
74
  /** Priority fee in microLamports (Solana only) */
@@ -212,7 +212,7 @@ declare function useSwap(options?: UseSwapOptions): {
212
212
  * Polling pauses when `paused` is true (e.g. during swap execution) or
213
213
  * when required params are missing.
214
214
  */
215
- declare function useSwapRoutePolling(params: Partial<API.SwapParams>, options?: UseSwapRoutePollingOptions): {
215
+ declare function useSwapRoutePolling(params: Partial<SwapParams>, options?: UseSwapRoutePollingOptions): {
216
216
  route: _liberfi_io_types.SwapRoute | undefined;
217
217
  isRouting: boolean;
218
218
  error: Error | null;
@@ -294,7 +294,7 @@ interface UseSwapScriptResult {
294
294
  /** Output amount converted to USD using to-token price */
295
295
  outputAmountInUsd: string | undefined;
296
296
  /** Current swap route quote */
297
- route: API.SwapRoute | undefined;
297
+ route: SwapRoute | undefined;
298
298
  /** Whether a route is currently being fetched */
299
299
  isRouting: boolean;
300
300
  /** Route fetch error, if any */
@@ -353,7 +353,7 @@ interface SwapUIProps {
353
353
  /** To-token selection handler */
354
354
  onToTokenSelect: (addr: string) => void;
355
355
  /** Current swap route quote */
356
- route: API.SwapRoute | undefined;
356
+ route: SwapRoute | undefined;
357
357
  /** Whether a route is being fetched */
358
358
  isRouting: boolean;
359
359
  /** Route error */
@@ -386,7 +386,7 @@ interface SwapPreviewModalProps {
386
386
  /** Output amount in USD */
387
387
  outputAmountInUsd: string | undefined;
388
388
  /** Current swap route */
389
- route: API.SwapRoute | undefined;
389
+ route: SwapRoute | undefined;
390
390
  /** Whether a route is being fetched */
391
391
  isRouting: boolean;
392
392
  /** Route error */
@@ -1049,13 +1049,4 @@ declare function getChainPresetFeatures(chain: Chain): ChainPresetFeatures;
1049
1049
  /** Returns chain-appropriate default preset values. */
1050
1050
  declare function getDefaultPresetForChain(chain: Chain): TradePresetValues;
1051
1051
 
1052
- declare global {
1053
- interface Window {
1054
- __LIBERFI_VERSION__?: {
1055
- [key: string]: string;
1056
- };
1057
- }
1058
- }
1059
- declare const _default: "2.0.13";
1060
-
1061
- export { AmountPresetInputUI, type AmountPresetInputUIProps, AmountPresetInputWidget, type AmountPresetInputWidgetProps, type AmountPresetState, type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_SOL_TRADE_PRESET, type FeeType, InstantTradeButtonWidget, type InstantTradeButtonWidgetProps, type InstantTradeContextValue, InstantTradeListButtonWidget, type InstantTradeListButtonWidgetProps, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, type InstantTradeSwapFn, InstantTradeSwapProvider, type InstantTradeSwapProviderProps, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, MultiPresetFormWidget, type MultiPresetFormWidgetProps, type PresetDirection, PresetFormModal, type PresetFormModalParams, PresetFormUI, type PresetFormUIProps, PresetFormWidget, type PresetFormWidgetProps, type SellSettings, type SwapInput, type SwapPhase, SwapPreviewModal, type SwapPreviewModalProps, type SwapResult, SwapRouteExpiredError, SwapUI, type SwapUIProps, SwapWidget, type SwapWidgetProps, type TradePresetValues, type TxConfirmationStatus, type UseAmountPresetInputScriptParams, type UseAmountPresetInputScriptResult, type UseInstantTradeAmountParams, type UseInstantTradeButtonParams, type UseInstantTradeButtonResult, type UseInstantTradeListButtonParams, type UseInstantTradeListButtonResult, type UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseMultiPresetFormScriptParams, type UseMultiPresetFormScriptResult, type UsePresetFormScriptParams, type UsePresetFormScriptResult, type UsePresetValuesParams, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultBuyAmounts, getDefaultPresetForChain, instantTradeAmountAtomFamily, instantTradeAmountKey, presetAtomFamily, presetKey, useAmountPresetInputScript, useInstantTrade, useInstantTradeAmount, useInstantTradeButtonScript, useInstantTradeListButtonScript, useInstantTradeScript, useInstantTradeSwap, useMultiPresetFormScript, usePresetFormScript, usePresetValues, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation, _default as version };
1052
+ export { AmountPresetInputUI, type AmountPresetInputUIProps, AmountPresetInputWidget, type AmountPresetInputWidgetProps, type AmountPresetState, type AntiMevOption, type BuySettings, type ChainPresetFeatures, DEFAULT_BSC_TRADE_PRESET, DEFAULT_EVM_TRADE_PRESET, DEFAULT_INSTANT_TRADE_SETTINGS, DEFAULT_SELL_PERCENTAGES, DEFAULT_SOL_TRADE_PRESET, type FeeType, InstantTradeButtonWidget, type InstantTradeButtonWidgetProps, type InstantTradeContextValue, InstantTradeListButtonWidget, type InstantTradeListButtonWidgetProps, InstantTradeProvider, type InstantTradeProviderProps, type InstantTradeSettings, type InstantTradeSwapFn, InstantTradeSwapProvider, type InstantTradeSwapProviderProps, InstantTradeUI, type InstantTradeUIProps, InstantTradeWidget, type InstantTradeWidgetProps, MultiPresetFormWidget, type MultiPresetFormWidgetProps, type PresetDirection, PresetFormModal, type PresetFormModalParams, PresetFormUI, type PresetFormUIProps, PresetFormWidget, type PresetFormWidgetProps, type SellSettings, type SwapInput, type SwapPhase, SwapPreviewModal, type SwapPreviewModalProps, type SwapResult, SwapRouteExpiredError, SwapUI, type SwapUIProps, SwapWidget, type SwapWidgetProps, type TradePresetValues, type TxConfirmationStatus, type UseAmountPresetInputScriptParams, type UseAmountPresetInputScriptResult, type UseInstantTradeAmountParams, type UseInstantTradeButtonParams, type UseInstantTradeButtonResult, type UseInstantTradeListButtonParams, type UseInstantTradeListButtonResult, type UseInstantTradeScriptParams, type UseInstantTradeScriptResult, type UseMultiPresetFormScriptParams, type UseMultiPresetFormScriptResult, type UsePresetFormScriptParams, type UsePresetFormScriptResult, type UsePresetValuesParams, type UseSwapOptions, type UseSwapRoutePollingOptions, type UseSwapScriptParams, type UseSwapScriptResult, type UseTxConfirmationOptions, getChainPresetFeatures, getDefaultBuyAmounts, getDefaultPresetForChain, instantTradeAmountAtomFamily, instantTradeAmountKey, presetAtomFamily, presetKey, useAmountPresetInputScript, useInstantTrade, useInstantTradeAmount, useInstantTradeButtonScript, useInstantTradeListButtonScript, useInstantTradeScript, useInstantTradeSwap, useMultiPresetFormScript, usePresetFormScript, usePresetValues, useSwap, useSwapRoutePolling, useSwapScript, useTxConfirmation };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- 'use strict';var jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),de=require('bignumber.js'),uiChainSelect=require('@liberfi.io/ui-chain-select'),uiScaffold=require('@liberfi.io/ui-scaffold');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var de__default=/*#__PURE__*/_interopDefault(de);var cn="liberfi.",fn={amount:void 0,preset:0};function gn(e,t,r,s){return `${e}instant-trade.${t}.${r}.${s}`}function xn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[o,a,n]=s.split(".");return {prefix:r,id:o,chain:a,tokenAddress:n}}function G(e,t,r,s=cn){return `${s}:${e}.${t}.${r}`}var j=jotaiFamily.atomFamily(e=>{let{prefix:t,id:r,chain:s,tokenAddress:o}=xn(e);return utils.atomWithStorage(gn(t,r,String(s),o),fn,void 0,{getOnInit:true})});function za({id:e,chain:t,tokenAddress:r,storageKeyPrefix:s}){return jotai.useAtomValue(j(G(e,t,r,s)))}var ge=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},yn={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]},bn=[1,10,25,50];function yt(e){return yn[e]??bn}var bt=[10,25,50,100];function le(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let r=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:r,feeType:"priorityFee",feeUnit:r,feeDecimals:9,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.isBinanceChain(e)?{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:r,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:r,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return utils$1.isSolanaChain(e)?gt:utils$1.isBinanceChain(e)?ht:xt}var wn="liberfi.";function Tn(e,t,r,s){return `${e}preset.${t}.${r}.${s}`}function Nn(e){let t=e.lastIndexOf(":"),r=e.slice(0,t+1),s=e.slice(t+1),[o,a,n]=s.split(".");return {prefix:r,chain:o,direction:a,index:Number(n)}}function L(e,t,r,s=wn){return `${s}:${e}.${t}.${r}`}var _=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:r,direction:s,index:o}=Nn(e);return utils.atomWithStorage(Tn(t,String(r),s,o),V(r),void 0,{getOnInit:true})});function so({chain:e,direction:t,presetIndex:r=0,storageKeyPrefix:s}){return jotai.useAtomValue(_(L(e,t,r,s)))}var An=150,Fn=12e3,vt=60,wt=40;function Re(e,t,r,s){if(!utils$1.isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!r.data||Date.now()-r.dataUpdatedAt>Fn)throw new ge("Latest Solana block data is stale. Please refresh the quote.");let o=r.data.lastValidBlockHeight-An;if(t.lastValidBlockHeight-o<s)throw new ge("Swap route is close to blockhash expiry. Please refresh the quote.")}function Dn(e){let t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}function On(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}function ne(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(false),o=react.useRef(e);o.current=e;let a=react$1.useLatestBlockCacheReader({chain:types.Chain.SOLANA}),n=react.useCallback(async l=>{let{wallet:i,chain:u,...m}=l;s(true);try{let d;try{d=await t.swapRoute({chain:u,userAddress:i.address,input:m.input,output:m.output,mode:m.mode??types.API.SwapMode.EXACT_IN,amount:m.amount,slippage:m.slippage,priorityFee:m.priorityFee,tipFee:m.tipFee,isAntiMev:m.isAntiMev,permit:m.permit,deadline:m.deadline});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"route"),x}try{Re(u,d,a(),vt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let g;try{let c=Dn(d.serializedTx);g=await i.signTransaction(c);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"sign"),x}try{Re(u,d,a(),wt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let h;try{let c=On(g);h=await t.sendTx({chain:u,serializedTx:c});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"send"),x}let p={txHash:h.txHash,extra:h.extra};return o.current?.onSubmitted?.(p),p}finally{s(false);}},[t,a]);return react.useMemo(()=>({swap:n,isSwapping:r}),[n,r])}var Hn=12e3;function Tt(e,t){let r=t?.interval??Hn,s=t?.paused??false,o=react.useRef(t);o.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!s,l=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?r:false,retry:false});return react.useEffect(()=>{l.error&&o.current?.onError?.(l.error);},[l.error]),react.useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var qn=6e4;function Nt(e){let{client:t}=react$1.useDexClient(),[r,s]=react.useState(()=>new Map),o=react.useRef(e);o.current=e;let a=react.useCallback((u,m)=>{s(d=>{let g=d.get(u);if(!g||g.status===m)return d;let h=new Map(d);return h.set(u,{...g,status:m}),h});},[]),n=react.useCallback((u,m)=>{s(g=>{if(g.has(m))return g;let h=new Map(g);return h.set(m,{chain:u,txHash:m,status:"pending"}),h});let d=o.current?.timeout??qn;t.checkTxSuccess(u,m,d).then(g=>{if(g)a(m,"confirmed"),o.current?.onConfirmed?.(m);else {let h=new Error("Transaction failed on-chain");a(m,"failed"),o.current?.onFailed?.(m,h);}}).catch(g=>{let h=g instanceof Error?g:new Error(String(g));a(m,"failed"),o.current?.onFailed?.(m,h);});},[t,a]),l=react.useCallback(u=>{s(m=>{if(!m.has(u))return m;let d=new Map(m);return d.delete(u),d});},[]),i=react.useCallback(()=>{s(u=>u.size===0?u:new Map);},[]);return react.useMemo(()=>({track:n,clear:l,clearAll:i,transactions:r}),[n,l,i,r])}var Jn=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function er(e){return Jn.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var tr=1e4,nr=15e3;function rr(e,t){if(e.length===0)return;let s=e[e.length-1].outputAmount;if(!s||s==="0")return "0";let o=s.padStart(t+1,"0"),a=o.slice(0,o.length-t)||"0",l=o.slice(o.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function Le(e){let{chain:t}=e,r=walletConnector.useWallets(),s=er(t),o=react.useMemo(()=>r.find(S=>S.chainNamespace===s&&S.isConnected),[r,s]),a=o?.address??"",[n,l]=react.useState(e.from??""),[i,u]=react.useState(e.to??""),m=react.useRef(e.from),d=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!==d.current&&(d.current=e.to,e.to&&u(e.to));},[e.to]);let g=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:g},{enabled:g.length>0,refetchInterval:tr}),p=react.useMemo(()=>h.data?.find(S=>S.address===n)??null,[h.data,n]),c=react.useMemo(()=>h.data?.find(S=>S.address===i)??null,[h.data,i]),x=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:g},{enabled:!!a&&g.length>0,refetchInterval:nr}),P=react.useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),v=react.useMemo(()=>x.data?.find(S=>S.address===i)??null,[x.data,i]),[f,A]=react.useState(void 0),R=react.useMemo(()=>{if(!f||p?.decimals==null)return;let S=f.split("."),k=S[0]??"0",Me=(S[1]??"").slice(0,p.decimals).padEnd(p.decimals,"0");return (k+Me).replace(/^0+/,"")||"0"},[f,p?.decimals]),$=react.useMemo(()=>{if(!f||!p?.marketData?.priceInUsd)return;let S=Number(p.marketData.priceInUsd),k=Number(f)*S;return Number.isFinite(k)?k.toString():void 0},[f,p?.marketData?.priceInUsd]),H=react.useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let k=S/2,Pe=p?.decimals??9;A(k.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:Pe}));},[P,p?.decimals]),z=react.useCallback(()=>{if(!P)return;let S=Number(P.amount);if(!Number.isFinite(S)||S<=0)return;let k=p?.decimals??9;A(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:k}));},[P,p?.decimals]),E=react.useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:types.API.SwapMode.EXACT_IN,amount:R}),[t,a,n,i,R]),Z=react.useRef(false),{route:F,isRouting:Y,error:J}=Tt(E,{paused:Z.current}),Q=react.useMemo(()=>F&&c?rr(F.plans,c.decimals):void 0,[F,c]),se=react.useMemo(()=>{if(!Q||!c?.marketData?.priceInUsd)return;let S=Number(c.marketData.priceInUsd),k=Number(Q)*S;return Number.isFinite(k)?k.toString():void 0},[Q,c?.marketData?.priceInUsd]),{swap:w,isSwapping:U}=ne();Z.current=U;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:S=>{W.current?.({success:true,txHash:S});},onFailed:S=>{W.current?.({success:false,txHash:S});}}),oe=react.useMemo(()=>{if(ee.size===0)return "idle";let S=Array.from(ee.values());return S[S.length-1].status},[ee]),te=react.useCallback(async()=>{if(!(!o||!F||!n||!i||!R))try{let S=await w({chain:t,wallet:o,input:n,output:i,amount:R,mode:types.API.SwapMode.EXACT_IN});ae(t,S.txHash);}catch{}},[o,F,t,n,i,R,w,ae]),ie=h.isPending||x.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:p,toToken:c,fromBalance:P,toBalance:v,amount:f,setAmount:A,setHalfAmount:H,setMaxAmount:z,amountInDecimals:R,amountInUsd:$,outputAmount:Q,outputAmountInUsd:se,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:U,txStatus:oe,isLoading:ie}),[n,i,p,c,P,v,f,H,z,R,$,Q,se,F,Y,J,te,U,oe,ie])}function Oe({isOpen:e,onOpenChange:t,fromToken:r,toToken:s,fromBalance:o,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:m,routeError:d,onConfirm:g,isSwapping:h}){let{t:p}=i18n.useTranslation(),[c,x]=react.useState(false),P=react.useCallback(()=>x(f=>!f),[]),v=react.useMemo(()=>u?u.plans.map((f,A)=>({key:`plan-${A}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.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:p("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:p("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),o&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(xr,{}),jsxRuntime.jsxs("span",{children:[_e(o.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:_e(a)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:p("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[s?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:s.image,name:s.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:s?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:Te(s?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:_e(l)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(i)]})]})]})]}),c&&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:p("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:v.map(f=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:p("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:p("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[De(f.inputAmount)," ",Te(f.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[De(f.outputAmount)," ",Te(f.output)]})]})]}),f.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:p("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[De(f.feeAmount)," ",Te(f.feeQuote)]})]})]},f.key))})]}),v.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:c?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:P,children:p(c?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!d,isLoading:!u&&m||h,onPress:g,children:p("common.confirm")})})]})})}function xr(){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 _e(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 Te(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ve({fromToken:e,toToken:t,fromBalance:r,toBalance:s,amount:o,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:m,onFromTokenSelect:d,onToTokenSelect:g,route:h,isRouting:p,routeError:c,onPreview:x,isSwapping:P,className:v}){let{t:f}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",v),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:o??"",onChange:A=>n(A.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:()=>d(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Lt(a)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(kt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[_t(r.amount)," ",r.symbol]}),l&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:f("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),c&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:c.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.to")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value: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:()=>g(""),children:t?t.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Lt(m)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(kt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[_t(s.amount)," ",s.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&p,onPress:x,children:f(P?"trade.swap.swapping":p?"trade.swap.findingRoute":"trade.swap.swap")})]})}function kt(){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 Lt(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 _t(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 Sr({chain:e,from:t,to:r,onComplete:s,className:o}){let a=Le({chain:e,from:t,to:r,onComplete:s}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=ui.useDisclosure(),m=react.useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ve,{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:o}),jsxRuntime.jsx(Oe,{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})]})}function Wt(e){let t=V(e),r=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(r),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...bt],presets:[{...t},{...t},{...t}]}}}var Nr=Wt("900900900");function Vt(e){return `liberfi.instant-trade.settings.${e}`}function Cr(e,t){try{let r=localStorage.getItem(Vt(String(e)));if(r)return JSON.parse(r)}catch{}return t}function Ir(e,t){try{localStorage.setItem(Vt(e),JSON.stringify(t));}catch{}}var Kt=react.createContext(null);function $e(){let e=react.useContext(Kt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function He({chain:e,tokenAddress:t,settings:r,onSettingsChange:s,children:o}){let a=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=r!==void 0,l=react.useMemo(()=>Wt(e),[e]),[i,u]=react.useState(()=>n?l:Cr(e,l)),m=n?r:i,d=react.useCallback(E=>{n?s?.(E):(u(E),Ir(String(e),E));},[n,s,e]),g=react.useCallback(E=>d({...m,buy:E}),[m,d]),h=react.useCallback(E=>d({...m,sell:E}),[m,d]),[p,c]=react.useState("buy"),[x,P]=react.useState(),[v,f]=react.useState(0),[A,R]=react.useState(0),$=react.useMemo(()=>V(e),[e]),H=react.useMemo(()=>{let E=p==="buy"?v:A;return (p==="buy"?m.buy.presets:m.sell.presets)[E]??$},[p,v,A,m,$]),z=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:p,setDirection:c,amount:x,setAmount:P,buyPreset:v,setBuyPreset:f,sellPreset:A,setSellPreset:R,settings:m,updateBuySettings:g,updateSellSettings:h,currentPresetValues:H}),[e,t,a,p,x,v,A,m,g,h,H]);return jsxRuntime.jsx(Kt.Provider,{value:z,children:o})}var Wr=15e3,Vr=1e4,Kr=1e4;function ze(e){let{chain:t,tokenAddress:r,onSwapSubmitted:s,onSwapError:o}=e,{t:a}=i18n.useTranslation(),n=$e(),l=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),u=walletConnector.useWallets(),m=utils$1.chainToNamespace(t),d=react.useMemo(()=>u.find(w=>w.chainNamespace===m&&w.isConnected),[u,m]),g=d?.address??"",h=react.useMemo(()=>{let w=[r];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[r,l,i]),p=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Vr}),c=react.useMemo(()=>p.data?.find(w=>w.address===r)??null,[p.data,r]),x=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:g,tokenAddresses:h},{enabled:!!g&&h.length>0,refetchInterval:Wr});react$1.useLatestBlockQuery({chain:types.Chain.SOLANA},{enabled:utils$1.isSolanaChain(t),refetchInterval:Kr,staleTime:8e3});let P=l?.address??i?.address??"",v=react.useMemo(()=>x.data?.find(w=>w.address===P)??null,[x.data,P]),f=react.useMemo(()=>x.data?.find(w=>w.address===r)??null,[x.data,r]),[A,R]=react.useState(false),$=react.useRef(null),H=react.useCallback(w=>{let U=$.current;$.current=w,R(W=>U===null||U!==w?true:!W);},[]),z=react.useRef(s);z.current=s;let E=react.useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>z.current?.(w),onError:(w,U)=>E.current?.(w,U)}),Y=react.useCallback(async()=>{if(!n.amount||!d||!r)return;let w=l?.decimals??9,U=i?.address??l?.address??"",W=n.direction==="buy",ae=W?U:r,ee=W?r:U,oe=W?w:c?.decimals??9,te=new de__default.default(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,S=V(t),k=ie.slippage??S.slippage??1,Pe=ie.antiMev!=="off",Me=utils$1.isSolanaChain(t)?{priorityFee:new de__default.default(ie.priorityFee??S.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new de__default.default(ie.tipFee??S.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:Pe}:{};try{await Z({chain:t,wallet:d,input:ae,output:ee,amount:te,slippage:k,...Me}),n.setAmount(void 0);}catch{}},[n,d,r,l,i,c,t,Z]),J=react.useMemo(()=>{let w=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let U=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=v?.amount;if(ae&&new de__default.default(ae).lt(n.amount))return `${w}${U}`;let ee=l?.symbol??"",oe=p.data?.find(te=>te.address===P)?.marketData?.priceInUsd;if(oe){let te=utils$1.formatAmountUSD(new de__default.default(n.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=f?.amount;return W&&new de__default.default(W).lt(n.amount)?`${w}${U}`:w},[a,n.direction,n.amount,v,f,l,p.data,P]),Q=!n.amount||!d||!r,se=p.isPending||x.isPending;return react.useMemo(()=>({chain:t,tokenAddress:r,nativeToken:l,tokenInfo:c,nativeBalance:v,tokenBalance:f,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:A,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:se}),[t,r,l,c,v,f,n,A,H,Y,F,J,Q,se])}function be({value:e,onChange:t,chain:r,disableAnimation:s,className:o}){let a=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>le(r),[r]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",o),children:[jsxRuntime.jsx(Yr,{value:e.slippage,onChange:i=>a({slippage:i})}),jsxRuntime.jsx(Jr,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(es,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(ts,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:s}),e.autoFee&&jsxRuntime.jsx(ns,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(rs,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:s}),n.showCustomRPC&&jsxRuntime.jsx(ss,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Yr({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:s}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":s})]})}function Jr({value:e,onChange:t,feeType:r,symbol:s,decimals:o}){let{t:a}=i18n.useTranslation(),n=a(`trade.preset.${r}`),l=a(`trade.preset.${r}.tooltip`);return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[n,jsxRuntime.jsx(ui.StyledTooltip,{content: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:o},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":n})]})}function es({value:e,onChange:t,symbol:r,decimals:s}){let{t:o}=i18n.useTranslation(),a=o("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:o("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:s},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":a})]})}function ts({value:e,onChange:t,disableAnimation:r}){let{t:s}=i18n.useTranslation(),o=s("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:s("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":o,disableAnimation:r})})]})}function ns({value:e,onChange:t,symbol:r}){let{t:s}=i18n.useTranslation(),o=s("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:o}),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:r}),"aria-label":o})]})}function rs({value:e,onChange:t,options:r,disableAnimation:s}){let{t:o}=i18n.useTranslation(),a=o("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),l=react.useMemo(()=>({off:{title:o("trade.preset.antiMev.off"),desc:o("trade.preset.antiMev.off.desc")},reduced:{title:o("trade.preset.antiMev.reduced"),desc:o("trade.preset.antiMev.reduced.desc")},secure:{title:o("trade.preset.antiMev.secure"),desc:o("trade.preset.antiMev.secure.desc")}}),[o]);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:o("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:s,"aria-label":a,children:r.map(i=>{let u=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(u,{width:18,height:18})})})},i)})})})]})}function ss({value:e,onChange:t}){let{t:r}=i18n.useTranslation(),s=r("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:s}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>t(o||null),placeholder:"https://...","aria-label":s})})]})}function Xe({chain:e,direction:t,onDirectionChange:r,amount:s,onAmountChange:o,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:m,tokenSymbol:d,nativeBalance:g,tokenBalance:h,amountConversion:p,preset:c,onPresetChange:x,presetValues:P,onPresetSettingsChange:v,showSettings:f,onPresetClick:A,submitText:R,isDisabled:$,isLoading:H,onSubmit:z,className:E,headerExtra:Z}){let{t:F}=i18n.useTranslation(),Y=react.useMemo(()=>utils$1.getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",E),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:r,classNames:{tabList:"bg-content2",tab:ui.cn("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:F("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:F("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:F("trade.market")},"market")}),Z]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(xs,{amount:s,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsxRuntime.jsx(hs,{amount:s,onAmountChange:o,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:m,tokenSymbol:d,amountLabel:F("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:F("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?g?`${g} ${J??""}`:"--":h?`${h} ${d??""}`:"--"})]}),p&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:p})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(ys,{values:P,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${c}`,onSelectionChange:se=>x(Number(se)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>A(0)},0),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>A(1)},1),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>A(2)},2)]})}),f&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(be,{value:P,onChange:v,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:H,onPress:z,children:R})]})}function xs({amount:e,onAmountChange:t,customAmounts:r,onQuickAmountClick:s,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=react.useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange: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(qt,{values:r,onSelect:s,onEdit:o})]})}function hs({amount:e,onAmountChange:t,customPercentages:r,onQuickPercentageClick:s,onCustomPercentagesEdit:o,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(qt,{values:r,onSelect:s,onEdit:o,suffix:"%"})]})}function qt({values:e,onSelect:t,onEdit:r,suffix:s}){let[o,a]=react.useState(false),[n,l]=react.useState([]),i=react.useCallback(()=>{l([...e]),a(true);},[e]),u=react.useCallback(()=>{a(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((m,d)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",d===0&&"rounded-bl-lg"),children:o?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[d]===null||n[d]===void 0?void 0:n[d],onChange:g=>{if(typeof g=="number"){let h=isNaN(g)?null:g;l(p=>{let c=[...p];return c[d]=h,c});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",d===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[d]!=null&&t(e[d]),endContent:s?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:s}):null,children:e[d]??""})},d))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:o?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:i,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function ys({values:e,chain:t}){let{t:r}=i18n.useTranslation(),s=react.useMemo(()=>le(t),[t]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:r(`trade.preset.${s.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),s.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:r("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[o==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),o==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),o==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:r(`trade.preset.antiMev.${o}`)})})]})}function Ps({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,settings:o,onSettingsChange:a,headerExtra:n,className:l}){return jsxRuntime.jsx(He,{chain:e,tokenAddress:t,settings:o,onSettingsChange:a,children:jsxRuntime.jsx(vs,{chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:n,className:l})})}function vs({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s,headerExtra:o,className:a}){let n=ze({chain:e,tokenAddress:t,onSwapSubmitted:r,onSwapError:s}),l=react.useCallback(p=>n.setAmount(p),[n]),i=react.useCallback(p=>{let c=n.tokenBalance?.amount;if(!c)return;let x=new de__default.default(c).times(p).div(100).toNumber();n.setAmount(x);},[n]),u=react.useCallback(p=>{n.updateBuySettings({...n.settings.buy,customAmounts:p});},[n]),m=react.useCallback(p=>{n.updateSellSettings({...n.settings.sell,customPercentages:p});},[n]),d=react.useCallback(p=>{let c=n.direction==="buy",x=c?n.buyPreset:n.sellPreset;if(c){let P=n.settings.buy,v=[...P.presets];v[x]=p,n.updateBuySettings({...P,presets:v});}else {let P=n.settings.sell,v=[...P.presets];v[x]=p,n.updateSellSettings({...P,presets:v});}},[n]),g=react.useCallback(p=>{n.direction==="buy"?n.setBuyPreset(p):n.setSellPreset(p);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(Xe,{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:u,onCustomPercentagesEdit:m,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:g,presetValues:n.currentPresetValues,onPresetSettingsChange:d,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:a,headerExtra:o})}function Je(e){let{id:t,chain:r,token:s,storageKeyPrefix:o,onAmountChange:a,onPresetChange:n,onPresetClick:l}=e,[i,u]=jotai.useAtom(j(G(t,r,s.address,o))),m=jotai.useAtomValue(_(L(r,"buy",0,o))),d=jotai.useAtomValue(_(L(r,"buy",1,o))),g=jotai.useAtomValue(_(L(r,"buy",2,o))),h=react.useMemo(()=>[m,d,g],[m,d,g]),p=react.useCallback(x=>{u(P=>({...P,amount:x})),a?.(x);},[u,a]),c=react.useCallback(x=>{u(P=>({...P,preset:x})),n?.(x);},[u,n]);return {token:s,chain:r,amount:i.amount,handleAmountChange:p,preset:i.preset,handlePresetChange:c,onPresetClick:l,presetValues:h}}function et({token:e,chain:t,amount:r,onAmountChange:s,preset:o=0,onPresetChange:a,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:m}){let{t:d}=i18n.useTranslation(),{isMobile:g}=ui.useScreen(),h=react.useRef(null),p=react.useMemo(()=>V(t),[t]),[c,x]=react.useState(null),P=react.useCallback(v=>{a?.(Number(v));},[a]);return jsxRuntime.jsxs("div",{ref:h,className:ui.cn("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",m),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:r,onValueChange:v=>s(isNaN(v)?void 0:v),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":d("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsxRuntime.jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsxRuntime.jsx(ui.StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:P,classNames:{base:"flex-none h-full",tabList:ui.cn("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:ui.cn("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((v,f)=>jsxRuntime.jsx(ui.Tab,{title:g?jsxRuntime.jsx("span",{onClick:A=>{o===f&&(A.stopPropagation(),x(R=>R===f?null:f));},children:d("trade.preset.short",{n:f+1})}):jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsx(nn,{label:d("trade.preset.short",{n:f+1}),values:l?.[f]??p,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsxRuntime.jsx("span",{onClick:()=>o===f&&n?.(f),children:d("trade.preset.short",{n:f+1})})})},String(f)))}),g&&c!==null&&jsxRuntime.jsx(Vs,{label:d("trade.preset.short",{n:c+1}),values:l?.[c]??p,chain:t,onClose:()=>x(null),containerRef:h})]})}function Vs({label:e,values:t,chain:r,onClose:s,containerRef:o}){let a=react.useRef(null);return react.useEffect(()=>{let n=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&s();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[s,o]),jsxRuntime.jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsxRuntime.jsx(nn,{label:e,values:t,chain:r})})}function nn({label:e,values:t,chain:r}){let{t:s}=i18n.useTranslation(),o=react.useMemo(()=>le(r),[r]),a=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxRuntime.jsxs("div",{className:"flex flex-col py-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsxRuntime.jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s("trade.preset.slippage")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:utils$1.formatPercent(n)})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s(`trade.preset.${o.feeType}`)})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.priorityFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:o.feeUnit})]})]}),o.showTipFee&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s("trade.preset.tipFee")})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.tipFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:o.tipFeeUnit})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:12,height:12,className:"flex-none"}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:12,height:12,className:"flex-none"}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:s("trade.preset.antiMev")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",a==="off"&&"text-zinc-500",a==="reduced"&&"text-amber-400",a==="secure"&&"text-emerald-400"),children:s(`trade.preset.antiMev.${a}`)})]})]})}function Ks({size:e,radius:t,className:r,...s}){let{token:o,chain:a,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:m,presetValues:d}=Je(s);return jsxRuntime.jsx(et,{token:o,chain:a,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:m,presetValues:d,size:e,radius:t,className:r})}function tt(e){let{chain:t,presetIndex:r=0,defaultDirection:s="buy",storageKeyPrefix:o,onChange:a}=e,[n,l]=react.useState(s),[i,u]=jotai.useAtom(_(L(t,n,r,o))),m=react.useCallback(d=>{u(d),a?.(n,d);},[u,a,n]);return {direction:n,setDirection:l,value:i,handleChange:m}}function rt({disableAnimation:e,className:t,...r}){let{t:s}=i18n.useTranslation(),{direction:o,setDirection:a,value:n,handleChange:l}=tt(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:s("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:s("common.sell")},"sell")]}),jsxRuntime.jsx(be,{value:n,onChange:l,chain:r.chain,disableAnimation:e})]})}var Ys=3;function st(e){let{defaultPresetIndex:t=0,onChange:r}=e,[s,o]=react.useState(t),a=react.useCallback((n,l)=>{r?.(s,n,l);},[r,s]);return {presetCount:Ys,presetIndex:s,setPresetIndex:o,handlePresetChange:a}}function ot({defaultDirection:e,disableAnimation:t,className:r,...s}){let{t:o}=i18n.useTranslation(),{presetCount:a,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=st(s);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",r),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,m)=>jsxRuntime.jsx(ui.Tab,{title:o("trade.preset.label",{n:m+1})},String(m)))}),jsxRuntime.jsx(rt,{chain:s.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:s.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var ga="preset";function xa({id:e=ga}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(ha,{...t})})}function ha({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:r}){let{t:s}=i18n.useTranslation(),{chains:o,defaultChain:a,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[m,d]=react.useState(a??o[0]);react.useEffect(()=>{d(a??o[0]);},[a,o]);let g=react.useCallback((h,p,c)=>{u?.(m,h,p,c);},[u,m]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:r,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:s("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:o,chain:m,onSelectChain:d})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(ot,{chain:m,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:g})})})]})})}function Ee(e,t,r,s,o){let a=V(o),n=new de__default.default(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new de__default.default(s.priorityFee??a.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new de__default.default(s.tipFee??a.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:r,amount:n,slippage:s.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:s.antiMev!=="off"}}function ut(e){let{id:t,chain:r,token:s,output:o,storageKeyPrefix:a,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=jotai.useAtomValue(j(G(t,r,s.address,a))),m=jotai.useAtomValue(_(L(r,"buy",u,a))),d=walletConnector.useConnectedWallet(r),{swap:g,isSwapping:h}=ne({onSubmitted:n,onError:l}),p=!i||!o,c=walletConnector.useAuthCallback(async()=>{if(!i||!d||!o)return;let x=Ee(i,s,o,m,r);try{await g({...x,chain:r,wallet:d});}catch{}},[d,i,o,r,s,m,g]);return react.useMemo(()=>({amount:i,token:s,isDisabled:p,isSwapping:h,handleSwap:c}),[i,s,p,h,c])}function wa({size:e="sm",radius:t,color:r="primary",className:s,...o}){let{amount:a,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:t,color:r,className:s,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${n.symbol}`:n.symbol})}var un=react.createContext(null);function Fa({chain:e,onSwapSubmitted:t,onSwapError:r,children:s}){let o=walletConnector.useConnectedWallet(e),{swap:a}=ne({onSubmitted:t,onError:r}),n=react.useRef(o);n.current=o;let l=react.useRef(a);l.current=a;let i=react.useRef(e);i.current=e;let u=react.useCallback(async d=>{let g=n.current;if(g)return l.current({...d,wallet:g,chain:i.current})},[]),m=walletConnector.useAuthCallback(u,[]);return jsxRuntime.jsx(un.Provider,{value:m,children:s})}function dt(){let e=react.useContext(un);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:t,chain:r,token:s,output:o,storageKeyPrefix:a}=e,{amount:n,preset:l}=jotai.useAtomValue(j(G(t,r,s.address,a))),i=jotai.useAtomValue(_(L(r,"buy",l,a))),u=dt(),[m,d]=react.useState(false),g=!n||!o,h=react.useRef(s);h.current=s;let p=react.useRef(i);p.current=i;let c=react.useRef(r);c.current=r;let x=react.useCallback(async()=>{if(!n||!o)return;let P=Ee(n,h.current,o,p.current,c.current);d(true);try{await u(P);}catch{}finally{d(false);}},[n,o,u]);return react.useMemo(()=>({amount:n,token:s,isDisabled:g,isSwapping:m,handleSwap:x}),[n,s,g,m,x])}var Da=react.memo(function({size:t="sm",radius:r,color:s="primary",className:o,...a}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:m}=ct(a);return jsxRuntime.jsx(ui.Button,{variant:"solid",fullWidth:true,size:t,radius:r,color:s,className:o,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),onPress:m,style:{background:"rgba(199,255,46,0.08)",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:n!=null?`${n} ${l.symbol}`:l.symbol})});typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-trade"]="2.0.13");var Oa="2.0.13";
2
- exports.AmountPresetInputUI=et;exports.AmountPresetInputWidget=Ks;exports.DEFAULT_BSC_TRADE_PRESET=ht;exports.DEFAULT_EVM_TRADE_PRESET=xt;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Nr;exports.DEFAULT_SELL_PERCENTAGES=bt;exports.DEFAULT_SOL_TRADE_PRESET=gt;exports.InstantTradeButtonWidget=wa;exports.InstantTradeListButtonWidget=Da;exports.InstantTradeProvider=He;exports.InstantTradeSwapProvider=Fa;exports.InstantTradeUI=Xe;exports.InstantTradeWidget=Ps;exports.MultiPresetFormWidget=ot;exports.PresetFormModal=xa;exports.PresetFormUI=be;exports.PresetFormWidget=rt;exports.SwapPreviewModal=Oe;exports.SwapRouteExpiredError=ge;exports.SwapUI=Ve;exports.SwapWidget=Sr;exports.getChainPresetFeatures=le;exports.getDefaultBuyAmounts=yt;exports.getDefaultPresetForChain=V;exports.instantTradeAmountAtomFamily=j;exports.instantTradeAmountKey=G;exports.presetAtomFamily=_;exports.presetKey=L;exports.useAmountPresetInputScript=Je;exports.useInstantTrade=$e;exports.useInstantTradeAmount=za;exports.useInstantTradeButtonScript=ut;exports.useInstantTradeListButtonScript=ct;exports.useInstantTradeScript=ze;exports.useInstantTradeSwap=dt;exports.useMultiPresetFormScript=st;exports.usePresetFormScript=tt;exports.usePresetValues=so;exports.useSwap=ne;exports.useSwapRoutePolling=Tt;exports.useSwapScript=Le;exports.useTxConfirmation=Nt;exports.version=Oa;//# sourceMappingURL=index.js.map
1
+ 'use strict';var jotai=require('jotai'),jotaiFamily=require('jotai-family'),utils=require('jotai/utils'),utils$1=require('@liberfi.io/utils'),react=require('react'),react$1=require('@liberfi.io/react'),types=require('@liberfi.io/types'),walletConnector=require('@liberfi.io/wallet-connector'),ui=require('@liberfi.io/ui'),i18n=require('@liberfi.io/i18n'),jsxRuntime=require('react/jsx-runtime'),pe=require('bignumber.js'),uiChainSelect=require('@liberfi.io/ui-chain-select'),uiScaffold=require('@liberfi.io/ui-scaffold');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var pe__default=/*#__PURE__*/_interopDefault(pe);var cn="liberfi.",fn={amount:void 0,preset:0};function gn(e,t,s,r){return `${e}instant-trade.${t}.${s}.${r}`}function xn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,id:o,chain:a,tokenAddress:n}}function G(e,t,s,r=cn){return `${r}:${e}.${t}.${s}`}var j=jotaiFamily.atomFamily(e=>{let{prefix:t,id:s,chain:r,tokenAddress:o}=xn(e);return utils.atomWithStorage(gn(t,s,String(r),o),fn,void 0,{getOnInit:true})});function Qa({id:e,chain:t,tokenAddress:s,storageKeyPrefix:r}){return jotai.useAtomValue(j(G(e,t,s,r)))}var ge=class extends Error{constructor(t="Swap route expired. Please refresh the quote."){super(t),this.name="SwapRouteExpiredError";}},gt={slippage:20,priorityFee:.001,autoFee:false,maxAutoFee:.1,gasFee:null,tipFee:.001,antiMev:"reduced",customRPC:null},xt={slippage:20,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:null,antiMev:"off",customRPC:null},ht={slippage:30,priorityFee:null,autoFee:false,maxAutoFee:null,gasFee:2,tipFee:0,antiMev:"off",customRPC:null},yn={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]},bn=[1,10,25,50];function yt(e){return yn[e]??bn}var bt=[10,25,50,100];function le(e){let t=utils$1.getNativeToken(e);if(!t)throw new Error(`No native token defined for chain "${e}"`);let s=t.symbol;return utils$1.isSolanaChain(e)?{nativeSymbol:s,feeType:"priorityFee",feeUnit:s,feeDecimals:9,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:true,showCustomRPC:true,antiMevOptions:["off","reduced","secure"]}:utils$1.isBinanceChain(e)?{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:true,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}:{nativeSymbol:s,feeType:"gasFee",feeUnit:"Gwei",feeDecimals:2,showTipFee:false,tipFeeUnit:s,tipFeeDecimals:9,showAutoFee:false,showCustomRPC:false,antiMevOptions:["off","secure"]}}function V(e){return utils$1.isSolanaChain(e)?gt:utils$1.isBinanceChain(e)?ht:xt}var wn="liberfi.";function Tn(e,t,s,r){return `${e}preset.${t}.${s}.${r}`}function Nn(e){let t=e.lastIndexOf(":"),s=e.slice(0,t+1),r=e.slice(t+1),[o,a,n]=r.split(".");return {prefix:s,chain:o,direction:a,index:Number(n)}}function D(e,t,s,r=wn){return `${r}:${e}.${t}.${s}`}var L=jotaiFamily.atomFamily(e=>{let{prefix:t,chain:s,direction:r,index:o}=Nn(e);return utils.atomWithStorage(Tn(t,String(s),r,o),V(s),void 0,{getOnInit:true})});function so({chain:e,direction:t,presetIndex:s=0,storageKeyPrefix:r}){return jotai.useAtomValue(L(D(e,t,s,r)))}var In=150,Fn=12e3,Pt=60,wt=40;function Ue(e,t,s,r){if(!utils$1.isSolanaChain(e)||t.lastValidBlockHeight==null)return;if(!s.data||Date.now()-s.dataUpdatedAt>Fn)throw new ge("Latest Solana block data is stale. Please refresh the quote.");let o=s.data.lastValidBlockHeight-In;if(t.lastValidBlockHeight-o<r)throw new ge("Swap route is close to blockhash expiry. Please refresh the quote.")}function _n(e){let t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return s}function On(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}function ne(e){let{client:t}=react$1.useDexClient(),[s,r]=react.useState(false),o=react.useRef(e);o.current=e;let a=react$1.useLatestBlockCacheReader({chain:types.Chain.SOLANA}),n=react.useCallback(async l=>{let{wallet:i,chain:u,...m}=l;r(true);try{let p;try{p=await t.swapRoute({chain:u,userAddress:i.address,input:m.input,output:m.output,mode:m.mode??types.SwapMode.EXACT_IN,amount:m.amount,slippage:m.slippage,priorityFee:m.priorityFee,tipFee:m.tipFee,isAntiMev:m.isAntiMev,permit:m.permit,deadline:m.deadline});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"route"),x}try{Ue(u,p,a(),Pt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let g;try{let c=_n(p.serializedTx);g=await i.signTransaction(c);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"sign"),x}try{Ue(u,p,a(),wt);}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"expired"),x}let h;try{let c=On(g);h=await t.sendTx({chain:u,serializedTx:c});}catch(c){let x=c instanceof Error?c:new Error(String(c));throw o.current?.onError?.(x,"send"),x}let d={txHash:h.txHash,extra:h.extra};return o.current?.onSubmitted?.(d),d}finally{r(false);}},[t,a]);return react.useMemo(()=>({swap:n,isSwapping:s}),[n,s])}var Hn=12e3;function Tt(e,t){let s=t?.interval??Hn,r=t?.paused??false,o=react.useRef(t);o.current=t;let n=!!e.chain&&!!e.userAddress&&!!e.input&&!!e.output&&!!e.amount&&!r,l=react$1.useSwapRouteQuery(e,{enabled:n,refetchInterval:n?s:false,retry:false});return react.useEffect(()=>{l.error&&o.current?.onError?.(l.error);},[l.error]),react.useMemo(()=>({route:l.data,isRouting:l.isFetching,error:l.error}),[l.data,l.isFetching,l.error])}var qn=6e4;function Nt(e){let{client:t}=react$1.useDexClient(),[s,r]=react.useState(()=>new Map),o=react.useRef(e);o.current=e;let a=react.useCallback((u,m)=>{r(p=>{let g=p.get(u);if(!g||g.status===m)return p;let h=new Map(p);return h.set(u,{...g,status:m}),h});},[]),n=react.useCallback((u,m)=>{r(g=>{if(g.has(m))return g;let h=new Map(g);return h.set(m,{chain:u,txHash:m,status:"pending"}),h});let p=o.current?.timeout??qn;t.checkTxSuccess(u,m,p).then(g=>{if(g)a(m,"confirmed"),o.current?.onConfirmed?.(m);else {let h=new Error("Transaction failed on-chain");a(m,"failed"),o.current?.onFailed?.(m,h);}}).catch(g=>{let h=g instanceof Error?g:new Error(String(g));a(m,"failed"),o.current?.onFailed?.(m,h);});},[t,a]),l=react.useCallback(u=>{r(m=>{if(!m.has(u))return m;let p=new Map(m);return p.delete(u),p});},[]),i=react.useCallback(()=>{r(u=>u.size===0?u:new Map);},[]);return react.useMemo(()=>({track:n,clear:l,clearAll:i,transactions:s}),[n,l,i,s])}var Jn=new Set([types.Chain.SOLANA,types.Chain.SOLANA_TESTNET,types.Chain.SOLANA_DEVNET]);function es(e){return Jn.has(e)?types.ChainNamespace.SOLANA:types.ChainNamespace.EVM}var ts=1e4,ns=15e3;function ss(e,t){if(e.length===0)return;let r=e[e.length-1].outputAmount;if(!r||r==="0")return "0";let o=r.padStart(t+1,"0"),a=o.slice(0,o.length-t)||"0",l=o.slice(o.length-t).replace(/0+$/,"");return l?`${a}.${l}`:a}function De(e){let{chain:t}=e,s=walletConnector.useWallets(),r=es(t),o=react.useMemo(()=>s.find(S=>S.chainNamespace===r&&S.isConnected),[s,r]),a=o?.address??"",[n,l]=react.useState(e.from??""),[i,u]=react.useState(e.to??""),m=react.useRef(e.from),p=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!==p.current&&(p.current=e.to,e.to&&u(e.to));},[e.to]);let g=react.useMemo(()=>[n,i].filter(Boolean),[n,i]),h=react$1.useTokensQuery({chain:t,addresses:g},{enabled:g.length>0,refetchInterval:ts}),d=react.useMemo(()=>h.data?.find(S=>S.address===n)??null,[h.data,n]),c=react.useMemo(()=>h.data?.find(S=>S.address===i)??null,[h.data,i]),x=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:a,tokenAddresses:g},{enabled:!!a&&g.length>0,refetchInterval:ns}),v=react.useMemo(()=>x.data?.find(S=>S.address===n)??null,[x.data,n]),P=react.useMemo(()=>x.data?.find(S=>S.address===i)??null,[x.data,i]),[f,I]=react.useState(void 0),U=react.useMemo(()=>{if(!f||d?.decimals==null)return;let S=f.split("."),k=S[0]??"0",Me=(S[1]??"").slice(0,d.decimals).padEnd(d.decimals,"0");return (k+Me).replace(/^0+/,"")||"0"},[f,d?.decimals]),$=react.useMemo(()=>{if(!f||!d?.marketData?.priceInUsd)return;let S=Number(d.marketData.priceInUsd),k=Number(f)*S;return Number.isFinite(k)?k.toString():void 0},[f,d?.marketData?.priceInUsd]),H=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let k=S/2,ve=d?.decimals??9;I(k.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:ve}));},[v,d?.decimals]),z=react.useCallback(()=>{if(!v)return;let S=Number(v.amount);if(!Number.isFinite(S)||S<=0)return;let k=d?.decimals??9;I(S.toLocaleString("en-US",{useGrouping:false,maximumFractionDigits:k}));},[v,d?.decimals]),E=react.useMemo(()=>({chain:t,userAddress:a||void 0,input:n||void 0,output:i||void 0,mode:types.SwapMode.EXACT_IN,amount:U}),[t,a,n,i,U]),Z=react.useRef(false),{route:F,isRouting:Y,error:J}=Tt(E,{paused:Z.current}),Q=react.useMemo(()=>F&&c?ss(F.plans,c.decimals):void 0,[F,c]),re=react.useMemo(()=>{if(!Q||!c?.marketData?.priceInUsd)return;let S=Number(c.marketData.priceInUsd),k=Number(Q)*S;return Number.isFinite(k)?k.toString():void 0},[Q,c?.marketData?.priceInUsd]),{swap:w,isSwapping:R}=ne();Z.current=R;let W=react.useRef(e.onComplete);W.current=e.onComplete;let{track:ae,transactions:ee}=Nt({onConfirmed:S=>{W.current?.({success:true,txHash:S});},onFailed:S=>{W.current?.({success:false,txHash:S});}}),oe=react.useMemo(()=>{if(ee.size===0)return "idle";let S=Array.from(ee.values());return S[S.length-1].status},[ee]),te=react.useCallback(async()=>{if(!(!o||!F||!n||!i||!U))try{let S=await w({chain:t,wallet:o,input:n,output:i,amount:U,mode:types.SwapMode.EXACT_IN});ae(t,S.txHash);}catch{}},[o,F,t,n,i,U,w,ae]),ie=h.isPending||x.isPending;return react.useMemo(()=>({fromTokenAddress:n,toTokenAddress:i,setFromTokenAddress:l,setToTokenAddress:u,fromToken:d,toToken:c,fromBalance:v,toBalance:P,amount:f,setAmount:I,setHalfAmount:H,setMaxAmount:z,amountInDecimals:U,amountInUsd:$,outputAmount:Q,outputAmountInUsd:re,route:F,isRouting:Y,routeError:J,swap:te,isSwapping:R,txStatus:oe,isLoading:ie}),[n,i,d,c,v,P,f,H,z,U,$,Q,re,F,Y,J,te,R,oe,ie])}function Oe({isOpen:e,onOpenChange:t,fromToken:s,toToken:r,fromBalance:o,inputAmount:a,inputAmountInUsd:n,outputAmount:l,outputAmountInUsd:i,route:u,isRouting:m,routeError:p,onConfirm:g,isSwapping:h}){let{t:d}=i18n.useTranslation(),[c,x]=react.useState(false),v=react.useCallback(()=>x(f=>!f),[]),P=react.useMemo(()=>u?u.plans.map((f,I)=>({key:`plan-${I}`,name:f.name,input:f.input,inputAmount:f.inputAmount,output:f.output,outputAmount:f.outputAmount,feeQuote:f.feeQuote,feeAmount:f.feeAmount})):[],[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:d("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:d("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"}),o&&jsxRuntime.jsxs("div",{className:"text-neutral flex items-center gap-1 text-[10px]",children:[jsxRuntime.jsx(xs,{}),jsxRuntime.jsxs("span",{children:[Le(o.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:Le(a)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(n)]})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-5",children:[jsxRuntime.jsx("div",{className:"text-neutral flex items-center justify-between text-xs font-medium",children:d("trade.swap.estimatedReceive")}),jsxRuntime.jsxs("div",{className:"bg-content3 mt-3 flex w-full items-center gap-3 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex flex-1 items-center gap-3",children:[r?.image&&jsxRuntime.jsx(ui.Avatar,{size:"sm",src:r.image,name:r.symbol,className:"h-6 w-6"}),jsxRuntime.jsxs("div",{className:"flex flex-col items-start justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:r?.symbol??"\u2014"}),jsxRuntime.jsx("div",{className:"text-neutral text-[10px]",children:Te(r?.address)})]})]}),jsxRuntime.jsxs("div",{className:"flex-0 flex flex-col items-end justify-center gap-0.5",children:[jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:Le(l)}),jsxRuntime.jsxs("div",{className:"text-neutral text-[10px]",children:["$",Mt(i)]})]})]})]}),c&&P.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:d("trade.swap.routeDetails")}),jsxRuntime.jsx("div",{className:"mt-3 flex flex-col gap-3",children:P.map(f=>jsxRuntime.jsxs("div",{className:"bg-content3 flex w-full flex-col items-center gap-2 rounded-lg px-4 py-3",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.dex")}),jsxRuntime.jsx("div",{className:"text-foreground text-xs",children:f.name})]}),jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.swap")}),jsxRuntime.jsxs("div",{className:"text-foreground flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:[_e(f.inputAmount)," ",Te(f.input)]}),jsxRuntime.jsx(ui.TradeIcon,{width:12,height:12,className:"text-foreground"}),jsxRuntime.jsxs("span",{children:[_e(f.outputAmount)," ",Te(f.output)]})]})]}),f.feeAmount&&jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxRuntime.jsx("div",{className:"text-neutral text-xs",children:d("trade.swap.fee")}),jsxRuntime.jsxs("div",{className:"text-foreground text-xs",children:[_e(f.feeAmount)," ",Te(f.feeQuote)]})]})]},f.key))})]}),P.length>0&&jsxRuntime.jsx("div",{className:"flex justify-center",children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"text-neutral flex bg-transparent text-xs",endContent:c?jsxRuntime.jsx(ui.ChevronUpIcon,{width:12,height:12}):jsxRuntime.jsx(ui.ChevronDownIcon,{width:12,height:12}),disableRipple:true,onPress:v,children:d(c?"trade.swap.showLess":"trade.swap.showMore")})})]})}),jsxRuntime.jsx(ui.ModalFooter,{children:jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"flex rounded-lg",disableRipple:true,isDisabled:!u||!!p,isLoading:!u&&m||h,onPress:g,children:d("common.confirm")})})]})})}function xs(){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 Le(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 _e(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 Te(e){return e?e.length<=10?e:`${e.slice(0,4)}...${e.slice(-4)}`:"\u2014"}function Ve({fromToken:e,toToken:t,fromBalance:s,toBalance:r,amount:o,amountInUsd:a,onAmountChange:n,onHalfAmount:l,onMaxAmount:i,outputAmount:u,outputAmountInUsd:m,onFromTokenSelect:p,onToTokenSelect:g,route:h,isRouting:d,routeError:c,onPreview:x,isSwapping:v,className:P}){let{t:f}=i18n.useTranslation();return jsxRuntime.jsxs("div",{className:ui.cn("px-4 pb-4 lg:pb-8",P),children:[jsxRuntime.jsxs("div",{className:"space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.from")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value:o??"",onChange:I=>n(I.target.value||void 0),placeholder:"0",classNames:{inputWrapper:ui.cn("h-10 p-0 bg-transparent","data-[hover=true]:bg-transparent group-data-[focus=true]:bg-transparent","group-data-[focus-visible=true]:ring-offset-transparent group-data-[focus-visible=true]:ring-transparent"),input:ui.cn("w-full h-full caret-primary text-3xl font-medium","placeholder:text-placeholder placeholder:text-3xl placeholder:font-medium","scrollbar-hide overflow-hidden text-ellipsis whitespace-nowrap")}})}),jsxRuntime.jsx("div",{className:"flex-0 flex h-full items-center justify-center",children:jsxRuntime.jsx(ui.Button,{className:ui.cn("flex min-w-0 h-8 min-h-8 pl-3 pr-2 bg-content3 rounded-full",e?"text-foreground":"text-neutral"),disableRipple:true,startContent:e?.image?jsxRuntime.jsx(ui.Avatar,{size:"sm",src:e.image,name:e.symbol,className:"h-6 w-6"}):null,endContent:jsxRuntime.jsx(ui.ChevronDownIcon,{width:16,height:16,className:"text-neutral"}),onPress:()=>p(""),children:e?e.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Dt(a)]}),s&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(kt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Lt(s.amount)," ",s.symbol]}),l&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:l,children:f("trade.swap.half")}),i&&jsxRuntime.jsx("span",{className:"text-primary cursor-pointer",onClick:i,children:f("common.max")})]})]}),c&&jsxRuntime.jsx("p",{className:"mt-1 break-words text-xs text-danger-500",children:c.message})]})]}),jsxRuntime.jsxs("div",{className:"mt-4 space-y-3",children:[jsxRuntime.jsx("p",{className:"text-neutral text-sm font-medium",children:f("trade.swap.to")}),jsxRuntime.jsxs("div",{className:"bg-content1 flex flex-col rounded-lg px-3.5 pb-2.5 pt-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"flex-1",children:jsxRuntime.jsx(ui.Input,{type:"number",value: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:()=>g(""),children:t?t.symbol:f("trade.swap.selectToken")})})]}),jsxRuntime.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[jsxRuntime.jsxs("div",{className:"text-neutral flex-1 text-xs",children:["\u2248 $",Dt(m)]}),r&&jsxRuntime.jsxs("div",{className:"flex-0 flex items-center gap-2 pr-3 text-xs",children:[jsxRuntime.jsx(kt,{}),jsxRuntime.jsxs("span",{className:"text-neutral",children:[Lt(r.amount)," ",r.symbol]})]})]})]})]}),jsxRuntime.jsx(ui.Button,{fullWidth:true,color:"primary",className:"mt-8 flex rounded-lg",disableRipple:true,isDisabled:!h,isLoading:!h&&d,onPress:x,children:f(v?"trade.swap.swapping":d?"trade.swap.findingRoute":"trade.swap.swap")})]})}function kt(){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 Dt(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 Lt(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 Ss({chain:e,from:t,to:s,onComplete:r,className:o}){let a=De({chain:e,from:t,to:s,onComplete:r}),{isOpen:n,onOpen:l,onOpenChange:i,onClose:u}=ui.useDisclosure(),m=react.useCallback(async()=>{await a.swap(),u();},[a,u]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(Ve,{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:o}),jsxRuntime.jsx(Oe,{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})]})}function Wt(e){let t=V(e),s=utils$1.getNativeToken(e)?.symbol??"ETH";return {buy:{customAmounts:yt(s),presets:[{...t},{...t},{...t}]},sell:{customPercentages:[...bt],presets:[{...t},{...t},{...t}]}}}var Ns=Wt("900900900");function Vt(e){return `liberfi.instant-trade.settings.${e}`}function Cs(e,t){try{let s=localStorage.getItem(Vt(String(e)));if(s)return JSON.parse(s)}catch{}return t}function As(e,t){try{localStorage.setItem(Vt(e),JSON.stringify(t));}catch{}}var Kt=react.createContext(null);function $e(){let e=react.useContext(Kt);if(!e)throw new Error("useInstantTrade must be used within an InstantTradeProvider");return e}function He({chain:e,tokenAddress:t,settings:s,onSettingsChange:r,children:o}){let a=react.useMemo(()=>utils$1.getNativeToken(e),[e]),n=s!==void 0,l=react.useMemo(()=>Wt(e),[e]),[i,u]=react.useState(()=>n?l:Cs(e,l)),m=n?s:i,p=react.useCallback(E=>{n?r?.(E):(u(E),As(String(e),E));},[n,r,e]),g=react.useCallback(E=>p({...m,buy:E}),[m,p]),h=react.useCallback(E=>p({...m,sell:E}),[m,p]),[d,c]=react.useState("buy"),[x,v]=react.useState(),[P,f]=react.useState(0),[I,U]=react.useState(0),$=react.useMemo(()=>V(e),[e]),H=react.useMemo(()=>{let E=d==="buy"?P:I;return (d==="buy"?m.buy.presets:m.sell.presets)[E]??$},[d,P,I,m,$]),z=react.useMemo(()=>({chain:e,tokenAddress:t,nativeToken:a,direction:d,setDirection:c,amount:x,setAmount:v,buyPreset:P,setBuyPreset:f,sellPreset:I,setSellPreset:U,settings:m,updateBuySettings:g,updateSellSettings:h,currentPresetValues:H}),[e,t,a,d,x,P,I,m,g,h,H]);return jsxRuntime.jsx(Kt.Provider,{value:z,children:o})}var Ws=15e3,Vs=1e4,Ks=1e4;function ze(e){let{chain:t,tokenAddress:s,onSwapSubmitted:r,onSwapError:o}=e,{t:a}=i18n.useTranslation(),n=$e(),l=react.useMemo(()=>utils$1.getNativeToken(t),[t]),i=react.useMemo(()=>utils$1.getWrappedToken(t),[t]),u=walletConnector.useWallets(),m=utils$1.chainToNamespace(t),p=react.useMemo(()=>u.find(w=>w.chainNamespace===m&&w.isConnected),[u,m]),g=p?.address??"",h=react.useMemo(()=>{let w=[s];return l&&w.push(l.address),i&&w.push(i.address),w.filter(Boolean)},[s,l,i]),d=react$1.useTokensQuery({chain:t,addresses:h},{enabled:h.length>0,refetchInterval:Vs}),c=react.useMemo(()=>d.data?.find(w=>w.address===s)??null,[d.data,s]),x=react$1.useWalletPortfoliosByTokensQuery({chain:t,address:g,tokenAddresses:h},{enabled:!!g&&h.length>0,refetchInterval:Ws});react$1.useLatestBlockQuery({chain:types.Chain.SOLANA},{enabled:utils$1.isSolanaChain(t),refetchInterval:Ks,staleTime:8e3});let v=l?.address??i?.address??"",P=react.useMemo(()=>x.data?.find(w=>w.address===v)??null,[x.data,v]),f=react.useMemo(()=>x.data?.find(w=>w.address===s)??null,[x.data,s]),[I,U]=react.useState(false),$=react.useRef(null),H=react.useCallback(w=>{let R=$.current;$.current=w,U(W=>R===null||R!==w?true:!W);},[]),z=react.useRef(r);z.current=r;let E=react.useRef(o);E.current=o;let{swap:Z,isSwapping:F}=ne({onSubmitted:w=>z.current?.(w),onError:(w,R)=>E.current?.(w,R)}),Y=react.useCallback(async()=>{if(!n.amount||!p||!s)return;let w=l?.decimals??9,R=i?.address??l?.address??"",W=n.direction==="buy",ae=W?R:s,ee=W?s:R,oe=W?w:c?.decimals??9,te=new pe__default.default(n.amount).shiftedBy(oe).decimalPlaces(0).toString(),ie=n.currentPresetValues,S=V(t),k=ie.slippage??S.slippage??1,ve=ie.antiMev!=="off",Me=utils$1.isSolanaChain(t)?{priorityFee:new pe__default.default(ie.priorityFee??S.priorityFee??0).shiftedBy(w).decimalPlaces(0).toString(),tipFee:new pe__default.default(ie.tipFee??S.tipFee??0).shiftedBy(w).decimalPlaces(0).toString(),isAntiMev:ve}:{};try{await Z({chain:t,wallet:p,input:ae,output:ee,amount:te,slippage:k,...Me}),n.setAmount(void 0);}catch{}},[n,p,s,l,i,c,t,Z]),J=react.useMemo(()=>{let w=a(n.direction==="buy"?"common.buy":"common.sell");if(!n.amount)return w;let R=` (${a("trade.insufficientBalance")})`;if(n.direction==="buy"){let ae=P?.amount;if(ae&&new pe__default.default(ae).lt(n.amount))return `${w}${R}`;let ee=l?.symbol??"",oe=d.data?.find(te=>te.address===v)?.marketData?.priceInUsd;if(oe){let te=utils$1.formatAmountUSD(new pe__default.default(n.amount).times(Number(oe)));return a("trade.submitBuyAmount",{amount:n.amount,symbol:ee,usd:te})}return a("trade.submitBuyAmountNoUsd",{amount:n.amount,symbol:ee})}let W=f?.amount;return W&&new pe__default.default(W).lt(n.amount)?`${w}${R}`:w},[a,n.direction,n.amount,P,f,l,d.data,v]),Q=!n.amount||!p||!s,re=d.isPending||x.isPending;return react.useMemo(()=>({chain:t,tokenAddress:s,nativeToken:l,tokenInfo:c,nativeBalance:P,tokenBalance:f,direction:n.direction,setDirection:n.setDirection,amount:n.amount,setAmount:n.setAmount,buyPreset:n.buyPreset,setBuyPreset:n.setBuyPreset,sellPreset:n.sellPreset,setSellPreset:n.setSellPreset,currentPresetValues:n.currentPresetValues,settings:n.settings,updateBuySettings:n.updateBuySettings,updateSellSettings:n.updateSellSettings,showSettings:I,handlePresetClick:H,swap:Y,isSwapping:F,submitText:J,isDisabled:Q,isLoading:re}),[t,s,l,c,P,f,n,I,H,Y,F,J,Q,re])}function be({value:e,onChange:t,chain:s,disableAnimation:r,className:o}){let a=react.useCallback(i=>t({...e,...i}),[e,t]),n=react.useMemo(()=>le(s),[s]),l=n.feeType==="gasFee"?"gasFee":"priorityFee";return jsxRuntime.jsxs("div",{className:ui.cn("space-y-4",o),children:[jsxRuntime.jsx(Ys,{value:e.slippage,onChange:i=>a({slippage:i})}),jsxRuntime.jsx(Js,{value:e[l],onChange:i=>a({[l]:i}),feeType:n.feeType,symbol:n.feeUnit,decimals:n.feeDecimals}),n.showTipFee&&jsxRuntime.jsx(er,{value:e.tipFee,onChange:i=>a({tipFee:i}),symbol:n.tipFeeUnit,decimals:n.tipFeeDecimals}),n.showAutoFee&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(tr,{value:e.autoFee,onChange:i=>a({autoFee:i}),disableAnimation:r}),e.autoFee&&jsxRuntime.jsx(nr,{value:e.maxAutoFee,onChange:i=>a({maxAutoFee:i}),symbol:n.nativeSymbol})]}),jsxRuntime.jsx(sr,{value:e.antiMev,onChange:i=>a({antiMev:i}),options:n.antiMevOptions,disableAnimation:r}),n.showCustomRPC&&jsxRuntime.jsx(rr,{value:e.customRPC,onChange:i=>a({customRPC:i})})]})}function Ys({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),r=s("trade.preset.slippage");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:r}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:o=>t(isNaN(o)?null:o),hideStepper:true,minValue:0,maxValue:100,step:1,endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:"%"}),"aria-label":r})]})}function Js({value:e,onChange:t,feeType:s,symbol:r,decimals:o}){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:o},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:r}),"aria-label":n})]})}function er({value:e,onChange:t,symbol:s,decimals:r}){let{t:o}=i18n.useTranslation(),a=o("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:o("trade.preset.tipFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx(ui.StyledNumberInput,{fullWidth:true,variant:"flat",value:e===null?void 0:e,onValueChange:n=>t(isNaN(n)?null:n),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:r},endContent:jsxRuntime.jsx("span",{className:"text-sm text-neutral",children:s}),"aria-label":a})]})}function tr({value:e,onChange:t,disableAnimation:s}){let{t:r}=i18n.useTranslation(),o=r("trade.preset.autoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-neutral flex items-center gap-1",children:[o,jsxRuntime.jsx(ui.StyledTooltip,{content:r("trade.preset.autoFee.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledSwitch,{isSelected:e,onValueChange:t,color:"primary","aria-label":o,disableAnimation:s})})]})}function nr({value:e,onChange:t,symbol:s}){let{t:r}=i18n.useTranslation(),o=r("trade.preset.maxAutoFee");return jsxRuntime.jsxs("div",{className:"w-full grid grid-cols-2 gap-2 items-center",children:[jsxRuntime.jsx("div",{className:"text-sm text-neutral",children:o}),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":o})]})}function sr({value:e,onChange:t,options:s,disableAnimation:r}){let{t:o}=i18n.useTranslation(),a=o("trade.preset.antiMev"),n=react.useMemo(()=>({off:ui.ShieldOffIcon,reduced:ui.ShieldIcon,secure:ui.ShieldPlusIcon}),[]),l=react.useMemo(()=>({off:{title:o("trade.preset.antiMev.off"),desc:o("trade.preset.antiMev.off.desc")},reduced:{title:o("trade.preset.antiMev.reduced"),desc:o("trade.preset.antiMev.reduced.desc")},secure:{title:o("trade.preset.antiMev.secure"),desc:o("trade.preset.antiMev.secure.desc")}}),[o]);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:o("trade.preset.antiMev.tooltip"),children:jsxRuntime.jsx(ui.Button,{isIconOnly:true,className:"bg-transparent min-w-0 w-4 min-h-0 h-4 p-0",disableRipple:true,children:jsxRuntime.jsx(ui.InfoIcon,{width:13,height:13,className:"text-neutral"})})})]}),jsxRuntime.jsx("div",{className:"flex justify-end",children:jsxRuntime.jsx(ui.StyledBorderedTabs,{color:"primary",radius:"lg",classNames:{tabList:"gap-0",tab:"w-8 min-w-0 px-0"},selectedKey:e,onSelectionChange:t,disableAnimation:r,"aria-label":a,children:s.map(i=>{let u=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(u,{width:18,height:18})})})},i)})})})]})}function rr({value:e,onChange:t}){let{t:s}=i18n.useTranslation(),r=s("trade.preset.customRpc");return jsxRuntime.jsxs("div",{className:"w-full flex gap-4 items-center",children:[jsxRuntime.jsx("div",{className:"flex-none text-sm text-neutral",children:r}),jsxRuntime.jsx("div",{className:"flex-auto",children:jsxRuntime.jsx(ui.StyledInput,{fullWidth:true,variant:"flat",value:e??"",onValueChange:o=>t(o||null),placeholder:"https://...","aria-label":r})})]})}function Xe({chain:e,direction:t,onDirectionChange:s,amount:r,onAmountChange:o,customAmounts:a,customPercentages:n,onQuickAmountClick:l,onQuickPercentageClick:i,onCustomAmountsEdit:u,onCustomPercentagesEdit:m,tokenSymbol:p,nativeBalance:g,tokenBalance:h,amountConversion:d,preset:c,onPresetChange:x,presetValues:v,onPresetSettingsChange:P,showSettings:f,onPresetClick:I,submitText:U,isDisabled:$,isLoading:H,onSubmit:z,className:E,headerExtra:Z}){let{t:F}=i18n.useTranslation(),Y=react.useMemo(()=>utils$1.getNativeToken(e),[e]),J=Y?.symbol,Q=Y?.decimals??9;return jsxRuntime.jsxs("div",{className:ui.cn("flex-none sm:px-3 py-3 bg-content1 rounded-lg",E),children:[jsxRuntime.jsxs(ui.Tabs,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",selectedKey:t,onSelectionChange:s,classNames:{tabList:"bg-content2",tab:ui.cn("h-6",t==="buy"?"data-[selected=true]:bg-primary":"data-[selected=true]:bg-secondary"),cursor:t==="buy"?"bg-primary":"bg-secondary"},disableAnimation:true,children:[jsxRuntime.jsx(ui.Tab,{title:F("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:F("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:F("trade.market")},"market")}),Z]}),jsxRuntime.jsx("div",{className:"mt-2.5",children:t==="buy"?jsxRuntime.jsx(xr,{amount:r,onAmountChange:o,customAmounts:a,onQuickAmountClick:l,onCustomAmountsEdit:u,nativeSymbol:J,nativeDecimals:Q,amountLabel:F("trade.amount")}):jsxRuntime.jsx(hr,{amount:r,onAmountChange:o,customPercentages:n,onQuickPercentageClick:i,onCustomPercentagesEdit:m,tokenSymbol:p,amountLabel:F("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:F("trade.balance")}),jsxRuntime.jsx("span",{children:t==="buy"?g?`${g} ${J??""}`:"--":h?`${h} ${p??""}`:"--"})]}),d&&jsxRuntime.jsx("div",{className:"text-xs text-neutral",children:d})]}),jsxRuntime.jsx("div",{className:"mt-4",children:jsxRuntime.jsx(yr,{values:v,chain:e})}),jsxRuntime.jsx("div",{className:"mt-2",children:jsxRuntime.jsxs(ui.Tabs,{variant:"bordered",size:"sm",fullWidth:true,classNames:{tabList:"border-content3 border-1 gap-0 p-0.5",tab:"min-h-0 h-6 px-2 py-1 text-xs data-[selected=true]:bg-content3",tabContent:"text-neutral"},selectedKey:`${c}`,onSelectionChange:re=>x(Number(re)),disableAnimation:true,"aria-label":F("trade.preset.presets"),children:[jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:1}),onClick:()=>I(0)},0),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:2}),onClick:()=>I(1)},1),jsxRuntime.jsx(ui.Tab,{title:F("trade.preset.label",{n:3}),onClick:()=>I(2)},2)]})}),f&&jsxRuntime.jsx("div",{className:"mt-2.5",children:jsxRuntime.jsx(be,{value:v,onChange:P,chain:e})}),jsxRuntime.jsx(ui.Button,{fullWidth:true,size:"sm",color:t==="buy"?"primary":"secondary",className:"mt-2 rounded-lg",disableRipple:true,isDisabled:$,isLoading:H,onPress:z,children:U})]})}function xr({amount:e,onAmountChange:t,customAmounts:s,onQuickAmountClick:r,onCustomAmountsEdit:o,nativeSymbol:a,nativeDecimals:n,amountLabel:l}){let i=react.useCallback(u=>{typeof u=="number"&&t(isNaN(u)?void 0:u);},[t]);return jsxRuntime.jsxs("div",{className:"space-y-0.5",children:[jsxRuntime.jsx(ui.NumberInput,{min:0,value:e,onChange: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(qt,{values:s,onSelect:r,onEdit:o})]})}function hr({amount:e,onAmountChange:t,customPercentages:s,onQuickPercentageClick:r,onCustomPercentagesEdit:o,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(qt,{values:s,onSelect:r,onEdit:o,suffix:"%"})]})}function qt({values:e,onSelect:t,onEdit:s,suffix:r}){let[o,a]=react.useState(false),[n,l]=react.useState([]),i=react.useCallback(()=>{l([...e]),a(true);},[e]),u=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,p)=>jsxRuntime.jsx("div",{className:ui.cn("h-6 bg-content2 flex items-center justify-center",p===0&&"rounded-bl-lg"),children:o?jsxRuntime.jsx(ui.NumberInput,{fullWidth:true,value:n[p]===null||n[p]===void 0?void 0:n[p],onChange:g=>{if(typeof g=="number"){let h=isNaN(g)?null:g;l(d=>{let c=[...d];return c[p]=h,c});}},min:0,hideStepper:true,classNames:{inputWrapper:ui.cn("p-0 h-6 min-h-0 rounded-none flex shadow-none","bg-content2 data-[hover=true]:bg-content3 group-data-[focus=true]:bg-content3",p===0&&"rounded-bl-lg"),innerWrapper:"pb-0",input:"text-xs text-center"}}):jsxRuntime.jsx(ui.Button,{className:"min-w-0 w-full min-h-0 h-full p-0 bg-transparent text-xs",size:"sm",disableRipple:true,onPress:()=>e[p]!=null&&t(e[p]),endContent:r?jsxRuntime.jsx("span",{className:"text-xs text-neutral",children:r}):null,children:e[p]??""})},p))}),jsxRuntime.jsx("div",{className:"flex-none bg-content2 rounded-br-lg overflow-hidden",children:o?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:i,children:jsxRuntime.jsx(ui.EditIcon,{width:12,height:12})})})]})}function yr({values:e,chain:t}){let{t:s}=i18n.useTranslation(),r=react.useMemo(()=>le(t),[t]),o=e.antiMev&&e.antiMev!=="off"?e.antiMev:"off";return jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.slippage"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.SlippageIcon,{width:14,height:14}),children:utils$1.formatPercent((e.slippage??0)/100)})}),jsxRuntime.jsx(ui.Tooltip,{content:s(`trade.preset.${r.feeType}`),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.ZapFastIcon,{width:14,height:14}),children:utils$1.formatPrice(e.priorityFee??0)})}),r.showTipFee&&jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.tipFee"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsx(ui.CoinsIcon,{width:14,height:14}),children:utils$1.formatPrice(e.tipFee??0)})}),jsxRuntime.jsx(ui.Tooltip,{content:s("trade.preset.antiMev"),classNames:{content:"text-xs text-neutral py-2 px-4 max-w-xs"},children:jsxRuntime.jsx(ui.Button,{size:"sm",className:"bg-transparent p-0 h-5 min-h-0 w-auto min-w-0 gap-0.5 text-xs text-neutral",disableRipple:true,startContent:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[o==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:14,height:14,className:"text-neutral"}),o==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:14,height:14,className:"text-neutral"}),o==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:14,height:14,className:"text-neutral"})]}),children:s(`trade.preset.antiMev.${o}`)})})]})}function vr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,settings:o,onSettingsChange:a,headerExtra:n,className:l}){return jsxRuntime.jsx(He,{chain:e,tokenAddress:t,settings:o,onSettingsChange:a,children:jsxRuntime.jsx(Pr,{chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:n,className:l})})}function Pr({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r,headerExtra:o,className:a}){let n=ze({chain:e,tokenAddress:t,onSwapSubmitted:s,onSwapError:r}),l=react.useCallback(d=>n.setAmount(d),[n]),i=react.useCallback(d=>{let c=n.tokenBalance?.amount;if(!c)return;let x=new pe__default.default(c).times(d).div(100).toNumber();n.setAmount(x);},[n]),u=react.useCallback(d=>{n.updateBuySettings({...n.settings.buy,customAmounts:d});},[n]),m=react.useCallback(d=>{n.updateSellSettings({...n.settings.sell,customPercentages:d});},[n]),p=react.useCallback(d=>{let c=n.direction==="buy",x=c?n.buyPreset:n.sellPreset;if(c){let v=n.settings.buy,P=[...v.presets];P[x]=d,n.updateBuySettings({...v,presets:P});}else {let v=n.settings.sell,P=[...v.presets];P[x]=d,n.updateSellSettings({...v,presets:P});}},[n]),g=react.useCallback(d=>{n.direction==="buy"?n.setBuyPreset(d):n.setSellPreset(d);},[n]),h=n.direction==="buy"?n.buyPreset:n.sellPreset;return jsxRuntime.jsx(Xe,{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:u,onCustomPercentagesEdit:m,tokenSymbol:n.tokenInfo?.symbol,nativeBalance:n.nativeBalance?.amount,tokenBalance:n.tokenBalance?.amount,amountConversion:void 0,preset:h,onPresetChange:g,presetValues:n.currentPresetValues,onPresetSettingsChange:p,showSettings:n.showSettings,onPresetClick:n.handlePresetClick,submitText:n.submitText,isDisabled:n.isDisabled,isLoading:n.isSwapping,onSubmit:n.swap,className:a,headerExtra:o})}function Je(e){let{id:t,chain:s,token:r,storageKeyPrefix:o,onAmountChange:a,onPresetChange:n,onPresetClick:l}=e,[i,u]=jotai.useAtom(j(G(t,s,r.address,o))),m=jotai.useAtomValue(L(D(s,"buy",0,o))),p=jotai.useAtomValue(L(D(s,"buy",1,o))),g=jotai.useAtomValue(L(D(s,"buy",2,o))),h=react.useMemo(()=>[m,p,g],[m,p,g]),d=react.useCallback(x=>{u(v=>({...v,amount:x})),a?.(x);},[u,a]),c=react.useCallback(x=>{u(v=>({...v,preset:x})),n?.(x);},[u,n]);return {token:r,chain:s,amount:i.amount,handleAmountChange:d,preset:i.preset,handlePresetChange:c,onPresetClick:l,presetValues:h}}function et({token:e,chain:t,amount:s,onAmountChange:r,preset:o=0,onPresetChange:a,onPresetClick:n,presetValues:l,radius:i="full",size:u="md",className:m}){let{t:p}=i18n.useTranslation(),{isMobile:g}=ui.useScreen(),h=react.useRef(null),d=react.useMemo(()=>V(t),[t]),[c,x]=react.useState(null),v=react.useCallback(P=>{a?.(Number(P));},[a]);return jsxRuntime.jsxs("div",{ref:h,className:ui.cn("relative flex items-center",i==="full"&&"rounded-full",i==="lg"&&"rounded-lg",i==="md"&&"rounded-md",i==="sm"&&"rounded-sm",u==="sm"&&"h-8 pr-2",u==="md"&&"h-10 pr-2.5",u==="lg"&&"h-12 pr-3",m),style:{border:"1px solid rgba(63,63,70,0.5)",background:"rgba(39,39,42,0.6)"},children:[jsxRuntime.jsx(ui.StyledNumberInput,{className:"flex-auto min-w-0 h-full",fullWidth:true,variant:"flat",value:s,onValueChange:P=>r(isNaN(P)?void 0:P),hideStepper:true,minValue:0,formatOptions:{maximumFractionDigits:e.decimals},size:u,startContent:jsxRuntime.jsx(ui.LightningIcon,{width:u==="sm"?12:u==="md"?16:20,height:u==="sm"?12:u==="md"?16:20,className:"text-primary flex-none"}),endContent:jsxRuntime.jsx(ui.TokenIcon,{symbol:e.symbol,size:u==="sm"?16:u==="md"?20:28,className:"flex-none"}),placeholder:"0.0","aria-label":p("trade.instantTradeAmount"),classNames:{base:"h-full",mainWrapper:"h-full",inputWrapper:"!bg-transparent !shadow-none !border-0 !rounded-none h-full !min-h-0"}},`${t}-${e.address}`),jsxRuntime.jsx("div",{className:"w-px self-stretch my-1.5 mx-1.5 flex-none",style:{background:"rgba(63,63,70,0.5)"}}),jsxRuntime.jsx(ui.StyledLightTabs,{color:"primary",size:u,selectedKey:String(o),onSelectionChange:v,classNames:{base:"flex-none h-full",tabList:ui.cn("bg-transparent h-full",u==="sm"&&"p-1 gap-1",u==="md"&&"p-1 gap-0",u==="lg"&&"p-1.5 gap-0"),tab:ui.cn("h-full",u==="sm"&&"text-xs px-1",u==="md"&&"text-sm px-2.5",u==="lg"&&"text-sm px-3"),cursor:"rounded-sm"},children:Array.from({length:3}).map((P,f)=>jsxRuntime.jsx(ui.Tab,{title:g?jsxRuntime.jsx("span",{onClick:I=>{o===f&&(I.stopPropagation(),x(U=>U===f?null:f));},children:p("trade.preset.short",{n:f+1})}):jsxRuntime.jsx(ui.StyledTooltip,{content:jsxRuntime.jsx(nn,{label:p("trade.preset.short",{n:f+1}),values:l?.[f]??d,chain:t}),classNames:{content:"!p-0 !rounded-[14px] !border !border-[rgba(39,39,42,1)] !bg-[rgba(24,24,27,1)] !shadow-[0_25px_50px_-12px_rgba(0,0,0,0.5)]"},offset:12,children:jsxRuntime.jsx("span",{onClick:()=>o===f&&n?.(f),children:p("trade.preset.short",{n:f+1})})})},String(f)))}),g&&c!==null&&jsxRuntime.jsx(Vr,{label:p("trade.preset.short",{n:c+1}),values:l?.[c]??d,chain:t,onClose:()=>x(null),containerRef:h})]})}function Vr({label:e,values:t,chain:s,onClose:r,containerRef:o}){let a=react.useRef(null);return react.useEffect(()=>{let n=l=>{let i=l.target;a.current&&!a.current.contains(i)&&o.current&&!o.current.contains(i)&&r();};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n);}},[r,o]),jsxRuntime.jsx("div",{ref:a,style:{position:"absolute",top:"100%",right:0,zIndex:50,marginTop:8,borderRadius:14,border:"1px solid rgba(39,39,42,1)",background:"rgba(24,24,27,1)",boxShadow:"0 25px 50px -12px rgba(0,0,0,0.5)",minWidth:200},children:jsxRuntime.jsx(nn,{label:e,values:t,chain:s})})}function nn({label:e,values:t,chain:s}){let{t:r}=i18n.useTranslation(),o=react.useMemo(()=>le(s),[s]),a=t.antiMev&&t.antiMev!=="off"?t.antiMev:"off",n=(t.slippage??0)/100,l=n>=.05;return jsxRuntime.jsxs("div",{className:"flex flex-col py-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-1.5 px-3 pb-2 mb-1",style:{borderBottom:"1px solid rgba(39,39,42,1)"},children:[jsxRuntime.jsx(ui.LightningIcon,{width:12,height:12,className:"text-primary flex-none"}),jsxRuntime.jsx("span",{className:"text-xs font-semibold text-foreground",children:e})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.SlippageIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r("trade.preset.slippage")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium tabular-nums",l?"text-amber-400":"text-foreground"),children:utils$1.formatPercent(n)})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.ZapFastIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r(`trade.preset.${o.feeType}`)})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.priorityFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:o.feeUnit})]})]}),o.showTipFee&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[jsxRuntime.jsx(ui.CoinsIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r("trade.preset.tipFee")})]}),jsxRuntime.jsxs("span",{className:"text-xs font-medium text-foreground tabular-nums",children:[utils$1.formatPrice(t.tipFee??0)," ",jsxRuntime.jsx("span",{className:"text-zinc-500",children:o.tipFeeUnit})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-6 px-3 py-1",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1.5 text-zinc-500 text-xs",children:[a==="off"&&jsxRuntime.jsx(ui.ShieldOffIcon,{width:12,height:12,className:"flex-none"}),a==="reduced"&&jsxRuntime.jsx(ui.ShieldIcon,{width:12,height:12,className:"flex-none"}),a==="secure"&&jsxRuntime.jsx(ui.ShieldPlusIcon,{width:12,height:12,className:"flex-none"}),jsxRuntime.jsx("span",{children:r("trade.preset.antiMev")})]}),jsxRuntime.jsx("span",{className:ui.cn("text-xs font-medium",a==="off"&&"text-zinc-500",a==="reduced"&&"text-amber-400",a==="secure"&&"text-emerald-400"),children:r(`trade.preset.antiMev.${a}`)})]})]})}function Kr({size:e,radius:t,className:s,...r}){let{token:o,chain:a,amount:n,handleAmountChange:l,preset:i,handlePresetChange:u,onPresetClick:m,presetValues:p}=Je(r);return jsxRuntime.jsx(et,{token:o,chain:a,amount:n,onAmountChange:l,preset:i,onPresetChange:u,onPresetClick:m,presetValues:p,size:e,radius:t,className:s})}function tt(e){let{chain:t,presetIndex:s=0,defaultDirection:r="buy",storageKeyPrefix:o,onChange:a}=e,[n,l]=react.useState(r),[i,u]=jotai.useAtom(L(D(t,n,s,o))),m=react.useCallback(p=>{u(p),a?.(n,p);},[u,a,n]);return {direction:n,setDirection:l,value:i,handleChange:m}}function st({disableAnimation:e,className:t,...s}){let{t:r}=i18n.useTranslation(),{direction:o,setDirection:a,value:n,handleChange:l}=tt(s);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",t),children:[jsxRuntime.jsxs(ui.StyledSolidTabs,{radius:"lg",color:"default",fullWidth:true,selectedKey:o,onSelectionChange:i=>a(i),"aria-label":"Buy / Sell",children:[jsxRuntime.jsx(ui.Tab,{title:r("common.buy")},"buy"),jsxRuntime.jsx(ui.Tab,{title:r("common.sell")},"sell")]}),jsxRuntime.jsx(be,{value:n,onChange:l,chain:s.chain,disableAnimation:e})]})}var Yr=3;function rt(e){let{defaultPresetIndex:t=0,onChange:s}=e,[r,o]=react.useState(t),a=react.useCallback((n,l)=>{s?.(r,n,l);},[s,r]);return {presetCount:Yr,presetIndex:r,setPresetIndex:o,handlePresetChange:a}}function ot({defaultDirection:e,disableAnimation:t,className:s,...r}){let{t:o}=i18n.useTranslation(),{presetCount:a,presetIndex:n,setPresetIndex:l,handlePresetChange:i}=rt(r);return jsxRuntime.jsxs("div",{className:ui.cn("space-y-3",s),children:[jsxRuntime.jsx(ui.StyledSolidTabs,{radius:"lg",fullWidth:true,color:"default",selectedKey:String(n),onSelectionChange:u=>l(Number(u)),disableAnimation:t,"aria-label":o("trade.preset.presets"),children:Array.from({length:a},(u,m)=>jsxRuntime.jsx(ui.Tab,{title:o("trade.preset.label",{n:m+1})},String(m)))}),jsxRuntime.jsx(st,{chain:r.chain,presetIndex:n,defaultDirection:e,storageKeyPrefix:r.storageKeyPrefix,onChange:i,disableAnimation:t})]})}var ga="preset";function xa({id:e=ga}){return jsxRuntime.jsx(uiScaffold.AsyncModal,{id:e,children:t=>jsxRuntime.jsx(ha,{...t})})}function ha({params:e={chains:[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE]},isOpen:t,onOpenChange:s}){let{t:r}=i18n.useTranslation(),{chains:o,defaultChain:a,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:u}=e,[m,p]=react.useState(a??o[0]);react.useEffect(()=>{p(a??o[0]);},[a,o]);let g=react.useCallback((h,d,c)=>{u?.(m,h,d,c);},[u,m]);return jsxRuntime.jsx(ui.StyledModal,{isOpen:t,onOpenChange:s,size:"md",children:jsxRuntime.jsxs(ui.ModalContent,{children:[jsxRuntime.jsx(ui.ModalHeader,{children:jsxRuntime.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[jsxRuntime.jsx("span",{className:"flex-auto min-w-0 overflow-hidden text-ellipsis line-clamp-1 whitespace-nowrap",children:r("trade.preset.instantTradeSettings")}),jsxRuntime.jsx(uiChainSelect.ChainSelectMobileUI,{candidates:o,chain:m,onSelectChain:p})]})}),jsxRuntime.jsx(ui.ModalBody,{children:jsxRuntime.jsx(ui.ScrollShadow,{children:jsxRuntime.jsx(ot,{chain:m,defaultDirection:n,defaultPresetIndex:l,storageKeyPrefix:i,onChange:g})})})]})})}function Ee(e,t,s,r,o){let a=V(o),n=new pe__default.default(e).shiftedBy(t.decimals).decimalPlaces(0).toString(),l=new pe__default.default(r.priorityFee??a.priorityFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString(),i=new pe__default.default(r.tipFee??a.tipFee??0).shiftedBy(t.decimals).decimalPlaces(0).toString();return {input:t.address,output:s,amount:n,slippage:r.slippage??a.slippage??1,priorityFee:l,tipFee:i,isAntiMev:r.antiMev!=="off"}}function ut(e){let{id:t,chain:s,token:r,output:o,storageKeyPrefix:a,onSwapSubmitted:n,onSwapError:l}=e,{amount:i,preset:u}=jotai.useAtomValue(j(G(t,s,r.address,a))),m=jotai.useAtomValue(L(D(s,"buy",u,a))),p=walletConnector.useConnectedWallet(s),{swap:g,isSwapping:h}=ne({onSubmitted:n,onError:l}),d=!i||!o,c=walletConnector.useAuthCallback(async()=>{if(!i||!p||!o)return;let x=Ee(i,r,o,m,s);try{await g({...x,chain:s,wallet:p});}catch{}},[p,i,o,s,r,m,g]);return react.useMemo(()=>({amount:i,token:r,isDisabled:d,isSwapping:h,handleSwap:c}),[i,r,d,h,c])}function wa({size:e="sm",radius:t,color:s="primary",className:r,...o}){let{amount:a,token:n,isDisabled:l,isSwapping:i,handleSwap:u}=ut(o);return jsxRuntime.jsx(ui.Button,{fullWidth:true,size:e,radius:t,color:s,className:r,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{}),isDisabled:l,isLoading:i,onPress:u,children:a!=null?`${a} ${n.symbol}`:n.symbol})}var un=react.createContext(null);function Fa({chain:e,onSwapSubmitted:t,onSwapError:s,children:r}){let o=walletConnector.useConnectedWallet(e),{swap:a}=ne({onSubmitted:t,onError:s}),n=react.useRef(o);n.current=o;let l=react.useRef(a);l.current=a;let i=react.useRef(e);i.current=e;let u=react.useCallback(async p=>{let g=n.current;if(g)return l.current({...p,wallet:g,chain:i.current})},[]),m=walletConnector.useAuthCallback(u,[]);return jsxRuntime.jsx(un.Provider,{value:m,children:r})}function pt(){let e=react.useContext(un);if(e===null)throw new Error("useInstantTradeSwap must be used within an InstantTradeSwapProvider");return e}function ct(e){let{id:t,chain:s,token:r,output:o,storageKeyPrefix:a}=e,{amount:n,preset:l}=jotai.useAtomValue(j(G(t,s,r.address,a))),i=jotai.useAtomValue(L(D(s,"buy",l,a))),u=pt(),[m,p]=react.useState(false),g=!n||!o,h=react.useRef(r);h.current=r;let d=react.useRef(i);d.current=i;let c=react.useRef(s);c.current=s;let x=react.useCallback(async()=>{if(!n||!o)return;let v=Ee(n,h.current,o,d.current,c.current);p(true);try{await u(v);}catch{}finally{p(false);}},[n,o,u]);return react.useMemo(()=>({amount:n,token:r,isDisabled:g,isSwapping:m,handleSwap:x}),[n,r,g,m,x])}var _a=react.memo(function({size:t="sm",radius:s,color:r="primary",className:o,...a}){let{amount:n,token:l,isDisabled:i,isSwapping:u,handleSwap:m}=ct(a);return jsxRuntime.jsx(ui.Button,{variant:"solid",fullWidth:true,size:t,radius:s,color:r,className:o,disableRipple:true,startContent:jsxRuntime.jsx(ui.LightningIcon,{className:"flex-none",style:{color:"#c7ff2e"}}),isDisabled:i,isLoading:u,spinner:jsxRuntime.jsx(ui.Spinner,{size:"sm",color:"current"}),onPress:m,style:{background:"rgba(199,255,46,0.08)",border:"1px solid rgba(199,255,46,0.2)",color:"#c7ff2e",fontWeight:600},children:n!=null?`${n} ${l.symbol}`:l.symbol})});
2
+ exports.AmountPresetInputUI=et;exports.AmountPresetInputWidget=Kr;exports.DEFAULT_BSC_TRADE_PRESET=ht;exports.DEFAULT_EVM_TRADE_PRESET=xt;exports.DEFAULT_INSTANT_TRADE_SETTINGS=Ns;exports.DEFAULT_SELL_PERCENTAGES=bt;exports.DEFAULT_SOL_TRADE_PRESET=gt;exports.InstantTradeButtonWidget=wa;exports.InstantTradeListButtonWidget=_a;exports.InstantTradeProvider=He;exports.InstantTradeSwapProvider=Fa;exports.InstantTradeUI=Xe;exports.InstantTradeWidget=vr;exports.MultiPresetFormWidget=ot;exports.PresetFormModal=xa;exports.PresetFormUI=be;exports.PresetFormWidget=st;exports.SwapPreviewModal=Oe;exports.SwapRouteExpiredError=ge;exports.SwapUI=Ve;exports.SwapWidget=Ss;exports.getChainPresetFeatures=le;exports.getDefaultBuyAmounts=yt;exports.getDefaultPresetForChain=V;exports.instantTradeAmountAtomFamily=j;exports.instantTradeAmountKey=G;exports.presetAtomFamily=L;exports.presetKey=D;exports.useAmountPresetInputScript=Je;exports.useInstantTrade=$e;exports.useInstantTradeAmount=Qa;exports.useInstantTradeButtonScript=ut;exports.useInstantTradeListButtonScript=ct;exports.useInstantTradeScript=ze;exports.useInstantTradeSwap=pt;exports.useMultiPresetFormScript=rt;exports.usePresetFormScript=tt;exports.usePresetValues=so;exports.useSwap=ne;exports.useSwapRoutePolling=Tt;exports.useSwapScript=De;exports.useTxConfirmation=Nt;//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map