import type { NetworkCustomLayout } from "../stream/networkCustomLayout";
import type { Datum } from "../charts/shared/datumTypes";
export interface FlextreeConfig {
    /** Default node width when nodes don't carry a `width` field. @default 80 */
    nodeWidth?: number;
    /** Default node height when nodes don't carry a `height` field. @default 30 */
    nodeHeight?: number;
    /** Edge style — curved (cubic-bezier path) or straight lines. @default "curved" */
    edgeCurve?: "line" | "curved";
    /** Tree orientation. Affects bezier control-point placement. @default "vertical" */
    orientation?: "vertical" | "horizontal";
    /** Render text labels at node centers. @default true */
    showLabels?: boolean;
    /** Field name (or function) yielding the label string per node. @default "id" */
    labelAccessor?: string | ((d: Datum) => string);
    /** Per-node fill style override. */
    nodeFill?: string;
}
/**
 * Flextree layout recipe — renders a pre-positioned variable-width tree
 * (e.g. output of `d3-flextree`).
 *
 * The user runs `d3-flextree` themselves and passes the laid-out nodes
 * as data. Each node should carry `x`, `y`, optional `width`/`height`.
 * Edges should be parent → child links (no waypoints needed).
 *
 * @example
 * ```ts
 * import flextree from "d3-flextree"
 * import { flextreeLayout } from "semiotic/recipes"
 *
 * const layout = flextree({ nodeSize: (n) => [n.data.size, 40] })
 * const tree = layout.hierarchy(rootData)
 * layout(tree)
 *
 * const nodes = tree.descendants().map((n) => ({
 *   id: n.data.id,
 *   x: n.x, y: n.y,
 *   width: n.size[0], height: n.size[1],
 *   label: n.data.name,
 * }))
 * const edges = tree.links().map((l) => ({
 *   source: l.source.data.id,
 *   target: l.target.data.id,
 * }))
 *
 * <StreamNetworkFrame
 *   chartType="force"
 *   nodes={nodes} edges={edges}
 *   customNetworkLayout={flextreeLayout}
 *   layoutConfig={{ orientation: "vertical" }}
 * />
 * ```
 */
export declare const flextreeLayout: NetworkCustomLayout<FlextreeConfig>;
