///
import React from 'react';
import * as d3 from 'd3';
import { FormatValue } from "../_private/types";
import { GridConfig } from "./components/Axis/index";
import { Threshold } from "./components/Threshold/index";
import { ZoomState } from "./components/Zoom/index";
export declare type Item = {
x: number | null;
y: number | null;
};
export declare type NotEmptyItem = {
x: number;
y: number;
};
export declare const itemIsNotEmpty: (item: Item) => item is NotEmptyItem;
declare type ThresholdLine = {
name?: string;
values: readonly NotEmptyItem[];
};
export declare type Threshold = {
max: ThresholdLine;
min?: ThresholdLine;
};
export declare type Boundary = {
color: string;
value: readonly [number, number];
};
export declare type Line = {
values: readonly Item[];
dots?: boolean;
withGradient?: boolean;
withBoundaries?: boolean;
lineName: string;
color: string;
};
export declare type NumberRange = readonly [number, number];
export declare type TickValues = readonly number[];
export declare type ScaleLinear = d3.ScaleLinear;
export declare const directionsX: readonly ["toRight", "toLeft"];
export declare type DirectionX = typeof directionsX[number];
export declare const directionsY: readonly ["toTop", "toBottom"];
export declare type DirectionY = typeof directionsY[number];
export declare const axes: readonly ["x", "y"];
export declare type Axis = typeof axes[number];
declare type Props = {
directionX?: DirectionX;
directionY?: DirectionY;
lines: readonly Line[];
gridConfig: GridConfig;
threshold?: Threshold;
withZoom?: boolean;
isHorizontal: boolean;
formatValueForLabel?: FormatValue;
formatValueForTooltip?: FormatValue;
formatValueForTooltipTitle?: FormatValue;
unit?: string;
title?: React.ReactNode;
onClickHoverLine?: (value: number) => void;
background?: string;
} & ({
boundaries?: never;
} | {
boundaries: readonly Boundary[];
boundariesAxis: Axis;
showBoundariesOnAxis: boolean;
});
export declare type HoveredMainValue = number | undefined;
declare type State = {
xDomain: NumberRange;
yDomain: NumberRange;
width: number;
height: number;
paddingX: number;
paddingY: number;
zoom: ZoomState;
xGuideValue: number;
yGuideValue: number;
hoveredMainValue: HoveredMainValue;
};
export declare const TRANSITION_DURATIONS: {
ZOOM: number;
SIZE: number;
};
export declare const domainPaddings: {
horizontal: {
top: number;
right: number;
bottom: number;
left: number;
};
vertical: {
top: number;
bottom: number;
right: number;
left: number;
};
};
export declare class LinearChart extends React.Component {
ref: React.RefObject;
svgWrapperRef: React.RefObject;
resizeObserver: ResizeObserver;
paddingTransitionEl: Element;
secondaryDomainTransitionEl: Element;
uid: string;
lineClipId: string;
dotsClipId: string;
boundariesGradientId: string;
state: State;
targetSecondaryDomain: NumberRange;
targetPaddings: {
paddingX: number;
paddingY: number;
};
componentDidMount(): void;
componentDidUpdate(prevProps: Props): void;
componentWillUnmount(): void;
render(): JSX.Element;
isXInverted: () => boolean;
isYInverted: () => boolean;
getXDomain: (items: readonly Item[]) => NumberRange;
getYDomain: (items: readonly Item[]) => NumberRange;
getThresholdLines: () => (readonly NotEmptyItem[])[];
getAllThresholdValues: () => readonly Item[];
getLines: () => readonly Line[];
getThreshold: () => Threshold | undefined;
getAllValues: () => readonly Item[];
getSvgSize: () => {
svgWidth: number;
svgHeight: number;
};
getTicks: () => {
mainGridTickValues: TickValues;
mainLabelTickValues: readonly number[];
secondaryGridTickValues: number[];
secondaryLabelTickValues: readonly number[];
};
updateDomains(): void;
updateSize: () => void;
onAxisSizeChange: ({ xAxisHeight, yAxisWidth }: {
xAxisHeight: number;
yAxisWidth: number;
}) => void;
getAxis: () => {
main: {
currentDomain: NumberRange;
getDomain: (items: readonly Item[]) => NumberRange;
setDomain: (domain: NumberRange) => void;
getValue: (v: NotEmptyItem) => number;
};
secondary: {
currentDomain: NumberRange;
getDomain: (items: readonly Item[]) => NumberRange;
setDomain: (domain: NumberRange) => void;
isInverted: boolean;
};
};
onZoom: (newZoom: ZoomState) => void;
setHoveredMainValue: (newValue: HoveredMainValue) => void;
}
export {};