import { ScaleBand, ScaleLinear, ScaleLogarithmic, ScalePower, ScaleTime } from "d3-scale"; import { CurveFactory, Series } from "d3-shape"; import * as React from "react"; import { StyleProp, ViewStyle } from "react-native"; import { CommonPathProps, LinearGradientProps, LineProps, PathProps, RadialGradientProps, TextProps, } from "react-native-svg"; export type ScaleType = | ScaleLinear | ScaleLogarithmic | ScalePower | ScaleTime; export interface AccessorFunctionProps { index: number; item: T; } export type ScaleFunction = () => ScaleType | ScaleBand; export type AccessorFunction = (props: AccessorFunctionProps) => U; export type SortFunction = (a: T, b: T) => number; export type OffsetFunction = (series: Series, order: number[]) => void; export type OrderFunction = (series: Series) => number[]; // Chart export interface ChartProps { data: T[]; children?: React.ReactNode; style?: StyleProp | undefined; animate?: boolean | undefined; animationDuration?: number | undefined; svg?: Partial | undefined; width?: number | undefined; height?: number | undefined; curve?: CurveFactory | undefined; contentInset?: { top?: number | undefined; left?: number | undefined; right?: number | undefined; bottom?: number | undefined; } | undefined; gridMin?: number | undefined; gridMax?: number | undefined; gridProps?: GridProps | undefined; numberOfTicks?: number | undefined; xScale?: ScaleFunction | undefined; yScale?: ScaleFunction | undefined; xAccessor?: AccessorFunction | undefined; yAccessor?: AccessorFunction | undefined; yMin?: number | undefined; yMax?: number | undefined; xMin?: number | undefined; xMax?: number | undefined; } // Line Chart export class LineChart extends React.PureComponent> { } // Pie Chart export interface PieChartData { svg?: Partial | undefined; key: string | number; value?: number | undefined; arc?: { outerRadius?: number | string | undefined; cornerRadius?: number | string | undefined; } | undefined; } export interface PieChartProps extends ChartProps { innerRadius?: number | string | undefined; outerRadius?: number | string | undefined; labelRadius?: number | string | undefined; padAngle?: number | undefined; startAngle?: number | undefined; endAngle?: number | undefined; sort?: SortFunction | undefined; valueAccessor?: AccessorFunction | undefined; } export class PieChart extends React.PureComponent> { } // Area Chart export interface AreaChartProps extends ChartProps { start?: number | undefined; } export class AreaChart extends React.PureComponent> { } // Stacked Area Chart export interface StackedAreaChartProps extends ChartProps { keys: ReadonlyArray; colors: string[]; offset?: OffsetFunction | undefined; order?: OrderFunction | undefined; renderGradient?: | ((props: { id: string; width: number; height: number; x: number; y: number; index: number; key: keyof T; color: string; }) => React.Component) | undefined; showGrid?: boolean | undefined; extras?: any[] | undefined; renderDecorator?: (() => {}) | undefined; } export class StackedAreaChart extends React.PureComponent> { static extractDataPoints( data: T[], keys: ReadonlyArray, order?: OrderFunction, offset?: OffsetFunction, ): number[]; } // Bar Chart export interface BarChartProps extends ChartProps { spacingInner?: number | undefined; spacingOuter?: number | undefined; horizontal?: boolean | undefined; } export class BarChart extends React.PureComponent> { } // Stacked Bar Chart export interface StackedBarChartProps extends BarChartProps { keys: ReadonlyArray; colors: string[]; offset?: OffsetFunction | undefined; order?: OrderFunction | undefined; strokeColor?: string | undefined; renderGradient?: | ((props: { id: string }) => React.Component) | undefined; showGrid?: boolean | undefined; extras?: any[] | undefined; extra?: (() => {}) | undefined; } export class StackedBarChart extends React.PureComponent> { static extractDataPoints( data: T, keys: ReadonlyArray, order?: OrderFunction, offset?: OffsetFunction, ): number[]; } // Axis export interface AxisProps { style?: StyleProp | undefined; data: T[]; spacingInner?: number | undefined; spacingOuter?: number | undefined; formatLabel?: ((value: any, index: number) => number | string) | undefined; scale?: ScaleFunction | undefined; numberOfTicks?: number | undefined; svg?: Partial | undefined; } // XAxis export interface XAxisProps extends AxisProps { contentInset?: { left?: number | undefined; right?: number | undefined; } | undefined; xAccessor?: AccessorFunction | undefined; } export class XAxis extends React.PureComponent> { } // YAxis export interface YAxisProps extends AxisProps { style?: StyleProp | undefined; contentInset?: { top?: number | undefined; bottom?: number | undefined; } | undefined; min?: number | undefined; max?: number | undefined; yAccessor?: AccessorFunction | undefined; } export class YAxis extends React.PureComponent> { } // Progress Circle export interface ProgressCircleProps { progress: number; style?: StyleProp | undefined; progressColor?: string | undefined; backgroundColor?: string | undefined; strokeWidth?: number | undefined; cornerRadius?: number | string | undefined; startAngle?: number | undefined; endAngle?: number | undefined; animate?: boolean | undefined; animateDuration?: number | undefined; } export class ProgressCircle extends React.PureComponent { } // Horizontal Line export interface HorizontalLineProps { stroke: string; } // Point export interface PointProps { value?: number | undefined; radius?: number | undefined; index?: number | undefined; color?: string | undefined; } // Tooltip export interface TooltipProps { value?: number | undefined; index?: number | undefined; height?: number | undefined; stroke?: string | undefined; text: string; pointStroke?: string | undefined; } export namespace Decorators { export class HorizontalLine extends React.Component {} export class Point extends React.Component {} export class Tooltip extends React.Component {} } export type GridDirection = "VERTICAL" | "HORIZONTAL" | "BOTH"; export interface GridProps { direction?: GridDirection | undefined; belowChart?: boolean | undefined; svg?: Partial | undefined; ticks?: T[] | undefined; x?: ((t: T) => number) | undefined; y?: ((t: T) => number) | undefined; } // Export as Component despite it's FC. export class Grid extends React.Component> { static Direction: { VERTICAL: "VERTICAL"; HORIZONTAL: "HORIZONTAL"; BOTH: "BOTH"; }; } export interface AnimatedPathProps extends CommonPathProps { animated?: boolean | undefined; animationDuration?: number | undefined; renderPlaceholder?: (() => any) | undefined; } export class Path extends React.Component { }