import type { ActiveManager } from '../interaction/activeManager';
import type { PickFocusOutputs, UnknownSeries } from './series';
import type { DatumIndexType, SeriesNodeDatum } from './seriesTypes';
export interface PickedNode {
    series: UnknownSeries;
    datum: SeriesNodeDatum<DatumIndexType>;
    datumIndex: unknown;
}
export type PickedNodes = {
    matches: PickedNode[];
    distance: number;
};
type TooltipCandidate = {
    active?: PickedNode;
    paginationState?: {
        index: number;
        length: number;
    };
};
/**
 * IPickManager mediates the `active` node state between SeriesAreaManager and ActiveManager.
 *
 * It tracks the active node by:
 *
 *   1.  Listening for `setState` calls from ActiveManager
 *
 *   2.  Notifying ActiveManager of state change (so that `getState` receives the
 *       correct data)
 *
 *   3.  Track tooltip candidates (if pagination is enabled).
 */
export interface IPickManager {
    onPickedNodesHighlight(pickedNodes: PickedNodes | undefined): PickedNode | undefined;
    onPickedNodesTooltip(pickedNodes: PickedNodes | undefined): TooltipCandidate;
    onPickedNodesFocus(pickedFocus: PickFocusOutputs | undefined): void;
    onPickedNodesAPI(pickedNodes: PickedNodes): PickedNode | undefined;
    onPickedNodesAPIDebounced(): TooltipCandidate;
    onClearUI(): void;
    onClearAPI(): void;
    nextCandidate(): TooltipCandidate;
}
export declare class PickManager implements IPickManager {
    private readonly activeManager;
    private readonly tooltipProperties;
    private readonly focusState;
    private candidates;
    private readonly activeState;
    private lastNotifiedActive;
    private pendingPickedNodes?;
    constructor(activeManager: ActiveManager, tooltipProperties: {
        readonly pagination: boolean;
    }, focusState: {
        readonly series: UnknownSeries | undefined;
    });
    private getActive;
    private clear;
    private setSource;
    private syncActiveManager;
    private popPendingPickedNodes;
    onClearUI(): void;
    onClearAPI(): void;
    onPickedNodesHighlight(pickedNodes: PickedNodes | undefined): PickedNode | undefined;
    onPickedNodesTooltip(pickedNodes: PickedNodes | undefined): TooltipCandidate;
    onPickedNodesFocus(pickedFocus: PickFocusOutputs | undefined): void;
    onPickedNodesAPI(debouncedPickedNodes: PickedNodes): PickedNode | undefined;
    onPickedNodesAPIDebounced(): TooltipCandidate;
    nextCandidate(): TooltipCandidate;
}
export {};
