import type { Datum } from "../shared/datumTypes";
import * as React from "react";
import type { StreamOrdinalFrameProps } from "../../stream/ordinalTypes";
import type { LegendInteractionMode, LegendPosition } from "../shared/hooks";
import type { BaseChartProps, ChartAccessor, CategoryFormatFn } from "../shared/types";
import { type TooltipProp } from "../../Tooltip/Tooltip";
import type { RealtimeFrameHandle } from "../../realtime/types";
import { type RegressionProp } from "../shared/regressionUtils";
export interface DotPlotProps<TDatum extends Datum = Datum> extends BaseChartProps {
    data?: TDatum[];
    categoryAccessor?: ChartAccessor<TDatum, string>;
    valueAccessor?: ChartAccessor<TDatum, number>;
    orientation?: "vertical" | "horizontal";
    categoryLabel?: string;
    valueLabel?: string;
    valueFormat?: (d: number | string) => string;
    colorBy?: ChartAccessor<TDatum, string>;
    colorScheme?: string | string[];
    /** Category ordering. Default (`undefined`) resolves to `"auto"`, which
     *  preserves insertion order while streaming and falls through to
     *  value-desc on static data — the recommended choice when using the
     *  push API so categories don't jump around as values fluctuate.
     *  `true` forces value-desc regardless of source. `"asc"` / `"desc"`
     *  sorts by total value. `false` for insertion order regardless of
     *  source. Function comparators receive category name strings (not
     *  row objects) and run against the category list on the axis. */
    sort?: boolean | "asc" | "desc" | "auto" | ((a: string, b: string) => number);
    dotRadius?: number;
    categoryPadding?: number;
    enableHover?: boolean;
    showGrid?: boolean;
    showCategoryTicks?: boolean;
    showLegend?: boolean;
    legendInteraction?: LegendInteractionMode;
    legendPosition?: LegendPosition;
    tooltip?: TooltipProp;
    annotations?: Datum[];
    /**
     * Overlay a regression line through the dots. Same shape as
     * Scatterplot's regression prop — accepts boolean, method-string,
     * or full `RegressionConfig`. Pixel positions resolve through the
     * band scale, so the line passes through dot centers. Sugar over
     * the `trend` annotation.
     */
    regression?: RegressionProp;
    /** Custom formatter for category tick labels */
    categoryFormat?: CategoryFormatFn;
    /** Fixed value-axis domain `[min, max]`. Either bound may be `undefined` to leave that side data-derived. */
    valueExtent?: [number | undefined, number | undefined] | [number];
    frameProps?: Partial<Omit<StreamOrdinalFrameProps, "data" | "size">>;
}
/**
 * DotPlot - One dot per category, positioned along the value axis.
 *
 * Lighter-weight than {@link BarChart} for sorted comparisons; emphasizes
 * exact values rather than magnitude perception. Defaults to insertion
 * order while streaming (so categories don't shuffle as values change)
 * and value-descending on static data via `sort: "auto"`.
 *
 * @example
 * ```tsx
 * // Sorted ranking by metric
 * <DotPlot
 *   data={teams}
 *   categoryAccessor="name"
 *   valueAccessor="score"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Color by group + grid for axis reading
 * <DotPlot
 *   data={features}
 *   categoryAccessor="feature"
 *   valueAccessor="adoption"
 *   colorBy="team"
 *   showGrid
 *   showLegend
 * />
 * ```
 */
export declare const DotPlot: {
    <TDatum extends Datum = Datum>(props: DotPlotProps<TDatum> & React.RefAttributes<RealtimeFrameHandle>): React.ReactElement | null;
    displayName?: string;
};
