import React from 'react';
import { ShadowObserver } from './shadowObserver';
export declare const shadowClassNames: {
    RIGHT_SHADOW: string;
    LEFT_SHADOW: string;
};
export interface OverflowShadowProps {
    disableTableOverflowShadow?: boolean;
    handleRef?: (ref: HTMLElement | null) => void;
    shadowClassNames?: string;
    tabIndex?: number;
}
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 & OverflowShadowProps): {
        overflowContainer?: HTMLElement | null;
        container?: HTMLElement;
        shadowObserver?: ShadowObserver;
        overflowContainerWidth: number;
        scrollable?: NodeList;
        diff?: number;
        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(): React.JSX.Element;
        context: unknown;
        setState<K extends keyof OverflowShadowState>(state: OverflowShadowState | ((prevState: Readonly<OverflowShadowState>, props: Readonly<P & OverflowShadowProps>) => OverflowShadowState | Pick<OverflowShadowState, K> | null) | Pick<OverflowShadowState, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<P & OverflowShadowProps>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<P & OverflowShadowProps>, nextState: Readonly<OverflowShadowState>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<P & OverflowShadowProps>, prevState: Readonly<OverflowShadowState>): any;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<P & OverflowShadowProps>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P & OverflowShadowProps>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<P & OverflowShadowProps>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<P & OverflowShadowProps>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
    };
    new (props: P & OverflowShadowProps, context: any): {
        overflowContainer?: HTMLElement | null;
        container?: HTMLElement;
        shadowObserver?: ShadowObserver;
        overflowContainerWidth: number;
        scrollable?: NodeList;
        diff?: number;
        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(): React.JSX.Element;
        context: unknown;
        setState<K extends keyof OverflowShadowState>(state: OverflowShadowState | ((prevState: Readonly<OverflowShadowState>, props: Readonly<P & OverflowShadowProps>) => OverflowShadowState | Pick<OverflowShadowState, K> | null) | Pick<OverflowShadowState, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<P & OverflowShadowProps>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<P & OverflowShadowProps>, nextState: Readonly<OverflowShadowState>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<P & OverflowShadowProps>, prevState: Readonly<OverflowShadowState>): any;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<P & OverflowShadowProps>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P & OverflowShadowProps>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<P & OverflowShadowProps>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<P & OverflowShadowProps>, nextState: Readonly<OverflowShadowState>, nextContext: any): void;
    };
    contextType?: React.Context<any> | undefined;
};
