@funkit/connect 7.1.0-next.8 → 7.1.0-next.9

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 (84) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/components/Avatar/emojiAvatarForAddress.d.ts +1 -1
  3. package/dist/components/Dropdown/ReceiveTokenDropdown.d.ts +3 -1
  4. package/dist/index.js +261 -99
  5. package/dist/providers/FunkitCheckoutContext/index.d.ts +1 -0
  6. package/dist/providers/FunkitConfigContext.d.ts +9 -1
  7. package/dist/utils/assets.d.ts +2 -1
  8. package/dist/utils/lighter.d.ts +8 -0
  9. package/dist/utils/tokenIconUrl.d.ts +1 -1
  10. package/dist/wallets/walletConnectors/bifrostWallet/bifrostWallet.js +2 -2
  11. package/dist/wallets/walletConnectors/bitgetWallet/bitgetWallet.js +2 -2
  12. package/dist/wallets/walletConnectors/bitskiWallet/bitskiWallet.js +2 -2
  13. package/dist/wallets/walletConnectors/braveWallet/braveWallet.js +2 -2
  14. package/dist/wallets/walletConnectors/bybitWallet/bybitWallet.js +2 -2
  15. package/dist/wallets/walletConnectors/{chunk-JWFF4AAL.js → chunk-2E4PDCEJ.js} +1 -1
  16. package/dist/wallets/walletConnectors/{chunk-SHBUZ7U7.js → chunk-35Q4HKAM.js} +1 -1
  17. package/dist/wallets/walletConnectors/{chunk-362NXNTM.js → chunk-3IYE623P.js} +1 -1
  18. package/dist/wallets/walletConnectors/{chunk-2L43XSW3.js → chunk-47QF6EET.js} +1 -1
  19. package/dist/wallets/walletConnectors/{chunk-BPZ2XJO2.js → chunk-4ZXII3UA.js} +1 -1
  20. package/dist/wallets/walletConnectors/{chunk-2STUC6QL.js → chunk-5EAOMOTO.js} +1 -1
  21. package/dist/wallets/walletConnectors/{chunk-2KUBG3S6.js → chunk-77UTBHGP.js} +1 -1
  22. package/dist/wallets/walletConnectors/{chunk-OLOIXTYS.js → chunk-ABQKUIUD.js} +1 -1
  23. package/dist/wallets/walletConnectors/{chunk-IFON7E6U.js → chunk-AI55G5DD.js} +1 -1
  24. package/dist/wallets/walletConnectors/{chunk-DNSG5Q7V.js → chunk-ARYAYQ7Z.js} +3 -0
  25. package/dist/wallets/walletConnectors/{chunk-OL5ZO7E4.js → chunk-CF5HOLH2.js} +1 -1
  26. package/dist/wallets/walletConnectors/{chunk-SULRQO27.js → chunk-CZYUE3AR.js} +1 -1
  27. package/dist/wallets/walletConnectors/{chunk-HWPKCIBE.js → chunk-EMBU4RXK.js} +1 -1
  28. package/dist/wallets/walletConnectors/{chunk-TDAVGY5F.js → chunk-FA5DTT5R.js} +1 -1
  29. package/dist/wallets/walletConnectors/{chunk-BYXPFMI7.js → chunk-FCG5Q6JX.js} +1 -1
  30. package/dist/wallets/walletConnectors/{chunk-M3NZ6R2E.js → chunk-HPHADOYD.js} +1 -1
  31. package/dist/wallets/walletConnectors/{chunk-VYBAYMP3.js → chunk-JFHP4YJG.js} +1 -1
  32. package/dist/wallets/walletConnectors/{chunk-DRO6WYMM.js → chunk-JTLLKY2O.js} +1 -1
  33. package/dist/wallets/walletConnectors/{chunk-BBOM42DL.js → chunk-LW6S43RE.js} +1 -1
  34. package/dist/wallets/walletConnectors/{chunk-D6AOOO5F.js → chunk-M2HGGTFE.js} +1 -1
  35. package/dist/wallets/walletConnectors/{chunk-XWUJE7MW.js → chunk-MQSCN4BO.js} +1 -1
  36. package/dist/wallets/walletConnectors/{chunk-FKJJQNKX.js → chunk-MRRZOQGZ.js} +1 -1
  37. package/dist/wallets/walletConnectors/{chunk-OPAZMNA7.js → chunk-QHC4I2FM.js} +1 -1
  38. package/dist/wallets/walletConnectors/{chunk-RZIO5TFF.js → chunk-QS2XIZEH.js} +1 -1
  39. package/dist/wallets/walletConnectors/{chunk-A5N6B5UW.js → chunk-R6Y36CMA.js} +1 -1
  40. package/dist/wallets/walletConnectors/{chunk-2HYNUNAS.js → chunk-RA7MCWF4.js} +1 -1
  41. package/dist/wallets/walletConnectors/{chunk-OBOVHCEI.js → chunk-RLRQYUYC.js} +1 -1
  42. package/dist/wallets/walletConnectors/{chunk-TCAGNB4B.js → chunk-T5KHVUFR.js} +1 -1
  43. package/dist/wallets/walletConnectors/{chunk-BOU4WKRZ.js → chunk-TMFH6GXS.js} +1 -1
  44. package/dist/wallets/walletConnectors/{chunk-ZZZRUXZE.js → chunk-TNZJRXUQ.js} +1 -1
  45. package/dist/wallets/walletConnectors/{chunk-TDIEHTMB.js → chunk-U5QP7MI5.js} +1 -1
  46. package/dist/wallets/walletConnectors/{chunk-NWIQNBJU.js → chunk-UOTQQJJD.js} +1 -1
  47. package/dist/wallets/walletConnectors/{chunk-RNBEDQHF.js → chunk-VU2RNIQG.js} +1 -1
  48. package/dist/wallets/walletConnectors/{chunk-VR4TBQ6S.js → chunk-VYNVAGSV.js} +1 -1
  49. package/dist/wallets/walletConnectors/{chunk-NT2HYJKW.js → chunk-W7Y6I22Y.js} +1 -1
  50. package/dist/wallets/walletConnectors/{chunk-7QONTUXT.js → chunk-YLJDPTYF.js} +1 -1
  51. package/dist/wallets/walletConnectors/{chunk-HS3C7OQV.js → chunk-YMUSFW44.js} +1 -1
  52. package/dist/wallets/walletConnectors/clvWallet/clvWallet.js +2 -2
  53. package/dist/wallets/walletConnectors/coin98Wallet/coin98Wallet.js +2 -2
  54. package/dist/wallets/walletConnectors/coreWallet/coreWallet.js +2 -2
  55. package/dist/wallets/walletConnectors/dawnWallet/dawnWallet.js +2 -2
  56. package/dist/wallets/walletConnectors/desigWallet/desigWallet.js +2 -2
  57. package/dist/wallets/walletConnectors/enkryptWallet/enkryptWallet.js +2 -2
  58. package/dist/wallets/walletConnectors/foxWallet/foxWallet.js +2 -2
  59. package/dist/wallets/walletConnectors/frameWallet/frameWallet.js +2 -2
  60. package/dist/wallets/walletConnectors/frontierWallet/frontierWallet.js +2 -2
  61. package/dist/wallets/walletConnectors/gateWallet/gateWallet.js +2 -2
  62. package/dist/wallets/walletConnectors/index.js +41 -41
  63. package/dist/wallets/walletConnectors/injectedWallet/injectedWallet.js +2 -2
  64. package/dist/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.js +2 -2
  65. package/dist/wallets/walletConnectors/mewWallet/mewWallet.js +2 -2
  66. package/dist/wallets/walletConnectors/okxWallet/okxWallet.js +2 -2
  67. package/dist/wallets/walletConnectors/oneKeyWallet/oneKeyWallet.js +2 -2
  68. package/dist/wallets/walletConnectors/phantomWallet/phantomWallet.js +2 -2
  69. package/dist/wallets/walletConnectors/rabbyWallet/rabbyWallet.js +2 -2
  70. package/dist/wallets/walletConnectors/rainbowWallet/rainbowWallet.js +2 -2
  71. package/dist/wallets/walletConnectors/ramperWallet/ramperWallet.js +2 -2
  72. package/dist/wallets/walletConnectors/roninWallet/roninWallet.js +2 -2
  73. package/dist/wallets/walletConnectors/safeheronWallet/safeheronWallet.js +2 -2
  74. package/dist/wallets/walletConnectors/safepalWallet/safepalWallet.js +2 -2
  75. package/dist/wallets/walletConnectors/subWallet/subWallet.js +2 -2
  76. package/dist/wallets/walletConnectors/tahoWallet/tahoWallet.js +2 -2
  77. package/dist/wallets/walletConnectors/talismanWallet/talismanWallet.js +2 -2
  78. package/dist/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.js +2 -2
  79. package/dist/wallets/walletConnectors/tokenaryWallet/tokenaryWallet.js +2 -2
  80. package/dist/wallets/walletConnectors/trustWallet/trustWallet.js +2 -2
  81. package/dist/wallets/walletConnectors/xdefiWallet/xdefiWallet.js +2 -2
  82. package/dist/wallets/walletConnectors/zealWallet/zealWallet.js +2 -2
  83. package/dist/wallets/walletConnectors/zerionWallet/zerionWallet.js +2 -2
  84. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -247,13 +247,13 @@ function MarbleAvatar(props) {
247
247
  }
248
248
  )
249
249
  ),
250
- /* @__PURE__ */ React4.createElement("g", { mask: `url(#${maskID})` }, /* @__PURE__ */ React4.createElement("rect", { width: SIZE, height: SIZE, fill: properties[0].color }), /* @__PURE__ */ React4.createElement(
250
+ /* @__PURE__ */ React4.createElement("g", { mask: `url(#${maskID})` }, /* @__PURE__ */ React4.createElement("rect", { width: SIZE, height: SIZE, fill: properties[0]?.color }), /* @__PURE__ */ React4.createElement(
251
251
  "path",
252
252
  {
253
253
  filter: `url(#filter_${maskID})`,
254
254
  d: "M32.414 59.35L50.376 70.5H72.5v-71H33.728L26.5 13.381l19.057 27.08L32.414 59.35z",
255
- fill: properties[1].color,
256
- transform: `translate(${properties[1].translateX} ${properties[1].translateY}) rotate(${properties[1].rotate} ${SIZE / 2} ${SIZE / 2}) scale(${properties[2].scale})`
255
+ fill: properties[1]?.color,
256
+ transform: `translate(${properties[1]?.translateX} ${properties[1]?.translateY}) rotate(${properties[1]?.rotate} ${SIZE / 2} ${SIZE / 2}) scale(${properties[2]?.scale})`
257
257
  }
258
258
  ), /* @__PURE__ */ React4.createElement(
259
259
  "path",
@@ -263,8 +263,8 @@ function MarbleAvatar(props) {
263
263
  mixBlendMode: "overlay"
264
264
  },
265
265
  d: "M22.216 24L0 46.75l14.108 38.129L78 86l-3.081-59.276-22.378 4.005 12.972 20.186-23.35 27.395L22.215 24z",
266
- fill: properties[2].color,
267
- transform: `translate(${properties[2].translateX} ${properties[2].translateY}) rotate(${properties[2].rotate} ${SIZE / 2} ${SIZE / 2}) scale(${properties[2].scale})`
266
+ fill: properties[2]?.color,
267
+ transform: `translate(${properties[2]?.translateX} ${properties[2]?.translateY}) rotate(${properties[2]?.rotate} ${SIZE / 2} ${SIZE / 2}) scale(${properties[2]?.scale})`
268
268
  }
269
269
  )),
270
270
  /* @__PURE__ */ React4.createElement("defs", null, /* @__PURE__ */ React4.createElement(
@@ -548,13 +548,13 @@ import { useConfig } from "wagmi";
548
548
  // src/providers/provideFunkitConnectChains.ts
549
549
  import { chainMetadataById } from "@funkit/chains";
550
550
  var provideFunkitConnectChains = (chains) => chains.map((chain) => {
551
- const defaultMetadata = chainMetadataById[chain.id] ?? {};
551
+ const defaultMetadata = chainMetadataById[chain.id];
552
552
  return {
553
553
  ...chain,
554
- name: defaultMetadata.name ?? chain.name,
554
+ name: defaultMetadata?.name ?? chain.name,
555
555
  // favor colloquial names
556
- iconUrl: chain.iconUrl ?? defaultMetadata.iconUrl,
557
- iconBackground: chain.iconBackground ?? defaultMetadata.iconBackground
556
+ iconUrl: chain.iconUrl ?? defaultMetadata?.iconUrl,
557
+ iconBackground: chain.iconBackground ?? defaultMetadata?.iconBackground
558
558
  };
559
559
  });
560
560
  var groupChainsById = (chains) => {
@@ -982,7 +982,7 @@ function parseNumberInputValue(inputValue, separators) {
982
982
  amountString,
983
983
  amountStringNormalized,
984
984
  decimalPart,
985
- integerPart
985
+ integerPart: integerPart ?? ""
986
986
  };
987
987
  }
988
988
  function getCurrencyFormattingOptions(fiatCurrency, locale) {
@@ -1432,7 +1432,7 @@ function setFunkitConnectVersion({ version }) {
1432
1432
  localStorage.setItem(storageKey, version);
1433
1433
  }
1434
1434
  function getCurrentSdkVersion() {
1435
- return "7.1.0-next.8";
1435
+ return "7.1.0-next.9";
1436
1436
  }
1437
1437
  function useFingerprint() {
1438
1438
  const fingerprint = useCallback3(() => {
@@ -1766,6 +1766,9 @@ var DEFAULT_UI_CUSTOMIZATIONS = {
1766
1766
  showTokenAmount: true,
1767
1767
  showTransactionDigest: "none"
1768
1768
  },
1769
+ sourceChangeScreen: {
1770
+ showTargetAssetSelection: false
1771
+ },
1769
1772
  inputAmountScreen: {
1770
1773
  allowTokenAmountInput: true
1771
1774
  },
@@ -1836,6 +1839,10 @@ function useFunkitConfig() {
1836
1839
  transferCryptoScreen: {
1837
1840
  ...DEFAULT_FUNKIT_CONFIG.uiCustomizations.transferCryptoScreen,
1838
1841
  ...originalFunkitConfig.uiCustomizations?.transferCryptoScreen
1842
+ },
1843
+ sourceChangeScreen: {
1844
+ ...DEFAULT_FUNKIT_CONFIG.uiCustomizations.sourceChangeScreen,
1845
+ ...originalFunkitConfig.uiCustomizations?.sourceChangeScreen
1839
1846
  }
1840
1847
  }
1841
1848
  };
@@ -3084,10 +3091,14 @@ function deriveAllFlags(config, userContext) {
3084
3091
  key,
3085
3092
  deriveFlag(key, flag, userContext)
3086
3093
  ]).filter(([key, value]) => {
3087
- if (typeof value !== config[key].type) {
3094
+ const configItem = config[key];
3095
+ if (!configItem) {
3096
+ return false;
3097
+ }
3098
+ if (typeof value !== configItem.type) {
3088
3099
  logger.warn("flag_mismatchingType", {
3089
3100
  flagKey: key,
3090
- type: config[key].type,
3101
+ type: configItem.type,
3091
3102
  value
3092
3103
  });
3093
3104
  return false;
@@ -4703,6 +4714,29 @@ var LIGHTER_DEPOSIT_ADDRESS = getAddress(
4703
4714
  );
4704
4715
  var LIGHTER_NATIVE_FLOW_TIME_ESTIMATE_SECONDS = 60 * 2;
4705
4716
  var LIGHTER_DELAYED_AUTO_TRIGGER_CUTOFF = 60 * 5;
4717
+ var LIGHTER_DYNAMIC_ROUTING_ID = {
4718
+ ETH_SPOT: "LIGHTER_ETH_SPOT",
4719
+ USDC_PERPS: "LIGHTER_USDC_PERPS",
4720
+ ETH_SPOT_NEW_USER: "LIGHTER_ETH_SPOT_NEW_USER",
4721
+ USDC_PERPS_NEW_USER: "LIGHTER_USDC_PERPS_NEW_USER"
4722
+ };
4723
+ var LIGHTER_TOKEN_ADDRESS_BY_ROUTING_ID = {
4724
+ "0x0000000000000000000000000000000000000001": LIGHTER_DYNAMIC_ROUTING_ID.ETH_SPOT,
4725
+ "0x0000000000000000000000000000000000000000": LIGHTER_DYNAMIC_ROUTING_ID.USDC_PERPS,
4726
+ "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": LIGHTER_DYNAMIC_ROUTING_ID.ETH_SPOT_NEW_USER,
4727
+ "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": LIGHTER_DYNAMIC_ROUTING_ID.USDC_PERPS_NEW_USER
4728
+ };
4729
+ var LIGHTER_ROUTING_ID_BY_TOKEN_ADDRESS = Object.fromEntries(
4730
+ Object.entries(LIGHTER_TOKEN_ADDRESS_BY_ROUTING_ID).map(
4731
+ ([address, routingId]) => [routingId, address]
4732
+ )
4733
+ );
4734
+ var getLighterRoutingIdByTokenAddress = (address) => {
4735
+ return LIGHTER_TOKEN_ADDRESS_BY_ROUTING_ID[address];
4736
+ };
4737
+ var getLighterTokenAddressByRoutingId = (id) => {
4738
+ return LIGHTER_ROUTING_ID_BY_TOKEN_ADDRESS[id];
4739
+ };
4706
4740
 
4707
4741
  // src/components/FunCheckoutHistory/FunCheckoutStatus.tsx
4708
4742
  import React27, { useEffect as useEffect11, useMemo as useMemo14, useState as useState11 } from "react";
@@ -6101,13 +6135,20 @@ function useCustomStatusAnimationAboveTopbar({
6101
6135
  dialogContent?.scrollBy({ top: e.deltaY, behavior: "auto" });
6102
6136
  };
6103
6137
  const handleTouchStart = (e) => {
6104
- lastY.current = e.touches[0].clientY;
6138
+ const touch = e.touches[0];
6139
+ if (touch) {
6140
+ lastY.current = touch.clientY;
6141
+ }
6105
6142
  };
6106
6143
  const handleTouchMove = (e) => {
6107
6144
  if (!lastY.current) {
6108
6145
  return;
6109
6146
  }
6110
- const newY = e.touches[0].clientY;
6147
+ const touch = e.touches[0];
6148
+ if (!touch) {
6149
+ return;
6150
+ }
6151
+ const newY = touch.clientY;
6111
6152
  const deltaY = newY - lastY.current;
6112
6153
  dialogContent?.scrollBy({ top: -deltaY, behavior: "auto" });
6113
6154
  lastY.current = newY;
@@ -6753,6 +6794,9 @@ function getExplicitInjectedProvider(flag) {
6753
6794
  function getWindowProviderNamespace(namespace) {
6754
6795
  const providerSearch = (provider, namespace2) => {
6755
6796
  const [property, ...path] = namespace2.split(".");
6797
+ if (!property) {
6798
+ return void 0;
6799
+ }
6756
6800
  const _provider = provider[property];
6757
6801
  if (_provider) {
6758
6802
  if (path.length === 0) {
@@ -7438,7 +7482,7 @@ var useMinTransferLimits = () => {
7438
7482
  }
7439
7483
  const transferLimitKey = userIpInfo?.alpha2 || "DEFAULT";
7440
7484
  const limits = minTransferValue[transferLimitKey] ?? minTransferValue.DEFAULT;
7441
- return limits;
7485
+ return limits ?? { mainnet: 0, nonMainnet: 0 };
7442
7486
  };
7443
7487
  function getMinTransferValueForChain(chainId, limits) {
7444
7488
  const MAINNET_IDS = [mainnet6.id, bitcoinChain.id];
@@ -7596,7 +7640,7 @@ function getPreferredNetwork(networks, targetChainId) {
7596
7640
  pickedNetwork = networkMap[chainId];
7597
7641
  }
7598
7642
  }
7599
- return pickedNetwork;
7643
+ return pickedNetwork ?? null;
7600
7644
  }
7601
7645
  function transformBluvoBalancesToAssetHoldings(balances, preferredChainId) {
7602
7646
  const LOG_PREFIX = "bluvo-transformBalance";
@@ -7931,7 +7975,8 @@ var buy_en_default = {
7931
7975
  yourGasCostsTooltip: "Amount paid to send assets to your purchase address."
7932
7976
  },
7933
7977
  virtualFiatAccount: {
7934
- transferDetails: "You will be provided with the transfer details for SEPA payments. Once processed, the funds you will send to the account will be automatically purchased to your {{appName}} account."
7978
+ transferDetails: "You will be provided with the transfer details for SEPA payments. Once processed, the funds you will send to the account will be automatically purchased to your {{appName}} account.",
7979
+ unableToCreateAccount: "Unable to create account. Please try again or contact support for assistance."
7935
7980
  },
7936
7981
  textCustomizations: {
7937
7982
  virtualFiat: "Buy with SEPA",
@@ -8340,7 +8385,8 @@ var en_default = {
8340
8385
  kycVerification: "KYC verification",
8341
8386
  createVirtualAccount: "Create your EUR virtual fiat account",
8342
8387
  transferDetails: "You will be provided with the transfer details for SEPA payments. Once processed, the funds you will send to the account will be automatically deposited to your {{appName}} account.",
8343
- takeLessThan3Mins: "Should take less than 3 mins"
8388
+ takeLessThan3Mins: "Should take less than 3 mins",
8389
+ unableToCreateAccount: "Unable to create account. Please try again or contact support for assistance."
8344
8390
  },
8345
8391
  brokerage: {
8346
8392
  verificationRequired: "Verification Required",
@@ -8366,6 +8412,7 @@ var en_default = {
8366
8412
  thirdPartyConnectionMessage: "{{appName}} will use a 3rd party to connect your {{exchangeName}} account."
8367
8413
  },
8368
8414
  sourceChange: {
8415
+ selectTokenLabel: "Select token",
8369
8416
  selectPaymentMethod: "Select payment method",
8370
8417
  moreOptions: "More options",
8371
8418
  more: "more",
@@ -8843,7 +8890,8 @@ var es_default = {
8843
8890
  kycVerification: "Verificaci\xF3n KYC",
8844
8891
  createVirtualAccount: "Crea tu cuenta virtual fiat en EUR",
8845
8892
  transferDetails: "Se te proporcionar\xE1n los detalles de transferencia para pagos SEPA. Una vez procesados, los fondos que env\xEDes a la cuenta se depositar\xE1n autom\xE1ticamente en tu cuenta de {{appName}}.",
8846
- takeLessThan3Mins: "Deber\xEDa tomar menos de 3 minutos"
8893
+ takeLessThan3Mins: "Deber\xEDa tomar menos de 3 minutos",
8894
+ unableToCreateAccount: "No se pudo crear la cuenta. Por favor, int\xE9ntalo de nuevo o contacta a soporte para obtener ayuda."
8847
8895
  },
8848
8896
  brokerage: {
8849
8897
  verificationRequired: "Verificaci\xF3n Requerida",
@@ -8869,6 +8917,7 @@ var es_default = {
8869
8917
  thirdPartyConnectionMessage: "{{appName}} usar\xE1 un tercero para conectar tu cuenta de {{exchangeName}}."
8870
8918
  },
8871
8919
  sourceChange: {
8920
+ selectTokenLabel: "Seleccionar token",
8872
8921
  selectPaymentMethod: "Seleccionar m\xE9todo de pago",
8873
8922
  moreOptions: "M\xE1s opciones",
8874
8923
  more: "m\xE1s",
@@ -9346,7 +9395,8 @@ var fr_default = {
9346
9395
  kycVerification: "V\xE9rification KYC",
9347
9396
  createVirtualAccount: "Cr\xE9ez votre compte fiat virtuel EUR",
9348
9397
  transferDetails: "Les d\xE9tails de transfert pour les paiements SEPA vous seront fournis. Une fois trait\xE9s, les fonds que vous enverrez au compte seront automatiquement d\xE9pos\xE9s sur votre compte {{appName}}.",
9349
- takeLessThan3Mins: "Devrait prendre moins de 3 minutes"
9398
+ takeLessThan3Mins: "Devrait prendre moins de 3 minutes",
9399
+ unableToCreateAccount: "Impossible de cr\xE9er le compte. Veuillez r\xE9essayer ou contacter le support pour obtenir de l'aide."
9350
9400
  },
9351
9401
  brokerage: {
9352
9402
  verificationRequired: "V\xE9rification requise",
@@ -9372,6 +9422,7 @@ var fr_default = {
9372
9422
  thirdPartyConnectionMessage: "{{appName}} utilisera un tiers pour connecter votre compte {{exchangeName}}."
9373
9423
  },
9374
9424
  sourceChange: {
9425
+ selectTokenLabel: "S\xE9lectionner le token",
9375
9426
  selectPaymentMethod: "S\xE9lectionnez le mode de paiement",
9376
9427
  moreOptions: "Plus d'options",
9377
9428
  more: "plus",
@@ -9849,7 +9900,8 @@ var ja_default = {
9849
9900
  kycVerification: "KYC\u8A8D\u8A3C",
9850
9901
  createVirtualAccount: "EUR\u4EEE\u60F3\u6CD5\u5B9A\u901A\u8CA8\u53E3\u5EA7\u3092\u4F5C\u6210",
9851
9902
  transferDetails: "SEPA\u6C7A\u6E08\u7528\u306E\u9001\u91D1\u8A73\u7D30\u304C\u63D0\u4F9B\u3055\u308C\u307E\u3059\u3002\u51E6\u7406\u304C\u5B8C\u4E86\u3059\u308B\u3068\u3001\u53E3\u5EA7\u306B\u9001\u91D1\u3057\u305F\u8CC7\u91D1\u304C\u81EA\u52D5\u7684\u306B{{appName}}\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u5165\u91D1\u3055\u308C\u307E\u3059\u3002",
9852
- takeLessThan3Mins: "3\u5206\u4EE5\u5185\u3067\u5B8C\u4E86\u3057\u307E\u3059"
9903
+ takeLessThan3Mins: "3\u5206\u4EE5\u5185\u3067\u5B8C\u4E86\u3057\u307E\u3059",
9904
+ unableToCreateAccount: "\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u3044\u305F\u3060\u304F\u304B\u3001\u30B5\u30DD\u30FC\u30C8\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u304F\u3060\u3055\u3044\u3002"
9853
9905
  },
9854
9906
  brokerage: {
9855
9907
  verificationRequired: "\u8A8D\u8A3C\u304C\u5FC5\u8981",
@@ -9875,6 +9927,7 @@ var ja_default = {
9875
9927
  thirdPartyConnectionMessage: "{{appName}}\u306F\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u3092\u4F7F\u7528\u3057\u3066{{exchangeName}}\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u63A5\u7D9A\u3057\u307E\u3059\u3002"
9876
9928
  },
9877
9929
  sourceChange: {
9930
+ selectTokenLabel: "\u30C8\u30FC\u30AF\u30F3\u3092\u9078\u629E",
9878
9931
  selectPaymentMethod: "\u652F\u6255\u3044\u65B9\u6CD5\u3092\u9078\u629E",
9879
9932
  moreOptions: "\u305D\u306E\u4ED6\u306E\u30AA\u30D7\u30B7\u30E7\u30F3",
9880
9933
  more: "\u3082\u3063\u3068\u898B\u308B",
@@ -10352,7 +10405,8 @@ var ko_default = {
10352
10405
  kycVerification: "KYC \uC778\uC99D",
10353
10406
  createVirtualAccount: "EUR \uAC00\uC0C1 \uBC95\uC815\uD654\uD3D0 \uACC4\uC815 \uC0DD\uC131",
10354
10407
  transferDetails: "SEPA \uACB0\uC81C\uB97C \uC704\uD55C \uC1A1\uAE08 \uC138\uBD80 \uC815\uBCF4\uAC00 \uC81C\uACF5\uB429\uB2C8\uB2E4. \uCC98\uB9AC\uB418\uBA74 \uACC4\uC815\uC73C\uB85C \uBCF4\uB0B8 \uC790\uAE08\uC774 {{appName}} \uACC4\uC815\uC5D0 \uC790\uB3D9\uC73C\uB85C \uC785\uAE08\uB429\uB2C8\uB2E4.",
10355
- takeLessThan3Mins: "3\uBD84 \uBBF8\uB9CC \uC18C\uC694"
10408
+ takeLessThan3Mins: "3\uBD84 \uBBF8\uB9CC \uC18C\uC694",
10409
+ unableToCreateAccount: "\uACC4\uC815\uC744 \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uAC70\uB098 \uC9C0\uC6D0\uD300\uC5D0 \uBB38\uC758\uD558\uC138\uC694."
10356
10410
  },
10357
10411
  brokerage: {
10358
10412
  verificationRequired: "\uC778\uC99D \uD544\uC694",
@@ -10378,6 +10432,7 @@ var ko_default = {
10378
10432
  thirdPartyConnectionMessage: "{{appName}}\uC740(\uB294) {{exchangeName}} \uACC4\uC815\uC744 \uC5F0\uACB0\uD558\uAE30 \uC704\uD574 \uC81C3\uC790\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4."
10379
10433
  },
10380
10434
  sourceChange: {
10435
+ selectTokenLabel: "\uD1A0\uD070 \uC120\uD0DD",
10381
10436
  selectPaymentMethod: "\uACB0\uC81C \uBC29\uBC95 \uC120\uD0DD",
10382
10437
  moreOptions: "\uB354 \uB9CE\uC740 \uC635\uC158",
10383
10438
  more: "\uB354 \uBCF4\uAE30",
@@ -10855,7 +10910,8 @@ var ru_default = {
10855
10910
  kycVerification: "KYC \u0432\u0435\u0440\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F",
10856
10911
  createVirtualAccount: "\u0421\u043E\u0437\u0434\u0430\u0439\u0442\u0435 \u0432\u0430\u0448 \u0432\u0438\u0440\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0439 \u0444\u0438\u0430\u0442\u043D\u044B\u0439 \u0441\u0447\u0451\u0442 \u0432 EUR",
10857
10912
  transferDetails: "\u0412\u0430\u043C \u0431\u0443\u0434\u0443\u0442 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u044B \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u043F\u0435\u0440\u0435\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u043F\u043B\u0430\u0442\u0435\u0436\u0435\u0439 SEPA. \u041F\u043E\u0441\u043B\u0435 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0432\u044B \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u0435 \u043D\u0430 \u0441\u0447\u0451\u0442, \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0437\u0430\u0447\u0438\u0441\u043B\u0435\u043D\u044B \u043D\u0430 \u0432\u0430\u0448 \u0441\u0447\u0451\u0442 {{appName}}.",
10858
- takeLessThan3Mins: "\u0414\u043E\u043B\u0436\u043D\u043E \u0437\u0430\u043D\u044F\u0442\u044C \u043C\u0435\u043D\u0435\u0435 3 \u043C\u0438\u043D\u0443\u0442"
10913
+ takeLessThan3Mins: "\u0414\u043E\u043B\u0436\u043D\u043E \u0437\u0430\u043D\u044F\u0442\u044C \u043C\u0435\u043D\u0435\u0435 3 \u043C\u0438\u043D\u0443\u0442",
10914
+ unableToCreateAccount: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0430\u043A\u043A\u0430\u0443\u043D\u0442. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437 \u0438\u043B\u0438 \u043E\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044C \u0432 \u0441\u043B\u0443\u0436\u0431\u0443 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438."
10859
10915
  },
10860
10916
  brokerage: {
10861
10917
  verificationRequired: "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0432\u0435\u0440\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F",
@@ -10881,6 +10937,7 @@ var ru_default = {
10881
10937
  thirdPartyConnectionMessage: "{{appName}} \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0435\u0433\u043E \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0434\u043B\u044F \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0430 {{exchangeName}}."
10882
10938
  },
10883
10939
  sourceChange: {
10940
+ selectTokenLabel: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u043E\u043A\u0435\u043D",
10884
10941
  selectPaymentMethod: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u043F\u043E\u0441\u043E\u0431 \u043E\u043F\u043B\u0430\u0442\u044B",
10885
10942
  moreOptions: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043E\u043F\u0446\u0438\u0439",
10886
10943
  more: "\u0431\u043E\u043B\u044C\u0448\u0435",
@@ -11358,7 +11415,8 @@ var tr_default = {
11358
11415
  kycVerification: "KYC do\u011Frulamas\u0131",
11359
11416
  createVirtualAccount: "EUR sanal fiat hesab\u0131n\u0131z\u0131 olu\u015Fturun",
11360
11417
  transferDetails: "SEPA \xF6demeleri i\xE7in transfer detaylar\u0131 sa\u011Flanacakt\u0131r. \u0130\u015Flendikten sonra, hesaba g\xF6nderece\u011Finiz fonlar otomatik olarak {{appName}} hesab\u0131n\u0131za yat\u0131r\u0131lacakt\u0131r.",
11361
- takeLessThan3Mins: "3 dakikadan az s\xFCrmeli"
11418
+ takeLessThan3Mins: "3 dakikadan az s\xFCrmeli",
11419
+ unableToCreateAccount: "Hesap olu\u015Fturulamad\u0131. L\xFCtfen tekrar deneyin veya yard\u0131m i\xE7in destek ekibiyle ileti\u015Fime ge\xE7in."
11362
11420
  },
11363
11421
  brokerage: {
11364
11422
  verificationRequired: "Do\u011Frulama Gerekli",
@@ -11384,6 +11442,7 @@ var tr_default = {
11384
11442
  thirdPartyConnectionMessage: "{{appName}}, {{exchangeName}} hesab\u0131n\u0131z\u0131 ba\u011Flamak i\xE7in 3. parti bir hizmet kullanacakt\u0131r."
11385
11443
  },
11386
11444
  sourceChange: {
11445
+ selectTokenLabel: "Token se\xE7in",
11387
11446
  selectPaymentMethod: "\xD6deme y\xF6ntemi se\xE7in",
11388
11447
  moreOptions: "Daha fazla se\xE7enek",
11389
11448
  more: "daha fazla",
@@ -11861,7 +11920,8 @@ var zh_default = {
11861
11920
  kycVerification: "KYC\u9A8C\u8BC1",
11862
11921
  createVirtualAccount: "\u521B\u5EFA\u60A8\u7684\u6B27\u5143\u865A\u62DF\u6CD5\u5E01\u8D26\u6237",
11863
11922
  transferDetails: "\u60A8\u5C06\u83B7\u5F97SEPA\u4ED8\u6B3E\u7684\u8F6C\u8D26\u8BE6\u60C5\u3002\u5904\u7406\u5B8C\u6210\u540E\uFF0C\u60A8\u53D1\u9001\u5230\u8D26\u6237\u7684\u8D44\u91D1\u5C06\u81EA\u52A8\u5B58\u5165\u60A8\u7684 {{appName}} \u8D26\u6237\u3002",
11864
- takeLessThan3Mins: "\u5E94\u5C11\u4E8E3\u5206\u949F"
11923
+ takeLessThan3Mins: "\u5E94\u5C11\u4E8E3\u5206\u949F",
11924
+ unableToCreateAccount: "\u65E0\u6CD5\u521B\u5EFA\u8D26\u6237\u3002\u8BF7\u91CD\u8BD5\u6216\u8054\u7CFB\u652F\u6301\u5BFB\u6C42\u5E2E\u52A9\u3002"
11865
11925
  },
11866
11926
  brokerage: {
11867
11927
  verificationRequired: "\u9700\u8981\u9A8C\u8BC1",
@@ -11887,6 +11947,7 @@ var zh_default = {
11887
11947
  thirdPartyConnectionMessage: "{{appName}} \u5C06\u4F7F\u7528\u7B2C\u4E09\u65B9\u8FDE\u63A5\u60A8\u7684 {{exchangeName}} \u8D26\u6237\u3002"
11888
11948
  },
11889
11949
  sourceChange: {
11950
+ selectTokenLabel: "\u9009\u62E9\u4EE3\u5E01",
11890
11951
  selectPaymentMethod: "\u9009\u62E9\u652F\u4ED8\u65B9\u5F0F",
11891
11952
  moreOptions: "\u66F4\u591A\u9009\u9879",
11892
11953
  more: "\u66F4\u591A",
@@ -12065,6 +12126,26 @@ var FALLBACK_CHAIN_ID = base4.id.toString();
12065
12126
  var getMockedTargetChainId = ({ targetChain }, mockedChains = []) => {
12066
12127
  return mockedChains.includes(targetChain) ? FALLBACK_CHAIN_ID : targetChain;
12067
12128
  };
12129
+ var getDefaultDynamicTargetAsset = (checkoutConfig) => {
12130
+ const candidates = checkoutConfig?.dynamicTargetAssetCandidates;
12131
+ const routingId = checkoutConfig?.dynamicRoutingId;
12132
+ const routingAddress = getLighterTokenAddressByRoutingId(routingId || "");
12133
+ if (!candidates?.length || !candidates[0]) {
12134
+ return {
12135
+ tokenAddress: checkoutConfig?.targetAsset || "0x",
12136
+ tokenChainId: checkoutConfig?.targetChain || "",
12137
+ tokenSymbol: checkoutConfig?.targetAssetTicker || "",
12138
+ iconSrc: checkoutConfig?.iconSrc || "",
12139
+ targetAssetMinAmount: 0
12140
+ };
12141
+ }
12142
+ if (candidates.length === 1) {
12143
+ return candidates[0];
12144
+ }
12145
+ return candidates.find(({ tokenAddress }) => tokenAddress === routingAddress) ?? candidates.find(
12146
+ (token) => token.tokenSymbol === checkoutConfig?.targetAssetTicker
12147
+ ) ?? candidates.find((token) => token.isDefault) ?? candidates[0];
12148
+ };
12068
12149
 
12069
12150
  // src/domains/wallet.ts
12070
12151
  function getTotalAssetBalance(assets) {
@@ -12926,7 +13007,7 @@ function FunkitQuoteProvider({ children }) {
12926
13007
  const insufficientAmountMatch = error.message.match(
12927
13008
  /target token must be at least \$(\d+(\.\d+)?)/i
12928
13009
  );
12929
- if (insufficientAmountMatch) {
13010
+ if (insufficientAmountMatch?.[1]) {
12930
13011
  return {
12931
13012
  error: {
12932
13013
  minTargetUsdAmount: Number.parseFloat(insufficientAmountMatch[1]),
@@ -13247,7 +13328,7 @@ function useWalletConnectors(mergeEIP6963WithRkConnectors = false) {
13247
13328
  (walletInstance) => walletInstance.id
13248
13329
  );
13249
13330
  const MAX_RECENT_WALLETS = 3;
13250
- const recentWallets = getRecentWalletIds().map((walletId) => walletInstanceById[walletId]).filter(Boolean).slice(0, MAX_RECENT_WALLETS);
13331
+ const recentWallets = getRecentWalletIds().map((walletId) => walletInstanceById[walletId]).filter((wallet) => Boolean(wallet)).slice(0, MAX_RECENT_WALLETS);
13251
13332
  const walletConnectors = [];
13252
13333
  const combinedConnectorsWithRecentWallets = connectorsWithRecentWallets({
13253
13334
  wallets: combinedConnectors,
@@ -14236,7 +14317,7 @@ var moveFocusWithin = (element2, position) => {
14236
14317
  if (focusableElements.length === 0) {
14237
14318
  return;
14238
14319
  }
14239
- focusableElements[position === "end" ? focusableElements.length - 1 : 0].focus();
14320
+ focusableElements[position === "end" ? focusableElements.length - 1 : 0]?.focus();
14240
14321
  };
14241
14322
  function FocusTrap(props) {
14242
14323
  const contentRef = useRef10(null);
@@ -15460,7 +15541,7 @@ function BaseDropdown({
15460
15541
  );
15461
15542
  if (selectedOptionIndex !== -1) {
15462
15543
  const selectedOptionElement = document.getElementById(
15463
- `${filteredOptions[selectedOptionIndex].value}-dropdown-item`
15544
+ `${filteredOptions[selectedOptionIndex]?.value}-dropdown-item`
15464
15545
  );
15465
15546
  selectedOptionElement?.scrollIntoView({
15466
15547
  behavior: "instant",
@@ -15759,12 +15840,12 @@ var ChainDropdown = ({
15759
15840
  iconComponent: !!selectedChainId && /* @__PURE__ */ React65.createElement(
15760
15841
  AsyncImage,
15761
15842
  {
15762
- alt: chainMetadataById[selectedChainId].name,
15763
- background: chainMetadataById[selectedChainId].iconBackground,
15843
+ alt: chainMetadataById[selectedChainId]?.name ?? "",
15844
+ background: chainMetadataById[selectedChainId]?.iconBackground,
15764
15845
  borderRadius: "full",
15765
15846
  height: CHAIN_ICON_SIZE,
15766
15847
  width: CHAIN_ICON_SIZE,
15767
- src: chainMetadataById[selectedChainId].iconUrl
15848
+ src: chainMetadataById[selectedChainId]?.iconUrl ?? ""
15768
15849
  }
15769
15850
  ),
15770
15851
  ...activeItemProps
@@ -15772,7 +15853,7 @@ var ChainDropdown = ({
15772
15853
  value: selectedChainId?.toString() ?? DEFAULT_VALUE,
15773
15854
  options: options.map((chainId) => ({
15774
15855
  value: chainId.toString(),
15775
- label: chainId === DEFAULT_VALUE ? t("common.allChains") : chainMetadataById[chainId].name ?? ""
15856
+ label: chainId === DEFAULT_VALUE ? t("common.allChains") : chainMetadataById[chainId]?.name ?? ""
15776
15857
  })),
15777
15858
  renderDropdownOption: (option, isSelected) => {
15778
15859
  const metadata = chainMetadataById[option.value];
@@ -15815,7 +15896,7 @@ var ChainDropdown = ({
15815
15896
  }
15816
15897
  return dropdownItem;
15817
15898
  },
15818
- preloadIconUrls: chainIds.map((id) => chainMetadataById[id].iconUrl),
15899
+ preloadIconUrls: chainIds.map((id) => chainMetadataById[id]?.iconUrl).filter((url) => !!url),
15819
15900
  testId
15820
15901
  }
15821
15902
  );
@@ -16000,7 +16081,7 @@ var TokenDropdown = ({
16000
16081
  const defaultTokens = safeJSONParse(defaultTokensJson);
16001
16082
  const enabledTokens = assets[selectedChainId];
16002
16083
  const allTokens = getSortedTokens();
16003
- const defaultToken = selectedToken ?? enabledTokens[0];
16084
+ const defaultToken = selectedToken ?? enabledTokens?.[0] ?? "";
16004
16085
  const [isTouched, setIsTouched] = useState22(false);
16005
16086
  const [selectedSymbol, setSelectedSymbol] = useState22(defaultToken);
16006
16087
  const { newTokens, newSymbol } = useNewTokens();
@@ -16011,11 +16092,15 @@ var TokenDropdown = ({
16011
16092
  }, [selectedToken, allTokens, selectedSymbol, enabledTokens]);
16012
16093
  const handleChangeSymbol = (symbol, autoUpdate = true) => {
16013
16094
  setSelectedSymbol(symbol);
16014
- if (!enabledTokens.includes(symbol)) {
16095
+ if (!enabledTokens?.includes(symbol)) {
16015
16096
  const matchingChainIdForToken = Object.entries(assets).find(
16016
16097
  ([, tokens]) => tokens.includes(symbol)
16017
16098
  )?.[0];
16018
- onTokenSelected(symbol, Number(matchingChainIdForToken), autoUpdate);
16099
+ onTokenSelected(
16100
+ symbol,
16101
+ matchingChainIdForToken ? Number(matchingChainIdForToken) : void 0,
16102
+ autoUpdate
16103
+ );
16019
16104
  } else {
16020
16105
  onTokenSelected(symbol, void 0, autoUpdate);
16021
16106
  }
@@ -16052,7 +16137,7 @@ var TokenDropdown = ({
16052
16137
  tagComponent: displayNewTokenBadge && /* @__PURE__ */ React67.createElement(NewTokenBadge, { iconSymbol: newSymbol }),
16053
16138
  tagPosition: "end"
16054
16139
  },
16055
- value: selectedSymbol,
16140
+ value: selectedSymbol ?? "",
16056
16141
  options: allTokens.map((symbol) => ({
16057
16142
  value: symbol,
16058
16143
  label: symbol
@@ -16080,7 +16165,7 @@ var TokenDropdown = ({
16080
16165
  }
16081
16166
  );
16082
16167
  },
16083
- preloadIconUrls: allTokens.map((symbol) => getTokenIconUrl(symbol)),
16168
+ preloadIconUrls: allTokens.map((symbol) => getTokenIconUrl(symbol)).filter((url) => !!url),
16084
16169
  testId
16085
16170
  }
16086
16171
  );
@@ -17478,7 +17563,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
17478
17563
  if (!isTokenSupportedOnChain) {
17479
17564
  const supportedChainIdForToken = Number(
17480
17565
  Object.keys(filteredAssets).find(
17481
- (chainId2) => filteredAssets[Number(chainId2) ?? selectedChainId].includes(token)
17566
+ (chainId2) => filteredAssets[Number(chainId2) ?? selectedChainId]?.includes(token)
17482
17567
  ) ?? defaultChainId
17483
17568
  );
17484
17569
  setSelectedChainId(supportedChainIdForToken);
@@ -17493,8 +17578,10 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
17493
17578
  if (autoUpdate) {
17494
17579
  const isTokenSupportedOnChain = filteredAssets[chainId]?.includes(selectedToken);
17495
17580
  if (!isTokenSupportedOnChain) {
17496
- const defaultTokenForNewChain = filteredAssets[chainId][0];
17497
- setSelectedToken(defaultTokenForNewChain);
17581
+ const defaultTokenForNewChain = filteredAssets[chainId]?.[0];
17582
+ if (defaultTokenForNewChain) {
17583
+ setSelectedToken(defaultTokenForNewChain);
17584
+ }
17498
17585
  }
17499
17586
  }
17500
17587
  };
@@ -17931,10 +18018,13 @@ function useWithdrawalAssets(config) {
17931
18018
  if (excludedTokens) {
17932
18019
  for (const chainIdStr of Object.keys(excludedTokens)) {
17933
18020
  const chainId = Number.parseInt(chainIdStr);
17934
- const excluded = excludedTokens[chainId];
17935
- assets[chainId] = assets[chainId]?.filter(
17936
- (token) => !excluded.includes(token)
17937
- );
18021
+ const excluded = excludedTokens[chainId] ?? [];
18022
+ const chainAssets = assets[chainId];
18023
+ if (chainAssets) {
18024
+ assets[chainId] = chainAssets.filter(
18025
+ (token) => !excluded.includes(token)
18026
+ );
18027
+ }
17938
18028
  }
17939
18029
  }
17940
18030
  return {
@@ -19394,9 +19484,9 @@ var getDynamicValueIconComponent = () => {
19394
19484
  /* @__PURE__ */ React83.createElement(
19395
19485
  AsyncImage,
19396
19486
  {
19397
- alt: metadata.name,
19487
+ alt: metadata?.name ?? "",
19398
19488
  borderRadius: "full",
19399
- src: metadata.iconUrl,
19489
+ src: metadata?.iconUrl ?? "",
19400
19490
  height: 12,
19401
19491
  width: 12
19402
19492
  }
@@ -19443,9 +19533,9 @@ function SupportedChainList({ chainIdList }) {
19443
19533
  /* @__PURE__ */ React83.createElement(
19444
19534
  AsyncImage,
19445
19535
  {
19446
- alt: metadata.name,
19536
+ alt: metadata?.name ?? "",
19447
19537
  borderRadius: "full",
19448
- src: metadata.iconUrl,
19538
+ src: metadata?.iconUrl ?? "",
19449
19539
  height: 12,
19450
19540
  width: 12
19451
19541
  }
@@ -22547,7 +22637,7 @@ function FunCheckoutHistoryHelp({
22547
22637
  const [emailInput, setEmailInput] = useState34("");
22548
22638
  const [subjectInput, setSubjectInput] = useState34("");
22549
22639
  const [resolutionInput, setResolutionInput] = useState34(
22550
- RESOLUTION_OPTIONS[0].value
22640
+ RESOLUTION_OPTIONS[0]?.value ?? "0"
22551
22641
  );
22552
22642
  const [descriptionInput, setDescriptionInput] = useState34("");
22553
22643
  const [errorMessage, setErrorMessage] = useState34();
@@ -22922,7 +23012,7 @@ function WithdrawalModal({
22922
23012
  depositAddress: confirmedHash,
22923
23013
  amount: Number.parseFloat(withdrawnAmount),
22924
23014
  token: config.sourceTokenSymbol,
22925
- tokenIconSrc: config.iconSrc || ASSET_LOGO_SRCS[config.sourceTokenSymbol],
23015
+ tokenIconSrc: config.iconSrc || ASSET_LOGO_SRCS[config.sourceTokenSymbol] || "",
22926
23016
  bottomBarId: MODAL_BOTTOM_BAR_IDS.withdrawal,
22927
23017
  onNewWithdrawal: () => setStep("ENTER_AMOUNT" /* ENTER_AMOUNT */),
22928
23018
  onClose: onCloseWrapper,
@@ -23220,7 +23310,13 @@ function CreateAccountScreen({
23220
23310
  apiKey
23221
23311
  });
23222
23312
  clearFrogAccounts();
23223
- const guid = accounts[0].guid;
23313
+ const guid = accounts[0]?.guid;
23314
+ if (!guid) {
23315
+ return {
23316
+ error: new Error(t("virtualFiatAccount.unableToCreateAccount")),
23317
+ kycLink: null
23318
+ };
23319
+ }
23224
23320
  const ret = await createBridgeCustomer({
23225
23321
  ...data,
23226
23322
  guid,
@@ -24166,7 +24262,7 @@ function BridgeKyc({
24166
24262
  }
24167
24263
  const bridgeCustomer = data?.bridgeCustomer;
24168
24264
  const onShowKyc = async () => {
24169
- if (bridgeCustomer && frogSubAccounts) {
24265
+ if (bridgeCustomer && frogSubAccounts && frogSubAccounts[0]) {
24170
24266
  onNext({
24171
24267
  nextStep: "ShowKyc" /* ShowKyc */,
24172
24268
  // since same screen is displayed as a loading for the iframe
@@ -26514,8 +26610,8 @@ function useCardDisclaimer(checkoutItem, finalConvertedAssetName) {
26514
26610
  const { config } = checkoutItem.initSettings;
26515
26611
  const { chainId, symbol } = checkoutItem.selectedSourceAssetInfo;
26516
26612
  const depositToken = symbol ?? "";
26517
- const sourceChainName = chainMetadataById[chainId].name;
26518
- const toChainName = chainMetadataById[config.targetChain].name;
26613
+ const sourceChainName = chainMetadataById[chainId]?.name ?? "";
26614
+ const toChainName = chainMetadataById[config.targetChain]?.name ?? "";
26519
26615
  const areTokensEqual = (
26520
26616
  // TODO: comparing symbol with the result of a function named 'getCheckoutItemDisplay' does not feel reliable
26521
26617
  depositToken === finalConvertedAssetName && sourceChainName === toChainName
@@ -27973,8 +28069,10 @@ function AnimatedWidthWrapper({ children }) {
27973
28069
  if (containerRef.current) {
27974
28070
  resizeObserverRef.current = new ResizeObserver((entries) => {
27975
28071
  animationFrameRef.current = requestAnimationFrame(() => {
27976
- const requestedWidth = entries[0].contentRect.width;
27977
- setWidth(requestedWidth);
28072
+ const requestedWidth = entries[0]?.contentRect.width;
28073
+ if (requestedWidth !== void 0) {
28074
+ setWidth(requestedWidth);
28075
+ }
27978
28076
  });
27979
28077
  });
27980
28078
  resizeObserverRef.current.observe(containerRef.current);
@@ -29404,7 +29502,7 @@ function attachInputNormalization(element2, inputDecimals, locale) {
29404
29502
  if (caret === 0) {
29405
29503
  return;
29406
29504
  }
29407
- if (oldInputValue[caret - 1].match(groupSeparator)) {
29505
+ if (oldInputValue[caret - 1]?.match(groupSeparator)) {
29408
29506
  onReplaceRange(caret - 2, caret, "");
29409
29507
  return;
29410
29508
  }
@@ -29428,7 +29526,7 @@ function attachInputNormalization(element2, inputDecimals, locale) {
29428
29526
  if (caret === oldInputValue.length) {
29429
29527
  return;
29430
29528
  }
29431
- if (oldInputValue[caret].match(groupSeparator)) {
29529
+ if (oldInputValue[caret]?.match(groupSeparator)) {
29432
29530
  onReplaceRange(caret, caret + 2, "");
29433
29531
  return;
29434
29532
  }
@@ -29489,7 +29587,7 @@ function attachInputNormalization(element2, inputDecimals, locale) {
29489
29587
  return;
29490
29588
  }
29491
29589
  const newAmountStringParts = newAmountString.split(decimalSeparator, 2);
29492
- const newIntegerPart = newAmountStringParts[0];
29590
+ const newIntegerPart = newAmountStringParts[0] ?? "";
29493
29591
  const newDecimalPart = newAmountStringParts[1]?.replace(/[^0-9]/g, "") ?? null;
29494
29592
  const reformattedIntegerPart = reformatIntegerPart(
29495
29593
  newIntegerPart,
@@ -29751,7 +29849,7 @@ var MeldQuoteItem = ({
29751
29849
  if (!quote) {
29752
29850
  return /* @__PURE__ */ React173.createElement(FunSkeletonBlock, { height: "56", width: "full" });
29753
29851
  }
29754
- const destinationCurrencyCode = quote.destinationCurrencyCode.split("_")[0];
29852
+ const destinationCurrencyCode = quote.destinationCurrencyCode.split("_")[0] ?? quote.destinationCurrencyCode;
29755
29853
  const cryptoDecimals = isStablecoin(destinationCurrencyCode) ? 2 : 5;
29756
29854
  const cryptoAmount = formatCryptoAndStringify4(
29757
29855
  quote.destinationAmount,
@@ -29893,7 +29991,7 @@ function autoPickBestQuote(quotes) {
29893
29991
  const sortedByScore = [...quotes].sort(
29894
29992
  (a, b) => (b.customerScore ?? 0) - (a.customerScore ?? 0)
29895
29993
  );
29896
- if ((sortedByScore[0].customerScore ?? 0) >= 30) {
29994
+ if ((sortedByScore[0]?.customerScore ?? 0) >= 30) {
29897
29995
  return sortedByScore[0];
29898
29996
  }
29899
29997
  const coinbaseOrBinance = quotes.filter(
@@ -29919,8 +30017,8 @@ function autoPickBestQuote(quotes) {
29919
30017
  const highestCoinbaseOrBinanceCustomerScore = [...coinbaseOrBinance].sort(
29920
30018
  (a, b) => (b.customerScore ?? 0) - (a.customerScore ?? 0)
29921
30019
  )[0];
29922
- if ((highestCoinbaseOrBinanceDestAmount.destinationAmount ?? 0) >= 0.96 * (highestDestAmount.destinationAmount ?? 0)) {
29923
- if (highestCoinbaseOrBinanceCustomerScore.customerScore === highestDestAmount.customerScore) {
30020
+ if ((highestCoinbaseOrBinanceDestAmount?.destinationAmount ?? 0) >= 0.96 * (highestDestAmount?.destinationAmount ?? 0)) {
30021
+ if (highestCoinbaseOrBinanceCustomerScore?.customerScore === highestDestAmount?.customerScore) {
29924
30022
  return highestCoinbaseOrBinanceDestAmount;
29925
30023
  }
29926
30024
  return highestCoinbaseOrBinanceCustomerScore;
@@ -30784,7 +30882,7 @@ function YouPayYouReceiveWrapper({
30784
30882
  payLabel: textCustomizations.payAmountLabel,
30785
30883
  receiveLabel: textCustomizations.receiveAmountLabel,
30786
30884
  payTokenSymbol: sourceAssetSymbol ?? "",
30787
- payTokenIconSrc: sourceAssetIconSrc,
30885
+ payTokenIconSrc: sourceAssetIconSrc ?? "",
30788
30886
  payTokenChainId: sourceAssetChainId,
30789
30887
  receiveTokenSymbol: stakingToken?.tokenSymbol ?? targetAssetTicker,
30790
30888
  receiveTokenIconSrc: stakingToken?.iconSrc ?? targetIconSrc ?? "",
@@ -31622,7 +31720,7 @@ function MeldQuotes({
31622
31720
  if (hasMoonPay && index === 0) {
31623
31721
  return t("meld.bestPrice");
31624
31722
  }
31625
- if (query.data?.[index].serviceProvider === MeldServiceProvider3.MOONPAY) {
31723
+ if (query.data?.[index]?.serviceProvider === MeldServiceProvider3.MOONPAY) {
31626
31724
  return t("meld.fastest");
31627
31725
  }
31628
31726
  return t("meld.bestPriceFastest");
@@ -31718,7 +31816,7 @@ function MeldRedirect({
31718
31816
  {
31719
31817
  payLabel: t("meldRedirect.youBuy"),
31720
31818
  payTokenSymbol: destinationCurrencyCode ?? "",
31721
- payTokenIconSrc: ASSET_LOGO_SRCS[destinationCurrencyCode] ?? FALLBACK_ASSET,
31819
+ payTokenIconSrc: (destinationCurrencyCode && ASSET_LOGO_SRCS[destinationCurrencyCode]) ?? FALLBACK_ASSET,
31722
31820
  payTokenChainId: getChainIdByName(destinationChainName),
31723
31821
  receiveTokenSymbol: checkoutConfig?.targetAssetTicker ?? "",
31724
31822
  receiveTokenIconSrc: checkoutConfig?.iconSrc ?? "",
@@ -31760,7 +31858,8 @@ var ReceiveTokenDropdown = ({
31760
31858
  selectedToken,
31761
31859
  onTokenSelected,
31762
31860
  label,
31763
- activeItemLabel
31861
+ activeItemLabel,
31862
+ activeItemProps
31764
31863
  }) => {
31765
31864
  const allTokens = Array.from(new Set(Object.values(tokens).flat()));
31766
31865
  const tokenBadgeText = tokens.find(
@@ -31790,7 +31889,8 @@ var ReceiveTokenDropdown = ({
31790
31889
  }
31791
31890
  ),
31792
31891
  alwaysVisibleLabel: activeItemLabel,
31793
- tagComponent: tokenBadgeText ? aprTag(tokenBadgeText) : void 0
31892
+ tagComponent: tokenBadgeText ? aprTag(tokenBadgeText) : void 0,
31893
+ ...activeItemProps
31794
31894
  },
31795
31895
  value: selectedToken ?? "",
31796
31896
  options: allTokens.map((token) => ({
@@ -31826,9 +31926,7 @@ var ReceiveTokenDropdown = ({
31826
31926
  }
31827
31927
  );
31828
31928
  },
31829
- preloadIconUrls: allTokens.map(
31830
- (token) => getTokenIconUrl(token.tokenSymbol, tokens)
31831
- )
31929
+ preloadIconUrls: allTokens.map((token) => getTokenIconUrl(token.tokenSymbol, tokens)).filter((url) => !!url)
31832
31930
  }
31833
31931
  );
31834
31932
  };
@@ -31926,7 +32024,9 @@ function useAllowedAssets() {
31926
32024
  return token.tokenChainId === String(chainId) && token.tokenAddress.toLowerCase() === tokenAddress.toLowerCase();
31927
32025
  }
31928
32026
  );
31929
- return !disabledByCustomerList && (isRelayEnabled(chainId, tokenAddress) || tokens[chainId]?.has(tokenAddress.toLowerCase()));
32027
+ return Boolean(
32028
+ !disabledByCustomerList && (isRelayEnabled(chainId, tokenAddress) || tokens[chainId]?.has(tokenAddress.toLowerCase()))
32029
+ );
31930
32030
  },
31931
32031
  [
31932
32032
  tokens,
@@ -31960,7 +32060,7 @@ var useDynamicRoutes = (_dynamicRoutingId) => {
31960
32060
  DYNAMIC_ROUTES,
31961
32061
  toMutable(dynamicRoutingConfig)
31962
32062
  );
31963
- return indexedDynamicRoutes[dynamicRoutingId].findPath;
32063
+ return indexedDynamicRoutes[dynamicRoutingId]?.findPath || (() => null);
31964
32064
  }, [dynamicRoutingId, dynamicRoutingConfig]);
31965
32065
  return {
31966
32066
  findPath
@@ -32145,7 +32245,7 @@ function useScrollToSelectedAsset(selectedChainTokenSymbol) {
32145
32245
  }
32146
32246
  function computeDefaultToken(checkoutConfig) {
32147
32247
  const candidates = checkoutConfig?.dynamicTargetAssetCandidates;
32148
- if (!candidates || candidates.length <= 1) {
32248
+ if (!candidates?.length) {
32149
32249
  return {
32150
32250
  tokenAddress: checkoutConfig?.targetAsset || "0x",
32151
32251
  tokenChainId: checkoutConfig?.targetChain || "",
@@ -32154,6 +32254,9 @@ function computeDefaultToken(checkoutConfig) {
32154
32254
  targetAssetMinAmount: 0
32155
32255
  };
32156
32256
  }
32257
+ if (candidates.length === 1) {
32258
+ return candidates[0];
32259
+ }
32157
32260
  return candidates.find(
32158
32261
  (token) => token.tokenSymbol === checkoutConfig?.targetAssetTicker
32159
32262
  ) ?? candidates.find((token) => token.isDefault) ?? candidates[0];
@@ -32239,7 +32342,7 @@ function AccountSelectAsset({
32239
32342
  if (!isTargetAssetSelectable) {
32240
32343
  return;
32241
32344
  }
32242
- if (showTargetAssetSelection) {
32345
+ if (showTargetAssetSelection && selectedTargetAsset) {
32243
32346
  updateTargetAsset({
32244
32347
  targetAsset: selectedTargetAsset.tokenAddress,
32245
32348
  targetChain: selectedTargetAsset.tokenChainId,
@@ -32273,6 +32376,9 @@ function AccountSelectAsset({
32273
32376
  return;
32274
32377
  }
32275
32378
  const tokenItem = accountHoldings[selectedChainTokenSymbol];
32379
+ if (!tokenItem) {
32380
+ return;
32381
+ }
32276
32382
  updateSourceAsset(tokenItem);
32277
32383
  if (isBrokerageAsset(tokenItem)) {
32278
32384
  setSelectedBrokerageAsset(tokenItem);
@@ -32310,7 +32416,7 @@ function AccountSelectAsset({
32310
32416
  checkoutItem?.selectedSourceAssetInfo,
32311
32417
  explicitlySelectedChainTokenSymbol
32312
32418
  ]);
32313
- useScrollToSelectedAsset(selectedChainTokenSymbol);
32419
+ useScrollToSelectedAsset(selectedChainTokenSymbol ?? "");
32314
32420
  const bottomSectionRef = useBottomSectionRef();
32315
32421
  const isLoading = isLoadingAssets || isLoadingEnrichedHoldings;
32316
32422
  const isAssetsEmpty = assetOptions.length === 0;
@@ -32783,7 +32889,10 @@ function PayPal() {
32783
32889
  const { apiKey } = useFunkitConfig();
32784
32890
  const { data: defaultCurrency } = useMeldDefaultCurrency("card" /* CARD */);
32785
32891
  const amounts = useFiatAmountOptions(defaultCurrency);
32786
- const { mutateAsync, isPending } = useMeldLink(amounts[1], defaultCurrency);
32892
+ const { mutateAsync, isPending } = useMeldLink(
32893
+ amounts[1] ?? 0,
32894
+ defaultCurrency
32895
+ );
32787
32896
  const isMeldEnabled = useIsMeldEnabled();
32788
32897
  const { checkoutItem } = useCheckoutContext();
32789
32898
  const isPaypalReady = false;
@@ -32820,14 +32929,25 @@ function SourceChange({
32820
32929
  const { logMeasuredEvent } = useTrack();
32821
32930
  const { paymentMethodInfo, targetChainId } = modalState;
32822
32931
  const { t } = useFunkitTranslation();
32823
- const { updateSelectedPaymentMethodInfo, checkoutItem } = useCheckoutContext();
32932
+ const {
32933
+ updateSelectedPaymentMethodInfo,
32934
+ updateTargetAsset,
32935
+ checkoutItem,
32936
+ updateDynamicRoutingId
32937
+ } = useCheckoutContext();
32824
32938
  const [connectedSource, setConnectedSource] = useState59(paymentMethodInfo);
32825
32939
  const [newSource, setNewSource] = useState59();
32826
32940
  const { data: fiatAccounts, isLoading: isLoadingFiatAccounts } = useVirtualFiatAccounts();
32827
32941
  const matchingFiatAccount = useMatchingVirtualFiatAccount(fiatAccounts);
32828
- const { apiKey, textCustomizations } = useFunkitConfig();
32942
+ const { apiKey, textCustomizations, uiCustomizations } = useFunkitConfig();
32943
+ const checkoutConfig = checkoutItem?.initSettings.config;
32829
32944
  const isDefiMode = checkoutItem?.initSettings.config.isDefiMode;
32830
32945
  const hasAutoContinue = !isOstiumCustomer(apiKey) && !isDefiMode;
32946
+ const dynamicTargetAssets = checkoutConfig?.dynamicTargetAssetCandidates;
32947
+ const isTargetAssetSelectable = uiCustomizations.sourceChangeScreen.showTargetAssetSelection && dynamicTargetAssets && dynamicTargetAssets.length > 1;
32948
+ const [selectedTargetAsset, setSelectedTargetAsset] = useState59(
32949
+ () => getDefaultDynamicTargetAsset(checkoutConfig)
32950
+ );
32831
32951
  useEffect52(() => {
32832
32952
  if (!paymentMethodInfo) {
32833
32953
  return;
@@ -32935,6 +33055,20 @@ function SourceChange({
32935
33055
  });
32936
33056
  }
32937
33057
  };
33058
+ const handleTargetAssetChange = (token) => {
33059
+ setSelectedTargetAsset(token);
33060
+ updateTargetAsset({
33061
+ targetAsset: token.tokenAddress,
33062
+ targetChain: token.tokenChainId,
33063
+ targetAssetTicker: token.tokenSymbol,
33064
+ targetAssetMinAmount: token.targetAssetMinAmount,
33065
+ iconSrc: token.iconSrc
33066
+ });
33067
+ if (isLighterxyzCustomer(apiKey)) {
33068
+ const routingId = getLighterRoutingIdByTokenAddress(token.tokenAddress);
33069
+ routingId && updateDynamicRoutingId(routingId);
33070
+ }
33071
+ };
32938
33072
  useEffect52(() => {
32939
33073
  if (connectionStatus !== "disconnected" && connectionStatus !== "loading") {
32940
33074
  onCloseConnectModal();
@@ -32970,7 +33104,17 @@ function SourceChange({
32970
33104
  );
32971
33105
  }
32972
33106
  const bottomSectionRef = useBottomSectionRef();
32973
- return /* @__PURE__ */ React189.createElement(React189.Fragment, null, isDefiMode ? /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "28" }, /* @__PURE__ */ React189.createElement(DefiPurchaseSection, { config: checkoutItem.initSettings.config }), /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "16" }, /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React189.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.selectPaymentMethod")), preferred.map(renderSource)), /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React189.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.moreOptions")), moreSources.map(renderSource)))) : /* @__PURE__ */ React189.createElement(React189.Fragment, null, /* @__PURE__ */ React189.createElement(
33107
+ return /* @__PURE__ */ React189.createElement(React189.Fragment, null, isTargetAssetSelectable && /* @__PURE__ */ React189.createElement(Box, { marginBottom: "8" }, /* @__PURE__ */ React189.createElement(
33108
+ ReceiveTokenDropdown,
33109
+ {
33110
+ activeItemLabel: t("sourceChange.selectTokenLabel"),
33111
+ activeItemProps: { background: { base: "offBackground" } },
33112
+ chainId: Number(selectedTargetAsset.tokenChainId),
33113
+ onTokenSelected: handleTargetAssetChange,
33114
+ selectedToken: selectedTargetAsset?.tokenSymbol,
33115
+ tokens: dynamicTargetAssets
33116
+ }
33117
+ )), isDefiMode ? /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "28" }, /* @__PURE__ */ React189.createElement(DefiPurchaseSection, { config: checkoutItem.initSettings.config }), /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "16" }, /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React189.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.selectPaymentMethod")), preferred.map(renderSource)), /* @__PURE__ */ React189.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React189.createElement(Text, { size: "13", color: "secondaryText" }, t("sourceChange.moreOptions")), moreSources.map(renderSource)))) : /* @__PURE__ */ React189.createElement(React189.Fragment, null, /* @__PURE__ */ React189.createElement(
32974
33118
  Box,
32975
33119
  {
32976
33120
  display: "flex",
@@ -33148,7 +33292,7 @@ var generateMatrix = (value, errorCorrectionLevel) => {
33148
33292
  if (index % sqrt === 0) {
33149
33293
  rows.push([key]);
33150
33294
  } else {
33151
- rows[rows.length - 1].push(key);
33295
+ rows[rows.length - 1]?.push(key);
33152
33296
  }
33153
33297
  return rows;
33154
33298
  }, []);
@@ -33205,7 +33349,7 @@ function QRCode({
33205
33349
  const matrixMiddleEnd = matrix.length / 2 + clearArenaSize / 2 - 1;
33206
33350
  matrix.forEach((row, i) => {
33207
33351
  row.forEach((_, j) => {
33208
- if (matrix[i][j]) {
33352
+ if (matrix[i]?.[j]) {
33209
33353
  if (!(i < 7 && j < 7 || i > matrix.length - 8 && j < 7 || i < 7 && j > matrix.length - 8)) {
33210
33354
  if (!(i > matrixMiddleStart && i < matrixMiddleEnd && j > matrixMiddleStart && j < matrixMiddleEnd)) {
33211
33355
  dots2.push(
@@ -33509,7 +33653,7 @@ var FunFeatureList = ({
33509
33653
  disabled,
33510
33654
  onClick: handleExpandToggle
33511
33655
  },
33512
- /* @__PURE__ */ React197.createElement(FunFeatureListItem, { ...items[0] }),
33656
+ items[0] && /* @__PURE__ */ React197.createElement(FunFeatureListItem, { ...items[0] }),
33513
33657
  /* @__PURE__ */ React197.createElement(AnimatedCaretDownIcon, { expanded: isDisplayed })
33514
33658
  ), /* @__PURE__ */ React197.createElement(
33515
33659
  motion12.div,
@@ -33951,7 +34095,7 @@ function TransferToken({
33951
34095
  withShadow: true,
33952
34096
  ecl: "H",
33953
34097
  logoSize: 24,
33954
- logoUrl: chainMetadataById[selectedChainId].iconUrl,
34098
+ logoUrl: chainMetadataById[selectedChainId]?.iconUrl,
33955
34099
  size: 152,
33956
34100
  uri: qrCodeUri ?? "",
33957
34101
  enableCornerMarkersRadius: false,
@@ -33964,8 +34108,8 @@ function TransferToken({
33964
34108
  {
33965
34109
  payLabel: textCustomizations.confirmationScreen?.payAmountLabel,
33966
34110
  receiveLabel: textCustomizations.confirmationScreen?.receiveAmountLabel,
33967
- payTokenSymbol: selectedToken,
33968
- payTokenIconSrc: getTokenIconUrl(selectedToken),
34111
+ payTokenSymbol: selectedToken ?? "",
34112
+ payTokenIconSrc: getTokenIconUrl(selectedToken ?? "") ?? "",
33969
34113
  payTokenChainId: selectedChainId.toString(),
33970
34114
  receiveTokenSymbol: targetAssetTicker,
33971
34115
  receiveTokenChainId: targetChain,
@@ -34354,7 +34498,7 @@ var AccountDetailsScreen = ({
34354
34498
  activeTab,
34355
34499
  onTabChange: handleTabChange
34356
34500
  }
34357
- )), /* @__PURE__ */ React206.createElement(Box, { className: getContentAnimation(animation) }, tabs[activeTab].value === "details" ? /* @__PURE__ */ React206.createElement(
34501
+ )), /* @__PURE__ */ React206.createElement(Box, { className: getContentAnimation(animation) }, tabs[activeTab]?.value === "details" ? /* @__PURE__ */ React206.createElement(
34358
34502
  AccountDetailsTab,
34359
34503
  {
34360
34504
  account: sourceDeposit,
@@ -34783,7 +34927,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
34783
34927
  (state) => state === prevState
34784
34928
  );
34785
34929
  const newHistory = history.slice(0, previousStepIndex);
34786
- prevStep.current = newHistory[newHistory.length - 1].step;
34930
+ prevStep.current = newHistory[newHistory.length - 1]?.step ?? null;
34787
34931
  return newHistory;
34788
34932
  });
34789
34933
  const nextState = backWithStep(modalState, prevState);
@@ -34860,11 +35004,13 @@ function FunCheckoutModalHeightAnimationWrapper({
34860
35004
  if (containerRef.current) {
34861
35005
  resizeObserverRef.current = new ResizeObserver((entries) => {
34862
35006
  animationFrameRef.current = requestAnimationFrame(() => {
34863
- const requestedHeight = entries[0].contentRect.height;
34864
- const permittedHeight2 = getPermittedHeight(checkoutStep);
34865
- setHeight(
34866
- requestedHeight > permittedHeight2 ? permittedHeight2 : requestedHeight
34867
- );
35007
+ const requestedHeight = entries[0]?.contentRect.height;
35008
+ if (requestedHeight !== void 0) {
35009
+ const permittedHeight2 = getPermittedHeight(checkoutStep);
35010
+ setHeight(
35011
+ requestedHeight > permittedHeight2 ? permittedHeight2 : requestedHeight
35012
+ );
35013
+ }
34868
35014
  });
34869
35015
  });
34870
35016
  resizeObserverRef.current.observe(containerRef.current);
@@ -36009,7 +36155,7 @@ function ChainLineItem({
36009
36155
  background: chainItem.iconBackground,
36010
36156
  borderRadius: "full",
36011
36157
  height: chainIconSize,
36012
- src: chainItem.iconUrl,
36158
+ src: chainItem.iconUrl ?? void 0,
36013
36159
  width: chainIconSize,
36014
36160
  testId: `chain-option-${chainId}-icon`
36015
36161
  }
@@ -37233,7 +37379,8 @@ var FunkitCheckoutContext = createContext19({
37233
37379
  withdrawalItem: null,
37234
37380
  initNewWithdrawal: () => "",
37235
37381
  updateWithdrawalSourceAssetAmount: () => void 0,
37236
- applyDynamicRouting: () => void 0
37382
+ applyDynamicRouting: () => void 0,
37383
+ updateDynamicRoutingId: () => void 0
37237
37384
  });
37238
37385
  function assertCheckoutItem(checkoutItem) {
37239
37386
  if (!checkoutItem) {
@@ -37716,6 +37863,20 @@ function FunkitCheckoutProvider({ children }) {
37716
37863
  });
37717
37864
  }
37718
37865
  );
37866
+ const updateDynamicRoutingId = useEffectEvent((id) => {
37867
+ updateActiveCheckout((checkoutItem) => {
37868
+ const config = checkoutItem.initSettings.config;
37869
+ return {
37870
+ initSettings: {
37871
+ ...checkoutItem.initSettings,
37872
+ config: {
37873
+ ...config,
37874
+ dynamicRoutingId: id
37875
+ }
37876
+ }
37877
+ };
37878
+ });
37879
+ });
37719
37880
  const updateModalTitleMeta = useEffectEvent((newMeta) => {
37720
37881
  updateActiveCheckout((checkoutItem) => {
37721
37882
  const config = checkoutItem.initSettings.config;
@@ -37773,7 +37934,8 @@ function FunkitCheckoutProvider({ children }) {
37773
37934
  initNewWithdrawal,
37774
37935
  updateCustomRecipient,
37775
37936
  updateWithdrawalSourceAssetAmount,
37776
- applyDynamicRouting
37937
+ applyDynamicRouting,
37938
+ updateDynamicRoutingId
37777
37939
  };
37778
37940
  return /* @__PURE__ */ React238.createElement(FunkitCheckoutContext.Provider, { value: contextValue }, children);
37779
37941
  }