import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { ComputedRef } from 'vue';
import { DefineComponent } from 'vue';
import { PublicProps } from 'vue';
import { Ref } from 'vue';
import { Stripe } from '@stripe/stripe-js';
import { StripeAddressElement } from '@stripe/stripe-js';
import { StripeAddressElementOptions } from '@stripe/stripe-js';
import { StripeAffirmMessageElement } from '@stripe/stripe-js';
import { StripeAffirmMessageElementOptions } from '@stripe/stripe-js';
import { StripeAfterpayClearpayMessageElement } from '@stripe/stripe-js';
import { StripeAfterpayClearpayMessageElementOptions } from '@stripe/stripe-js';
import { StripeAuBankAccountElement } from '@stripe/stripe-js';
import { StripeAuBankAccountElementOptions } from '@stripe/stripe-js';
import { StripeCardCvcElement } from '@stripe/stripe-js';
import { StripeCardCvcElementOptions } from '@stripe/stripe-js';
import { StripeCardElement } from '@stripe/stripe-js';
import { StripeCardElementOptions } from '@stripe/stripe-js';
import { StripeCardExpiryElement } from '@stripe/stripe-js';
import { StripeCardExpiryElementOptions } from '@stripe/stripe-js';
import { StripeCardNumberElement } from '@stripe/stripe-js';
import { StripeCardNumberElementOptions } from '@stripe/stripe-js';
import { StripeConstructorOptions } from '@stripe/stripe-js';
import { StripeCurrencySelectorElement } from '@stripe/stripe-js';
import { StripeElements as StripeElements_2 } from '@stripe/stripe-js';
import { StripeElementsOptions } from '@stripe/stripe-js';
import { StripeElementType } from '@stripe/stripe-js';
import { StripeEpsBankElement } from '@stripe/stripe-js';
import { StripeEpsBankElementOptions } from '@stripe/stripe-js';
import { StripeExpressCheckoutElement } from '@stripe/stripe-js';
import { StripeExpressCheckoutElementOptions } from '@stripe/stripe-js';
import { StripeFpxBankElement } from '@stripe/stripe-js';
import { StripeFpxBankElementOptions } from '@stripe/stripe-js';
import { StripeIbanElement } from '@stripe/stripe-js';
import { StripeIbanElementOptions } from '@stripe/stripe-js';
import { StripeIdealBankElement } from '@stripe/stripe-js';
import { StripeIdealBankElementOptions } from '@stripe/stripe-js';
import { StripeIssuingCardCopyButtonElement } from '@stripe/stripe-js';
import { StripeIssuingCardCopyButtonElementOptions } from '@stripe/stripe-js';
import { StripeIssuingCardCvcDisplayElement } from '@stripe/stripe-js';
import { StripeIssuingCardCvcDisplayElementOptions } from '@stripe/stripe-js';
import { StripeIssuingCardExpiryDisplayElement } from '@stripe/stripe-js';
import { StripeIssuingCardExpiryDisplayElementOptions } from '@stripe/stripe-js';
import { StripeIssuingCardNumberDisplayElement } from '@stripe/stripe-js';
import { StripeIssuingCardNumberDisplayElementOptions } from '@stripe/stripe-js';
import { StripeIssuingCardPinDisplayElement } from '@stripe/stripe-js';
import { StripeIssuingCardPinDisplayElementOptions } from '@stripe/stripe-js';
import { StripeLinkAuthenticationElement } from '@stripe/stripe-js';
import { StripeP24BankElement } from '@stripe/stripe-js';
import { StripeP24BankElementOptions } from '@stripe/stripe-js';
import { StripePaymentElement } from '@stripe/stripe-js';
import { StripePaymentElementOptions } from '@stripe/stripe-js';
import { StripePaymentMethodMessagingElement } from '@stripe/stripe-js';
import { StripePaymentMethodMessagingElementOptions } from '@stripe/stripe-js';
import { StripePaymentRequestButtonElement } from '@stripe/stripe-js';
import { StripePaymentRequestButtonElementOptions } from '@stripe/stripe-js';
import { StripeShippingAddressElement } from '@stripe/stripe-js';
import { StripeShippingAddressElementOptions } from '@stripe/stripe-js';

declare const __VLS_component: DefineComponent<__VLS_Props, {
elements: Ref<StripeElements_2 | undefined, StripeElements_2 | undefined>;
instance: Ref<Stripe | undefined, Stripe | undefined>;
elementsUsable: ComputedRef<boolean>;
}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;

declare type __VLS_Props = {
    stripeKey: string;
    instanceOptions?: StripeConstructorOptions;
    elementsOptions?: StripeElementsOptions;
};

declare function __VLS_template(): {
    attrs: Partial<{}>;
    slots: {
        default?(_: {
            instance: Stripe | undefined;
            elements: StripeElements_2 | undefined;
        }): any;
    };
    refs: {};
    rootEl: any;
};

declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;

declare type __VLS_WithTemplateSlots<T, S> = T & {
    new (): {
        $slots: S;
    };
};

export declare const createElement: <T extends StripeElementType>(elements: StripeElements_2, elementType: T, options?: StripeElementOptionsMap[T]) => StripeElementMap[T] | undefined;

export declare const createElements: (instance?: Stripe, options?: StripeElementsOptions) => StripeElements_2 | undefined;

export declare const initStripe: (publishableKey: string, options?: StripeConstructorOptions) => Stripe | undefined;

export declare const StripeElement: DefineComponent<    {
type?: StripeElementType;
elements?: StripeElements_2;
options?: StripeElementOptions;
}, {
stripeElement: Ref<StripeAddressElement | StripeAffirmMessageElement | StripeAfterpayClearpayMessageElement | StripeAuBankAccountElement | StripeCardElement | StripeCardCvcElement | StripeCardExpiryElement | StripeCardNumberElement | StripeCurrencySelectorElement | StripeEpsBankElement | StripeExpressCheckoutElement | StripeFpxBankElement | StripeIbanElement | StripeIdealBankElement | StripeIssuingCardCopyButtonElement | StripeIssuingCardCvcDisplayElement | StripeIssuingCardExpiryDisplayElement | StripeIssuingCardNumberDisplayElement | StripeIssuingCardPinDisplayElement | StripeLinkAuthenticationElement | StripeP24BankElement | StripePaymentElement | StripePaymentMethodMessagingElement | StripePaymentRequestButtonElement | StripeShippingAddressElement | undefined, StripeAddressElement | StripeAffirmMessageElement | StripeAfterpayClearpayMessageElement | StripeAuBankAccountElement | StripeCardElement | StripeCardCvcElement | StripeCardExpiryElement | StripeCardNumberElement | StripeCurrencySelectorElement | StripeEpsBankElement | StripeExpressCheckoutElement | StripeFpxBankElement | StripeIbanElement | StripeIdealBankElement | StripeIssuingCardCopyButtonElement | StripeIssuingCardCvcDisplayElement | StripeIssuingCardExpiryDisplayElement | StripeIssuingCardNumberDisplayElement | StripeIssuingCardPinDisplayElement | StripeLinkAuthenticationElement | StripeP24BankElement | StripePaymentElement | StripePaymentMethodMessagingElement | StripePaymentRequestButtonElement | StripeShippingAddressElement | undefined>;
domElement: Ref<HTMLDivElement, HTMLDivElement>;
mountPoint: Ref<HTMLDivElement | undefined, HTMLDivElement | undefined>;
}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{
type?: StripeElementType;
elements?: StripeElements_2;
options?: StripeElementOptions;
}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
mountPoint: HTMLDivElement;
}, HTMLDivElement>;

declare type StripeElementMap = {
    address: StripeAddressElement;
    affirmMessage: StripeAffirmMessageElement;
    afterpayClearpayMessage: StripeAfterpayClearpayMessageElement;
    auBankAccount: StripeAuBankAccountElement;
    card: StripeCardElement;
    cardCvc: StripeCardCvcElement;
    cardExpiry: StripeCardExpiryElement;
    cardNumber: StripeCardNumberElement;
    currencySelector: StripeCurrencySelectorElement;
    epsBank: StripeEpsBankElement;
    expressCheckout: StripeExpressCheckoutElement;
    fpxBank: StripeFpxBankElement;
    iban: StripeIbanElement;
    idealBank: StripeIdealBankElement;
    issuingCardCopyButton: StripeIssuingCardCopyButtonElement;
    issuingCardCvcDisplay: StripeIssuingCardCvcDisplayElement;
    issuingCardExpiryDisplay: StripeIssuingCardExpiryDisplayElement;
    issuingCardNumberDisplay: StripeIssuingCardNumberDisplayElement;
    issuingCardPinDisplay: StripeIssuingCardPinDisplayElement;
    linkAuthentication: StripeLinkAuthenticationElement;
    p24Bank: StripeP24BankElement;
    payment: StripePaymentElement;
    paymentMethodMessaging: StripePaymentMethodMessagingElement;
    paymentRequestButton: StripePaymentRequestButtonElement;
    shippingAddress: StripeShippingAddressElement;
};

declare type StripeElementOptions = StripeAddressElementOptions | StripeAffirmMessageElementOptions | StripeAfterpayClearpayMessageElementOptions | StripeAuBankAccountElementOptions | StripeCardCvcElementOptions | StripeCardElementOptions | StripeCardExpiryElementOptions | StripeCardNumberElementOptions | StripeEpsBankElementOptions | StripeExpressCheckoutElementOptions | StripeFpxBankElementOptions | StripeIbanElementOptions | StripeIdealBankElementOptions | StripeIssuingCardCopyButtonElementOptions | StripeIssuingCardCvcDisplayElementOptions | StripeIssuingCardExpiryDisplayElementOptions | StripeIssuingCardNumberDisplayElementOptions | StripeIssuingCardPinDisplayElementOptions | StripeP24BankElementOptions | StripePaymentElementOptions | StripePaymentMethodMessagingElementOptions | StripePaymentRequestButtonElementOptions | StripeShippingAddressElementOptions;

declare type StripeElementOptionsMap = {
    address: StripeAddressElementOptions;
    affirmMessage: StripeAffirmMessageElementOptions;
    afterpayClearpayMessage: StripeAfterpayClearpayMessageElementOptions;
    auBankAccount: StripeAuBankAccountElementOptions;
    card: StripeCardElementOptions;
    cardCvc: StripeCardCvcElementOptions;
    cardExpiry: StripeCardExpiryElementOptions;
    cardNumber: StripeCardNumberElementOptions;
    currencySelector?: undefined;
    epsBank: StripeEpsBankElementOptions;
    expressCheckout: StripeExpressCheckoutElementOptions;
    fpxBank: StripeFpxBankElementOptions;
    iban: StripeIbanElementOptions;
    idealBank: StripeIdealBankElementOptions;
    issuingCardCopyButton: StripeIssuingCardCopyButtonElementOptions;
    issuingCardCvcDisplay: StripeIssuingCardCvcDisplayElementOptions;
    issuingCardExpiryDisplay: StripeIssuingCardExpiryDisplayElementOptions;
    issuingCardNumberDisplay: StripeIssuingCardNumberDisplayElementOptions;
    issuingCardPinDisplay: StripeIssuingCardPinDisplayElementOptions;
    linkAuthentication?: undefined;
    p24Bank: StripeP24BankElementOptions;
    payment: StripePaymentElementOptions;
    paymentMethodMessaging: StripePaymentMethodMessagingElementOptions;
    paymentRequestButton: StripePaymentRequestButtonElementOptions;
    shippingAddress: StripeShippingAddressElementOptions;
};

export declare const StripeElements: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;

export { }
