/**
 * XYBrushOverlay — d3-brush SVG overlay for XY frames.
 *
 * Renders a transparent SVG positioned above the canvas. Supports x, y, and
 * xy brush dimensions, bin snapping, and streaming brush tracking (shrinks/
 * clears the brush as data scrolls past the selected range).
 *
 * Key design decisions:
 *   - d3-brush lifecycle depends on [width, height, dimension, snap, binSize, snapDuring]
 *     only — scales and binBoundaries are read from refs to avoid teardown mid-drag.
 *   - Data-driven snapping (binBoundaries) uses binary search to snap to actual bin
 *     edges. Falls back to uniform grid math (binSize) when no boundaries are provided.
 *   - Bin snapping applies on "end" events by default. Set snapDuring=true to also
 *     snap during drag (the "brush" event).
 *   - Streaming tracking guards against y-only dimension (no x-domain to track).
 *   - isProgrammaticMoveRef prevents re-entrant brush events from .move() calls.
 *
 * Consumed by: StreamXYFrame (rendered when brush prop is set).
 */
import * as React from "react";
import type { StreamScales } from "./types";
export interface XYBrushOverlayProps {
    width: number;
    height: number;
    totalWidth: number;
    totalHeight: number;
    margin: {
        top: number;
        right: number;
        bottom: number;
        left: number;
    };
    dimension: "x" | "y" | "xy";
    scales: StreamScales | null;
    onBrush: (extent: {
        x: [number, number];
        y: [number, number];
    } | null) => void;
    binSize?: number;
    snap?: "continuous" | "bin";
    /** Sorted bin boundary values for data-driven snapping (overrides uniform grid math when snap="bin"). Defensively sorted internally. */
    binBoundaries?: number[];
    /** When true, snap during drag (not just on release). Default false. */
    snapDuring?: boolean;
    streaming?: boolean;
}
export declare function XYBrushOverlay({ width, height, totalWidth, totalHeight, margin, dimension, scales, onBrush, binSize, snap, binBoundaries, snapDuring, streaming }: XYBrushOverlayProps): React.JSX.Element;
