@funkit/connect 3.0.0-next.5 → 3.0.0-next.6

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 (59) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/components/FunkitProvider/FunkitCheckoutContext.d.ts +2 -2
  3. package/dist/hooks/useDynamicFont.d.ts +0 -1
  4. package/dist/hooks/useInputAmountRestriction.d.ts +7 -0
  5. package/dist/hooks/useUsableWalletAssetsForCheckout.d.ts +4 -0
  6. package/dist/index.js +237 -236
  7. package/dist/utils/colors.d.ts +1 -1
  8. package/dist/utils/moonpay.d.ts +0 -1
  9. package/dist/wallets/walletConnectors/argentWallet/argentWallet.js +2 -2
  10. package/dist/wallets/walletConnectors/bifrostWallet/bifrostWallet.js +3 -3
  11. package/dist/wallets/walletConnectors/bitgetWallet/bitgetWallet.js +3 -3
  12. package/dist/wallets/walletConnectors/bloomWallet/bloomWallet.js +2 -2
  13. package/dist/wallets/walletConnectors/bybitWallet/bybitWallet.js +2 -2
  14. package/dist/wallets/walletConnectors/chunk-DBP432DI.js +102 -0
  15. package/dist/wallets/walletConnectors/chunk-IEVZW3XR.js +101 -0
  16. package/dist/wallets/walletConnectors/chunk-ISJYPD3T.js +95 -0
  17. package/dist/wallets/walletConnectors/chunk-KL5Z3XHJ.js +71 -0
  18. package/dist/wallets/walletConnectors/chunk-LCOUKF2U.js +98 -0
  19. package/dist/wallets/walletConnectors/chunk-QP2BIVXD.js +73 -0
  20. package/dist/wallets/walletConnectors/chunk-UWZQZY4S.js +149 -0
  21. package/dist/wallets/walletConnectors/chunk-UZEMNN3Q.js +96 -0
  22. package/dist/wallets/walletConnectors/chunk-X45WXZDO.js +108 -0
  23. package/dist/wallets/walletConnectors/chunk-YIJ5ULO3.js +94 -0
  24. package/dist/wallets/walletConnectors/clvWallet/clvWallet.js +2 -2
  25. package/dist/wallets/walletConnectors/coin98Wallet/coin98Wallet.js +2 -2
  26. package/dist/wallets/walletConnectors/coreWallet/coreWallet.js +2 -2
  27. package/dist/wallets/walletConnectors/dawnWallet/dawnWallet.js +2 -2
  28. package/dist/wallets/walletConnectors/foxWallet/foxWallet.js +2 -2
  29. package/dist/wallets/walletConnectors/frontierWallet/frontierWallet.js +3 -3
  30. package/dist/wallets/walletConnectors/gateWallet/gateWallet.js +3 -3
  31. package/dist/wallets/walletConnectors/index.js +84 -84
  32. package/dist/wallets/walletConnectors/ledgerWallet/ledgerWallet.js +2 -2
  33. package/dist/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.js +3 -3
  34. package/dist/wallets/walletConnectors/oktoWallet/oktoWallet.js +2 -2
  35. package/dist/wallets/walletConnectors/okxWallet/okxWallet.js +3 -3
  36. package/dist/wallets/walletConnectors/omniWallet/omniWallet.js +2 -2
  37. package/dist/wallets/walletConnectors/rainbowWallet/rainbowWallet.js +3 -3
  38. package/dist/wallets/walletConnectors/roninWallet/roninWallet.js +2 -2
  39. package/dist/wallets/walletConnectors/safepalWallet/safepalWallet.js +2 -2
  40. package/dist/wallets/walletConnectors/subWallet/subWallet.js +2 -2
  41. package/dist/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.js +3 -3
  42. package/dist/wallets/walletConnectors/trustWallet/trustWallet.js +3 -3
  43. package/dist/wallets/walletConnectors/zerionWallet/zerionWallet.js +3 -3
  44. package/package.json +4 -4
  45. package/dist/wallets/walletConnectors/chunk-A6MZY5ZZ.js +0 -81
  46. package/dist/wallets/walletConnectors/chunk-ARIYPPEC.js +0 -92
  47. package/dist/wallets/walletConnectors/chunk-BEAW5Y5M.js +0 -60
  48. package/dist/wallets/walletConnectors/chunk-PIZ2XVGH.js +0 -60
  49. package/dist/wallets/walletConnectors/chunk-RXUGTOMT.js +0 -60
  50. package/dist/wallets/walletConnectors/{chunk-N562TVO2.js → chunk-2EMZOYQI.js} +3 -3
  51. package/dist/wallets/walletConnectors/{chunk-S6UDLDVQ.js → chunk-5HXH52SO.js} +3 -3
  52. package/dist/wallets/walletConnectors/{chunk-I4RN7PK4.js → chunk-5K4DIMYR.js} +3 -3
  53. package/dist/wallets/walletConnectors/{chunk-JSW2MDVV.js → chunk-AUVBWDIK.js} +3 -3
  54. package/dist/wallets/walletConnectors/{chunk-FCP4ZXSK.js → chunk-AXPQHNUI.js} +3 -3
  55. package/dist/wallets/walletConnectors/{chunk-3A3KT3GZ.js → chunk-B7FHT3CB.js} +3 -3
  56. package/dist/wallets/walletConnectors/{chunk-JTOJ3GAD.js → chunk-EFIENLEE.js} +3 -3
  57. package/dist/wallets/walletConnectors/{chunk-BUVITE4U.js → chunk-L7QI6PBN.js} +3 -3
  58. package/dist/wallets/walletConnectors/{chunk-P4ECTFIG.js → chunk-ODRDT73B.js} +4 -4
  59. package/dist/wallets/walletConnectors/{chunk-WKNMWQZZ.js → chunk-OHJBALD3.js} +4 -4
package/dist/index.js CHANGED
@@ -522,7 +522,7 @@ import React169, {
522
522
  useCallback as useCallback31,
523
523
  useContext as useContext18,
524
524
  useEffect as useEffect35,
525
- useMemo as useMemo33,
525
+ useMemo as useMemo34,
526
526
  useState as useState43
527
527
  } from "react";
528
528
  import { useConfig as useConfig5, useConnect as useConnect2, useDisconnect as useDisconnect2 } from "wagmi";
@@ -733,22 +733,6 @@ import React9, {
733
733
  } from "react";
734
734
  import { useConfig } from "wagmi";
735
735
 
736
- // src/utils/memoize.ts
737
- var memoize = (fn) => {
738
- const cache = /* @__PURE__ */ new Map();
739
- const memoizedFn = (...args) => {
740
- const key = JSON.stringify(args);
741
- if (cache.has(key)) {
742
- return cache.get(key);
743
- }
744
- const result = fn(...args);
745
- cache.set(key, result);
746
- return result;
747
- };
748
- memoizedFn.cache = cache;
749
- return memoizedFn;
750
- };
751
-
752
736
  // src/utils/mesh.ts
753
737
  import {
754
738
  meshGetCryptocurrencyHoldings,
@@ -941,6 +925,22 @@ var flagConfig = {
941
925
  // src/utils/flags/impl.ts
942
926
  import { datadogLogs as datadogLogs2 } from "@datadog/browser-logs";
943
927
 
928
+ // src/utils/memoize.ts
929
+ var memoize = (fn) => {
930
+ const cache = /* @__PURE__ */ new Map();
931
+ const memoizedFn = (...args) => {
932
+ const key = JSON.stringify(args);
933
+ if (cache.has(key)) {
934
+ return cache.get(key);
935
+ }
936
+ const result = fn(...args);
937
+ cache.set(key, result);
938
+ return result;
939
+ };
940
+ memoizedFn.cache = cache;
941
+ return memoizedFn;
942
+ };
943
+
944
944
  // src/utils/flags/endpoint.ts
945
945
  var FLAG_ENDPOINT_HOST = "sdk-cdn.fun.xyz";
946
946
  var FLAG_PROD_ENDPOINT_PATH = "flags/v0/config.json";
@@ -1073,7 +1073,14 @@ var FeatureFlag = class _FeatureFlag {
1073
1073
  return fallback;
1074
1074
  }
1075
1075
  const flagValue = this.derivedFlags?.[flagKey];
1076
- return typeof flagValue === "boolean" ? flagValue : fallback;
1076
+ const flagResult = typeof flagValue === "boolean" ? flagValue : fallback;
1077
+ logger.log("flagExposure_getBool", {
1078
+ flagKey,
1079
+ fallback,
1080
+ flagValue,
1081
+ type: "number"
1082
+ });
1083
+ return flagResult;
1077
1084
  }
1078
1085
  getNumber(flagKey, fallback) {
1079
1086
  if (this.derivedFlags === null) {
@@ -1084,7 +1091,14 @@ var FeatureFlag = class _FeatureFlag {
1084
1091
  return fallback;
1085
1092
  }
1086
1093
  const flagValue = this.derivedFlags?.[flagKey];
1087
- return typeof flagValue === "number" ? flagValue : fallback;
1094
+ const flagResult = typeof flagValue === "number" ? flagValue : fallback;
1095
+ logger.log("flagExposure_getNumber", {
1096
+ flagKey,
1097
+ fallback,
1098
+ flagValue,
1099
+ type: "number"
1100
+ });
1101
+ return flagResult;
1088
1102
  }
1089
1103
  getString(flagKey, fallback) {
1090
1104
  if (this.derivedFlags === null) {
@@ -1095,47 +1109,30 @@ var FeatureFlag = class _FeatureFlag {
1095
1109
  return fallback;
1096
1110
  }
1097
1111
  const flagValue = this.derivedFlags?.[flagKey];
1098
- return typeof flagValue === "string" ? flagValue : fallback;
1112
+ const flagResult = typeof flagValue === "string" ? flagValue : fallback;
1113
+ logger.log("flagExposure_getString", {
1114
+ flagKey,
1115
+ fallback,
1116
+ flagValue,
1117
+ type: "bool"
1118
+ });
1119
+ return flagResult;
1099
1120
  }
1100
1121
  };
1101
1122
 
1102
1123
  // src/utils/flags/index.ts
1103
1124
  var singleton = new FeatureFlag(flagConfig);
1104
- var getBool = memoize((...args) => {
1105
- const result = singleton.getBool(...args);
1106
- logger.log("flag_exposure", {
1107
- flagKey: args[0],
1108
- fallback: args[1],
1109
- flagValue: result,
1110
- type: "bool"
1111
- });
1112
- return result;
1113
- });
1114
- var getNumber = memoize((...args) => {
1115
- const result = singleton.getNumber(...args);
1116
- logger.log("flag_exposure", {
1117
- flagKey: args[0],
1118
- fallback: args[1],
1119
- flagValue: result,
1120
- type: "number"
1121
- });
1122
- return result;
1123
- });
1124
- var getString = memoize((...args) => {
1125
- const result = singleton.getString(...args);
1126
- logger.log("flag_exposure", {
1127
- flagKey: args[0],
1128
- fallback: args[1],
1129
- flagValue: result,
1130
- type: "string"
1131
- });
1132
- return result;
1133
- });
1125
+ var getBool = (...args) => {
1126
+ return singleton.getBool(...args);
1127
+ };
1128
+ var getNumber = (...args) => {
1129
+ return singleton.getNumber(...args);
1130
+ };
1131
+ var getString = (...args) => {
1132
+ return singleton.getString(...args);
1133
+ };
1134
1134
  var init = (context) => {
1135
1135
  singleton.init(context);
1136
- getBool.cache = /* @__PURE__ */ new Map();
1137
- getNumber.cache = /* @__PURE__ */ new Map();
1138
- getString.cache = /* @__PURE__ */ new Map();
1139
1136
  };
1140
1137
  var flags = {
1141
1138
  init,
@@ -1417,7 +1414,7 @@ import React168, {
1417
1414
  useCallback as useCallback30,
1418
1415
  useContext as useContext17,
1419
1416
  useEffect as useEffect34,
1420
- useMemo as useMemo32,
1417
+ useMemo as useMemo33,
1421
1418
  useState as useState42
1422
1419
  } from "react";
1423
1420
  import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig4 } from "wagmi";
@@ -4810,22 +4807,6 @@ var generateMoonpayCurrencyCode = (tokenSymbol, chainId) => {
4810
4807
  const mpCurrencyCode = `${tokenSymbol}${moonpayChainName}`.toLowerCase();
4811
4808
  return mpCurrencyCode;
4812
4809
  };
4813
- function colorToHex(color) {
4814
- let hexColor = color;
4815
- const rgbMatch = color.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
4816
- if (rgbMatch) {
4817
- const [, r, g, b] = rgbMatch.map(Number);
4818
- const rHex = r.toString(16).padStart(2, "0");
4819
- const gHex = g.toString(16).padStart(2, "0");
4820
- const bHex = b.toString(16).padStart(2, "0");
4821
- hexColor = `#${rHex}${gHex}${bHex}`;
4822
- }
4823
- const hexMatch = color.match(/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i);
4824
- if (hexMatch) {
4825
- hexColor = hexMatch[0].toLowerCase();
4826
- }
4827
- return hexColor;
4828
- }
4829
4810
 
4830
4811
  // src/utils/payment.ts
4831
4812
  function generateSourceOfFundString({
@@ -5604,7 +5585,7 @@ function FunkitCheckoutProvider({ children }) {
5604
5585
  }),
5605
5586
  clientMetadata: _generateClientMetadataForBackend(checkoutId)
5606
5587
  });
5607
- checkoutItem?.initSettings?.onConfirmation?.();
5588
+ checkoutItem?.initSettings?.onConfirmation?.(depositAddress);
5608
5589
  logger.log("checkoutConfirmed", { depositAddress });
5609
5590
  setActiveCheckouts({
5610
5591
  ...activeCheckouts,
@@ -5981,7 +5962,8 @@ function FunKeyValue({
5981
5962
  flexDirection: "row",
5982
5963
  display: "flex",
5983
5964
  alignItems: "center",
5984
- justifyContent: "flex-end"
5965
+ justifyContent: "flex-end",
5966
+ color: valueTextColor
5985
5967
  },
5986
5968
  valueIcon
5987
5969
  ) : null;
@@ -6408,10 +6390,8 @@ var FunTwoFaInput = ({
6408
6390
  borderWidth: "1",
6409
6391
  borderColor: getBorderColor(),
6410
6392
  borderRadius: "10",
6411
- style: {
6412
- overflowX: "auto",
6413
- cursor: isFocused ? "default" : "pointer"
6414
- },
6393
+ cursor: isFocused ? "default" : "pointer",
6394
+ style: { overflowX: "auto" },
6415
6395
  onFocus,
6416
6396
  onBlur,
6417
6397
  onMouseDown: handleMouseDown
@@ -6426,7 +6406,7 @@ var FunTwoFaInput = ({
6426
6406
  style: {
6427
6407
  textAlign: "center",
6428
6408
  padding: 0,
6429
- width: "min-content",
6409
+ width: "20px",
6430
6410
  fontSize: 13,
6431
6411
  fontWeight: "inherit",
6432
6412
  cursor: "inherit"
@@ -10908,7 +10888,7 @@ import {
10908
10888
  FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO8,
10909
10889
  getTokenInfo as getTokenInfo2
10910
10890
  } from "@funkit/core";
10911
- import React167, { useCallback as useCallback29, useEffect as useEffect33, useMemo as useMemo31, useRef as useRef15, useState as useState41 } from "react";
10891
+ import React167, { useCallback as useCallback29, useEffect as useEffect33, useMemo as useMemo32, useRef as useRef15, useState as useState41 } from "react";
10912
10892
  import { arbitrum, mainnet as mainnet6, mantle as mantle2, zkSync as zkSync3 } from "viem/chains";
10913
10893
 
10914
10894
  // src/hooks/useCheckoutAccountBalanceTransfer.ts
@@ -12953,6 +12933,27 @@ function FunPaymentMeshType({
12953
12933
  import { getMoonpayUrlSignature } from "@funkit/api-base";
12954
12934
  import React141, { memo, useEffect as useEffect28, useMemo as useMemo24, useState as useState32 } from "react";
12955
12935
 
12936
+ // src/utils/colors.ts
12937
+ function colorToHex(color) {
12938
+ let hexColor = color;
12939
+ const rgbMatch = color.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
12940
+ if (rgbMatch) {
12941
+ const [, r, g, b] = rgbMatch.map(Number);
12942
+ const rHex = r.toString(16).padStart(2, "0");
12943
+ const gHex = g.toString(16).padStart(2, "0");
12944
+ const bHex = b.toString(16).padStart(2, "0");
12945
+ hexColor = `#${rHex}${gHex}${bHex}`;
12946
+ }
12947
+ const hexMatch = color.match(/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i);
12948
+ if (hexMatch) {
12949
+ hexColor = hexMatch[0].toLowerCase();
12950
+ }
12951
+ return hexColor;
12952
+ }
12953
+ var isHexString = (color) => {
12954
+ return /^#([0-9a-f]{3}){1,2}$/i.test(color);
12955
+ };
12956
+
12956
12957
  // src/components/FunPayments/FunPaymentMoonpayType.css.ts
12957
12958
  var mpClass = "_1kmpeyf0";
12958
12959
  var stretchStyle = "_1kmpeyf1";
@@ -13201,7 +13202,7 @@ import {
13201
13202
  meshPreviewTransfer as meshPreviewTransfer2
13202
13203
  } from "@funkit/api-base";
13203
13204
  import { ERC20_ABI, isAddress as isAddress3, USDT_ABI } from "@funkit/core";
13204
- import React154, { useCallback as useCallback24, useMemo as useMemo28, useState as useState36 } from "react";
13205
+ import React154, { useCallback as useCallback24, useMemo as useMemo29, useState as useState36 } from "react";
13205
13206
  import { createPortal as createPortal5 } from "react-dom";
13206
13207
  import { useAccount as useAccount9, useSendTransaction, useWriteContract } from "wagmi";
13207
13208
 
@@ -13225,9 +13226,34 @@ function isMainnetUsdt(chainId, address) {
13225
13226
 
13226
13227
  // src/components/FunPayments/FunPaymentMethods.tsx
13227
13228
  import { getAssetPriceInfo as getAssetPriceInfo3 } from "@funkit/api-base";
13228
- import React148, { useCallback as useCallback23, useMemo as useMemo25, useState as useState33 } from "react";
13229
+ import React148, { useCallback as useCallback23, useMemo as useMemo26, useState as useState33 } from "react";
13229
13230
  import { createPortal as createPortal4 } from "react-dom";
13230
13231
 
13232
+ // src/hooks/useUsableWalletAssetsForCheckout.ts
13233
+ import { useMemo as useMemo25 } from "react";
13234
+ function useUsableWalletAssetsForCheckout(checkoutId) {
13235
+ const { checkoutItem } = useFunkitPreCheckoutInternal(checkoutId);
13236
+ const { walletAssets, isWeb3Login, isWeb2Login } = useGeneralWallet();
13237
+ return useMemo25(() => {
13238
+ if (!walletAssets || !checkoutItem) return;
13239
+ const usableAssets = {};
13240
+ for (const [assetKey, asset] of Object.entries(walletAssets)) {
13241
+ const { isUsable } = isAssetUsableToPayForCheckout(
13242
+ checkoutItem,
13243
+ "balance" /* ACCOUNT_BALANCE */,
13244
+ asset.chainId,
13245
+ asset.contractAddress,
13246
+ isWeb2Login,
13247
+ isWeb3Login
13248
+ );
13249
+ if (isUsable) {
13250
+ usableAssets[assetKey] = asset;
13251
+ }
13252
+ }
13253
+ return usableAssets;
13254
+ }, [checkoutItem, isWeb2Login, isWeb3Login, walletAssets]);
13255
+ }
13256
+
13231
13257
  // src/components/FunPaymentMethodItem/FunPaymentMethodItem.tsx
13232
13258
  import React145 from "react";
13233
13259
  function FunPaymentMethodItem({
@@ -13413,6 +13439,7 @@ function AddPaymentMethodItem({
13413
13439
  const { textCustomizations } = useFunkitConfig();
13414
13440
  const { walletAddress, walletAssets, isWeb3Login, isWeb2Login, userInfo } = useGeneralWallet();
13415
13441
  const { checkoutItem } = useFunkitPreCheckoutInternal(checkoutId);
13442
+ const usableWalletAssets = useUsableWalletAssetsForCheckout(checkoutId);
13416
13443
  const isEnabledForFlow = config.isEnabledForCheckout;
13417
13444
  const labelText = config.labelDynamic(
13418
13445
  textCustomizations,
@@ -13428,36 +13455,27 @@ function AddPaymentMethodItem({
13428
13455
  return /* @__PURE__ */ React148.createElement(React148.Fragment, null);
13429
13456
  }
13430
13457
  const getDynamicValueIconComponent = () => {
13431
- if (paymentMethod !== "balance" /* ACCOUNT_BALANCE */ || !checkoutItem) {
13458
+ if (paymentMethod !== "balance" /* ACCOUNT_BALANCE */ || !checkoutItem || !usableWalletAssets) {
13432
13459
  return config.conditionalIcon;
13433
13460
  }
13434
- const availableChainMetadata = Object.values(walletAssets ?? {}).filter(
13435
- (asset) => isAssetUsableToPayForCheckout(
13436
- checkoutItem,
13437
- paymentMethod,
13438
- asset.chainId,
13439
- asset.contractAddress,
13440
- isWeb2Login,
13441
- isWeb3Login
13442
- ).isUsable
13443
- ).map((asset) => {
13444
- return chainMetadataById[asset.chainId];
13445
- });
13446
- const uniqueChains = Array.from(new Set(availableChainMetadata));
13447
- return /* @__PURE__ */ React148.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "flex-end" }, uniqueChains.map((chain, index) => {
13461
+ const uniqueChainIds = Array.from(
13462
+ new Set(Object.values(usableWalletAssets).map((asset) => asset.chainId))
13463
+ );
13464
+ return /* @__PURE__ */ React148.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "flex-end" }, uniqueChainIds.map((chainId, index) => {
13465
+ const metadata = chainMetadataById[chainId];
13448
13466
  return /* @__PURE__ */ React148.createElement(
13449
13467
  Box,
13450
13468
  {
13451
- key: chain.name,
13469
+ key: metadata.name,
13452
13470
  position: "relative",
13453
- style: { right: `${(uniqueChains.length - index - 1) * -2}px` }
13471
+ style: { right: `${(uniqueChainIds.length - index - 1) * -2}px` }
13454
13472
  },
13455
13473
  /* @__PURE__ */ React148.createElement(
13456
13474
  AsyncImage,
13457
13475
  {
13458
- alt: chain.name,
13476
+ alt: metadata.name,
13459
13477
  borderRadius: "full",
13460
- src: chain.iconUrl,
13478
+ src: metadata.iconUrl,
13461
13479
  height: 12,
13462
13480
  width: 12
13463
13481
  }
@@ -13534,46 +13552,50 @@ function FunPaymentMethods({
13534
13552
  }) {
13535
13553
  const { apiKey } = useFunkitConfig();
13536
13554
  useWalletAssetsListener();
13537
- const {
13538
- walletAssets,
13539
- totalWalletAssetsUsd,
13540
- isWeb3Login,
13541
- isWeb2Login,
13542
- isUserLoggedIn
13543
- } = useGeneralWallet();
13555
+ const { isUserLoggedIn } = useGeneralWallet();
13544
13556
  const { checkoutItem, updateTargetAssetAmount, getCheckoutDraftDollarValue } = useFunkitPreCheckoutInternal(checkoutId);
13545
13557
  const defaultPaymentMethod = checkoutItem?.initSettings.config.defaultPaymentMethod;
13546
13558
  const [selectedOption, setSelectedOption] = useState33(
13547
13559
  defaultPaymentMethod || null
13548
13560
  );
13549
- const maxUsdUsableAsset = useMemo25(() => {
13550
- if (!checkoutItem || !depositAmount || !walletAssets) {
13561
+ const usableWalletAssets = useUsableWalletAssetsForCheckout(checkoutId);
13562
+ const totalUsableWalletAssetsUsd = Object.values(
13563
+ usableWalletAssets ?? {}
13564
+ ).reduce((total, asset) => total + (asset.totalUsdValue || 0), 0);
13565
+ const maxUsdUsableAsset = useMemo26(() => {
13566
+ if (!depositAmount || !usableWalletAssets) {
13551
13567
  return null;
13552
13568
  }
13553
- let maybeAsset = null;
13554
- for (const assetKey of Object.keys(walletAssets)) {
13555
- const asset = walletAssets[assetKey];
13556
- if (!asset || assetKey == "nfts") {
13557
- continue;
13558
- }
13559
- const { isUsable } = isAssetUsableToPayForCheckout(
13560
- checkoutItem,
13561
- "balance" /* ACCOUNT_BALANCE */,
13562
- asset.chainId,
13563
- asset.contractAddress,
13564
- isWeb2Login,
13565
- isWeb3Login
13566
- );
13567
- if (!isUsable) {
13568
- continue;
13569
- }
13570
- if (!maybeAsset || maybeAsset.totalUsdValue < asset.totalUsdValue) {
13571
- maybeAsset = asset;
13569
+ let maxAsset = null;
13570
+ for (const assetKey in usableWalletAssets) {
13571
+ const asset = usableWalletAssets[assetKey];
13572
+ if (!maxAsset || maxAsset.totalUsdValue < asset.totalUsdValue) {
13573
+ maxAsset = asset;
13572
13574
  }
13573
13575
  }
13574
- return maybeAsset;
13575
- }, [checkoutItem, depositAmount, isWeb2Login, isWeb3Login, walletAssets]);
13576
- const hasSufficientBalance2 = useMemo25(() => {
13576
+ return maxAsset;
13577
+ }, [depositAmount, usableWalletAssets]);
13578
+ const recommendedCheckoutUsdAmountWithMaxUsdUsableAsset = useMemo26(() => {
13579
+ if (!maxUsdUsableAsset || !checkoutItem || selectedOption !== "balance" /* ACCOUNT_BALANCE */) {
13580
+ return 0;
13581
+ }
13582
+ const maxUsdAssetHoldingItem = {
13583
+ iconSrc: maxUsdUsableAsset.logo,
13584
+ symbol: maxUsdUsableAsset.symbol,
13585
+ amount: getNormalizedTokenBalance(
13586
+ Number(maxUsdUsableAsset.tokenBalance),
13587
+ maxUsdUsableAsset.decimals
13588
+ ),
13589
+ usdAmount: maxUsdUsableAsset.totalUsdValue,
13590
+ tokenAddress: maxUsdUsableAsset.contractAddress,
13591
+ pickedChainId: maxUsdUsableAsset.chainId
13592
+ };
13593
+ return Math.max(
13594
+ maxUsdAssetHoldingItem.usdAmount - getFeesUsdEstimate(checkoutItem, maxUsdAssetHoldingItem),
13595
+ 1
13596
+ );
13597
+ }, [checkoutItem, maxUsdUsableAsset, selectedOption]);
13598
+ const hasSufficientBalance2 = useMemo26(() => {
13577
13599
  if (!depositAmount) return true;
13578
13600
  return maxUsdUsableAsset && maxUsdUsableAsset.totalUsdValue >= parseFloat(depositAmount);
13579
13601
  }, [depositAmount, maxUsdUsableAsset]);
@@ -13591,26 +13613,7 @@ function FunPaymentMethods({
13591
13613
  assetTokenAddress: checkoutItem.initSettings.config.targetAsset
13592
13614
  });
13593
13615
  if (!info || !info.unitPrice) return;
13594
- const maxUsdAmountFromHolding = () => {
13595
- const maxUsdAsset = maxUsdUsableAsset;
13596
- if (!maxUsdAsset) return 0;
13597
- const maxUsdAssetHoldingItem = {
13598
- iconSrc: maxUsdAsset.logo,
13599
- symbol: maxUsdAsset.symbol,
13600
- amount: getNormalizedTokenBalance(
13601
- Number(maxUsdAsset.tokenBalance),
13602
- maxUsdAsset.decimals
13603
- ),
13604
- usdAmount: maxUsdAsset.totalUsdValue,
13605
- tokenAddress: maxUsdAsset.contractAddress,
13606
- pickedChainId: maxUsdAsset.chainId
13607
- };
13608
- return Math.max(
13609
- maxUsdAssetHoldingItem.usdAmount - getFeesUsdEstimate(checkoutItem, maxUsdAssetHoldingItem),
13610
- 1
13611
- );
13612
- };
13613
- const newTargetAmountUsd = selectedOption === "card" /* CARD */ ? MINIMUM_MOONPAY_DEPOSIT_AMOUNT_USD : selectedOption === "balance" /* ACCOUNT_BALANCE */ ? maxUsdAmountFromHolding() : 0;
13616
+ const newTargetAmountUsd = selectedOption === "card" /* CARD */ ? MINIMUM_MOONPAY_DEPOSIT_AMOUNT_USD : selectedOption === "balance" /* ACCOUNT_BALANCE */ ? recommendedCheckoutUsdAmountWithMaxUsdUsableAsset : 0;
13614
13617
  const minTargetAmount = roundUpToXDecimalPlaces(
13615
13618
  (newTargetAmountUsd / info.unitPrice).toString(),
13616
13619
  5
@@ -13619,21 +13622,22 @@ function FunPaymentMethods({
13619
13622
  await getCheckoutDraftDollarValue();
13620
13623
  }, [
13621
13624
  apiKey,
13622
- checkoutItem,
13625
+ checkoutItem?.initSettings.config.targetAsset,
13626
+ checkoutItem?.initSettings.config.targetChain,
13623
13627
  getCheckoutDraftDollarValue,
13624
- maxUsdUsableAsset,
13628
+ recommendedCheckoutUsdAmountWithMaxUsdUsableAsset,
13625
13629
  selectedOption,
13626
13630
  updateTargetAssetAmount
13627
13631
  ]);
13628
- const isWalletEmpty = totalWalletAssetsUsd === 0;
13629
- const notificationConfig = useMemo25(() => {
13632
+ const notificationConfig = useMemo26(() => {
13630
13633
  const isInvalidMoonpay = "card" /* CARD */ === selectedOption && isAmountInvalidForMoonpay({ amountUsd: depositAmount });
13631
13634
  const isInvalidAccBalance = "balance" /* ACCOUNT_BALANCE */ === selectedOption && !hasSufficientBalance2;
13632
13635
  const isContinuable = !isDisabled && !isInvalidMoonpay && !isInvalidAccBalance;
13633
- const continueErrorText = isInvalidMoonpay ? generateInsufficientAmountForMoonpayError(true) : isInvalidAccBalance ? totalWalletAssetsUsd > 0.01 ? `${formatCurrencyAndStringify(
13634
- maxUsdUsableAsset?.totalUsdValue || 0
13636
+ const continueErrorText = isInvalidMoonpay ? generateInsufficientAmountForMoonpayError(true) : isInvalidAccBalance ? recommendedCheckoutUsdAmountWithMaxUsdUsableAsset > 0.01 ? `${formatCurrencyAndStringify(
13637
+ recommendedCheckoutUsdAmountWithMaxUsdUsableAsset
13635
13638
  )} maximum order` : `Insufficient balance.` : "";
13636
13639
  const hasQuoteError = messageType === "error";
13640
+ const isWalletEmpty = totalUsableWalletAssetsUsd === 0;
13637
13641
  return {
13638
13642
  isUpdateNeeded: !isContinuable || hasQuoteError,
13639
13643
  isUpdatePossible: "balance" /* ACCOUNT_BALANCE */ !== selectedOption || !isWalletEmpty,
@@ -13642,24 +13646,23 @@ function FunPaymentMethods({
13642
13646
  notificationType: hasQuoteError ? "error" : !isContinuable ? "warning" : "default"
13643
13647
  };
13644
13648
  }, [
13645
- totalWalletAssetsUsd,
13646
- maxUsdUsableAsset?.totalUsdValue,
13649
+ recommendedCheckoutUsdAmountWithMaxUsdUsableAsset,
13647
13650
  depositAmount,
13648
13651
  hasSufficientBalance2,
13649
13652
  isDisabled,
13650
- isWalletEmpty,
13651
13653
  messageType,
13652
13654
  quoteMessage,
13653
- selectedOption
13655
+ selectedOption,
13656
+ totalUsableWalletAssetsUsd
13654
13657
  ]);
13655
- const enabledPaymentMethods = useMemo25(() => {
13658
+ const enabledPaymentMethods = useMemo26(() => {
13656
13659
  return Object.keys(PAYMENT_METHOD_CONFIG).filter((paymentMethod) => {
13657
13660
  const disabled = paymentMethod === "transfer" /* TRANSFER */ || paymentMethod === "balance" /* ACCOUNT_BALANCE */ && !isUserLoggedIn;
13658
13661
  return !disabled;
13659
13662
  });
13660
13663
  }, [isUserLoggedIn]);
13661
13664
  const [isContinuing, setIsContinuing] = useState33(false);
13662
- const canContinue = useMemo25(() => {
13665
+ const canContinue = useMemo26(() => {
13663
13666
  return isNotNullish(selectedOption) && Object.values(PaymentMethod).includes(selectedOption) && !isContinuing && !checkoutItem?.isDrafting && enabledPaymentMethods.includes(selectedOption);
13664
13667
  }, [
13665
13668
  isContinuing,
@@ -13694,7 +13697,7 @@ function FunPaymentMethods({
13694
13697
  isClickable: !isContinuing,
13695
13698
  onClick: () => setSelectedOption(expressOption),
13696
13699
  disclaimerText: PAYMENT_METHOD_CONFIG[expressOption].disclaimerTextFn(
13697
- formatCurrencyAndStringify(totalWalletAssetsUsd)
13700
+ formatCurrencyAndStringify(totalUsableWalletAssetsUsd)
13698
13701
  )
13699
13702
  }
13700
13703
  ), /* @__PURE__ */ React148.createElement(Text, { size: "13", weight: "medium", color: "secondaryText" }, "More options"), enabledPaymentMethods.filter((pm) => pm !== expressOption).map((paymentMethod) => {
@@ -13708,7 +13711,7 @@ function FunPaymentMethods({
13708
13711
  isClickable: !isContinuing,
13709
13712
  onClick: () => setSelectedOption(paymentMethod),
13710
13713
  disclaimerText: PAYMENT_METHOD_CONFIG[paymentMethod].disclaimerTextFn(
13711
- formatCurrencyAndStringify(totalWalletAssetsUsd)
13714
+ formatCurrencyAndStringify(totalUsableWalletAssetsUsd)
13712
13715
  )
13713
13716
  }
13714
13717
  );
@@ -13751,7 +13754,7 @@ function FunPaymentMethods({
13751
13754
  }
13752
13755
 
13753
13756
  // src/components/FunTransactionSummary/FunTransactionSummary.tsx
13754
- import React151, { useMemo as useMemo26, useState as useState34 } from "react";
13757
+ import React151, { useMemo as useMemo27, useState as useState34 } from "react";
13755
13758
 
13756
13759
  // src/components/Icons/CaretDownIcon.tsx
13757
13760
  import React149 from "react";
@@ -14033,7 +14036,7 @@ function FunTransactionSummary({
14033
14036
  )
14034
14037
  };
14035
14038
  const estTime = (checkoutItem?.latestQuote?.finalTimeEstimationMs || 0) / 1e3 || 0;
14036
- const paymentTokenString = useMemo26(() => {
14039
+ const paymentTokenString = useMemo27(() => {
14037
14040
  return formatCryptoAndStringify(
14038
14041
  parseFloat(checkoutItem?.latestQuote?.finalPaymentTokenAmount || "0"),
14039
14042
  `${checkoutItem?.selectedSourceAssetInfo?.symbol}` || ""
@@ -14114,7 +14117,7 @@ var FunInfoIcon = ({ size = 14 }) => /* @__PURE__ */ React152.createElement(
14114
14117
  );
14115
14118
 
14116
14119
  // src/components/FunCheckoutModal/FunCheckoutPrimaryInfo.tsx
14117
- import React153, { useEffect as useEffect29, useMemo as useMemo27, useState as useState35 } from "react";
14120
+ import React153, { useEffect as useEffect29, useMemo as useMemo28, useState as useState35 } from "react";
14118
14121
  function CheckoutPrimaryInfoSnapshot({
14119
14122
  checkoutItem,
14120
14123
  isLoading,
@@ -14122,10 +14125,10 @@ function CheckoutPrimaryInfoSnapshot({
14122
14125
  preserveMinHeight = true
14123
14126
  }) {
14124
14127
  const checkoutConfig = checkoutItem.initSettings.config;
14125
- const displaySubtitle = useMemo27(() => {
14128
+ const displaySubtitle = useMemo28(() => {
14126
14129
  return getCheckoutItemDisplay(checkoutConfig, checkoutItem);
14127
14130
  }, [checkoutConfig, checkoutItem]);
14128
- const displayDollarValue = useMemo27(() => {
14131
+ const displayDollarValue = useMemo28(() => {
14129
14132
  const prioritizedValue = prioritizeDraftValue ? checkoutItem.draftDollarValue : checkoutItem.finalDollarValue;
14130
14133
  const fallbackValue = prioritizeDraftValue ? checkoutItem.finalDollarValue : checkoutItem.draftDollarValue;
14131
14134
  return prioritizedValue || fallbackValue || 0;
@@ -14544,7 +14547,7 @@ function FunCheckoutConfirmationStep({
14544
14547
  const stepMessage = isRegeneratingQuote ? "Regenerating quote..." : postCheckoutStepMessage || checkoutStepMessage;
14545
14548
  const hasStepMessage = !hasError && Boolean(stepMessage);
14546
14549
  const bottomSectionRef = document.getElementById(CHECKOUT_MODAL_BOTTOM_BAR_ID);
14547
- const cardDisclaimer = useMemo28(() => {
14550
+ const cardDisclaimer = useMemo29(() => {
14548
14551
  const finalConvertedAssetName = getCheckoutItemDisplay(
14549
14552
  // @ts-expect-error - TODO: Add guardrail for this being undefined (technically it should never be undefined)
14550
14553
  checkoutItem?.initSettings.config,
@@ -14825,17 +14828,14 @@ var FunCheckoutConnectExchangeStep = ({
14825
14828
 
14826
14829
  // src/components/FunCheckoutModal/FunCheckoutInputAmountStep.tsx
14827
14830
  import { getAssetPriceInfo as getAssetPriceInfo4 } from "@funkit/api-base";
14828
- import React162, { useCallback as useCallback27, useEffect as useEffect31, useMemo as useMemo29, useState as useState39 } from "react";
14831
+ import React162, { useCallback as useCallback27, useEffect as useEffect31, useMemo as useMemo30, useState as useState39 } from "react";
14829
14832
  import { createPortal as createPortal7 } from "react-dom";
14830
14833
 
14831
14834
  // src/hooks/useDynamicFont.ts
14832
14835
  import { useCallback as useCallback26, useEffect as useEffect30, useRef as useRef14, useState as useState38 } from "react";
14833
14836
  var SIZE_STEP = 1;
14834
- var MIN_WIDTH = 10;
14835
- var MAX_WIDTH = 235;
14836
14837
  var ALLOWANCE = 20;
14837
14838
  var useDynamicFont = (inputValue, max, min = 16) => {
14838
- const [textWidth, setTextWidth] = useState38(MIN_WIDTH);
14839
14839
  const [fontSize, setFontSize] = useState38(max);
14840
14840
  const inputRef = useRef14(null);
14841
14841
  const canvasRef = useRef14(document.createElement("canvas"));
@@ -14851,22 +14851,30 @@ var useDynamicFont = (inputValue, max, min = 16) => {
14851
14851
  };
14852
14852
  const resizeText = () => {
14853
14853
  if (!inputRef.current) return;
14854
- const textWidth2 = measureTextWidth(inputValue);
14855
- if (textWidth2 === void 0) return;
14856
- if (textWidth2 > MIN_WIDTH) setTextWidth(textWidth2 + ALLOWANCE);
14857
- if (fontSize > min && textWidth2 > MAX_WIDTH) {
14854
+ const textWidth = measureTextWidth(inputValue);
14855
+ if (textWidth === void 0) return;
14856
+ const maxWidth = inputRef.current.getBoundingClientRect().width;
14857
+ if (fontSize > min && textWidth > maxWidth) {
14858
14858
  setFontSize((prevSize) => prevSize - SIZE_STEP);
14859
- } else if (fontSize < max && textWidth2 < MAX_WIDTH - ALLOWANCE) {
14859
+ } else if (fontSize < max && textWidth < maxWidth - ALLOWANCE) {
14860
14860
  setFontSize((prevSize) => prevSize + SIZE_STEP);
14861
14861
  }
14862
14862
  };
14863
14863
  resizeText();
14864
14864
  }, [max, min, inputValue, fontSize]);
14865
- const resetText = useCallback26(() => {
14866
- setTextWidth(MAX_WIDTH);
14867
- setFontSize(max);
14868
- }, [max]);
14869
- return { ref: inputRef, fontSize, textWidth, resetText };
14865
+ const resetText = useCallback26(() => setFontSize(max), [max]);
14866
+ return { ref: inputRef, fontSize, resetText };
14867
+ };
14868
+
14869
+ // src/hooks/useInputAmountRestriction.ts
14870
+ var MAX_AMOUNT = 2e3;
14871
+ var useAmountRestriction = (currentAmount) => {
14872
+ const { apiKey } = useFunkitConfig();
14873
+ const isDydx = apiKey === "NJq0CGrsE19xBbP1vHyBOp8xJvzYo9kayJHqDFP5";
14874
+ const isOverLimit = currentAmount > MAX_AMOUNT && isDydx;
14875
+ return {
14876
+ error: isOverLimit && `$${MAX_AMOUNT} maximum order`
14877
+ };
14870
14878
  };
14871
14879
 
14872
14880
  // src/components/Icons/SwitchIcon.tsx
@@ -14915,7 +14923,7 @@ var FunCheckoutInputAmountStep = ({
14915
14923
  const [errorMessage, setErrorMessage] = useState39("");
14916
14924
  const inputPlaceholder = isAmountInAbsolute ? "0.0000" : "$0";
14917
14925
  const inputValue = amountInput === "" ? "" : isAmountInAbsolute ? amountInput : `$${amountInput}`;
14918
- const { ref, fontSize, textWidth, resetText } = useDynamicFont(
14926
+ const { ref, fontSize, resetText } = useDynamicFont(
14919
14927
  inputValue || inputPlaceholder,
14920
14928
  BASE_FONT_SIZE
14921
14929
  );
@@ -14952,7 +14960,7 @@ var FunCheckoutInputAmountStep = ({
14952
14960
  }
14953
14961
  setIsInited(true);
14954
14962
  }, [initialAssetAmount, isAmountInAbsolute, isInited, unitPrice]);
14955
- const finalAmounts = useMemo29(() => {
14963
+ const finalAmounts = useMemo30(() => {
14956
14964
  if (unitPrice == null) {
14957
14965
  return {
14958
14966
  usdEquivalent: 0,
@@ -14966,6 +14974,9 @@ var FunCheckoutInputAmountStep = ({
14966
14974
  absoluteEquivalent: parseFloat(absoluteEquivalent.toFixed(5))
14967
14975
  };
14968
14976
  }, [amountInput, isAmountInAbsolute, unitPrice]);
14977
+ const { error: inputLimitError } = useAmountRestriction(
14978
+ finalAmounts.usdEquivalent
14979
+ );
14969
14980
  const [isContinuing, setIsContinuing] = useState39(false);
14970
14981
  const onClickContinue = useCallback27(async () => {
14971
14982
  setIsContinuing(true);
@@ -15029,10 +15040,10 @@ var FunCheckoutInputAmountStep = ({
15029
15040
  flexDirection: "column",
15030
15041
  alignItems: "center",
15031
15042
  justifyContent: "center",
15032
- gap: "10",
15043
+ gap: "8",
15033
15044
  width: "full"
15034
15045
  },
15035
- unitPrice == null && !errorMessage ? /* @__PURE__ */ React162.createElement(Box, { style: { marginBottom: "8px", marginTop: "11px" } }, /* @__PURE__ */ React162.createElement(FunSkeletonBlock, { height: fontSize, width: fontSize * 3 })) : /* @__PURE__ */ React162.createElement(
15046
+ unitPrice == null && !errorMessage ? /* @__PURE__ */ React162.createElement(FunSkeletonBlock, { height: fontSize, width: fontSize * 3 }) : /* @__PURE__ */ React162.createElement(
15036
15047
  Box,
15037
15048
  {
15038
15049
  display: "flex",
@@ -15041,41 +15052,29 @@ var FunCheckoutInputAmountStep = ({
15041
15052
  alignItems: "flex-end"
15042
15053
  },
15043
15054
  /* @__PURE__ */ React162.createElement(
15044
- Box,
15055
+ FunInput,
15045
15056
  {
15046
- style: {
15047
- maxWidth: `${textWidth}px`,
15048
- transform: "translateY(15%)"
15049
- }
15050
- },
15051
- /* @__PURE__ */ React162.createElement(
15052
- FunInput,
15053
- {
15054
- ref,
15055
- value: inputValue,
15056
- placeholder: inputPlaceholder,
15057
- onChange: handleInputChange,
15058
- inputProps: {
15059
- type: isAmountInAbsolute ? "number" : "text",
15060
- autoFocus: true,
15061
- disabled: unitPrice == null,
15062
- // get ios to use numpad key with period
15063
- inputMode: "decimal"
15064
- },
15065
- inputStyle: {
15066
- textAlign: "center",
15067
- padding: "0px",
15068
- fontSize: `${fontSize}px`,
15069
- lineHeight: `${fontSize}px`,
15070
- maxWidth: `${textWidth}px`
15071
- },
15072
- textColor: "primaryText",
15073
- overrideBorderWidth: "0",
15074
- overrideBackground: "transparent"
15075
- }
15076
- )
15077
- ),
15078
- ticker && isAmountInAbsolute && /* @__PURE__ */ React162.createElement(Text, { size: "20", color: "primaryText", weight: "semibold" }, ticker)
15057
+ ref,
15058
+ value: inputValue,
15059
+ placeholder: inputPlaceholder,
15060
+ onChange: handleInputChange,
15061
+ inputProps: {
15062
+ type: isAmountInAbsolute ? "number" : "text",
15063
+ autoFocus: true,
15064
+ disabled: unitPrice == null,
15065
+ // get ios to use numpad key with period
15066
+ inputMode: "decimal"
15067
+ },
15068
+ inputStyle: {
15069
+ textAlign: "center",
15070
+ padding: "0px",
15071
+ fontSize: `${fontSize}px`
15072
+ },
15073
+ textColor: "primaryText",
15074
+ overrideBorderWidth: "0",
15075
+ overrideBackground: "transparent"
15076
+ }
15077
+ )
15079
15078
  ),
15080
15079
  ticker && /* @__PURE__ */ React162.createElement(
15081
15080
  Box,
@@ -15112,6 +15111,13 @@ var FunCheckoutInputAmountStep = ({
15112
15111
  type: "error",
15113
15112
  description: errorMessage
15114
15113
  }
15114
+ ), /* @__PURE__ */ React162.createElement(
15115
+ FunNotification,
15116
+ {
15117
+ isVisible: !!inputLimitError,
15118
+ type: "warning",
15119
+ description: inputLimitError
15120
+ }
15115
15121
  ), showAssetAvailableElement && targetAssetInWallet && !!targetAssetInWallet.totalUsdValue && /* @__PURE__ */ React162.createElement(
15116
15122
  Box,
15117
15123
  {
@@ -15138,7 +15144,7 @@ var FunCheckoutInputAmountStep = ({
15138
15144
  actionButtonProps: {
15139
15145
  title: "Continue",
15140
15146
  onClick: onClickContinue,
15141
- isDisabled: unitPrice == null || isContinuing || (finalAmounts.absoluteEquivalent || 0) <= 0 || finalAmounts.usdEquivalent <= 0,
15147
+ isDisabled: unitPrice == null || isContinuing || (finalAmounts.absoluteEquivalent || 0) <= 0 || finalAmounts.usdEquivalent <= 0 || !!inputLimitError,
15142
15148
  isLoading: isContinuing
15143
15149
  }
15144
15150
  }
@@ -15152,7 +15158,7 @@ import {
15152
15158
  FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS as FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS3,
15153
15159
  FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO7
15154
15160
  } from "@funkit/core";
15155
- import React165, { useCallback as useCallback28, useEffect as useEffect32, useMemo as useMemo30, useState as useState40 } from "react";
15161
+ import React165, { useCallback as useCallback28, useEffect as useEffect32, useMemo as useMemo31, useState as useState40 } from "react";
15156
15162
  import { createPortal as createPortal8 } from "react-dom";
15157
15163
 
15158
15164
  // src/components/FunAsset/FunAssetItem.tsx
@@ -15435,7 +15441,7 @@ function MeshOrAccountSelectAsset({
15435
15441
  generateAccountHoldingsMapForMesh,
15436
15442
  generateAccountHoldingsMapForBalance
15437
15443
  ]);
15438
- const defaultTokenSymbols = useMemo30(() => {
15444
+ const defaultTokenSymbols = useMemo31(() => {
15439
15445
  if (!checkoutItem) {
15440
15446
  return [];
15441
15447
  }
@@ -15452,7 +15458,7 @@ function MeshOrAccountSelectAsset({
15452
15458
  }
15453
15459
  return [];
15454
15460
  }, [checkoutItem, accountHoldingsMap]);
15455
- const assetOptions = useMemo30(() => {
15461
+ const assetOptions = useMemo31(() => {
15456
15462
  if (!checkoutItem || !checkoutItem.selectedPaymentMethodInfo?.paymentMethod)
15457
15463
  return [];
15458
15464
  return Object.keys(accountHoldingsMap).map((chainSymbolKey) => {
@@ -15520,7 +15526,7 @@ function MeshOrAccountSelectAsset({
15520
15526
  const { messageType, quoteMessage } = quoteNotification;
15521
15527
  const hasError = hasFetchAssetsError || hasInsufficientAssetError || messageType === "error";
15522
15528
  const showQuoteMessage = messageType === "step" && !hasError;
15523
- const errorMessage = useMemo30(() => {
15529
+ const errorMessage = useMemo31(() => {
15524
15530
  if (hasFetchAssetsError) {
15525
15531
  return /* @__PURE__ */ React165.createElement("div", null, fetchAssetsError, /* @__PURE__ */ React165.createElement(
15526
15532
  FunLinkButton,
@@ -15963,7 +15969,7 @@ function FunCheckoutModal({
15963
15969
  setAnimateOut(false);
15964
15970
  }, ANIMATION_DELAY4);
15965
15971
  };
15966
- const titleConfig = useMemo31(() => {
15972
+ const titleConfig = useMemo32(() => {
15967
15973
  const baseTitle = checkoutItem?.initSettings?.config?.modalTitle || "Checkout";
15968
15974
  const selectedPaymentMethod2 = checkoutItem?.selectedPaymentMethodInfo?.paymentMethod;
15969
15975
  switch (checkoutStep) {
@@ -16335,7 +16341,7 @@ function ModalProvider({ children }) {
16335
16341
  return /* @__PURE__ */ React168.createElement(
16336
16342
  ModalContext.Provider,
16337
16343
  {
16338
- value: useMemo32(
16344
+ value: useMemo33(
16339
16345
  () => ({
16340
16346
  accountModalOpen,
16341
16347
  chainModalOpen,
@@ -17077,7 +17083,7 @@ var FunkitWeb2Provider = ({
17077
17083
  },
17078
17084
  [privy]
17079
17085
  );
17080
- const web2UserInfo = useMemo33(() => {
17086
+ const web2UserInfo = useMemo34(() => {
17081
17087
  if (!loggedInUser || !loggedInUser?.linked_accounts || !loggedInUser?.linked_accounts?.length) {
17082
17088
  return PLACEHOLDER_FUNKIT_USER_INFO;
17083
17089
  }
@@ -17575,11 +17581,6 @@ var computeWalletConnectMetaData = ({
17575
17581
  };
17576
17582
  };
17577
17583
 
17578
- // src/utils/colors.ts
17579
- var isHexString = (color) => {
17580
- return /^#([0-9a-f]{3}){1,2}$/i.test(color);
17581
- };
17582
-
17583
17584
  // src/utils/omitUndefinedValues.ts
17584
17585
  function omitUndefinedValues(obj) {
17585
17586
  return Object.fromEntries(
@@ -18359,7 +18360,7 @@ function setFunkitConnectVersion({ version }) {
18359
18360
  localStorage.setItem(storageKey5, version);
18360
18361
  }
18361
18362
  function getCurrentSdkVersion() {
18362
- return "3.0.0-next.5";
18363
+ return "3.0.0-next.6";
18363
18364
  }
18364
18365
  function useFingerprint() {
18365
18366
  const fingerprint = useCallback33(() => {