///
import { ResizeObserverClass, ScrollOffsets, BorderOffsets } from "./types";
import { IBounds } from "./Bounds";
/**
* Utility to get the correct ResizeObserver class
*/
export declare function getResizeObserver(environment: Window | undefined, polyfill: ResizeObserverClass | undefined): ResizeObserverClass | undefined;
/**
* Utility function that given a element traverses up in the html-hierarchy
* to find and return all ancestors that have scroll behavior
*/
export declare function findScrollContainers(element: HTMLElement | null, environment?: Window): HTMLElement[];
export declare type OnChangeElements = {
layer: HTMLElement;
trigger: HTMLElement;
arrow: HTMLElement | null;
scrollContainers: HTMLElement[];
};
export declare type UseTrackElementsProps = {
enabled: boolean;
onChange: (elements: OnChangeElements, scrollOffsets: ScrollOffsets, borderOffsets: BorderOffsets) => void;
environment: Window | undefined;
ResizeObserverPolyfill: ResizeObserverClass | undefined;
overflowContainer: boolean;
triggerOption?: {
getBounds: () => IBounds;
getParent?: () => HTMLElement;
};
};
declare type UseTrackElementsReturnValue = {
triggerRef: (element: HTMLElement | null) => void;
layerRef: (element: HTMLElement | null) => void;
arrowRef: React.MutableRefObject;
closestScrollContainer: HTMLElement | null;
};
/**
* This hook has the responsibility to track the bounds of:
* - the trigger element
* - the layer element
* - the arrow element
* - the scroll-containers of which the trigger element is a descendant of
*
* It will call the `onChange` callback with a collection of these elements when any
* of the tracked elements bounds have changed
*
* It will detect these changes by listening:
* - when the reference of the trigger element changes
* - when the reference of the layer element changes
* - when the trigger, layer or document body changes in size
* - when the user scrolls the page, or any of the scroll containers
*/
export declare function useTrackElements({ enabled, onChange, environment, ResizeObserverPolyfill, overflowContainer, triggerOption }: UseTrackElementsProps): UseTrackElementsReturnValue;
export {};