import { channel } from '@synnaxlabs/client';
import { xy } from '@synnaxlabs/x/spatial';
import { TimeRange, TimeSpan } from '@synnaxlabs/x/telem';
import { ReactElement } from 'react';
import { Color } from '../color';
import { Text } from '../text';
import { Viewport } from '../viewport';
import { LinePlot as Core } from '../vis/lineplot';
import { Range } from '../vis/lineplot/range';
/** Props for an axis in {@link LinePlot} */
export interface AxisProps extends Core.AxisProps {
    /** 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;
}
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 Core.LinePlotProps {
    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;
    title?: string;
    showTitle?: boolean;
    onTitleChange?: (value: string) => void;
    titleLevel?: Text.Level;
    showLegend?: boolean;
    legendPosition?: xy.XY;
    onLegendPositionChange?: (value: xy.XY) => void;
    enableTooltip?: boolean;
    enableMeasure?: boolean;
    initialViewport?: Viewport.UseProps["initial"];
    onViewportChange?: Viewport.UseProps["onChange"];
    viewportTriggers?: Viewport.UseProps["triggers"];
    annotationProvider?: Range.ProviderProps;
}
/**
 * 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.
 *
 * @param props - The props for the line plot
 * @param
 * @returns
 */
export declare const LinePlot: ({ lines, axes, showTitle, title, onTitleChange, showLegend, legendPosition, onLegendPositionChange, titleLevel, onLineChange, onRuleChange, onAxisChannelDrop, onAxisChange, rules, enableTooltip, enableMeasure, initialViewport, onViewportChange, viewportTriggers, annotationProvider, ...props }: LinePlotProps) => ReactElement;
//# sourceMappingURL=LinePlot.d.ts.map