/* MalgaCheckout custom elements bundle */

import type { Components, JSX } from "../types/components";

interface MalgaCheckout extends Components.MalgaCheckout, HTMLElement {}
export const MalgaCheckout: {
  prototype: MalgaCheckout;
  new (): MalgaCheckout;
};

interface MalgaPayments extends Components.MalgaPayments, HTMLElement {}
export const MalgaPayments: {
  prototype: MalgaPayments;
  new (): MalgaPayments;
};

interface MalgaPaymentsBoleto extends Components.MalgaPaymentsBoleto, HTMLElement {}
export const MalgaPaymentsBoleto: {
  prototype: MalgaPaymentsBoleto;
  new (): MalgaPaymentsBoleto;
};

interface MalgaPaymentsCredit extends Components.MalgaPaymentsCredit, HTMLElement {}
export const MalgaPaymentsCredit: {
  prototype: MalgaPaymentsCredit;
  new (): MalgaPaymentsCredit;
};

interface MalgaPaymentsCreditForm extends Components.MalgaPaymentsCreditForm, HTMLElement {}
export const MalgaPaymentsCreditForm: {
  prototype: MalgaPaymentsCreditForm;
  new (): MalgaPaymentsCreditForm;
};

interface MalgaPaymentsCreditSavedCards extends Components.MalgaPaymentsCreditSavedCards, HTMLElement {}
export const MalgaPaymentsCreditSavedCards: {
  prototype: MalgaPaymentsCreditSavedCards;
  new (): MalgaPaymentsCreditSavedCards;
};

interface MalgaPaymentsDrip extends Components.MalgaPaymentsDrip, HTMLElement {}
export const MalgaPaymentsDrip: {
  prototype: MalgaPaymentsDrip;
  new (): MalgaPaymentsDrip;
};

interface MalgaPaymentsDripContent extends Components.MalgaPaymentsDripContent, HTMLElement {}
export const MalgaPaymentsDripContent: {
  prototype: MalgaPaymentsDripContent;
  new (): MalgaPaymentsDripContent;
};

interface MalgaPaymentsDripIframe extends Components.MalgaPaymentsDripIframe, HTMLElement {}
export const MalgaPaymentsDripIframe: {
  prototype: MalgaPaymentsDripIframe;
  new (): MalgaPaymentsDripIframe;
};

interface MalgaPaymentsDripInstallments extends Components.MalgaPaymentsDripInstallments, HTMLElement {}
export const MalgaPaymentsDripInstallments: {
  prototype: MalgaPaymentsDripInstallments;
  new (): MalgaPaymentsDripInstallments;
};

interface MalgaPaymentsNupay extends Components.MalgaPaymentsNupay, HTMLElement {}
export const MalgaPaymentsNupay: {
  prototype: MalgaPaymentsNupay;
  new (): MalgaPaymentsNupay;
};

interface MalgaPaymentsNupayContent extends Components.MalgaPaymentsNupayContent, HTMLElement {}
export const MalgaPaymentsNupayContent: {
  prototype: MalgaPaymentsNupayContent;
  new (): MalgaPaymentsNupayContent;
};

interface MalgaPaymentsNupayIframe extends Components.MalgaPaymentsNupayIframe, HTMLElement {}
export const MalgaPaymentsNupayIframe: {
  prototype: MalgaPaymentsNupayIframe;
  new (): MalgaPaymentsNupayIframe;
};

interface MalgaPaymentsPix extends Components.MalgaPaymentsPix, HTMLElement {}
export const MalgaPaymentsPix: {
  prototype: MalgaPaymentsPix;
  new (): MalgaPaymentsPix;
};

/**
 * Utility to define all custom elements within this package using the tag name provided in the component's source. 
 * When defining each custom element, it will also check it's safe to define by:
 *
 * 1. Ensuring the "customElements" registry is available in the global context (window).
 * 2. The component tag name is not already defined.
 *
 * Use the standard [customElements.define()](https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define) 
 * method instead to define custom elements individually, or to provide a different tag name.
 */
export declare const defineCustomElements: (opts?: any) => void;

/**
 * Used to manually set the base path where assets can be found.
 * If the script is used as "module", it's recommended to use "import.meta.url",
 * such as "setAssetPath(import.meta.url)". Other options include
 * "setAssetPath(document.currentScript.src)", or using a bundler's replace plugin to
 * dynamically set the path at build time, such as "setAssetPath(process.env.ASSET_PATH)".
 * But do note that this configuration depends on how your script is bundled, or lack of
 * bunding, and where your assets can be loaded from. Additionally custom bundling
 * will have to ensure the static assets are copied to its build directory.
 */
export declare const setAssetPath: (path: string) => void;

export interface SetPlatformOptions {
  raf?: (c: FrameRequestCallback) => number;
  ael?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
  rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
  ce?: (eventName: string, opts?: any) => CustomEvent;
}
export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;

export type { Components, JSX };

export * from '../types';
