import * as React from "react";
import type { ResolutionMode } from "./store/SelectionStore";
type LegendInteractionMode = "highlight" | "isolate" | "none";
export { useSelection, useLinkedHover, useBrushSelection, useFilteredData } from "./store/useSelection";
export type { UseSelectionOptions, UseSelectionResult, UseLinkedHoverOptions, UseLinkedHoverResult, UseBrushSelectionOptions, UseBrushSelectionResult } from "./store/useSelection";
export { useChartObserver } from "./store/useObservation";
export type { UseChartObserverOptions, UseChartObserverResult } from "./store/useObservation";
/** Hook: returns true when a parent LinkedCharts is handling the legend. */
export declare function useLinkedLegendSuppression(): boolean;
export interface LinkedChartsProps {
    children: React.ReactNode;
    /** Pre-configure selections with resolution modes */
    selections?: Record<string, {
        resolution?: ResolutionMode;
    }>;
    /**
     * Show a unified legend for all linked charts.
     * When true, child chart legends are automatically suppressed unless explicitly set.
     * @default true (when a CategoryColorProvider is present)
     */
    showLegend?: boolean;
    /**
     * Position of the unified legend.
     * @default "top"
     */
    legendPosition?: "top" | "bottom";
    /**
     * Legend interaction mode for the unified legend.
     * - "highlight": hover dims non-hovered categories across all linked charts
     * - "isolate": click toggles category visibility across all linked charts
     * - "none": static legend (default)
     */
    legendInteraction?: LegendInteractionMode;
    /**
     * Selection name that the unified legend produces on.
     * Child charts must use the same name in their `selection` prop to respond.
     * @default "legend"
     */
    legendSelectionName?: string;
    /**
     * Field name that the unified legend uses for cross-chart highlighting.
     * This must match the field used in child charts' `linkedHover.fields` / `colorBy`.
     * @default first field from the first child's linkedHover config, or "category"
     */
    legendField?: string;
}
/**
 * Mirror of the wrap logic in Legend's renderLegendGroupHorizontal:
 * itemWidth = SWATCH(16) + 10 + label.length * 7, wrap when the cursor
 * would exceed maxWidth. Used only to size the container SVG — the
 * authoritative layout still happens inside <Legend>. When width is
 * unknown (e.g. first paint, SSR), return 1 so we don't pre-grow.
 */
export declare function estimateLegendRowCount(labels: string[], width: number): number;
/**
 * LinkedCharts — context provider for coordinated chart views.
 *
 * Wraps any number of chart components (at any depth) and enables
 * cross-highlighting, brushing-and-linking, and cross-filtering via
 * the `selection`, `linkedHover`, and `linkedBrush` props on each chart.
 *
 * @example
 * ```tsx
 * <LinkedCharts>
 *   <Scatterplot data={d} xAccessor="x" yAccessor="y" colorBy="cat"
 *     linkedHover={{ name: "hl", fields: ["cat"] }}
 *     selection={{ name: "hl" }} />
 *   <BarChart data={agg} categoryAccessor="cat" valueAccessor="total"
 *     selection={{ name: "hl" }} />
 * </LinkedCharts>
 * ```
 *
 * @example
 * ```tsx
 * // Cross-filtering (each chart's own brush is excluded from its filter)
 * <LinkedCharts selections={{ dash: { resolution: "crossfilter" } }}>
 *   <Scatterplot data={d} xAccessor="age" yAccessor="income"
 *     linkedBrush={{ name: "dash", xField: "age", yField: "income" }}
 *     selection={{ name: "dash" }} />
 *   <BarChart data={d} categoryAccessor="region" valueAccessor="count"
 *     selection={{ name: "dash" }} />
 * </LinkedCharts>
 * ```
 */
export declare function LinkedCharts({ children, selections, showLegend, legendPosition, legendInteraction, legendSelectionName, legendField, }: LinkedChartsProps): import("react/jsx-runtime").JSX.Element;
