import React from 'react';
import { ShadowObserver } from './shadowObserver';
export declare const shadowClassNames: {
    RIGHT_SHADOW: string;
    LEFT_SHADOW: string;
};
export interface OverflowShadowProps {
    handleRef?: (ref: HTMLElement | null) => void;
    shadowClassNames?: string;
}
export interface OverflowShadowState {
    showLeftShadow: boolean;
    showRightShadow: boolean;
}
export interface OverflowShadowOptions {
    overflowSelector: string;
    useShadowObserver?: boolean;
}
export default function overflowShadow<P>(Component: React.ComponentType<React.PropsWithChildren<P & OverflowShadowProps>>, options: OverflowShadowOptions): {
    new (props: P | Readonly<P>): {
        overflowContainer?: HTMLElement | null | undefined;
        container?: HTMLElement | undefined;
        shadowObserver?: ShadowObserver | undefined;
        overflowContainerWidth: number;
        scrollable?: NodeList | undefined;
        diff?: number | undefined;
        state: {
            showLeftShadow: boolean;
            showRightShadow: boolean;
        };
        componentWillUnmount(): void;
        componentDidUpdate(): void;
        handleScroll: (event: Event) => void;
        updateShadows: () => void;
        showLeftShadow: (overflowContainer: HTMLElement | null | undefined) => boolean;
        calcOverflowDiff: () => number;
        calcScrollableWidth: () => number;
        handleContainer: (container: HTMLElement | null) => void;
        initShadowObserver(): void;
        render(): JSX.Element;
        context: any;
        setState<K extends keyof OverflowShadowState>(state: OverflowShadowState | ((prevState: Readonly<OverflowShadowState>, props: Readonly<P>) => OverflowShadowState | Pick<OverflowShadowState, K> | null) | Pick<OverflowShadowState, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<P> & Readonly<{
            children?: React.ReactNode;
        }>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<P>, nextState: Readonly<OverflowShadowState>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<P>, prevState: Readonly<OverflowShadowState>): any;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
    };
    new (props: P, context: any): {
        overflowContainer?: HTMLElement | null | undefined;
        container?: HTMLElement | undefined;
        shadowObserver?: ShadowObserver | undefined;
        overflowContainerWidth: number;
        scrollable?: NodeList | undefined;
        diff?: number | undefined;
        state: {
            showLeftShadow: boolean;
            showRightShadow: boolean;
        };
        componentWillUnmount(): void;
        componentDidUpdate(): void;
        handleScroll: (event: Event) => void;
        updateShadows: () => void;
        showLeftShadow: (overflowContainer: HTMLElement | null | undefined) => boolean;
        calcOverflowDiff: () => number;
        calcScrollableWidth: () => number;
        handleContainer: (container: HTMLElement | null) => void;
        initShadowObserver(): void;
        render(): JSX.Element;
        context: any;
        setState<K extends keyof OverflowShadowState>(state: OverflowShadowState | ((prevState: Readonly<OverflowShadowState>, props: Readonly<P>) => OverflowShadowState | Pick<OverflowShadowState, K> | null) | Pick<OverflowShadowState, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<P> & Readonly<{
            children?: React.ReactNode;
        }>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<P>, nextState: Readonly<OverflowShadowState>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<P>, prevState: Readonly<OverflowShadowState>): any;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
    };
    contextType?: React.Context<any> | undefined;
};
