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: Datum;
    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: Datum) => number);
    /** Orbit speed in degrees per frame @default 0.25 */
    speed?: number;
    /** Per-node speed modifier @default (node) => 1 / (node.depth + 1) */
    revolution?: (node: Datum) => 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: Datum) => number);
    /** Show orbital ring paths @default true */
    showRings?: boolean;
    /** Node radius. Number or function of node. @default 6 */
    nodeRadius?: number | ((node: Datum) => 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">>;
}
/**
 * OrbitDiagram - Visualize a hierarchy as concentric orbits with optional rotation.
 *
 * Each level of the hierarchy becomes an orbit ring at a different radius;
 * children are placed around their parent's orbit. With `animated` set
 * (the default), nodes rotate continuously at `speed`, producing a
 * planet-system feel.
 *
 * @example
 * ```tsx
 * // Static orbits
 * <OrbitDiagram
 *   data={{
 *     name: "Sun",
 *     children: [
 *       { name: "Mercury" },
 *       { name: "Venus" },
 *       { name: "Earth", children: [{ name: "Moon" }] },
 *       { name: "Mars" },
 *     ],
 *   }}
 *   childrenAccessor="children"
 *   animated={false}
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Animated, depth-colored, slower rotation
 * <OrbitDiagram
 *   data={hierarchyRoot}
 *   childrenAccessor="children"
 *   colorByDepth
 *   speed={0.2}
 * />
 * ```
 */
export declare function OrbitDiagram<TDatum extends Datum = Datum>(props: OrbitDiagramProps<TDatum>): React.JSX.Element;
export declare namespace OrbitDiagram {
    var displayName: string;
}
export {};
