import React, { MutableRefObject, ReactNode } from "react";
export declare type IObserverOptions = {
    rootMargin?: string;
    root?: MutableRefObject<HTMLElement | null> | null;
    threshold?: number[];
};
export declare type IObserverState = Partial<ReturnType<typeof useObserverState>>;
declare type IObserverContext = IObserverState & IObserverOptions;
export declare const ObserverContext: React.Context<IObserverContext | null>;
export declare type InViewCallback = (isIntersecting: boolean, threshold: number) => void;
export declare type IInViewElement = {
    callback: InViewCallback;
    untrackOnCallback?: boolean;
    element: Element;
};
export interface IObserverContextProvider extends IObserverOptions {
    children?: ReactNode;
}
export declare const useObserverState: (props: IObserverOptions) => {
    inViewObserver: IntersectionObserver;
    registerInViewElement: (inViewElement: IInViewElement) => void;
    unregisterInViewElement: (inViewElement: IInViewElement) => void;
};
export declare const useObserverContext: () => IObserverContext;
export declare const ObserverContextProvider: React.FC<IObserverContextProvider>;
export {};
//# sourceMappingURL=observer.context.d.ts.map