import type { Datum } from "../shared/datumTypes";
import * as React from "react";
import type { StreamXYFrameProps, MarginalGraphicsConfig } from "../../stream/types";
import type { RealtimeFrameHandle } from "../../realtime/types";
import type { BaseChartProps, AxisConfig, ChartAccessor } from "../shared/types";
import { type TooltipProp } from "../../Tooltip/Tooltip";
import type { LegendInteractionMode, LegendPosition } from "../shared/hooks";
import { type RegressionProp } from "../shared/regressionUtils";
import type { ForecastConfig, AnomalyConfig } from "../shared/statisticalOverlays";
/**
 * Scatterplot component props
 */
export interface ScatterplotProps<TDatum extends Datum = Datum> extends BaseChartProps, AxisConfig {
    /** Array of data points. Each point should have x and y properties. */
    data?: TDatum[];
    /** Field name or function to access x values @default "x" */
    xAccessor?: ChartAccessor<TDatum, number | Date | string>;
    /** Field name or function to access y values @default "y" */
    yAccessor?: ChartAccessor<TDatum, number>;
    /** X scale type @default "linear" */
    xScaleType?: "linear" | "log" | "time";
    /** Y scale type @default "linear" */
    yScaleType?: "linear" | "log";
    /** Field name or function to determine point color */
    colorBy?: ChartAccessor<TDatum, string>;
    /** Color scheme for categorical data or custom colors array @default "category10" */
    colorScheme?: string | string[];
    /** Field name or function to determine point size */
    sizeBy?: ChartAccessor<TDatum, number>;
    /** Min and max radius for points @default [3, 15] */
    sizeRange?: [number, number];
    /** Default point radius when sizeBy is not specified @default 5 */
    pointRadius?: number;
    /** Point opacity @default 0.8 */
    pointOpacity?: number;
    /** Enable hover annotations @default true */
    enableHover?: boolean;
    /** Show grid lines @default false */
    showGrid?: boolean;
    /** Show legend @default true (when colorBy is specified) */
    showLegend?: boolean;
    /** Tooltip configuration */
    tooltip?: TooltipProp;
    /** Marginal distribution plots in axis margins */
    marginalGraphics?: MarginalGraphicsConfig;
    /** Accessor for unique point IDs, used by point-anchored annotations */
    pointIdAccessor?: ChartAccessor<TDatum, string>;
    /** Legend interaction mode */
    legendInteraction?: LegendInteractionMode;
    /** Legend position */
    legendPosition?: LegendPosition;
    /** Annotation objects to render on the chart */
    annotations?: Datum[];
    /**
     * Overlay a regression line on the scatter. Accepts:
     * - `true` — linear regression with default styling
     * - `"linear"` | `"polynomial"` | `"loess"` — pick a method
     * - `RegressionConfig` — full control (method, bandwidth, order,
     *   color, strokeWidth, strokeDasharray, label)
     *
     * Sugar over `annotations={[{ type: "trend", … }]}` — for richer
     * setups (multiple regression lines, custom anchoring) drop into
     * the annotations array directly.
     *
     * @example
     * ```tsx
     * <Scatterplot data={d} xAccessor="x" yAccessor="y" regression />
     * <Scatterplot data={d} xAccessor="x" yAccessor="y" regression="loess" />
     * <Scatterplot data={d} xAccessor="x" yAccessor="y"
     *   regression={{ method: "polynomial", order: 3, color: "#ef4444", label: "Cubic" }} />
     * ```
     */
    regression?: RegressionProp;
    /**
     * Forecast overlay — extends the scatter with tagged future
     * points + (optional) confidence-envelope annotations. Same shape
     * as LineChart's `forecast` prop.
     */
    forecast?: ForecastConfig;
    /**
     * Anomaly overlay — adds a ±σ band annotation and per-point
     * anomaly dots. Standalone (without forecast) gives raw anomaly
     * detection on the scatter.
     */
    anomaly?: AnomalyConfig;
    /** Fixed x domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
    xExtent?: [number | undefined, number | undefined] | [number];
    /** Fixed y domain `[min, max]` (either bound may be undefined to leave that side data-derived). */
    yExtent?: [number | undefined, number | undefined] | [number];
    /** Additional StreamXYFrame props for advanced customization */
    frameProps?: Partial<Omit<StreamXYFrameProps, "chartType" | "data" | "size">>;
}
/**
 * Scatterplot - Visualize relationships between two continuous variables.
 *
 * Each row becomes a circle at `(xAccessor, yAccessor)`. Add a third
 * dimension via {@link BubbleChart} (size encoding) or
 * {@link ConnectedScatterplot} (point ordering). For matrix views of every
 * pairwise combination, use {@link ScatterplotMatrix}.
 *
 * @example
 * ```tsx
 * // Simple scatter
 * <Scatterplot
 *   data={[{ x: 1, y: 10 }, { x: 2, y: 20 }]}
 *   xLabel="Time"
 *   yLabel="Value"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Color by category, marginal histograms in axis margins
 * <Scatterplot
 *   data={observations}
 *   xAccessor="age"
 *   yAccessor="income"
 *   colorBy="region"
 *   showLegend
 *   marginalGraphics={{ x: "histogram", y: "histogram" }}
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Hover-highlight non-hovered series + click handler
 * <Scatterplot
 *   data={observations}
 *   xAccessor="x"
 *   yAccessor="y"
 *   colorBy="cluster"
 *   hoverHighlight
 *   onClick={(d) => console.log(d)}
 * />
 * ```
 */
export declare const Scatterplot: {
    <TDatum extends Datum = Datum>(props: ScatterplotProps<TDatum> & React.RefAttributes<RealtimeFrameHandle>): React.ReactElement | null;
    displayName?: string;
};
