@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
98 lines (97 loc) • 4.03 kB
TypeScript
import * as React from 'react';
export interface IGraphContext extends IHandlerRegistration, IDataRegistration {
XDomain: [number, number];
XHover: number;
XHoverSnap: number;
YHover: number[];
YHoverSnap: number[];
YDomain: [number, number][];
CurrentMode: SelectType;
Data: React.MutableRefObject<Map<string, IDataSeries>>;
DataGuid: string;
MassEnableCommand: {
requester: string;
command: "disable-others" | "enable-all" | "none";
};
XApplyPixelOffset: (x: number) => number;
YApplyPixelOffset: (y: number) => number;
XTransformation: (x: number) => number;
YTransformation: (y: number, axis: AxisIdentifier | number) => number;
UpdateFlag: number;
XInverseTransformation: (p: number) => number;
YInverseTransformation: (p: number, axis: AxisIdentifier | number) => number;
SetXDomain: React.SetStateAction<[number, number]> | ((t: [number, number]) => void);
SetYDomain: React.SetStateAction<[number, number]> | ((t: [number, number][]) => void);
}
export declare const GraphContext: React.Context<IGraphContext>;
export interface IDataSeries {
getMin: (tDomain: [number, number]) => number | undefined;
getMax: (tDomain: [number, number]) => number | undefined;
getPoints: (xValue: number, pointsAround?: number) => [...number[]][] | undefined;
enabled: boolean;
axis: AxisIdentifier | undefined;
legend?: React.ReactElement;
}
export type LineStyle = '-' | ':' | 'solid' | 'dash' | 'short-dash' | 'long-dash';
export declare const LineMap: Map<LineStyle, string>;
export type FillStyle = 'fill';
export type AxisIdentifier = 'left' | 'right';
export type SelectType = 'zoom-rectangular' | 'zoom-vertical' | 'zoom-horizontal' | 'pan' | 'select';
declare class AxisMapClass<T, U> {
private mapBase;
private undefinedOverride;
size: number;
constructor(iterable: Iterable<[T, U]>, undefinedOverride: U);
get: (key: T) => U;
values: () => IterableIterator<U>;
keys: () => IterableIterator<T>;
}
export declare const AxisMap: AxisMapClass<AxisIdentifier | undefined, number>;
export interface IHandlers {
onClick?: (x: number, y: number) => void;
onRelease?: (x: number, y: number) => void;
onPlotLeave?: (x: number, y: number) => void;
onMove?: (x: number, y: number) => void;
axis: number | AxisIdentifier;
allowSnapping: boolean;
}
export interface IDataRegistration {
AddData: ((d: IDataSeries) => string);
RemoveData: (key: string) => void;
UpdateData: (key: string, d: IDataSeries) => void;
SetLegend: (key: string, legend?: React.ReactElement) => void;
}
export interface IHandlerRegistration {
RegisterSelect: (handlers: IHandlers) => string;
RemoveSelect: (key: string) => void;
UpdateSelect: (key: string, handlers: IHandlers) => void;
}
export interface IActionFunctions {
setTDomain: React.SetStateAction<[number, number]>;
setYDomain: React.SetStateAction<[number, number][]>;
}
interface IContextWrapperProps extends IHandlerRegistration, IDataRegistration {
XDomain: [number, number];
MousePosition: [number, number];
MousePositionSnap: [number, number];
YDomain: [number, number][];
CurrentMode: SelectType;
MouseIn: boolean;
UpdateFlag: number;
Data: React.MutableRefObject<Map<string, IDataSeries>>;
DataGuid: string;
MassEnableCommand: {
requester: string;
command: "disable-others" | "enable-all" | "none";
};
XApplyPixelOffset: (_: number) => number;
YApplyPixelOffset: (_: number) => number;
XTransform: (x: number) => number;
YTransform: (y: number, axis: AxisIdentifier | number) => number;
XInvTransform: (p: number) => number;
YInvTransform: (p: number, axis: AxisIdentifier | number) => number;
SetXDomain: (x: [number, number]) => void;
SetYDomain: (y: [number, number][]) => void;
}
export declare const ContextWrapper: (props: React.PropsWithChildren<IContextWrapperProps>) => JSX.Element;
export {};