/**
 * Utility function that mocks the `IntersectionObserver` API. Necessary for components that rely
 * on it, otherwise the tests will crash. Recommended to execute inside `beforeEach`.
 * @param intersectionObserverMock - Parameter that is sent to the `Object.defineProperty`
 * overwrite method. `jest.fn()` mock functions can be passed here if the goal is to not only
 * mock the intersection observer, but its methods.
 * You can manually fire an intersection entry:
 * @example
 *
 * ```
 * let fireIo;
 * setupIntersectionObserverMock({
 *   observe: function () {
 *     fireIo = this.cb;
 *   },
 * });
 * ...
 * fireIo([{ isIntersecting: true, target: yourMockElemenet }]);
 * ```
 */
export declare function setupIntersectionObserverMock({ root, rootMargin, thresholds, disconnect, observe, takeRecords, unobserve, }?: {
    root?: any;
    rootMargin?: string;
    thresholds?: any[];
    disconnect?: () => any;
    observe?: (_element: Element) => any;
    takeRecords?: () => any[];
    unobserve?: () => any;
}): {
    new (fn: any): {
        readonly root: Element | null;
        readonly rootMargin: string;
        readonly thresholds: ReadonlyArray<number>;
        disconnect: () => void;
        observe: (target: Element) => void;
        takeRecords: () => IntersectionObserverEntry[];
        unobserve: (target: Element) => void;
        cb: (e: any) => void;
    };
};
