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";
export interface SwarmPlotProps<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[];
    sizeBy?: ChartAccessor<TDatum, number>;
    sizeRange?: [number, number];
    pointRadius?: number;
    pointOpacity?: number;
    categoryPadding?: number;
    enableHover?: boolean;
    showGrid?: boolean;
    showCategoryTicks?: boolean;
    showLegend?: boolean;
    legendInteraction?: LegendInteractionMode;
    legendPosition?: LegendPosition;
    tooltip?: TooltipProp;
    annotations?: Datum[];
    /** Enable brush on the value axis */
    brush?: boolean;
    /** Callback when brush selection changes */
    onBrush?: (extent: {
        r: [number, number];
    } | null) => void;
    /** LinkedCharts brush integration */
    linkedBrush?: string | {
        name: string;
        rField?: string;
    };
    /** 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">>;
}
/**
 * SwarmPlot - Show every individual observation per category as a beeswarm.
 *
 * Points are placed along the value axis and offset perpendicular to it
 * to avoid overlap, producing a packed cluster per category. Best for
 * datasets where you want both the distribution shape AND the individual
 * observations visible — typically dozens to a few thousand points.
 *
 * For aggregate distribution shape only, prefer {@link ViolinPlot},
 * {@link BoxPlot}, or {@link RidgelinePlot}.
 *
 * @example
 * ```tsx
 * // Reaction-time observations per cohort
 * <SwarmPlot
 *   data={observations}
 *   categoryAccessor="cohort"
 *   valueAccessor="reactionTime"
 *   pointRadius={3}
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Color by group within each category, sized by weight
 * <SwarmPlot
 *   data={observations}
 *   categoryAccessor="condition"
 *   valueAccessor="score"
 *   colorBy="group"
 *   sizeBy="weight"
 *   sizeRange={[2, 10]}
 *   showLegend
 * />
 * ```
 */
export declare const SwarmPlot: {
    <TDatum extends Datum = Datum>(props: SwarmPlotProps<TDatum> & React.RefAttributes<RealtimeFrameHandle>): React.ReactElement | null;
    displayName?: string;
};
