@funkit/connect 8.3.0 → 8.4.0-next.1

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 (58) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/__generated__/default_configs.d.ts +63 -0
  3. package/dist/{chunk-A24XIU2M.js → chunk-UE3P6YHW.js} +14 -0
  4. package/dist/{chunk-CMS4F5PL.js → chunk-XX5CVGHN.js} +3 -2
  5. package/dist/{chunk-GRQP5R23.js → chunk-YUWSE22N.js} +3 -2
  6. package/dist/clients/fanatics.css +3956 -3651
  7. package/dist/clients/fanatics.js +35 -6
  8. package/dist/components/Box/Box.d.ts +45 -45
  9. package/dist/components/FunCheckoutHistory/FunDirectExecutionHistoryBottomBar.d.ts +1 -0
  10. package/dist/components/FunCheckoutHistory/useCustomStatusAnimationAboveTopbar.d.ts +1 -3
  11. package/dist/components/FunCheckoutModalHeightAnimationWrapper/FunCheckoutModalHeightAnimationWrapper.d.ts +3 -1
  12. package/dist/components/FunInfoBanner/InfoBanner.d.ts +1 -1
  13. package/dist/components/FunPaymentMethodItem/FunPaymentMethodItem.d.ts +1 -0
  14. package/dist/components/FunPaymentMethodItem/FunPaymentMethodItemSkeleton.d.ts +2 -0
  15. package/dist/components/FunPayments/FunPaymentMethods.d.ts +7 -0
  16. package/dist/components/Icons/AcrossIcon.d.ts +4 -0
  17. package/dist/components/Tabs/Tabs.d.ts +1 -0
  18. package/dist/consts/customers.d.ts +1 -1
  19. package/dist/css/sprinkles.css.d.ts +87 -45
  20. package/dist/domains/meld.d.ts +0 -6
  21. package/dist/hooks/queries/useFops.d.ts +17 -0
  22. package/dist/hooks/track/CheckoutModalEvent.d.ts +7 -0
  23. package/dist/hooks/useCheckoutDirectExecutionHistory.d.ts +1 -0
  24. package/dist/hooks/useStepQueryReadiness.d.ts +32 -0
  25. package/dist/index.css +3976 -3665
  26. package/dist/index.js +3643 -2985
  27. package/dist/modals/CheckoutModal/ConfirmationStep/useCheckoutConfirmation.d.ts +1 -0
  28. package/dist/modals/CheckoutModal/FunCheckoutStep.d.ts +2 -1
  29. package/dist/modals/CheckoutModal/LoadingAccount.d.ts +1 -1
  30. package/dist/modals/CheckoutModal/MeldQuotes/MeldQuotes.d.ts +1 -1
  31. package/dist/modals/CheckoutModal/SourceChange/ConnectedSource.d.ts +11 -0
  32. package/dist/modals/CheckoutModal/SourceChange/CryptoCashToggle.d.ts +5 -1
  33. package/dist/modals/CheckoutModal/SourceChange/FormOfPaymentsList.d.ts +10 -0
  34. package/dist/modals/CheckoutModal/SourceChange/SourceChange.d.ts +10 -0
  35. package/dist/modals/CheckoutModal/SourceChange/SourceChangeLoading.d.ts +4 -0
  36. package/dist/modals/CheckoutModal/SourceChange/{DefaultSourceList.d.ts → SourceList.d.ts} +3 -3
  37. package/dist/modals/CheckoutModal/SourceChange/sourceChange.css.d.ts +2 -1
  38. package/dist/modals/CheckoutModal/SwappedIframe/SwappedIframe.d.ts +16 -0
  39. package/dist/modals/CheckoutModal/SwappedIframe/index.d.ts +1 -0
  40. package/dist/modals/CheckoutModal/stepTransition.d.ts +7 -0
  41. package/dist/providers/FunkitCheckoutContext/index.d.ts +1 -0
  42. package/dist/providers/FunkitCheckoutContext/types.d.ts +1 -0
  43. package/dist/providers/FunkitConfigContext.d.ts +2 -0
  44. package/dist/providers/FunkitThemeProvider.d.ts +63 -0
  45. package/dist/themes/baseTheme.js +1 -1
  46. package/dist/themes/darkTheme.js +2 -2
  47. package/dist/themes/lightTheme.js +2 -2
  48. package/dist/utils/across.d.ts +5 -0
  49. package/dist/utils/depositCutoff.d.ts +9 -0
  50. package/dist/utils/directExecution.d.ts +16 -0
  51. package/dist/utils/flags/config.d.ts +2 -2
  52. package/dist/utils/lighter.d.ts +1 -3
  53. package/dist/utils/sanitizeHtml.d.ts +7 -0
  54. package/dist/utils/sanitizeUrl.d.ts +10 -0
  55. package/dist/utils/tokenIconUrl.d.ts +1 -1
  56. package/dist/wallets/walletConnectors/index.js +13 -13
  57. package/package.json +4 -4
  58. package/dist/modals/CheckoutModal/SourceChange/FanaticsSourceList.d.ts +0 -15
@@ -9,6 +9,7 @@ export interface CheckoutConfirmationError extends ErrorNotification {
9
9
  export declare enum ConfirmationErrorCode {
10
10
  QUOTE_EXPIRED = "QUOTE_EXPIRED",
11
11
  GENERIC_ERROR = "GENERIC_ERROR",
12
+ WITHDRAWAL_RATE_LIMIT_EXCEEDED = "WITHDRAWAL_RATE_LIMIT_EXCEEDED",
12
13
  RISK_ERROR = "RISK_ERROR",
13
14
  SIGNATURE_DENIED = "SIGNATURE_DENIED",
14
15
  SWITCH_CHAIN_ERROR = "SWITCH_CHAIN_ERROR",
@@ -20,5 +20,6 @@ export declare enum FunCheckoutStep {
20
20
  SELECT_BROKERAGE = "select_brokerage",
21
21
  CONNECT_EXCHANGE = "connect_exchange",
22
22
  BROKERAGE_TWO_FA = "brokerage_two_fa",
23
- BROKERAGE_SUCCESS = "brokerage_success"
23
+ BROKERAGE_SUCCESS = "brokerage_success",
24
+ SWAPPED_IFRAME = "swapped_iframe"
24
25
  }
@@ -18,4 +18,4 @@ export type LoadingAccountNext = {
18
18
  };
19
19
  export declare const LoadingAccountInfo: ModalStepInfo<FunCheckoutStep.LOADING_ACCOUNT>;
20
20
  /** A placeholder component to handle redirecting to the checkout history page */
21
- export declare function LoadingAccount({ modalState, onNext, }: ModalStepComponentProps<FunCheckoutStep.LOADING_ACCOUNT>): React.JSX.Element;
21
+ export declare function LoadingAccount({ modalState, onClose, onNext, }: ModalStepComponentProps<FunCheckoutStep.LOADING_ACCOUNT>): React.JSX.Element;
@@ -1,4 +1,4 @@
1
- import { type MeldQuote, MeldServiceProvider } from '@funkit/api-base';
1
+ import type { MeldQuote, MeldServiceProvider } from '@funkit/api-base';
2
2
  import React from 'react';
3
3
  import type { PaymentMethodCardInfo } from '../../../domains/paymentMethods';
4
4
  import { type CheckoutModalCommonState, FunCheckoutStep, type ModalStepComponentProps, type ModalStepInfo } from '../stepTransition';
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { type ConnectablePaymentMethodInfo } from '../../../domains/paymentMethods';
3
+ interface ConnectedSourceProps {
4
+ targetChainId: string;
5
+ paymentInfo: ConnectablePaymentMethodInfo;
6
+ selectedPaymentInfo: ConnectablePaymentMethodInfo | null;
7
+ showSelectedCheckmark?: boolean;
8
+ onSelect: () => void;
9
+ }
10
+ export declare const ConnectedSource: ({ paymentInfo, targetChainId, selectedPaymentInfo, showSelectedCheckmark, onSelect, }: ConnectedSourceProps) => React.JSX.Element | null;
11
+ export {};
@@ -1,9 +1,13 @@
1
1
  import React from 'react';
2
+ import { type BoxProps } from '../../../components/Box/Box';
2
3
  import type { PaymentMethodType } from '../../../hooks/usePaymentSources';
3
4
  interface CryptoCashToggleProps {
4
5
  activeTab: PaymentMethodType;
6
+ disabled?: boolean;
5
7
  onTabChange: (tab: PaymentMethodType) => void;
8
+ marginTop?: BoxProps['marginTop'];
9
+ marginBottom?: BoxProps['marginBottom'];
6
10
  style?: React.CSSProperties;
7
11
  }
8
- export declare const CryptoCashToggle: ({ activeTab, onTabChange, style, }: CryptoCashToggleProps) => React.JSX.Element;
12
+ export declare const CryptoCashToggle: ({ activeTab, disabled, onTabChange, marginTop, marginBottom, style, }: CryptoCashToggleProps) => React.JSX.Element;
9
13
  export {};
@@ -0,0 +1,10 @@
1
+ import type { FormOfPayment } from '@funkit/api-base';
2
+ import React from 'react';
3
+ interface FormOfPaymentsListProps {
4
+ fops?: FormOfPayment[];
5
+ isLoading: boolean;
6
+ selectedFop?: FormOfPayment | null;
7
+ onFopSelect: (fop: FormOfPayment) => void;
8
+ }
9
+ export declare function FormOfPaymentsList({ fops, isLoading, selectedFop, onFopSelect, }: FormOfPaymentsListProps): React.JSX.Element;
10
+ export {};
@@ -1,8 +1,12 @@
1
+ import { type FormOfPayment } from '@funkit/api-base';
1
2
  import React from 'react';
2
3
  import { type ConnectablePaymentMethodInfo, PaymentMethod, type PaymentMethodCardInfo, type PaymentMethodVirtualBankIncompleteInfo } from '../../../domains/paymentMethods';
4
+ import { type PaymentMethodType } from '../../../hooks/usePaymentSources';
3
5
  import { type CheckoutModalCommonState, FunCheckoutStep, type ModalStepComponentProps, type ModalStepInfo } from '../stepTransition';
4
6
  export type SourceChangeState = CheckoutModalCommonState & {
5
7
  paymentMethodInfo: ConnectablePaymentMethodInfo | null;
8
+ /** Persisted payment method type filter (crypto/fiat tab) */
9
+ paymentMethodTypeFilter?: PaymentMethodType;
6
10
  };
7
11
  export type SourceChangeNext = {
8
12
  connectNew: false;
@@ -25,6 +29,12 @@ export type SourceChangeNext = {
25
29
  } | {
26
30
  brokerageFailed: true;
27
31
  paymentMethodInfo: ConnectablePaymentMethodInfo;
32
+ } | {
33
+ /** Navigate to Swapped iframe with a selected payment option */
34
+ swappedIframe: true;
35
+ selectedPaymentOption: FormOfPayment;
36
+ /** Payment method type filter to restore when returning */
37
+ paymentMethodTypeFilter: PaymentMethodType;
28
38
  };
29
39
  export declare const SourceChangeInfo: ModalStepInfo<FunCheckoutStep.SOURCE_CHANGE>;
30
40
  export declare function SourceChange({ modalState, onClose, onNext, setModalState, }: ModalStepComponentProps<FunCheckoutStep.SOURCE_CHANGE>): React.JSX.Element;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare function SourceChangeLoading({ onClose, }: {
3
+ onClose: () => void;
4
+ }): React.JSX.Element;
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
2
  import type { ConnectablePaymentMethodInfo, PaymentMethod } from '../../../domains/paymentMethods';
3
- interface DefaultSourceListProps {
3
+ interface SourceListProps {
4
4
  preferred: (ConnectablePaymentMethodInfo | PaymentMethod)[];
5
5
  moreSources: (ConnectablePaymentMethodInfo | PaymentMethod)[];
6
6
  comingSoon: PaymentMethod[];
7
- hasMoreSources: boolean;
7
+ isFallback: boolean;
8
8
  renderSource: (source: ConnectablePaymentMethodInfo | PaymentMethod) => React.ReactNode;
9
9
  renderComingSoon: (source: PaymentMethod) => React.ReactNode;
10
10
  }
11
- export declare function DefaultSourceList({ preferred, moreSources, comingSoon, hasMoreSources, renderSource, renderComingSoon, }: DefaultSourceListProps): React.JSX.Element;
11
+ export declare function SourceList({ preferred, moreSources, comingSoon, isFallback, renderSource, renderComingSoon, }: SourceListProps): React.JSX.Element;
12
12
  export {};
@@ -1,3 +1,4 @@
1
1
  export declare const WITH_EMPTY_STATE_DATA_ATTRIBUTE = "data-with-empty-state";
2
2
  export declare const emptyStateStyles: string;
3
- export declare const fanaticsSourceChangeContainer: string;
3
+ export declare const sourceListBoxStyles: string;
4
+ export declare const sourceListCompactBoxStyles: string;
@@ -0,0 +1,16 @@
1
+ import type { FormOfPayment } from '@funkit/api-base';
2
+ import React from 'react';
3
+ import type { PaymentMethodType } from '../../../hooks/usePaymentSources';
4
+ import { type CheckoutModalCommonState, FunCheckoutStep, type ModalStepComponentProps, type ModalStepInfo } from '../../../modals/CheckoutModal/stepTransition';
5
+ export type SwappedIframeState = CheckoutModalCommonState & {
6
+ /** The selected payment option from the fops API */
7
+ selectedPaymentOption: FormOfPayment;
8
+ /** Payment method type filter to restore when returning to SOURCE_CHANGE */
9
+ paymentMethodTypeFilter?: PaymentMethodType;
10
+ };
11
+ export type SwappedIframeNext = {
12
+ success?: boolean;
13
+ };
14
+ export declare const SwappedIframeInfo: ModalStepInfo<FunCheckoutStep.SWAPPED_IFRAME>;
15
+ declare function SwappedIframe({ modalState, onNext, onBack, }: ModalStepComponentProps<FunCheckoutStep.SWAPPED_IFRAME>): React.JSX.Element;
16
+ export default SwappedIframe;
@@ -0,0 +1 @@
1
+ export { default as SwappedIframe, SwappedIframeInfo, type SwappedIframeNext, type SwappedIframeState, } from './SwappedIframe';
@@ -21,6 +21,7 @@ import { type MeldQuotesNext, type MeldQuotesState } from './MeldQuotes/MeldQuot
21
21
  import { type MeldRedirectNext, type MeldRedirectState } from './MeldRedirect/MeldRedirect';
22
22
  import { type SelectAssetNext, type SelectAssetState } from './SelectAsset/SelectAsset';
23
23
  import { type SourceChangeNext, type SourceChangeState } from './SourceChange/SourceChange';
24
+ import { type SwappedIframeNext, type SwappedIframeState } from './SwappedIframe';
24
25
  import { type TransferTokenNext, type TransferTokenState } from './TransferToken/TransferToken';
25
26
  import { type FiatAccountDetailNext, type FiatAccountDetailState } from './VirtualFiatAccount/FiatAccountDetail';
26
27
  import { type KycIframeNext, type KycIframeState } from './VirtualFiatAccount/KycIframe';
@@ -60,6 +61,8 @@ export type ModalStepInfo<S extends FunCheckoutStep> = {
60
61
  disableBack?: (info: ModalStepInput<S>) => boolean;
61
62
  /** Hides the close button in the Dialog Title element */
62
63
  hideClose?: (startingStep?: FunCheckoutStartingStep) => boolean;
64
+ /** Hides the entire topbar including back button, close button, and title */
65
+ hideTopbar?: () => boolean;
63
66
  onBack?(state: CheckoutModalState<S>, prevState: CheckoutModalState): CheckoutModalState;
64
67
  onNext(state: CheckoutModalState<S>, payload: NextPayload<S>): CheckoutModalState;
65
68
  showFullHeight?: boolean;
@@ -95,6 +98,7 @@ export type CheckoutModalState<S extends FunCheckoutStep = FunCheckoutStep> = {
95
98
  [FunCheckoutStep.CONNECT_EXCHANGE]: ConnectExchangeState;
96
99
  [FunCheckoutStep.BROKERAGE_TWO_FA]: BrokerageTwoFAState;
97
100
  [FunCheckoutStep.BROKERAGE_SUCCESS]: BrokerageSuccessState;
101
+ [FunCheckoutStep.SWAPPED_IFRAME]: SwappedIframeState;
98
102
  }[T] & {
99
103
  step: T;
100
104
  previousStep?: FunCheckoutStep | null;
@@ -123,6 +127,7 @@ export type NextPayload<S extends FunCheckoutStep = FunCheckoutStep> = {
123
127
  [FunCheckoutStep.CONNECT_EXCHANGE]: ConnectExchangeNext;
124
128
  [FunCheckoutStep.BROKERAGE_TWO_FA]: BrokerageTwoFANext;
125
129
  [FunCheckoutStep.BROKERAGE_SUCCESS]: null;
130
+ [FunCheckoutStep.SWAPPED_IFRAME]: SwappedIframeNext;
126
131
  }[S] & {
127
132
  /** Whether screen transition should change direction to simulate back transition. Only applies if there is a history entry in the stack*/
128
133
  reverseAnimation?: boolean;
@@ -145,10 +150,12 @@ export declare function useCheckoutModalTransition(checkoutItem: FunkitActiveChe
145
150
  onStepChange: (nextState: CheckoutModalState) => void;
146
151
  setModalState: import("react").Dispatch<SetStateAction<CheckoutModalState<FunCheckoutStep>>>;
147
152
  hasHistoryEntry: boolean;
153
+ isStepReady: boolean;
148
154
  };
149
155
  export declare function useTitleConfig<S extends FunCheckoutStep>(checkoutItem: FunkitActiveCheckoutItem, state: CheckoutModalState<S>): {
150
156
  disableBack: boolean;
151
157
  hideClose: boolean;
158
+ hideTopbar: boolean;
152
159
  showFullHeight: boolean;
153
160
  title: string;
154
161
  };
@@ -33,6 +33,7 @@ interface FunkitCheckoutContextInterface {
33
33
  withdrawalItem: FunkitActiveWithdrawalItem | null;
34
34
  initNewWithdrawal(initSettings: Partial<UseFunkitCheckoutPropsWithFullConfig>, config: UseFunkitCheckoutPropsWithFullConfig): string;
35
35
  updateWithdrawalSourceAssetAmount(newSourceAmount: number): void;
36
+ resetForNewWithdrawal(): void;
36
37
  applyDynamicRouting(path: Omit<DynamicRoutePath, 'getCustomRecipient' | 'generateActionsParams'> & {
37
38
  customRecipient?: FunkitCheckoutConfig['customRecipient'];
38
39
  generateActionsParams?: FunkitCheckoutConfig['generateActionsParams'];
@@ -23,6 +23,7 @@ export interface DynamicTargetAssetCandidate extends TokenInfo {
23
23
  * 1 USDT can be exchanged for 1.01 hbUSDT.
24
24
  */
25
25
  stakingTokenRate?: number;
26
+ dynamicRoutingId?: string;
26
27
  }
27
28
  export declare enum FunCheckoutStartingStep {
28
29
  SOURCE_CHANGE = "source_change",
@@ -177,6 +177,8 @@ export interface FunkitUiCustomizationsConfig {
177
177
  /** Translation key for label - defaults to `'common.close'` */
178
178
  labelKey?: 'sourceChange.exploreMarketsFirst' | 'common.close';
179
179
  };
180
+ /** Whether to show the crypto/cash toggle - defaults to false */
181
+ showCryptoCashToggle?: boolean;
180
182
  /** Whether to show target asset selection menu if dynamicTargetAssetCandidates exist - defaults to false */
181
183
  showTargetAssetSelection?: boolean;
182
184
  /** Whether to show wallet option when balance is insufficient - defaults to false (hides wallet) */
@@ -140,9 +140,11 @@ export declare const useActiveTheme: () => {
140
140
  txSummaryBoxBackground: string;
141
141
  txSummaryBoxBorder: string;
142
142
  counterRingColor: string;
143
+ cryptoCashToggleContainerBorderColor: string;
143
144
  };
144
145
  dimensions: {
145
146
  connectExchangeIconSize: string;
147
+ cryptoCashToggleIconSize: string;
146
148
  dollarValueSkeletonHeight: string;
147
149
  dollarValueSkeletonWidth: string;
148
150
  inputAmountQuickOptionButtonHeight: string;
@@ -153,6 +155,7 @@ export declare const useActiveTheme: () => {
153
155
  paymentAmountSkeletonBlockHeight: string;
154
156
  paymentAmountSkeletonBlockWidth: string;
155
157
  paymentAmountSkeletonCircleSize: string;
158
+ paymentMethodItemIconSize: string;
156
159
  selectAssetItemIconSize: string;
157
160
  txBreakdownSkeletonWidth: string;
158
161
  txSummaryLineSkeletonHeight: string;
@@ -175,6 +178,7 @@ export declare const useActiveTheme: () => {
175
178
  semibold: string;
176
179
  bold: string;
177
180
  heavy: string;
181
+ cryptoCashToggle: string;
178
182
  inputAmount: string;
179
183
  modalTopbarTitle: string;
180
184
  modalBottomBarButtonText: string;
@@ -188,6 +192,7 @@ export declare const useActiveTheme: () => {
188
192
  txStatusTitle: string;
189
193
  txSummaryLabel: string;
190
194
  txSummaryValue: string;
195
+ sourceListSectionLabelFontWeight: string;
191
196
  };
192
197
  fontSize: {
193
198
  '10': {
@@ -234,6 +239,10 @@ export declare const useActiveTheme: () => {
234
239
  fontSize: string;
235
240
  lineHeight: string;
236
241
  };
242
+ cryptoCashToggle: {
243
+ fontSize: string;
244
+ lineHeight: string;
245
+ };
237
246
  'header-14': {
238
247
  fontSize: string;
239
248
  lineHeight: string;
@@ -334,6 +343,10 @@ export declare const useActiveTheme: () => {
334
343
  fontSize: string;
335
344
  lineHeight: string;
336
345
  };
346
+ sourceListSectionLabelFontSize: {
347
+ fontSize: string;
348
+ lineHeight: string;
349
+ };
337
350
  };
338
351
  radii: {
339
352
  actionButton: string;
@@ -357,6 +370,7 @@ export declare const useActiveTheme: () => {
357
370
  borderWidths: {
358
371
  activeOptionBorderWidth: string;
359
372
  buttonTertiaryBorderWidth: string;
373
+ cryptoCashToggleContainerBorderWidth: string;
360
374
  txSummaryBoxBorderWidth: string;
361
375
  };
362
376
  shadows: {
@@ -388,11 +402,16 @@ export declare const useActiveTheme: () => {
388
402
  spacing: {
389
403
  confirmationStepMarginTop: string;
390
404
  confirmationStepVerticalGap: string;
405
+ cryptoCashToggleContainerPadding: string;
406
+ cryptoCashToggleMarginBottom: string;
407
+ cryptoCashToggleMarginTop: string;
408
+ cryptoCashToggleTabPaddingY: string;
391
409
  modalBaseHorizontalPadding: string;
392
410
  modalBottomHorizontalPadding: string;
393
411
  modalPaddingBottomUpper: string;
394
412
  modalPaddingBottomLower: string;
395
413
  modalTopBarVerticalTextSpacing: string;
414
+ modalBottomBarButtonPaddingY: string;
396
415
  selectAssetItemPaddingX: string;
397
416
  selectAssetItemPaddingY: string;
398
417
  selectAssetItemTextGap: string;
@@ -405,6 +424,8 @@ export declare const useActiveTheme: () => {
405
424
  txSummaryLineItemPadding: string;
406
425
  txSummaryDividerMarginX: string;
407
426
  txSummaryDividerMarginY: string;
427
+ youPayYouReceivePaddingLeft: string;
428
+ youPayYouReceivePaddingRight: string;
408
429
  youPayYouReceivePaddingY: string;
409
430
  };
410
431
  textTransforms: {
@@ -545,9 +566,11 @@ export declare const useActiveTheme: () => {
545
566
  txSummaryBoxBackground: string;
546
567
  txSummaryBoxBorder: string;
547
568
  counterRingColor: string;
569
+ cryptoCashToggleContainerBorderColor: string;
548
570
  };
549
571
  dimensions: {
550
572
  connectExchangeIconSize: string;
573
+ cryptoCashToggleIconSize: string;
551
574
  dollarValueSkeletonHeight: string;
552
575
  dollarValueSkeletonWidth: string;
553
576
  inputAmountQuickOptionButtonHeight: string;
@@ -558,6 +581,7 @@ export declare const useActiveTheme: () => {
558
581
  paymentAmountSkeletonBlockHeight: string;
559
582
  paymentAmountSkeletonBlockWidth: string;
560
583
  paymentAmountSkeletonCircleSize: string;
584
+ paymentMethodItemIconSize: string;
561
585
  selectAssetItemIconSize: string;
562
586
  txBreakdownSkeletonWidth: string;
563
587
  txSummaryLineSkeletonHeight: string;
@@ -580,6 +604,7 @@ export declare const useActiveTheme: () => {
580
604
  semibold: string;
581
605
  bold: string;
582
606
  heavy: string;
607
+ cryptoCashToggle: string;
583
608
  inputAmount: string;
584
609
  modalTopbarTitle: string;
585
610
  modalBottomBarButtonText: string;
@@ -593,6 +618,7 @@ export declare const useActiveTheme: () => {
593
618
  txStatusTitle: string;
594
619
  txSummaryLabel: string;
595
620
  txSummaryValue: string;
621
+ sourceListSectionLabelFontWeight: string;
596
622
  };
597
623
  fontSize: {
598
624
  '10': {
@@ -639,6 +665,10 @@ export declare const useActiveTheme: () => {
639
665
  fontSize: string;
640
666
  lineHeight: string;
641
667
  };
668
+ cryptoCashToggle: {
669
+ fontSize: string;
670
+ lineHeight: string;
671
+ };
642
672
  'header-14': {
643
673
  fontSize: string;
644
674
  lineHeight: string;
@@ -739,6 +769,10 @@ export declare const useActiveTheme: () => {
739
769
  fontSize: string;
740
770
  lineHeight: string;
741
771
  };
772
+ sourceListSectionLabelFontSize: {
773
+ fontSize: string;
774
+ lineHeight: string;
775
+ };
742
776
  };
743
777
  radii: {
744
778
  actionButton: string;
@@ -762,6 +796,7 @@ export declare const useActiveTheme: () => {
762
796
  borderWidths: {
763
797
  activeOptionBorderWidth: string;
764
798
  buttonTertiaryBorderWidth: string;
799
+ cryptoCashToggleContainerBorderWidth: string;
765
800
  txSummaryBoxBorderWidth: string;
766
801
  };
767
802
  shadows: {
@@ -793,11 +828,16 @@ export declare const useActiveTheme: () => {
793
828
  spacing: {
794
829
  confirmationStepMarginTop: string;
795
830
  confirmationStepVerticalGap: string;
831
+ cryptoCashToggleContainerPadding: string;
832
+ cryptoCashToggleMarginBottom: string;
833
+ cryptoCashToggleMarginTop: string;
834
+ cryptoCashToggleTabPaddingY: string;
796
835
  modalBaseHorizontalPadding: string;
797
836
  modalBottomHorizontalPadding: string;
798
837
  modalPaddingBottomUpper: string;
799
838
  modalPaddingBottomLower: string;
800
839
  modalTopBarVerticalTextSpacing: string;
840
+ modalBottomBarButtonPaddingY: string;
801
841
  selectAssetItemPaddingX: string;
802
842
  selectAssetItemPaddingY: string;
803
843
  selectAssetItemTextGap: string;
@@ -810,6 +850,8 @@ export declare const useActiveTheme: () => {
810
850
  txSummaryLineItemPadding: string;
811
851
  txSummaryDividerMarginX: string;
812
852
  txSummaryDividerMarginY: string;
853
+ youPayYouReceivePaddingLeft: string;
854
+ youPayYouReceivePaddingRight: string;
813
855
  youPayYouReceivePaddingY: string;
814
856
  };
815
857
  textTransforms: {
@@ -948,9 +990,11 @@ export declare const useActiveTheme: () => {
948
990
  txSummaryBoxBackground: string;
949
991
  txSummaryBoxBorder: string;
950
992
  counterRingColor: string;
993
+ cryptoCashToggleContainerBorderColor: string;
951
994
  };
952
995
  dimensions: {
953
996
  connectExchangeIconSize: string;
997
+ cryptoCashToggleIconSize: string;
954
998
  dollarValueSkeletonHeight: string;
955
999
  dollarValueSkeletonWidth: string;
956
1000
  inputAmountQuickOptionButtonHeight: string;
@@ -961,6 +1005,7 @@ export declare const useActiveTheme: () => {
961
1005
  paymentAmountSkeletonBlockHeight: string;
962
1006
  paymentAmountSkeletonBlockWidth: string;
963
1007
  paymentAmountSkeletonCircleSize: string;
1008
+ paymentMethodItemIconSize: string;
964
1009
  selectAssetItemIconSize: string;
965
1010
  txBreakdownSkeletonWidth: string;
966
1011
  txSummaryLineSkeletonHeight: string;
@@ -983,6 +1028,7 @@ export declare const useActiveTheme: () => {
983
1028
  semibold: string;
984
1029
  bold: string;
985
1030
  heavy: string;
1031
+ cryptoCashToggle: string;
986
1032
  inputAmount: string;
987
1033
  modalTopbarTitle: string;
988
1034
  modalBottomBarButtonText: string;
@@ -996,6 +1042,7 @@ export declare const useActiveTheme: () => {
996
1042
  txStatusTitle: string;
997
1043
  txSummaryLabel: string;
998
1044
  txSummaryValue: string;
1045
+ sourceListSectionLabelFontWeight: string;
999
1046
  };
1000
1047
  fontSize: {
1001
1048
  '10': {
@@ -1042,6 +1089,10 @@ export declare const useActiveTheme: () => {
1042
1089
  fontSize: string;
1043
1090
  lineHeight: string;
1044
1091
  };
1092
+ cryptoCashToggle: {
1093
+ fontSize: string;
1094
+ lineHeight: string;
1095
+ };
1045
1096
  'header-14': {
1046
1097
  fontSize: string;
1047
1098
  lineHeight: string;
@@ -1142,6 +1193,10 @@ export declare const useActiveTheme: () => {
1142
1193
  fontSize: string;
1143
1194
  lineHeight: string;
1144
1195
  };
1196
+ sourceListSectionLabelFontSize: {
1197
+ fontSize: string;
1198
+ lineHeight: string;
1199
+ };
1145
1200
  };
1146
1201
  radii: {
1147
1202
  actionButton: string;
@@ -1165,6 +1220,7 @@ export declare const useActiveTheme: () => {
1165
1220
  borderWidths: {
1166
1221
  activeOptionBorderWidth: string;
1167
1222
  buttonTertiaryBorderWidth: string;
1223
+ cryptoCashToggleContainerBorderWidth: string;
1168
1224
  txSummaryBoxBorderWidth: string;
1169
1225
  };
1170
1226
  shadows: {
@@ -1196,11 +1252,16 @@ export declare const useActiveTheme: () => {
1196
1252
  spacing: {
1197
1253
  confirmationStepMarginTop: string;
1198
1254
  confirmationStepVerticalGap: string;
1255
+ cryptoCashToggleContainerPadding: string;
1256
+ cryptoCashToggleMarginBottom: string;
1257
+ cryptoCashToggleMarginTop: string;
1258
+ cryptoCashToggleTabPaddingY: string;
1199
1259
  modalBaseHorizontalPadding: string;
1200
1260
  modalBottomHorizontalPadding: string;
1201
1261
  modalPaddingBottomUpper: string;
1202
1262
  modalPaddingBottomLower: string;
1203
1263
  modalTopBarVerticalTextSpacing: string;
1264
+ modalBottomBarButtonPaddingY: string;
1204
1265
  selectAssetItemPaddingX: string;
1205
1266
  selectAssetItemPaddingY: string;
1206
1267
  selectAssetItemTextGap: string;
@@ -1213,6 +1274,8 @@ export declare const useActiveTheme: () => {
1213
1274
  txSummaryLineItemPadding: string;
1214
1275
  txSummaryDividerMarginX: string;
1215
1276
  txSummaryDividerMarginY: string;
1277
+ youPayYouReceivePaddingLeft: string;
1278
+ youPayYouReceivePaddingRight: string;
1216
1279
  youPayYouReceivePaddingY: string;
1217
1280
  };
1218
1281
  textTransforms: {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  baseTheme,
4
4
  systemFontStack
5
- } from "../chunk-A24XIU2M.js";
5
+ } from "../chunk-UE3P6YHW.js";
6
6
  export {
7
7
  baseTheme,
8
8
  systemFontStack
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import {
3
3
  darkTheme
4
- } from "../chunk-GRQP5R23.js";
5
- import "../chunk-A24XIU2M.js";
4
+ } from "../chunk-YUWSE22N.js";
5
+ import "../chunk-UE3P6YHW.js";
6
6
  export {
7
7
  darkTheme
8
8
  };
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import {
3
3
  lightTheme
4
- } from "../chunk-CMS4F5PL.js";
5
- import "../chunk-A24XIU2M.js";
4
+ } from "../chunk-XX5CVGHN.js";
5
+ import "../chunk-UE3P6YHW.js";
6
6
  export {
7
7
  lightTheme
8
8
  };
@@ -0,0 +1,5 @@
1
+ import type { CheckoutQuoteResponse } from '@funkit/utils';
2
+ export declare const ACROSS_TIME_ESTIMATE_SECONDS = 180;
3
+ export declare const ACROSS_DELAYED_AUTO_TRIGGER_CUTOFF: number;
4
+ /** Whether the quote was routed through the Across bridge (e.g. CCTP) */
5
+ export declare function isAcrossRoute(metadata: CheckoutQuoteResponse['metadata'] | undefined): boolean;
@@ -0,0 +1,9 @@
1
+ import type { CheckoutQuoteResponse } from '@funkit/utils';
2
+ import type { FunkitCheckoutConfig } from '../providers/FunkitCheckoutContext';
3
+ export declare const DEFAULT_TX_DELAYED_CUTOFF = 60;
4
+ /**
5
+ * Returns the delayed auto trigger cutoff (in seconds) for slow deposits.
6
+ * Handles Lighter L1, LayerZero OFT, and Across (CCTP) routes.
7
+ * Falls back to {@link DEFAULT_TX_DELAYED_CUTOFF} for standard deposits.
8
+ */
9
+ export declare function getSlowDepositDelayedCutoff(apiKey: string, checkoutConfig: Pick<FunkitCheckoutConfig, 'targetChain'> | undefined, metadata?: CheckoutQuoteResponse['metadata']): number;
@@ -3,6 +3,22 @@ import type { WalletClient } from 'viem';
3
3
  export declare function getDirectExecutionCreatedTimeMs(directExecution: DirectExecution): number;
4
4
  export declare function getDirectExecutionUpdatedTimeMs(directExecution: DirectExecution): number;
5
5
  export declare function getDirectExecutionRunTimeSeconds(directExecution: DirectExecution): number;
6
+ /**
7
+ * Resolves the completion transaction chain, hash, and explorer URL for a direct execution.
8
+ *
9
+ * Chain resolution: if LayerZero OFT data is present, use the LZ destination chain;
10
+ * otherwise fall back to the DE's toChainId.
11
+ *
12
+ * Hash resolution: for Lighter L1 deposits (new user flow where toChainId is NOT Lighter),
13
+ * the completion explorer should point to Lighter using lighterExecutionStatusResponse.hash.
14
+ * For the existing user flow (toChainId IS Lighter), relay already puts the correct
15
+ * Lighter hash into listenerInfo.txHashes, so the default path works.
16
+ */
17
+ export declare function getCompletionTxInfo(directExecution: DirectExecution): {
18
+ chainId: string;
19
+ txHash: string | undefined;
20
+ customRedirectUrl: string | undefined;
21
+ };
6
22
  export declare function supportsAtomicBatch(wallet: WalletClient, chainId: number): Promise<boolean>;
7
23
  /**
8
24
  * Returns a proxied wallet with getCapabilities patched to disable atomic batch support.
@@ -205,7 +205,7 @@ export declare const flagConfig: {
205
205
  readonly if_any: [{
206
206
  readonly key: "apiKey";
207
207
  readonly type: "isAnyOf";
208
- readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "lI7amueGK94QtGa7sGGVf8n0XhIcn4sHFAZRu5Jj", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "USyZhcp7kB2mMsbRsaHDs3i52cE6srZw8KD8jZd0", "ODW4jUppoG3H87YcY9GZhoGj4hX5W0w9mr24LEU8", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "di9ZSqn1Ya68Y2XpBPUV1rCtNGXh8Xe5MGWzb1Xe", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
208
+ readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "lI7amueGK94QtGa7sGGVf8n0XhIcn4sHFAZRu5Jj", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "USyZhcp7kB2mMsbRsaHDs3i52cE6srZw8KD8jZd0", "vte0gvTFGH7hPyPED46oV8TyJlyE8p6D7Q73TSx0", "ODW4jUppoG3H87YcY9GZhoGj4hX5W0w9mr24LEU8", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "di9ZSqn1Ya68Y2XpBPUV1rCtNGXh8Xe5MGWzb1Xe", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
209
209
  }];
210
210
  readonly value: true;
211
211
  }];
@@ -224,7 +224,7 @@ export declare const flagConfig: {
224
224
  readonly if_any: [{
225
225
  readonly key: "apiKey";
226
226
  readonly type: "isAnyOf";
227
- readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "Tkp90bAf246UQXfou5uHY9UHN7AUV6xK1tgEWKke", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "USyZhcp7kB2mMsbRsaHDs3i52cE6srZw8KD8jZd0", "ODW4jUppoG3H87YcY9GZhoGj4hX5W0w9mr24LEU8", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "TY2G63jFfd7H29aHiJIzg5RqdXNdog2Q5jgb8tr7", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
227
+ readonly values: ["6TUi99Tq3O9MWj1IFX8Pv6spmPXzcvhy9NvBoeW2", "clDebbfo9edXq1GydZ0CahSAfSimPj616lFa9p8e", "Tkp90bAf246UQXfou5uHY9UHN7AUV6xK1tgEWKke", "57G91zNoew4nYxIoqSCpS1vWr8JT3gGVasNqMwgG", "M3uox3cw0u8YCPV9cIREA6AugUMvPFTk6qOpm4um", "cGlmpTmNh657m8TiV5RFdwna6FG5pxM6ajiNHvw3", "USyZhcp7kB2mMsbRsaHDs3i52cE6srZw8KD8jZd0", "vte0gvTFGH7hPyPED46oV8TyJlyE8p6D7Q73TSx0", "ODW4jUppoG3H87YcY9GZhoGj4hX5W0w9mr24LEU8", "pLQBJsA6zS9tg990rbdBD6UdABkWRv5O60vlrVcW", "lUzTaIRxs95iin3pCAafB1ChA5akBiuQ1tjhXnau", "53OWivH0fK2VIAuMZTycr52EnSEnPWj97Jy3Dpiz", "AH7lRIhbsL167nptv6eub9xDJXVHnYUm2vL7FLjK", "TY2G63jFfd7H29aHiJIzg5RqdXNdog2Q5jgb8tr7", "i6e1I8cfX625TTwRJlD2DshKyAoaUtO8aeoaR4i2", "1cRIX8XoWP801OILra02i13IJ08IARBP5B6ydcnp", "2hicPxo2vy2NMHcg2cEU9crOeKtDpc14NEfMCthc", "SMbBD7DS9b3EPcyBVg4a8az1rRWR9xB068chHoUN", "Y53dikxXdT4E3afI1l8BMBSWgyhKvf65k6Dut1k6", "wQDLu86Qab61vbtru7thf8Yj0xaeqVUH4ohoXESu", "iMTsSsgDdI2FC0FjeEejS9LMxuJgDhFO3OHlwVjT", "HKHvPSPDezaxsTohFgDuG4WpKW6hB4SFYyztm9vc", "5UzOrcAE2F3rcuMX2EeIlaYv5VUcDe6Lyh0PeZX2"];
228
228
  }];
229
229
  readonly value: true;
230
230
  }, {
@@ -1,6 +1,6 @@
1
1
  import { type Address } from 'viem';
2
2
  export declare const LIGHTER_DEPOSIT_ADDRESS: Address;
3
- export declare const LIGHTER_NATIVE_FLOW_TIME_ESTIMATE_SECONDS: number;
3
+ export declare const LIGHTER_SLOW_DEPOSIT_TIME_ESTIMATE_SECONDS: number;
4
4
  export declare const LIGHTER_DELAYED_AUTO_TRIGGER_CUTOFF: number;
5
5
  export declare const LIGHTER_DYNAMIC_ROUTING_ID: {
6
6
  ETH_SPOT: string;
@@ -14,5 +14,3 @@ export declare const LIGHTER_DYNAMIC_ROUTING_ID: {
14
14
  LDO_SPOT_NEW_USER: string;
15
15
  LIT_SPOT_NEW_USER: string;
16
16
  };
17
- export declare const getLighterRoutingIdByTokenAddress: (address: Address) => string | undefined;
18
- export declare const getLighterTokenAddressByRoutingId: (id: string) => Address | undefined;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Sanitizes a CSS string for injection into a `<style>` tag.
3
+ * Prevents breakout from the style element via `</style>` injection.
4
+ * This is defense-in-depth — cssStringFromTheme already strips
5
+ * `<`, `>`, `/` from theme values.
6
+ */
7
+ export declare function sanitizeCssStyleContent(css: string): string;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Validates that a URL uses a safe protocol (http: or https:) and
3
+ * returns it, or returns undefined if the URL is invalid/unsafe.
4
+ */
5
+ export declare function sanitizeUrl(url: string | undefined | null): string | undefined;
6
+ /**
7
+ * Sanitizes a URL for use in CSS url() context by validating the protocol
8
+ * and percent-encoding characters that could break out of url('...').
9
+ */
10
+ export declare function sanitizeCssUrl(url: string | undefined | null): string | undefined;
@@ -1,2 +1,2 @@
1
1
  import type { DynamicTargetAssetCandidate } from '../providers/FunkitCheckoutContext';
2
- export declare const getTokenIconUrl: (symbol: string, tokens?: DynamicTargetAssetCandidate[]) => string | undefined;
2
+ export declare const getTokenIconUrl: (symbol: string, tokens?: DynamicTargetAssetCandidate[]) => string;