@unifold/ui-react 0.1.71 → 0.1.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { DirectExecutionSucceededEvent, DirectExecutionResponse, ChainType, EvmContractCall, DepositMethod, DepositEvent, Wallet, ProductType, FiatCurrency, ExecutionStatus, FeaturedToken, PaymentNetwork, DefaultTokenResponse, ConfirmIntegrationTransferResult, CheckoutMethod, CheckoutPaymentIntent, CheckoutEvent, WithdrawDirectExecutionSucceededEvent, WithdrawEvent, DestinationToken, DestinationTokenChain, PaymentIntent, DepositQuote, PublicIncidentResponse, SupportedDestinationTokensResponse, SupportedDepositTokensResponse, VerifyAddressResponse } from '@unifold/core';
2
+ import { DirectExecutionSucceededEvent, DirectExecutionFailedEvent, DirectExecutionResponse, ChainType, EvmContractCall, DepositMethod, DepositEvent, Wallet, ProductType, WalletPayMethod, FiatCurrency, ExecutionStatus, FeaturedToken, PaymentNetwork, DefaultTokenResponse, ConfirmIntegrationTransferResult, CheckoutMethod, CheckoutPaymentIntent, CheckoutEvent, WithdrawDirectExecutionSucceededEvent, WithdrawEvent, DestinationToken, DestinationTokenChain, PaymentIntent, DepositQuote, PublicIncidentResponse, WithdrawDirectExecutionFailedEvent, SupportedDestinationTokensResponse, SupportedDepositTokensResponse, VerifyAddressResponse } from '@unifold/core';
3
3
  export { ChainType, DepositMethod } from '@unifold/core';
4
4
  import * as React$1 from 'react';
5
5
  import { MutableRefObject } from 'react';
@@ -9,6 +9,7 @@ import { VariantProps } from 'class-variance-authority';
9
9
  import * as DialogPrimitive from '@radix-ui/react-dialog';
10
10
  import * as SelectPrimitive from '@radix-ui/react-select';
11
11
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
12
+ import { EventTracker, AnalyticsProperties, AnalyticsEvent } from '@unifold/analytics';
12
13
  import { ClassValue } from 'clsx';
13
14
 
14
15
  type DepositConfirmationMode = 'auto_ui' | 'auto_silent' | 'manual';
@@ -48,6 +49,7 @@ interface UseDepositPollingOptions {
48
49
  message: string;
49
50
  error?: unknown;
50
51
  code?: string;
52
+ execution?: DirectExecutionFailedEvent;
51
53
  }) => void;
52
54
  /**
53
55
  * When true (with `depositWalletId`), enables `pollDirectExecutions` as soon as `enabled`
@@ -148,14 +150,14 @@ interface EvmWalletProvider {
148
150
  removeListener?(event: string, callback: (...args: unknown[]) => void): void;
149
151
  }
150
152
 
151
- type DepositModalInitialScreen = 'main' | 'transfer' | 'card' | 'cashapp' | 'apple_pay' | 'tracker' | 'pay_with_exchange' | 'exchange_connect' | 'wallet_connect' | 'bank_transfer' | 'stripe_link';
153
+ type DepositModalInitialScreen = 'main' | 'transfer' | 'card' | 'cashapp' | 'apple_pay' | 'google_pay' | 'tracker' | 'pay_with_exchange' | 'exchange_connect' | 'wallet_connect' | 'bank_transfer' | 'stripe_link';
152
154
  interface DepositModalProps {
153
155
  open: boolean;
154
156
  onOpenChange: (open: boolean) => void;
155
157
  userId: string;
156
158
  publishableKey: string;
157
159
  modalTitle?: string;
158
- /** Main menu — Transfer Crypto row title. @default `"Transfer Crypto"` (from `i18n.depositModal.transferCrypto.title`) */
160
+ /** Main menu — Transfer Crypto row title. @default `"Transfer Crypto"` (localized from `depositModal.transferCrypto.title`) */
159
161
  transferCryptoTitle?: string;
160
162
  /** Main menu — Deposit with Card row title. @default `"Deposit with Card"` */
161
163
  depositWithCardTitle?: string;
@@ -247,13 +249,32 @@ interface DepositModalProps {
247
249
  */
248
250
  enableApplePay?: boolean;
249
251
  /**
250
- * Title shown for the Apple Pay row in the main menu. @default `"Pay with Apple Pay"`
252
+ * Title shown for the Apple Pay row in the main menu.
253
+ * @default `"Pay with Apple Pay"` (localized from `depositModal.applePayMenu.title`)
251
254
  */
252
255
  applePayTitle?: string;
253
256
  /**
254
- * Subtitle shown for the Apple Pay row in the main menu. @default `"Instant"`
257
+ * Subtitle shown for the Apple Pay row in the main menu.
258
+ * @default `"Instant"` (localized from `depositModal.applePayMenu.subtitle`)
255
259
  */
256
260
  applePaySubTitle?: string;
261
+ /**
262
+ * Enable "Pay with Google Pay" (headless Coinbase) option. Overrides dashboard
263
+ * default. Resolves as flag ?? dashboard `google_pay.enabled` ?? true. The
264
+ * server still gates per-region (US-only, NY excluded at launch) at the
265
+ * order-creation step.
266
+ */
267
+ enableGooglePay?: boolean;
268
+ /**
269
+ * Title shown for the Google Pay row in the main menu.
270
+ * @default `"Pay with Google Pay"` (localized from `depositModal.googlePayMenu.title`)
271
+ */
272
+ googlePayTitle?: string;
273
+ /**
274
+ * Subtitle shown for the Google Pay row in the main menu.
275
+ * @default `"Instant"` (localized from `depositModal.googlePayMenu.subtitle`)
276
+ */
277
+ googlePaySubTitle?: string;
257
278
  /**
258
279
  * Enable the "Bank Transfer" section (SEPA, etc.). Overrides dashboard default.
259
280
  * Resolves as flag ?? dashboard `bank_transfer.enabled` ?? true.
@@ -301,7 +322,7 @@ interface DepositModalProps {
301
322
  */
302
323
  displayMode?: 'stacked' | 'tabs';
303
324
  }
304
- declare function DepositModal({ open, onOpenChange, userId, publishableKey, modalTitle, destinationTokenSymbol, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, contractCalls, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, prefilledAmountUsd, hideDepositTracker, showBalanceHeader, transferInputVariant, depositConfirmationMode, enableTransferCrypto, enableConnectWallet, browserWalletAmountQuickSelect, enablePayWithExchange, enableFiatOnramp, enableConnectExchange, enableCashApp, enableApplePay, applePayTitle, applePaySubTitle, enableBankTransfer, enableIncidentBanner, enableStripeLink, userEmail, hideDepositFlowInfo, hideDisplayDescription, onDepositSuccess, onDepositError, onEvent, theme, hideOverlay, initialScreen, displayMode, transferCryptoTitle, depositWithCardTitle, payWithExchangeTitle, depositTrackerTitle, depositTrackerSubTitle, }: DepositModalProps): react_jsx_runtime.JSX.Element;
325
+ declare function DepositModal({ open, onOpenChange, userId, publishableKey, modalTitle, destinationTokenSymbol, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, contractCalls, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, prefilledAmountUsd, hideDepositTracker, showBalanceHeader, transferInputVariant, depositConfirmationMode, enableTransferCrypto, enableConnectWallet, browserWalletAmountQuickSelect, enablePayWithExchange, enableFiatOnramp, enableConnectExchange, enableCashApp, enableApplePay, applePayTitle: applePayTitleProp, applePaySubTitle: applePaySubTitleProp, enableGooglePay, googlePayTitle: googlePayTitleProp, googlePaySubTitle: googlePaySubTitleProp, enableBankTransfer, enableIncidentBanner, enableStripeLink, userEmail, hideDepositFlowInfo, hideDisplayDescription, onDepositSuccess, onDepositError, onEvent, theme, hideOverlay, initialScreen, displayMode, transferCryptoTitle: transferCryptoTitleProp, depositWithCardTitle: depositWithCardTitleProp, payWithExchangeTitle: payWithExchangeTitleProp, depositTrackerTitle: depositTrackerTitleProp, depositTrackerSubTitle: depositTrackerSubTitleProp, }: DepositModalProps): react_jsx_runtime.JSX.Element;
305
326
 
306
327
  interface DepositHeaderProps {
307
328
  title: string;
@@ -464,7 +485,13 @@ declare function BuyWithCard({ userId, publishableKey, view: externalView, onVie
464
485
  destinationTokenSymbol, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, onDepositSuccess, onDepositError, onEvent, themeClass, wallets: externalWallets, assetCdnUrl, hideDepositFlowInfo, hideDisplayDescription, prefilledAmountUsd, }: BuyWithCardProps): react_jsx_runtime.JSX.Element;
465
486
 
466
487
  type View = 'loading_config' | 'disabled' | 'email_input' | 'phone_input' | 'submitting_session' | 'email_otp' | 'phone_otp' | 'amount' | 'checking_deposit' | 'success' | 'guest_limit_reached' | 'limit_upgrade_intro' | 'limit_upgrade_form' | 'limit_upgrade_submitting' | 'limit_upgrade_failed';
467
- interface BuyWithApplePayProps {
488
+ interface BuyWithWalletPayProps {
489
+ /**
490
+ * Device wallet the user pays with. Coinbase runs both wallets through the
491
+ * same guest-checkout order, so this only changes the payment method sent
492
+ * upstream plus the wallet-specific copy and pay button.
493
+ */
494
+ method: WalletPayMethod;
468
495
  userId: string;
469
496
  publishableKey: string;
470
497
  recipientAddress?: string;
@@ -499,10 +526,11 @@ interface BuyWithApplePayProps {
499
526
  /** Stream of the internal view for parent-header sync. */
500
527
  onViewChange?: (view: View) => void;
501
528
  /**
502
- * Label for the exit button on terminal screens (currently the
503
- * guest-limit error). `"Return"` when Apple Pay was reached via the
504
- * deposit-method menu (`initialScreen` unset / `"main"`); `"Close"`
505
- * when the modal was opened directly to Apple Pay.
529
+ * Which exit the button on terminal screens (currently the guest-limit
530
+ * error) offers. `"Return"` when the wallet was reached via the
531
+ * deposit-method menu (`initialScreen` unset / `"main"`); `"Close"` when the
532
+ * modal was opened directly to it. Names the destination, not the copy —
533
+ * the rendered wording comes from the active locale.
506
534
  */
507
535
  exitLabel?: 'Return' | 'Close';
508
536
  /** Invoked when the user taps the exit button on a terminal screen. */
@@ -510,12 +538,28 @@ interface BuyWithApplePayProps {
510
538
  themeClass?: string;
511
539
  }
512
540
  /** Imperative handle: `requestBack` returns true when the child handled the back. */
513
- interface BuyWithApplePayHandle {
541
+ interface BuyWithWalletPayHandle {
514
542
  requestBack: () => boolean;
515
543
  }
516
- declare const BuyWithApplePay: React$1.ForwardRefExoticComponent<BuyWithApplePayProps & React$1.RefAttributes<BuyWithApplePayHandle>>;
544
+ declare const BuyWithWalletPay: React$1.ForwardRefExoticComponent<BuyWithWalletPayProps & React$1.RefAttributes<BuyWithWalletPayHandle>>;
545
+
546
+ type BuyWithApplePayProps = Omit<BuyWithWalletPayProps, 'method'>;
547
+ /**
548
+ * Apple Pay entry point into the headless Coinbase guest-checkout flow.
549
+ * The flow itself lives in {@link BuyWithWalletPay}, which Google Pay
550
+ * shares.
551
+ */
552
+ declare const BuyWithApplePay: React$1.ForwardRefExoticComponent<BuyWithApplePayProps & React$1.RefAttributes<BuyWithWalletPayHandle>>;
553
+
554
+ type BuyWithGooglePayProps = Omit<BuyWithWalletPayProps, 'method'>;
555
+ /**
556
+ * Google Pay entry point into the headless Coinbase guest-checkout flow.
557
+ * The flow itself lives in {@link BuyWithWalletPay}, which Apple Pay
558
+ * shares.
559
+ */
560
+ declare const BuyWithGooglePay: React$1.ForwardRefExoticComponent<BuyWithGooglePayProps & React$1.RefAttributes<BuyWithWalletPayHandle>>;
517
561
 
518
- interface StoredApplePaySession {
562
+ interface StoredWalletPaySession {
519
563
  email: string;
520
564
  /** US phone in E.164 (e.g. +12345678901). */
521
565
  phone: string;
@@ -527,10 +571,10 @@ interface StoredApplePaySession {
527
571
  /** Epoch ms; treated as expired 60s before this to avoid order-race. */
528
572
  onrampTokenExpiresAtMs?: number;
529
573
  }
530
- declare function getStoredApplePaySession(userId: string): StoredApplePaySession | null;
531
- declare function setStoredApplePaySession(userId: string, contact: StoredApplePaySession): void;
532
- declare function clearStoredApplePaySession(userId: string): void;
533
- declare function isOnrampTokenFresh(contact: StoredApplePaySession | null): boolean;
574
+ declare function getStoredWalletPaySession(userId: string): StoredWalletPaySession | null;
575
+ declare function setStoredWalletPaySession(userId: string, contact: StoredWalletPaySession): void;
576
+ declare function clearStoredWalletPaySession(userId: string): void;
577
+ declare function isOnrampTokenFresh(contact: StoredWalletPaySession | null): boolean;
534
578
 
535
579
  interface CurrencyModalProps {
536
580
  open: boolean;
@@ -646,7 +690,7 @@ interface StripeLinkButtonProps {
646
690
  subtitle?: string;
647
691
  iconUrl?: string;
648
692
  }
649
- declare function StripeLinkButton({ onClick, title, subtitle, iconUrl, }: StripeLinkButtonProps): react_jsx_runtime.JSX.Element;
693
+ declare function StripeLinkButton({ onClick, title, subtitle, iconUrl }: StripeLinkButtonProps): react_jsx_runtime.JSX.Element;
650
694
 
651
695
  type BankTransferView = 'providers' | 'amount' | 'pending';
652
696
  interface BankTransferProps {
@@ -713,8 +757,10 @@ interface CoinbaseConnectProps {
713
757
  error?: unknown;
714
758
  code?: string;
715
759
  }) => void;
760
+ /** Transfer failed. `code` carries Coinbase's own status where it has one. */
716
761
  onTransferError?: (error: {
717
762
  message: string;
763
+ code?: string;
718
764
  }) => void;
719
765
  onClose?: () => void;
720
766
  onBack?: () => void;
@@ -767,9 +813,15 @@ interface PayWithStripeLinkProps {
767
813
  message: string;
768
814
  transaction?: unknown;
769
815
  }) => void;
816
+ /**
817
+ * Purchase failed. `code` is Stripe's or our backend's machine-readable
818
+ * reason (`card_declined`, `stripe_onramp_missing_kyc`, `expired`), which is
819
+ * what a funnel groups on — `message` is localized prose.
820
+ */
770
821
  onDepositError?: (error: {
771
822
  message: string;
772
823
  error?: unknown;
824
+ code?: string;
773
825
  }) => void;
774
826
  }
775
827
 
@@ -789,7 +841,7 @@ interface PayWithStripeLinkProps {
789
841
  * The Stripe publishable key is auto-fetched from the backend via GET /config,
790
842
  * so consumers only need their Unifold publishable key.
791
843
  */
792
- declare function PayWithStripeLink({ userId, publishableKey, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, countryCode, subdivisionCode, wallets: externalWallets, email: emailProp, iconUrl, step: controlledStep, onStepChange, backHandlerRef, onDepositSuccess, onDepositError, }: PayWithStripeLinkProps): react_jsx_runtime.JSX.Element | null;
844
+ declare function PayWithStripeLink({ userId, publishableKey, recipientAddress, destinationChainType, destinationChainId, destinationTokenAddress, countryCode, subdivisionCode, wallets: externalWallets, email: emailProp, iconUrl, step: controlledStep, onStepChange, backHandlerRef, onDepositSuccess, onDepositError, onEvent, }: PayWithStripeLinkProps): react_jsx_runtime.JSX.Element | null;
793
845
 
794
846
  interface DepositExecutionItemProps {
795
847
  execution: DirectExecutionResponse;
@@ -844,6 +896,11 @@ interface CheckoutModalProps {
844
896
  onOpenChange: (open: boolean) => void;
845
897
  clientSecret: string;
846
898
  publishableKey: string;
899
+ /**
900
+ * Your own id for the payer, echoed onto every `onEvent` envelope. Optional
901
+ * and purely a passthrough — a checkout is identified by its payment intent.
902
+ */
903
+ externalUserId?: string;
847
904
  modalTitle?: string;
848
905
  /** Enable "Transfer Crypto" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? true. */
849
906
  enableTransferCrypto?: boolean;
@@ -888,7 +945,7 @@ interface CheckoutModalProps {
888
945
  }) => void;
889
946
  onEvent?: (event: CheckoutEvent) => void;
890
947
  }
891
- declare function CheckoutModal({ open, onOpenChange, clientSecret, publishableKey, modalTitle, enableTransferCrypto, enableConnectWallet, enableIncidentBanner, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, theme, onCheckoutSuccess, onCheckoutError, onEvent, }: CheckoutModalProps): react_jsx_runtime.JSX.Element;
948
+ declare function CheckoutModal({ open, onOpenChange, clientSecret, publishableKey, modalTitle, enableTransferCrypto, enableConnectWallet, enableIncidentBanner, defaultSourceChainType, defaultSourceChainId, defaultSourceTokenAddress, defaultSourceSymbol, theme, onCheckoutSuccess, onCheckoutError, onEvent, externalUserId, }: CheckoutModalProps): react_jsx_runtime.JSX.Element;
892
949
 
893
950
  interface WithdrawTransactionInfo {
894
951
  /** Source (sending) chain type */
@@ -907,13 +964,24 @@ interface WithdrawTransactionInfo {
907
964
  destinationTokenAddress: string;
908
965
  /** Destination token symbol */
909
966
  destinationTokenSymbol: string;
967
+ /** Human-readable token amount (standard unit) being withdrawn. */
910
968
  amount: string;
969
+ /** Token amount in base units (smallest denomination). */
911
970
  amountBaseUnit: string;
912
971
  /** The Unifold deposit wallet address to send funds to */
913
972
  withdrawIntentAddress: string;
914
973
  /** The user-provided final destination address */
915
974
  recipientAddress: string;
916
975
  }
976
+ /**
977
+ * Withdraw transaction info plus the derived USD value, passed to
978
+ * `onWithdrawStarted` for analytics. Kept separate from
979
+ * {@link WithdrawTransactionInfo} so the host `onWithdraw` contract stays lean.
980
+ */
981
+ interface WithdrawStartedInfo extends WithdrawTransactionInfo {
982
+ /** USD value of the withdrawal, when derivable from the form. */
983
+ amountUsd?: string;
984
+ }
917
985
  interface WithdrawModalProps {
918
986
  open: boolean;
919
987
  onOpenChange: (open: boolean) => void;
@@ -1014,6 +1082,11 @@ interface WithdrawFormProps {
1014
1082
  sourceTokenAddress: string;
1015
1083
  /** Called when the user confirms the withdrawal. The host app signs and submits the transaction. */
1016
1084
  onWithdraw: (txInfo: WithdrawTransactionInfo) => void | Promise<void>;
1085
+ /**
1086
+ * Called the moment the user confirms the form (before `onWithdraw`), so the
1087
+ * journey's `flow_started` reflects intent, not the wallet-callback result.
1088
+ */
1089
+ onWithdrawStarted?: (txInfo: WithdrawStartedInfo) => void;
1017
1090
  onWithdrawError?: (error: {
1018
1091
  message: string;
1019
1092
  error?: unknown;
@@ -1034,7 +1107,7 @@ interface WithdrawFormProps {
1034
1107
  /** Optional element rendered on the left side of the footer row (e.g. tracker link) */
1035
1108
  footerLeft?: React.ReactNode;
1036
1109
  }
1037
- declare function WithdrawForm({ publishableKey, externalUserId, sourceChainType, selectedToken, selectedChain, sourceTokenSymbol, recipientAddressProp, balanceData, isLoadingBalance, isStablecoin, minimumWithdrawAmountUsd, estimatedProcessingTime, maxSlippagePercent, priceImpactPercent, senderAddress, sourceChainId, sourceTokenAddress, onWithdraw, onWithdrawError, onDepositWalletCreation, onWithdrawSubmitted, footerLeft, }: WithdrawFormProps): react_jsx_runtime.JSX.Element;
1110
+ declare function WithdrawForm({ publishableKey, externalUserId, sourceChainType, selectedToken, selectedChain, sourceTokenSymbol, recipientAddressProp, balanceData, isLoadingBalance, isStablecoin, minimumWithdrawAmountUsd, estimatedProcessingTime, maxSlippagePercent, priceImpactPercent, senderAddress, sourceChainId, sourceTokenAddress, onWithdraw, onWithdrawStarted, onWithdrawError, onDepositWalletCreation, onWithdrawSubmitted, footerLeft, }: WithdrawFormProps): react_jsx_runtime.JSX.Element;
1038
1111
 
1039
1112
  interface WithdrawExecutionItemProps {
1040
1113
  execution: DirectExecutionResponse;
@@ -1173,6 +1246,1634 @@ declare function Tooltip({ children, ...props }: React$1.ComponentPropsWithoutRe
1173
1246
  declare const TooltipTrigger: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
1174
1247
  declare const TooltipContent: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1175
1248
 
1249
+ var common = {
1250
+ loading: "Loading...",
1251
+ search: "Search",
1252
+ close: "Close",
1253
+ review: "Review",
1254
+ tryAgain: "Try Again",
1255
+ somethingWentWrong: "Something went wrong",
1256
+ seeMoreDetails: "See more details",
1257
+ seeLess: "See less",
1258
+ dateTime: "{{date}} at {{time}}",
1259
+ "continue": "Continue",
1260
+ processing: "Processing",
1261
+ terms: "Terms",
1262
+ help: "Help",
1263
+ done: "Done",
1264
+ from: "From",
1265
+ max: "Max",
1266
+ or: "or",
1267
+ minimumAmount: "Minimum amount is {{amount}}",
1268
+ maximumAmount: "Maximum amount is {{amount}}",
1269
+ minimumDeposit: "Minimum deposit: {{amount}}",
1270
+ minSuffix: "{{amount}} min",
1271
+ duration: {
1272
+ lessThanMinute: "< 1 min",
1273
+ lessThanSeconds: "< {{seconds}} sec",
1274
+ lessThanMinutes: "< {{minutes}} min",
1275
+ lessThanHours: "< {{hours}} hr",
1276
+ lessThanHoursMinutes: "< {{hours}} hr {{minutes}} min",
1277
+ lessThanMinutesSeconds: "< {{minutes}} min {{seconds}} sec"
1278
+ },
1279
+ balance: "Balance: {{amount}}",
1280
+ balanceWithProject: "{{projectName}} Balance: {{amount}}",
1281
+ balanceWithToken: "Balance: {{amount}} ({{tokenAmount}})",
1282
+ amountDue: "Amount due: {{amount}}"
1283
+ };
1284
+ var executionDetails = {
1285
+ processing: "Processing",
1286
+ completed: "Completed",
1287
+ amountSent: "Amount Sent",
1288
+ amountReceived: "Amount Received",
1289
+ usdValue: "USD Value",
1290
+ estimatedDeliveryTime: "Estimated delivery time",
1291
+ sourceNetwork: "Source Network",
1292
+ destinationNetwork: "Destination Network",
1293
+ depositTx: "Deposit Tx",
1294
+ withdrawalTx: "Withdrawal Tx",
1295
+ completionTx: "Completion Tx"
1296
+ };
1297
+ var depositTracker = {
1298
+ title: "Deposit Tracker",
1299
+ detailsTitle: "Deposit Details",
1300
+ empty: "No deposits yet",
1301
+ viewStatus: "View status",
1302
+ checkingForDeposit: "Checking for deposit",
1303
+ iveMadeDeposit: "I've made the deposit",
1304
+ item: {
1305
+ processing: "Deposit processing",
1306
+ completed: "Deposit completed"
1307
+ },
1308
+ estimatedPrefix: "Est. {{time}}"
1309
+ };
1310
+ var connectWallet = {
1311
+ title: "Connect Wallet",
1312
+ selectWalletSubtitle: "Select a wallet to connect",
1313
+ selectWalletSubtitleChain: "Select a {{chain}} wallet",
1314
+ openInWalletApp: "Open this page in your wallet's app to connect",
1315
+ noWalletsAvailable: "No wallets available",
1316
+ noBalancesFound: "No balances found",
1317
+ lastUsed: "Last used",
1318
+ selectNetwork: "Select Network",
1319
+ whichNetwork: "Which network do you want to connect?",
1320
+ connectingTitle: "Connecting...",
1321
+ connectingTo: "Connecting to {{wallet}}...",
1322
+ approveInWallet: "Please approve the connection in your wallet",
1323
+ continueInWallet: "Continue in {{wallet}}",
1324
+ completeInWalletApp: "Complete your deposit in the {{wallet}} app",
1325
+ openInWallet: "Open in {{wallet}}",
1326
+ checkingForDeposit: "Checking for deposit...",
1327
+ review: {
1328
+ title: "Review",
1329
+ destination: "Destination",
1330
+ estimatedTime: "Estimated time",
1331
+ priceImpact: "Price impact",
1332
+ maxSlippage: "Max slippage",
1333
+ confirmOrder: "Confirm Order",
1334
+ confirming: "Confirming...",
1335
+ minimumForTokenOnChain: "Minimum for {{token}} on {{chain}} is ${{amount}}",
1336
+ amountAdjusted: "Amount adjusted from remaining ${{amount}}",
1337
+ minimumDeposit: "Minimum deposit: ${{amount}}",
1338
+ walletWillPrompt: "{{wallet}} wallet will ask you to approve this transaction."
1339
+ },
1340
+ confirming: {
1341
+ waitingTitle: "Waiting for confirmation...",
1342
+ waitingSubtitle: "Please confirm the transaction in your wallet",
1343
+ submittedTitle: "Transaction Submitted",
1344
+ submittedSubtitle: "Waiting for your deposit to be detected..."
1345
+ },
1346
+ detected: "Detected",
1347
+ install: "Install",
1348
+ open: "Open",
1349
+ evmCompatibleChains: "EVM compatible chains",
1350
+ solanaNetwork: "Solana network",
1351
+ approveInSolanaWallet: "Please approve the connection in your Solana wallet",
1352
+ selectToken: "Select Token",
1353
+ enterAmount: "Enter Amount",
1354
+ insufficientBalance: "Insufficient balance",
1355
+ "continue": "Continue",
1356
+ loadBalancesFailed: "Failed to load balances. Please try again.",
1357
+ lowBalance: "Low balance",
1358
+ notSupported: "Not supported",
1359
+ notEligible: "Not eligible",
1360
+ paymentComplete: "Payment Complete",
1361
+ paymentFailed: "Payment Failed",
1362
+ paymentProcessing: "Payment Processing",
1363
+ processing: "Processing",
1364
+ depositDetails: "Deposit Details",
1365
+ invalidDepositAddress: "Invalid deposit address. Please contact support.",
1366
+ payAmount: "Pay ${{amount}}",
1367
+ connectFailed: "Failed to connect wallet",
1368
+ transactionFailed: "Transaction failed"
1369
+ };
1370
+ var transferCrypto = {
1371
+ priceImpact: {
1372
+ label: "Price impact",
1373
+ tooltip: "Price impact reflects the difference between the expected price and the final execution price, influenced by trade size and available liquidity. Larger trades may move the market price during execution.",
1374
+ finalCost: "The final cost reflects price impact and may vary depending on market and network conditions. Larger trade sizes typically benefit from lower relative costs."
1375
+ },
1376
+ slippage: {
1377
+ label: "Max slippage",
1378
+ auto: "Auto",
1379
+ tooltip: "Slippage represents price changes that can occur while a transaction is being processed. Slippage is dynamically adjusted per trading pair to support reliable execution during market movements.",
1380
+ finalCost: "The final cost includes any slippage and may change based on real-time network conditions. Costs are generally reduced for larger transaction amounts."
1381
+ },
1382
+ processingTime: {
1383
+ label: "Processing time",
1384
+ lessThanMinutes: "< {{minutes}} min",
1385
+ lessThanHours: "< {{hours}} hr"
1386
+ },
1387
+ minDeposit: {
1388
+ label: "min",
1389
+ tooltip: "The minimum amount you can deposit on the selected network."
1390
+ },
1391
+ help: {
1392
+ needHelp: "Need help?",
1393
+ contactSupport: "Contact support"
1394
+ },
1395
+ terms: {
1396
+ seeTerms: "See terms",
1397
+ termsApply: "Terms apply"
1398
+ },
1399
+ selectedToken: "Selected token",
1400
+ selectedChain: "Selected chain",
1401
+ depositAddress: {
1402
+ label: "Your deposit address",
1403
+ tooltip: "Send any supported token to this address, and it will be automatically converted to {{token}} in your account."
1404
+ },
1405
+ copyAddress: "Copy address",
1406
+ copied: "Copied!",
1407
+ loading: "Loading...",
1408
+ loadingQRCode: "Loading QR Code...",
1409
+ noAddressAvailable: "No address available",
1410
+ noChainsAvailable: "No chains available for this token",
1411
+ minimumDeposit: "Minimum: {{amount}}",
1412
+ minimumDepositTooltip: "The minimum amount you can deposit on the selected network.",
1413
+ selectTokenDeposit: "Your deposit token",
1414
+ selectTokenDepositTooltip: "Select the token you want to deposit with in order to begin the deposit process.",
1415
+ tokenSelector: {
1416
+ title: "Select token to deposit",
1417
+ quickSelect: "Quick select",
1418
+ allSupportedTokens: "All supported tokens",
1419
+ noTokensFound: "No tokens found",
1420
+ minimumLabel: "Minimum: "
1421
+ },
1422
+ currency: {
1423
+ title: "Currency",
1424
+ popularCurrencies: "Popular currencies",
1425
+ allCurrencies: "All currencies",
1426
+ noCurrenciesFound: "No currencies found"
1427
+ },
1428
+ youSend: "You send",
1429
+ intentAddress: "Intent address",
1430
+ createAddressFailed: "Failed to create deposit address",
1431
+ createAddressRetrying: "Retrying automatically every 5 seconds...",
1432
+ addressValidation: {
1433
+ validating: "Verifying recipient address...",
1434
+ unableToReceiveFunds: "Unable to Receive Funds",
1435
+ errors: {
1436
+ token_not_supported: "The destination token is not supported",
1437
+ not_opted_in: "Please make sure you opt-in {{token_symbol}}({{chain_name}}) before receiving funds",
1438
+ insufficient_balance: "Recipient account does not meet the minimum balance requirement",
1439
+ account_not_found: "Recipient account does not exist on {{chain_name}}",
1440
+ validation_error: "Unable to verify recipient address on {{chain_name}}"
1441
+ },
1442
+ defaultError: "The recipient address cannot receive funds for the selected token"
1443
+ },
1444
+ selectNetworkPlaceholder: "Select network"
1445
+ };
1446
+ var glossary = {
1447
+ title: "Glossary",
1448
+ depositToken: "Your Deposit Token",
1449
+ depositAddress: "Deposit Address",
1450
+ depositAddressDescription: "A unique wallet address generated for you. Send supported tokens to this address and they will be automatically converted and deposited into your account.",
1451
+ priceImpact: "Price Impact",
1452
+ slippage: "Slippage",
1453
+ processingTime: "Processing Time",
1454
+ processingTimeDescription: "The estimated time for your deposit to be confirmed and credited. This depends on the source network's block confirmation time and current congestion.",
1455
+ minimumDeposit: "Minimum Deposit",
1456
+ recipientAddress: "Recipient Address",
1457
+ recipientAddressDescription: "The destination address on the target blockchain where your converted deposit will be sent. This is typically your wallet address on the application's native chain.",
1458
+ linkLabel: "Glossary"
1459
+ };
1460
+ var depositModal = {
1461
+ title: "Deposit",
1462
+ transferCrypto: {
1463
+ title: "Transfer Crypto",
1464
+ subtitle: "No limit • Instant"
1465
+ },
1466
+ depositWithCard: {
1467
+ title: "Deposit with Card",
1468
+ subtitle: "$50,000 limit"
1469
+ },
1470
+ quotes: "Quotes",
1471
+ payWithExchange: {
1472
+ title: "Pay with Exchange",
1473
+ subtitle: "Transfer from exchange"
1474
+ },
1475
+ depositTracker: {
1476
+ title: "Deposit Tracker",
1477
+ subtitle: "Track your deposit progress"
1478
+ },
1479
+ stripeLink: {
1480
+ title: "Pay with Link",
1481
+ subtitle: "Buy with card or bank",
1482
+ unavailableInRegionMessage: "Pay with Link is currently unavailable in your region."
1483
+ },
1484
+ browserWallet: {
1485
+ title: "Connect Wallet",
1486
+ subtitle: "Deposit from your wallet",
1487
+ disconnect: "Disconnect"
1488
+ },
1489
+ cashApp: {
1490
+ creatingOrder: "Creating order...",
1491
+ "continue": "Continue",
1492
+ sessionExpiredTitle: "This session may have expired",
1493
+ sessionExpiredSubtitle: "If you already paid, your deposit will still be processed. Otherwise, start a new session.",
1494
+ newSession: "New Cash App session",
1495
+ copyPaymentLink: "Copy payment link",
1496
+ openCashApp: "Open Cash App",
1497
+ paymentProcessing: "Payment processing",
1498
+ paymentProcessingSubtitle: "Your Cash App payment is being confirmed...",
1499
+ paymentReceived: "Payment received",
1500
+ paymentReceivedSubtitle: "Converting to your destination token..."
1501
+ },
1502
+ bankTransfer: {
1503
+ title: "Bank Transfer",
1504
+ subtitle: "SEPA, ACH and more",
1505
+ unavailableInCountry: "Bank-transfer rails are not yet available in your country."
1506
+ },
1507
+ cashAppMenu: {
1508
+ title: "Pay with Cash App",
1509
+ subtitle: "Deposit via Cash App"
1510
+ },
1511
+ applePayMenu: {
1512
+ title: "Pay with Apple Pay",
1513
+ subtitle: "Instant"
1514
+ },
1515
+ googlePayMenu: {
1516
+ title: "Pay with Google Pay",
1517
+ subtitle: "Instant"
1518
+ },
1519
+ cardMethodName: "Card",
1520
+ applePayMethodName: "Apple Pay",
1521
+ googlePayMethodName: "Google Pay",
1522
+ stripeLinkHeaderTitle: "Deposit with Link",
1523
+ locationError: {
1524
+ title: "Unable to Verify Location",
1525
+ description: "We couldn't verify your location. Please check your connection and try again."
1526
+ },
1527
+ blocked: {
1528
+ title: "No Tokens Available",
1529
+ description: "There are no supported tokens available from your current location."
1530
+ },
1531
+ geoRestriction: {
1532
+ title: "{{method}} is unavailable",
1533
+ description: "This deposit method is not supported in your region."
1534
+ },
1535
+ tabs: {
1536
+ crypto: "Use Crypto",
1537
+ cash: "Use Cash"
1538
+ },
1539
+ applePayHeader: {
1540
+ enterEmail: "Enter your email",
1541
+ enterPhone: "Enter your phone",
1542
+ verifyEmail: "Verify your email",
1543
+ verifyPhone: "Verify your phone",
1544
+ amount: "Amount",
1545
+ checkingDeposit: "Checking deposit",
1546
+ success: "Success",
1547
+ limitReached: "Limit reached",
1548
+ verifyIdentity: "Verify identity",
1549
+ verifying: "Verifying"
1550
+ },
1551
+ cashAppHeader: {
1552
+ payAmount: "Pay ${{amount}} via Cash App"
1553
+ },
1554
+ cashAppScan: {
1555
+ mobile: "Complete payment in Cash App",
1556
+ desktop: "Scan to pay"
1557
+ },
1558
+ cashAppErrors: {
1559
+ missingFields: "Missing required fields",
1560
+ createSessionFailed: "Failed to create session",
1561
+ paymentFailed: "Payment failed",
1562
+ cashAppPaymentFailed: "Cash App payment failed"
1563
+ }
1564
+ };
1565
+ var checkoutModal = {
1566
+ title: "Checkout",
1567
+ unableToLoad: "Unable to Load Checkout",
1568
+ transferCrypto: {
1569
+ title: "Transfer Crypto",
1570
+ subtitle: "Send to a deposit address"
1571
+ },
1572
+ browserWallet: {
1573
+ title: "Connect Wallet",
1574
+ subtitle: "Pay directly from your wallet"
1575
+ },
1576
+ status: {
1577
+ succeeded: "Payment Complete",
1578
+ processing: "Partial Payment Received",
1579
+ canceled: "Canceled",
1580
+ expired: "Expired"
1581
+ },
1582
+ received: "Received",
1583
+ genericError: "Something went wrong. Please try again.",
1584
+ amountReceived: "{{received}} / {{total}} received",
1585
+ amountRemaining: "{{amount}} remaining"
1586
+ };
1587
+ var payWithExchange = {
1588
+ title: "Pay with Exchange",
1589
+ subtitle: "Transfer from exchange",
1590
+ comingSoon: "Coming soon",
1591
+ completeTransaction: "Complete transfer with {{provider}}",
1592
+ canCloseModal: "You can close this modal.",
1593
+ reopenExchange: "Reopen exchange window",
1594
+ walletOrTokenUnavailable: "Wallet address or token information not available"
1595
+ };
1596
+ var connectExchange = {
1597
+ title: "Connect Exchange",
1598
+ subtitle: "No limit • 2 min",
1599
+ selectExchange: "Select an exchange",
1600
+ comingSoon: "Coming Soon",
1601
+ disclosure: {
1602
+ message: "{{appName}} will securely connect to your {{exchange}} account.",
1603
+ credentialsNotStored: "Your credentials are never stored",
1604
+ credentialsNotStoredDesc: "All data is encrypted between {{appName}} and {{exchange}}.",
1605
+ mfaRequired: "2FA always required",
1606
+ mfaRequiredDesc: "Transfers cannot be made without your approval first."
1607
+ },
1608
+ connecting: "Connecting to {{exchange}}...",
1609
+ connectingDesc: "Complete authorization in the popup window",
1610
+ connected: {
1611
+ title: "Connected to {{exchange}}",
1612
+ subtitle: "Your {{exchange}} account is linked and ready to use.",
1613
+ exchange: "Exchange",
1614
+ status: "Status",
1615
+ statusConnected: "Connected",
1616
+ continueToDeposit: "Continue",
1617
+ continueToPay: "Continue to Pay",
1618
+ flowSource: "Source",
1619
+ flowTransfer: "Transfer",
1620
+ flowDirect: "Direct",
1621
+ flowDestination: "Destination",
1622
+ secureNote: "All transfers are secured with two-factor authentication and encrypted end-to-end."
1623
+ },
1624
+ holdings: {
1625
+ title: "Select asset"
1626
+ },
1627
+ transfer: {
1628
+ source: "Source",
1629
+ destination: "Destination",
1630
+ destinationWallet: "Wallet",
1631
+ estimatedTime: "Estimated time",
1632
+ estimatedTimeLessThanMin: "< 1 min",
1633
+ youSend: "You send",
1634
+ youReceive: "You receive",
1635
+ transactionBreakdown: "Transaction breakdown",
1636
+ networkFee: "Network fee",
1637
+ confirmOrder: "Confirm Order",
1638
+ termsNoticePrefix: "By clicking on Confirm Order, you agree to our ",
1639
+ termsNoticeLink: "terms",
1640
+ termsNoticeSuffix: "."
1641
+ },
1642
+ mfa: {
1643
+ title: "Enter your {{exchange}} 2FA code",
1644
+ description: "Enter your two factor authentication code. This code could be in your authenticator app, email, trading pin, or SMS.",
1645
+ invalidCode: "Invalid 2FA code. Please try again.",
1646
+ "continue": "Continue"
1647
+ },
1648
+ success: {
1649
+ title: "Transfer Complete",
1650
+ description: "Your transfer has been submitted successfully.",
1651
+ done: "Done",
1652
+ processingTitle: "Transfer initiated",
1653
+ processingSubtitle: "Waiting for deposit from {{exchange}}"
1654
+ },
1655
+ error: {
1656
+ title: "Transfer Failed",
1657
+ tryAgain: "Try Again"
1658
+ },
1659
+ "continue": "Continue",
1660
+ disconnect: "Disconnect",
1661
+ depositFromExchange: "Deposit from exchange",
1662
+ noHoldingsFound: "No holdings found",
1663
+ enterAmount: "Enter Amount",
1664
+ balanceWithMax: "Balance: ${{usd}} ({{balance}})",
1665
+ balanceOnly: "Balance: {{balance}}",
1666
+ exchangeFallback: "Exchange",
1667
+ insufficientBalance: "Insufficient balance",
1668
+ minimumDeposit: "Minimum deposit: ${{amount}}",
1669
+ depositDetails: "Deposit Details",
1670
+ balanceWithTime: "${{balance}} • 2 min",
1671
+ errors: {
1672
+ oauthStartFailed: "Failed to start OAuth",
1673
+ createTransferFailed: "Failed to create transfer",
1674
+ transferFailed: "Transfer failed"
1675
+ }
1676
+ };
1677
+ var buyWithCard = {
1678
+ autoPicked: "Auto-picked for you",
1679
+ noDocumentUpload: "No document upload",
1680
+ youReceive: "You receive",
1681
+ onramp: {
1682
+ completeTransaction: "Complete transaction with {{provider}}",
1683
+ canCloseModal: "You can close this modal.",
1684
+ youUse: "You use",
1685
+ youBuy: "You buy",
1686
+ youReceive: "You receive",
1687
+ intentAddressNote: "The wallet address displayed in the payment provider is a temporary deposit address. Your funds will be automatically converted and deposited into your account."
1688
+ },
1689
+ provider: "Provider",
1690
+ loadingTokenInformation: "Loading token information...",
1691
+ detectingLocation: "Detecting location...",
1692
+ errors: {
1693
+ fetchQuotesFailed: "Failed to fetch quotes",
1694
+ walletAddressUnavailable: "Wallet address not available",
1695
+ destinationTokenUnresolved: "Unable to resolve destination token",
1696
+ bankTransferWalletUnavailable: "Wallet address not available for bank transfer"
1697
+ },
1698
+ refreshingIn: "Refreshing in {{seconds}}s",
1699
+ estimatedDeliveryTime: "Estimated delivery time: {{time}}"
1700
+ };
1701
+ var buyWithApplePay = {
1702
+ email: {
1703
+ label: "Email",
1704
+ placeholder: "you@example.com"
1705
+ },
1706
+ phone: {
1707
+ label: "US phone number",
1708
+ placeholder: "555 123 4567",
1709
+ invalid: "Enter a valid US mobile number (no VoIP).",
1710
+ reverified: "Re-verified every 60 days.",
1711
+ sendCode: "Send code"
1712
+ },
1713
+ otp: {
1714
+ sentTo: "Sent to {{target}}",
1715
+ placeholder: "000000",
1716
+ incorrect: "Incorrect code. Please try again.",
1717
+ resend: "Resend code",
1718
+ resendIn: "Resend in {{seconds}}s"
1719
+ },
1720
+ amount: {
1721
+ enterAmount: "Enter amount",
1722
+ unableToPrepare: "Unable to prepare {{wallet}}",
1723
+ loadingToken: "Loading token information…",
1724
+ tokenRoutingUnavailable: "Token routing unavailable",
1725
+ preparing: "Preparing {{wallet}}",
1726
+ payWith: "Pay with",
1727
+ pay: "Pay"
1728
+ },
1729
+ checking: {
1730
+ title: "Checking for your deposit…",
1731
+ description: "Return if the payment is not made."
1732
+ },
1733
+ upgrade: {
1734
+ limitReached: "{{wallet}} limit reached",
1735
+ introDescription: "Submit your date of birth and SSN to increase your {{wallet}} limit.",
1736
+ verifyingTitle: "Verifying your information",
1737
+ verifyingDescription: "Your limit increase request is under review. This usually takes just a few seconds.",
1738
+ dobLabel: "Date of birth",
1739
+ dobPlaceholder: "MM/DD/YYYY",
1740
+ ssnLabel: "Last 4 of SSN",
1741
+ ssnAriaLabel: "Last 4 digits of SSN",
1742
+ submit: "Submit",
1743
+ submitting: "Submitting…",
1744
+ failedPrefix: "Failed to increase. Please try again later or ",
1745
+ contactSupport: "contact support",
1746
+ failedSuffix: ".",
1747
+ guestNotEligible: "Your account is not eligible for a limit increase at this time."
1748
+ },
1749
+ disclaimer: {
1750
+ prefix: "By continuing, you agree to Coinbase's ",
1751
+ separator: ", ",
1752
+ lastSeparator: ", and ",
1753
+ suffix: ". Coinbase is the regulated provider of this fiat-to-crypto onramp."
1754
+ },
1755
+ errors: {
1756
+ rateLimited: "Too many attempts. Please wait a few minutes and try again.",
1757
+ network: "Network error. Check your connection and try again.",
1758
+ voip: "We can only verify real US cell phones (not VoIP). Try a different number.",
1759
+ destinationNotConfigured: "Deposit destination not configured. Please contact support.",
1760
+ tokenInfoUnavailable: "Unable to load token information. Please try again.",
1761
+ depositWalletUnavailable: "Deposit wallet unavailable. Please try again.",
1762
+ requestFailed: "Unable to process your request. Please try again later."
1763
+ },
1764
+ "continue": "Continue",
1765
+ cancel: "Cancel",
1766
+ "return": "Return",
1767
+ close: "Close",
1768
+ formErrors: {
1769
+ guestLimitReached: "Guest purchase limit reached",
1770
+ startVerificationFailed: "Failed to start verification",
1771
+ verifyInfoFailed: "We couldn't verify your information. Please check your SSN and date of birth and try again.",
1772
+ limitUpgradeFailed: "Failed to request limit upgrade",
1773
+ verificationFailed: "Verification failed",
1774
+ createPaymentFailed: "Failed to create payment"
1775
+ }
1776
+ };
1777
+ var payWithStripeLink = {
1778
+ notConfigured: "Stripe is not configured for this project.",
1779
+ loading: "Loading...",
1780
+ pleaseWait: "Please wait",
1781
+ retry: "Retry",
1782
+ goBack: "Go Back",
1783
+ back: "Back",
1784
+ "continue": "Continue",
1785
+ done: "Done",
1786
+ submitting: "Submitting...",
1787
+ connecting: "Connecting...",
1788
+ creatingAccount: "Creating account...",
1789
+ verifyingIdentity: "Verifying identity...",
1790
+ settingUp: "Setting up...",
1791
+ kycPending: {
1792
+ title: "Verification in progress",
1793
+ checkingAutomatically: "Checking automatically..."
1794
+ },
1795
+ kycForm: {
1796
+ title: "Verify your identity",
1797
+ stepName: "Step 1 of 2 · What’s your name?",
1798
+ stepAddress: "Step 2 of 2 · What’s your address?",
1799
+ stepLimit: "Add your date of birth and SSN to increase your limit",
1800
+ firstName: "First name",
1801
+ firstNamePlaceholder: "John",
1802
+ lastName: "Last name",
1803
+ lastNamePlaceholder: "Smith",
1804
+ dateOfBirth: "Date of birth",
1805
+ ssn: "Social Security number",
1806
+ addressLine1: "Address line 1",
1807
+ addressLine1Placeholder: "123 Main St",
1808
+ addressLine2: "Address line 2",
1809
+ addressLine2Placeholder: "Apt, suite, etc. (optional)",
1810
+ city: "City",
1811
+ state: "State",
1812
+ country: "Country",
1813
+ unitedStates: "United States",
1814
+ zip: "ZIP"
1815
+ },
1816
+ kycDocument: {
1817
+ title: "Verify your identity",
1818
+ description: "We’re opening a secure flow to verify your identity. Follow the prompts to upload a photo ID and take a quick selfie."
1819
+ },
1820
+ payment: {
1821
+ empty: "No saved payment methods yet.",
1822
+ addPaymentMethod: "Add payment method"
1823
+ },
1824
+ email: {
1825
+ label: "Email address",
1826
+ placeholder: "you@example.com"
1827
+ },
1828
+ register: {
1829
+ title: "Create your Link account",
1830
+ subtitle: "A Link account is needed to continue",
1831
+ emailLabel: "Email",
1832
+ phoneLabel: "Phone number"
1833
+ },
1834
+ terms: {
1835
+ intro: "Your data will be encrypted and processed by our partner, Stripe. Funds transfer services are provided by Stripe Payments Company. Cryptocurrency conversion services are provided by Bridge. By continuing you agree to the ",
1836
+ linkOnrampTerms: "Link Onramp Terms",
1837
+ separator: ", ",
1838
+ bridgeTerms: "Bridge Terms",
1839
+ acknowledge: " and you acknowledge receipt of the ",
1840
+ linkPrivacyNotice: "Link US Consumer Privacy Notice",
1841
+ and: " and the ",
1842
+ bridgePrivacyNotice: "Bridge Privacy Notice",
1843
+ suffix: "."
1844
+ },
1845
+ amount: {
1846
+ selectPaymentMethod: "Select payment method",
1847
+ ready: "Ready",
1848
+ minimumAmount: "Minimum amount is ${{amount}}",
1849
+ limitVerifyToRaise: "Limit ${{limit}} · Verify to raise",
1850
+ limitReachedVerifyToRaise: "Limit reached · Verify to raise",
1851
+ limitTryLess: "Limit ${{limit}} · Try less",
1852
+ limitReachedTryLess: "Limit reached · Try less",
1853
+ fetchingQuote: "Fetching quote...",
1854
+ feesApply: "Fees apply",
1855
+ instant: "Instant",
1856
+ verifyToRaiseLimit: "Verify identity to raise limit",
1857
+ preparing: "Preparing..."
1858
+ },
1859
+ review: {
1860
+ title: "Purchase review",
1861
+ refreshing: "Refreshing...",
1862
+ refreshesIn: "Refreshes in {{seconds}}s",
1863
+ amount: "Amount",
1864
+ fees: "Fees",
1865
+ total: "Total",
1866
+ youReceive: "You receive",
1867
+ buyNow: "Buy Now",
1868
+ processing: "Processing...",
1869
+ preparing: "Preparing..."
1870
+ },
1871
+ checkout: {
1872
+ title: "Processing purchase",
1873
+ subtitle: "Please don’t close this window"
1874
+ },
1875
+ error: {
1876
+ title: "Something went wrong",
1877
+ fallback: "An unexpected error occurred. Please try again.",
1878
+ tryAgain: "Try Again"
1879
+ },
1880
+ paymentFailure: {
1881
+ lead: "We couldn’t complete your payment.",
1882
+ retryHint: "Please try again.",
1883
+ codes: {
1884
+ card_declined: "Your card was declined. Try again or use a different payment method.",
1885
+ insufficient_funds: "Your card has insufficient funds. Try a different payment method.",
1886
+ expired_card: "Your card has expired. Use a different payment method.",
1887
+ incorrect_cvc: "Your card’s security code is incorrect. Try again or use a different card.",
1888
+ incorrect_number: "Your card number is incorrect. Try again or use a different card.",
1889
+ card_not_supported: "This card isn’t supported for this purchase. Try a different payment method.",
1890
+ processing_error: "We couldn’t process your card. Please try again in a moment.",
1891
+ authentication_required: "Your bank requires authentication for this payment. Please try again.",
1892
+ payment_intent_authentication_failure: "Card authentication failed. Try again or use a different card.",
1893
+ payment_method_provider_decline: "Your payment provider declined the charge. Try a different payment method.",
1894
+ payment_failed: "Your payment didn’t go through. Try again or use a different payment method."
1895
+ }
1896
+ },
1897
+ kycErrors: {
1898
+ generic: "We couldn’t verify your identity. Please double-check your details and try again.",
1899
+ resubmit: "Please correct your information and resubmit.",
1900
+ codes: {
1901
+ phone_verification_failed: "We couldn’t verify your phone number.",
1902
+ id_document_verification_failed: "We couldn’t verify your identity document.",
1903
+ address_verification_failed: "We couldn’t verify your address.",
1904
+ date_of_birth_verification_failed: "We couldn’t verify your date of birth.",
1905
+ id_number_verification_failed: "We couldn’t verify your Social Security number.",
1906
+ name_verification_failed: "We couldn’t verify your name."
1907
+ }
1908
+ },
1909
+ success: {
1910
+ processingTitle: "Payment confirmed",
1911
+ processingSubtitle: "We’ve received your payment and are sending your purchase to your wallet. This usually takes just a few minutes.",
1912
+ completeTitle: "Your purchase is on the way",
1913
+ completeSubtitle: "Your purchase is complete and is being sent to your wallet.",
1914
+ failedTitle: "Purchase didn’t go through",
1915
+ failedSubtitle: "Something went wrong and we couldn’t complete your purchase. Any charge will be reversed."
1916
+ },
1917
+ paymentMethodReady: "Payment method ready",
1918
+ enterAmountPlaceholder: "Enter amount",
1919
+ bankAccount: "Bank account",
1920
+ paymentMethod: "Payment method",
1921
+ expires: "Expires {{month}}/{{year}}",
1922
+ accountTypeSuffix: "{{type}} account",
1923
+ formErrors: {
1924
+ configLoadFailed: "Failed to load Stripe config",
1925
+ sessionExpiredBeforeCompletion: "Purchase session expired before completion",
1926
+ purchaseRejected: "Purchase was rejected",
1927
+ authStartFailed: "Failed to start authentication",
1928
+ invalidUsPhone: "Enter a valid 10-digit US phone number",
1929
+ registerFailed: "Failed to register",
1930
+ reverifyFailed: "Failed to re-verify. Please try again.",
1931
+ verificationCancelled: "Verification was cancelled.",
1932
+ consentRequired: "You must consent to continue.",
1933
+ reviewingDocuments: "Reviewing your identity documents. This can take a few minutes.",
1934
+ verifyingInformation: "Verifying your information. This usually only takes a moment.",
1935
+ needMoreDetails: "We couldn't verify you with your basic details. Please provide more information to continue.",
1936
+ kycStatusFailed: "Failed to check KYC status",
1937
+ enterFullName: "Please enter your first and last name.",
1938
+ enterFullAddress: "Please enter your full address.",
1939
+ enterValidSsn: "Please enter a valid 9-digit Social Security number.",
1940
+ enterValidDob: "Please enter a valid date of birth.",
1941
+ kycSubmissionFailed: "KYC submission failed",
1942
+ documentVerificationFailed: "Document verification failed",
1943
+ registerWalletFailed: "Failed to register wallet",
1944
+ loadPaymentMethodsFailed: "Failed to load payment methods",
1945
+ addPaymentMethodFailed: "Failed to add payment method",
1946
+ paymentMethodUnusable: "That payment method can’t be used. Please choose another.",
1947
+ pricingUpdated: "Pricing updated. Please try again.",
1948
+ checkoutFailed: "Checkout failed",
1949
+ preparePurchaseFailed: "Something went wrong preparing your purchase. Please try again."
1950
+ },
1951
+ retrySuffix: "{{message}} Please try again."
1952
+ };
1953
+ var withdrawModal = {
1954
+ title: "Withdraw",
1955
+ withdrawCrypto: {
1956
+ title: "Withdraw with Crypto",
1957
+ subtitle: "Send to any wallet address"
1958
+ },
1959
+ selectToken: "Select withdrawal token",
1960
+ receiveToken: "Receive token",
1961
+ receiveChain: "Receive chain",
1962
+ recipientAddress: "Recipient address",
1963
+ recipientAddressPlaceholder: "Enter wallet address",
1964
+ amount: "Amount",
1965
+ amountPlaceholder: "0.00",
1966
+ balance: "Balance",
1967
+ minimum: "min",
1968
+ withdraw: "Withdraw",
1969
+ invalidAddress: "Please enter a valid address",
1970
+ invalidAmount: "Please enter a valid amount",
1971
+ verifyingAddress: "Verifying address...",
1972
+ loading: "Loading...",
1973
+ noTokensAvailable: "No tokens available",
1974
+ review: "Review Withdrawal",
1975
+ back: "Back",
1976
+ pasteFromClipboard: "Paste from clipboard",
1977
+ switchUnit: "Switch unit",
1978
+ processing: "Processing...",
1979
+ balanceBelowMinimum: "Balance lower than minimum",
1980
+ insufficientBalance: "Insufficient balance",
1981
+ minimumNotMet: "Minimum amount not met",
1982
+ withdrawFailedRetry: "Withdrawal failed. Try again",
1983
+ noChainsAvailable: "No chains available",
1984
+ searchTokenOrNetwork: "Search token or network",
1985
+ unsupportedSourceToken: "Unsupported Source Token",
1986
+ details: {
1987
+ title: "Withdrawal Details",
1988
+ history: "Withdrawal History",
1989
+ status: "Withdrawal Status",
1990
+ checking: "Checking Withdrawal",
1991
+ empty: "No withdrawals to track yet"
1992
+ },
1993
+ executionItem: {
1994
+ processing: "Withdrawal processing",
1995
+ completed: "Withdrawal completed"
1996
+ },
1997
+ withdrawFailed: "Withdrawal failed. Please try again.",
1998
+ sourceTokenFallback: "Source token",
1999
+ sourceTokenNotSupported: "{{token}} is not a supported withdrawal token. Supported tokens include USDC, USDT, and other stablecoins."
2000
+ };
2001
+ var incident = {
2002
+ outage: "Outage",
2003
+ info: "Info",
2004
+ degraded: "Degraded service"
2005
+ };
2006
+ var hypercore = {
2007
+ withdrawFee: "~{{fee}} fee will be applied to this withdrawal.",
2008
+ activationFee: "~{{fee}} fee is required to activate a new HyperCore account."
2009
+ };
2010
+ var en = {
2011
+ common: common,
2012
+ executionDetails: executionDetails,
2013
+ depositTracker: depositTracker,
2014
+ connectWallet: connectWallet,
2015
+ transferCrypto: transferCrypto,
2016
+ glossary: glossary,
2017
+ depositModal: depositModal,
2018
+ checkoutModal: checkoutModal,
2019
+ payWithExchange: payWithExchange,
2020
+ connectExchange: connectExchange,
2021
+ buyWithCard: buyWithCard,
2022
+ buyWithApplePay: buyWithApplePay,
2023
+ payWithStripeLink: payWithStripeLink,
2024
+ withdrawModal: withdrawModal,
2025
+ incident: incident,
2026
+ hypercore: hypercore
2027
+ };
2028
+
2029
+ /**
2030
+ * The full set of localized strings. `en.json` is the source of truth and its
2031
+ * shape defines the `I18nStrings` type — every other locale must match it.
2032
+ */
2033
+ type I18nStrings = typeof en;
2034
+ /**
2035
+ * Canonical locale codes we ship a translation table for.
2036
+ * - `zh` → Simplified Chinese (Mainland China, Singapore)
2037
+ * - `zh-TW` → Traditional Chinese (Taiwan, Hong Kong, Macau)
2038
+ *
2039
+ * Callers may pass any BCP-47 tag (e.g. `zh-CN`, `zh-HK`, `zh-Hant-TW`); it is
2040
+ * mapped onto one of these via `normalizeLocale`.
2041
+ */
2042
+ type LocaleCode = 'en' | 'zh' | 'zh-TW';
2043
+ /** Locales with a bundled translation table. */
2044
+ declare const SUPPORTED_LOCALES: LocaleCode[];
2045
+ /**
2046
+ * English string table.
2047
+ *
2048
+ * @deprecated Prefer `useI18n()` inside components so strings follow the active
2049
+ * locale. This export always returns English and exists for compatibility with
2050
+ * code that reads strings outside of React.
2051
+ */
2052
+ declare const i18n: {
2053
+ common: {
2054
+ loading: string;
2055
+ search: string;
2056
+ close: string;
2057
+ review: string;
2058
+ tryAgain: string;
2059
+ somethingWentWrong: string;
2060
+ seeMoreDetails: string;
2061
+ seeLess: string;
2062
+ dateTime: string;
2063
+ continue: string;
2064
+ processing: string;
2065
+ terms: string;
2066
+ help: string;
2067
+ done: string;
2068
+ from: string;
2069
+ max: string;
2070
+ or: string;
2071
+ minimumAmount: string;
2072
+ maximumAmount: string;
2073
+ minimumDeposit: string;
2074
+ minSuffix: string;
2075
+ duration: {
2076
+ lessThanMinute: string;
2077
+ lessThanSeconds: string;
2078
+ lessThanMinutes: string;
2079
+ lessThanHours: string;
2080
+ lessThanHoursMinutes: string;
2081
+ lessThanMinutesSeconds: string;
2082
+ };
2083
+ balance: string;
2084
+ balanceWithProject: string;
2085
+ balanceWithToken: string;
2086
+ amountDue: string;
2087
+ };
2088
+ executionDetails: {
2089
+ processing: string;
2090
+ completed: string;
2091
+ amountSent: string;
2092
+ amountReceived: string;
2093
+ usdValue: string;
2094
+ estimatedDeliveryTime: string;
2095
+ sourceNetwork: string;
2096
+ destinationNetwork: string;
2097
+ depositTx: string;
2098
+ withdrawalTx: string;
2099
+ completionTx: string;
2100
+ };
2101
+ depositTracker: {
2102
+ title: string;
2103
+ detailsTitle: string;
2104
+ empty: string;
2105
+ viewStatus: string;
2106
+ checkingForDeposit: string;
2107
+ iveMadeDeposit: string;
2108
+ item: {
2109
+ processing: string;
2110
+ completed: string;
2111
+ };
2112
+ estimatedPrefix: string;
2113
+ };
2114
+ connectWallet: {
2115
+ title: string;
2116
+ selectWalletSubtitle: string;
2117
+ selectWalletSubtitleChain: string;
2118
+ openInWalletApp: string;
2119
+ noWalletsAvailable: string;
2120
+ noBalancesFound: string;
2121
+ lastUsed: string;
2122
+ selectNetwork: string;
2123
+ whichNetwork: string;
2124
+ connectingTitle: string;
2125
+ connectingTo: string;
2126
+ approveInWallet: string;
2127
+ continueInWallet: string;
2128
+ completeInWalletApp: string;
2129
+ openInWallet: string;
2130
+ checkingForDeposit: string;
2131
+ review: {
2132
+ title: string;
2133
+ destination: string;
2134
+ estimatedTime: string;
2135
+ priceImpact: string;
2136
+ maxSlippage: string;
2137
+ confirmOrder: string;
2138
+ confirming: string;
2139
+ minimumForTokenOnChain: string;
2140
+ amountAdjusted: string;
2141
+ minimumDeposit: string;
2142
+ walletWillPrompt: string;
2143
+ };
2144
+ confirming: {
2145
+ waitingTitle: string;
2146
+ waitingSubtitle: string;
2147
+ submittedTitle: string;
2148
+ submittedSubtitle: string;
2149
+ };
2150
+ detected: string;
2151
+ install: string;
2152
+ open: string;
2153
+ evmCompatibleChains: string;
2154
+ solanaNetwork: string;
2155
+ approveInSolanaWallet: string;
2156
+ selectToken: string;
2157
+ enterAmount: string;
2158
+ insufficientBalance: string;
2159
+ continue: string;
2160
+ loadBalancesFailed: string;
2161
+ lowBalance: string;
2162
+ notSupported: string;
2163
+ notEligible: string;
2164
+ paymentComplete: string;
2165
+ paymentFailed: string;
2166
+ paymentProcessing: string;
2167
+ processing: string;
2168
+ depositDetails: string;
2169
+ invalidDepositAddress: string;
2170
+ payAmount: string;
2171
+ connectFailed: string;
2172
+ transactionFailed: string;
2173
+ };
2174
+ transferCrypto: {
2175
+ priceImpact: {
2176
+ label: string;
2177
+ tooltip: string;
2178
+ finalCost: string;
2179
+ };
2180
+ slippage: {
2181
+ label: string;
2182
+ auto: string;
2183
+ tooltip: string;
2184
+ finalCost: string;
2185
+ };
2186
+ processingTime: {
2187
+ label: string;
2188
+ lessThanMinutes: string;
2189
+ lessThanHours: string;
2190
+ };
2191
+ minDeposit: {
2192
+ label: string;
2193
+ tooltip: string;
2194
+ };
2195
+ help: {
2196
+ needHelp: string;
2197
+ contactSupport: string;
2198
+ };
2199
+ terms: {
2200
+ seeTerms: string;
2201
+ termsApply: string;
2202
+ };
2203
+ selectedToken: string;
2204
+ selectedChain: string;
2205
+ depositAddress: {
2206
+ label: string;
2207
+ tooltip: string;
2208
+ };
2209
+ copyAddress: string;
2210
+ copied: string;
2211
+ loading: string;
2212
+ loadingQRCode: string;
2213
+ noAddressAvailable: string;
2214
+ noChainsAvailable: string;
2215
+ minimumDeposit: string;
2216
+ minimumDepositTooltip: string;
2217
+ selectTokenDeposit: string;
2218
+ selectTokenDepositTooltip: string;
2219
+ tokenSelector: {
2220
+ title: string;
2221
+ quickSelect: string;
2222
+ allSupportedTokens: string;
2223
+ noTokensFound: string;
2224
+ minimumLabel: string;
2225
+ };
2226
+ currency: {
2227
+ title: string;
2228
+ popularCurrencies: string;
2229
+ allCurrencies: string;
2230
+ noCurrenciesFound: string;
2231
+ };
2232
+ youSend: string;
2233
+ intentAddress: string;
2234
+ createAddressFailed: string;
2235
+ createAddressRetrying: string;
2236
+ addressValidation: {
2237
+ validating: string;
2238
+ unableToReceiveFunds: string;
2239
+ errors: {
2240
+ token_not_supported: string;
2241
+ not_opted_in: string;
2242
+ insufficient_balance: string;
2243
+ account_not_found: string;
2244
+ validation_error: string;
2245
+ };
2246
+ defaultError: string;
2247
+ };
2248
+ selectNetworkPlaceholder: string;
2249
+ };
2250
+ glossary: {
2251
+ title: string;
2252
+ depositToken: string;
2253
+ depositAddress: string;
2254
+ depositAddressDescription: string;
2255
+ priceImpact: string;
2256
+ slippage: string;
2257
+ processingTime: string;
2258
+ processingTimeDescription: string;
2259
+ minimumDeposit: string;
2260
+ recipientAddress: string;
2261
+ recipientAddressDescription: string;
2262
+ linkLabel: string;
2263
+ };
2264
+ depositModal: {
2265
+ title: string;
2266
+ transferCrypto: {
2267
+ title: string;
2268
+ subtitle: string;
2269
+ };
2270
+ depositWithCard: {
2271
+ title: string;
2272
+ subtitle: string;
2273
+ };
2274
+ quotes: string;
2275
+ payWithExchange: {
2276
+ title: string;
2277
+ subtitle: string;
2278
+ };
2279
+ depositTracker: {
2280
+ title: string;
2281
+ subtitle: string;
2282
+ };
2283
+ stripeLink: {
2284
+ title: string;
2285
+ subtitle: string;
2286
+ unavailableInRegionMessage: string;
2287
+ };
2288
+ browserWallet: {
2289
+ title: string;
2290
+ subtitle: string;
2291
+ disconnect: string;
2292
+ };
2293
+ cashApp: {
2294
+ creatingOrder: string;
2295
+ continue: string;
2296
+ sessionExpiredTitle: string;
2297
+ sessionExpiredSubtitle: string;
2298
+ newSession: string;
2299
+ copyPaymentLink: string;
2300
+ openCashApp: string;
2301
+ paymentProcessing: string;
2302
+ paymentProcessingSubtitle: string;
2303
+ paymentReceived: string;
2304
+ paymentReceivedSubtitle: string;
2305
+ };
2306
+ bankTransfer: {
2307
+ title: string;
2308
+ subtitle: string;
2309
+ unavailableInCountry: string;
2310
+ };
2311
+ cashAppMenu: {
2312
+ title: string;
2313
+ subtitle: string;
2314
+ };
2315
+ applePayMenu: {
2316
+ title: string;
2317
+ subtitle: string;
2318
+ };
2319
+ googlePayMenu: {
2320
+ title: string;
2321
+ subtitle: string;
2322
+ };
2323
+ cardMethodName: string;
2324
+ applePayMethodName: string;
2325
+ googlePayMethodName: string;
2326
+ stripeLinkHeaderTitle: string;
2327
+ locationError: {
2328
+ title: string;
2329
+ description: string;
2330
+ };
2331
+ blocked: {
2332
+ title: string;
2333
+ description: string;
2334
+ };
2335
+ geoRestriction: {
2336
+ title: string;
2337
+ description: string;
2338
+ };
2339
+ tabs: {
2340
+ crypto: string;
2341
+ cash: string;
2342
+ };
2343
+ applePayHeader: {
2344
+ enterEmail: string;
2345
+ enterPhone: string;
2346
+ verifyEmail: string;
2347
+ verifyPhone: string;
2348
+ amount: string;
2349
+ checkingDeposit: string;
2350
+ success: string;
2351
+ limitReached: string;
2352
+ verifyIdentity: string;
2353
+ verifying: string;
2354
+ };
2355
+ cashAppHeader: {
2356
+ payAmount: string;
2357
+ };
2358
+ cashAppScan: {
2359
+ mobile: string;
2360
+ desktop: string;
2361
+ };
2362
+ cashAppErrors: {
2363
+ missingFields: string;
2364
+ createSessionFailed: string;
2365
+ paymentFailed: string;
2366
+ cashAppPaymentFailed: string;
2367
+ };
2368
+ };
2369
+ checkoutModal: {
2370
+ title: string;
2371
+ unableToLoad: string;
2372
+ transferCrypto: {
2373
+ title: string;
2374
+ subtitle: string;
2375
+ };
2376
+ browserWallet: {
2377
+ title: string;
2378
+ subtitle: string;
2379
+ };
2380
+ status: {
2381
+ succeeded: string;
2382
+ processing: string;
2383
+ canceled: string;
2384
+ expired: string;
2385
+ };
2386
+ received: string;
2387
+ genericError: string;
2388
+ amountReceived: string;
2389
+ amountRemaining: string;
2390
+ };
2391
+ payWithExchange: {
2392
+ title: string;
2393
+ subtitle: string;
2394
+ comingSoon: string;
2395
+ completeTransaction: string;
2396
+ canCloseModal: string;
2397
+ reopenExchange: string;
2398
+ walletOrTokenUnavailable: string;
2399
+ };
2400
+ connectExchange: {
2401
+ title: string;
2402
+ subtitle: string;
2403
+ selectExchange: string;
2404
+ comingSoon: string;
2405
+ disclosure: {
2406
+ message: string;
2407
+ credentialsNotStored: string;
2408
+ credentialsNotStoredDesc: string;
2409
+ mfaRequired: string;
2410
+ mfaRequiredDesc: string;
2411
+ };
2412
+ connecting: string;
2413
+ connectingDesc: string;
2414
+ connected: {
2415
+ title: string;
2416
+ subtitle: string;
2417
+ exchange: string;
2418
+ status: string;
2419
+ statusConnected: string;
2420
+ continueToDeposit: string;
2421
+ continueToPay: string;
2422
+ flowSource: string;
2423
+ flowTransfer: string;
2424
+ flowDirect: string;
2425
+ flowDestination: string;
2426
+ secureNote: string;
2427
+ };
2428
+ holdings: {
2429
+ title: string;
2430
+ };
2431
+ transfer: {
2432
+ source: string;
2433
+ destination: string;
2434
+ destinationWallet: string;
2435
+ estimatedTime: string;
2436
+ estimatedTimeLessThanMin: string;
2437
+ youSend: string;
2438
+ youReceive: string;
2439
+ transactionBreakdown: string;
2440
+ networkFee: string;
2441
+ confirmOrder: string;
2442
+ termsNoticePrefix: string;
2443
+ termsNoticeLink: string;
2444
+ termsNoticeSuffix: string;
2445
+ };
2446
+ mfa: {
2447
+ title: string;
2448
+ description: string;
2449
+ invalidCode: string;
2450
+ continue: string;
2451
+ };
2452
+ success: {
2453
+ title: string;
2454
+ description: string;
2455
+ done: string;
2456
+ processingTitle: string;
2457
+ processingSubtitle: string;
2458
+ };
2459
+ error: {
2460
+ title: string;
2461
+ tryAgain: string;
2462
+ };
2463
+ continue: string;
2464
+ disconnect: string;
2465
+ depositFromExchange: string;
2466
+ noHoldingsFound: string;
2467
+ enterAmount: string;
2468
+ balanceWithMax: string;
2469
+ balanceOnly: string;
2470
+ exchangeFallback: string;
2471
+ insufficientBalance: string;
2472
+ minimumDeposit: string;
2473
+ depositDetails: string;
2474
+ balanceWithTime: string;
2475
+ errors: {
2476
+ oauthStartFailed: string;
2477
+ createTransferFailed: string;
2478
+ transferFailed: string;
2479
+ };
2480
+ };
2481
+ buyWithCard: {
2482
+ autoPicked: string;
2483
+ noDocumentUpload: string;
2484
+ youReceive: string;
2485
+ onramp: {
2486
+ completeTransaction: string;
2487
+ canCloseModal: string;
2488
+ youUse: string;
2489
+ youBuy: string;
2490
+ youReceive: string;
2491
+ intentAddressNote: string;
2492
+ };
2493
+ provider: string;
2494
+ loadingTokenInformation: string;
2495
+ detectingLocation: string;
2496
+ errors: {
2497
+ fetchQuotesFailed: string;
2498
+ walletAddressUnavailable: string;
2499
+ destinationTokenUnresolved: string;
2500
+ bankTransferWalletUnavailable: string;
2501
+ };
2502
+ refreshingIn: string;
2503
+ estimatedDeliveryTime: string;
2504
+ };
2505
+ buyWithApplePay: {
2506
+ email: {
2507
+ label: string;
2508
+ placeholder: string;
2509
+ };
2510
+ phone: {
2511
+ label: string;
2512
+ placeholder: string;
2513
+ invalid: string;
2514
+ reverified: string;
2515
+ sendCode: string;
2516
+ };
2517
+ otp: {
2518
+ sentTo: string;
2519
+ placeholder: string;
2520
+ incorrect: string;
2521
+ resend: string;
2522
+ resendIn: string;
2523
+ };
2524
+ amount: {
2525
+ enterAmount: string;
2526
+ unableToPrepare: string;
2527
+ loadingToken: string;
2528
+ tokenRoutingUnavailable: string;
2529
+ preparing: string;
2530
+ payWith: string;
2531
+ pay: string;
2532
+ };
2533
+ checking: {
2534
+ title: string;
2535
+ description: string;
2536
+ };
2537
+ upgrade: {
2538
+ limitReached: string;
2539
+ introDescription: string;
2540
+ verifyingTitle: string;
2541
+ verifyingDescription: string;
2542
+ dobLabel: string;
2543
+ dobPlaceholder: string;
2544
+ ssnLabel: string;
2545
+ ssnAriaLabel: string;
2546
+ submit: string;
2547
+ submitting: string;
2548
+ failedPrefix: string;
2549
+ contactSupport: string;
2550
+ failedSuffix: string;
2551
+ guestNotEligible: string;
2552
+ };
2553
+ disclaimer: {
2554
+ prefix: string;
2555
+ separator: string;
2556
+ lastSeparator: string;
2557
+ suffix: string;
2558
+ };
2559
+ errors: {
2560
+ rateLimited: string;
2561
+ network: string;
2562
+ voip: string;
2563
+ destinationNotConfigured: string;
2564
+ tokenInfoUnavailable: string;
2565
+ depositWalletUnavailable: string;
2566
+ requestFailed: string;
2567
+ };
2568
+ continue: string;
2569
+ cancel: string;
2570
+ return: string;
2571
+ close: string;
2572
+ formErrors: {
2573
+ guestLimitReached: string;
2574
+ startVerificationFailed: string;
2575
+ verifyInfoFailed: string;
2576
+ limitUpgradeFailed: string;
2577
+ verificationFailed: string;
2578
+ createPaymentFailed: string;
2579
+ };
2580
+ };
2581
+ payWithStripeLink: {
2582
+ notConfigured: string;
2583
+ loading: string;
2584
+ pleaseWait: string;
2585
+ retry: string;
2586
+ goBack: string;
2587
+ back: string;
2588
+ continue: string;
2589
+ done: string;
2590
+ submitting: string;
2591
+ connecting: string;
2592
+ creatingAccount: string;
2593
+ verifyingIdentity: string;
2594
+ settingUp: string;
2595
+ kycPending: {
2596
+ title: string;
2597
+ checkingAutomatically: string;
2598
+ };
2599
+ kycForm: {
2600
+ title: string;
2601
+ stepName: string;
2602
+ stepAddress: string;
2603
+ stepLimit: string;
2604
+ firstName: string;
2605
+ firstNamePlaceholder: string;
2606
+ lastName: string;
2607
+ lastNamePlaceholder: string;
2608
+ dateOfBirth: string;
2609
+ ssn: string;
2610
+ addressLine1: string;
2611
+ addressLine1Placeholder: string;
2612
+ addressLine2: string;
2613
+ addressLine2Placeholder: string;
2614
+ city: string;
2615
+ state: string;
2616
+ country: string;
2617
+ unitedStates: string;
2618
+ zip: string;
2619
+ };
2620
+ kycDocument: {
2621
+ title: string;
2622
+ description: string;
2623
+ };
2624
+ payment: {
2625
+ empty: string;
2626
+ addPaymentMethod: string;
2627
+ };
2628
+ email: {
2629
+ label: string;
2630
+ placeholder: string;
2631
+ };
2632
+ register: {
2633
+ title: string;
2634
+ subtitle: string;
2635
+ emailLabel: string;
2636
+ phoneLabel: string;
2637
+ };
2638
+ terms: {
2639
+ intro: string;
2640
+ linkOnrampTerms: string;
2641
+ separator: string;
2642
+ bridgeTerms: string;
2643
+ acknowledge: string;
2644
+ linkPrivacyNotice: string;
2645
+ and: string;
2646
+ bridgePrivacyNotice: string;
2647
+ suffix: string;
2648
+ };
2649
+ amount: {
2650
+ selectPaymentMethod: string;
2651
+ ready: string;
2652
+ minimumAmount: string;
2653
+ limitVerifyToRaise: string;
2654
+ limitReachedVerifyToRaise: string;
2655
+ limitTryLess: string;
2656
+ limitReachedTryLess: string;
2657
+ fetchingQuote: string;
2658
+ feesApply: string;
2659
+ instant: string;
2660
+ verifyToRaiseLimit: string;
2661
+ preparing: string;
2662
+ };
2663
+ review: {
2664
+ title: string;
2665
+ refreshing: string;
2666
+ refreshesIn: string;
2667
+ amount: string;
2668
+ fees: string;
2669
+ total: string;
2670
+ youReceive: string;
2671
+ buyNow: string;
2672
+ processing: string;
2673
+ preparing: string;
2674
+ };
2675
+ checkout: {
2676
+ title: string;
2677
+ subtitle: string;
2678
+ };
2679
+ error: {
2680
+ title: string;
2681
+ fallback: string;
2682
+ tryAgain: string;
2683
+ };
2684
+ paymentFailure: {
2685
+ lead: string;
2686
+ retryHint: string;
2687
+ codes: {
2688
+ card_declined: string;
2689
+ insufficient_funds: string;
2690
+ expired_card: string;
2691
+ incorrect_cvc: string;
2692
+ incorrect_number: string;
2693
+ card_not_supported: string;
2694
+ processing_error: string;
2695
+ authentication_required: string;
2696
+ payment_intent_authentication_failure: string;
2697
+ payment_method_provider_decline: string;
2698
+ payment_failed: string;
2699
+ };
2700
+ };
2701
+ kycErrors: {
2702
+ generic: string;
2703
+ resubmit: string;
2704
+ codes: {
2705
+ phone_verification_failed: string;
2706
+ id_document_verification_failed: string;
2707
+ address_verification_failed: string;
2708
+ date_of_birth_verification_failed: string;
2709
+ id_number_verification_failed: string;
2710
+ name_verification_failed: string;
2711
+ };
2712
+ };
2713
+ success: {
2714
+ processingTitle: string;
2715
+ processingSubtitle: string;
2716
+ completeTitle: string;
2717
+ completeSubtitle: string;
2718
+ failedTitle: string;
2719
+ failedSubtitle: string;
2720
+ };
2721
+ paymentMethodReady: string;
2722
+ enterAmountPlaceholder: string;
2723
+ bankAccount: string;
2724
+ paymentMethod: string;
2725
+ expires: string;
2726
+ accountTypeSuffix: string;
2727
+ formErrors: {
2728
+ configLoadFailed: string;
2729
+ sessionExpiredBeforeCompletion: string;
2730
+ purchaseRejected: string;
2731
+ authStartFailed: string;
2732
+ invalidUsPhone: string;
2733
+ registerFailed: string;
2734
+ reverifyFailed: string;
2735
+ verificationCancelled: string;
2736
+ consentRequired: string;
2737
+ reviewingDocuments: string;
2738
+ verifyingInformation: string;
2739
+ needMoreDetails: string;
2740
+ kycStatusFailed: string;
2741
+ enterFullName: string;
2742
+ enterFullAddress: string;
2743
+ enterValidSsn: string;
2744
+ enterValidDob: string;
2745
+ kycSubmissionFailed: string;
2746
+ documentVerificationFailed: string;
2747
+ registerWalletFailed: string;
2748
+ loadPaymentMethodsFailed: string;
2749
+ addPaymentMethodFailed: string;
2750
+ paymentMethodUnusable: string;
2751
+ pricingUpdated: string;
2752
+ checkoutFailed: string;
2753
+ preparePurchaseFailed: string;
2754
+ };
2755
+ retrySuffix: string;
2756
+ };
2757
+ withdrawModal: {
2758
+ title: string;
2759
+ withdrawCrypto: {
2760
+ title: string;
2761
+ subtitle: string;
2762
+ };
2763
+ selectToken: string;
2764
+ receiveToken: string;
2765
+ receiveChain: string;
2766
+ recipientAddress: string;
2767
+ recipientAddressPlaceholder: string;
2768
+ amount: string;
2769
+ amountPlaceholder: string;
2770
+ balance: string;
2771
+ minimum: string;
2772
+ withdraw: string;
2773
+ invalidAddress: string;
2774
+ invalidAmount: string;
2775
+ verifyingAddress: string;
2776
+ loading: string;
2777
+ noTokensAvailable: string;
2778
+ review: string;
2779
+ back: string;
2780
+ pasteFromClipboard: string;
2781
+ switchUnit: string;
2782
+ processing: string;
2783
+ balanceBelowMinimum: string;
2784
+ insufficientBalance: string;
2785
+ minimumNotMet: string;
2786
+ withdrawFailedRetry: string;
2787
+ noChainsAvailable: string;
2788
+ searchTokenOrNetwork: string;
2789
+ unsupportedSourceToken: string;
2790
+ details: {
2791
+ title: string;
2792
+ history: string;
2793
+ status: string;
2794
+ checking: string;
2795
+ empty: string;
2796
+ };
2797
+ executionItem: {
2798
+ processing: string;
2799
+ completed: string;
2800
+ };
2801
+ withdrawFailed: string;
2802
+ sourceTokenFallback: string;
2803
+ sourceTokenNotSupported: string;
2804
+ };
2805
+ incident: {
2806
+ outage: string;
2807
+ info: string;
2808
+ degraded: string;
2809
+ };
2810
+ hypercore: {
2811
+ withdrawFee: string;
2812
+ activationFee: string;
2813
+ };
2814
+ };
2815
+ /**
2816
+ * Interpolate parameters into a template string
2817
+ * Replaces {{key}} placeholders with values from params
2818
+ *
2819
+ * @example
2820
+ * interpolate("Hello {{name}}!", { name: "World" }) // "Hello World!"
2821
+ */
2822
+ declare function interpolate(template: string, params?: Record<string, string | number> | null): string;
2823
+ /**
2824
+ * Normalize an arbitrary locale tag to a supported `LocaleCode`, falling back to
2825
+ * "en" for anything we don't ship.
2826
+ *
2827
+ * Chinese is resolved by script rather than a single region: any Traditional
2828
+ * signal (script `Hant`, or region TW/HK/MO) maps to `zh-TW` (Traditional);
2829
+ * every other `zh` tag maps to `zh` (Simplified).
2830
+ *
2831
+ * @example normalizeLocale("zh-CN") // "zh" (Simplified)
2832
+ * @example normalizeLocale("zh-TW") // "zh-TW" (Traditional)
2833
+ * @example normalizeLocale("zh-HK") // "zh-TW" (Traditional)
2834
+ * @example normalizeLocale("zh-Hant-TW") // "zh-TW" (Traditional)
2835
+ * @example normalizeLocale("en_US") // "en"
2836
+ */
2837
+ declare function normalizeLocale(tag?: string | null): LocaleCode;
2838
+ /**
2839
+ * Best-effort browser locale detection. Walks `navigator.languages` in the
2840
+ * user's own order and takes the first language we ship, so `["fr", "zh-TW"]`
2841
+ * resolves to `zh-TW` while `["en-US", "zh-CN"]` stays English. Returns "en"
2842
+ * during SSR or when nothing matches.
2843
+ */
2844
+ declare function detectBrowserLocale(): LocaleCode;
2845
+ /** Get the string table for a locale (defaults to English). */
2846
+ declare function getStrings(locale: LocaleCode): I18nStrings;
2847
+ /** Active string table for use outside React components. */
2848
+ declare function getActiveStrings(): I18nStrings;
2849
+ /** Active locale for use outside React components. */
2850
+ declare function getActiveLocale(): LocaleCode;
2851
+ /** Set the active locale for the module singleton (called by `I18nProvider`). */
2852
+ declare function setActiveLocale(locale: LocaleCode): void;
2853
+ interface I18nContextValue {
2854
+ /** Localized string table for the active locale. */
2855
+ t: I18nStrings;
2856
+ /** The resolved active locale. */
2857
+ locale: LocaleCode;
2858
+ /** Interpolate `{{placeholders}}` in a template string. */
2859
+ format: (template: string, params?: Record<string, string | number> | null) => string;
2860
+ }
2861
+ interface I18nProviderProps {
2862
+ children: React$1.ReactNode;
2863
+ /**
2864
+ * Locale tag (e.g. "zh", "zh-CN", "en-US"). When omitted, the browser locale
2865
+ * is auto-detected. Unsupported locales fall back to English.
2866
+ */
2867
+ locale?: string;
2868
+ }
2869
+ declare function I18nProvider({ children, locale }: I18nProviderProps): react_jsx_runtime.JSX.Element;
2870
+ /**
2871
+ * Access the active localized strings. Falls back to the module singleton (and
2872
+ * ultimately English) when used outside an `I18nProvider`, matching how
2873
+ * `useTheme` degrades gracefully.
2874
+ */
2875
+ declare function useI18n(): I18nContextValue;
2876
+
1176
2877
  /**
1177
2878
  * Result of the useAllowedCountry hook
1178
2879
  */
@@ -1308,6 +3009,7 @@ interface UseWithdrawPollingOptions {
1308
3009
  message: string;
1309
3010
  error?: unknown;
1310
3011
  code?: string;
3012
+ execution?: WithdrawDirectExecutionFailedEvent;
1311
3013
  }) => void;
1312
3014
  }
1313
3015
  interface UseWithdrawPollingResult {
@@ -1640,6 +3342,29 @@ interface ThemeProviderProps {
1640
3342
  declare function ThemeProvider({ children, mode, accentColor, theme, fontFamily, fonts: fontConfig, components: componentConfig, themeClass: legacyThemeClass, }: ThemeProviderProps): react_jsx_runtime.JSX.Element;
1641
3343
  declare function useTheme(): ThemeContextValue;
1642
3344
 
3345
+ interface AnalyticsProviderProps {
3346
+ children: React$1.ReactNode;
3347
+ tracker?: EventTracker | null;
3348
+ }
3349
+ /**
3350
+ * Provides an optional EventTracker to all Unifold UI components.
3351
+ * When no tracker is provided, all tracking calls are silently skipped.
3352
+ */
3353
+ declare function AnalyticsProvider({ children, tracker }: AnalyticsProviderProps): react_jsx_runtime.JSX.Element;
3354
+ /**
3355
+ * Hook that returns a `track` function plus analytics-journey (session)
3356
+ * helpers. Safe to call even when no tracker is configured — calls are
3357
+ * silently dropped; {@link getSessionId} returns `undefined` outside a journey.
3358
+ */
3359
+ declare function useAnalytics(): {
3360
+ track: (event: string, properties?: AnalyticsProperties) => void;
3361
+ startSession: () => string;
3362
+ endSession: () => void | undefined;
3363
+ getSessionId: () => string | undefined;
3364
+ setUserId: (userId: string | null) => void | undefined;
3365
+ subscribe: (handler: (event: AnalyticsEvent) => void) => () => void;
3366
+ };
3367
+
1643
3368
  declare function cn(...inputs: ClassValue[]): string;
1644
3369
  /**
1645
3370
  * Format estimated processing time in human-readable format
@@ -1655,4 +3380,4 @@ declare function cn(...inputs: ClassValue[]): string;
1655
3380
  */
1656
3381
  declare function truncateAddress(address: string, startChars?: number, endChars?: number): string;
1657
3382
 
1658
- export { type AllowedCountryResult, BankTransfer, BankTransferButton, type BankTransferProps, type BankTransferView, type BrowserWalletAmountQuickSelect, Button, type ButtonProps, type ButtonTokens, BuyWithApplePay, type BuyWithApplePayProps, BuyWithCard, type BuyWithCardProps, type CardTokens, CheckingForDepositIndicator, CheckoutModal, type CheckoutModalProps, CoinbaseConnect, type ComponentConfig, type ComponentOverrides, type ComponentTokens, ConfirmingView, ConnectExchangeButton, type ContainerTokens, CurrencyListItem, CurrencyListSection, CurrencyModal, type CustomThemeColors, type DepositConfirmationMode, DepositDetailContent, DepositExecutionItem, DepositHeader, DepositModal, type DepositModalInitialScreen, DepositSuccessToast, DepositTrackerButton, DepositWithCardButton, DepositsModal, type DetectedWallet, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type EvmWalletProvider, type FontConfig, HYPERCORE_CHAIN_ID, type HeaderTokens, type InputTokens, type ListTokens, ManualDepositButton, PayWithStripeLink, type PayWithStripeLinkProps, QRCodeSkeleton, type ResolvedFonts, type SearchTokens, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type SolanaWalletProvider, type StoredApplePaySession, StripeLinkButton, type StripeLinkStep, StyledQRCode, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, type ThemeProviderProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCryptoButton, TransferCryptoDoubleInput, TransferCryptoSingleInput, type UseDepositQuoteParams, type UsePaymentIntentParams, type UseSupportedDepositTokensOptions, WithdrawConfirmingView, WithdrawDoubleInput, WithdrawExecutionItem, WithdrawForm, WithdrawModal, type WithdrawModalProps, WithdrawTokenSelector, type WithdrawTransactionInfo, buttonVariants, clearStoredApplePaySession, cn, colors, defaultColors, detectBrowserWallet, getColors, getStoredApplePaySession, isHypercoreChain, isOnrampTokenFresh, mergeColors, resolveComponentTokens, sendEvmWithdraw, sendHypercoreWithdraw, sendSolanaWithdraw, setStoredApplePaySession, truncateAddress, useAddressBalance, useAllowedCountry, useDebounce, useDepositPolling, useDepositQuote, usePaymentIntent, usePublicIncident, useSourceTokenValidation, useSupportedDepositTokens, useSupportedDestinationTokens, useTheme, useVerifyRecipientAddress, useWithdrawPolling };
3383
+ export { type AllowedCountryResult, AnalyticsProvider, type AnalyticsProviderProps, BankTransfer, BankTransferButton, type BankTransferProps, type BankTransferView, type BrowserWalletAmountQuickSelect, Button, type ButtonProps, type ButtonTokens, BuyWithApplePay, type BuyWithApplePayProps, BuyWithCard, type BuyWithCardProps, BuyWithGooglePay, type BuyWithGooglePayProps, BuyWithWalletPay, type BuyWithWalletPayHandle, type BuyWithWalletPayProps, type CardTokens, CheckingForDepositIndicator, CheckoutModal, type CheckoutModalProps, CoinbaseConnect, type ComponentConfig, type ComponentOverrides, type ComponentTokens, ConfirmingView, ConnectExchangeButton, type ContainerTokens, CurrencyListItem, CurrencyListSection, CurrencyModal, type CustomThemeColors, type DepositConfirmationMode, DepositDetailContent, DepositExecutionItem, DepositHeader, DepositModal, type DepositModalInitialScreen, DepositSuccessToast, DepositTrackerButton, DepositWithCardButton, DepositsModal, type DetectedWallet, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type EvmWalletProvider, type FontConfig, HYPERCORE_CHAIN_ID, type HeaderTokens, type I18nContextValue, I18nProvider, type I18nProviderProps, type I18nStrings, type InputTokens, type ListTokens, type LocaleCode, ManualDepositButton, PayWithStripeLink, type PayWithStripeLinkProps, QRCodeSkeleton, type ResolvedFonts, SUPPORTED_LOCALES, type SearchTokens, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, type SolanaWalletProvider, type StoredWalletPaySession as StoredApplePaySession, type StoredWalletPaySession, StripeLinkButton, type StripeLinkStep, StyledQRCode, type ThemeColors, type ThemeConfig, type ThemeMode, ThemeProvider, type ThemeProviderProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransferCryptoButton, TransferCryptoDoubleInput, TransferCryptoSingleInput, type UseDepositQuoteParams, type UsePaymentIntentParams, type UseSupportedDepositTokensOptions, WithdrawConfirmingView, WithdrawDoubleInput, WithdrawExecutionItem, WithdrawForm, WithdrawModal, type WithdrawModalProps, WithdrawTokenSelector, type WithdrawTransactionInfo, buttonVariants, clearStoredWalletPaySession as clearStoredApplePaySession, clearStoredWalletPaySession, cn, colors, defaultColors, detectBrowserLocale, detectBrowserWallet, getActiveLocale, getActiveStrings, getColors, getStoredWalletPaySession as getStoredApplePaySession, getStoredWalletPaySession, getStrings, i18n, interpolate, isHypercoreChain, isOnrampTokenFresh, mergeColors, normalizeLocale, resolveComponentTokens, sendEvmWithdraw, sendHypercoreWithdraw, sendSolanaWithdraw, setActiveLocale, setStoredWalletPaySession as setStoredApplePaySession, setStoredWalletPaySession, truncateAddress, useAddressBalance, useAllowedCountry, useAnalytics, useDebounce, useDepositPolling, useDepositQuote, useI18n, usePaymentIntent, usePublicIncident, useSourceTokenValidation, useSupportedDepositTokens, useSupportedDestinationTokens, useTheme, useVerifyRecipientAddress, useWithdrawPolling };