import type { ReactNode } from 'react';
import type { CommonPaymentElementPropTypes } from '../../propTypes';
export type SlotPropType = {
    position?: 'top' | 'bottom';
    slot?: ReactNode;
};
export type PaymentElementThemePropTypes = {
    globalStyles?: object;
    colorMode?: 'light' | 'dark';
    components?: object;
    foundations?: object;
};
export type PaymentElementHandles = {
    submit: (paymentMethod?: string) => Promise<boolean>;
    validate: (paymentMethod?: string) => Promise<boolean>;
};
export type PopupRedirectActionType = {
    type: 'popup';
    onPopupRendered: (popupWindow: Window) => void;
    options?: {
        height?: number;
        width?: number;
        top?: number;
        left?: number;
        scrollbars?: boolean;
        resizable?: boolean;
        toolbar?: boolean;
        location?: boolean;
        menubar?: boolean;
    };
};
export type PaymentMethodFilter = 'offline_only';
export type RedirectActionType = {
    type: 'navigate';
} | {
    type: 'tab';
    onTabRendered: (tab: Window) => void;
} | PopupRedirectActionType;
export type PaymentElementPropTypes = CommonPaymentElementPropTypes & {
    apiKey: string;
    propertyId: string | number;
    theme: PaymentElementThemePropTypes;
    scopedCss?: boolean;
    env?: 'prod' | 'stage' | 'dev' | 'local';
    amount?: number;
    capture?: 'auto' | 'manual';
    currency?: string;
    labels?: object;
    slots?: object | SlotPropType | SlotPropType[];
    components?: object;
    allowedPaymentMethods?: string[];
    redirectAction?: RedirectActionType;
    onRender?: (cbs: PaymentElementHandles) => any;
    paymentMethodFilters?: PaymentMethodFilter[];
};
