import type { NetworkCustomLayout } from "../../../stream/networkCustomLayout";
import type { BezierCache } from "../../../stream/networkTypes";
import type { Datum } from "../../shared/datumTypes";
export interface ProcessSankeyBandSpec {
    id: string;
    /** Outer band perimeter — same path used for fill and stroke. */
    pathD: string;
    fill: string;
    stroke?: string;
    strokeWidth?: number;
    /** Per-edge 20-px gradient stubs (band-color fade-in for
     *  systemInTime, fade-out for systemOutTime). When at least one
     *  stub is present, the band paints outline-only and the stubs
     *  are the only colored regions inside the perimeter. */
    gradientStubs?: BandGradientStub[];
    /** The user's raw node datum, surfaced as `data` in HoverData. */
    rawDatum: Datum;
    /** Pre-computed label x/y for the node band. */
    labelX: number;
    labelY: number;
    labelText: string;
}
export interface BandGradientStub {
    pathD: string;
    x0: number;
    x1: number;
    from: 0 | 1;
    to: 0 | 1;
}
export interface ProcessSankeyRibbonSpec {
    id: string;
    pathD: string;
    fill: string;
    opacity: number;
    /** The user's raw edge datum, surfaced as `data` in HoverData. */
    rawDatum: Datum;
    /**
     * Pre-computed cubic bezier control points + halfWidth for the
     * shared particle pipeline. ProcessSankey writes these alongside
     * the ribbon's path-D string so the frame's particle pool can
     * spawn / step / render against them without re-deriving the
     * ribbon geometry. Optional — when omitted the ribbon paints
     * normally but no particles flow along it.
     */
    bezier?: BezierCache;
}
export interface ProcessSankeyLayoutConfig {
    bands: ProcessSankeyBandSpec[];
    ribbons: ProcessSankeyRibbonSpec[];
    /** Optional dim opacity for unselected bands/ribbons (linkedHover). */
    showLabels?: boolean;
}
/**
 * Marker attached to scene-edge datums so the HOC's `tooltipContent`
 * can route node bands vs. flow ribbons through different default
 * bodies. `data` still carries the user's original node/edge datum.
 */
export interface SceneDatumPayload {
    __kind: "band" | "ribbon";
    /** Original node/edge record, as the user pushed it. */
    data: Datum;
    /** Stable id for hit-deduplication and ref operations. */
    id: string;
}
export declare const emitProcessSankeyScenes: NetworkCustomLayout<ProcessSankeyLayoutConfig>;
/**
 * Test whether an arbitrary HoverData/datum-shaped value carries the
 * ProcessSankey scene marker. Lets the HOC's tooltipContent narrow to
 * the band/ribbon variants without leaking the marker key everywhere.
 */
export declare function isProcessSankeyScenePayload(d: unknown): d is SceneDatumPayload;
