import type { Datum } from "../charts/shared/datumTypes";
interface ObservationBase {
    timestamp: number;
    chartType: string;
    chartId?: string;
}
export interface HoverObservation extends ObservationBase {
    type: "hover";
    datum: Datum;
    x: number;
    y: number;
}
export interface HoverEndObservation extends ObservationBase {
    type: "hover-end";
}
export interface BrushObservation extends ObservationBase {
    type: "brush";
    extent: {
        x: [number, number];
        y: [number, number];
    };
}
export interface BrushEndObservation extends ObservationBase {
    type: "brush-end";
}
export interface SelectionObservation extends ObservationBase {
    type: "selection";
    selection: {
        name: string;
        fields: Datum;
    };
}
export interface SelectionEndObservation extends ObservationBase {
    type: "selection-end";
    selection: {
        name: string;
    };
}
export interface ClickObservation extends ObservationBase {
    type: "click";
    datum: Datum;
    x: number;
    y: number;
}
export interface ClickEndObservation extends ObservationBase {
    type: "click-end";
}
export type ChartObservation = HoverObservation | HoverEndObservation | BrushObservation | BrushEndObservation | SelectionObservation | SelectionEndObservation | ClickObservation | ClickEndObservation;
export type OnObservationCallback = (observation: ChartObservation) => void;
export interface ObservationStoreState {
    /** Ring buffer of recent observations (newest last). Mutated in place for perf. */
    observations: ChartObservation[];
    maxObservations: number;
    /** Monotonic counter incremented on each push — use as change signal */
    version: number;
    pushObservation: (observation: ChartObservation) => void;
    clearObservations: () => void;
}
export declare const ObservationProvider: import("react").FC<import("./createStore").StoreProviderProps<ObservationStoreState>>, useObservationSelector: <R>(selector: (state: ObservationStoreState) => R) => R;
export {};
