import type { CallState } from '../store';
import { VideoTrackType } from '../types';
export type EntryHandler = (entry: IntersectionObserverEntry) => void;
export type Unobserve = () => void;
export type Observe = (element: HTMLElement, entryHandler: EntryHandler) => Unobserve;
export declare class ViewportTracker {
    private callState;
    private elementHandlerMap;
    private observer;
    private queueSet;
    constructor(callState: CallState);
    /**
     * Method to set scrollable viewport as root for the IntersectionObserver, returns
     * cleanup function to be invoked upon disposing of the DOM element to prevent memory leaks
     */
    setViewport: (viewportElement: HTMLElement, options?: Pick<IntersectionObserverInit, "threshold" | "rootMargin">) => () => void;
    /**
     * Method to set element to observe and handler to be triggered whenever IntersectionObserver
     * detects a possible change in element's visibility within specified viewport, returns
     * cleanup function to be invoked upon disposing of the DOM element to prevent memory leaks
     */
    observe: Observe;
    /**
     * Tracks the given element for visibility changes and mirrors the result
     * into `participant.viewportVisibilityState[trackType]` in `CallState`.
     * Returns a function that unobserves the element and resets the visibility
     * state back to `UNKNOWN`.
     */
    trackElementVisibility: <T extends HTMLElement>(element: T, sessionId: string, trackType: VideoTrackType) => () => void;
}
