import * as React from "react";
import type { AnnotationContext } from "../../realtime/types";
import type { Datum } from "./datumTypes";
export { applyAnnotationEmphasis, type AnnotationRenderPair } from "./annotationHierarchy";
type AnnotationRule = (annotation: Datum, index: number, context: AnnotationContext) => React.ReactNode | null;
/**
 * Run the SVG-overlay annotation pass: dispatch each annotation through the
 * user's `svgAnnotationRules` (falling back to the default rules), drop the
 * ones that render nothing, then apply emphasis hierarchy. Shared verbatim by
 * the XY and ordinal overlays so the dispatch/filter/hierarchy logic lives in
 * one place.
 *
 * Falsy-node semantics match the pre-emphasis `.filter(Boolean)` exactly: a
 * rule returning `null`/`undefined` ("skip", e.g. the default rules' out-of-
 * bounds path) — or any other falsy node (`0`/`""`/`false`) — produces no
 * annotation and is dropped. A user rule that returns `null`/`undefined` falls
 * through to the default rule, preserving the existing override contract.
 */
export declare function renderAnnotationPass(annotations: ReadonlyArray<Datum>, defaultRule: AnnotationRule, userRule: AnnotationRule | undefined, context: AnnotationContext): React.ReactNode[];
export declare function createDefaultAnnotationRules(_frameType: "xy" | "ordinal" | "network"): (annotation: Datum, index: number, context: AnnotationContext) => React.ReactNode | null;
