import { SyntheticEvent, FunctionComponent, Ref, RefObject } from 'react';
declare type SafeInvoke = <A extends any[]>(fn: ((...args: A) => void) | undefined, ...args: A) => void;
export declare const safeInvoke: SafeInvoke;
declare type WrapFunction = <A extends any[]>(fn: ((...args: A) => void) | undefined, wrapper: ((...args: A) => void) | undefined) => (...args: A) => void;
export declare const wrapFunction: WrapFunction;
export declare const isClickable: (e: SyntheticEvent<HTMLElement, MouseEvent>) => boolean;
export declare const createProxyProps: <P>(cb: FunctionComponent<P>) => JSX.Element;
export declare const scrollIntoView: <T extends Element, O>(target: T, options?: O | undefined) => void;
export declare class EventEmitter<H = (...args: any[]) => void> {
    listeners: {
        [type: string]: H[];
    };
    on(type: string, handler: H): void;
    emit(type: string, ...args: any[]): void;
}
export declare type FocusStrategy = {
    getNext: (container: Element, element: Element | null) => Element | null | undefined;
    getPrev: (container: Element, element: Element | null) => Element | null | undefined;
    getFirst: (container: Element) => Element | null;
    getLast: (container: Element) => Element | null;
};
declare type ElementFitForFocusChecker = (node: Element) => boolean;
export declare const createFocusManager: (containerRef: RefObject<HTMLElement>, isFitForFocus?: ElementFitForFocusChecker, strategy?: FocusStrategy) => {
    focusNext: (element?: Element | null, attempt?: number) => boolean;
    focusPrev: (element?: Element | null, attempt?: number) => boolean;
    focusFirst: (attempt?: number) => boolean;
    focusLast: (attempt?: number) => boolean;
};
export declare const mergeRefs: <T>(...refs: Ref<T | null>[]) => (value: T | null) => void;
export declare const normalizeSize: (value?: number | string) => string | number | undefined;
export {};
