import { color, destructor } from '@synnaxlabs/x';
import { CSSProperties, DetailedHTMLProps, HTMLAttributes, PropsWithChildren, ReactElement, Ref } from 'react';
import { z } from 'zod';
import { Aether } from '../aether';
import { lineplot } from './aether';
import { Viewport } from '../viewport';
import { grid } from '../vis/grid';
type HTMLDivProps = DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
export interface ContextValue {
    id: string;
    setGridEntry: (meta: grid.Region) => void;
    removeGridEntry: (key: string) => void;
    setLine: (meta: LineSpec) => void;
    removeLine: (key: string) => void;
    lines: LineSpec[];
    setViewport: (viewport: Viewport.UseEvent) => void;
    addViewportHandler: (handler: Viewport.UseHandler) => destructor.Destructor;
    setHold: (hold: boolean) => void;
}
declare const useContext: (hookOrComponentName: string) => ContextValue;
export { useContext };
export declare const useViewport: (handle: Viewport.UseHandler, component: string) => void;
export declare const useGridEntry: (meta: grid.Region, component: string) => CSSProperties;
export interface LineSpec {
    key: string;
    legendGroup: string;
    color: color.Crude;
    label: string;
    visible: boolean;
}
/** Ref handle exposed by LinePlot for imperative access */
export interface LinePlotRef {
    /** Returns the current bounds for all axes */
    getBounds: () => Promise<lineplot.AxesBounds>;
}
export interface LinePlotProps extends PropsWithChildren, Partial<Pick<z.input<typeof lineplot.linePlotStateZ>, "clearOverScan" | "hold" | "visible">>, Omit<HTMLDivProps, "ref">, Aether.ComponentProps {
    resizeDebounce?: number;
    onHold?: (hold: boolean) => void;
    ref?: Ref<LinePlotRef>;
}
export declare const LinePlot: ({ aetherKey, style, resizeDebounce: debounce, clearOverScan, children, hold, onHold, visible, ref, ...rest }: LinePlotProps) => ReactElement;
//# sourceMappingURL=LinePlot.d.ts.map