@funkit/connect 6.14.2 → 6.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/consts/customers.d.ts +0 -1
  3. package/dist/hooks/useCheckoutAccountBalanceTransfer.d.ts +1 -1
  4. package/dist/hooks/useCheckoutDirectExecution.d.ts +2 -1
  5. package/dist/hooks/useIsTokenWhitelisted.d.ts +30 -0
  6. package/dist/index.css +2 -2
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.js +689 -598
  9. package/dist/utils/checkout.d.ts +2 -1
  10. package/dist/utils/flags/config.d.ts +6 -14
  11. package/dist/wallets/walletConnectors/bifrostWallet/bifrostWallet.js +2 -2
  12. package/dist/wallets/walletConnectors/bitgetWallet/bitgetWallet.js +2 -2
  13. package/dist/wallets/walletConnectors/bybitWallet/bybitWallet.js +2 -2
  14. package/dist/wallets/walletConnectors/clvWallet/clvWallet.js +2 -2
  15. package/dist/wallets/walletConnectors/coin98Wallet/coin98Wallet.js +2 -2
  16. package/dist/wallets/walletConnectors/coreWallet/coreWallet.js +2 -2
  17. package/dist/wallets/walletConnectors/foxWallet/foxWallet.js +2 -2
  18. package/dist/wallets/walletConnectors/frontierWallet/frontierWallet.js +2 -2
  19. package/dist/wallets/walletConnectors/gateWallet/gateWallet.js +2 -2
  20. package/dist/wallets/walletConnectors/index.js +60 -60
  21. package/dist/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.js +2 -2
  22. package/dist/wallets/walletConnectors/okxWallet/okxWallet.js +2 -2
  23. package/dist/wallets/walletConnectors/rainbowWallet/rainbowWallet.js +2 -2
  24. package/dist/wallets/walletConnectors/roninWallet/roninWallet.js +2 -2
  25. package/dist/wallets/walletConnectors/safepalWallet/safepalWallet.js +2 -2
  26. package/dist/wallets/walletConnectors/subWallet/subWallet.js +2 -2
  27. package/dist/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.js +2 -2
  28. package/dist/wallets/walletConnectors/trustWallet/trustWallet.js +2 -2
  29. package/dist/wallets/walletConnectors/zerionWallet/zerionWallet.js +2 -2
  30. package/package.json +7 -7
  31. package/dist/hooks/useGooeyFilter.d.ts +0 -21
  32. package/dist/hooks/useIsFunkitCheckoutActivated.d.ts +0 -7
  33. package/dist/hooks/useMountEffect.d.ts +0 -8
  34. package/dist/hooks/usePathMorph.d.ts +0 -16
package/dist/index.js CHANGED
@@ -519,13 +519,13 @@ import PrivyJS, {
519
519
  } from "@privy-io/js-sdk-core";
520
520
  import React227, {
521
521
  createContext as createContext17,
522
- useCallback as useCallback48,
522
+ useCallback as useCallback49,
523
523
  useContext as useContext17,
524
524
  useEffect as useEffect54,
525
- useMemo as useMemo41,
525
+ useMemo as useMemo42,
526
526
  useState as useState71
527
527
  } from "react";
528
- import { useConfig as useConfig6, useConnect as useConnect2, useDisconnect as useDisconnect2 } from "wagmi";
528
+ import { useConfig as useConfig7, useConnect as useConnect2, useDisconnect as useDisconnect2 } from "wagmi";
529
529
 
530
530
  // src/components/ConnectButton/formatAccountName.ts
531
531
  function formatAccountName(accountName, isEmail) {
@@ -825,6 +825,7 @@ function useFunkitConfig() {
825
825
  // src/providers/provideFunkitConnectChains.ts
826
826
  import {
827
827
  BITCOIN_MAINNET_CHAIN_ID,
828
+ ETHEREAL_CHAIN_ID,
828
829
  HYPERCORE_CHAIN_ID,
829
830
  HYPER_EVM_CHAIN_ID,
830
831
  KATANA_CHAIN_ID,
@@ -871,6 +872,10 @@ var ethereumIcon = {
871
872
  iconBackground: "#484c50",
872
873
  iconUrl: "https://sdk-cdn.fun.xyz/images/ethereum.svg"
873
874
  };
875
+ var etherealIcon = {
876
+ iconBackground: "#000000",
877
+ iconUrl: "https://sdk-cdn.fun.xyz/images/ethereal.svg"
878
+ };
874
879
  var hardhatIcon = {
875
880
  iconBackground: "#f9f7ec",
876
881
  iconUrl: "https://sdk-cdn.fun.xyz/images/hardhat.svg"
@@ -955,6 +960,7 @@ var chainMetadataByName = {
955
960
  bscTestnet: { chainId: 97, name: "BSC Testnet", ...bscIcon },
956
961
  cronos: { chainId: 25, name: "Cronos", ...cronosIcon },
957
962
  cronosTestnet: { chainId: 338, name: "Cronos Testnet", ...cronosIcon },
963
+ ethereal: { chainId: ETHEREAL_CHAIN_ID, name: "Ethereal", ...etherealIcon },
958
964
  goerli: { chainId: 5, name: "Goerli", ...ethereumIcon },
959
965
  hardhat: { chainId: 31337, name: "Hardhat", ...hardhatIcon },
960
966
  holesky: { chainId: 17e3, name: "Holesky", ...ethereumIcon },
@@ -1081,13 +1087,13 @@ var useInitialChainId = () => useContext4(FunkitConnectChainContext).initialChai
1081
1087
  // src/providers/ModalContext.tsx
1082
1088
  import React226, {
1083
1089
  createContext as createContext16,
1084
- useCallback as useCallback47,
1090
+ useCallback as useCallback48,
1085
1091
  useContext as useContext16,
1086
1092
  useEffect as useEffect53,
1087
- useMemo as useMemo40,
1093
+ useMemo as useMemo41,
1088
1094
  useState as useState70
1089
1095
  } from "react";
1090
- import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig5 } from "wagmi";
1096
+ import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig6 } from "wagmi";
1091
1097
 
1092
1098
  // src/components/Dialog/Dialog.css.ts
1093
1099
  var DialogAnimationTimeIn = 0.25;
@@ -1173,7 +1179,7 @@ import {
1173
1179
  import { isNotNullish as isNotNullish3 } from "@funkit/utils";
1174
1180
  import React14, {
1175
1181
  createContext as createContext10,
1176
- useCallback as useCallback8,
1182
+ useCallback as useCallback9,
1177
1183
  useContext as useContext10,
1178
1184
  useEffect as useEffect8,
1179
1185
  useRef as useRef2,
@@ -1230,7 +1236,7 @@ import {
1230
1236
  } from "@funkit/core";
1231
1237
  import {
1232
1238
  formatCryptoAndStringify,
1233
- isTokenAddressEquivalent as isTokenAddressEquivalent3,
1239
+ isTokenAddressEquivalent as isTokenAddressEquivalent4,
1234
1240
  round as round2,
1235
1241
  roundUpToXDecimalPlaces
1236
1242
  } from "@funkit/utils";
@@ -2114,10 +2120,10 @@ import {
2114
2120
  initializeCheckout as postApiInitializeCheckout
2115
2121
  } from "@funkit/api-base";
2116
2122
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO3 } from "@funkit/chains";
2117
- import { FlagKey as FlagKey5, isNotNullish as isNotNullish2 } from "@funkit/utils";
2123
+ import { FlagKey as FlagKey6, isNotNullish as isNotNullish2 } from "@funkit/utils";
2118
2124
  import React13, {
2119
2125
  createContext as createContext9,
2120
- useCallback as useCallback7,
2126
+ useCallback as useCallback8,
2121
2127
  useContext as useContext9,
2122
2128
  useEffect as useEffect7,
2123
2129
  useState as useState6
@@ -2128,8 +2134,9 @@ import { v4 as uuid } from "uuid";
2128
2134
  // src/hooks/useCheckoutDirectExecution.ts
2129
2135
  import { DirectExecutionType, getCheckoutQuoteV2 } from "@funkit/api-base";
2130
2136
  import { executeRelayQuote } from "@funkit/fun-relay";
2131
- import { useCallback as useCallback4 } from "react";
2132
- import { useWalletClient } from "wagmi";
2137
+ import { FlagKey as FlagKey4 } from "@funkit/utils";
2138
+ import { useCallback as useCallback5 } from "react";
2139
+ import { useConfig as useConfig2, useWalletClient } from "wagmi";
2133
2140
 
2134
2141
  // src/consts/checkout.ts
2135
2142
  var CHECKOUT_STEP_MESSAGE = {
@@ -2146,48 +2153,10 @@ var WEB3_ACCOUNT_BALANCE_MESSAGE = {
2146
2153
  [2 /* APPROVE_TRANSFER */]: (tokenSymbol) => `Confirm ${tokenSymbol} transfer`
2147
2154
  };
2148
2155
 
2149
- // src/hooks/useRelayBypass.ts
2150
- import { FlagKey as FlagKey3, isTokenAddressEquivalent as isTokenAddressEquivalent2 } from "@funkit/utils";
2156
+ // src/hooks/useIsTokenWhitelisted.ts
2157
+ import { isTokenAddressEquivalent as isTokenAddressEquivalent2 } from "@funkit/utils";
2151
2158
  import { useCallback as useCallback3, useMemo as useMemo7 } from "react";
2152
2159
 
2153
- // src/consts/customers.ts
2154
- import {
2155
- BANKR_API_KEY,
2156
- BASED_API_KEY,
2157
- BSX_API_KEY,
2158
- ETHEREAL_API_KEY,
2159
- HYPERBEAT_API_KEY,
2160
- KALSHI_API_KEY,
2161
- KATANA_API_KEY,
2162
- MONKEY_TILT_API_KEY,
2163
- OSTIUM_API_KEY,
2164
- POLYMARKET_API_KEY
2165
- } from "@funkit/api-base";
2166
- function isPolymarketCustomer(apiKey) {
2167
- return apiKey === POLYMARKET_API_KEY;
2168
- }
2169
- function isOstiumCustomer(apiKey) {
2170
- return apiKey === OSTIUM_API_KEY;
2171
- }
2172
- function isBankrCustomer(apiKey) {
2173
- return apiKey === BANKR_API_KEY;
2174
- }
2175
- function isEtherealCustomer(apiKey) {
2176
- return apiKey === ETHEREAL_API_KEY;
2177
- }
2178
- function isKatanaCustomer(apiKey) {
2179
- return apiKey === KATANA_API_KEY;
2180
- }
2181
- function isHyperbeatCustomer(apiKey) {
2182
- return apiKey === HYPERBEAT_API_KEY;
2183
- }
2184
- function isBasedCustomer(apiKey) {
2185
- return apiKey === BASED_API_KEY;
2186
- }
2187
- function isKalshiCustomer(apiKey) {
2188
- return apiKey === KALSHI_API_KEY;
2189
- }
2190
-
2191
2160
  // src/providers/FunkitFlagsProvider.tsx
2192
2161
  import { datadogLogs as datadogLogs2 } from "@datadog/browser-logs";
2193
2162
  import { useQuery as useQuery2 } from "@tanstack/react-query";
@@ -2200,19 +2169,18 @@ import React12, {
2200
2169
 
2201
2170
  // src/utils/flags/config.ts
2202
2171
  import {
2203
- BANKR_API_KEY as BANKR_API_KEY2,
2204
- BASED_API_KEY as BASED_API_KEY2,
2172
+ BANKR_API_KEY,
2173
+ BASED_API_KEY,
2205
2174
  CAMBRIA_API_KEY,
2206
2175
  DEGEN_API_KEY,
2207
2176
  DEV_API_KEY as DEV_API_KEY2,
2208
- HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
2177
+ HYPERBEAT_API_KEY,
2209
2178
  HYPERDASH_API_KEY,
2210
2179
  HYPERSWAP_API_KEY,
2211
- KALSHI_API_KEY as KALSHI_API_KEY2,
2212
- KATANA_API_KEY as KATANA_API_KEY2,
2213
- MONKEY_TILT_API_KEY as MONKEY_TILT_API_KEY2,
2214
- OSTIUM_API_KEY as OSTIUM_API_KEY2,
2215
- POLYMARKET_API_KEY as POLYMARKET_API_KEY2,
2180
+ KATANA_API_KEY,
2181
+ MONKEY_TILT_API_KEY,
2182
+ OSTIUM_API_KEY,
2183
+ POLYMARKET_API_KEY,
2216
2184
  SUSHI_API_KEY,
2217
2185
  VENTUALS_API_KEY
2218
2186
  } from "@funkit/api-base";
@@ -2274,7 +2242,7 @@ var QR_CODE_EVM = {
2274
2242
  // abstract
2275
2243
  2741: ["USDC.e", "ETH", "WETH", "USDT"],
2276
2244
  // hyperevm. TODO: Consider adding UETH, hbHYPE, stHYPE once their icons are in assets.ts. Also holding back as they are lower mkt cap tokens and would overcrowd our UI.
2277
- 999: ["HYPE", "WETH", "USDT", "UBTC", "USDe"]
2245
+ 999: ["USDC", "HYPE", "WETH", "USDT", "UBTC", "USDe"]
2278
2246
  };
2279
2247
  var QR_CODE_WITH_SOLANA = {
2280
2248
  ...QR_CODE_EVM,
@@ -2301,7 +2269,7 @@ var flagConfig = {
2301
2269
  {
2302
2270
  key: "apiKey",
2303
2271
  type: "isAnyOf",
2304
- values: [DEGEN_API_KEY, BANKR_API_KEY2, BASED_API_KEY2]
2272
+ values: [DEGEN_API_KEY, BANKR_API_KEY, BASED_API_KEY]
2305
2273
  }
2306
2274
  ],
2307
2275
  // Do not block US for Degen, since its still pure slow flow
@@ -2315,10 +2283,10 @@ var flagConfig = {
2315
2283
  {
2316
2284
  key: "apiKey",
2317
2285
  type: "isAnyOf",
2318
- values: [POLYMARKET_API_KEY2, KATANA_API_KEY2, KALSHI_API_KEY2]
2286
+ values: [POLYMARKET_API_KEY, KATANA_API_KEY]
2319
2287
  }
2320
2288
  ],
2321
- // Turn off geoblock for PM / Katana / Kalshi on our end.
2289
+ // Turn off geoblock for PM / Katana on our end.
2322
2290
  // These clients will handle the conditional display of the Deposit button.
2323
2291
  value: ""
2324
2292
  }
@@ -2342,7 +2310,7 @@ var flagConfig = {
2342
2310
  {
2343
2311
  key: "apiKey",
2344
2312
  type: "isAnyOf",
2345
- values: [KATANA_API_KEY2]
2313
+ values: [KATANA_API_KEY]
2346
2314
  }
2347
2315
  ],
2348
2316
  value: true
@@ -2359,18 +2327,17 @@ var flagConfig = {
2359
2327
  key: "apiKey",
2360
2328
  type: "isAnyOf",
2361
2329
  values: [
2362
- POLYMARKET_API_KEY2,
2363
- OSTIUM_API_KEY2,
2364
- BANKR_API_KEY2,
2365
- BASED_API_KEY2,
2366
- KATANA_API_KEY2,
2330
+ POLYMARKET_API_KEY,
2331
+ OSTIUM_API_KEY,
2332
+ BANKR_API_KEY,
2333
+ BASED_API_KEY,
2334
+ KATANA_API_KEY,
2367
2335
  CAMBRIA_API_KEY,
2368
- HYPERBEAT_API_KEY2,
2336
+ HYPERBEAT_API_KEY,
2369
2337
  HYPERSWAP_API_KEY,
2370
2338
  HYPERDASH_API_KEY,
2371
- MONKEY_TILT_API_KEY2,
2372
- VENTUALS_API_KEY,
2373
- KALSHI_API_KEY2
2339
+ MONKEY_TILT_API_KEY,
2340
+ VENTUALS_API_KEY
2374
2341
  ]
2375
2342
  }
2376
2343
  ],
@@ -2415,13 +2382,12 @@ var flagConfig = {
2415
2382
  type: "isAnyOf",
2416
2383
  values: [
2417
2384
  DEV_API_KEY2,
2418
- POLYMARKET_API_KEY2,
2419
- OSTIUM_API_KEY2
2385
+ POLYMARKET_API_KEY,
2386
+ OSTIUM_API_KEY
2420
2387
  // HYPERBEAT_API_KEY,
2421
2388
  // HYPERDASH_API_KEY,
2422
2389
  // BASED_API_KEY,
2423
2390
  // VENTUALS_API_KEY
2424
- // KALSHI_API_KEY
2425
2391
  ]
2426
2392
  }
2427
2393
  ],
@@ -2475,10 +2441,10 @@ var flagConfig = {
2475
2441
  key: "apiKey",
2476
2442
  type: "isAnyOf",
2477
2443
  values: [
2478
- POLYMARKET_API_KEY2,
2479
- OSTIUM_API_KEY2,
2480
- BANKR_API_KEY2,
2481
- KATANA_API_KEY2
2444
+ POLYMARKET_API_KEY,
2445
+ OSTIUM_API_KEY,
2446
+ BANKR_API_KEY,
2447
+ KATANA_API_KEY
2482
2448
  ]
2483
2449
  }
2484
2450
  ],
@@ -2502,7 +2468,7 @@ var flagConfig = {
2502
2468
  {
2503
2469
  key: "apiKey",
2504
2470
  type: "isAnyOf",
2505
- values: [OSTIUM_API_KEY2]
2471
+ values: [OSTIUM_API_KEY]
2506
2472
  }
2507
2473
  ],
2508
2474
  value: arbitrum.id.toString()
@@ -2512,7 +2478,7 @@ var flagConfig = {
2512
2478
  {
2513
2479
  key: "apiKey",
2514
2480
  type: "isAnyOf",
2515
- values: [BANKR_API_KEY2, KALSHI_API_KEY2]
2481
+ values: [BANKR_API_KEY]
2516
2482
  }
2517
2483
  ],
2518
2484
  value: base3.id.toString()
@@ -2535,7 +2501,7 @@ var flagConfig = {
2535
2501
  {
2536
2502
  key: "apiKey",
2537
2503
  type: "isAnyOf",
2538
- values: [OSTIUM_API_KEY2]
2504
+ values: [POLYMARKET_API_KEY]
2539
2505
  }
2540
2506
  ],
2541
2507
  value: JSON.stringify({
@@ -2653,7 +2619,7 @@ var flagConfig = {
2653
2619
  {
2654
2620
  key: "apiKey",
2655
2621
  type: "isAnyOf",
2656
- values: [KATANA_API_KEY2, KALSHI_API_KEY2]
2622
+ values: [KATANA_API_KEY]
2657
2623
  }
2658
2624
  ],
2659
2625
  value: false
@@ -2737,13 +2703,12 @@ var flagConfig = {
2737
2703
  values: [
2738
2704
  SUSHI_API_KEY,
2739
2705
  HYPERSWAP_API_KEY,
2740
- HYPERBEAT_API_KEY2,
2706
+ HYPERBEAT_API_KEY,
2741
2707
  HYPERDASH_API_KEY,
2742
- BASED_API_KEY2,
2743
- OSTIUM_API_KEY2,
2744
- POLYMARKET_API_KEY2,
2745
- VENTUALS_API_KEY,
2746
- KALSHI_API_KEY2
2708
+ BASED_API_KEY,
2709
+ OSTIUM_API_KEY,
2710
+ POLYMARKET_API_KEY,
2711
+ VENTUALS_API_KEY
2747
2712
  ]
2748
2713
  }
2749
2714
  ],
@@ -2795,14 +2760,6 @@ var flagConfig = {
2795
2760
  137: []
2796
2761
  })
2797
2762
  },
2798
- [FlagKey.WithdrawalExcludeChains]: {
2799
- type: "string",
2800
- default_value: JSON.stringify([56, 10])
2801
- },
2802
- [FlagKey.EnableSourceNavigationWidget]: {
2803
- type: "boolean",
2804
- default_value: false
2805
- },
2806
2763
  [FlagKey.TokenTransferDefaultTokens]: {
2807
2764
  type: "string",
2808
2765
  default_value: "",
@@ -2812,7 +2769,7 @@ var flagConfig = {
2812
2769
  {
2813
2770
  key: "apiKey",
2814
2771
  type: "isAnyOf",
2815
- values: [POLYMARKET_API_KEY2]
2772
+ values: [POLYMARKET_API_KEY]
2816
2773
  }
2817
2774
  ],
2818
2775
  value: JSON.stringify(["USDC", "USDC.e"])
@@ -2862,7 +2819,7 @@ var flagConfig = {
2862
2819
  {
2863
2820
  key: "apiKey",
2864
2821
  type: "isAnyOf",
2865
- values: [BASED_API_KEY2]
2822
+ values: [BASED_API_KEY]
2866
2823
  }
2867
2824
  ],
2868
2825
  value: JSON.stringify({
@@ -3002,6 +2959,40 @@ import React11, {
3002
2959
  } from "react";
3003
2960
  import { FlagKey as FlagKey2 } from "@funkit/utils";
3004
2961
 
2962
+ // src/consts/customers.ts
2963
+ import {
2964
+ BANKR_API_KEY as BANKR_API_KEY2,
2965
+ BASED_API_KEY as BASED_API_KEY2,
2966
+ BSX_API_KEY,
2967
+ ETHEREAL_API_KEY,
2968
+ HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
2969
+ KATANA_API_KEY as KATANA_API_KEY2,
2970
+ MONKEY_TILT_API_KEY as MONKEY_TILT_API_KEY2,
2971
+ OSTIUM_API_KEY as OSTIUM_API_KEY2,
2972
+ POLYMARKET_API_KEY as POLYMARKET_API_KEY2
2973
+ } from "@funkit/api-base";
2974
+ function isPolymarketCustomer(apiKey) {
2975
+ return apiKey === POLYMARKET_API_KEY2;
2976
+ }
2977
+ function isOstiumCustomer(apiKey) {
2978
+ return apiKey === OSTIUM_API_KEY2;
2979
+ }
2980
+ function isBankrCustomer(apiKey) {
2981
+ return apiKey === BANKR_API_KEY2;
2982
+ }
2983
+ function isEtherealCustomer(apiKey) {
2984
+ return apiKey === ETHEREAL_API_KEY;
2985
+ }
2986
+ function isKatanaCustomer(apiKey) {
2987
+ return apiKey === KATANA_API_KEY2;
2988
+ }
2989
+ function isHyperbeatCustomer(apiKey) {
2990
+ return apiKey === HYPERBEAT_API_KEY2;
2991
+ }
2992
+ function isBasedCustomer(apiKey) {
2993
+ return apiKey === BASED_API_KEY2;
2994
+ }
2995
+
3005
2996
  // src/providers/FunkitSandboxContext.tsx
3006
2997
  import { createContext as createContext6, useContext as useContext6 } from "react";
3007
2998
  var FunkitSandboxContext = createContext6(false);
@@ -3079,7 +3070,6 @@ function useFunkitUserIp() {
3079
3070
  const { apiKey } = useFunkitConfig();
3080
3071
  const isPolymarket = isPolymarketCustomer(apiKey);
3081
3072
  const isHyperbeat = isHyperbeatCustomer(apiKey);
3082
- const isKalshi = isKalshiCustomer(apiKey);
3083
3073
  const { data: userIpInfo, isLoading: isLoadingGeoCheck } = useQuery({
3084
3074
  queryKey: ["getUserIpInfo"],
3085
3075
  queryFn: async () => {
@@ -3110,7 +3100,7 @@ function useFunkitUserIp() {
3110
3100
  refetchOnWindowFocus: false
3111
3101
  });
3112
3102
  const isUserGeoblocked = useMemo5(() => {
3113
- if (isLoadingFlags || isLoadingGeoCheck || isPolymarket || isHyperbeat || isKalshi) {
3103
+ if (isLoadingFlags || isLoadingGeoCheck || isPolymarket || isHyperbeat) {
3114
3104
  return false;
3115
3105
  }
3116
3106
  if (!userIpInfo) {
@@ -3124,8 +3114,7 @@ function useFunkitUserIp() {
3124
3114
  isLoadingGeoCheck,
3125
3115
  userIpInfo,
3126
3116
  isPolymarket,
3127
- isHyperbeat,
3128
- isKalshi
3117
+ isHyperbeat
3129
3118
  ]);
3130
3119
  return {
3131
3120
  isLoadingGeoCheck: isLoadingFlags || isLoadingGeoCheck,
@@ -3211,13 +3200,57 @@ function safeJSONParse(src) {
3211
3200
  });
3212
3201
  }
3213
3202
 
3203
+ // src/hooks/useIsTokenWhitelisted.ts
3204
+ var MATCH_ALL = "*";
3205
+ var useIsTokenWhitelisted = (flagKey) => {
3206
+ const whitelistedTokensString = useFlag(flagKey);
3207
+ const whitelistedTokensByChainId = useMemo7(
3208
+ () => safeJSONParse(whitelistedTokensString),
3209
+ [whitelistedTokensString]
3210
+ );
3211
+ const isTokenWhitelisted = useCallback3(
3212
+ (chainId, tokenAddress) => {
3213
+ const tokensForChainId = toArrayIfString(whitelistedTokensByChainId?.[chainId]) ?? [];
3214
+ const tokensForAllChains = toArrayIfString(whitelistedTokensByChainId?.[MATCH_ALL]) ?? [];
3215
+ const tokens = [
3216
+ ...tokensForChainId,
3217
+ // whitelisted tokens for the `chainId` provided
3218
+ ...tokensForAllChains
3219
+ // whitelisted tokens for all chains
3220
+ ];
3221
+ if (tokens.length === 0) {
3222
+ return false;
3223
+ }
3224
+ if (tokens.includes("*")) {
3225
+ return true;
3226
+ }
3227
+ return tokens.some(
3228
+ (currentTokenAddress) => isTokenAddressEquivalent2({
3229
+ firstTokenAddress: currentTokenAddress,
3230
+ secondTokenAddress: tokenAddress
3231
+ })
3232
+ );
3233
+ },
3234
+ [whitelistedTokensByChainId]
3235
+ );
3236
+ return isTokenWhitelisted;
3237
+ };
3238
+ var toArrayIfString = (value) => {
3239
+ if (typeof value === "string") {
3240
+ return [value];
3241
+ }
3242
+ return value;
3243
+ };
3244
+
3214
3245
  // src/hooks/useRelayBypass.ts
3246
+ import { FlagKey as FlagKey3, isTokenAddressEquivalent as isTokenAddressEquivalent3 } from "@funkit/utils";
3247
+ import { useCallback as useCallback4, useMemo as useMemo8 } from "react";
3215
3248
  var isTokenFlagEnabled = (tokenList, tokenAddress) => {
3216
3249
  if (tokenList.includes("*")) {
3217
3250
  return true;
3218
3251
  }
3219
3252
  return tokenList.some(
3220
- (t) => isTokenAddressEquivalent2({
3253
+ (t) => isTokenAddressEquivalent3({
3221
3254
  firstTokenAddress: t,
3222
3255
  secondTokenAddress: tokenAddress
3223
3256
  })
@@ -3228,11 +3261,11 @@ function useSourceTokenRelayEnabled() {
3228
3261
  const sourceTokensJsonString = useFlag(
3229
3262
  FlagKey3.RelayBypassSourceChainsAndAssets
3230
3263
  );
3231
- const sourceTokens = useMemo7(
3264
+ const sourceTokens = useMemo8(
3232
3265
  () => safeJSONParse(sourceTokensJsonString),
3233
3266
  [sourceTokensJsonString]
3234
3267
  );
3235
- const isAllowed = useCallback3(
3268
+ const isAllowed = useCallback4(
3236
3269
  (chainId, tokenAddress) => {
3237
3270
  return isRelayBypassEnabled && isTokenFlagEnabled(
3238
3271
  sourceTokens?.[Number.parseInt(`${chainId}`)] || [],
@@ -3258,7 +3291,7 @@ function useRelayBypass() {
3258
3291
  const targetTokens = safeJSONParse(
3259
3292
  targetTokensJsonString
3260
3293
  );
3261
- const paymentMethodWhitelistConfig = useMemo7(() => {
3294
+ const paymentMethodWhitelistConfig = useMemo8(() => {
3262
3295
  if (isKatanaCustomer(apiKey)) {
3263
3296
  return {
3264
3297
  relayPaymentMethods: [
@@ -3276,7 +3309,7 @@ function useRelayBypass() {
3276
3309
  };
3277
3310
  }, [apiKey]);
3278
3311
  return {
3279
- getIsRelayEnabled: useCallback3(
3312
+ getIsRelayEnabled: useCallback4(
3280
3313
  ({
3281
3314
  fromChainId,
3282
3315
  fromTokenAddress,
@@ -3323,7 +3356,9 @@ function useCheckoutDirectExecution() {
3323
3356
  const { data: walletClient } = useWalletClient();
3324
3357
  const { getIsRelayEnabled } = useRelayBypass();
3325
3358
  const { apiKey } = useFunkitConfig();
3326
- const getRelayDirectExecutionBaseQuote = useCallback4(
3359
+ const isPermitEnabledForToken = useIsTokenWhitelisted(FlagKey4.Permit2Tokens);
3360
+ const wagmiConfig = useConfig2();
3361
+ const getRelayDirectExecutionBaseQuote = useCallback5(
3327
3362
  async (params) => {
3328
3363
  const {
3329
3364
  actionParams,
@@ -3334,6 +3369,13 @@ function useCheckoutDirectExecution() {
3334
3369
  recipientAddress,
3335
3370
  senderAddress = address
3336
3371
  } = params;
3372
+ const doesHaveGasToken = await hasGasToken(
3373
+ wagmiConfig,
3374
+ address,
3375
+ fromChainId
3376
+ );
3377
+ const usePermit = doesHaveGasToken === false && // Check if the wallet has gas token (e.g. ETH > 0 on eth mainnet)
3378
+ isPermitEnabledForToken(fromChainId, fromTokenAddress);
3337
3379
  const getCheckoutQuoteParams = {
3338
3380
  actionParams,
3339
3381
  apiKey,
@@ -3343,7 +3385,8 @@ function useCheckoutDirectExecution() {
3343
3385
  recipientAddress,
3344
3386
  toChainId,
3345
3387
  toTokenAddress,
3346
- userAddress: senderAddress
3388
+ userAddress: senderAddress,
3389
+ usePermit
3347
3390
  };
3348
3391
  if (params.isExactIn) {
3349
3392
  const { fromTokenDecimals, fromTokenAmount } = params;
@@ -3360,9 +3403,9 @@ function useCheckoutDirectExecution() {
3360
3403
  toAmountBaseUnit: BigInt(Math.floor(toTokenAmount * multiplier))
3361
3404
  });
3362
3405
  },
3363
- [address, apiKey]
3406
+ [address, apiKey, isPermitEnabledForToken, wagmiConfig]
3364
3407
  );
3365
- const checkAndSwitchChains = useCallback4(
3408
+ const checkAndSwitchChains = useCallback5(
3366
3409
  async ({
3367
3410
  executionChainId,
3368
3411
  stepMessageSetter
@@ -3386,7 +3429,7 @@ function useCheckoutDirectExecution() {
3386
3429
  },
3387
3430
  [connector, switchChainAsync]
3388
3431
  );
3389
- const startRelayDirectExecution = useCallback4(
3432
+ const startRelayDirectExecution = useCallback5(
3390
3433
  async ({
3391
3434
  checkoutItem,
3392
3435
  latestQuote,
@@ -3463,7 +3506,7 @@ function useCheckoutDirectExecution() {
3463
3506
  },
3464
3507
  [walletClient, checkAndSwitchChains]
3465
3508
  );
3466
- const getDirectExecutionInfo = useCallback4(
3509
+ const getDirectExecutionInfo = useCallback5(
3467
3510
  (checkoutItem) => {
3468
3511
  const noop10 = {
3469
3512
  isDirectExecution: false,
@@ -3501,7 +3544,7 @@ function useCheckoutDirectExecution() {
3501
3544
  startRelayDirectExecution
3502
3545
  ]
3503
3546
  );
3504
- const getWithdrawalDirectExecution = useCallback4(() => {
3547
+ const getWithdrawalDirectExecution = useCallback5(() => {
3505
3548
  const quoteAction = getRelayDirectExecutionBaseQuote;
3506
3549
  const executeAction = startRelayDirectExecution;
3507
3550
  return {
@@ -3521,9 +3564,9 @@ function useCheckoutDirectExecution() {
3521
3564
  import {
3522
3565
  initializeCheckoutTokenTransferAddress
3523
3566
  } from "@funkit/api-base";
3524
- import { FlagKey as FlagKey4 } from "@funkit/utils";
3567
+ import { FlagKey as FlagKey5 } from "@funkit/utils";
3525
3568
  import { useQuery as useQuery3 } from "@tanstack/react-query";
3526
- import { useCallback as useCallback5 } from "react";
3569
+ import { useCallback as useCallback6 } from "react";
3527
3570
 
3528
3571
  // src/domains/clientMetadata.ts
3529
3572
  function generateClientMetadataForBackend({
@@ -3596,7 +3639,7 @@ var useCheckoutTransferInit = () => {
3596
3639
  const checkoutConfig = checkoutItem?.initSettings.config;
3597
3640
  const { walletAddress, userInfo } = useGeneralWallet();
3598
3641
  const { apiKey } = useFunkitConfig();
3599
- const isQrCodeEnabled = useFlag(FlagKey4.EnableTokenTransfer, false);
3642
+ const isQrCodeEnabled = useFlag(FlagKey5.EnableTokenTransfer, false);
3600
3643
  const recipientAddr = checkoutConfig?.customRecipient || walletAddress || "0x";
3601
3644
  const queryKey = {
3602
3645
  userId: userInfo.id || "",
@@ -3606,7 +3649,7 @@ var useCheckoutTransferInit = () => {
3606
3649
  apiKey,
3607
3650
  actionType: checkoutConfig?.qrcodeActionType
3608
3651
  };
3609
- const queryFunction = useCallback5(
3652
+ const queryFunction = useCallback6(
3610
3653
  async (params) => {
3611
3654
  return await initializeCheckoutTokenTransferAddress({
3612
3655
  ...params,
@@ -3638,13 +3681,13 @@ var useCheckoutTransferInit = () => {
3638
3681
  };
3639
3682
 
3640
3683
  // src/hooks/useEffectEvent.ts
3641
- import { useCallback as useCallback6, useInsertionEffect, useRef } from "react";
3684
+ import { useCallback as useCallback7, useInsertionEffect, useRef } from "react";
3642
3685
  function useEffectEvent(fn) {
3643
3686
  const savedCallback = useRef(fn);
3644
3687
  useInsertionEffect(() => {
3645
3688
  savedCallback.current = fn;
3646
3689
  }, [fn]);
3647
- return useCallback6(
3690
+ return useCallback7(
3648
3691
  ((...args) => {
3649
3692
  const f = savedCallback.current;
3650
3693
  return f(...args);
@@ -3714,13 +3757,13 @@ function FunkitCheckoutProvider({ children }) {
3714
3757
  const [activeCheckout, setActiveCheckout] = useState6(null);
3715
3758
  const [activeWithdrawal, setActiveWithdrawal] = useState6(null);
3716
3759
  const [checkoutsProgress, setCheckoutsProgress] = useState6({});
3717
- const getCheckoutProgress = useCallback7(
3760
+ const getCheckoutProgress = useCallback8(
3718
3761
  (checkoutId) => {
3719
3762
  return checkoutsProgress[checkoutId];
3720
3763
  },
3721
3764
  [checkoutsProgress]
3722
3765
  );
3723
- const setCheckoutProgress = useCallback7(
3766
+ const setCheckoutProgress = useCallback8(
3724
3767
  (checkoutId, progress) => {
3725
3768
  setCheckoutsProgress((data) => ({ ...data, [checkoutId]: progress }));
3726
3769
  },
@@ -3742,7 +3785,7 @@ function FunkitCheckoutProvider({ children }) {
3742
3785
  });
3743
3786
  }
3744
3787
  );
3745
- const initNewWithdrawal = useCallback7(
3788
+ const initNewWithdrawal = useCallback8(
3746
3789
  (props) => {
3747
3790
  const { onWithdrawalConfirmation, onWithdrawalError, config } = props;
3748
3791
  const newWithdrawalId = uuid();
@@ -3760,7 +3803,7 @@ function FunkitCheckoutProvider({ children }) {
3760
3803
  },
3761
3804
  []
3762
3805
  );
3763
- const initNewCheckout = useCallback7(
3806
+ const initNewCheckout = useCallback8(
3764
3807
  ({ config, ...initSettings }) => {
3765
3808
  const newCheckoutId = uuid();
3766
3809
  const newActiveCheckoutItem = {
@@ -3835,7 +3878,7 @@ function FunkitCheckoutProvider({ children }) {
3835
3878
  });
3836
3879
  }
3837
3880
  );
3838
- const startDirectExecutionCheckout = useCallback7(
3881
+ const startDirectExecutionCheckout = useCallback8(
3839
3882
  async ({
3840
3883
  stepMessageSetter,
3841
3884
  latestQuote,
@@ -3921,7 +3964,7 @@ function FunkitCheckoutProvider({ children }) {
3921
3964
  manualFetch
3922
3965
  ]
3923
3966
  );
3924
- const startRegularCheckout = useCallback7(
3967
+ const startRegularCheckout = useCallback8(
3925
3968
  async ({
3926
3969
  stepMessageSetter,
3927
3970
  latestQuote,
@@ -4121,15 +4164,15 @@ function useFunkitCheckout(props) {
4121
4164
  const { openWithdrawalModal } = useWithdrawalModal();
4122
4165
  const { connectModalOpen, openConnectModal } = useConnectModal();
4123
4166
  const { isUserLoggedIn } = useGeneralWallet();
4124
- const isCheckoutActivated = useFlag(FlagKey5.IsCheckoutActivated);
4125
- const onErrorWrapper = useCallback7(
4167
+ const isCheckoutActivated = useFlag(FlagKey6.IsCheckoutActivated);
4168
+ const onErrorWrapper = useCallback8(
4126
4169
  (payload) => {
4127
4170
  logger.warn(payload.message, payload);
4128
4171
  onError?.(payload);
4129
4172
  },
4130
4173
  [onError]
4131
4174
  );
4132
- const onOpenWrapper = useCallback7(
4175
+ const onOpenWrapper = useCallback8(
4133
4176
  (newId) => {
4134
4177
  props?.onOpen?.();
4135
4178
  openFunCheckoutModal?.(newId);
@@ -4321,18 +4364,6 @@ async function validateCheckoutConfig(config) {
4321
4364
  message: `Invalid targetChain configuration: Unsupported chain id ${config.targetChain} for checkout.`
4322
4365
  };
4323
4366
  }
4324
- const chainCheckoutAssetWhitelist = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO4[config.targetChain]?.checkoutAssetWhitelist || [];
4325
- if (chainCheckoutAssetWhitelist?.[0] !== "*" && !chainCheckoutAssetWhitelist.some(
4326
- (asset) => isTokenAddressEquivalent3({
4327
- firstTokenAddress: asset,
4328
- secondTokenAddress: config.targetAsset || ""
4329
- })
4330
- )) {
4331
- return {
4332
- isValid: false,
4333
- message: `Invalid targetAsset ${config.targetAsset} for targetChain ${config.targetChain}.`
4334
- };
4335
- }
4336
4367
  if (config.customRecipient && !isAddress(config.customRecipient)) {
4337
4368
  return {
4338
4369
  isValid: false,
@@ -4364,7 +4395,7 @@ async function validateCheckoutConfig(config) {
4364
4395
  };
4365
4396
  }
4366
4397
  var hasSufficientBalance = async (wagmiConfig, walletAddress, tokenAddress, tokenChainId, requiredAssetAmount) => {
4367
- const finalTokenAddress = isTokenAddressEquivalent3({
4398
+ const finalTokenAddress = isTokenAddressEquivalent4({
4368
4399
  firstTokenAddress: tokenAddress,
4369
4400
  secondTokenAddress: FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS2
4370
4401
  }) ? void 0 : tokenAddress;
@@ -4385,6 +4416,27 @@ var hasSufficientBalance = async (wagmiConfig, walletAddress, tokenAddress, toke
4385
4416
  }
4386
4417
  return { balance, result: false, tokenTicker: null };
4387
4418
  };
4419
+ var hasGasToken = async (wagmiConfig, walletAddress, chainId) => {
4420
+ try {
4421
+ const data = await getBalance(wagmiConfig, {
4422
+ address: walletAddress,
4423
+ chainId: Number(chainId),
4424
+ blockTag: "latest"
4425
+ });
4426
+ logger.log("hasGasToken_info", {
4427
+ data,
4428
+ walletAddress,
4429
+ chainId
4430
+ });
4431
+ return data.value > 0;
4432
+ } catch (err) {
4433
+ logger.error("hasGasToken_error", err, {
4434
+ walletAddress,
4435
+ chainId
4436
+ });
4437
+ return false;
4438
+ }
4439
+ };
4388
4440
  function getFunkitEnvForCheckoutEstimation({
4389
4441
  chainId,
4390
4442
  bypassWalletInit
@@ -4707,7 +4759,7 @@ function FunkitCheckoutHistoryProvider({
4707
4759
  const [isInited, setIsInited] = useState7(false);
4708
4760
  const [isRefreshing, setIsRefreshing] = useState7(true);
4709
4761
  const isGuestUserOnCheckoutHistory = !isUserLoggedIn && !!historyDepositAddress;
4710
- const _refreshCheckoutHistory = useCallback8(async () => {
4762
+ const _refreshCheckoutHistory = useCallback9(async () => {
4711
4763
  if (!funkitConfig.apiKey) {
4712
4764
  return;
4713
4765
  }
@@ -4775,7 +4827,7 @@ function FunkitCheckoutHistoryProvider({
4775
4827
  clearInterval(intervalRef.current);
4776
4828
  }
4777
4829
  }, [logoutSymbol]);
4778
- const startCheckoutHistoryListener = useCallback8(
4830
+ const startCheckoutHistoryListener = useCallback9(
4779
4831
  (singleDepositAddr, expedited = false) => {
4780
4832
  setHistoryDepositAddress(singleDepositAddr);
4781
4833
  clearInterval(intervalRef.current);
@@ -4791,7 +4843,7 @@ function FunkitCheckoutHistoryProvider({
4791
4843
  },
4792
4844
  [triggerRefreshSymbol]
4793
4845
  );
4794
- const stopCheckoutHistoryListener = useCallback8(
4846
+ const stopCheckoutHistoryListener = useCallback9(
4795
4847
  (cancelIntervalId) => {
4796
4848
  clearInterval(cancelIntervalId);
4797
4849
  if (cancelIntervalId === intervalRef.current) {
@@ -4943,7 +4995,7 @@ var useFunkitPostCheckoutInternal = (checkoutId) => {
4943
4995
  };
4944
4996
 
4945
4997
  // src/components/FunCheckoutHistory/FunCheckoutStatus.tsx
4946
- import React22, { useEffect as useEffect11, useMemo as useMemo8, useState as useState10 } from "react";
4998
+ import React22, { useEffect as useEffect11, useMemo as useMemo9, useState as useState10 } from "react";
4947
4999
 
4948
5000
  // src/components/TransactionStatus/TransactionStatus.tsx
4949
5001
  import {
@@ -4952,7 +5004,7 @@ import {
4952
5004
  useAnimate
4953
5005
  } from "motion/react";
4954
5006
  import React21, {
4955
- useCallback as useCallback9,
5007
+ useCallback as useCallback10,
4956
5008
  useEffect as useEffect10,
4957
5009
  useRef as useRef3,
4958
5010
  useState as useState9
@@ -5675,11 +5727,11 @@ function TransactionStatus({
5675
5727
  const [transitioningToStatus, setTransitioningToStatus] = useState9(status);
5676
5728
  const [transitioningToStep, setTransitioningToStep] = useState9(step);
5677
5729
  const spinAnimationRef = useRef3();
5678
- const stopSpinning = useCallback9(() => {
5730
+ const stopSpinning = useCallback10(() => {
5679
5731
  spinAnimationRef.current?.cancel();
5680
5732
  spinAnimationRef.current = void 0;
5681
5733
  }, []);
5682
- const startSpinning = useCallback9(
5734
+ const startSpinning = useCallback10(
5683
5735
  (step2) => {
5684
5736
  stopSpinning();
5685
5737
  spinAnimationRef.current = animate(
@@ -5697,7 +5749,7 @@ function TransactionStatus({
5697
5749
  },
5698
5750
  [animate, stopSpinning]
5699
5751
  );
5700
- const animateCircleToSuccess = useCallback9(
5752
+ const animateCircleToSuccess = useCallback10(
5701
5753
  async (step2) => {
5702
5754
  const durationMs = 300;
5703
5755
  const checkmarkDelayMs = 50;
@@ -6093,7 +6145,7 @@ function FunCheckoutStatusLoaded({
6093
6145
  checkoutHistoryItem.state,
6094
6146
  checkoutHistoryItem.refundState
6095
6147
  );
6096
- const startTimeMs = useMemo8(
6148
+ const startTimeMs = useMemo9(
6097
6149
  () => extractStartTimeMs(
6098
6150
  checkoutHistoryItem.clientMetadata.id,
6099
6151
  activeCheckoutItem,
@@ -6349,7 +6401,7 @@ function isCustomWithdrawalConfig(config) {
6349
6401
  import { isMobile as isMobile2, isSafari } from "@funkit/utils";
6350
6402
  import clsx8 from "clsx";
6351
6403
  import React43, {
6352
- useCallback as useCallback12,
6404
+ useCallback as useCallback13,
6353
6405
  useContext as useContext12,
6354
6406
  useEffect as useEffect18,
6355
6407
  useRef as useRef8
@@ -6665,7 +6717,7 @@ var ErrorFallback = () => /* @__PURE__ */ React31.createElement(
6665
6717
  );
6666
6718
 
6667
6719
  // src/components/FunBottomBar/FunBottomBar.tsx
6668
- import { FlagKey as FlagKey6, isMobile } from "@funkit/utils";
6720
+ import { FlagKey as FlagKey7, isMobile } from "@funkit/utils";
6669
6721
  import React35 from "react";
6670
6722
 
6671
6723
  // src/components/FunButton/FunButton.tsx
@@ -6953,7 +7005,7 @@ var FunBottomBar = ({
6953
7005
  onClose
6954
7006
  }) => {
6955
7007
  const { uiCustomizations } = useFunkitConfig();
6956
- const showTagline = useFlag(FlagKey6.ShowPoweredTagline);
7008
+ const showTagline = useFlag(FlagKey7.ShowPoweredTagline);
6957
7009
  const defaultBottomSection = showTagline ? /* @__PURE__ */ React35.createElement(FunPoweredTagline, null) : void 0;
6958
7010
  const bottomSectionComponent = bottomSection ?? defaultBottomSection;
6959
7011
  const hasMultipleButtons = !!onClose;
@@ -7086,7 +7138,7 @@ function FunDivider({
7086
7138
 
7087
7139
  // src/components/FunTooltip/FunTooltip.tsx
7088
7140
  import React40, {
7089
- useCallback as useCallback10,
7141
+ useCallback as useCallback11,
7090
7142
  useEffect as useEffect14,
7091
7143
  useRef as useRef6,
7092
7144
  useState as useState14
@@ -7177,7 +7229,7 @@ var FunTooltip = ({
7177
7229
  const startDelayRef = useRef6();
7178
7230
  const delayRef = useRef6();
7179
7231
  const tooltipRef = useRef6(null);
7180
- const show = useCallback10(
7232
+ const show = useCallback11(
7181
7233
  (startHiding) => {
7182
7234
  startDelayRef.current = setTimeout(() => {
7183
7235
  setIsDisplayed(true);
@@ -7187,7 +7239,7 @@ var FunTooltip = ({
7187
7239
  },
7188
7240
  [startDelay]
7189
7241
  );
7190
- const hide = useCallback10(() => {
7242
+ const hide = useCallback11(() => {
7191
7243
  clearTimeout(startDelayRef.current);
7192
7244
  delayRef.current = setTimeout(() => {
7193
7245
  setIsDisplayed(false);
@@ -7300,7 +7352,7 @@ var HelpIcon = () => {
7300
7352
  };
7301
7353
 
7302
7354
  // src/components/Dialog/FocusTrap.tsx
7303
- import React42, { useCallback as useCallback11, useEffect as useEffect15, useRef as useRef7 } from "react";
7355
+ import React42, { useCallback as useCallback12, useEffect as useEffect15, useRef as useRef7 } from "react";
7304
7356
  var moveFocusWithin = (element2, position) => {
7305
7357
  const focusableElements = element2.querySelectorAll(
7306
7358
  "button:not(:disabled), a[href]"
@@ -7333,7 +7385,7 @@ function FocusTrap(props) {
7333
7385
  return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(
7334
7386
  "div",
7335
7387
  {
7336
- onFocus: useCallback11(
7388
+ onFocus: useCallback12(
7337
7389
  () => contentRef.current && moveFocusWithin(contentRef.current, "end"),
7338
7390
  []
7339
7391
  ),
@@ -7350,7 +7402,7 @@ function FocusTrap(props) {
7350
7402
  ), /* @__PURE__ */ React42.createElement(
7351
7403
  "div",
7352
7404
  {
7353
- onFocus: useCallback11(
7405
+ onFocus: useCallback12(
7354
7406
  () => contentRef.current && moveFocusWithin(contentRef.current, "start"),
7355
7407
  []
7356
7408
  ),
@@ -7486,7 +7538,7 @@ function Dialog({
7486
7538
  }
7487
7539
  return () => document.removeEventListener("keydown", handleEscape);
7488
7540
  }, [open, onClose, isSmartCloseable]);
7489
- const handleBackdropClick = useCallback12(
7541
+ const handleBackdropClick = useCallback13(
7490
7542
  () => isSmartCloseable ? onClose() : () => void 0,
7491
7543
  [isSmartCloseable, onClose]
7492
7544
  );
@@ -7842,17 +7894,17 @@ Dialog.BottomBar = FunBottomBar;
7842
7894
  // src/modals/WithdrwalModal/WithdrawalContent.tsx
7843
7895
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO7 } from "@funkit/chains";
7844
7896
  import {
7845
- FlagKey as FlagKey13,
7897
+ FlagKey as FlagKey14,
7846
7898
  formatCryptoAndStringify as formatCryptoAndStringify2,
7847
7899
  formatCurrencyAndStringify as formatCurrencyAndStringify3
7848
7900
  } from "@funkit/utils";
7849
- import React67, { useEffect as useEffect27, useMemo as useMemo13, useState as useState26 } from "react";
7901
+ import React67, { useEffect as useEffect27, useMemo as useMemo14, useState as useState26 } from "react";
7850
7902
  import { createPortal as createPortal2 } from "react-dom";
7851
7903
  import { useDebounce } from "use-debounce";
7852
7904
  import { useAccount as useAccount3 } from "wagmi";
7853
7905
 
7854
7906
  // src/components/AsyncImage/AsyncImage.tsx
7855
- import React44, { useMemo as useMemo9, useReducer as useReducer2, useState as useState16 } from "react";
7907
+ import React44, { useMemo as useMemo10, useReducer as useReducer2, useState as useState16 } from "react";
7856
7908
 
7857
7909
  // src/components/AsyncImage/useAsyncImage.ts
7858
7910
  import { useEffect as useEffect19, useReducer } from "react";
@@ -7920,7 +7972,7 @@ function AsyncImage({
7920
7972
  const [hasError, setHasError] = useState16(
7921
7973
  srcProp === void 0 && fallbackSrc === void 0
7922
7974
  );
7923
- const { asyncStyle, imgProps } = useMemo9(() => {
7975
+ const { asyncStyle, imgProps } = useMemo10(() => {
7924
7976
  const asyncStyle2 = !useAsImage ? getRemoteImageStyles(isRemoteImage, isRemoteImageLoaded, src) : {};
7925
7977
  if (useAsImage || isRemoteImage) {
7926
7978
  const imgProps2 = {
@@ -8022,13 +8074,13 @@ var getRemoteImageStyles = (isRemoteImage, isRemoteImageLoaded, src) => {
8022
8074
  import React59 from "react";
8023
8075
 
8024
8076
  // src/components/Dropdown/ChainDropdown.tsx
8025
- import { FlagKey as FlagKey7 } from "@funkit/utils";
8077
+ import { FlagKey as FlagKey8 } from "@funkit/utils";
8026
8078
  import React56 from "react";
8027
8079
 
8028
8080
  // src/components/Dropdown/BaseDropdown.tsx
8029
8081
  import { isMobile as isMobile3, noop as noop2 } from "@funkit/utils";
8030
8082
  import { AnimatePresence as AnimatePresence4, motion as motion5 } from "motion/react";
8031
- import React53, { useCallback as useCallback13, useEffect as useEffect22, useMemo as useMemo10, useRef as useRef10, useState as useState18 } from "react";
8083
+ import React53, { useCallback as useCallback14, useEffect as useEffect22, useMemo as useMemo11, useRef as useRef10, useState as useState18 } from "react";
8032
8084
 
8033
8085
  // src/consts/layout.ts
8034
8086
  var VERTICAL_SECTION_GAP = "18";
@@ -8652,13 +8704,13 @@ function BaseDropdown({
8652
8704
  const handleSearch = (event) => {
8653
8705
  setSearchInput(event.target.value);
8654
8706
  };
8655
- const filteredOptions = useMemo10(
8707
+ const filteredOptions = useMemo11(
8656
8708
  () => options.filter(
8657
8709
  (singleOption) => singleOption.label.toLowerCase().includes(searchInput?.toLowerCase())
8658
8710
  ),
8659
8711
  [options, searchInput]
8660
8712
  );
8661
- const closeDropdown = useCallback13(() => {
8713
+ const closeDropdown = useCallback14(() => {
8662
8714
  setIsOpened(false);
8663
8715
  resetSearchOnClose && setSearchInput("");
8664
8716
  }, [resetSearchOnClose]);
@@ -8931,9 +8983,9 @@ var ChainDropdown = ({
8931
8983
  maxDropdownHeight,
8932
8984
  tagComponent
8933
8985
  }) => {
8934
- const defaultChainIdJson = useFlag(FlagKey7.TokenTransferDefaultChainId);
8986
+ const defaultChainIdJson = useFlag(FlagKey8.TokenTransferDefaultChainId);
8935
8987
  const defaultChainId = safeJSONParse(defaultChainIdJson);
8936
- const chainSortOrderJson = useFlag(FlagKey7.ChainIdSortOrder);
8988
+ const chainSortOrderJson = useFlag(FlagKey8.ChainIdSortOrder);
8937
8989
  const chainSortOrder = safeJSONParse(chainSortOrderJson) || [];
8938
8990
  const chainIds = getSortedChainIds();
8939
8991
  const options = allowUnselect ? [DEFAULT_VALUE, ...chainIds] : chainIds;
@@ -9040,7 +9092,7 @@ var ChainDropdown = ({
9040
9092
  };
9041
9093
 
9042
9094
  // src/components/Dropdown/TokenDropdown.tsx
9043
- import { FlagKey as FlagKey8, safeParseJson as safeParseJson3 } from "@funkit/utils";
9095
+ import { FlagKey as FlagKey9, safeParseJson as safeParseJson3 } from "@funkit/utils";
9044
9096
  import React58, { useState as useState19 } from "react";
9045
9097
 
9046
9098
  // src/utils/flags/patches/enable-bitcoin-patch.ts
@@ -9181,12 +9233,12 @@ var NewTokenBadge = ({ iconSymbol }) => {
9181
9233
  // src/components/Dropdown/TokenDropdown.tsx
9182
9234
  var TOKEN_ICON_SIZE = 16;
9183
9235
  var useNewTokens = () => {
9184
- const enableBitcoin = useFlag(FlagKey8.EnableBitcoin);
9185
- const bannerJson = useFlag(FlagKey8.NewTokenAssetSelectionBanner);
9236
+ const enableBitcoin = useFlag(FlagKey9.EnableBitcoin);
9237
+ const bannerJson = useFlag(FlagKey9.NewTokenAssetSelectionBanner);
9186
9238
  const bannerData = safeParseJson3(bannerJson);
9187
9239
  const addBitcoinToNewTokensMiddleware = enableBitcoin ? addBitcoinToNewTokens : void 0;
9188
9240
  const newBadgeTokensJson = useFlag(
9189
- FlagKey8.TokenTransferNewTokens,
9241
+ FlagKey9.TokenTransferNewTokens,
9190
9242
  void 0,
9191
9243
  addBitcoinToNewTokensMiddleware
9192
9244
  );
@@ -9206,7 +9258,7 @@ var TokenDropdown = ({
9206
9258
  maxDropdownHeight,
9207
9259
  hideNewTokenBadge
9208
9260
  }) => {
9209
- const defaultTokensJson = useFlag(FlagKey8.TokenTransferDefaultTokens);
9261
+ const defaultTokensJson = useFlag(FlagKey9.TokenTransferDefaultTokens);
9210
9262
  const defaultTokens = safeJSONParse(defaultTokensJson);
9211
9263
  const enabledTokens = assets[selectedChainId];
9212
9264
  const allTokens = getSortedTokens();
@@ -9606,7 +9658,7 @@ import {
9606
9658
  formatPercent,
9607
9659
  noop as noop4
9608
9660
  } from "@funkit/utils";
9609
- import React64, { useEffect as useEffect23, useMemo as useMemo11, useState as useState20 } from "react";
9661
+ import React64, { useEffect as useEffect23, useMemo as useMemo12, useState as useState20 } from "react";
9610
9662
  import clsx14 from "clsx";
9611
9663
  import { motion as motion6, useAnimationControls } from "motion/react";
9612
9664
  import { mainnet as mainnet5 } from "viem/chains";
@@ -10002,7 +10054,7 @@ function PaymentFeesSummary({
10002
10054
  }
10003
10055
  }, [valuesNotAvailable, isExpanded]);
10004
10056
  const { uiCustomizations } = useFunkitConfig();
10005
- const { collapsed: collapsedItem, expanded: expandedItems } = useMemo11(() => {
10057
+ const { collapsed: collapsedItem, expanded: expandedItems } = useMemo12(() => {
10006
10058
  const fees = quote?.finalFeesBreakdown ?? fallbackFees;
10007
10059
  if (!fees) {
10008
10060
  return NO_DATA;
@@ -10156,7 +10208,7 @@ var EvmWallet = ({ size = 20 }) => /* @__PURE__ */ React65.createElement(
10156
10208
 
10157
10209
  // src/hooks/queries/useWithdrawalQuote.ts
10158
10210
  import { useQuery as useQuery6 } from "@tanstack/react-query";
10159
- import { useConfig as useConfig2 } from "wagmi";
10211
+ import { useConfig as useConfig3 } from "wagmi";
10160
10212
 
10161
10213
  // src/domains/quote.ts
10162
10214
  import { getCheckoutQuote as getApiCheckoutQuote } from "@funkit/api-base";
@@ -10592,7 +10644,7 @@ function useWithdrawalQuote({
10592
10644
  });
10593
10645
  const { loginType, userInfo } = useGeneralWallet();
10594
10646
  const { apiKey } = useFunkitConfig();
10595
- const wagmiConfig = useConfig2();
10647
+ const wagmiConfig = useConfig3();
10596
10648
  const { getWithdrawalDirectExecution } = useCheckoutDirectExecution();
10597
10649
  const { checkoutItem } = useCheckoutContext();
10598
10650
  const isInstantQuoting = (symbol === "USDC" || symbol === "USDT") && chainId !== "1";
@@ -10805,13 +10857,13 @@ var useAssetSymbolPrice = ({
10805
10857
  };
10806
10858
 
10807
10859
  // src/hooks/useTokenChain.ts
10808
- import { FlagKey as FlagKey10 } from "@funkit/utils";
10860
+ import { FlagKey as FlagKey11 } from "@funkit/utils";
10809
10861
  import { useEffect as useEffect24, useState as useState21 } from "react";
10810
10862
  import { polygon as polygon3 } from "viem/chains";
10811
10863
 
10812
10864
  // src/hooks/useEnabledTokenTransferChainTokens.ts
10813
10865
  import { bitcoinChain as bitcoinChain2, solanaChain as solanaChain3 } from "@funkit/chains";
10814
- import { FlagKey as FlagKey9 } from "@funkit/utils";
10866
+ import { FlagKey as FlagKey10 } from "@funkit/utils";
10815
10867
  import { base as base4 } from "viem/chains";
10816
10868
 
10817
10869
  // src/hooks/useIsUsUser.ts
@@ -10833,14 +10885,14 @@ function useIsUsKatanaUser() {
10833
10885
  // src/hooks/useEnabledTokenTransferChainTokens.ts
10834
10886
  function useEnabledTokenTransferChainTokens(transferInit, isWithdrawal) {
10835
10887
  const isBankrUsUser = useIsUsBankrUser();
10836
- const enableBitcoin = useFlag(FlagKey9.EnableBitcoin);
10888
+ const enableBitcoin = useFlag(FlagKey10.EnableBitcoin);
10837
10889
  const addBitcoinToSourceChainsAndAssetsMiddleware = enableBitcoin ? addBitcoinToSourceChainsAndAssets : void 0;
10838
10890
  const depositAssets = useFlag(
10839
- FlagKey9.TokenTransferSourceChainsAndAssets,
10891
+ FlagKey10.TokenTransferSourceChainsAndAssets,
10840
10892
  void 0,
10841
10893
  addBitcoinToSourceChainsAndAssetsMiddleware
10842
10894
  );
10843
- const withdrawalAssets = useFlag(FlagKey9.WithdrawalChainsAndAssets);
10895
+ const withdrawalAssets = useFlag(FlagKey10.WithdrawalChainsAndAssets);
10844
10896
  const assetsJsonString = isWithdrawal ? withdrawalAssets : depositAssets;
10845
10897
  const assets = safeJSONParse(assetsJsonString);
10846
10898
  if (!assets) {
@@ -10877,7 +10929,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
10877
10929
  transferInit ?? null,
10878
10930
  isWithdrawal
10879
10931
  );
10880
- const defaultChainIdFlag = useFlag(FlagKey10.TokenTransferDefaultChainId);
10932
+ const defaultChainIdFlag = useFlag(FlagKey11.TokenTransferDefaultChainId);
10881
10933
  const defaultChainId = defaultValues?.chainId ?? Number(defaultChainIdFlag);
10882
10934
  const validDefaultChainId = filteredAssets[defaultChainId] !== void 0 ? defaultChainId : polygon3.id;
10883
10935
  const [selectedChainId, setSelectedChainId] = useState21(validDefaultChainId);
@@ -10932,7 +10984,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
10932
10984
  import { useState as useState25 } from "react";
10933
10985
 
10934
10986
  // src/hooks/useAutoClearState.ts
10935
- import { useCallback as useCallback14, useEffect as useEffect25, useRef as useRef11, useState as useState22 } from "react";
10987
+ import { useCallback as useCallback15, useEffect as useEffect25, useRef as useRef11, useState as useState22 } from "react";
10936
10988
  function useAutoClearState(initialValue = null) {
10937
10989
  const [state, setState] = useState22(initialValue);
10938
10990
  const timeoutRef = useRef11();
@@ -10945,7 +10997,7 @@ function useAutoClearState(initialValue = null) {
10945
10997
  }, []);
10946
10998
  return [
10947
10999
  state,
10948
- useCallback14((newState, durationMs) => {
11000
+ useCallback15((newState, durationMs) => {
10949
11001
  if (timeoutRef.current) {
10950
11002
  clearTimeout(timeoutRef.current);
10951
11003
  timeoutRef.current = void 0;
@@ -10963,11 +11015,11 @@ import { ClientError as ClientError2 } from "@funkit/utils";
10963
11015
  import { useState as useState24 } from "react";
10964
11016
 
10965
11017
  // src/hooks/useIsBlacklisted.ts
10966
- import { FlagKey as FlagKey11 } from "@funkit/utils";
10967
- import { useMemo as useMemo12 } from "react";
11018
+ import { FlagKey as FlagKey12 } from "@funkit/utils";
11019
+ import { useMemo as useMemo13 } from "react";
10968
11020
  var useIsBlacklisted = (walletAddress, customRecipient) => {
10969
- const flagStr = useFlag(FlagKey11.AddressBlacklist);
10970
- const blacklist = useMemo12(
11021
+ const flagStr = useFlag(FlagKey12.AddressBlacklist);
11022
+ const blacklist = useMemo13(
10971
11023
  () => safeJSONParse(flagStr)?.map((addr) => addr.toLowerCase()) || [],
10972
11024
  [flagStr]
10973
11025
  );
@@ -10978,15 +11030,15 @@ var useIsBlacklisted = (walletAddress, customRecipient) => {
10978
11030
  };
10979
11031
 
10980
11032
  // src/providers/FunkitQuoteContext.tsx
10981
- import { FlagKey as FlagKey12, isNotNullish as isNotNullish4 } from "@funkit/utils";
11033
+ import { FlagKey as FlagKey13, isNotNullish as isNotNullish4 } from "@funkit/utils";
10982
11034
  import React66, {
10983
11035
  createContext as createContext13,
10984
- useCallback as useCallback15,
11036
+ useCallback as useCallback16,
10985
11037
  useContext as useContext13,
10986
11038
  useEffect as useEffect26,
10987
11039
  useState as useState23
10988
11040
  } from "react";
10989
- import { useConfig as useConfig3 } from "wagmi";
11041
+ import { useConfig as useConfig4 } from "wagmi";
10990
11042
 
10991
11043
  // src/consts/quote.ts
10992
11044
  import { ClientError } from "@funkit/utils";
@@ -11077,9 +11129,9 @@ var FunkitQuoteContext = createContext13({
11077
11129
  function FunkitQuoteProvider({ children }) {
11078
11130
  const { checkoutItem, setCheckout } = useCheckoutContext();
11079
11131
  const funkitConfig = useFunkitConfig();
11080
- const wagmiConfig = useConfig3();
11132
+ const wagmiConfig = useConfig4();
11081
11133
  const { walletAddress, logoutSymbol, loginType, userInfo } = useGeneralWallet();
11082
- const enableFrogProxyServer = useFlag(FlagKey12.EnableFrogProxyServer);
11134
+ const enableFrogProxyServer = useFlag(FlagKey13.EnableFrogProxyServer);
11083
11135
  const { getDirectExecutionInfo } = useCheckoutDirectExecution();
11084
11136
  const [latestQuote, setLatestQuote] = useState23(null);
11085
11137
  const [isQuoting, setIsQuoting] = useState23(false);
@@ -11095,7 +11147,7 @@ function FunkitQuoteProvider({ children }) {
11095
11147
  });
11096
11148
  }
11097
11149
  }, [logoutSymbol]);
11098
- const setQuoteProgress = useCallback15(
11150
+ const setQuoteProgress = useCallback16(
11099
11151
  (state) => {
11100
11152
  setQuoteErrorMessage(state.quoteErrorMessage);
11101
11153
  setQuoteStepMessage(state.quoteStepMessage);
@@ -11103,7 +11155,7 @@ function FunkitQuoteProvider({ children }) {
11103
11155
  },
11104
11156
  []
11105
11157
  );
11106
- const clearCheckoutQuoteMessages = useCallback15(() => {
11158
+ const clearCheckoutQuoteMessages = useCallback16(() => {
11107
11159
  setQuoteStepMessage("");
11108
11160
  setQuoteErrorMessage("");
11109
11161
  }, []);
@@ -11538,7 +11590,7 @@ function useWithdrawalAssets(config) {
11538
11590
  },
11539
11591
  true
11540
11592
  );
11541
- const excludedTokenStr = useFlag(FlagKey13.WithdrawalExcludeTokens);
11593
+ const excludedTokenStr = useFlag(FlagKey14.WithdrawalExcludeTokens);
11542
11594
  const excludedTokens = safeJSONParse(excludedTokenStr);
11543
11595
  if (excludedTokens) {
11544
11596
  for (const chainIdStr of Object.keys(excludedTokens)) {
@@ -11630,26 +11682,60 @@ function getErrorNotification(quoteErrorObject, withdrawalError, targetAssetFetc
11630
11682
  }
11631
11683
  return null;
11632
11684
  }
11685
+ function useShowConnectWallet({
11686
+ config
11687
+ }) {
11688
+ const withdrawalWalletAddress = "wallet" in config ? config.wallet.address() : "0x";
11689
+ const { isConnected, address: connectedWalletAddress } = useAccount3();
11690
+ const showUseConnected = !config.disableConnectedWallet && isConnected && connectedWalletAddress && withdrawalWalletAddress.toLowerCase() !== connectedWalletAddress.toLowerCase();
11691
+ useEffect27(() => {
11692
+ logger.debug("withdrawalContent:showUseConnected", {
11693
+ isConnected,
11694
+ connectedWalletAddress,
11695
+ withdrawalWalletAddress
11696
+ });
11697
+ }, [isConnected, connectedWalletAddress, withdrawalWalletAddress]);
11698
+ return showUseConnected;
11699
+ }
11700
+ function isValidWithdrawal({
11701
+ config,
11702
+ checkoutConfig,
11703
+ withdrawalUSD,
11704
+ recipientAddress,
11705
+ selectedChainId,
11706
+ sourceTokenBalance
11707
+ }) {
11708
+ const isValidAddress = isAddressSupported(recipientAddress);
11709
+ const isValidAddressAndChain = isAddressCompatibleWithChain(
11710
+ recipientAddress,
11711
+ selectedChainId
11712
+ );
11713
+ const minWithdrawalUsd = config.getMinWithdrawalUSD?.({
11714
+ tokenAddress: checkoutConfig?.sourceTokenAddress || "0x",
11715
+ tokenChainId: checkoutConfig?.sourceChain || "0"
11716
+ }) || 0.01;
11717
+ const isWithdrawAmountTooLow = Number(withdrawalUSD) < minWithdrawalUsd;
11718
+ const isWithdrawAmountValid = !isWithdrawAmountTooLow && Number(withdrawalUSD) <= sourceTokenBalance;
11719
+ return {
11720
+ isValidAddress,
11721
+ isValidAddressAndChain,
11722
+ isWithdrawAmountTooLow,
11723
+ isWithdrawAmountValid,
11724
+ minWithdrawalUsd
11725
+ };
11726
+ }
11633
11727
  var WithdrawContent = ({
11634
11728
  onContinue,
11635
11729
  config,
11636
11730
  withdrawalItem
11637
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: refactor this later
11638
11731
  }) => {
11639
11732
  const sourceTokenBalance = withdrawalItem?.withdrawalSourceTokenBalance?.() || 0;
11640
11733
  const token = config.sourceTokenSymbol;
11641
11734
  const [confirmingQuote, setConfirmingQuote] = useState26(false);
11642
11735
  const [recipientAddress, setRecipientAddress] = useState26("");
11643
- const [withdrawalUSD, setAmount] = useState26("");
11736
+ const [withdrawalUSD, setWithdrawalUSD] = useState26("");
11644
11737
  const [debouncedUSD] = useDebounce(withdrawalUSD, 500);
11645
- const [addressInputTouched, setAddressInputTouched] = useState26(false);
11646
- const [amountInputTouched, setAmountInputTouched] = useState26(false);
11647
- const {
11648
- updateCustomRecipient,
11649
- updateTargetAsset,
11650
- updateWithdrawalSourceAssetAmount,
11651
- updateTargetAssetAmount
11652
- } = useCheckoutContext();
11738
+ const { updateTargetAsset, updateTargetAssetAmount } = useCheckoutContext();
11653
11739
  const {
11654
11740
  assets,
11655
11741
  selectedChainId,
@@ -11685,7 +11771,6 @@ var WithdrawContent = ({
11685
11771
  iconSrc: getTokenIconUrl(selectedToken)
11686
11772
  });
11687
11773
  }, [targetAssetInfo, updateTargetAsset, selectedChainId, selectedToken]);
11688
- const withdrawalWalletAddress = "wallet" in config ? config.wallet.address() : "0x";
11689
11774
  const {
11690
11775
  isLoading: isQuoteLoading,
11691
11776
  data: quote,
@@ -11701,11 +11786,6 @@ var WithdrawContent = ({
11701
11786
  symbol: selectedToken,
11702
11787
  targetAsset: targetAssetInfo?.address
11703
11788
  });
11704
- const {
11705
- isConnected,
11706
- connector,
11707
- address: connectedWalletAddress
11708
- } = useAccount3();
11709
11789
  const { handleWithdrawal, isWithdrawing, withdrawalError } = useWithdrawal({
11710
11790
  config,
11711
11791
  withdrawalItem,
@@ -11720,62 +11800,24 @@ var WithdrawContent = ({
11720
11800
  }, 150);
11721
11801
  }
11722
11802
  }, [isPlaceholderData, confirmingQuote, isQuoteLoading, isInstantQuoting]);
11723
- const showCheckAddressAlert = false;
11724
- const wallets = usePreparedWalletConnectors();
11725
11803
  const { apiKey } = useFunkitConfig();
11726
- const connectedWalletIconUrl = wallets.find(
11727
- (wallet) => wallet.id === connector?.id
11728
- )?.iconUrl;
11729
11804
  const normalizedSelectedToken = selectedToken.toUpperCase();
11730
- const isValidAddress = isAddressSupported(recipientAddress);
11731
- const isValidAddressAndChain = isAddressCompatibleWithChain(
11732
- recipientAddress,
11733
- selectedChainId
11734
- );
11735
11805
  const { checkoutItem } = useCheckoutContext();
11736
11806
  const checkoutConfig = checkoutItem?.initSettings.config;
11737
- const minWithdrawalUsd = config.getMinWithdrawalUSD?.({
11738
- tokenAddress: checkoutConfig?.sourceTokenAddress || "0x",
11739
- tokenChainId: checkoutConfig?.sourceChain || "0"
11740
- }) || 0.01;
11741
- const isWithdrawAmountTooLow = Number(withdrawalUSD) < minWithdrawalUsd;
11742
- const isWithdrawAmountValid = !isWithdrawAmountTooLow && Number(withdrawalUSD) <= sourceTokenBalance;
11743
- const showUseConnected = !config.disableConnectedWallet && isConnected && connectedWalletAddress && withdrawalWalletAddress.toLowerCase() !== connectedWalletAddress.toLowerCase();
11744
- useEffect27(() => {
11745
- logger.debug("withdrawalContent:showUseConnected", {
11746
- isConnected,
11747
- connectedWalletAddress,
11748
- withdrawalWalletAddress
11749
- });
11750
- }, [isConnected, connectedWalletAddress, withdrawalWalletAddress]);
11751
- const handleUseConnectedClick = () => {
11752
- if (!connectedWalletAddress) {
11753
- return;
11754
- }
11755
- setRecipientAddress(connectedWalletAddress);
11756
- updateCustomRecipient(connectedWalletAddress);
11757
- };
11758
- const handleAddressChange = (e) => {
11759
- setRecipientAddress(e.target.value);
11760
- updateCustomRecipient(e.target.value);
11761
- };
11762
- const handleAddressBlur = () => {
11763
- if (!isValidAddress && recipientAddress !== "") {
11764
- setAddressInputTouched(true);
11765
- }
11766
- };
11767
- const handleAmountChange = (e) => {
11768
- if (!amountInputTouched) {
11769
- setAmountInputTouched(true);
11770
- }
11771
- setAmount(e.target.value);
11772
- const withdrawalUSD2 = Number.parseFloat(e.target.value);
11773
- updateWithdrawalSourceAssetAmount(withdrawalUSD2);
11774
- };
11775
- const setMaxAmount = () => {
11776
- setAmount(sourceTokenBalance.toString());
11777
- updateWithdrawalSourceAssetAmount(sourceTokenBalance);
11778
- };
11807
+ const {
11808
+ isValidAddress,
11809
+ isValidAddressAndChain,
11810
+ isWithdrawAmountValid,
11811
+ isWithdrawAmountTooLow,
11812
+ minWithdrawalUsd
11813
+ } = isValidWithdrawal({
11814
+ config,
11815
+ checkoutConfig,
11816
+ withdrawalUSD,
11817
+ sourceTokenBalance,
11818
+ recipientAddress,
11819
+ selectedChainId
11820
+ });
11779
11821
  const handleSubmit = () => {
11780
11822
  if (isPlaceholderData || isQuoteLoading && isInstantQuoting) {
11781
11823
  setConfirmingQuote(true);
@@ -11799,13 +11841,16 @@ var WithdrawContent = ({
11799
11841
  quote: quote.finalEstimation
11800
11842
  });
11801
11843
  };
11802
- const { data: addressAssessment, isLoading: isCheckingAddressRisk } = useWithdrawalRisk(apiKey, recipientAddress);
11844
+ const { data: isRisky, isLoading: isCheckingAddressRisk } = useWithdrawalRisk(
11845
+ apiKey,
11846
+ recipientAddress
11847
+ );
11803
11848
  const isReceipentBlacklisted = isBlacklistedWithdrawAddress(recipientAddress);
11804
11849
  const bottomSectionRef = useBottomSectionRef("withdrawal");
11805
- const showAddressError = addressInputTouched && !isValidAddress && recipientAddress !== "";
11806
- const showAmountError = amountInputTouched && withdrawalUSD !== "" && !isWithdrawAmountValid;
11850
+ const hasAddressError = !isValidAddress && recipientAddress !== "";
11851
+ const hasAmountError = withdrawalUSD !== "" && !isWithdrawAmountValid;
11807
11852
  function computeCanContinue() {
11808
- return recipientAddress && withdrawalUSD && token && selectedChainId && (quote || isPlaceholderData || isQuoteLoading && isInstantQuoting) && !showAmountError && !showAddressError && !isCheckingAddressRisk && !addressAssessment && !isReceipentBlacklisted && isValidAddressAndChain && withdrawalUSD === debouncedUSD;
11853
+ return recipientAddress && withdrawalUSD && token && selectedChainId && (quote || isPlaceholderData || isQuoteLoading && isInstantQuoting) && !hasAmountError && !hasAddressError && !isCheckingAddressRisk && !isRisky && !isReceipentBlacklisted && isValidAddressAndChain && withdrawalUSD === debouncedUSD;
11809
11854
  }
11810
11855
  const canContinue = computeCanContinue();
11811
11856
  const { totalImpactUsd, gasUsd } = extractRelayFeeInfo(
@@ -11824,7 +11869,7 @@ var WithdrawContent = ({
11824
11869
  isValidAddressAndChain,
11825
11870
  selectedChainName
11826
11871
  });
11827
- const errorNotification = useMemo13(
11872
+ const errorNotification = useMemo14(
11828
11873
  () => getErrorNotification(
11829
11874
  quoteErrorObject,
11830
11875
  withdrawalError,
@@ -11832,7 +11877,129 @@ var WithdrawContent = ({
11832
11877
  ),
11833
11878
  [quoteErrorObject, targetAssetFetchError, withdrawalError]
11834
11879
  );
11835
- return /* @__PURE__ */ React67.createElement(Box, { id: "withdrawal-flow", display: "flex", flexDirection: "column", gap: "18" }, /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "8" }, /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, "Recipient address"), /* @__PURE__ */ React67.createElement(
11880
+ const isRiskyAddress = !!isRisky && !isCheckingAddressRisk;
11881
+ return /* @__PURE__ */ React67.createElement(Box, { id: "withdrawal-flow", display: "flex", flexDirection: "column", gap: "18" }, /* @__PURE__ */ React67.createElement(
11882
+ WithdrawRecipientAddress,
11883
+ {
11884
+ recipientAddress,
11885
+ config,
11886
+ setRecipientAddress,
11887
+ selectedToken,
11888
+ selectedChainId,
11889
+ isRiskyAddress
11890
+ }
11891
+ ), /* @__PURE__ */ React67.createElement(
11892
+ WithdrawAmountInput,
11893
+ {
11894
+ config,
11895
+ withdrawalUSD,
11896
+ setWithdrawalUSD,
11897
+ isWithdrawAmountTooLow,
11898
+ isWithdrawAmountValid,
11899
+ minWithdrawalUsd,
11900
+ sourceTokenBalance
11901
+ }
11902
+ ), /* @__PURE__ */ React67.createElement(
11903
+ TokenAndChainDropdown,
11904
+ {
11905
+ isLoading: false,
11906
+ assets,
11907
+ selectedToken,
11908
+ onTokenSelected: handleTokenChange,
11909
+ selectedChainId,
11910
+ onChainSelected: handleChainChange,
11911
+ tokenLabel: "Receive token",
11912
+ chainLabel: "Receive chain",
11913
+ alwaysOpenToTop: true,
11914
+ maxTokenDropdownHeight: 195,
11915
+ hideNewTokenBadge: true
11916
+ }
11917
+ ), /* @__PURE__ */ React67.createElement(Box, { display: "flex", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React67.createElement(Text, { size: "12" }, "You will receive"), isQuoteLoading && !isInstantQuoting ? /* @__PURE__ */ React67.createElement(FunSkeletonBlock, { height: "14", width: "54" }) : /* @__PURE__ */ React67.createElement(
11918
+ Box,
11919
+ {
11920
+ display: "flex",
11921
+ alignItems: "center",
11922
+ justifyContent: "center",
11923
+ gap: "8"
11924
+ },
11925
+ quoteEnabled ? /* @__PURE__ */ React67.createElement(React67.Fragment, null, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, formatCryptoAndStringify2(receiveAmountCrypto, selectedToken)), /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(receiveAmountFiatTotal))) : /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, NO_DATA_VALUE)
11926
+ )), /* @__PURE__ */ React67.createElement(
11927
+ PaymentFeesSummary,
11928
+ {
11929
+ fallbackFees: FALLBACK_FEES,
11930
+ isLoading: isQuoteLoading && !isInstantQuoting,
11931
+ quote: quote?.finalEstimation,
11932
+ key: `${isQuoteLoading}`,
11933
+ valuesNotAvailable: !quoteEnabled
11934
+ }
11935
+ ), normalizedSelectedToken === "USDC.E" && /* @__PURE__ */ React67.createElement(
11936
+ InfoBanner,
11937
+ {
11938
+ message: "<strong>USDCe is not widely supported by most exchanges.</strong><br />Sending USDCe to an unsupported platform may result in a permanent loss of funds. Always double-check token compatibility before transferring.",
11939
+ type: "warning"
11940
+ }
11941
+ ), bottomSectionRef && createPortal2(
11942
+ /* @__PURE__ */ React67.createElement(
11943
+ Dialog.BottomBar,
11944
+ {
11945
+ topSection: /* @__PURE__ */ React67.createElement(
11946
+ FunNotification,
11947
+ {
11948
+ description: errorNotification?.message,
11949
+ type: errorNotification?.type,
11950
+ isVisible: !!errorNotification
11951
+ }
11952
+ ),
11953
+ actionButtonProps: {
11954
+ title: withdrawButtonText,
11955
+ isDisabled: !canContinue || isWithdrawing,
11956
+ isLoading: isWithdrawing || confirmingQuote,
11957
+ onClick: handleSubmit
11958
+ }
11959
+ }
11960
+ ),
11961
+ bottomSectionRef
11962
+ ));
11963
+ };
11964
+ function WithdrawRecipientAddress({
11965
+ config,
11966
+ recipientAddress,
11967
+ setRecipientAddress,
11968
+ selectedChainId,
11969
+ selectedToken,
11970
+ isRiskyAddress
11971
+ }) {
11972
+ const isValidAddress = isAddressSupported(recipientAddress);
11973
+ const hasAddressError = !isValidAddress && recipientAddress !== "";
11974
+ const [addressInputTouched, setAddressInputTouched] = useState26(false);
11975
+ const { updateCustomRecipient } = useCheckoutContext();
11976
+ const { connector, address: connectedWalletAddress } = useAccount3();
11977
+ const wallets = usePreparedWalletConnectors();
11978
+ const showCheckAddressAlert = false;
11979
+ const connectedWalletIconUrl = wallets.find(
11980
+ (wallet) => wallet.id === connector?.id
11981
+ )?.iconUrl;
11982
+ const showUseConnected = useShowConnectWallet({
11983
+ config
11984
+ });
11985
+ const handleUseConnectedClick = () => {
11986
+ if (!connectedWalletAddress) {
11987
+ return;
11988
+ }
11989
+ setRecipientAddress(connectedWalletAddress);
11990
+ updateCustomRecipient(connectedWalletAddress);
11991
+ };
11992
+ const handleAddressChange = (e) => {
11993
+ setRecipientAddress(e.target.value);
11994
+ updateCustomRecipient(e.target.value);
11995
+ };
11996
+ const handleAddressBlur = () => {
11997
+ if (hasAddressError) {
11998
+ setAddressInputTouched(true);
11999
+ }
12000
+ };
12001
+ const showAddressError = addressInputTouched && hasAddressError;
12002
+ return /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "8" }, /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, "Recipient address"), /* @__PURE__ */ React67.createElement(
11836
12003
  FunInput,
11837
12004
  {
11838
12005
  allowMultiline: true,
@@ -11879,7 +12046,7 @@ var WithdrawContent = ({
11879
12046
  )
11880
12047
  ) : void 0
11881
12048
  }
11882
- )), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, addressAssessment && !isCheckingAddressRisk && /* @__PURE__ */ React67.createElement(
12049
+ )), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, isRiskyAddress && /* @__PURE__ */ React67.createElement(
11883
12050
  InfoBanner,
11884
12051
  {
11885
12052
  message: "This wallet address cannot be used due to restrictions.",
@@ -11891,7 +12058,33 @@ var WithdrawContent = ({
11891
12058
  message: getAlertMessage(selectedChainId, selectedToken),
11892
12059
  type: "alert"
11893
12060
  }
11894
- ))), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, "Amount"), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(
12061
+ )));
12062
+ }
12063
+ function WithdrawAmountInput({
12064
+ withdrawalUSD,
12065
+ setWithdrawalUSD,
12066
+ sourceTokenBalance,
12067
+ isWithdrawAmountTooLow,
12068
+ isWithdrawAmountValid,
12069
+ minWithdrawalUsd,
12070
+ config
12071
+ }) {
12072
+ const { updateWithdrawalSourceAssetAmount } = useCheckoutContext();
12073
+ const [amountInputTouched, setAmountInputTouched] = useState26(false);
12074
+ const handleAmountChange = (e) => {
12075
+ if (!amountInputTouched) {
12076
+ setAmountInputTouched(true);
12077
+ }
12078
+ setWithdrawalUSD(e.target.value);
12079
+ const withdrawalUSD2 = Number.parseFloat(e.target.value);
12080
+ updateWithdrawalSourceAssetAmount(withdrawalUSD2);
12081
+ };
12082
+ const setMaxAmount = () => {
12083
+ setWithdrawalUSD(sourceTokenBalance.toString());
12084
+ updateWithdrawalSourceAssetAmount(sourceTokenBalance);
12085
+ };
12086
+ const showAmountError = amountInputTouched && withdrawalUSD !== "" && !isWithdrawAmountValid;
12087
+ return /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, "Amount"), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(
11895
12088
  FunInput,
11896
12089
  {
11897
12090
  value: withdrawalUSD,
@@ -11925,80 +12118,8 @@ var WithdrawContent = ({
11925
12118
  )
11926
12119
  )
11927
12120
  }
11928
- ), /* @__PURE__ */ React67.createElement(
11929
- Box,
11930
- {
11931
- display: "flex",
11932
- alignItems: "center",
11933
- justifyContent: "space-between"
11934
- },
11935
- /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(Number(withdrawalUSD))),
11936
- sourceTokenBalance && /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, "Balance:", " ", formatCurrencyAndStringify3(sourceTokenBalance).replace(
11937
- "$",
11938
- ""
11939
- ), " ", config.sourceTokenSymbol)
11940
- ))), /* @__PURE__ */ React67.createElement(
11941
- TokenAndChainDropdown,
11942
- {
11943
- isLoading: false,
11944
- assets,
11945
- selectedToken,
11946
- onTokenSelected: handleTokenChange,
11947
- selectedChainId,
11948
- onChainSelected: handleChainChange,
11949
- tokenLabel: "Receive token",
11950
- chainLabel: "Receive chain",
11951
- alwaysOpenToTop: true,
11952
- maxTokenDropdownHeight: 195,
11953
- hideNewTokenBadge: true
11954
- }
11955
- ), /* @__PURE__ */ React67.createElement(Box, { display: "flex", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React67.createElement(Text, { size: "12" }, "You will receive"), isQuoteLoading && !isInstantQuoting ? /* @__PURE__ */ React67.createElement(FunSkeletonBlock, { height: "14", width: "54" }) : /* @__PURE__ */ React67.createElement(
11956
- Box,
11957
- {
11958
- display: "flex",
11959
- alignItems: "center",
11960
- justifyContent: "center",
11961
- gap: "8"
11962
- },
11963
- quoteEnabled ? /* @__PURE__ */ React67.createElement(React67.Fragment, null, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, formatCryptoAndStringify2(receiveAmountCrypto, selectedToken)), /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(receiveAmountFiatTotal))) : /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, NO_DATA_VALUE)
11964
- )), /* @__PURE__ */ React67.createElement(
11965
- PaymentFeesSummary,
11966
- {
11967
- fallbackFees: FALLBACK_FEES,
11968
- isLoading: isQuoteLoading && !isInstantQuoting,
11969
- quote: quote?.finalEstimation,
11970
- key: `${isQuoteLoading}`,
11971
- valuesNotAvailable: !quoteEnabled
11972
- }
11973
- ), normalizedSelectedToken === "USDC.E" && /* @__PURE__ */ React67.createElement(
11974
- InfoBanner,
11975
- {
11976
- message: "<strong>USDCe is not widely supported by most exchanges.</strong><br />Sending USDCe to an unsupported platform may result in a permanent loss of funds. Always double-check token compatibility before transferring.",
11977
- type: "warning"
11978
- }
11979
- ), bottomSectionRef && createPortal2(
11980
- /* @__PURE__ */ React67.createElement(
11981
- Dialog.BottomBar,
11982
- {
11983
- topSection: /* @__PURE__ */ React67.createElement(
11984
- FunNotification,
11985
- {
11986
- description: errorNotification?.message,
11987
- type: errorNotification?.type,
11988
- isVisible: !!errorNotification
11989
- }
11990
- ),
11991
- actionButtonProps: {
11992
- title: withdrawButtonText,
11993
- isDisabled: !canContinue || isWithdrawing,
11994
- isLoading: isWithdrawing || confirmingQuote,
11995
- onClick: handleSubmit
11996
- }
11997
- }
11998
- ),
11999
- bottomSectionRef
12000
- ));
12001
- };
12121
+ ), /* @__PURE__ */ React67.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "space-between" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(Number(withdrawalUSD))), sourceTokenBalance && /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, "Balance:", " ", formatCurrencyAndStringify3(sourceTokenBalance).replace("$", ""), " ", config.sourceTokenSymbol))));
12122
+ }
12002
12123
 
12003
12124
  // src/modals/WithdrwalModal/WithdrawalNotification.tsx
12004
12125
  import React202 from "react";
@@ -12070,7 +12191,7 @@ import { useAccount as useAccount6 } from "wagmi";
12070
12191
  // src/components/FunPayments/FunPaymentMethods.tsx
12071
12192
  import { BridgeCustomerStatus as BridgeCustomerStatus3 } from "@funkit/api-base";
12072
12193
  import {
12073
- FlagKey as FlagKey16,
12194
+ FlagKey as FlagKey17,
12074
12195
  formatCurrencyAndStringify as formatCurrencyAndStringify4,
12075
12196
  formatSecondsToReadableForm,
12076
12197
  safeParseJson as safeParseJson4
@@ -12157,9 +12278,9 @@ var isSoftRejected = (customer) => customer && isKycUninitialized(customer.statu
12157
12278
  var FIAT_PROCESSING_TIME = "1-2 business days";
12158
12279
 
12159
12280
  // src/hooks/useCheckoutTimeEstimate.ts
12160
- import { FlagKey as FlagKey14 } from "@funkit/utils";
12281
+ import { FlagKey as FlagKey15 } from "@funkit/utils";
12161
12282
  function useCheckoutTimeEstimate(originalTimeEstimationMs, paymentMethod = "card" /* CARD */, bypassFlag = false) {
12162
- const timeEstimatesJsonString = useFlag(FlagKey14.CheckoutTimeEstimateOverrides);
12283
+ const timeEstimatesJsonString = useFlag(FlagKey15.CheckoutTimeEstimateOverrides);
12163
12284
  const timeEstimates = safeJSONParse(
12164
12285
  timeEstimatesJsonString
12165
12286
  );
@@ -12176,9 +12297,9 @@ import {
12176
12297
  getBridgeKycLink
12177
12298
  } from "@funkit/api-base";
12178
12299
  import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO9 } from "@funkit/chains";
12179
- import { FlagKey as FlagKey15 } from "@funkit/utils";
12300
+ import { FlagKey as FlagKey16 } from "@funkit/utils";
12180
12301
  import { useQuery as useQuery10, useQueryClient } from "@tanstack/react-query";
12181
- import { useCallback as useCallback16 } from "react";
12302
+ import { useCallback as useCallback17 } from "react";
12182
12303
  var sepaCountryCode = [
12183
12304
  // EU countries that are part of SEPA
12184
12305
  "AT",
@@ -12256,8 +12377,8 @@ function useFiatEnabled() {
12256
12377
  const isEuSepaUser = sepaCountryCode.includes(
12257
12378
  userIpInfo?.alpha2 || "PLACEHOLDER"
12258
12379
  );
12259
- const isTokenTransferEnabled = useFlag(FlagKey15.EnableTokenTransfer);
12260
- const isFiatEnabled = useFlag(FlagKey15.EnableFiatDeposit);
12380
+ const isTokenTransferEnabled = useFlag(FlagKey16.EnableTokenTransfer);
12381
+ const isFiatEnabled = useFlag(FlagKey16.EnableFiatDeposit);
12261
12382
  return isEuSepaUser && isTokenTransferEnabled && isFiatEnabled;
12262
12383
  }
12263
12384
  function useFrogAccounts() {
@@ -12277,13 +12398,13 @@ function useFrogAccounts() {
12277
12398
  function useClearFrogAccountsCache() {
12278
12399
  const { walletAddress } = useGeneralWallet();
12279
12400
  const queryClient = useQueryClient();
12280
- const clearFrogAccounts = useCallback16(() => {
12401
+ const clearFrogAccounts = useCallback17(() => {
12281
12402
  queryClient.removeQueries({
12282
12403
  queryKey: ["frogSubAccounts", walletAddress],
12283
12404
  exact: true
12284
12405
  });
12285
12406
  }, [queryClient, walletAddress]);
12286
- const clearVirtualFiatAccounts = useCallback16(() => {
12407
+ const clearVirtualFiatAccounts = useCallback17(() => {
12287
12408
  queryClient.removeQueries({
12288
12409
  queryKey: ["useVirtualFiatAccounts"]
12289
12410
  });
@@ -12358,7 +12479,7 @@ function useCreateVirtualBankAccount() {
12358
12479
  const chainName = targetChainId && FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO9[targetChainId]?.name?.toLowerCase();
12359
12480
  const subAccountId = allFiatAccounts?.bridgeCustomer?.id;
12360
12481
  const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
12361
- const handleCreateVirtualFiatAccount = useCallback16(async () => {
12482
+ const handleCreateVirtualFiatAccount = useCallback17(async () => {
12362
12483
  try {
12363
12484
  if (!subAccountId || !chainName) {
12364
12485
  return {
@@ -12408,7 +12529,7 @@ import {
12408
12529
  FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS as FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS3,
12409
12530
  FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO10
12410
12531
  } from "@funkit/chains";
12411
- import { useMemo as useMemo14 } from "react";
12532
+ import { useMemo as useMemo15 } from "react";
12412
12533
 
12413
12534
  // src/hooks/useWalletAssets.ts
12414
12535
  import {
@@ -12585,7 +12706,7 @@ var processWalletAssets = (walletAssets, targetChain) => {
12585
12706
  };
12586
12707
  function useWalletAssetHoldings(targetChain) {
12587
12708
  const { walletAssets, isLoading, totalWalletAssetsUsd } = useWalletAssets();
12588
- const processedAssets = useMemo14(
12709
+ const processedAssets = useMemo15(
12589
12710
  () => processWalletAssets(walletAssets, targetChain),
12590
12711
  [targetChain, walletAssets]
12591
12712
  );
@@ -13833,16 +13954,6 @@ var CardPaymentMethodItem = ({
13833
13954
  valueIcon: customValueIcon ?? /* @__PURE__ */ React74.createElement(CombinedCreditCardOptionsIcon, null),
13834
13955
  onClick,
13835
13956
  isDisabled: !isClickable,
13836
- badge: /* @__PURE__ */ React74.createElement(
13837
- FunBadge,
13838
- {
13839
- background: "approvedBadgeBackground",
13840
- borderColor: "approvedBadgeBorder",
13841
- color: "approvedBadgeText",
13842
- hasShine: true
13843
- },
13844
- "NEW"
13845
- ),
13846
13957
  disclaimerText: `$50,000 limit \u2022 ${formatSecondsToReadableForm(timeEstimate, true)}`
13847
13958
  }
13848
13959
  );
@@ -13855,12 +13966,12 @@ var TransferPaymentMethodItem = ({
13855
13966
  paymentIcon
13856
13967
  }) => {
13857
13968
  const { textCustomizations } = useFunkitConfig();
13858
- const enableBitcoin = useFlag(FlagKey16.EnableBitcoin);
13859
- const bannerJson = useFlag(FlagKey16.NewTokenAssetSelectionBanner);
13969
+ const enableBitcoin = useFlag(FlagKey17.EnableBitcoin);
13970
+ const bannerJson = useFlag(FlagKey17.NewTokenAssetSelectionBanner);
13860
13971
  const bannerData = safeParseJson4(bannerJson);
13861
13972
  const addBitcoinToSourceChainsAndAssetsMiddleware = enableBitcoin ? addBitcoinToSourceChainsAndAssets : void 0;
13862
13973
  const depositAssetsJson = useFlag(
13863
- FlagKey16.TokenTransferSourceChainsAndAssets,
13974
+ FlagKey17.TokenTransferSourceChainsAndAssets,
13864
13975
  void 0,
13865
13976
  addBitcoinToSourceChainsAndAssetsMiddleware
13866
13977
  );
@@ -13977,16 +14088,6 @@ function PayPalPaymentMethodItem({
13977
14088
  keyText: "Deposit with PayPal",
13978
14089
  onClick,
13979
14090
  isDisabled: !isClickable,
13980
- badge: /* @__PURE__ */ React74.createElement(
13981
- FunBadge,
13982
- {
13983
- background: "approvedBadgeBackground",
13984
- borderColor: "approvedBadgeBorder",
13985
- color: "approvedBadgeText",
13986
- hasShine: true
13987
- },
13988
- "NEW"
13989
- ),
13990
14091
  disclaimerText: "$10,000 limit \u2022 5 min"
13991
14092
  }
13992
14093
  );
@@ -14078,7 +14179,7 @@ var BankIconActive = ({ size = 20 }) => {
14078
14179
 
14079
14180
  // src/components/FunConnectOptions/FunSignInStep.tsx
14080
14181
  import { groupBy, isMobile as isMobile8, isSafari as isSafari3, redirectInMobile as redirectInMobile2 } from "@funkit/utils";
14081
- import React191, { Fragment as Fragment2, useCallback as useCallback42, useMemo as useMemo37, useState as useState62 } from "react";
14182
+ import React191, { Fragment as Fragment2, useCallback as useCallback43, useMemo as useMemo38, useState as useState62 } from "react";
14082
14183
 
14083
14184
  // src/providers/walletConnectDeepLink.ts
14084
14185
  var storageKey = "WALLETCONNECT_DEEPLINK_CHOICE";
@@ -14496,10 +14597,10 @@ var SocialsIcon = () => {
14496
14597
  };
14497
14598
 
14498
14599
  // src/components/FunConnectOptions/FunConnectOptions.tsx
14499
- import React190, { useCallback as useCallback41, useMemo as useMemo36, useState as useState61 } from "react";
14600
+ import React190, { useCallback as useCallback42, useMemo as useMemo37, useState as useState61 } from "react";
14500
14601
 
14501
14602
  // src/hooks/useAnimatedNavigation.ts
14502
- import { useCallback as useCallback17, useState as useState28 } from "react";
14603
+ import { useCallback as useCallback18, useState as useState28 } from "react";
14503
14604
 
14504
14605
  // src/css/modalTransitionStyles.css.ts
14505
14606
  var animateContentInClass = "stgjxl2";
@@ -14527,7 +14628,7 @@ function useAnimatedNavigation(callback) {
14527
14628
  const [animateOut, setAnimateOut] = useState28(false);
14528
14629
  const [isSkipped, setIsSkipped] = useState28(false);
14529
14630
  const [isReversed, setIsReversed] = useState28(false);
14530
- const navigateTo = useCallback17(
14631
+ const navigateTo = useCallback18(
14531
14632
  (page, params = {}) => {
14532
14633
  setIsSkipped(!!params.skip);
14533
14634
  if (params.skip) {
@@ -14542,7 +14643,7 @@ function useAnimatedNavigation(callback) {
14542
14643
  },
14543
14644
  [callback]
14544
14645
  );
14545
- const animate = useCallback17(
14646
+ const animate = useCallback18(
14546
14647
  (callback2, params = {}) => {
14547
14648
  setIsSkipped(!!params.skip);
14548
14649
  if (params.skip) {
@@ -14570,17 +14671,17 @@ import React180, { useEffect as useEffect45, useRef as useRef23, useState as use
14570
14671
 
14571
14672
  // src/modals/CheckoutModal/stepTransition.ts
14572
14673
  import {
14573
- useCallback as useCallback37,
14674
+ useCallback as useCallback38,
14574
14675
  useRef as useRef22,
14575
14676
  useState as useState57
14576
14677
  } from "react";
14577
14678
 
14578
14679
  // src/hooks/useCheckoutQuoteNotification.ts
14579
- import { useMemo as useMemo15 } from "react";
14680
+ import { useMemo as useMemo16 } from "react";
14580
14681
  function useCheckoutQuoteNotification() {
14581
14682
  const { clearCheckoutQuoteMessages } = useQuoteContext();
14582
14683
  const { quoteErrorMessage, quoteStepMessage } = useQuoteContext();
14583
- const quoteNotification = useMemo15(() => {
14684
+ const quoteNotification = useMemo16(() => {
14584
14685
  if (quoteErrorMessage !== "") {
14585
14686
  return {
14586
14687
  messageType: "error",
@@ -14864,7 +14965,7 @@ import {
14864
14965
  BridgeCustomerStatus as BridgeCustomerStatus4
14865
14966
  } from "@funkit/api-base";
14866
14967
  import { exhaustiveCheck as exhaustiveCheck4 } from "@funkit/utils";
14867
- import React92, { useCallback as useCallback18, useState as useState30 } from "react";
14968
+ import React92, { useCallback as useCallback19, useState as useState30 } from "react";
14868
14969
  import { createPortal as createPortal4 } from "react-dom";
14869
14970
 
14870
14971
  // src/components/Icons/HomeIcon.tsx
@@ -15466,7 +15567,7 @@ var VerifyAccountScreen = ({
15466
15567
  const kycUninitialized = !isSoftRejected2 && customerStatus && isKycUninitialized(customerStatus);
15467
15568
  const canStartKyc = kycUninitialized || isSoftRejected2;
15468
15569
  const handleCreateVirtualFiatAccount = useCreateVirtualBankAccount();
15469
- const onClick = useCallback18(async () => {
15570
+ const onClick = useCallback19(async () => {
15470
15571
  if (customerStatus === BridgeCustomerStatus4.ACTIVE) {
15471
15572
  setCreating(true);
15472
15573
  const result = await handleCreateVirtualFiatAccount();
@@ -15998,7 +16099,7 @@ function getCheckoutCompletionTime(checkout) {
15998
16099
  }
15999
16100
 
16000
16101
  // src/components/FunCheckoutHistory/FunCheckoutHistoryDetail.tsx
16001
- import React108, { useCallback as useCallback20, useMemo as useMemo16, useState as useState32 } from "react";
16102
+ import React108, { useCallback as useCallback21, useMemo as useMemo17, useState as useState32 } from "react";
16002
16103
  import { createPortal as createPortal6 } from "react-dom";
16003
16104
 
16004
16105
  // src/components/HelpAlert/HelpAlert.tsx
@@ -16014,7 +16115,7 @@ var HelpAlert = ({ onHelp: onHelp2 }) => {
16014
16115
  };
16015
16116
 
16016
16117
  // src/hooks/useFunListeners.ts
16017
- import { useCallback as useCallback19, useEffect as useEffect28, useRef as useRef13 } from "react";
16118
+ import { useCallback as useCallback20, useEffect as useEffect28, useRef as useRef13 } from "react";
16018
16119
  function useCheckoutHistoryListener(activate = true, singleDepositAddr) {
16019
16120
  const activeIntervalRef = useRef13();
16020
16121
  const { startCheckoutHistoryListener, stopCheckoutHistoryListener } = useCheckoutHistoryContext();
@@ -16037,21 +16138,21 @@ function useSIWFarcasterListener(channelToken) {
16037
16138
  const { getFcConnectionStatus, handleFunkitWeb2Login } = useFunkitWeb2Login();
16038
16139
  const intervalRef = useRef13();
16039
16140
  const [refreshSymbol, triggerRefreshSymbol] = useSymbolRefresh_default();
16040
- const startStatusListener = useCallback19(() => {
16141
+ const startStatusListener = useCallback20(() => {
16041
16142
  clearInterval(intervalRef.current);
16042
16143
  triggerRefreshSymbol();
16043
16144
  intervalRef.current = setInterval(() => {
16044
16145
  triggerRefreshSymbol();
16045
16146
  }, FARCASTER_STATUS_INTERVAL);
16046
16147
  }, [triggerRefreshSymbol]);
16047
- const stopStatusListener = useCallback19(() => {
16148
+ const stopStatusListener = useCallback20(() => {
16048
16149
  clearInterval(intervalRef.current);
16049
16150
  }, []);
16050
16151
  useEffect28(() => {
16051
16152
  startStatusListener();
16052
16153
  return () => stopStatusListener();
16053
16154
  }, []);
16054
- const check = useCallback19(async () => {
16155
+ const check = useCallback20(async () => {
16055
16156
  if (!channelToken || !initalChainid) {
16056
16157
  return;
16057
16158
  }
@@ -16365,7 +16466,7 @@ function FunCheckoutHistoryDetail({
16365
16466
  useCheckoutHistoryListener(isProcessing, checkoutHistoryInfo?.depositAddr);
16366
16467
  useWalletAssets({ enableRefetchInterval: isProcessing || isCompleted });
16367
16468
  const { beginCheckout } = useFunkitCheckout({});
16368
- const handleNewCheckout = useCallback20(
16469
+ const handleNewCheckout = useCallback21(
16369
16470
  (fromCheckout) => {
16370
16471
  onClose({ isNewDeposit: true });
16371
16472
  const historicalCheckout = fromCheckout.clientMetadata;
@@ -16384,7 +16485,7 @@ function FunCheckoutHistoryDetail({
16384
16485
  isActiveCheckout
16385
16486
  ]
16386
16487
  );
16387
- const primaryButtonProps = useMemo16(() => {
16488
+ const primaryButtonProps = useMemo17(() => {
16388
16489
  if (!isCheckoutLoaded) {
16389
16490
  return void 0;
16390
16491
  }
@@ -16473,7 +16574,7 @@ var CheckoutAlert = ({ state, refundState, onHelp: onHelp2 }) => {
16473
16574
 
16474
16575
  // src/components/FunCheckoutHistory/FunCheckoutHistoryHelp.tsx
16475
16576
  import { sendSupportMessage } from "@funkit/api-base";
16476
- import React112, { useEffect as useEffect30, useMemo as useMemo17, useRef as useRef15, useState as useState33 } from "react";
16577
+ import React112, { useEffect as useEffect30, useMemo as useMemo18, useRef as useRef15, useState as useState33 } from "react";
16477
16578
  import { createPortal as createPortal7 } from "react-dom";
16478
16579
 
16479
16580
  // src/components/FunInput/FunTextAreaInput.tsx
@@ -16650,7 +16751,7 @@ function FunCheckoutHistoryHelp({
16650
16751
  );
16651
16752
  const [descriptionInput, setDescriptionInput] = useState33("");
16652
16753
  const [errorMessage, setErrorMessage] = useState33();
16653
- const isEmailInputValid = useMemo17(() => {
16754
+ const isEmailInputValid = useMemo18(() => {
16654
16755
  return validateEmailString(emailInput);
16655
16756
  }, [emailInput]);
16656
16757
  const [processStage, setProcessStage] = useState33(
@@ -16842,7 +16943,7 @@ import {
16842
16943
  formatTimestamp as formatTimestamp2,
16843
16944
  isTokenEquivalent as isTokenEquivalent3
16844
16945
  } from "@funkit/utils";
16845
- import React113, { useCallback as useCallback21, useMemo as useMemo18, useRef as useRef16, useState as useState34 } from "react";
16946
+ import React113, { useCallback as useCallback22, useMemo as useMemo19, useRef as useRef16, useState as useState34 } from "react";
16846
16947
  import { createPortal as createPortal8 } from "react-dom";
16847
16948
 
16848
16949
  // src/hooks/useReceiveAmountLabel.ts
@@ -16871,7 +16972,7 @@ function FunDirectExecutionHistoryDetail({
16871
16972
  const bottomSectionRef = document.getElementById(bottomBarId);
16872
16973
  const { checkoutItem } = useCheckoutContext();
16873
16974
  const { beginCheckout } = useFunkitCheckout({});
16874
- const handleNewCheckout = useCallback21(
16975
+ const handleNewCheckout = useCallback22(
16875
16976
  (fromCheckout) => {
16876
16977
  onClose({ isNewDeposit: true });
16877
16978
  const historicalCheckout = fromCheckout.clientMetadata;
@@ -16891,7 +16992,7 @@ function FunDirectExecutionHistoryDetail({
16891
16992
  ]
16892
16993
  );
16893
16994
  const isWithdrawal = directExecution?.clientMetadata?.isWithdrawal;
16894
- const buttonProps = useMemo18(() => {
16995
+ const buttonProps = useMemo19(() => {
16895
16996
  if (!isLoaded) {
16896
16997
  return void 0;
16897
16998
  }
@@ -17114,11 +17215,11 @@ function FunCheckoutHistoryContent({
17114
17215
  }
17115
17216
 
17116
17217
  // src/modals/CheckoutModal/CheckoutComplete/useLogCheckoutCompletion.ts
17117
- import { useCallback as useCallback22 } from "react";
17218
+ import { useCallback as useCallback23 } from "react";
17118
17219
  function useLogCheckoutCompletion() {
17119
17220
  const { latestQuote } = useQuoteContext();
17120
17221
  const { checkoutItem } = useCheckoutContext();
17121
- const logCheckoutCompletion = useCallback22(
17222
+ const logCheckoutCompletion = useCallback23(
17122
17223
  (depositAddress) => {
17123
17224
  if (depositAddress) {
17124
17225
  logger.log("checkoutFundingCompleted", {
@@ -17214,7 +17315,7 @@ function CheckoutHelp({
17214
17315
  }
17215
17316
 
17216
17317
  // src/modals/CheckoutModal/ConfirmationStep/ConfirmationStep.tsx
17217
- import React131, { useEffect as useEffect36, useMemo as useMemo23, useState as useState43 } from "react";
17318
+ import React131, { useEffect as useEffect36, useMemo as useMemo24, useState as useState43 } from "react";
17218
17319
  import { createPortal as createPortal10 } from "react-dom";
17219
17320
 
17220
17321
  // src/providers/UserPresenceContext.tsx
@@ -17255,7 +17356,7 @@ import { DirectExecutionType as DirectExecutionType2 } from "@funkit/api-base";
17255
17356
 
17256
17357
  // src/components/FunInfoBanner/FunInfoBanner.tsx
17257
17358
  import React119 from "react";
17258
- import { FlagKey as FlagKey17, safeParseJson as safeParseJson5 } from "@funkit/utils";
17359
+ import { FlagKey as FlagKey18, safeParseJson as safeParseJson5 } from "@funkit/utils";
17259
17360
 
17260
17361
  // src/components/FunInfoBanner/EphemeralInfoBanner.tsx
17261
17362
  import React118, { useState as useState36 } from "react";
@@ -17293,7 +17394,7 @@ var EphemeralInfoBanner = ({
17293
17394
 
17294
17395
  // src/components/FunInfoBanner/FunInfoBanner.tsx
17295
17396
  var FunInfoBanner = () => {
17296
- const bannerJson = useFlag(FlagKey17.ShowInfoBanner);
17397
+ const bannerJson = useFlag(FlagKey18.ShowInfoBanner);
17297
17398
  const bannerData = safeParseJson5(bannerJson);
17298
17399
  if (!bannerData || !bannerData.message) {
17299
17400
  return null;
@@ -17311,12 +17412,12 @@ var FunInfoBanner = () => {
17311
17412
  // src/components/FunTransactionSummary/PaymentAmountSummary.tsx
17312
17413
  import {
17313
17414
  formatCurrencyAndStringify as formatCurrencyAndStringify5,
17314
- isTokenAddressEquivalent as isTokenAddressEquivalent4,
17415
+ isTokenAddressEquivalent as isTokenAddressEquivalent5,
17315
17416
  isTokenEquivalent as isTokenEquivalent4
17316
17417
  } from "@funkit/utils";
17317
17418
  import NumberFlow from "@number-flow/react";
17318
17419
  import { motion as motion7 } from "motion/react";
17319
- import React121, { useMemo as useMemo20 } from "react";
17420
+ import React121, { useMemo as useMemo21 } from "react";
17320
17421
 
17321
17422
  // src/consts/design.ts
17322
17423
  var mapFontLineHeightToNumberFlowHeight = {
@@ -17329,7 +17430,7 @@ var defaultTransition = "all 150ms cubic-bezier(0.3, 0, 0.06, 1)";
17329
17430
  // src/components/FunAssetAvatar/FunAssetAvatar.tsx
17330
17431
  import { isNotNullish as isNotNullish5 } from "@funkit/utils";
17331
17432
  import clsx16 from "clsx";
17332
- import React120, { useMemo as useMemo19 } from "react";
17433
+ import React120, { useMemo as useMemo20 } from "react";
17333
17434
 
17334
17435
  // src/components/FunAssetAvatar/FunAssetAvatar.css.ts
17335
17436
  var chainContainerStyle = "uwrdc22 _1rsrm2f19 _1rsrm2fa _1rsrm2f4 _1rsrm2f4i";
@@ -17349,7 +17450,7 @@ function FunAssetAvatar({
17349
17450
  largeChainIcon = false
17350
17451
  }) {
17351
17452
  const chainMetadata = chainMetadataById[Number.parseInt((chainId || "").toString())] || null;
17352
- const finalAssetSrc = useMemo19(() => {
17453
+ const finalAssetSrc = useMemo20(() => {
17353
17454
  const normalizedTicker = assetTicker?.toUpperCase() || "";
17354
17455
  const defaultSrc = ASSET_LOGO_SRCS[normalizedTicker];
17355
17456
  if (prioritizeDefaults) {
@@ -17449,7 +17550,7 @@ function PaymentAmountSummary({
17449
17550
  })
17450
17551
  });
17451
17552
  const sourceTokenAmount = quote?.finalPaymentTokenAmount ? Number.parseFloat(quote.finalPaymentTokenAmount) : void 0;
17452
- const paymentTokenUsdAmount = useMemo20(() => {
17553
+ const paymentTokenUsdAmount = useMemo21(() => {
17453
17554
  if (!quote) {
17454
17555
  return void 0;
17455
17556
  }
@@ -17457,7 +17558,7 @@ function PaymentAmountSummary({
17457
17558
  quote.baseQuote.estSubtotalUsd + Number.parseFloat(quote.finalPaymentFeeUsd) - Number.parseFloat(quote.finalSpreadUsd)
17458
17559
  );
17459
17560
  }, [quote]);
17460
- const receiveTokenUsdAmount = useMemo20(() => {
17561
+ const receiveTokenUsdAmount = useMemo21(() => {
17461
17562
  if (!quote) {
17462
17563
  return void 0;
17463
17564
  }
@@ -17471,7 +17572,7 @@ function PaymentAmountSummary({
17471
17572
  const sourceChainId = sourceAssetInfo?.chainId;
17472
17573
  const areSameChains = sourceChainId === targetChainId;
17473
17574
  const sourceIcon = sourceAssetInfo?.iconSrc ?? void 0;
17474
- const isSameTokenAddress = isTokenAddressEquivalent4({
17575
+ const isSameTokenAddress = isTokenAddressEquivalent5({
17475
17576
  firstTokenAddress: sourceTokenAddress,
17476
17577
  secondTokenAddress: targetTokenAddress
17477
17578
  });
@@ -17748,7 +17849,7 @@ var DirectExecutionBrokerageAndCardAlert = () => {
17748
17849
  };
17749
17850
 
17750
17851
  // src/modals/CheckoutModal/ConfirmationStep/DisclaimerText.tsx
17751
- import React126, { useMemo as useMemo21 } from "react";
17852
+ import React126, { useMemo as useMemo22 } from "react";
17752
17853
  var DisclaimerText = ({
17753
17854
  continueText,
17754
17855
  isCardPayment,
@@ -17783,7 +17884,7 @@ var DisclaimerText = ({
17783
17884
  ), ", and the ", /* @__PURE__ */ React126.createElement(FunLinkButton, { href: "https://morpho.org/", inline: true, text: "terms" }), " applicable to third-party Morpho vaults", ".") : /* @__PURE__ */ React126.createElement(React126.Fragment, null, showCardDisclaimer && `${cardDisclaimer} `, "By clicking on ", continueText, ", you agree to our", " ", /* @__PURE__ */ React126.createElement(FunLinkButton, { href: FUN_TERMS_URL, inline: true, text: "terms" }), ".");
17784
17885
  };
17785
17886
  function useCardDisclaimer(checkoutItem, finalConvertedAssetName) {
17786
- const cardDisclaimer = useMemo21(() => {
17887
+ const cardDisclaimer = useMemo22(() => {
17787
17888
  if (!checkoutItem || !finalConvertedAssetName) {
17788
17889
  return null;
17789
17890
  }
@@ -17828,11 +17929,11 @@ import { useState as useState38 } from "react";
17828
17929
  import { useEffect as useEffect33, useState as useState37 } from "react";
17829
17930
 
17830
17931
  // src/hooks/useCheckoutAccountBalanceTransfer.ts
17831
- import { useCallback as useCallback23 } from "react";
17932
+ import { useCallback as useCallback24 } from "react";
17832
17933
  function useCheckoutAccountBalanceTransfer() {
17833
17934
  const { checkoutItem } = useCheckoutContext();
17834
17935
  const { funWallet, funWalletAuth } = useGeneralWallet();
17835
- const generateCheckoutTransferOpItems = useCallback23(
17936
+ const generateCheckoutTransferOpItems = useCallback24(
17836
17937
  async (toAddress, tokenAmount) => {
17837
17938
  if (checkoutItem?.selectedSourceAssetInfo?.chainId) {
17838
17939
  const newConfig = getFunkitEnvForCheckoutEstimation({
@@ -18042,7 +18143,7 @@ import React128, { useState as useState39 } from "react";
18042
18143
  // src/modals/CheckoutModal/ConfirmationStep/useAccountBalanceTransfer.ts
18043
18144
  import { getPaymasterDataForCheckoutSponsoredTransfer } from "@funkit/api-base";
18044
18145
  import { ERC20_ABI, USDT_ABI } from "@funkit/core";
18045
- import { useCallback as useCallback24 } from "react";
18146
+ import { useCallback as useCallback25 } from "react";
18046
18147
  import { useAccount as useAccount5, useSendTransaction, useWriteContract } from "wagmi";
18047
18148
 
18048
18149
  // src/utils/isMainnetUsdt.ts
@@ -18066,7 +18167,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18066
18167
  const { sendTransactionAsync } = useSendTransaction();
18067
18168
  const { cancelCheckout, checkoutItem } = useCheckoutContext();
18068
18169
  const { latestQuote } = useQuoteContext();
18069
- const handleWeb3AccountBalancePostCheckout = useCallback24(
18170
+ const handleWeb3AccountBalancePostCheckout = useCallback25(
18070
18171
  async (depositAddress) => {
18071
18172
  if (!latestQuote?.baseQuote.estTotalFromAmountBaseUnit) {
18072
18173
  return;
@@ -18172,7 +18273,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
18172
18273
  function useWeb2AccountBalancePostCheckout(apiKey) {
18173
18274
  const { latestQuote } = useQuoteContext();
18174
18275
  const { generateCheckoutTransferOpItems } = useCheckoutAccountBalanceTransfer();
18175
- const handleWeb2AccountBalancePostCheckout = useCallback24(
18276
+ const handleWeb2AccountBalancePostCheckout = useCallback25(
18176
18277
  async (depositAddress) => {
18177
18278
  const { rFunWallet, rFunWalletAuth, transferOp, envConfig } = await generateCheckoutTransferOpItems(
18178
18279
  depositAddress,
@@ -18221,7 +18322,7 @@ function useAccountBalancePostCheckout(setPostCheckoutStepMessage, apiKey) {
18221
18322
  const { loginType } = useGeneralWallet();
18222
18323
  const handleWeb2AccountBalancePostCheckout = useWeb2AccountBalancePostCheckout(apiKey);
18223
18324
  const handleWeb3AccountBalancePostCheckout = useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage);
18224
- const handleAccountBalancePostCheckout = useCallback24(
18325
+ const handleAccountBalancePostCheckout = useCallback25(
18225
18326
  async (depositAddress) => {
18226
18327
  if (loginType === "web2" /* Web2 */) {
18227
18328
  await handleWeb2AccountBalancePostCheckout(depositAddress);
@@ -18372,15 +18473,15 @@ function usePostCheckout({
18372
18473
  }
18373
18474
 
18374
18475
  // src/modals/CheckoutModal/ConfirmationStep/useQuoteRefresh.ts
18375
- import { useCallback as useCallback27, useEffect as useEffect35, useMemo as useMemo22, useRef as useRef18, useState as useState42 } from "react";
18476
+ import { useCallback as useCallback28, useEffect as useEffect35, useMemo as useMemo23, useRef as useRef18, useState as useState42 } from "react";
18376
18477
 
18377
18478
  // src/hooks/useCountdown.tsx
18378
18479
  import React130 from "react";
18379
- import { useCallback as useCallback26, useState as useState41 } from "react";
18480
+ import { useCallback as useCallback27, useState as useState41 } from "react";
18380
18481
 
18381
18482
  // src/components/FunCountdown/FunCountdown.tsx
18382
18483
  import { noop as noop7 } from "@funkit/utils";
18383
- import React129, { useCallback as useCallback25, useEffect as useEffect34, useState as useState40 } from "react";
18484
+ import React129, { useCallback as useCallback26, useEffect as useEffect34, useState as useState40 } from "react";
18384
18485
 
18385
18486
  // src/components/FunCountdown/FunCountdown.css.ts
18386
18487
  var backgroundRing = "_1t0bc111 _1rsrm2f1l4";
@@ -18416,7 +18517,7 @@ var FunCountdown = ({
18416
18517
  const onCountdownEndedOnce = useEffectEvent(onCountdownEnded);
18417
18518
  const onBeforeCountdownEndsOnce = useEffectEvent(onBeforeCountdownEnds);
18418
18519
  const onCountdownLastSecondOnce = useEffectEvent(onCountdownLastSecond);
18419
- const handleInterval = useCallback25(() => {
18520
+ const handleInterval = useCallback26(() => {
18420
18521
  if (isPaused) {
18421
18522
  return;
18422
18523
  }
@@ -18534,7 +18635,7 @@ function useCountdown({
18534
18635
  }) {
18535
18636
  const [countdownKey, setCountdownKey] = useState41(0);
18536
18637
  const [isLastSecond, setIsLastSecond] = useState41(false);
18537
- const restartCountdown = useCallback26(() => {
18638
+ const restartCountdown = useCallback27(() => {
18538
18639
  setIsLastSecond(false);
18539
18640
  setCountdownKey((key) => key + 1);
18540
18641
  }, []);
@@ -18589,7 +18690,7 @@ function useQuoteRefresh({
18589
18690
  preloadedQuoteRef.current = data;
18590
18691
  }
18591
18692
  );
18592
- const preloadQuote = useCallback27(() => {
18693
+ const preloadQuote = useCallback28(() => {
18593
18694
  if (!isSourceAssetConfirming) {
18594
18695
  onSourceAssetConfirmed(true);
18595
18696
  }
@@ -18603,7 +18704,7 @@ function useQuoteRefresh({
18603
18704
  onBeforeCountdownEnds: preloadQuote,
18604
18705
  onCountdownEnded: () => refreshQuote()
18605
18706
  });
18606
- const refreshQuote = useCallback27(
18707
+ const refreshQuote = useCallback28(
18607
18708
  async (forceHardRefresh = false) => {
18608
18709
  if (isOnHold) {
18609
18710
  setIsPendingRefresh(true);
@@ -18635,7 +18736,7 @@ function useQuoteRefresh({
18635
18736
  },
18636
18737
  [isOnHold, restartCountdown, setCheckoutQuote, triggerAssetConfirm]
18637
18738
  );
18638
- const quoteError = useMemo22(() => {
18739
+ const quoteError = useMemo23(() => {
18639
18740
  if (quoteErrorMessage && !isQuoting) {
18640
18741
  return {
18641
18742
  message: quoteErrorMessage,
@@ -18773,7 +18874,7 @@ function ConfirmationStep({
18773
18874
  refreshIntervalSeconds: directExecutionType === DirectExecutionType2.RELAY ? RELAY_ESTIMATE_REFRESH_INTERVAL_SEC : DEFAULT_ESTIMATE_REFRESH_INTERVAL_SEC
18774
18875
  })
18775
18876
  );
18776
- const error = useMemo23(() => {
18877
+ const error = useMemo24(() => {
18777
18878
  if (!isInitialQuoting && moonpayAmountCheck?.isInvalid) {
18778
18879
  return {
18779
18880
  message: moonpayAmountCheck.message,
@@ -18788,7 +18889,7 @@ function ConfirmationStep({
18788
18889
  quoteError,
18789
18890
  isInitialQuoting
18790
18891
  ]);
18791
- const stepMessage = useMemo23(() => {
18892
+ const stepMessage = useMemo24(() => {
18792
18893
  if (initialQuoteStep) {
18793
18894
  return initialQuoteStep;
18794
18895
  }
@@ -18845,7 +18946,7 @@ function ConfirmationStep({
18845
18946
  const isStepLoading = isInitialQuoting || isContinuing || isRefreshing;
18846
18947
  const uiCustomizations = funkitConfig.uiCustomizations?.confirmationScreen;
18847
18948
  const customRecipient = checkoutItem?.initSettings.config.customRecipient;
18848
- const showKatanaBridgeAlert = useMemo23(() => {
18949
+ const showKatanaBridgeAlert = useMemo24(() => {
18849
18950
  const relayQuoteMetadata = latestQuote?.baseQuote?.metadata;
18850
18951
  if (!relayQuoteMetadata) {
18851
18952
  return false;
@@ -18859,7 +18960,7 @@ function ConfirmationStep({
18859
18960
  // https://fun-xyz.slack.com/archives/C08PVUDA1M2/p1752179735981389?thread_ts=1752176009.628309&cid=C08PVUDA1M2
18860
18961
  swapImpact + appFeePercent > KATANA_BRIDGE_ALERT_THRESHOLD_PERCENT;
18861
18962
  }, [funkitConfig.apiKey, latestQuote, checkoutItem]);
18862
- const showDirectExecutionNotificationBanner = useMemo23(() => {
18963
+ const showDirectExecutionNotificationBanner = useMemo24(() => {
18863
18964
  const isRelayEnabled = checkoutItem !== null && getIsRelayEnabled({
18864
18965
  fromChainId: checkoutItem.selectedSourceAssetInfo.chainId,
18865
18966
  fromTokenAddress: checkoutItem.selectedSourceAssetInfo.address || "",
@@ -19111,7 +19212,7 @@ import { getMeldDefaultFiat } from "@funkit/api-base";
19111
19212
  import { useQuery as useQuery13 } from "@tanstack/react-query";
19112
19213
 
19113
19214
  // src/hooks/queries/useMeldCryptoCurrencyCode.ts
19114
- import { FlagKey as FlagKey18 } from "@funkit/utils";
19215
+ import { FlagKey as FlagKey19 } from "@funkit/utils";
19115
19216
  import { arbitrum as arbitrum3, base as base6, polygon as polygon5 } from "viem/chains";
19116
19217
  var ARB_USDC = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831".toLowerCase();
19117
19218
  var POLYGON_USDC = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359".toLowerCase();
@@ -19144,7 +19245,7 @@ function useMeldCryptoCurrencyCode() {
19144
19245
  return mappedCurrency;
19145
19246
  }
19146
19247
  function useIsMeldEnabled() {
19147
- const meldEnabled = useFlag(FlagKey18.EnableMeldPayment);
19248
+ const meldEnabled = useFlag(FlagKey19.EnableMeldPayment);
19148
19249
  const meldCurrencyCode = useMeldCryptoCurrencyCode();
19149
19250
  return meldEnabled && !!meldCurrencyCode;
19150
19251
  }
@@ -19278,13 +19379,13 @@ import {
19278
19379
  MeldServiceProvider as MeldServiceProvider2
19279
19380
  } from "@funkit/api-base";
19280
19381
  import {
19281
- FlagKey as FlagKey21,
19382
+ FlagKey as FlagKey22,
19282
19383
  formatCryptoAndStringify as formatCryptoAndStringify4,
19283
19384
  formatCurrencyAndStringify as formatCurrencyAndStringify9,
19284
19385
  isTokenEquivalent as isTokenEquivalent6,
19285
19386
  round as round4
19286
19387
  } from "@funkit/utils";
19287
- import React145, { useMemo as useMemo25 } from "react";
19388
+ import React145, { useMemo as useMemo26 } from "react";
19288
19389
 
19289
19390
  // src/components/CurrencySelector/CurrencySelector.tsx
19290
19391
  import React134 from "react";
@@ -19550,7 +19651,7 @@ var MeldProviderLabel = ({
19550
19651
  };
19551
19652
 
19552
19653
  // src/components/SourcePaymentMethodItem/SourcePaymentMethodItem.tsx
19553
- import { FlagKey as FlagKey19 } from "@funkit/utils";
19654
+ import { FlagKey as FlagKey20 } from "@funkit/utils";
19554
19655
  import clsx17 from "clsx";
19555
19656
  import { useAnimate as useAnimate2 } from "motion/react";
19556
19657
  import React139 from "react";
@@ -20155,8 +20256,8 @@ var SourcePaymentMethodItem = ({
20155
20256
  icon: /* @__PURE__ */ React139.createElement(MasterCardPillIcon, { key: "mastercard", backdropColor })
20156
20257
  }
20157
20258
  ];
20158
- const isCardEnabled = useFlag(FlagKey19.EnableCard);
20159
- const isBrokerageEnabled = useFlag(FlagKey19.EnableBrokerage);
20259
+ const isCardEnabled = useFlag(FlagKey20.EnableCard);
20260
+ const isBrokerageEnabled = useFlag(FlagKey20.EnableBrokerage);
20160
20261
  const usableAlternativeIcons = icons.filter(({ paymentMethod }) => {
20161
20262
  if (paymentMethod === type || paymentMethod === "card" /* CARD */ && !isCardEnabled || paymentMethod === "brokerage" /* BROKERAGE */ && !isBrokerageEnabled) {
20162
20263
  return false;
@@ -20578,7 +20679,7 @@ import {
20578
20679
  katanaChain
20579
20680
  } from "@funkit/chains";
20580
20681
  import { getTokenAddressBySymbolAndChainId as getTokenAddressBySymbolAndChainId2 } from "@funkit/core";
20581
- import { useCallback as useCallback28, useState as useState44 } from "react";
20682
+ import { useCallback as useCallback29, useState as useState44 } from "react";
20582
20683
  import { mainnet as mainnet7, mantle, zksync as zksync2 } from "viem/chains";
20583
20684
  var pickSourceAssetForCard = async (checkoutItem, userIpInfo) => {
20584
20685
  if (!checkoutItem?.initSettings.config.targetChain) {
@@ -20639,7 +20740,7 @@ function useUpdateCardSourceAsset() {
20639
20740
  const { checkoutItem, updateSourceAsset } = useCheckoutContext();
20640
20741
  const { userIpInfo } = useFunkitUserIp();
20641
20742
  const [isUpdating, setIsUpdating] = useState44(false);
20642
- const onSelectCard = useCallback28(async () => {
20743
+ const onSelectCard = useCallback29(async () => {
20643
20744
  setIsUpdating(true);
20644
20745
  try {
20645
20746
  const source = await pickSourceAssetForCard(checkoutItem, userIpInfo);
@@ -20762,7 +20863,7 @@ function InputAmountLayout({
20762
20863
  }
20763
20864
 
20764
20865
  // src/modals/CheckoutModal/InputAmount/QuickOptions.tsx
20765
- import { FlagKey as FlagKey20, clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify8 } from "@funkit/utils";
20866
+ import { FlagKey as FlagKey21, clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify8 } from "@funkit/utils";
20766
20867
  import React144 from "react";
20767
20868
  var USD_AMOUNT_OPTIONS_PCT = [25, 50, 75, 100];
20768
20869
  function deduplicateArray(arr) {
@@ -20770,7 +20871,7 @@ function deduplicateArray(arr) {
20770
20871
  }
20771
20872
  function useFiatAmountOptions(currency) {
20772
20873
  const isMeldEnabled = useIsMeldEnabled();
20773
- const currencyQuickOptionStr = useFlag(FlagKey20.MeldQuickOptions);
20874
+ const currencyQuickOptionStr = useFlag(FlagKey21.MeldQuickOptions);
20774
20875
  const currencyQuickOption = safeJSONParse(
20775
20876
  currencyQuickOptionStr
20776
20877
  );
@@ -20836,19 +20937,19 @@ var QuickOptions = ({
20836
20937
 
20837
20938
  // src/modals/CheckoutModal/InputAmount/useAmountInput.ts
20838
20939
  import {
20839
- useCallback as useCallback30,
20940
+ useCallback as useCallback31,
20840
20941
  useEffect as useEffect37,
20841
- useMemo as useMemo24,
20942
+ useMemo as useMemo25,
20842
20943
  useReducer as useReducer3,
20843
20944
  useRef as useRef20,
20844
20945
  useState as useState45
20845
20946
  } from "react";
20846
20947
 
20847
20948
  // src/hooks/useTextMeasurer.ts
20848
- import { useCallback as useCallback29, useRef as useRef19 } from "react";
20949
+ import { useCallback as useCallback30, useRef as useRef19 } from "react";
20849
20950
  function useTextMeasurer(inputRef) {
20850
20951
  const canvasRef = useRef19(document.createElement("canvas"));
20851
- const measureText = useCallback29(
20952
+ const measureText = useCallback30(
20852
20953
  (text, fontSize) => {
20853
20954
  if (!inputRef.current) {
20854
20955
  return void 0;
@@ -21099,7 +21200,7 @@ var MAX_WIDTH = 310;
21099
21200
  function useAmountInput(options) {
21100
21201
  const isMeldEnabled = useIsMeldEnabled();
21101
21202
  const [state, dispatch] = useReducer3(reduceState, options, initializeState);
21102
- const derivedState = useMemo24(() => getDerivedState(state), [state]);
21203
+ const derivedState = useMemo25(() => getDerivedState(state), [state]);
21103
21204
  const inputRef = useRef20(null);
21104
21205
  const { inputValue, locale } = state;
21105
21206
  const { inputDecimals, inputPrefix, placeholder } = derivedState;
@@ -21134,7 +21235,7 @@ function useAmountInput(options) {
21134
21235
  quickOptions
21135
21236
  } = options;
21136
21237
  const unitPrice = isStablecoin(checkoutConfig.targetAssetTicker) ? 1 : realUnitPrice;
21137
- const dispatchAndGetNewState = useCallback30(
21238
+ const dispatchAndGetNewState = useCallback31(
21138
21239
  (action) => {
21139
21240
  dispatch(action);
21140
21241
  return getDerivedState(reduceState(state, action));
@@ -21322,7 +21423,7 @@ function useAmountInput(options) {
21322
21423
  return () => element2.removeEventListener("beforeinput", onBeforeInput2);
21323
21424
  }
21324
21425
  }, [inputDecimals, locale]);
21325
- const onChange = useCallback30(
21426
+ const onChange = useCallback31(
21326
21427
  (event) => {
21327
21428
  dispatch({
21328
21429
  type: "setInputValue",
@@ -21357,7 +21458,7 @@ function useAmountInput(options) {
21357
21458
  });
21358
21459
  }
21359
21460
  }, [defaultAmount]);
21360
- const setFiatAmount = useCallback30(
21461
+ const setFiatAmount = useCallback31(
21361
21462
  (fiatAmount) => {
21362
21463
  const newState = dispatchAndGetNewState({
21363
21464
  type: "setFiatAmount",
@@ -21369,7 +21470,7 @@ function useAmountInput(options) {
21369
21470
  },
21370
21471
  [dispatchAndGetNewState, unitPrice]
21371
21472
  );
21372
- const toggleInputInFiat = useCallback30(() => {
21473
+ const toggleInputInFiat = useCallback31(() => {
21373
21474
  dispatch({ type: "toggleInputInFiat" });
21374
21475
  inputRef.current?.focus();
21375
21476
  }, []);
@@ -21435,7 +21536,7 @@ function InputAmountLoaded({
21435
21536
  defaultFiatCurrency,
21436
21537
  textCustomizations
21437
21538
  }) {
21438
- const maxCheckoutUsdString = useFlag(FlagKey21.MaxCheckoutUsd);
21539
+ const maxCheckoutUsdString = useFlag(FlagKey22.MaxCheckoutUsd);
21439
21540
  const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
21440
21541
  const { paymentMethod } = modalState.paymentMethodInfo;
21441
21542
  const { quote: manuallySelectedQuote } = modalState;
@@ -21495,7 +21596,7 @@ function InputAmountLoaded({
21495
21596
  selectedQuote,
21496
21597
  isSelectedQuoteUnavailable
21497
21598
  } = useMeld(manuallySelectedQuote, fiatAmount, fiatCurrency);
21498
- const error = useMemo25(() => {
21599
+ const error = useMemo26(() => {
21499
21600
  if (isCardCheckout) {
21500
21601
  if (isSelectedQuoteUnavailable) {
21501
21602
  return {
@@ -21780,7 +21881,7 @@ function YouPayYouReceiveWrapper({
21780
21881
 
21781
21882
  // src/modals/CheckoutModal/InputAmount/InputAmountLoading.tsx
21782
21883
  import { formatCryptoAndStringify as formatCryptoAndStringify5 } from "@funkit/utils";
21783
- import React146, { useMemo as useMemo26 } from "react";
21884
+ import React146, { useMemo as useMemo27 } from "react";
21784
21885
  function InputAmountLoading({
21785
21886
  modalState,
21786
21887
  sourceHoldingError,
@@ -21792,7 +21893,7 @@ function InputAmountLoading({
21792
21893
  const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
21793
21894
  const targetAssetAmount = checkoutItem?.initSettings.config.targetAssetAmount;
21794
21895
  const targetAssetTicker = checkoutItem?.initSettings.config.targetAssetTicker;
21795
- const error = useMemo26(() => {
21896
+ const error = useMemo27(() => {
21796
21897
  if (sourceHoldingError) {
21797
21898
  return {
21798
21899
  message: /* @__PURE__ */ React146.createElement("div", null, "Unable to retrieve your account balance. Please try re-linking your account.", " "),
@@ -21872,7 +21973,7 @@ function InputAmountLoading({
21872
21973
  }
21873
21974
 
21874
21975
  // src/modals/CheckoutModal/InputAmount/useAvailableBalanceForCheckout.ts
21875
- import { useMemo as useMemo27 } from "react";
21976
+ import { useMemo as useMemo28 } from "react";
21876
21977
  function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetChainId, assetSymbol) {
21877
21978
  const { data: walletAssetHoldings, isLoading: isLoadingWalletAssetHoldings } = useWalletAssetHoldings(targetChainId);
21878
21979
  const holdings = {
@@ -21882,7 +21983,7 @@ function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetC
21882
21983
  ["token_transfer" /* TOKEN_TRANSFER */]: null,
21883
21984
  ["virtual_bank" /* VIRTUAL_BANK */]: null
21884
21985
  }[paymentMethodInfo.paymentMethod];
21885
- const holdingItem = useMemo27(() => {
21986
+ const holdingItem = useMemo28(() => {
21886
21987
  if (!assetSymbol || !holdings) {
21887
21988
  return;
21888
21989
  }
@@ -22005,14 +22106,14 @@ import { mainnet as mainnet8, polygon as polygon6 } from "viem/chains";
22005
22106
  var ASSETS_LOW_VALUE_THRESHOLD2 = 0.1;
22006
22107
 
22007
22108
  // src/hooks/usePaymentSources.ts
22008
- import { FlagKey as FlagKey22, isNotNullish as isNotNullish7 } from "@funkit/utils";
22109
+ import { FlagKey as FlagKey23, isNotNullish as isNotNullish7 } from "@funkit/utils";
22009
22110
  function usePaymentMethodEnablement({
22010
22111
  checkoutConfig
22011
22112
  }) {
22012
22113
  const { apiKey } = useFunkitConfig();
22013
- const isTokenTransferFlagEnabled = useFlag(FlagKey22.EnableTokenTransfer);
22114
+ const isTokenTransferFlagEnabled = useFlag(FlagKey23.EnableTokenTransfer);
22014
22115
  const isFiatFlagEnabled = useFiatEnabled();
22015
- const isCardFlagEnabled = useFlag(FlagKey22.EnableCard);
22116
+ const isCardFlagEnabled = useFlag(FlagKey23.EnableCard);
22016
22117
  const isKatanaEarnFlowAction = isKatanaEarnFlow({ apiKey, checkoutConfig });
22017
22118
  const isUsKatanaUser = useIsUsKatanaUser();
22018
22119
  const isFiatEnabled = isFiatFlagEnabled && !isKatanaEarnFlowAction;
@@ -22390,7 +22491,7 @@ function LoadingAccount({
22390
22491
 
22391
22492
  // src/modals/CheckoutModal/MeldCurrencySelect/MeldCurrencySelect.tsx
22392
22493
  import clsx18 from "clsx";
22393
- import React151, { useMemo as useMemo28, useState as useState46 } from "react";
22494
+ import React151, { useMemo as useMemo29, useState as useState46 } from "react";
22394
22495
 
22395
22496
  // src/css/scrollStyles.css.ts
22396
22497
  var hideScrollBar = "_163ehmk0";
@@ -22446,7 +22547,7 @@ function MeldCurrencySelect({
22446
22547
  const [selectedCurrency, setSelectedCurrency] = useState46(
22447
22548
  defaultCurrency
22448
22549
  );
22449
- const filteredOptions = useMemo28(() => {
22550
+ const filteredOptions = useMemo29(() => {
22450
22551
  const newOptions = data?.filter(
22451
22552
  ({ name, currencyCode }) => currencyCode.toLowerCase().includes(query.toLowerCase()) || name.toLowerCase().includes(query.toLowerCase())
22452
22553
  ) ?? [];
@@ -22582,7 +22683,7 @@ function MeldQuotes({
22582
22683
  }
22583
22684
 
22584
22685
  // src/modals/CheckoutModal/MoonpaySetup.tsx
22585
- import React154, { useCallback as useCallback31, useMemo as useMemo30, useState as useState48 } from "react";
22686
+ import React154, { useCallback as useCallback32, useMemo as useMemo31, useState as useState48 } from "react";
22586
22687
 
22587
22688
  // src/components/FunPayments/FunPaymentMoonpayType.css.ts
22588
22689
  var mpClass = "_1kmpeyf0";
@@ -22591,7 +22692,7 @@ var stretchStyle = "_1kmpeyf1";
22591
22692
  // src/components/FunPayments/FunPaymentMoonpayType.tsx
22592
22693
  import { getMoonpayUrlSignature } from "@funkit/api-base";
22593
22694
  import { colorToHex } from "@funkit/utils";
22594
- import React153, { Fragment, useEffect as useEffect40, useMemo as useMemo29, useState as useState47 } from "react";
22695
+ import React153, { Fragment, useEffect as useEffect40, useMemo as useMemo30, useState as useState47 } from "react";
22595
22696
  var LazyMoonPayBuyWidget = (props) => {
22596
22697
  const [MoonPayBuyWidget, setMoonPayBuyWidget] = useState47(null);
22597
22698
  useEffect40(() => {
@@ -22622,7 +22723,7 @@ function FunPaymentMoonpayType({
22622
22723
  const isSandboxMode = useIsFunkitSandboxMode();
22623
22724
  const funkitConfig = useFunkitConfig();
22624
22725
  const { userInfo } = useGeneralWallet();
22625
- const currencyCode = useMemo29(() => {
22726
+ const currencyCode = useMemo30(() => {
22626
22727
  return generateMoonpayCurrencyCode(depositToken, depositTokenChainId);
22627
22728
  }, [depositToken, depositTokenChainId]);
22628
22729
  const depositTokenAmountStringFormatted = formatTokenAmountForMoonpay(
@@ -22645,7 +22746,7 @@ function FunPaymentMoonpayType({
22645
22746
  });
22646
22747
  return signature || "";
22647
22748
  };
22648
- const moonpayButtonColor = useMemo29(() => {
22749
+ const moonpayButtonColor = useMemo30(() => {
22649
22750
  const primaryButtonHex = colorToHex(activeTheme.colors.buttonPrimary);
22650
22751
  if (["#FFF", "#FFFF", "#FFFFFF", "#FFFFFFFF"].includes(primaryButtonHex)) {
22651
22752
  return void 0;
@@ -22703,12 +22804,12 @@ function MoonpaySetup({
22703
22804
  const { paymentAddress, token, tokenChainId, depositAmount } = modalState;
22704
22805
  const [isSupportedRegion, setIsSupportedRegion] = useState48(true);
22705
22806
  const [isContinueEnabled, setIsContinueEnabled] = useState48(false);
22706
- const handleOnCompleted = useCallback31(() => {
22807
+ const handleOnCompleted = useCallback32(() => {
22707
22808
  onNext({
22708
22809
  depositAddress: paymentAddress
22709
22810
  });
22710
22811
  }, [onNext, paymentAddress]);
22711
- const MoonpayWidget = useMemo30(() => {
22812
+ const MoonpayWidget = useMemo31(() => {
22712
22813
  return /* @__PURE__ */ React154.createElement(
22713
22814
  FunPaymentMoonpayType,
22714
22815
  {
@@ -22739,7 +22840,7 @@ function MoonpaySetup({
22739
22840
  // src/modals/CheckoutModal/SelectAsset.tsx
22740
22841
  import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST2 } from "@funkit/chains";
22741
22842
  import { formatCurrencyAndStringify as formatCurrencyAndStringify11, isTokenEquivalent as isTokenEquivalent7 } from "@funkit/utils";
22742
- import React157, { useEffect as useEffect41, useMemo as useMemo32, useState as useState49 } from "react";
22843
+ import React157, { useEffect as useEffect41, useMemo as useMemo33, useState as useState49 } from "react";
22743
22844
  import { createPortal as createPortal14 } from "react-dom";
22744
22845
 
22745
22846
  // src/components/Dropdown/ReceiveTokenDropdown.tsx
@@ -22835,13 +22936,13 @@ var ReceiveTokenDropdown = ({
22835
22936
 
22836
22937
  // src/components/NewTokenDepositAlert/NewTokenDepositAlert.tsx
22837
22938
  import React156 from "react";
22838
- import { FlagKey as FlagKey23, safeParseJson as safeParseJson6 } from "@funkit/utils";
22939
+ import { FlagKey as FlagKey24, safeParseJson as safeParseJson6 } from "@funkit/utils";
22839
22940
  var NewTokenDepositAlert = ({
22840
22941
  onClick
22841
22942
  }) => {
22842
- const alertJson = useFlag(FlagKey23.NewTokenAssetSelectionBanner);
22943
+ const alertJson = useFlag(FlagKey24.NewTokenAssetSelectionBanner);
22843
22944
  const alertData = safeParseJson6(alertJson);
22844
- const isTokenTransferEnabled = useFlag(FlagKey23.EnableTokenTransfer);
22945
+ const isTokenTransferEnabled = useFlag(FlagKey24.EnableTokenTransfer);
22845
22946
  if (!alertData || !isTokenTransferEnabled) {
22846
22947
  return null;
22847
22948
  }
@@ -22869,7 +22970,7 @@ var NewTokenDepositAlert = ({
22869
22970
  // src/hooks/useAllowedAssets.ts
22870
22971
  import { getAllowedAssets } from "@funkit/api-base";
22871
22972
  import { useQuery as useQuery17 } from "@tanstack/react-query";
22872
- import { useCallback as useCallback32, useMemo as useMemo31 } from "react";
22973
+ import { useCallback as useCallback33, useMemo as useMemo32 } from "react";
22873
22974
  function useAllowedAssets() {
22874
22975
  const { apiKey } = useFunkitConfig();
22875
22976
  const { checkoutItem } = useCheckoutContext();
@@ -22883,7 +22984,7 @@ function useAllowedAssets() {
22883
22984
  staleTime: 5 * 60 * 1e3,
22884
22985
  gcTime: Number.POSITIVE_INFINITY
22885
22986
  });
22886
- const tokens = useMemo31(() => {
22987
+ const tokens = useMemo32(() => {
22887
22988
  if (!allowedAssets) {
22888
22989
  return {};
22889
22990
  }
@@ -22894,7 +22995,7 @@ function useAllowedAssets() {
22894
22995
  }
22895
22996
  return ret;
22896
22997
  }, [allowedAssets]);
22897
- const isAllowed = useCallback32(
22998
+ const isAllowed = useCallback33(
22898
22999
  (chainId, tokenAddress) => {
22899
23000
  const disabledByCustomerList = checkoutItem?.initSettings.config.disabledSourceTokens?.some(
22900
23001
  (token) => {
@@ -22960,7 +23061,7 @@ function useEnrichedAccountHoldings({
22960
23061
  }) {
22961
23062
  const { isAllowed, isLoading } = useAllowedAssets();
22962
23063
  const { loginType, walletAddress } = useGeneralWallet();
22963
- const enrichedAccountHoldings = useMemo32(() => {
23064
+ const enrichedAccountHoldings = useMemo33(() => {
22964
23065
  if (!checkoutConfig) {
22965
23066
  return [];
22966
23067
  }
@@ -23000,7 +23101,7 @@ function useAssetOptions({
23000
23101
  chainId,
23001
23102
  dynamicTargetAssetCandidates
23002
23103
  }) {
23003
- const assetOptions = useMemo32(() => {
23104
+ const assetOptions = useMemo33(() => {
23004
23105
  return enrichedAccountHoldings.filter(
23005
23106
  ({ asset }) => chainId !== void 0 ? asset.pickedChainId === chainId.toString() : true
23006
23107
  ).map(({ asset, usableForCheckout }) => {
@@ -23072,7 +23173,7 @@ function useScrollToSelectedAsset(selectedChainTokenSymbol) {
23072
23173
  }
23073
23174
  function useComputeDefault(checkoutConfig, accountHoldings) {
23074
23175
  const candidates = checkoutConfig?.dynamicTargetAssetCandidates;
23075
- const defaultTargetAsset = useMemo32(() => {
23176
+ const defaultTargetAsset = useMemo33(() => {
23076
23177
  if (!candidates || candidates.length <= 1) {
23077
23178
  return {
23078
23179
  tokenAddress: checkoutConfig?.targetAsset || "0x",
@@ -23086,7 +23187,7 @@ function useComputeDefault(checkoutConfig, accountHoldings) {
23086
23187
  (token) => token.tokenSymbol === checkoutConfig?.targetAssetTicker
23087
23188
  ) ?? candidates.find((token) => token.isDefault) ?? candidates[0];
23088
23189
  }, [candidates, checkoutConfig]);
23089
- const defaultTokenSymbols = useMemo32(() => {
23190
+ const defaultTokenSymbols = useMemo33(() => {
23090
23191
  if (!checkoutConfig) {
23091
23192
  return [];
23092
23193
  }
@@ -23179,7 +23280,7 @@ function AccountSelectAsset({
23179
23280
  handleTargetAssetUpdate(tokenItem);
23180
23281
  onFinish();
23181
23282
  });
23182
- const selectedChainTokenSymbol = useMemo32(() => {
23283
+ const selectedChainTokenSymbol = useMemo33(() => {
23183
23284
  if (explicitlySelectedChainTokenSymbol) {
23184
23285
  const assetExists = assetOptions.find(
23185
23286
  ({ asset }) => asset.chainSymbolKey === explicitlySelectedChainTokenSymbol
@@ -23429,7 +23530,7 @@ function SelectAsset({
23429
23530
 
23430
23531
  // src/modals/CheckoutModal/SourceChange/SourceChange.tsx
23431
23532
  import { BridgeCustomerStatus as BridgeCustomerStatus6, MeldServiceProvider as MeldServiceProvider4 } from "@funkit/api-base";
23432
- import React159, { useCallback as useCallback33, useEffect as useEffect42, useState as useState50 } from "react";
23533
+ import React159, { useCallback as useCallback34, useEffect as useEffect42, useState as useState50 } from "react";
23433
23534
  import { createPortal as createPortal15 } from "react-dom";
23434
23535
 
23435
23536
  // src/modals/CheckoutModal/SourceChange/DefiPurchaseSection.tsx
@@ -23563,7 +23664,7 @@ function PayPal() {
23563
23664
  const isMeldEnabled = useIsMeldEnabled();
23564
23665
  const { checkoutItem } = useCheckoutContext();
23565
23666
  const isPaypalReady = false;
23566
- const onClick = useCallback33(() => {
23667
+ const onClick = useCallback34(() => {
23567
23668
  if (isMeldEnabled && isPaypalReady) {
23568
23669
  openMeldPopup(() => mutateAsync(MeldServiceProvider4.PAYPAL));
23569
23670
  } else {
@@ -23777,13 +23878,13 @@ import { createPortal as createPortal16 } from "react-dom";
23777
23878
 
23778
23879
  // src/components/CopyAddress/CopyInputDisplayedAddress.tsx
23779
23880
  import { truncateMiddleOfAddress } from "@funkit/utils";
23780
- import React160, { useCallback as useCallback35, useState as useState52 } from "react";
23881
+ import React160, { useCallback as useCallback36, useState as useState52 } from "react";
23781
23882
 
23782
23883
  // src/hooks/useCopyToClipboard.ts
23783
- import { useCallback as useCallback34, useEffect as useEffect43, useState as useState51 } from "react";
23884
+ import { useCallback as useCallback35, useEffect as useEffect43, useState as useState51 } from "react";
23784
23885
  var useCopyToClipboard = (text, delay = 1500) => {
23785
23886
  const [isCopied, setCopied] = useState51(false);
23786
- const handleCopy = useCallback34(() => {
23887
+ const handleCopy = useCallback35(() => {
23787
23888
  if (!text) {
23788
23889
  return;
23789
23890
  }
@@ -23823,7 +23924,7 @@ function CopyInputDisplayedAddress({
23823
23924
  const { handleCopy } = useCopyToClipboard(address);
23824
23925
  const [isActive, setIsActive] = useState52(null);
23825
23926
  const displayAddress = truncateAddress ? truncateMiddleOfAddress(address, 40, 24, 8) : address;
23826
- const handleClick = useCallback35(() => {
23927
+ const handleClick = useCallback36(() => {
23827
23928
  if (isActive) {
23828
23929
  return;
23829
23930
  }
@@ -23863,12 +23964,12 @@ function CopyInputDisplayedAddress({
23863
23964
  }
23864
23965
 
23865
23966
  // src/components/FunInfoBanner/ChainInfoBanners.tsx
23866
- import { FlagKey as FlagKey24, safeParseJson as safeParseJson7 } from "@funkit/utils";
23967
+ import { FlagKey as FlagKey25, safeParseJson as safeParseJson7 } from "@funkit/utils";
23867
23968
  import React161 from "react";
23868
23969
  var ChainInfoBanners = ({
23869
23970
  chainId
23870
23971
  }) => {
23871
- const chainInfoBanners = useFlag(FlagKey24.ChainInfoBanners);
23972
+ const chainInfoBanners = useFlag(FlagKey25.ChainInfoBanners);
23872
23973
  const chainInfoBannersData = safeParseJson7(chainInfoBanners) ?? {};
23873
23974
  try {
23874
23975
  const chainBanners = chainInfoBannersData[chainId] ?? [];
@@ -23912,7 +24013,7 @@ var LightningBoltIcon = ({ size = 16 }) => /* @__PURE__ */ React162.createElemen
23912
24013
 
23913
24014
  // src/components/QRCode/QRCode.tsx
23914
24015
  import QRCodeUtil from "qrcode";
23915
- import React163, { useMemo as useMemo33 } from "react";
24016
+ import React163, { useMemo as useMemo34 } from "react";
23916
24017
  var generateMatrix = (value, errorCorrectionLevel) => {
23917
24018
  const { data } = QRCodeUtil.create(value, { errorCorrectionLevel }).modules;
23918
24019
  const sqrt = Math.sqrt(data.length);
@@ -23940,7 +24041,7 @@ function QRCode({
23940
24041
  }) {
23941
24042
  const { activeTheme } = useActiveTheme();
23942
24043
  const size = sizeProp - Number.parseInt(outsidePadding, 10) * 2;
23943
- const dots = useMemo33(() => {
24044
+ const dots = useMemo34(() => {
23944
24045
  const dots2 = [];
23945
24046
  const matrix = generateMatrix(uri, ecl);
23946
24047
  const cellSize = size / matrix.length;
@@ -24484,8 +24585,8 @@ var TransferTokenDetails = ({
24484
24585
 
24485
24586
  // src/hooks/useTokenTransfer.ts
24486
24587
  import { bitcoinChain as bitcoinChain3, solanaChain as solanaChain4 } from "@funkit/chains";
24487
- import { FlagKey as FlagKey25 } from "@funkit/utils";
24488
- import { useMemo as useMemo34 } from "react";
24588
+ import { FlagKey as FlagKey26 } from "@funkit/utils";
24589
+ import { useMemo as useMemo35 } from "react";
24489
24590
  import { arbitrum as arbitrum4, base as base7, mainnet as mainnet9, optimism, polygon as polygon7 } from "viem/chains";
24490
24591
 
24491
24592
  // src/utils/transfer.ts
@@ -24508,7 +24609,7 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
24508
24609
  const { apiKey } = useFunkitConfig();
24509
24610
  const { checkoutItem } = useCheckoutContext();
24510
24611
  const enableUniversal = useFlag(
24511
- FlagKey25.EnableTokenTransferUniversalDepositAddress,
24612
+ FlagKey26.EnableTokenTransferUniversalDepositAddress,
24512
24613
  false
24513
24614
  );
24514
24615
  const estPriceImpact = usePriceImpactEstimation(
@@ -24560,7 +24661,7 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
24560
24661
  };
24561
24662
  var useMinTransferLimits = () => {
24562
24663
  const { userIpInfo } = useFunkitUserIp();
24563
- const minTransferValueJsonString = useFlag(FlagKey25.MinTokenTransferValue);
24664
+ const minTransferValueJsonString = useFlag(FlagKey26.MinTokenTransferValue);
24564
24665
  const minTransferValue = safeJSONParse(
24565
24666
  minTransferValueJsonString
24566
24667
  );
@@ -24582,7 +24683,7 @@ var useMinTransferValue = (selectedChainId) => {
24582
24683
  };
24583
24684
  var useMinTransferValues = (chainIds) => {
24584
24685
  const limits = useMinTransferLimits();
24585
- return useMemo34(() => {
24686
+ return useMemo35(() => {
24586
24687
  return chainIds.reduce(
24587
24688
  (acc, id) => {
24588
24689
  const limit = getMinTransferValueForChain(id, limits);
@@ -24725,7 +24826,7 @@ function TransferToken({
24725
24826
  color: "secondaryText",
24726
24827
  style: { whiteSpace: "nowrap", marginRight: -8 }
24727
24828
  },
24728
- `$${minTransferUsdPerChain[value]} min`
24829
+ `Min $${minTransferUsdPerChain[value]}`
24729
24830
  );
24730
24831
  };
24731
24832
  return (
@@ -24817,6 +24918,7 @@ function TransferToken({
24817
24918
  fontSize: "12",
24818
24919
  height: "14"
24819
24920
  },
24921
+ /* @__PURE__ */ React172.createElement(Text, { size: "12", color: "secondaryText" }, "Min"),
24820
24922
  /* @__PURE__ */ React172.createElement(
24821
24923
  AnimatedDollarValue,
24822
24924
  {
@@ -24824,7 +24926,6 @@ function TransferToken({
24824
24926
  dynamicMinFractionDigits: true
24825
24927
  }
24826
24928
  ),
24827
- /* @__PURE__ */ React172.createElement(Text, { size: "12", color: "secondaryText" }, "min"),
24828
24929
  /* @__PURE__ */ React172.createElement(
24829
24930
  FunTooltip,
24830
24931
  {
@@ -25304,9 +25405,9 @@ var FiatAccountDetail = {
25304
25405
 
25305
25406
  // src/modals/CheckoutModal/VirtualFiatAccount/KycIframe.tsx
25306
25407
  import { BridgeCustomerStatus as BridgeCustomerStatus7 } from "@funkit/api-base";
25307
- import React179, { useCallback as useCallback36, useEffect as useEffect44, useMemo as useMemo35, useState as useState56 } from "react";
25408
+ import React179, { useCallback as useCallback37, useEffect as useEffect44, useMemo as useMemo36, useState as useState56 } from "react";
25308
25409
  function useIframeListener(listeners) {
25309
- const handleMessage = useCallback36(
25410
+ const handleMessage = useCallback37(
25310
25411
  (event) => {
25311
25412
  switch (event.data.name) {
25312
25413
  case "load": {
@@ -25357,7 +25458,7 @@ function KycIframe({
25357
25458
  const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
25358
25459
  const { data: kycLink, isLoading: isLinkLoading } = useLoadKycLink(modalState);
25359
25460
  const [iframeLoading, setIframeLoading] = useState56(true);
25360
- const listeners = useMemo35(
25461
+ const listeners = useMemo36(
25361
25462
  () => ({
25362
25463
  load: () => {
25363
25464
  logger.info("KYC iframe loaded");
@@ -25496,7 +25597,7 @@ function initialState(checkoutItem) {
25496
25597
  function useCheckoutModalTransition(checkoutItem, onClose) {
25497
25598
  const [modalState, setModalState] = useState57(() => initialState(checkoutItem));
25498
25599
  const { clearCheckoutQuoteMessages } = useCheckoutQuoteNotification();
25499
- const onCloseWrapper = useCallback37(
25600
+ const onCloseWrapper = useCallback38(
25500
25601
  (options) => {
25501
25602
  const normalizedIsNewDeposit = !!options?.isNewDeposit;
25502
25603
  checkoutItem.initSettings.onClose?.({
@@ -25516,7 +25617,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
25516
25617
  const [stateHistory, setHistory] = useState57([]);
25517
25618
  const prevStep = useRef22(null);
25518
25619
  const hasHistoryEntry = stateHistory.length > 1;
25519
- const onNext = useCallback37(
25620
+ const onNext = useCallback38(
25520
25621
  (payload) => {
25521
25622
  if (prevStep.current === modalState.step) {
25522
25623
  return;
@@ -25549,7 +25650,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
25549
25650
  },
25550
25651
  [clearCheckoutQuoteMessages, modalState, animate, hasHistoryEntry]
25551
25652
  );
25552
- const onStepChange = useCallback37(
25653
+ const onStepChange = useCallback38(
25553
25654
  (nextState) => {
25554
25655
  if (prevStep.current === modalState.step) {
25555
25656
  return;
@@ -25562,7 +25663,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
25562
25663
  },
25563
25664
  [modalState, animate]
25564
25665
  );
25565
- const onBack = useCallback37(() => {
25666
+ const onBack = useCallback38(() => {
25566
25667
  clearCheckoutQuoteMessages();
25567
25668
  const backStepOverride = checkoutBackMap[modalState.step];
25568
25669
  const prevState = [...stateHistory].reverse().find((s) => s.step === backStepOverride) ?? stateHistory[stateHistory.length - 1];
@@ -25757,7 +25858,7 @@ var FunConnectResultStep = ({
25757
25858
 
25758
25859
  // src/components/FunConnectOptions/FunFarcasterConnectingStep.tsx
25759
25860
  import { isMobile as isMobile7, isSafari as isSafari2, redirectInMobile } from "@funkit/utils";
25760
- import React184, { useCallback as useCallback38, useEffect as useEffect47 } from "react";
25861
+ import React184, { useCallback as useCallback39, useEffect as useEffect47 } from "react";
25761
25862
 
25762
25863
  // src/components/CopyAddress/OldCopyAddressButton.tsx
25763
25864
  import React183 from "react";
@@ -25810,7 +25911,7 @@ function FunFarcasterConnectingStep({
25810
25911
  }
25811
25912
  }, [farcasterUri, mobile, safari]);
25812
25913
  useSIWFarcasterListener(farcasterToken);
25813
- const svgUrl = useCallback38(async () => {
25914
+ const svgUrl = useCallback39(async () => {
25814
25915
  return (await import("./farcaster-MF6WINBA.js")).default;
25815
25916
  }, []);
25816
25917
  const promptText = mobile ? "To sign in with Farcaster, please open the Warpcast app." : "Scan this QR code or open the link with your mobile phone.";
@@ -25858,11 +25959,11 @@ function FunFarcasterConnectingStep({
25858
25959
 
25859
25960
  // src/components/FunConnectOptions/FunWeb2ConnectingStep.tsx
25860
25961
  import { isNotNullish as isNotNullish9 } from "@funkit/utils";
25861
- import React187, { useCallback as useCallback40, useEffect as useEffect49, useState as useState60 } from "react";
25962
+ import React187, { useCallback as useCallback41, useEffect as useEffect49, useState as useState60 } from "react";
25862
25963
 
25863
25964
  // src/components/FunInput/FunTwoFaInput.tsx
25864
25965
  import React185, {
25865
- useCallback as useCallback39,
25966
+ useCallback as useCallback40,
25866
25967
  useEffect as useEffect48,
25867
25968
  useRef as useRef24,
25868
25969
  useState as useState59
@@ -25889,12 +25990,12 @@ var FunTwoFaInput = ({
25889
25990
  setFocusIndex(0);
25890
25991
  }
25891
25992
  }, [value]);
25892
- const ensureFocus = useCallback39((nextIndex) => {
25993
+ const ensureFocus = useCallback40((nextIndex) => {
25893
25994
  setTimeout(() => {
25894
25995
  inputRefs.current[nextIndex]?.focus();
25895
25996
  }, 10);
25896
25997
  }, []);
25897
- const handleBackspace = useCallback39(
25998
+ const handleBackspace = useCallback40(
25898
25999
  (index) => {
25899
26000
  if (index === maxInputLength - 1 && value.length === maxInputLength) {
25900
26001
  onChange(value.slice(0, index));
@@ -25918,7 +26019,7 @@ var FunTwoFaInput = ({
25918
26019
  },
25919
26020
  [currentLength, initialInputLength, maxInputLength, onChange, value]
25920
26021
  );
25921
- const handleChange = useCallback39(
26022
+ const handleChange = useCallback40(
25922
26023
  (changeEvent) => {
25923
26024
  changeEvent.stopPropagation();
25924
26025
  const nativeEvent = changeEvent.nativeEvent;
@@ -26087,7 +26188,7 @@ var FunWeb2ConnectingStep = ({
26087
26188
  useEffect49(() => {
26088
26189
  clearLoginError();
26089
26190
  }, []);
26090
- const handleOtpComplete = useCallback40(
26191
+ const handleOtpComplete = useCallback41(
26091
26192
  async (finalOtpInput) => {
26092
26193
  if (isNotNullish9(initialChainId)) {
26093
26194
  await handleFunkitWeb2Login({
@@ -26234,7 +26335,7 @@ function FunConnectOptions({
26234
26335
  const { loginConfig } = useFunkitConfig();
26235
26336
  const prioritizedLoginType = loginConfig.prioritizedLogin;
26236
26337
  const hasSecondarySignIn = prioritizedLoginType !== "none" && loginConfig.web2 && loginConfig.web3;
26237
- const changeStep = useCallback41((newStep) => {
26338
+ const changeStep = useCallback42((newStep) => {
26238
26339
  setStep(newStep);
26239
26340
  if (isSignIn(newStep)) {
26240
26341
  setSelectedWallet(void 0);
@@ -26242,7 +26343,7 @@ function FunConnectOptions({
26242
26343
  }
26243
26344
  }, []);
26244
26345
  const { animation, navigateTo } = useAnimatedNavigation(changeStep);
26245
- const handleBackToSignIn = useCallback41(
26346
+ const handleBackToSignIn = useCallback42(
26246
26347
  (type) => {
26247
26348
  const isPrimary = !hasSecondarySignIn || type === prioritizedLoginType;
26248
26349
  navigateTo(
@@ -26253,7 +26354,7 @@ function FunConnectOptions({
26253
26354
  [navigateTo, hasSecondarySignIn, prioritizedLoginType]
26254
26355
  );
26255
26356
  const walletConnectors = usePreparedWalletConnectors();
26256
- const onRegenerateQrCode = useCallback41(
26357
+ const onRegenerateQrCode = useCallback42(
26257
26358
  async (wallet) => {
26258
26359
  const sWallet = walletConnectors.find((w) => wallet.id === w.id);
26259
26360
  const uri = await sWallet?.getQrCodeUri?.();
@@ -26261,7 +26362,7 @@ function FunConnectOptions({
26261
26362
  },
26262
26363
  [walletConnectors]
26263
26364
  );
26264
- const connectToWallet = useCallback41(
26365
+ const connectToWallet = useCallback42(
26265
26366
  async (wallet) => {
26266
26367
  if (!wallet.ready) {
26267
26368
  return;
@@ -26280,7 +26381,7 @@ function FunConnectOptions({
26280
26381
  },
26281
26382
  [changeStep, onRegenerateQrCode]
26282
26383
  );
26283
- const handleRetry = useCallback41(() => {
26384
+ const handleRetry = useCallback42(() => {
26284
26385
  if (!selectedWallet || selectedWallet.id === FUNKIT_CONNECT_WALLET_ID) {
26285
26386
  handleBackToSignIn("web2");
26286
26387
  } else {
@@ -26328,7 +26429,7 @@ function FunConnectOptions({
26328
26429
  }
26329
26430
  }
26330
26431
  };
26331
- const stepComponent = useMemo36(() => {
26432
+ const stepComponent = useMemo37(() => {
26332
26433
  switch (step) {
26333
26434
  case 0 /* SIGNIN_PRIMARY */:
26334
26435
  case 1 /* SIGNIN_SECONDARY */:
@@ -26437,7 +26538,7 @@ var FULL_SOCIAL_LOGIN_OPTIONS = [
26437
26538
  function useEnabledSocialLogins() {
26438
26539
  const funkitConfig = useFunkitConfig();
26439
26540
  const { web2SocialLogins } = funkitConfig.loginConfig;
26440
- const enabledSocialItems = useMemo37(() => {
26541
+ const enabledSocialItems = useMemo38(() => {
26441
26542
  return FULL_SOCIAL_LOGIN_OPTIONS.filter(
26442
26543
  (oAuthItem) => !!web2SocialLogins[oAuthItem.funkitKey]
26443
26544
  );
@@ -26466,7 +26567,7 @@ function FunSignInStep({
26466
26567
  handleOauthRedirect,
26467
26568
  handleGenerateFcUri
26468
26569
  } = useFunkitWeb2Login();
26469
- const isEmailInputValid = useMemo37(() => {
26570
+ const isEmailInputValid = useMemo38(() => {
26470
26571
  return validateEmailString(emailInput);
26471
26572
  }, [emailInput]);
26472
26573
  const [emailError, setEmailError] = useState62();
@@ -26539,7 +26640,7 @@ function FunSignInStep({
26539
26640
  changeStep(3 /* PENDING_WALLET */);
26540
26641
  }
26541
26642
  };
26542
- const handleEmailSubmit = useCallback42(async () => {
26643
+ const handleEmailSubmit = useCallback43(async () => {
26543
26644
  if (!isEmailInputValid) {
26544
26645
  return;
26545
26646
  }
@@ -26878,7 +26979,7 @@ function PaymentMethodSummary({
26878
26979
 
26879
26980
  // src/modals/CheckoutModal/TransferToken/CheckoutNotifications.tsx
26880
26981
  import clsx21 from "clsx";
26881
- import React201, { useEffect as useEffect51, useMemo as useMemo38, useState as useState64 } from "react";
26982
+ import React201, { useEffect as useEffect51, useMemo as useMemo39, useState as useState64 } from "react";
26882
26983
 
26883
26984
  // src/components/FunNotificationBanner/FunNotificationShowMoreButton.tsx
26884
26985
  import React196 from "react";
@@ -26926,13 +27027,13 @@ var FunNotificationShowMoreButton = ({
26926
27027
  import {
26927
27028
  getCheckoutsByUserId as getCheckoutsByUserId2
26928
27029
  } from "@funkit/api-base";
26929
- import { FlagKey as FlagKey26 } from "@funkit/utils";
27030
+ import { FlagKey as FlagKey27 } from "@funkit/utils";
26930
27031
  import { useQuery as useQuery18 } from "@tanstack/react-query";
26931
27032
  var hasCorrectPaymentMethod = (checkout, paymentMethod) => !paymentMethod || checkout.clientMetadata.selectedPaymentMethodInfo?.paymentMethod === paymentMethod;
26932
27033
  var isRecent = (checkout, timestampCutoff) => checkout.createdTimeMs > timestampCutoff;
26933
27034
  var DEFAULT_NOTIF_CUTOFF = 7 * 24 * 60 * 60 * 1e3;
26934
27035
  function useCheckoutRefreshInterval() {
26935
- const str = useFlag(FlagKey26.CheckoutNotificationsRefreshInterval);
27036
+ const str = useFlag(FlagKey27.CheckoutNotificationsRefreshInterval);
26936
27037
  return safeJSONParse(str) || { listRefresh: 50 * 1e3, itemRefresh: 5 * 1e3 };
26937
27038
  }
26938
27039
  var useRecentCheckouts = ({
@@ -27012,7 +27113,7 @@ var showMoreButtonStyle = "_4yitd93 _1rsrm2f11m _1rsrm2f1f _1rsrm2f1c _1rsrm2fls
27012
27113
  // src/components/FunNotificationBanner/FunNotificationBannerIcon.tsx
27013
27114
  import clsx19 from "clsx";
27014
27115
  import { motion as motion12, useAnimate as useAnimate3 } from "motion/react";
27015
- import React197, { useCallback as useCallback43, useEffect as useEffect50, useRef as useRef25 } from "react";
27116
+ import React197, { useCallback as useCallback44, useEffect as useEffect50, useRef as useRef25 } from "react";
27016
27117
 
27017
27118
  // src/components/FunNotificationBanner/FunNotificationBannerIcon.css.ts
27018
27119
  var STATUS_SPINNER_BOTTOM_POSITION = -5;
@@ -27261,7 +27362,7 @@ var FunNotificationBannerIcon = ({
27261
27362
  fallbackIconUrl = FALLBACK_ASSET
27262
27363
  }) => {
27263
27364
  const [animationScope, animate] = useAnimate3();
27264
- const triggerAnimationProcessingToCompleted = useCallback43(async () => {
27365
+ const triggerAnimationProcessingToCompleted = useCallback44(async () => {
27265
27366
  const completedIconPath = document.querySelector(
27266
27367
  `.${generateAnimationPrefixClassName("icon-wrapper-completed")} path`
27267
27368
  );
@@ -27368,7 +27469,7 @@ var FunNotificationBannerIcon = ({
27368
27469
  )
27369
27470
  ]);
27370
27471
  }, [animate]);
27371
- const triggerAnimationDelayedToFailed = useCallback43(async () => {
27472
+ const triggerAnimationDelayedToFailed = useCallback44(async () => {
27372
27473
  await Promise.all([
27373
27474
  animate(
27374
27475
  `.${generateAnimationPrefixClassName("icon-wrapper")}`,
@@ -27959,19 +28060,19 @@ var CheckoutNotifications = ({
27959
28060
  }
27960
28061
  setInitialDirectExecutions(directExecutions);
27961
28062
  }, [initialDirectExecutions, directExecutions]);
27962
- const displayedDirectExecutions = useMemo38(() => {
28063
+ const displayedDirectExecutions = useMemo39(() => {
27963
28064
  if (!directExecutions) {
27964
28065
  return [];
27965
28066
  }
27966
28067
  return getUpdatedDirectExecutions(directExecutions, initialDirectExecutions).filter(({ txHash }) => !closedNotifications.includes(txHash)).slice(0, MAX_COUNT);
27967
28068
  }, [initialDirectExecutions, directExecutions, closedNotifications]);
27968
- const displayedCheckouts = useMemo38(() => {
28069
+ const displayedCheckouts = useMemo39(() => {
27969
28070
  if (!checkouts) {
27970
28071
  return [];
27971
28072
  }
27972
28073
  return getUpdatedCheckouts(checkouts, initialCheckouts).filter(({ depositAddr }) => !closedNotifications.includes(depositAddr)).slice(0, MAX_COUNT);
27973
28074
  }, [initialCheckouts, checkouts, closedNotifications]);
27974
- const combinedNotifications = useMemo38(() => {
28075
+ const combinedNotifications = useMemo39(() => {
27975
28076
  return [
27976
28077
  ...displayedDirectExecutions.map(
27977
28078
  (item) => ({ ...item, isDirectExecution: true })
@@ -27981,7 +28082,7 @@ var CheckoutNotifications = ({
27981
28082
  )
27982
28083
  ].sort((a, b) => b.createdTimeMs - a.createdTimeMs);
27983
28084
  }, [displayedDirectExecutions, displayedCheckouts]);
27984
- const displayedNotifications = useMemo38(() => {
28085
+ const displayedNotifications = useMemo39(() => {
27985
28086
  return isExpanded ? combinedNotifications : combinedNotifications.slice(0, COLLAPSED_COUNT);
27986
28087
  }, [isExpanded, combinedNotifications]);
27987
28088
  const handleNotificationClose = (id) => setClosedNotifications((prev) => [...prev, id]);
@@ -28258,7 +28359,7 @@ import React217 from "react";
28258
28359
  // src/modals/ProfileDetails/ActivityTraversalContext.tsx
28259
28360
  import React205, {
28260
28361
  createContext as createContext15,
28261
- useCallback as useCallback44,
28362
+ useCallback as useCallback45,
28262
28363
  useContext as useContext15,
28263
28364
  useState as useState66
28264
28365
  } from "react";
@@ -28279,7 +28380,7 @@ var ActivityTraversalProvider = ({
28279
28380
  const [returnViewPresets, setReturnViewPresets] = useState66(
28280
28381
  {}
28281
28382
  );
28282
- const onSelectActivity = useCallback44(
28383
+ const onSelectActivity = useCallback45(
28283
28384
  ({
28284
28385
  checkoutId,
28285
28386
  initialPage,
@@ -28297,7 +28398,7 @@ var ActivityTraversalProvider = ({
28297
28398
  },
28298
28399
  []
28299
28400
  );
28300
- const resetActivityTraversal = useCallback44(() => {
28401
+ const resetActivityTraversal = useCallback45(() => {
28301
28402
  setSelectedPurchaseId(void 0);
28302
28403
  setSelectedPurchaseInitView(void 0);
28303
28404
  setReturnView(void 0);
@@ -28317,7 +28418,7 @@ var useActivityTraversal = () => {
28317
28418
  };
28318
28419
 
28319
28420
  // src/modals/ProfileDetails/ProfileDetails.tsx
28320
- import React216, { useCallback as useCallback46, useState as useState69 } from "react";
28421
+ import React216, { useCallback as useCallback47, useState as useState69 } from "react";
28321
28422
 
28322
28423
  // src/hooks/useCheckoutModalTitle.ts
28323
28424
  function useCheckoutModalTitle(depositAddress, defaultTitle) {
@@ -28331,7 +28432,7 @@ function useCheckoutModalTitle(depositAddress, defaultTitle) {
28331
28432
  import { IN_PROGRESS_CHECKOUT_STATES as IN_PROGRESS_CHECKOUT_STATES2 } from "@funkit/api-base";
28332
28433
  import { formatTimestampToDate, fullMonthNames } from "@funkit/utils";
28333
28434
  import clsx23 from "clsx";
28334
- import React214, { useEffect as useEffect52, useMemo as useMemo39, useRef as useRef26, useState as useState68 } from "react";
28435
+ import React214, { useEffect as useEffect52, useMemo as useMemo40, useRef as useRef26, useState as useState68 } from "react";
28335
28436
  import { Virtuoso } from "react-virtuoso";
28336
28437
  import { useAccount as useAccount7 } from "wagmi";
28337
28438
 
@@ -28705,7 +28806,7 @@ var HomeTokenBalanceDisplayRowSkeleton = () => {
28705
28806
 
28706
28807
  // src/modals/ProfileDetails/FunProfileViews/Home/ProfileTitleSection.tsx
28707
28808
  import React213 from "react";
28708
- import { useCallback as useCallback45, useState as useState67 } from "react";
28809
+ import { useCallback as useCallback46, useState as useState67 } from "react";
28709
28810
 
28710
28811
  // src/components/Icons/LogoutIcon.tsx
28711
28812
  import React211 from "react";
@@ -28772,7 +28873,7 @@ var ProfileTitleSection = ({
28772
28873
  onClose
28773
28874
  }) => {
28774
28875
  const [isDisconnectExpanded, setIsDisconnectExpanded] = useState67(false);
28775
- const collapseDisconnect = useCallback45(
28876
+ const collapseDisconnect = useCallback46(
28776
28877
  () => setIsDisconnectExpanded(false),
28777
28878
  []
28778
28879
  );
@@ -28878,7 +28979,7 @@ function Home({
28878
28979
  const virtuosoDiv = virtuosoParentRef.current?.firstChild;
28879
28980
  virtuosoDiv?.classList.add(animateVirtuosoInClass);
28880
28981
  }, []);
28881
- const AssetsList = useMemo39(() => {
28982
+ const AssetsList = useMemo40(() => {
28882
28983
  if (walletAssets && !Object.keys(walletAssets).length) {
28883
28984
  return /* @__PURE__ */ React214.createElement(EmptyTabAlert, null);
28884
28985
  }
@@ -28905,7 +29006,7 @@ function Home({
28905
29006
  }
28906
29007
  ));
28907
29008
  }, [walletAssets]);
28908
- const CheckoutsList = useMemo39(() => {
29009
+ const CheckoutsList = useMemo40(() => {
28909
29010
  if (checkoutHistoryList.length === 0 && isCheckoutHistoryInited) {
28910
29011
  return /* @__PURE__ */ React214.createElement(EmptyTabAlert, null);
28911
29012
  }
@@ -29128,13 +29229,13 @@ function ProfileDetails({ onClose, defaultTab }) {
29128
29229
  const [singleActivityPage, setSingleActivityPage] = useState69(
29129
29230
  selectedPurchaseInitView ?? "detail" /* DETAIL */
29130
29231
  );
29131
- const resetView = useCallback46(() => {
29232
+ const resetView = useCallback47(() => {
29132
29233
  setView(returnView ?? 0 /* HOME */);
29133
29234
  setSelectedHomeTab("checkouts" /* CHECKOUTS */);
29134
29235
  resetActivityTraversal();
29135
29236
  }, [resetActivityTraversal, returnView]);
29136
29237
  const { animation, animate } = useAnimatedNavigation(void 0);
29137
- const onSelectActivityWrapper = useCallback46(
29238
+ const onSelectActivityWrapper = useCallback47(
29138
29239
  (activity) => {
29139
29240
  onSelectActivity({
29140
29241
  ...activity,
@@ -29171,7 +29272,7 @@ function ProfileDetails({ onClose, defaultTab }) {
29171
29272
  const isHelpPage = singleActivityPage === "help" /* HELP */;
29172
29273
  const isCheckoutDetailView = isSingleActivityView && singleActivityPage === "detail" /* DETAIL */;
29173
29274
  const withDivider = isSingleActivityView ? isHelpPage ? "scroll" : "always" : void 0;
29174
- const handleHelp = useCallback46(() => {
29275
+ const handleHelp = useCallback47(() => {
29175
29276
  animate(() => setSingleActivityPage("help" /* HELP */));
29176
29277
  }, [animate]);
29177
29278
  const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
@@ -29246,7 +29347,7 @@ function AccountModal({ onClose, open, defaultTab }) {
29246
29347
  // src/modals/ChainModal/ChainModal.tsx
29247
29348
  import { isMobile as isMobile13 } from "@funkit/utils";
29248
29349
  import React222 from "react";
29249
- import { useAccount as useAccount8, useConfig as useConfig4 } from "wagmi";
29350
+ import { useAccount as useAccount8, useConfig as useConfig5 } from "wagmi";
29250
29351
 
29251
29352
  // src/components/Icons/DisconnectSqIcon.tsx
29252
29353
  import React218 from "react";
@@ -29459,7 +29560,7 @@ var MobileScrollClassName = "_1d2b1vf1";
29459
29560
  // src/modals/ChainModal/ChainModal.tsx
29460
29561
  function ChainModal({ onClose, open }) {
29461
29562
  const { chainId } = useAccount8();
29462
- const { chains } = useConfig4();
29563
+ const { chains } = useConfig5();
29463
29564
  const { switchChain, pendingChainId } = useFunkitSwitchChains({
29464
29565
  onSettled: () => onClose()
29465
29566
  });
@@ -29578,7 +29679,7 @@ function ChainModal({ onClose, open }) {
29578
29679
  // src/modals/CheckoutModal/FunCheckoutModal.tsx
29579
29680
  import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST3 } from "@funkit/chains";
29580
29681
  import { LogLevel, initializeRelayClient } from "@funkit/fun-relay";
29581
- import { FlagKey as FlagKey27 } from "@funkit/utils";
29682
+ import { FlagKey as FlagKey28 } from "@funkit/utils";
29582
29683
  import React224, { useRef as useRef27 } from "react";
29583
29684
 
29584
29685
  // src/components/FunCheckoutBlocked/FunCheckoutBlocked.tsx
@@ -29665,7 +29766,7 @@ function FunCheckoutModalInner({
29665
29766
  const isBlocked = isUserGeoblocked || modalState.isBlocked;
29666
29767
  const hasBack = hasHistoryEntry && !disableBack;
29667
29768
  const checkoutConfig = checkoutItem.initSettings.config;
29668
- const helpButtonUrl = useFlag(FlagKey27.HelpTutorialUrl);
29769
+ const helpButtonUrl = useFlag(FlagKey28.HelpTutorialUrl);
29669
29770
  const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
29670
29771
  depositAddress: checkoutItem.depositAddress ?? void 0,
29671
29772
  isActiveCheckout: true,
@@ -29781,16 +29882,16 @@ function ConnectModal({
29781
29882
  function useModalStateValue() {
29782
29883
  const [isModalOpen, setModalOpen] = useState70(false);
29783
29884
  return {
29784
- closeModal: useCallback47(() => setModalOpen(false), []),
29885
+ closeModal: useCallback48(() => setModalOpen(false), []),
29785
29886
  isModalOpen,
29786
- openModal: useCallback47(() => setModalOpen(true), [])
29887
+ openModal: useCallback48(() => setModalOpen(true), [])
29787
29888
  };
29788
29889
  }
29789
29890
  function useModalStateValueWithProp() {
29790
29891
  const [isModalOpen, setModalOpen] = useState70(false);
29791
29892
  const [prop, setProp] = useState70(null);
29792
29893
  return {
29793
- closeModal: useCallback47(() => {
29894
+ closeModal: useCallback48(() => {
29794
29895
  setTimeout(
29795
29896
  () => {
29796
29897
  setProp(null);
@@ -29801,7 +29902,7 @@ function useModalStateValueWithProp() {
29801
29902
  }, []),
29802
29903
  isModalOpen,
29803
29904
  prop,
29804
- openModal: useCallback47((prop2) => {
29905
+ openModal: useCallback48((prop2) => {
29805
29906
  if (prop2 != null) {
29806
29907
  setProp(prop2);
29807
29908
  }
@@ -29850,7 +29951,7 @@ function ModalProvider({ children }) {
29850
29951
  } = useModalStateValueWithProp();
29851
29952
  const connectionStatus = useConnectionStatus();
29852
29953
  const { chainId } = useAccount10();
29853
- const { chains } = useConfig5();
29954
+ const { chains } = useConfig6();
29854
29955
  const isCurrentChainSupported = chains.some((chain) => chain.id === chainId);
29855
29956
  function closeModals(keepConnectModalOpen = false) {
29856
29957
  if (!keepConnectModalOpen) {
@@ -29872,7 +29973,7 @@ function ModalProvider({ children }) {
29872
29973
  return /* @__PURE__ */ React226.createElement(
29873
29974
  ModalContext.Provider,
29874
29975
  {
29875
- value: useMemo40(
29976
+ value: useMemo41(
29876
29977
  () => ({
29877
29978
  accountModalOpen,
29878
29979
  accountModalTab,
@@ -30277,7 +30378,7 @@ var FunkitWeb2Provider = ({
30277
30378
  children
30278
30379
  }) => {
30279
30380
  const { connectAsync } = useConnect2();
30280
- const { chains } = useConfig6();
30381
+ const { chains } = useConfig7();
30281
30382
  const { connectors, disconnectAsync } = useDisconnect2();
30282
30383
  const [privy, setPrivy] = useState71(null);
30283
30384
  const [privyIframeUrl, setPrivyIframeUrl] = useState71();
@@ -30288,7 +30389,7 @@ var FunkitWeb2Provider = ({
30288
30389
  const [isLoggingIn, setIsLoggingIn] = useState71(false);
30289
30390
  const [loginErrorMessage, setLoginErrorMessage] = useState71("");
30290
30391
  const [loggedInUser, setLoggedInUser] = useState71(null);
30291
- const setLoginMethodAndCache = useCallback48(
30392
+ const setLoginMethodAndCache = useCallback49(
30292
30393
  (method) => {
30293
30394
  try {
30294
30395
  setLoginMethod(method);
@@ -30312,7 +30413,7 @@ var FunkitWeb2Provider = ({
30312
30413
  setPrivyIframeUrl(newPrivy.embeddedWallet.getURL());
30313
30414
  setPrivy(newPrivy);
30314
30415
  }, [chains]);
30315
- const handleIframeMessage = useCallback48(
30416
+ const handleIframeMessage = useCallback49(
30316
30417
  (e) => {
30317
30418
  if (e.origin === PRIVY_AUTH_URL && privy) {
30318
30419
  const iframeHandler = privy.embeddedWallet.getMessageHandler();
@@ -30321,7 +30422,7 @@ var FunkitWeb2Provider = ({
30321
30422
  },
30322
30423
  [privy]
30323
30424
  );
30324
- const handleFunkitWeb2Logout = useCallback48(async () => {
30425
+ const handleFunkitWeb2Logout = useCallback49(async () => {
30325
30426
  if (privy) {
30326
30427
  logger.log("handleFunkitWeb2Logout_disconnecting_connectors", {
30327
30428
  numConnectors: connectors.length
@@ -30334,7 +30435,7 @@ var FunkitWeb2Provider = ({
30334
30435
  setLoginMethodAndCache(null);
30335
30436
  }
30336
30437
  }, [connectors, disconnectAsync, privy, setLoginMethodAndCache]);
30337
- const handleFreshPrivyLogin = useCallback48(
30438
+ const handleFreshPrivyLogin = useCallback49(
30338
30439
  async ({
30339
30440
  firstLoginCode,
30340
30441
  secondLoginCode,
@@ -30386,7 +30487,7 @@ var FunkitWeb2Provider = ({
30386
30487
  },
30387
30488
  [handleFunkitWeb2Logout, privy]
30388
30489
  );
30389
- const getPrivyUserEmbeddedWallet = useCallback48(
30490
+ const getPrivyUserEmbeddedWallet = useCallback49(
30390
30491
  async (inputPrivyUser) => {
30391
30492
  try {
30392
30493
  if (!privy || !inputPrivyUser) {
@@ -30405,7 +30506,7 @@ var FunkitWeb2Provider = ({
30405
30506
  },
30406
30507
  [privy]
30407
30508
  );
30408
- const getExistingPrivySession = useCallback48(async () => {
30509
+ const getExistingPrivySession = useCallback49(async () => {
30409
30510
  try {
30410
30511
  if (!privy) {
30411
30512
  throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
@@ -30416,7 +30517,7 @@ var FunkitWeb2Provider = ({
30416
30517
  return null;
30417
30518
  }
30418
30519
  }, [privy]);
30419
- const handleFunkitWeb2Login = useCallback48(
30520
+ const handleFunkitWeb2Login = useCallback49(
30420
30521
  async ({
30421
30522
  chainId,
30422
30523
  firstLoginCode,
@@ -30493,9 +30594,9 @@ var FunkitWeb2Provider = ({
30493
30594
  wallets
30494
30595
  ]
30495
30596
  );
30496
- const clearLoginError = useCallback48(() => setLoginErrorMessage(""), []);
30597
+ const clearLoginError = useCallback49(() => setLoginErrorMessage(""), []);
30497
30598
  const initChainId = useInitialChainId();
30498
- const handleAutoLoginFlows = useCallback48(async () => {
30599
+ const handleAutoLoginFlows = useCallback49(async () => {
30499
30600
  if (isNotNullish11(loginMethod) && isNotNullish11(initChainId)) {
30500
30601
  const queryParams = new URLSearchParams(window.location.search);
30501
30602
  const oauthCode = queryParams.get(PRIVY_OAUTH_CODE_URL_PARAM);
@@ -30539,7 +30640,7 @@ var FunkitWeb2Provider = ({
30539
30640
  initChainId
30540
30641
  // Do not include `handleAutoLoginFlows`,
30541
30642
  ]);
30542
- const handleOauthRedirect = useCallback48(
30643
+ const handleOauthRedirect = useCallback49(
30543
30644
  async (authProvider) => {
30544
30645
  if (!privy) {
30545
30646
  throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
@@ -30565,7 +30666,7 @@ var FunkitWeb2Provider = ({
30565
30666
  [privy, setLoginMethodAndCache]
30566
30667
  );
30567
30668
  const [isSendingOtpEmail, setIsSendingOtpEmail] = useState71(false);
30568
- const handleSendOtpEmail = useCallback48(
30669
+ const handleSendOtpEmail = useCallback49(
30569
30670
  async (emailAddress) => {
30570
30671
  try {
30571
30672
  if (!privy) {
@@ -30593,7 +30694,7 @@ var FunkitWeb2Provider = ({
30593
30694
  [privy, setLoginMethodAndCache]
30594
30695
  );
30595
30696
  const [isGeneratingFcUri, setIsGeneratingFcUri] = useState71(false);
30596
- const handleGenerateFcUri = useCallback48(async () => {
30697
+ const handleGenerateFcUri = useCallback49(async () => {
30597
30698
  try {
30598
30699
  if (!privy) {
30599
30700
  throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
@@ -30620,7 +30721,7 @@ var FunkitWeb2Provider = ({
30620
30721
  setIsGeneratingFcUri(false);
30621
30722
  }
30622
30723
  }, [privy]);
30623
- const getFcConnectionStatus = useCallback48(
30724
+ const getFcConnectionStatus = useCallback49(
30624
30725
  async (channelToken) => {
30625
30726
  try {
30626
30727
  if (!privy) {
@@ -30643,7 +30744,7 @@ var FunkitWeb2Provider = ({
30643
30744
  },
30644
30745
  [privy]
30645
30746
  );
30646
- const web2UserInfo = useMemo41(() => {
30747
+ const web2UserInfo = useMemo42(() => {
30647
30748
  if (!loggedInUser || !loggedInUser?.linked_accounts || !loggedInUser?.linked_accounts?.length) {
30648
30749
  return PLACEHOLDER_FUNKIT_USER_INFO;
30649
30750
  }
@@ -30764,10 +30865,10 @@ var useShowBalance = () => useContext18(ShowBalanceContext);
30764
30865
  // src/components/ConnectButton/ConnectButtonRenderer.tsx
30765
30866
  import { formatCurrencyAndStringify as formatCurrencyAndStringify15, isMobile as isMobile14, noop as noop9 } from "@funkit/utils";
30766
30867
  import React229 from "react";
30767
- import { useAccount as useAccount12, useBalance, useConfig as useConfig7 } from "wagmi";
30868
+ import { useAccount as useAccount12, useBalance, useConfig as useConfig8 } from "wagmi";
30768
30869
 
30769
30870
  // src/hooks/useIsMounted.ts
30770
- import { useCallback as useCallback49, useEffect as useEffect55, useState as useState73 } from "react";
30871
+ import { useCallback as useCallback50, useEffect as useEffect55, useState as useState73 } from "react";
30771
30872
  function useIsMounted() {
30772
30873
  const [isMounted, setIsMounted] = useState73(false);
30773
30874
  useEffect55(() => {
@@ -30776,7 +30877,7 @@ function useIsMounted() {
30776
30877
  setIsMounted(false);
30777
30878
  };
30778
30879
  }, []);
30779
- return useCallback49(() => isMounted, [isMounted]);
30880
+ return useCallback50(() => isMounted, [isMounted]);
30780
30881
  }
30781
30882
 
30782
30883
  // src/components/ConnectButton/abbreviateETHBalance.ts
@@ -30822,7 +30923,7 @@ function ConnectButtonRenderer({
30822
30923
  const { totalWalletAssetsUsd } = useWalletAssets({
30823
30924
  enableRefetchInterval: false
30824
30925
  });
30825
- const { chains: wagmiChains } = useConfig7();
30926
+ const { chains: wagmiChains } = useConfig8();
30826
30927
  const isCurrentChainSupported = wagmiChains.some(
30827
30928
  (chain) => chain.id === chainId
30828
30929
  );
@@ -31584,15 +31685,6 @@ function cssStringFromTheme(theme, options = {}) {
31584
31685
  return Object.entries(cssObjectFromTheme(theme, options)).map(([key, value]) => `${key}:${value.replace(/[:;{}</>]/g, "")};`).join("");
31585
31686
  }
31586
31687
 
31587
- // src/hooks/useIsFunkitCheckoutActivated.ts
31588
- import { FlagKey as FlagKey28 } from "@funkit/utils";
31589
- var useIsFunkitCheckoutActivated = () => {
31590
- const isCheckoutActivated = useFlag(FlagKey28.IsCheckoutActivated);
31591
- return {
31592
- isActivated: isCheckoutActivated
31593
- };
31594
- };
31595
-
31596
31688
  // src/hooks/useFunkitMaxCheckoutUsdInfo.ts
31597
31689
  import { FlagKey as FlagKey29, formatCurrencyAndStringify as formatCurrencyAndStringify16 } from "@funkit/utils";
31598
31690
  var useFunkitMaxCheckoutUsdInfo = () => {
@@ -31629,16 +31721,16 @@ import React233, { createContext as createContext19, useContext as useContext19
31629
31721
  import { WagmiProvider, useAccountEffect as useAccountEffect3 } from "wagmi";
31630
31722
 
31631
31723
  // src/providers/useFingerprint.ts
31632
- import { useCallback as useCallback50, useEffect as useEffect57 } from "react";
31724
+ import { useCallback as useCallback51, useEffect as useEffect57 } from "react";
31633
31725
  var storageKey5 = "funkit-connect-version";
31634
31726
  function setFunkitConnectVersion({ version }) {
31635
31727
  localStorage.setItem(storageKey5, version);
31636
31728
  }
31637
31729
  function getCurrentSdkVersion() {
31638
- return "6.14.2";
31730
+ return "6.14.4";
31639
31731
  }
31640
31732
  function useFingerprint() {
31641
- const fingerprint = useCallback50(() => {
31733
+ const fingerprint = useCallback51(() => {
31642
31734
  setFunkitConnectVersion({ version: getCurrentSdkVersion() });
31643
31735
  }, []);
31644
31736
  useEffect57(() => {
@@ -31648,11 +31740,11 @@ function useFingerprint() {
31648
31740
 
31649
31741
  // src/providers/usePreloadImages.ts
31650
31742
  import { isNotNullish as isNotNullish12 } from "@funkit/utils";
31651
- import { useCallback as useCallback51, useEffect as useEffect58 } from "react";
31743
+ import { useCallback as useCallback52, useEffect as useEffect58 } from "react";
31652
31744
  function usePreloadImages() {
31653
31745
  const funkitConnectChains = useFunkitConnectChains();
31654
31746
  const walletConnectors = useWalletConnectors();
31655
- const preloadImages = useCallback51(() => {
31747
+ const preloadImages = useCallback52(() => {
31656
31748
  loadImages(
31657
31749
  ...walletConnectors.map((wallet) => wallet.iconUrl),
31658
31750
  ...funkitConnectChains.map((chain) => chain.iconUrl).filter(isNotNullish12)
@@ -31807,6 +31899,5 @@ export {
31807
31899
  useFunkitReconnect,
31808
31900
  useFunkitSwitchChains,
31809
31901
  useFunkitUserInfo,
31810
- useIsFunkitCheckoutActivated,
31811
31902
  useUpdateActiveFunkitCheckout
31812
31903
  };