import type { Datum } from "./datumTypes";
import type { Accessor, ChartAccessor } from "./types";
import type { SelectionHookResult } from "./selectionUtils";
export interface XYPointStyleOptions {
    /** colorBy accessor — string field name or function. */
    colorBy?: Accessor<string> | ChartAccessor<Datum, string>;
    /** Resolved categorical color scale (typically from useChartSetup). */
    colorScale: ((v: string) => string) | undefined;
    /** Top-level uniform `color` prop. Used as the fallback fill when
     *  `colorBy` is unset. */
    color?: string;
    /**
     * Fixed point radius. When `radiusFn` is supplied, that wins
     * (per-datum sizing for BubbleChart / Scatterplot's `sizeBy`).
     * @default 5
     */
    pointRadius?: number;
    /** Per-datum radius resolver (e.g. wraps `getSize(d, sizeBy, …)`).
     *  Ignored when undefined; HOCs with no `sizeBy` should pass it
     *  unset and rely on `pointRadius`. */
    radiusFn?: (d: Datum) => number;
    /** Default fillOpacity. Charts override this through their own
     *  prop name (`pointOpacity`, `bubbleOpacity`). @default 1 */
    fillOpacity?: number;
    /**
     * Fallback fill resolver invoked when `colorBy` is unset. Used by
     * QuadrantChart to pick a color from the quadrant the point lands
     * in. When omitted, fallback is `color || DEFAULT_COLOR` (the
     * standard Scatterplot/BubbleChart behavior).
     */
    fallbackFill?: (d: Datum) => string;
    /**
     * Static or per-datum extra style applied BEFORE color resolution
     * and primitive overlay. Use for shape-constant defaults
     * (BubbleChart's `{ stroke: bubbleStrokeColor, strokeWidth: 1 }`).
     * If extras supply a `fill`, the standard color resolution is
     * skipped — same bypass as `useOrdinalPieceStyle`. Lets
     * ConnectedScatterplot drop in its viridis-by-order fill.
     */
    baseStyleExtras?: Record<string, string | number | undefined> | ((d: Datum) => Record<string, string | number | undefined>);
    /** Top-level primitive props — applied last via `mergeShapeStyle`. */
    stroke?: string;
    strokeWidth?: number;
    opacity?: number;
    /** Selection hook output (typically `setup.effectiveSelectionHook`). */
    effectiveSelectionHook: SelectionHookResult | null | undefined;
    /** Resolved selection config (typically `setup.resolvedSelection`). */
    resolvedSelection: import("./types").SelectionConfig | undefined;
    /**
     * For ConnectedScatterplot-style charts whose color depends on the
     * point's position in an ordered sequence, the resolver may need
     * the point's parent line. Defaults to identity (`d => d`).
     * Same hook BarChart's `parentLine` cascade uses.
     */
    colorDatumAccessor?: (d: Datum) => Datum;
}
/**
 * Build a memoized `pointStyle` function for an XY HOC.
 *
 * @example
 * ```tsx
 * // Scatterplot — sizeBy-driven radius, standard color fallback
 * const pointStyle = useXYPointStyle({
 *   colorBy, colorScale: setup.colorScale,
 *   color, pointRadius, fillOpacity: pointOpacity,
 *   radiusFn: sizeBy ? (d) => getSize(d, sizeBy, sizeRange, sizeDomain) : undefined,
 *   stroke, strokeWidth, opacity,
 *   effectiveSelectionHook: setup.effectiveSelectionHook,
 *   resolvedSelection: setup.resolvedSelection,
 * })
 * ```
 *
 * @example
 * ```tsx
 * // QuadrantChart — bespoke fallback fill from quadrant lookup
 * const pointStyle = useXYPointStyle({
 *   colorBy, colorScale: setup.colorScale, color,
 *   pointRadius, fillOpacity: pointOpacity,
 *   radiusFn: sizeBy ? (d) => getSize(d, sizeBy, sizeRange, sizeDomain) : undefined,
 *   fallbackFill: (d) => quadrantColor(d, getXValue, getYValue, xCenter, yCenter, quadrants),
 *   stroke, strokeWidth, opacity,
 *   effectiveSelectionHook: setup.effectiveSelectionHook,
 *   resolvedSelection: setup.resolvedSelection,
 * })
 * ```
 */
export declare function useXYPointStyle(options: XYPointStyleOptions): (d: Datum) => Record<string, string | number | undefined>;
