import type { Datum } from "../shared/datumTypes";
import * as React from "react";
import type { StreamNetworkFrameProps } from "../../stream/networkTypes";
import type { BaseChartProps } from "../shared/types";
import { type TooltipProp } from "../../Tooltip/Tooltip";
export interface OrbitNode {
    datum: any;
    x: number;
    y: number;
    ring: number;
    angle: number;
    depth: number;
    parent?: OrbitNode;
    children?: OrbitNode[];
    id?: string;
}
type OrbitMode = "flat" | "solar" | "atomic" | number[];
export interface OrbitDiagramProps<TDatum extends Datum = Datum> extends BaseChartProps {
    /** Hierarchical data — single root object with children */
    data: TDatum;
    /** How to access children from each datum @default "children" */
    childrenAccessor?: string | ((d: TDatum) => TDatum[] | null | undefined);
    /** How to identify each node @default "name" */
    nodeIdAccessor?: string | ((d: Datum) => string);
    /** Field or function for node color */
    colorBy?: string | ((d: Datum) => string);
    /** Color scheme @default "category10" */
    colorScheme?: string | string[];
    /** Color by hierarchy depth instead of field @default false */
    colorByDepth?: boolean;
    /**
     * Ring arrangement mode:
     * - "flat": all children in one ring
     * - "solar": one child per ring
     * - "atomic": [2, 8] electron shell pattern
     * - number[]: custom ring capacities (last value repeats)
     * @default "flat"
     */
    orbitMode?: OrbitMode;
    /** Ring size divisor per depth. Larger = tighter orbits. @default 2.95 */
    orbitSize?: number | ((node: any) => number);
    /** Orbit speed in degrees per frame @default 0.25 */
    speed?: number;
    /** Per-node speed modifier @default (node) => 1 / (node.depth + 1) */
    revolution?: (node: any) => number;
    /**
     * Built-in revolution style presets:
     * - "locked": children rotate with parent at decreasing speed (default)
     * - "decay": each depth level progressively slower, independent of parent
     * - "alternate": odd-depth rings reverse direction
     * Ignored when `revolution` function is provided.
     * @default "locked"
     */
    revolutionStyle?: "locked" | "decay" | "alternate";
    /** Vertical squash for elliptical orbits. 1 = circle, 0.5 = ellipse @default 1 */
    eccentricity?: number | ((node: any) => number);
    /** Show orbital ring paths @default true */
    showRings?: boolean;
    /** Node radius. Number or function of node. @default 6 */
    nodeRadius?: number | ((node: any) => number);
    /** Show node labels @default false */
    showLabels?: boolean;
    /** Enable animation @default true */
    animated?: boolean;
    /** Tooltip configuration. Function form receives the raw datum (not OrbitNode). */
    tooltip?: TooltipProp;
    /** Enable hover @default true */
    enableHover?: boolean;
    /** Annotation objects */
    annotations?: Array<Datum>;
    /** Additional SVG content */
    foregroundGraphics?: React.ReactNode;
    /** Frame props passthrough */
    frameProps?: Partial<Omit<StreamNetworkFrameProps, "data" | "size">>;
}
export declare function OrbitDiagram<TDatum extends Datum = Datum>(props: OrbitDiagramProps<TDatum>): import("react/jsx-runtime").JSX.Element;
export declare namespace OrbitDiagram {
    var displayName: string;
}
export {};
