import type { HTMLDOMElement } from '../../Core/Renderer/DOMElementType';
import type { CSSObject } from '../../Core/Renderer/CSSObject';
import type HTMLAttributes from '../../Core/Renderer/HTML/HTMLAttributes';
declare abstract class GUIElement {
    /**
     * Get offsets of the guiElement relative to the referenceElement or the
     * Viewport.
     *
     * @param guiElement
     * The element to get the offsets from.
     *
     * @param referenceElement
     * The element to get the offsets relative to.
     *
     * @returns
     * The offsets of the guiElement.
     */
    static getOffsets(guiElement: GUIElement, referenceElement?: HTMLDOMElement): Offset;
    /**
     * Get dimensions of the guiElement container from offsets.
     *
     * @param offsets
     * The offsets of the guiElement container.
     *
     * @returns
     * The dimensions of the guiElement container.
     */
    static getDimFromOffsets(offsets: Offset): Dimensions;
    /**
     * Based on the element provided, generate an unique id.
     *
     * @param elementType
     * Type of the element.
     *
     * @returns
     * The unique id.
     */
    static getElementId(elementType: GUIElementType): string;
    /**
     * Get width in percentages (0% - 100%).
     *
     * @param width
     * The width of the element. Supported formats '50%' or '1/2'.
     *
     * @returns
     * The width in percentages.
     */
    static getPercentageWidth(width: string): string | undefined;
    /**
     * HTML container of a GUIElement.
     */
    container?: HTMLDOMElement;
    /**
     * The type of a GUIElement instance.
     */
    protected type?: GUIElementType;
    /**
     * The function to remove bindedGUIElement
     * event on GUIElement container.
     */
    removeBindedEventFn?: Function;
    /**
     * The visibility flag.
     */
    isVisible?: boolean;
    /**
     * Create or get existing HTML element as a GUIElement container.
     *
     * @param {GetElementContainerOptions} options
     * Options.
     *
     * @returns
     * The HTML element for the element container.
     */
    protected getElementContainer(options: GetElementContainerOptions): HTMLElement;
    /**
     * Destroy the element, its container, event hooks and all properties.
     */
    protected destroy(): void;
    /**
     * Return the GUIElement instance type.
     *
     * @returns
     * The GUIElement instance type
     */
    getType(): GUIElementType | undefined;
    protected changeVisibility(setVisible?: boolean, displayStyle?: string): void;
    hide(): void;
    show(): void;
}
export interface GetElementContainerOptions {
    render?: boolean;
    parentContainer?: HTMLDOMElement;
    attribs?: HTMLAttributes;
    style?: CSSObject;
    element?: HTMLElement;
    elementId?: string;
}
export interface BindedGUIElementEvent extends Event {
    guiElement: GUIElement;
}
export type GUIElementType = 'row' | 'cell' | 'layout' | 'cell-html' | 'col-nested' | 'col';
export interface Offset {
    left: number;
    top: number;
    right: number;
    bottom: number;
}
export interface Dimensions {
    width: number;
    height: number;
}
export default GUIElement;
