import * as React from 'react';
import { Box, Dimensions, Theme, SvgDefsAndFill, MotionProps, ValueFormat, PropertyAccessor } from '@nivo/core';
import { Arc, ArcGenerator, ArcTransitionMode, ArcLabelsProps, ArcLinkLabelsProps } from '@nivo/arcs';
import { OrdinalColorScaleConfig, InheritedColorConfig } from '@nivo/colors';
import { LegendProps } from '@nivo/legends';
export type DatumId = string | number;
export interface DefaultRawDatum {
    id: DatumId;
    value: number;
}
export interface MayHaveLabel extends Object {
    label?: string | number;
}
export interface PieArc extends Arc {
    index: number;
    angle: number;
    angleDeg: number;
    thickness: number;
    padAngle: number;
}
export interface ComputedDatum<RawDatum> {
    id: DatumId;
    label: DatumId;
    value: number;
    formattedValue: string;
    color: string;
    fill?: string;
    data: RawDatum;
    arc: PieArc;
    hidden: boolean;
}
export interface DataProps<RawDatum> {
    data: readonly RawDatum[];
}
export interface PieTooltipProps<RawDatum> {
    datum: ComputedDatum<RawDatum>;
}
export type MouseEventHandler<RawDatum, ElementType = HTMLCanvasElement> = (datum: ComputedDatum<RawDatum>, event: React.MouseEvent<ElementType>) => void;
export type PieLayerId = 'arcLinkLabels' | 'arcs' | 'arcLabels' | 'legends';
export interface PieCustomLayerProps<RawDatum> {
    dataWithArc: readonly ComputedDatum<RawDatum>[];
    centerX: number;
    centerY: number;
    radius: number;
    innerRadius: number;
    arcGenerator: ArcGenerator;
}
export type PieCustomLayer<RawDatum> = React.FC<PieCustomLayerProps<RawDatum>>;
export type PieLayer<RawDatum> = PieLayerId | PieCustomLayer<RawDatum>;
export type CommonPieProps<RawDatum> = {
    id: PropertyAccessor<RawDatum, DatumId>;
    value: PropertyAccessor<RawDatum, number>;
    valueFormat?: ValueFormat<number>;
    margin: Box;
    sortByValue: boolean;
    innerRadius: number;
    padAngle: number;
    cornerRadius: number;
    startAngle: number;
    endAngle: number;
    fit: boolean;
    activeInnerRadiusOffset: number;
    activeOuterRadiusOffset: number;
    colors: OrdinalColorScaleConfig<Omit<ComputedDatum<RawDatum>, 'color' | 'fill' | 'arc'>>;
    theme: Theme;
    borderWidth: number;
    borderColor: InheritedColorConfig<ComputedDatum<RawDatum>>;
    enableArcLabels: boolean;
    enableArcLinkLabels: boolean;
    isInteractive: boolean;
    tooltip: React.FC<PieTooltipProps<RawDatum>>;
    activeId: DatumId | null;
    onActiveIdChange: (id: DatumId | null) => void;
    defaultActiveId: DatumId | null;
    legends: readonly LegendProps[];
    forwardLegendData: (data: LegendDatum<RawDatum>[]) => void;
    role: string;
    renderWrapper: boolean;
} & Partial<ArcLabelsProps<ComputedDatum<RawDatum>>> & Partial<ArcLinkLabelsProps<ComputedDatum<RawDatum>>>;
export type PieHandlers<RawDatum, ElementType> = {
    onClick?: MouseEventHandler<RawDatum, ElementType>;
    onMouseEnter?: MouseEventHandler<RawDatum, ElementType>;
    onMouseMove?: MouseEventHandler<RawDatum, ElementType>;
    onMouseLeave?: MouseEventHandler<RawDatum, ElementType>;
};
export type PieSvgCustomComponents<RawDatum> = {
    arcLinkLabelComponent?: ArcLinkLabelsProps<ComputedDatum<RawDatum>>['component'];
};
export interface LegendDatum<RawDatum> {
    id: ComputedDatum<RawDatum>['id'];
    label: ComputedDatum<RawDatum>['label'];
    color: string;
    hidden: boolean;
    data: Omit<ComputedDatum<RawDatum>, 'fill' | 'arc'>;
}
export type PieSvgProps<RawDatum> = DataProps<RawDatum> & Dimensions & Partial<CommonPieProps<RawDatum>> & SvgDefsAndFill<ComputedDatum<RawDatum>> & PieHandlers<RawDatum, SVGPathElement> & {
    layers?: readonly PieLayer<RawDatum>[];
    animate?: boolean;
    motionConfig?: MotionProps['motionConfig'];
    transitionMode?: ArcTransitionMode;
} & PieSvgCustomComponents<RawDatum>;
export type CompletePieSvgProps<RawDatum> = DataProps<RawDatum> & Dimensions & CommonPieProps<RawDatum> & SvgDefsAndFill<ComputedDatum<RawDatum>> & PieHandlers<RawDatum, SVGPathElement> & {
    layers: readonly PieLayer<RawDatum>[];
    animate: boolean;
    motionConfig: MotionProps['motionConfig'];
    transitionMode: ArcTransitionMode;
} & PieSvgCustomComponents<RawDatum>;
export type PieCanvasProps<RawDatum> = DataProps<RawDatum> & Dimensions & Partial<CommonPieProps<RawDatum>> & Pick<PieHandlers<RawDatum, HTMLCanvasElement>, 'onClick' | 'onMouseMove'> & {
    pixelRatio?: number;
};
export type CompletePieCanvasProps<RawDatum> = DataProps<RawDatum> & Dimensions & CommonPieProps<RawDatum> & Pick<PieHandlers<RawDatum, HTMLCanvasElement>, 'onClick' | 'onMouseMove'> & {
    pixelRatio: number;
};
//# sourceMappingURL=types.d.ts.map