import type CSSObject from '../../Core/Renderer/CSSObject';
/**
 * The event object for the grid.
 */
export interface GridEvent<T, E extends Event = Event> {
    /**
     * The original browser event.
     */
    originalEvent?: E;
    /**
     * The target of the event.
     */
    target: T;
}
/**
 * The event listener for the grid.
 */
export interface GridEventListener {
    eventName: keyof HTMLElementEventMap;
    listener: EventListener;
}
/**
 * Parameters for the makeHTMLElement utils function.
 */
export interface MakeHTMLElementParameters {
    className?: string;
    id?: string;
    innerText?: string;
    innerHTML?: string;
    style?: Partial<CSSStyleDeclaration>;
}
/**
 * A style object or callback returning one.
 */
export type StyleValue<T> = CSSObject | ((this: T, target: T) => CSSObject);
/**
 * Creates a HTML element with the provided options.
 *
 * @param tagName
 * The tag name of the element.
 *
 * @param params
 * The parameters of the element.
 *
 * @param parent
 * The parent element.
 */
export declare function makeHTMLElement<T extends HTMLElement>(tagName: string, params?: MakeHTMLElementParameters, parent?: HTMLElement): T;
/**
 * Creates a div element with the provided class name and id.
 *
 * @param className
 * The class name of the div.
 *
 * @param id
 * The id of the element.
 */
export declare function makeDiv(className: string, id?: string): HTMLElement;
/**
 * Measures the horizontal paddings and borders of an element.
 *
 * @param el
 * The element to measure.
 *
 * @returns
 * The overhead in pixels.
 */
export declare function measureWidthOverhead(el?: HTMLElement): number;
/**
 * Check if there's a possibility that the given string is an HTML
 * (contains '<').
 *
 * @param str
 * Text to verify.
 */
export declare function isHTML(str: string): boolean;
/**
 * Returns a string containing plain text format by removing HTML tags
 *
 * @param text
 * String to be sanitized
 *
 * @returns
 * Sanitized plain text string
 */
export declare function sanitizeText(text: string): string;
/**
 * Sets an element's content, checking whether it is HTML or plain text.
 * Should be used instead of element.innerText when the content can be HTML.
 *
 * @param element
 * Parent element where the content should be.
 *
 * @param content
 * Content to render.
 */
export declare function setHTMLContent(element: HTMLElement, content: string): void;
/**
 * Creates a proxy that, when reading a property, first returns the value
 * from the original options of a given entity; if it is not defined, it
 * falls back to the value from the defaults (default options), recursively
 * for nested objects. Setting values on the proxy will change the original
 * options object (1st argument), not the defaults (2nd argument).
 *
 * @param options
 * The specific options object.
 *
 * @param defaultOptions
 * The default options to fall back to.
 *
 * @returns
 * A proxy that provides merged access to options and defaults.
 */
export declare function createOptionsProxy<T extends object>(options: T, defaultOptions?: Partial<T>): T;
/**
 * Format text with placeholders. Used for lang texts.
 *
 * @param template The text template with placeholders
 * @param values Object containing values to replace placeholders
 * @returns Formatted text
 */
export declare function formatText(template: string, values: Record<string, string | number>): string;
/**
 * Joins class name parts into a single space-separated string.
 *
 * @param parts
 * Class name parts to join.
 *
 * @returns
 * A space-separated class name string.
 */
export declare function joinClassNames(...parts: Array<(string | undefined | null | false)>): string;
/**
 * Replaces previously applied user class tokens on an element without touching
 * other classes (e.g. Core `hcg-*` tokens).
 *
 * @param element
 * The element to update.
 *
 * @param previous
 * Previously applied user class name string.
 *
 * @param next
 * New user class name string.
 *
 * @returns
 * The class name string that was applied, or `undefined` when cleared.
 */
export declare function applyUserClassNames(element: Element, previous?: string, next?: string): (string | undefined);
/**
 * Checks whether two objects have the same own keys and values.
 *
 * Supports nested plain objects and arrays. Functions are compared by
 * reference.
 *
 * @param left
 * The first object to compare.
 *
 * @param right
 * The second object to compare.
 *
 * @returns
 * `true` when both objects are equal, otherwise `false`.
 */
export declare function isDeepEqual(left: unknown, right: unknown): boolean;
/**
 * Resolves a style value that can be static or callback based.
 *
 * @param style
 * Style object or callback returning one.
 *
 * @param target
 * Runtime target used as callback context and first argument.
 *
 * @returns
 * A resolved style object or `undefined`.
 */
export declare function resolveStyleValue<T>(style?: StyleValue<T>, target?: T): (CSSObject | undefined);
/**
 * Resolves and merges style values in order.
 *
 * @param target
 * Runtime target used as callback context and first argument.
 *
 * @param styleValues
 * Style values to merge in order, where latter entries override former.
 *
 * @returns
 * Merged style object.
 */
export declare function mergeStyleValues<T>(target: T, ...styleValues: Array<(StyleValue<T> | undefined)>): CSSObject;
/**
 * Waits for the next animation frame.
 */
export declare function waitForAnimationFrame(): Promise<void>;
declare const _default: {
    readonly makeHTMLElement: typeof makeHTMLElement;
    readonly makeDiv: typeof makeDiv;
    readonly measureWidthOverhead: typeof measureWidthOverhead;
    readonly isHTML: typeof isHTML;
    readonly sanitizeText: typeof sanitizeText;
    readonly setHTMLContent: typeof setHTMLContent;
    readonly createOptionsProxy: typeof createOptionsProxy;
    readonly formatText: typeof formatText;
    readonly joinClassNames: typeof joinClassNames;
    readonly applyUserClassNames: typeof applyUserClassNames;
    readonly isDeepEqual: typeof isDeepEqual;
    readonly resolveStyleValue: typeof resolveStyleValue;
    readonly mergeStyleValues: typeof mergeStyleValues;
    readonly waitForAnimationFrame: typeof waitForAnimationFrame;
};
export default _default;
