import React, { ReactElement } from 'react';
import { AxisStackGroups } from '../util/ChartUtils';
import { LayoutType, StackOffsetType, CategoricalChartOptions, Margin, ChartOffset, BaseAxisProps, Coordinate, ChartCoordinate, TickItem, AxisType } from '../util/types';
import { AccessibilityManager } from './AccessibilityManager';
import { CancelFunction } from '../util/deferer';
export declare type GraphicalItem<Props = Record<string, any>> = ReactElement<Props, string | React.JSXElementConstructor<Props>> & {
    item: ReactElement<Props, string | React.JSXElementConstructor<Props>>;
};
export declare const getAxisMapByAxes: (props: CategoricalChartProps, { axes, graphicalItems, axisType, axisIdKey, stackGroups, dataStartIndex, dataEndIndex, }: {
    axes: ReadonlyArray<ReactElement>;
    graphicalItems: ReadonlyArray<ReactElement>;
    axisType: AxisType;
    axisIdKey: string;
    stackGroups: AxisStackGroups;
    dataStartIndex: number;
    dataEndIndex: number;
}) => AxisMap;
declare type AxisMap = {
    [axisId: string]: BaseAxisProps;
};
export interface CategoricalChartState {
    chartX?: number;
    chartY?: number;
    dataStartIndex?: number;
    dataEndIndex?: number;
    activeTooltipIndex?: number;
    isTooltipActive?: boolean;
    updateId?: number;
    xAxisMap?: AxisMap;
    yAxisMap?: AxisMap;
    zAxisMap?: AxisMap;
    orderedTooltipTicks?: any;
    tooltipAxis?: BaseAxisProps;
    tooltipTicks?: TickItem[];
    graphicalItems?: ReadonlyArray<ReactElement>;
    activeCoordinate?: ChartCoordinate;
    offset?: ChartOffset;
    angleAxisMap?: any;
    radiusAxisMap?: any;
    formattedGraphicalItems?: any;
    activePayload?: any[];
    tooltipAxisBandSize?: number;
    activeItem?: any;
    activeLabel?: string;
    activeIndex?: number;
    xValue?: number;
    yValue?: number;
    legendBBox?: DOMRect | null;
    prevData?: any[];
    prevWidth?: number;
    prevHeight?: number;
    prevLayout?: LayoutType;
    prevStackOffset?: StackOffsetType;
    prevMargin?: Margin;
    prevChildren?: any;
    stackGroups?: AxisStackGroups;
}
export declare type CategoricalChartFunc = (nextState: CategoricalChartState, event: any) => void;
export interface CategoricalChartProps {
    syncId?: number | string;
    syncMethod?: 'index' | 'value' | Function;
    compact?: boolean;
    width?: number;
    height?: number;
    data?: any[];
    layout?: LayoutType;
    stackOffset?: StackOffsetType;
    throttleDelay?: number;
    margin?: Margin;
    barCategoryGap?: number | string;
    barGap?: number | string;
    barSize?: number | string;
    maxBarSize?: number;
    style?: any;
    className?: string;
    children?: any;
    defaultShowTooltip?: boolean;
    onClick?: CategoricalChartFunc;
    onMouseLeave?: CategoricalChartFunc;
    onMouseEnter?: CategoricalChartFunc;
    onMouseMove?: CategoricalChartFunc;
    onMouseDown?: CategoricalChartFunc;
    onMouseUp?: CategoricalChartFunc;
    reverseStackOrder?: boolean;
    id?: string;
    startAngle?: number;
    endAngle?: number;
    cx?: number | string;
    cy?: number | string;
    innerRadius?: number | string;
    outerRadius?: number | string;
    title?: string;
    desc?: string;
    accessibilityLayer?: boolean;
    role?: string;
    tabIndex?: number;
}
export declare const generateCategoricalChart: ({ chartName, GraphicalChild, defaultTooltipEventType, validateTooltipEventTypes, axisComponents, legendContent, formatAxisMap, defaultProps, }: CategoricalChartOptions) => {
    new (props: CategoricalChartProps): {
        uniqueChartId: string;
        clipPathId: string;
        cancelDefer: CancelFunction | null;
        accessibilityManager: AccessibilityManager;
        container?: HTMLElement;
        componentDidMount(): void;
        getSnapshotBeforeUpdate(prevProps: Readonly<CategoricalChartProps>, prevState: Readonly<CategoricalChartState>): null;
        componentDidUpdate(prevProps: CategoricalChartProps): void;
        componentWillUnmount(): void;
        cancelThrottledTriggerAfterMouseMove(): void;
        getTooltipEventType(): import("../util/types").TooltipEventType;
        getMouseInfo(event: React.MouseEvent | React.Touch): {
            xValue: any;
            yValue: any;
            chartX: number;
            chartY: number;
        } | {
            activeTooltipIndex: number;
            activeLabel: any;
            activePayload: any[];
            activeCoordinate: ChartCoordinate;
            chartX: number;
            chartY: number;
        };
        inRange(x: number, y: number, scale?: number): any;
        parseEventsOfWrapper(): any;
        addListener(): void;
        removeListener(): void;
        clearDefer: () => void;
        handleLegendBBoxUpdate: (box: DOMRect | null) => void;
        handleReceiveSyncEvent: (cId: number | string, chartId: string, data: CategoricalChartState) => void;
        handleBrushChange: ({ startIndex, endIndex }: {
            startIndex: number;
            endIndex: number;
        }) => void;
        handleMouseEnter: (e: React.MouseEvent) => void;
        triggeredAfterMouseMove: (e: React.MouseEvent) => any;
        handleItemMouseEnter: (el: any) => void;
        handleItemMouseLeave: () => void;
        handleMouseMove: (e: any) => void;
        handleMouseLeave: (e: any) => void;
        handleOuterEvent: (e: React.MouseEvent | React.TouchEvent) => void;
        handleClick: (e: React.MouseEvent) => void;
        handleMouseDown: (e: React.MouseEvent | React.Touch) => void;
        handleMouseUp: (e: React.MouseEvent | React.Touch) => void;
        handleTouchMove: (e: React.TouchEvent) => void;
        handleTouchStart: (e: React.TouchEvent) => void;
        handleTouchEnd: (e: React.TouchEvent) => void;
        triggerSyncEvent(data: CategoricalChartState): void;
        applySyncEvent(data: CategoricalChartState): void;
        verticalCoordinatesGenerator: ({ xAxis, width, height, offset }: ChartCoordinate, syncWithTicks: Boolean) => number[];
        horizontalCoordinatesGenerator: ({ yAxis, width, height, offset }: ChartCoordinate, syncWithTicks: Boolean) => number[];
        axesTicksGenerator: (axis?: any) => TickItem[];
        filterFormatItem(item: any, displayName: any, childIndex: any): any;
        renderCursor: (element: ReactElement) => React.FunctionComponentElement<any> | React.DetailedReactHTMLElement<{
            payload: any[];
            payloadIndex: number;
            key: string | number;
            className: string;
            xAxis?: any;
            yAxis?: any;
            width?: any;
            height?: any;
            offset?: ChartOffset;
            angle?: number;
            radius?: number;
            cx?: number;
            cy?: number;
            startAngle?: number;
            endAngle?: number;
            innerRadius?: number;
            outerRadius?: number;
            x: number;
            y: number;
            top?: number;
            bottom?: number;
            left?: number;
            right?: number;
            brushBottom?: number;
            stroke: string;
            pointerEvents: string;
        } | {
            payload: any[];
            payloadIndex: number;
            key: string | number;
            className: string;
            stroke: string;
            fill: string;
            x: number;
            y: number;
            width: number;
            height: number;
            top?: number;
            bottom?: number;
            left?: number;
            right?: number;
            brushBottom?: number;
            pointerEvents: string;
        } | {
            payload: any[];
            payloadIndex: number;
            key: string | number;
            className: string;
            cx: number;
            cy: number;
            startAngle: number;
            endAngle: number;
            innerRadius: number;
            outerRadius: number;
            top?: number;
            bottom?: number;
            left?: number;
            right?: number;
            width?: number;
            height?: number;
            brushBottom?: number;
            stroke: string;
            pointerEvents: string;
        } | {
            payload: any[];
            payloadIndex: number;
            key: string | number;
            className: string;
            points: import("../util/cursor/getRadialCursorPoints").RadialCursorPoints | [Coordinate, Coordinate];
            top?: number;
            bottom?: number;
            left?: number;
            right?: number;
            width?: number;
            height?: number;
            brushBottom?: number;
            stroke: string;
            pointerEvents: string;
        }, HTMLElement>;
        renderPolarAxis: (element: any, displayName: string, index: number) => React.DetailedReactHTMLElement<{
            className: any;
            key: any;
            ticks: TickItem[];
            type?: "number" | "category";
            dataKey?: import("../util/types").DataKey<any>;
            hide?: boolean;
            scale?: Function | "auto" | "linear" | "pow" | "sqrt" | "log" | "identity" | "time" | "band" | "point" | "ordinal" | "quantile" | "quantize" | "utc" | "sequential" | "threshold";
            tick?: boolean | React.SVGProps<SVGTextElement> | React.ReactElement<SVGElement, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)> | ((props: any) => React.ReactElement<SVGElement, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)>);
            tickCount?: number;
            axisLine?: boolean | React.SVGProps<SVGLineElement>;
            tickLine?: boolean | React.SVGProps<SVGTextElement>;
            tickSize?: number;
            tickFormatter?: (value: any, index: number) => string;
            allowDataOverflow?: boolean;
            allowDuplicatedCategory?: boolean;
            allowDecimals?: boolean;
            domain?: import("../util/types").AxisDomain;
            includeHidden?: boolean;
            name?: string;
            unit?: string | number;
            axisType?: AxisType;
            range?: number[];
            AxisComp?: any;
            label?: string | number | object | React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)>;
        }, HTMLElement>;
        renderXAxis: (element: any, displayName: string, index: number) => React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)>;
        renderYAxis: (element: any, displayName: string, index: number) => React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)>;
        renderAxis(axisOptions: BaseAxisProps, element: any, displayName: string, index: number): React.ReactElement;
        renderGrid: (element: React.ReactElement) => React.ReactElement;
        renderPolarGrid: (element: React.ReactElement) => React.ReactElement;
        renderLegend: () => React.ReactElement;
        renderTooltip: () => React.ReactElement;
        renderBrush: (element: React.ReactElement) => React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)>;
        renderReferenceElement: (element: React.ReactElement, displayName: string, index: number) => React.ReactElement;
        renderActivePoints: ({ item, activePoint, basePoint, childIndex, isRange }: any) => React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any>) | (new (props: any) => React.Component<any, any, any>)>[];
        renderGraphicChild: (element: React.ReactElement, displayName: string, index: number) => any[];
        renderCustomized: (element: React.ReactElement, displayName: string, index: number) => React.ReactElement;
        renderClipPath(): React.JSX.Element;
        getXScales(): {
            [x: string]: Function | "auto" | "linear" | "pow" | "sqrt" | "log" | "identity" | "time" | "band" | "point" | "ordinal" | "quantile" | "quantize" | "utc" | "sequential" | "threshold";
        };
        getYScales(): {
            [x: string]: Function | "auto" | "linear" | "pow" | "sqrt" | "log" | "identity" | "time" | "band" | "point" | "ordinal" | "quantile" | "quantize" | "utc" | "sequential" | "threshold";
        };
        getXScaleByAxisId(axisId: string): Function | "auto" | "linear" | "pow" | "sqrt" | "log" | "identity" | "time" | "band" | "point" | "ordinal" | "quantile" | "quantize" | "utc" | "sequential" | "threshold";
        getYScaleByAxisId(axisId: string): Function | "auto" | "linear" | "pow" | "sqrt" | "log" | "identity" | "time" | "band" | "point" | "ordinal" | "quantile" | "quantize" | "utc" | "sequential" | "threshold";
        getItemByXY(chartXY: {
            x: number;
            y: number;
        }): {
            graphicalItem: any;
            payload: any;
        };
        render(): React.JSX.Element;
        context: any;
        setState<K extends "offset" | "activeIndex" | "prevData" | "prevWidth" | "updateId" | "graphicalItems" | "dataStartIndex" | "dataEndIndex" | "chartX" | "chartY" | "activeTooltipIndex" | "isTooltipActive" | "xAxisMap" | "yAxisMap" | "zAxisMap" | "orderedTooltipTicks" | "tooltipAxis" | "tooltipTicks" | "activeCoordinate" | "angleAxisMap" | "radiusAxisMap" | "formattedGraphicalItems" | "activePayload" | "tooltipAxisBandSize" | "activeItem" | "activeLabel" | "xValue" | "yValue" | "legendBBox" | "prevHeight" | "prevLayout" | "prevStackOffset" | "prevMargin" | "prevChildren" | "stackGroups">(state: CategoricalChartState | ((prevState: Readonly<CategoricalChartState>, props: Readonly<CategoricalChartProps>) => CategoricalChartState | Pick<CategoricalChartState, K>) | Pick<CategoricalChartState, K>, callback?: () => void): void;
        forceUpdate(callback?: () => void): void;
        readonly props: Readonly<CategoricalChartProps> & Readonly<{
            children?: React.ReactNode;
        }>;
        state: Readonly<CategoricalChartState>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        shouldComponentUpdate?(nextProps: Readonly<CategoricalChartProps>, nextState: Readonly<CategoricalChartState>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<CategoricalChartProps>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<CategoricalChartProps>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<CategoricalChartProps>, nextState: Readonly<CategoricalChartState>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<CategoricalChartProps>, nextState: Readonly<CategoricalChartState>, nextContext: any): void;
    };
    displayName: string;
    defaultProps: CategoricalChartProps;
    getDerivedStateFromProps: (nextProps: CategoricalChartProps, prevState: CategoricalChartState) => CategoricalChartState;
    renderActiveDot: (option: any, props: any) => React.ReactElement;
    contextType?: React.Context<any>;
};
export {};
