import { type ReactElement } from "react";
import { type channel } from "@synnaxlabs/client";
import { type TimeRange, type TimeSpan } from "@synnaxlabs/x";
import { type Color } from '../color';
import { type Text } from '../text';
import { type Viewport } from '../viewport';
import { LinePlot as Core } from '../vis/lineplot';
/** 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: number;
        x?: number;
    };
    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;
    enableTooltip?: boolean;
    enableMeasure?: boolean;
    initialViewport?: Viewport.UseProps["initial"];
    onViewportChange?: Viewport.UseProps["onChange"];
    viewportTriggers?: Viewport.UseProps["triggers"];
}
export declare const LinePlot: ({ lines, axes, showTitle, title, onTitleChange, showLegend, titleLevel, onLineChange, onRuleChange, onAxisChannelDrop, onAxisChange, rules, enableTooltip, enableMeasure, initialViewport, onViewportChange, viewportTriggers, ...props }: LinePlotProps) => ReactElement;
