interpolated-charts
Version:
Configurable d3 v4 charts with interpolation and missing data range
491 lines (402 loc) • 12 kB
TypeScript
/// <reference types="d3" />
/// <reference types="d3-selection" />
import * as m from './index.js';
declare module './index.js' {
interface TickFormat {
(domainValue: any, index: number): string;
}
/* Line chart */
interface PathDataSet {
name: string;
color?: string;
data: { date: Date, value: number }[];
}
interface PointData {
date: Date;
value: number;
x: number;
y: number;
interpolatedX: number;
interpolatedY: number;
interpolatedDate: Date;
interpolatedValue: number;
name: string;
color: string;
}
interface LineChartConfig {
width?: number;
height?: number;
margin?: {
top?: number,
right?: number,
bottom?: number,
left?: number
};
maxTimeRangeDifferenceToDraw?: number;
xAxisTimeFormat?: TickFormat;
yAxisValueFormat?: TickFormat;
curve?: d3.CurveFactory;
interpolationMaxIterationCount?: number;
interpolationAccuracy?: number;
mouseMoveTimeTreshold?: number;
xAxisDateFrom?: Date;
xAxisDateTo?: Date;
}
interface MouseEventChartData {
date: Date;
value: number;
x: number;
y: number;
interpolatedX: number;
interpolatedY: number;
interpolatedDate: Date;
interpolatedValue: number;
name: string;
color: string;
}
interface LineChart {
(selection: any): void;
width: {
(width: number): LineChart;
(): number;
};
height: {
(height: number): LineChart;
(): number;
};
margin: {
(margin: { top: number, right: number, bottom: number, left: number }): LineChart;
(): { top: number, right: number, bottom: number, left: number };
};
on: (event: string, callback: (...args: any[]) => void, ...args: any[]) => LineChart;
maxTimeRangeDifferenceToDraw: {
(maxTimeRangeDifferenceToDraw: number): LineChart;
(): number;
};
xAxisTimeFormat: {
(xAxisTimeFormat: TickFormat): LineChart;
(): TickFormat;
};
yAxisValueFormat: {
(yAxisValueFormat: TickFormat): LineChart;
(): TickFormat;
};
curve: {
(curve: d3.CurveFactory): LineChart;
(): d3.CurveFactory;
}
interpolationMaxIterationCount: {
(interpolationMaxIterationCount: number): LineChart;
(): number;
}
interpolationAccuracy: {
(interpolationAccuracy: number): LineChart;
(): number;
}
mouseMoveTimeTreshold: {
(mouseMoveTimeTreshold: number): LineChart;
(): number;
}
xAxisDateFrom: {
(xAxisDateFrom: Date): LineChart;
(): Date;
};
xAxisDateTo: {
(xAxisDateTo: Date): LineChart;
(): Date;
};
chartHeight: () => number;
chartWidth: () => number;
}
/* Bar chart */
interface BarChartConfig {
width?: number;
height?: number;
margin?: {
top?: number,
right?: number,
bottom?: number,
left?: number
};
setStackWidth?: (chartWidth:number, numberOfBars: number) => number;
maxTimeRangeDifferenceToDraw?: number;
stackTimeDiapason?: number;
xAxisTimeFormat?: TickFormat;
yAxisValueFormat?: TickFormat;
xAxisDateFrom?: Date;
xAxisDateTo?: Date;
yAxisValueFrom?: number;
yAxisValueTo?: number;
}
interface MouseEventBarChartData {
dataSum: number;
dateFrom: Date;
dateTo: Date;
date: Date;
data: {
name: string;
value: number;
previousValueSum: number;
color: string;
date: Date;
dateFrom: Date;
dateTo: Date;
}
}
interface BarChart {
(selection: any): void;
width: {
(width: number): BarChart;
(): number;
};
height: {
(height: number): BarChart;
(): number;
};
margin: {
(margin: { top: number, right: number, bottom: number, left: number }): BarChart;
(): { top: number, right: number, bottom: number, left: number };
};
setStackMargin: {
(setStackMargin: (chartWidth:number, numberOfBars: number) => number): BarChart;
(): (chartWidth:number, numberOfBars: number) => number;
}
on: (event: string, callback: (...args: any[]) => void, ...args: any[]) => BarChart;
maxTimeRangeDifferenceToDraw: {
(maxTimeRangeDifferenceToDraw: number): BarChart;
(): number;
};
stackTimeDiapason: {
(stackTimeDiapason: number): BarChart;
(): number;
};
xAxisTimeFormat: {
(xAxisTimeFormat: TickFormat): BarChart;
(): TickFormat;
};
yAxisValueFormat: {
(yAxisValueFormat: TickFormat): BarChart;
(): TickFormat;
};
xAxisDateFrom: {
(curve: d3.CurveFactory): BarChart;
(): d3.CurveFactory;
}
xAxisDateTo: {
(interpolationMaxIterationCount: number): BarChart;
(): number;
}
yAxisValueFrom: {
(xAxisDateFrom: Date): BarChart;
(): Date;
};
yAxisValueTo: {
(xAxisDateTo: Date): BarChart;
(): Date;
};
chartHeight: () => number;
chartWidth: () => number;
}
/* Stack chart */
interface StackBarData {
name: string;
backgroundColor?: string;
data: {
date: Date,
color?: string,
value: any
}[];
}
interface StackBarEventData {
interpolatedDate: Date;
from: Date;
to: Date;
value: any;
name: string;
color: string;
}
interface StackBarConfig {
width?: number;
height?: number;
margin?: {
top?: number,
right?: number,
bottom?: number,
left?: number
};
marginBetweenStacks?: number;
backgroundColor?: string;
maxTimeRangeDifferenceToDraw?: number;
xAxisTimeFormat?: TickFormat;
mouseMoveTimeTreshold?: number;
xAxisDateFrom: Date;
xAxisDateTo: Date;
}
interface StackBarPointData extends StackBarData {
interpolatedDate: Date;
}
interface StackBarChart {
(selection: any): void;
width: {
(width: number): StackBarChart;
(): number;
};
height: {
(height: number): StackBarChart;
(): number;
};
margin: {
(margin: { top: number, right: number, bottom: number, left: number }): StackBarChart;
(): { top: number, right: number, bottom: number, left: number };
};
marginBetweenStacks: {
(marginBetweenStacks: number): StackBarChart;
(): number;
}
backgroundColor: {
(backgroundColor: string): StackBarChart;
(): string;
};
on: (event: string, callback: (...args: any[]) => void, ...args: any[]) => StackBarChart;
maxTimeRangeDifferenceToDraw: {
(maxTimeRangeDifferenceToDraw: number): StackBarChart;
(): number;
};
xAxisTimeFormat: {
(xAxisTimeFormat: TickFormat): StackBarChart;
(): TickFormat;
};
xAxisDateFrom: {
(xAxisDateFrom: Date): StackBarChart;
(): Date;
};
xAxisDateTo: {
(xAxisDateTo: Date): StackBarChart;
(): Date;
};
mouseMoveTimeTreshold: {
(mouseMoveTimeTreshold: number): StackBarChart;
(): number;
}
}
/* Plugins */
interface MarkersConfig {
cx?: (markerData: PointData) => number;
cy?: (markerData: PointData) => number;
radius?: (markerData: PointData) => number;
fill?: (markerData: PointData) => string;
stroke?: (markerData: PointData) => string;
strokeWidth?: (markerData: PointData) => number;
sort?: (markerData1: PointData, markerData2: PointData) => number;
}
interface Markers {
(selection: any): void;
remove: () => Markers;
show: ({ data }: { data: PointData[] }) => Markers;
cx: {
(cx: (markerData: PointData) => number): Markers;
(): (markerData: PointData) => number;
};
cy: {
(cy: (markerData: PointData) => number): Markers;
(): (markerData: PointData) => number;
};
radius: {
(radius: (markerData: PointData) => number): Markers;
(): (markerData: PointData) => number;
};
fill: {
(fill: (markerData: PointData) => string): Markers;
(): (markerData: PointData) => string;
};
stroke: {
(stroke: (markerData: PointData) => string): Markers;
(): (markerData: PointData) => string;
};
strokeWidth: {
(strokeWidth: (markerData: PointData) => number): Markers;
(): (markerData: PointData) => number;
};
sort: {
(sort: (markerData1: PointData, markerData2: PointData) => number): Markers;
(): (markerData1: PointData, markerData2: PointData) => number;
};
}
interface TooltipConfig {
chartHeight?: number;
chartWidth?: number;
tooltipWidth?: number;
horizontalMouseMargin?: number;
verticalBorderMargin?: number;
headerFormatter?: (selectedDate: Date, data: PointData[] | StackBarEventData[] ) => string;
topicFormatter?: (data: PointData | StackBarEventData) => string;
valueFormatter?: (data: PointData | StackBarEventData) => string;
sort?: (markerData1: PointData | StackBarEventData, markerData2: PointData | StackBarEventData) => number;
}
interface Tooltip {
(selection: any): void;
remove: () => Tooltip;
show: ({ x, y, selectedDate, data }: { x: number, y: number, selectedDate: Date, data: PointData[] | StackBarEventData[]}) => Tooltip;
chartHeight: {
(chartHeight: number): Tooltip;
(): number;
};
chartWidth: {
(chartWidth: number): Tooltip;
(): number;
};
tooltipWidth: {
(tooltipWidth: number): Tooltip;
(): number;
};
horizontalMouseMargin: {
(horizontalMouseMargin: number): Tooltip;
(): number;
};
verticalBorderMargin: {
(verticalBorderMargin: number): Tooltip;
(): number;
};
headerFormatter: {
(headerFormatter: (selectedDate: Date, data: PointData[] | StackBarEventData[]) => string): Tooltip;
(): (selectedDate: Date, data: PointData[] | StackBarEventData[]) => string;
};
topicFormatter: {
(topicFormatter: (data: PointData | StackBarEventData) => string): Tooltip;
(): (data: PointData | StackBarEventData) => string;
};
valueFormatter: {
(valueFormatter: (data: PointData | StackBarEventData) => string): Tooltip;
(): (data: PointData | StackBarEventData) => string;
};
sort: {
(sort: (markerData1: PointData | StackBarEventData, markerData2: PointData | StackBarEventData) => number): Tooltip;
(): (markerData1: PointData | StackBarEventData, markerData2: PointData | StackBarEventData) => number;
};
}
interface VerticalDividerConfig {
height?: number;
}
interface VerticalDivider {
(selection: any): void;
remove: () => VerticalDivider;
show: () => VerticalDivider;
update: ({ x }: { x: number }) => VerticalDivider;
height: {
(height: number): VerticalDivider;
(): number;
}
}
export function line(config?: LineChartConfig): LineChart;
export function bar(config?: BarChartConfig): BarChart;
export function stackBar(config?: StackBarConfig): StackBarChart;
export const chartEvents: {
chartMouseEnter: string;
chartMouseLeave: string;
chartMouseMove: string;
chartMouseClick: string;
};
export function markers(config?: MarkersConfig): Markers;
export function tooltip(config?: TooltipConfig): Tooltip;
export function verticalDivider(config?: VerticalDividerConfig): VerticalDivider;
}