import { channel } from '@synnaxlabs/client';
import { color, TimeRange, TimeSpan, xy } from '@synnaxlabs/x';
import { ReactElement, Ref } from 'react';
import { LinePlot as Base } from '../lineplot';
import { Range } from '../lineplot/range';
import { telem } from '../telem/aether';
import { Text } from '../text';
import { Viewport } from '../viewport';
import { measure } from '../vis/measure/aether';
/** Props for an axis in {@link LinePlot} */
export interface AxisProps extends Omit<Base.AxisProps, "axisKey"> {
    /** A unique identifier for the axis */
    key: string;
}
export interface BaseLineProps {
    key: string;
    axes: {
        x: string;
        y: string;
    };
    channels: {
        y: channel.KeyOrName;
        x?: channel.KeyOrName;
    };
    color: color.Crude;
    strokeWidth?: number;
    label?: string;
    downsample?: number;
    downsampleMode?: telem.DownsampleMode;
}
export interface StaticLineProps extends BaseLineProps {
    variant: "static";
    timeRange: TimeRange;
}
export interface DynamicLineProps extends BaseLineProps {
    variant: "dynamic";
    timeSpan: TimeSpan;
}
export type LineProps = StaticLineProps | DynamicLineProps;
export interface RuleProps {
    key: string;
    position: number;
    color: color.Crude;
    axis: string;
    label: string;
    lineWidth?: number;
    lineDash?: number;
    units?: string;
}
export interface LinePlotProps extends Omit<Base.LinePlotProps, "ref"> {
    axes: AxisProps[];
    onAxisChannelDrop?: (axis: string, channels: channel.Key[]) => void;
    onAxisChange?: (axis: Partial<AxisProps> & {
        key: string;
    }) => void;
    lines: LineProps[];
    onLineChange?: (line: Partial<LineProps> & {
        key: string;
    }) => void;
    rules?: RuleProps[];
    onRuleChange?: (rule: Partial<RuleProps> & {
        key: string;
    }) => void;
    onSelectRule?: (key: string) => void;
    title?: string;
    showTitle?: boolean;
    onTitleChange?: (value: string) => void;
    titleLevel?: Text.Level;
    showLegend?: boolean;
    legendVariant?: Base.LegendProps["variant"];
    legendPosition?: xy.XY;
    onLegendPositionChange?: (value: xy.XY) => void;
    enableTooltip?: boolean;
    enableMeasure?: boolean;
    initialViewport?: Viewport.UseProps["initial"];
    onViewportChange?: Viewport.UseProps["onChange"];
    viewportTriggers?: Viewport.UseProps["triggers"];
    rangeProviderProps?: Range.ProviderProps;
    measureMode?: measure.Mode;
    onMeasureModeChange?: (mode: measure.Mode) => void;
    ref?: Ref<Base.LinePlotRef>;
}
/**
 * A line plot component that automatically pulls data from specified channels and
 * displays it. Can be used to render both real-time and historical data.
 */
export declare const LinePlot: ({ lines, axes, showTitle, title, onTitleChange, showLegend, legendPosition, onLegendPositionChange, titleLevel, onLineChange, onRuleChange, onAxisChannelDrop, onAxisChange, rules, enableTooltip, enableMeasure, initialViewport, legendVariant, onViewportChange, viewportTriggers, rangeProviderProps, onSelectRule, measureMode, onMeasureModeChange, children, ref, ...rest }: LinePlotProps) => ReactElement;
//# sourceMappingURL=LinePlot.d.ts.map