import type { Datum } from "../shared/datumTypes";
import * as React from "react";
import type { StreamOrdinalFrameProps } from "../../stream/ordinalTypes";
import type { LegendInteractionMode } from "../shared/hooks";
import type { BaseChartProps, ChartAccessor, CategoryFormatFn } from "../shared/types";
import { type TooltipProp } from "../../Tooltip/Tooltip";
import type { RealtimeFrameHandle } from "../../realtime/types";
export interface SwimlaneChartProps<TDatum extends Datum = Datum> extends BaseChartProps {
    /** Data array. Omit for push API mode. */
    data?: TDatum[];
    /** Accessor for lane categories (swim lanes). Default "category". */
    categoryAccessor?: ChartAccessor<TDatum, string>;
    /** Accessor for item subcategory (color grouping within lanes). Required. */
    subcategoryAccessor: ChartAccessor<TDatum, string>;
    /** Accessor for item size/duration. Default "value". */
    valueAccessor?: ChartAccessor<TDatum, number>;
    /** Orientation: "horizontal" renders lanes as rows (default), "vertical" as columns. */
    orientation?: "vertical" | "horizontal";
    /** Label for the category axis */
    categoryLabel?: string;
    /** Label for the value axis */
    valueLabel?: string;
    /** Format function for value axis ticks */
    valueFormat?: (d: number | string) => string;
    /** Color accessor — defaults to subcategoryAccessor */
    colorBy?: ChartAccessor<TDatum, string>;
    /** Color scheme for subcategories */
    colorScheme?: string | string[];
    /** Padding between lanes in pixels */
    barPadding?: number;
    /** Enable hover annotations */
    enableHover?: boolean;
    /** Show grid lines */
    showGrid?: boolean;
    /** Show category axis tick labels */
    showCategoryTicks?: boolean;
    /** Show legend */
    showLegend?: boolean;
    /** Legend interaction mode */
    legendInteraction?: LegendInteractionMode;
    /** Legend position */
    legendPosition?: "right" | "left" | "top" | "bottom";
    /** Tooltip configuration */
    tooltip?: TooltipProp;
    /** Annotation objects */
    annotations?: Datum[];
    /** Enable brush on the value axis */
    brush?: boolean;
    /** Callback when brush selection changes */
    onBrush?: (extent: {
        r: [number, number];
    } | null) => void;
    /** LinkedCharts brush integration */
    linkedBrush?: string | {
        name: string;
        rField?: string;
    };
    /** Custom formatter for category tick labels */
    categoryFormat?: CategoryFormatFn;
    /** Custom tick values for the value axis. Forces specific values instead of d3 auto-ticks. */
    rTickValues?: number[];
    /** Align first value tick label to start, last to end. Prevents clipping at chart edges. */
    tickLabelEdgeAlign?: boolean;
    /** Gradient fill for swimlane segments. `true` uses tip→base opacity ramp;
     *  pass `{ topOpacity, bottomOpacity }` for a uniform alpha gradient or
     *  `{ colorStops }` for a multi-stop color ramp. Same shape as
     *  BarChart.gradientFill / AreaChart.gradientFill. The gradient runs along
     *  the lane's growth direction (left→right horizontal, bottom→top vertical). */
    gradientFill?: boolean | {
        topOpacity: number;
        bottomOpacity: number;
    } | {
        colorStops: Array<{
            offset: number;
            color: string;
        }>;
    };
    /** Lane "track" fill — a rect drawn behind each lane spanning the full
     *  value-axis range, sized to the lane's bandwidth. Lets budget/progress
     *  lanes read as filled vs. empty. Pass a color string (CSS vars
     *  supported, e.g. `"var(--semiotic-grid)"`) or `{ color, opacity }`. */
    trackFill?: string | {
        color: string;
        opacity?: number;
    };
    /** Rounded corner radius (in pixels) for the outermost ends of each
     *  lane. Both ends round: left+right in horizontal orientation, top+bottom
     *  in vertical. Middle segments of multi-segment lanes stay square so
     *  pieces visually butt against each other. */
    roundedTop?: number;
    /** Fixed value-axis domain `[min, max]`. Either bound may be `undefined` to leave that side data-derived. */
    valueExtent?: [number | undefined, number | undefined] | [number];
    /** Pass-through props to StreamOrdinalFrame */
    frameProps?: Partial<Omit<StreamOrdinalFrameProps, "data" | "size">>;
}
/**
 * SwimlaneChart - Range bars per category (swim lane), one segment per row.
 *
 * Each row becomes a horizontal segment in the lane named by
 * `categoryAccessor`; `subcategoryAccessor` chooses the segment label
 * within the lane. Useful for project timelines, status histories,
 * Gantt-like views, and per-resource workloads.
 *
 * @example
 * ```tsx
 * // Project task ranges per assignee
 * <SwimlaneChart
 *   data={[
 *     { team: "Design", task: "Spec",   value: 8 },
 *     { team: "Design", task: "Mocks",  value: 12 },
 *     { team: "Eng",    task: "API",    value: 16 },
 *     { team: "Eng",    task: "Client", value: 10 },
 *     { team: "QA",     task: "Plan",   value: 4 },
 *   ]}
 *   categoryAccessor="team"
 *   subcategoryAccessor="task"
 *   valueAccessor="value"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Color by subcategory + custom label rotation
 * <SwimlaneChart
 *   data={data}
 *   categoryAccessor="team"
 *   subcategoryAccessor="task"
 *   valueAccessor="hours"
 *   colorBy="task"
 *   showLegend
 * />
 * ```
 */
export declare const SwimlaneChart: {
    <TDatum extends Datum = Datum>(props: SwimlaneChartProps<TDatum> & React.RefAttributes<RealtimeFrameHandle>): React.ReactElement | null;
    displayName?: string;
};
