import { UiComponentConfig } from "../generated/UiComponentConfig";
import { UiPageDisplayMode } from "../generated/UiPageDisplayMode";
import { UiTemplateConfig } from "../generated/UiTemplateConfig";
import { UiComponent } from "./UiComponent";
import { UiPageTransition } from "../generated/UiPageTransition";
export declare type RenderingFunction = (data: any) => string;
export declare type Renderer = {
    render: RenderingFunction;
    template: UiTemplateConfig;
};
export declare class Constants {
    private static _SCROLLBAR_WIDTH;
    static ENTRANCE_ANIMATION_CSS_CLASSES: {
        0: string;
        1: string;
        2: string;
        3: string;
        4: string;
        5: string;
        6: string;
        7: string;
        8: string;
        9: string;
        10: string;
        11: string;
        12: string;
        13: string;
        14: string;
        15: string;
        16: string;
        17: string;
        18: string;
        19: string;
        20: string;
        21: string;
        22: string;
        23: string;
        24: string;
        25: string;
        26: string;
        27: string;
        28: string;
        29: string;
        30: string;
        31: string;
        32: string;
        33: string;
        34: string;
        35: string;
        36: string;
        37: string;
        38: string;
        39: string;
        40: string;
        41: string;
    };
    static EXIT_ANIMATION_CSS_CLASSES: {
        0: string;
        1: string;
        2: string;
        3: string;
        4: string;
        5: string;
        6: string;
        7: string;
        8: string;
        9: string;
        10: string;
        11: string;
        12: string;
        13: string;
        14: string;
        15: string;
        16: string;
        17: string;
        18: string;
        19: string;
        20: string;
        21: string;
        22: string;
        23: string;
        24: string;
        25: string;
        26: string;
        27: string;
        28: string;
        29: string;
        30: string;
        31: string;
        32: string;
        33: string;
        34: string;
        35: string;
        36: string;
        37: string;
        38: string;
        39: string;
        40: string;
        41: string;
    };
    static REPEATABLE_ANIMATION_CSS_CLASSES: {
        0: string;
        1: string;
        2: string;
        3: string;
        4: string;
        5: string;
        6: string;
        7: string;
        8: string;
        9: string;
        10: string;
        11: string;
        12: string;
        13: string;
        14: string;
    };
    static POINTER_EVENTS: {
        start: string;
        move: string;
        end: string;
    };
    static get SCROLLBAR_WIDTH(): number;
    private static calculateScrollbarWidth;
}
export declare function getAutoCompleteOffValue(): string;
export declare function hasVerticalScrollBar(element: HTMLElement): boolean;
export declare function loadScriptAsynchronously(url: string, callback?: EventListener): void;
export interface ClickOutsideHandle {
    cancel: () => void;
}
export declare function doOnceOnClickOutsideElement(elements: Element | NodeList | Element[], handler: (e?: MouseEvent) => any, useCapture?: boolean): ClickOutsideHandle;
export declare type TreeEntry = any & {
    __children?: TreeEntry[];
    _isFreeTextEntry?: boolean;
};
export declare function buildTreeEntryHierarchy(entryList: any[], idPropertyName: string, parentIdPropertyName: string): TreeEntry[];
export declare type NodeWithChildren<T> = T & {
    __children?: NodeWithChildren<T>[];
};
export declare function buildObjectTree<T extends object>(nodes: T[], idPropertyName: string, parentIdPropertyName: string): NodeWithChildren<T>[];
export declare function humanReadableFileSize(bytes: number, decimalK?: boolean): string;
export declare function generateUUID(startingWithCharacter?: boolean): string;
export declare function formatNumber(number: number, precision: number, decimalSeparator: string, thousandsSeparator: string): string;
export declare function formatDecimalNumber(integerNumber: number, precision: number, decimalSeparator: string, thousandsSeparator: string): string;
export declare function applyDisplayMode($outer: HTMLElement, $inner: HTMLElement, displayMode: UiPageDisplayMode | any, options?: {
    innerPreferredDimensions?: {
        width: number;
        height: number;
    };
    zoomFactor?: number;
    padding?: number;
    considerScrollbars?: boolean;
}): void;
export declare function calculateDisplayModeInnerSize(containerDimensions: {
    width: number;
    height: number;
}, innerPreferredDimensions: {
    width: number;
    height: number;
}, displayMode: UiPageDisplayMode | any, zoomFactor?: number, considerScrollbars?: boolean): {
    width: number;
    height: number;
};
export declare type Direction = "n" | "e" | "s" | "w" | "ne" | "se" | "nw" | "sw";
export declare function boundSelection(selection: {
    left: number;
    top: number;
    width: number;
    height: number;
}, bounds: {
    width: number;
    height: number;
}, aspectRatio?: number, fixedAt?: Direction): {
    left: number;
    top: number;
    width: number;
    height: number;
};
export declare function enterFullScreen(component: UiComponent<UiComponentConfig>): void;
export declare function isFullScreen(): boolean;
export declare function exitFullScreen(): void;
export declare function positionDropDown($button: Element, $dropDown: HTMLElement, { viewPortPadding, minHeightBeforeFlipping }: {
    viewPortPadding?: number;
    minHeightBeforeFlipping?: number;
}): void;
export declare function manipulateWithoutTransitions($element: HTMLElement, action: Function, transitionEnabled?: boolean): void;
export declare function focusNextByTabIndex(navigatableElements: HTMLElement[], navDirection: -1 | 1): boolean;
export declare function escapeHtml(string: string): string;
export declare function capitalizeFirstLetter(string: string): string;
export declare function logException(e: any, additionalString?: string): void;
export declare function stableSort<T>(arr: T[], cmpFunc: (a: T, b: T) => number): T[];
export declare function getMicrosoftBrowserVersion(): number | false;
export declare function enableScrollViaDragAndDrop($scrollContainer: HTMLElement): void;
export declare function arraysEqual(a: any[], b: any[]): boolean;
export declare function deepEquals(x: any, y: any): boolean;
export declare function insertAtIndex($parent: Element, $child: Element, index: number): void;
export declare function maximizeComponent(component: UiComponent, maximizeAnimationCallback?: () => void): (restoreAnimationCallback?: () => void) => void;
export declare function removeTags(value: string, ...tagNames: string[]): string;
export declare function removeDangerousTags(value: string): string;
export declare function selectElementContents(domElement: Node, start?: number, end?: number): void;
export declare function parseHtml<E extends HTMLElement>(htmlString: string): E;
export declare function parseSvg<E extends Element>(htmlString: string): E;
export declare function elementIndex(node: Element): number;
export declare function prependChild(parent: Node, child: Node): void;
export declare function insertBefore(newNode: Node, referenceNode: Node): void;
export declare function insertAfter(newNode: Node, referenceNode: Node): void;
export declare function outerWidthIncludingMargins(el: HTMLElement): number;
export declare function outerHeightIncludingMargins(el: HTMLElement): number;
export declare function addDelegatedEventListener<K extends keyof HTMLElementEventMap>(rootElement: HTMLElement, selector: string, eventTypes: K | K[], listener: (element: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
export declare function closestAncestor(el: HTMLElement, selector: string, includeSelf?: boolean, $root?: Element): HTMLElement;
export declare function closestAncestorMatching(el: Element, predicate: (ancestor: Element) => boolean, includeSelf?: boolean): Element;
export declare function isDescendantOf(child: Element, potentialAncestor: Element, includeSelf?: boolean): ParentNode;
export declare function createImageThumbnailUrl(file: File): Promise<string>;
export declare function removeClassesByFunction(classList: DOMTokenList, deleteDecider: (className: string) => boolean): void;
export declare function findClassesByFunction(classList: DOMTokenList, matcher: (className: string) => boolean): string[];
export declare function animateCSS(el: HTMLElement, animationCssClasses: string, animationDuration?: number, callback?: () => any): void;
export declare function fadeOut(el: HTMLElement): void;
export declare function fadeIn(el: HTMLElement): void;
export declare var pageTransitionAnimationPairs: {
    moveToLeftVsMoveFromRight: {
        outClass: string[];
        inClass: string[];
    };
    moveToRightVsMoveFromLeft: {
        outClass: string[];
        inClass: string[];
    };
    moveToTopVsMoveFromBottom: {
        outClass: string[];
        inClass: string[];
    };
    moveToBottomVsMoveFromTop: {
        outClass: string[];
        inClass: string[];
    };
    fadeVsMoveFromRight: {
        outClass: string[];
        inClass: string[];
    };
    fadeVsMoveFromLeft: {
        outClass: string[];
        inClass: string[];
    };
    fadeVsMoveFromBottom: {
        outClass: string[];
        inClass: string[];
    };
    fadeVsMoveFromTop: {
        outClass: string[];
        inClass: string[];
    };
    moveToLeftFadeVsMoveFromRightFade: {
        outClass: string[];
        inClass: string[];
    };
    moveToRightFadeVsMoveFromLeftFade: {
        outClass: string[];
        inClass: string[];
    };
    moveToTopFadeVsMoveFromBottomFade: {
        outClass: string[];
        inClass: string[];
    };
    moveToBottomFadeVsMoveFromTopFade: {
        outClass: string[];
        inClass: string[];
    };
    scaleDownVsMoveFromRight: {
        outClass: string[];
        inClass: string[];
    };
    scaleDownVsMoveFromLeft: {
        outClass: string[];
        inClass: string[];
    };
    scaleDownVsMoveFromBottom: {
        outClass: string[];
        inClass: string[];
    };
    scaleDownVsMoveFromTop: {
        outClass: string[];
        inClass: string[];
    };
    scaleDownVsScaleUpDown: {
        outClass: string[];
        inClass: string[];
    };
    scaleDownUpVsScaleUp: {
        outClass: string[];
        inClass: string[];
    };
    moveToLeftVsScaleUp: {
        outClass: string[];
        inClass: string[];
    };
    moveToRightVsScaleUp: {
        outClass: string[];
        inClass: string[];
    };
    moveToTopVsScaleUp: {
        outClass: string[];
        inClass: string[];
    };
    moveToBottomVsScaleUp: {
        outClass: string[];
        inClass: string[];
    };
    scaleDownCenterVsScaleUpCenter: {
        outClass: string[];
        inClass: string[];
    };
    rotateRightSideFirstVsMoveFromRight: {
        outClass: string[];
        inClass: string[];
    };
    rotateLeftSideFirstVsMoveFromLeft: {
        outClass: string[];
        inClass: string[];
    };
    rotateTopSideFirstVsMoveFromTop: {
        outClass: string[];
        inClass: string[];
    };
    rotateBottomSideFirstVsMoveFromBottom: {
        outClass: string[];
        inClass: string[];
    };
    flipOutRightVsFlipInLeft: {
        outClass: string[];
        inClass: string[];
    };
    flipOutLeftVsFlipInRight: {
        outClass: string[];
        inClass: string[];
    };
    flipOutTopVsFlipInBottom: {
        outClass: string[];
        inClass: string[];
    };
    flipOutBottomVsFlipInTop: {
        outClass: string[];
        inClass: string[];
    };
    rotateFallVsScaleUp: {
        outClass: string[];
        inClass: string[];
    };
    rotateOutNewspaperVsRotateInNewspaper: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushLeftVsMoveFromRight: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushRightVsMoveFromLeft: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushTopVsMoveFromBottom: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushBottomVsMoveFromTop: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushLeftVsRotatePullRight: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushRightVsRotatePullLeft: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushTopVsRotatePullBottom: {
        outClass: string[];
        inClass: string[];
    };
    rotatePushBottomVsRotatePullTop: {
        outClass: string[];
        inClass: string[];
    };
    rotateFoldLeftVsMoveFromRightFade: {
        outClass: string[];
        inClass: string[];
    };
    rotateFoldRightVsMoveFromLeftFade: {
        outClass: string[];
        inClass: string[];
    };
    rotateFoldTopVsMoveFromBottomFade: {
        outClass: string[];
        inClass: string[];
    };
    rotateFoldBottomVsMoveFromTopFade: {
        outClass: string[];
        inClass: string[];
    };
    moveToRightFadeVsRotateUnfoldLeft: {
        outClass: string[];
        inClass: string[];
    };
    moveToLeftFadeVsRotateUnfoldRight: {
        outClass: string[];
        inClass: string[];
    };
    moveToBottomFadeVsRotateUnfoldTop: {
        outClass: string[];
        inClass: string[];
    };
    moveToTopFadeVsRotateUnfoldBottom: {
        outClass: string[];
        inClass: string[];
    };
    rotateRoomLeftOutVsRotateRoomLeftIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateRoomRightOutVsRotateRoomRightIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateRoomTopOutVsRotateRoomTopIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateRoomBottomOutVsRotateRoomBottomIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCubeLeftOutVsRotateCubeLeftIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCubeRightOutVsRotateCubeRightIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCubeTopOutVsRotateCubeTopIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCubeBottomOutVsRotateCubeBottomIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCarouselLeftOutVsRotateCarouselLeftIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCarouselRightOutVsRotateCarouselRightIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCarouselTopOutVsRotateCarouselTopIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateCarouselBottomOutVsRotateCarouselBottomIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateSidesOutVsRotateSidesIn: {
        outClass: string[];
        inClass: string[];
    };
    rotateSlideOutVsRotateSlideIn: {
        outClass: string[];
        inClass: string[];
    };
};
export declare function animatePageTransition(outEl: HTMLElement, inEl: HTMLElement, animationName: keyof typeof pageTransitionAnimationPairs, animationDuration?: number, callback?: () => any): void;
export declare function pageTransition(outEl: HTMLElement, inEl: HTMLElement, pageTransition: UiPageTransition, animationDuration?: number, callback?: () => any): void;
export declare function toggleElementCollapsed($element: HTMLElement, collapsed: boolean, animationDuration?: number, hiddenClass?: string, completeHandler?: () => any): void;
export declare function animateCollapse(element: HTMLElement, collapsed: boolean, duration: number, onTransitionEnd?: () => void): void;
export declare function css(el: HTMLElement, values: object): void;
export declare function getLastPointerCoordinates(): [number, number];
export declare function insertAtCursorPosition(input: HTMLInputElement | HTMLTextAreaElement, text: string): void;
export declare function isVisibleColor(c: string): boolean;
export declare function createUiLocation(): {
    href: string;
    origin: string;
    protocol: string;
    host: string;
    hostname: string;
    port: number;
    pathname: string;
    search: string;
    hash: string;
};
export declare function stopEventPropagations(element: HTMLElement, ...eventNames: string[]): void;
