/// <reference types="lodash" />
import type { CSSProperties, ComponentType } from "react";
import _ from "underscore";
declare const REFRESH_MODE: {
    throttle: (fn: () => void) => (() => void) & _.Cancelable;
    debounce: (fn: () => void) => import("lodash").DebouncedFunc<() => void>;
    debounceLeading: (fn: () => void) => import("lodash").DebouncedFuncLeading<() => void>;
    none: (fn: () => void) => () => void;
};
type RefreshMode = keyof typeof REFRESH_MODE;
interface ExplicitSizeProps<T> {
    selector?: string;
    wrapped?: boolean;
    refreshMode?: RefreshMode | ((props: T) => RefreshMode);
}
type SizeState = {
    width: number | null;
    height: number | null;
};
type BaseInnerProps = {
    className?: string;
    style?: CSSProperties;
    onUpdateSize?: () => void;
};
declare function ExplicitSize<T extends BaseInnerProps>({ selector, wrapped, refreshMode, }?: ExplicitSizeProps<T>): (ComposedComponent: ComponentType<T & SizeState>) => {
    new (props: T, context: unknown): {
        state: SizeState;
        timeoutId: ReturnType<typeof setTimeout> | null;
        _currentElement: Element | null;
        _printMediaQuery: MediaQueryList;
        _refreshMode: RefreshMode;
        _updateSize: () => void;
        _getElement(): Element | null;
        componentDidMount(): void;
        componentDidUpdate(): void;
        componentWillUnmount(): void;
        _getRefreshMode: () => "none" | "throttle" | "debounce" | "debounceLeading";
        _updateRefreshMode: () => void;
        _updateSizeAndRefreshMode: () => void;
        _initResizeObserver(): void;
        _updateResizeObserver(): void;
        _teardownResizeObserver(): void;
        _initMediaQueryListener(): void;
        _teardownQueryMediaListener(): void;
        __updateSize: () => void;
        render(): import("react/jsx-runtime").JSX.Element;
        context: unknown;
        setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<T>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<T>;
        refs: {
            [key: string]: import("react").ReactInstance;
        };
        shouldComponentUpdate?(nextProps: Readonly<T>, nextState: Readonly<{}>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: import("react").ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<T>, prevState: Readonly<{}>): any;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<T>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<T>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<T>, nextState: Readonly<{}>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<T>, nextState: Readonly<{}>, nextContext: any): void;
    };
    displayName: string;
    contextType?: import("react").Context<any> | undefined;
};
export default ExplicitSize;
