import * as React from 'react';
import { FunctionComponent, SVGProps } from 'react';
import { AxisDomain, AxisDomainTypeInput, BaseTickContentProps, PresentationAttributesAdaptChildEvent, RenderableAxisProps, ScaleType, TickItem, TickProp } from '../util/types';
import { defaultPolarAngleAxisProps } from './defaultPolarAngleAxisProps';
import { RequiresDefaultProps } from '../util/resolveDefaultProps';
import { ZIndexable } from '../zIndex/ZIndexLayer';
import { CustomScaleDefinition } from '../util/scale/CustomScaleDefinition';
export interface PolarAngleAxisProps extends Omit<RenderableAxisProps, 'axisLine' | 'tickCount' | 'domain' | 'scale' | 'tick'>, ZIndexable {
    /**
     * Controls axis line element. These are be passed as props to SVG `<line>` element representing the axis line.
     * If `true` then the axis line is drawn using props of the PolarAngleAxis component.
     * If `false` then the axis line is not drawn.
     *
     * Also see `axisLineType` prop to change the shape of the axis line.
     *
     * @defaultValue true
     *
     * @example <PolarAngleAxis axisLine={{ stroke: 'red', strokeWidth: 2 }} />
     * @example <PolarAngleAxis axisLine={false} />
     * @example <PolarAngleAxis stroke='red' strokeWidth={2} strokeDasharray={4} />
     */
    axisLine?: boolean | SVGProps<SVGLineElement>;
    /**
     * @defaultValue false
     */
    allowDecimals?: boolean;
    /**
     * Allow the axis has duplicated categories or not when the type of axis is "category".
     * @defaultValue true
     */
    allowDuplicatedCategory?: boolean;
    /**
     * @defaultValue 0
     */
    angleAxisId?: string | number;
    /**
     * The type of axis line.
     * @defaultValue polygon
     */
    axisLineType?: 'polygon' | 'circle';
    /**
     * The x-coordinate of center.
     * When used inside a chart context, this prop is calculated based on the chart's dimensions,
     * and this prop is ignored.
     *
     * This is only used when rendered outside a chart context.
     */
    cx?: number;
    /**
     * The y-coordinate of center.
     * When used inside a chart context, this prop is calculated based on the chart's dimensions,
     * and this prop is ignored.
     *
     * This is only used when rendered outside a chart context.
     */
    cy?: number;
    /**
     * The orientation of axis text.
     * @defaultValue 'outer'
     */
    orientation?: 'inner' | 'outer';
    /**
     * Specify the domain of axis when the axis is a number axis.
     *
     * If undefined, then the domain is calculated based on the data and dataKeys.
     *
     * The length of domain should be 2, and we will validate the values in domain.
     *
     * Each element in the array can be a number, 'auto', 'dataMin', 'dataMax', a string like 'dataMin - 20', 'dataMax + 100',
     * or a function that accepts a single argument and returns a number.
     *
     * If any element of domain is set to be 'auto', comprehensible scale ticks will be calculated, and the final domain of axis is generated by the ticks.
     * If a function, receives '[dataMin, dataMax]', and must return a computed domain as '[min, max]'.
     *
     * @example <PolarAngleAxis type="number" domain={['dataMin', 'dataMax']} />
     * @example <PolarAngleAxis type="number" domain={[0, 'dataMax']} />
     * @example <PolarAngleAxis type="number" domain={['auto', 'auto']} />
     * @example <PolarAngleAxis type="number" domain={[0, 'dataMax + 1000']} />
     * @example <PolarAngleAxis type="number" domain={['dataMin - 100', 'dataMax + 100']} />
     * @example <PolarAngleAxis type="number" domain={[dataMin => (0 - Math.abs(dataMin)), dataMax => (dataMax * 2)]} />
     * @example <PolarAngleAxis type="number" domain={([dataMin, dataMax]) => { const absMax = Math.max(Math.abs(dataMin), Math.abs(dataMax)); return [-absMax, absMax]; }} />
     * @example <PolarAngleAxis type="number" domain={[0, 100]} allowDataOverflow />
     */
    domain?: AxisDomain;
    /**
     * Scale function determines how data values are mapped to visual values.
     * In other words, decided the mapping between data domain and coordinate range.
     *
     * If undefined, or 'auto', the scale function is created internally according to the type of axis and data.
     *
     * You can define a custom scale, either as a string shortcut to a d3 scale, or as a complete scale definition object.
     *
     * @defaultValue auto
     * @example <PolarAngleAxis scale="log" />
     * @example
     * import { scaleLog } from 'd3-scale';
     * const scale = scaleLog().base(Math.E);
     * <PolarAngleAxis scale={scale} />
     */
    scale?: ScaleType | CustomScaleDefinition | CustomScaleDefinition<string> | CustomScaleDefinition<number> | CustomScaleDefinition<Date>;
    /**
     * The outer radius of circle grid.
     * If set a percentage, the final value is obtained by multiplying the percentage of maxRadius which is calculated by the width, height, cx, cy.
     */
    radius?: number | string;
    /**
     * Defines how the individual label text is rendered.
     * This controls the settings for individual ticks; on a typical axis, there are multiple ticks, depending on your data.
     *
     * If you want to customize the overall axis label, use the `label` prop instead.
     *
     * Options:
     * - `false`: Do not render any tick labels.
     * - `true`: Render tick labels with default settings.
     * - `object`: An object of props to be merged into the internally calculated tick props.
     * - `ReactElement`: A custom React element to be used as the tick label.
     * - `function`: A function that returns a React element for custom rendering of tick labels.
     *
     * @defaultValue true
     */
    tick?: TickProp<BaseTickContentProps>;
    /**
     * The count of axis ticks. Not used if 'type' is 'category'.
     */
    tickCount?: number;
    /**
     * The formatter function of ticks.
     */
    tickFormatter?: (value: any, index: number) => string;
    /**
     * The length of tick line.
     * @defaultValue 8
     */
    tickSize?: number;
    /**
     * The array of every tick's value and angle.
     */
    ticks?: ReadonlyArray<TickItem>;
    /**
     * The type of axis.
     *
     * `category`: Treats data as distinct values.
     * Each value is in the same distance from its neighbors, regardless of their actual numeric difference.
     *
     * `number`: Treats data as continuous range.
     * Values that are numerically closer are placed closer together on the axis.
     *
     * `auto`: the type is inferred based on the chart layout.
     *
     * @defaultValue auto
     */
    type?: AxisDomainTypeInput;
    /**
     * Z-Index of this component and its children. The higher the value,
     * the more on top it will be rendered.
     * Components with higher zIndex will appear in front of components with lower zIndex.
     * If undefined or 0, the content is rendered in the default layer without portals.
     *
     * @since 3.4
     * @defaultValue 500
     * @see {@link https://recharts.github.io/en-US/guide/zIndex/ Z-Index and layers guide}
     */
    zIndex?: number;
    /**
     * The customized event handler of click on the ticks of this axis
     */
    onClick?: (data: any, index: number, e: React.MouseEvent) => void;
    /**
     * The customized event handler of mousedown on the ticks of this axis
     */
    onMouseDown?: (data: any, index: number, e: React.MouseEvent) => void;
    /**
     * The customized event handler of mouseup on the ticks of this axis
     */
    onMouseUp?: (data: any, index: number, e: React.MouseEvent) => void;
    /**
     * The customized event handler of mousemove on the ticks of this axis
     */
    onMouseMove?: (data: any, index: number, e: React.MouseEvent) => void;
    /**
     * The customized event handler of mouseover on the ticks of this axis
     */
    onMouseOver?: (data: any, index: number, e: React.MouseEvent) => void;
    /**
     * The customized event handler of mouseout on the ticks of this axis
     */
    onMouseOut?: (data: any, index: number, e: React.MouseEvent) => void;
    /**
     * The customized event handler of mouseenter on the ticks of this axis
     */
    onMouseEnter?: (data: any, index: number, e: React.MouseEvent) => void;
    /**
     * The customized event handler of mouseleave on the ticks of this axis
     */
    onMouseLeave?: (data: any, index: number, e: React.MouseEvent) => void;
}
type AxisSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGTextElement>, 'scale' | 'type' | 'dangerouslySetInnerHTML'>;
export type Props = AxisSvgProps & PolarAngleAxisProps;
type PropsWithDefaults = RequiresDefaultProps<Props, typeof defaultPolarAngleAxisProps>;
export declare const PolarAngleAxisWrapper: FunctionComponent<PropsWithDefaults>;
/**
 * @provides PolarLabelContext
 * @consumes PolarViewBoxContext
 */
export declare function PolarAngleAxis(outsideProps: Props): React.ReactNode;
export declare namespace PolarAngleAxis {
    var displayName: string;
}
export {};
