import type { JSX } from 'preact';
import type { Core } from './core';
import { EventEmitter } from './EventEmitter';
export interface BaseElementProps {
    _parentInstance?: Core;
}
export declare abstract class BaseElement<P extends BaseElementProps> {
    readonly _id: string;
    props: P;
    _node?: HTMLElement;
    _component?: JSX.Element;
    eventEmitter: EventEmitter;
    private readonly _parentInstance?;
    constructor(props: P);
    abstract render(): JSX.Element;
    /**
     * Mounts an element into the dom
     * @param domNode - Node (or selector) where we will mount the payment element
     * @returns this - the payment element instance we mounted
     */
    mount(domNode: HTMLElement | string): this;
    /**
     * Updates props, resets the internal state and remounts the element.
     * @param props - props to update
     * @returns this - the element instance
     */
    update(props: Partial<P>): this;
    updateLocale({ locale }: {
        locale: string;
    }): void;
    updateExpiry({ expiry }: {
        expiry?: number;
    }): void;
    /**
     * Unmounts an element and mounts it again on the same node
     */
    remount(): this;
    /**
     * Unmounts a payment element from the DOM
     */
    unmount(): this;
    /**
     * Unmounts an element and removes it from the parent instance
     */
    remove(): void;
}
