/// <reference types="react" />
import * as React from 'react';
import { Visibility } from "igniteui-react-core/ES2015/Visibility";
import { HorizontalAlignment } from "igniteui-react-core/ES2015/HorizontalAlignment";
import { VerticalAlignment } from "igniteui-react-core/ES2015/VerticalAlignment";
import { Axis } from './Axis';
import { AxisLabelsLocation } from './AxisLabelsLocation';
import { AxisTitlePosition } from './AxisTitlePosition';
import { RenderRequestedEventArgs } from './RenderRequestedEventArgs';
import { AxisRangeChangedEventArgs } from './igr-axis-range-changed-event-args';
import { AxisAnnotationCollection } from './igr-axis-annotation-collection';
/**
 * Represents the base class from which all axis types are derived.
*/
export declare abstract class IgrAxis<P extends IIgrAxisProps = IIgrAxisProps> extends React.Component<P, {}> {
    protected _implementation: any;
    readonly i: Axis;
    private onImplementationCreated();
    constructor(props: P);
    componentDidMount(): void;
    protected initializeProperties(): void;
    readonly axisInternal: Axis;
    protected createImplementation(): Axis;
    shouldComponentUpdate(nextProps: any, nextState: any): boolean;
    render(): any;
    name: string;
    provideData(data: any): void;
    private _renderer;
    private _provideRenderer(renderer);
    static _createFromInternal(internal: any): IgrAxis;
    /**
 * Gets or sets if the current axis is of category axis type
*/
    readonly isCategory: boolean;
    /**
     * Gets or sets if the current axis is of numeric axis type
    */
    readonly isNumeric: boolean;
    /**
     * Gets if the current axis is of angular axis type
    */
    readonly isAngular: boolean;
    /**
     * Gets or sets if the current axis is of radial axis type
    */
    readonly isRadial: boolean;
    /**
     * Gets if the current axis is a vertical axis.
    */
    readonly isVertical: boolean;
    /**
     * Gets or sets if the current axis is sorting data items
    */
    readonly isSorting: boolean;
    /**
     * Gets or sets if the current axis is of date time axis type
    */
    readonly isDateTime: boolean;
    /**
     * Gets or sets if the current axis is of category date time axis type
    */
    readonly isCategoryDateTime: boolean;
    /**
     * Gets if the current axis is a continuous rather than a discrete scale
    */
    readonly isContinuous: boolean;
    /**
     * Sets or gets a function which takes an object that produces a formatted label for displaying in the chart.
    */
    formatLabel: (item: any) => string;
    /**
     * Gets or sets the Title property.
    */
    title: string;
    /**
     * Gets or sets the Stroke property.
     * Null is treated as auto. The axis stroke will be displayed or not based on the axis type and series used with it.
    */
    stroke: string;
    /**
     * Gets or sets the effective stroke used for the axis.
    */
    readonly actualStroke: string;
    /**
     * Gets or sets the StrokeThickness property.
    */
    strokeThickness: number;
    /**
     * Gets or sets the Strip property.
    */
    strip: string;
    /**
     * Gets or sets the MajorStroke property.
     * Null is treated as auto. Major lines will be displayed or not based on the axis type and series used with it.
    */
    majorStroke: string;
    /**
     * Gets or sets the ActualMajorStroke property.
    */
    readonly actualMajorStroke: string;
    /**
     * Gets or sets the MajorStrokeThickness property.
    */
    majorStrokeThickness: number;
    /**
     * Gets or sets the MinorStroke property.
    */
    minorStroke: string;
    /**
     * Gets or sets the ActualMinorStroke property.
    */
    readonly actualMinorStroke: string;
    /**
     * Gets or sets the MinorStrokeThickness property.
    */
    minorStrokeThickness: number;
    /**
     * Gets or sets the TickStroke property.
    */
    tickStroke: string;
    /**
     * Gets or sets the TickStrokeThickness property.
    */
    tickStrokeThickness: number;
    /**
     * Gets or sets the TickLength property.
    */
    tickLength: number;
    /**
     * Gets or sets the IsDisabled property. If true, the axis will not be rendered.
    */
    isDisabled: boolean;
    /**
     * Gets or sets the IsInverted property.
    */
    isInverted: boolean;
    /**
     * Gets or sets whether to use more advanced heuristics when determining the initial number of labels to render, before resolving collisions, etc.
    */
    useEnhancedIntervalManagement: boolean;
    /**
     * Gets or sets the mininum desired characters to be displayed for horizontal axes when using advanced label heuristics. -1 will attempt to adjust the interval to precisely fit the horizontal labels.
    */
    enhancedIntervalMinimumCharacters: number;
    /**
     * Gets or sets the text style to use for axis labels.
    */
    labelTextStyle: string;
    /**
     * The color of the {0}.
    */
    labelTextColor: string;
    /**
     * Gets or sets the location of the {0}.
    */
    labelLocation: AxisLabelsLocation;
    /**
     * Gets or sets the visibility of the {0}.
    */
    labelVisibility: Visibility;
    /**
     * Gets or sets whether the first label is displayed when the zoom level is set to 1.
    */
    labelShowFirstLabel: boolean;
    /**
     * Gets or sets the angle of the {0}.
    */
    labelAngle: number;
    /**
     * Distance between the axis and the edge of the control.
    */
    labelExtent: number;
    /**
     * Margin applied to the left of the {0}.
    */
    labelLeftMargin: number;
    /**
     * Margin applied to the right of the {0}.
    */
    labelRightMargin: number;
    /**
     * Margin applied above the {0}.
    */
    labelTopMargin: number;
    /**
     * Margin applied below the {0}.
    */
    labelBottomMargin: number;
    /**
     * Gets or sets the horizontal alignment of the {0}.
    */
    labelHorizontalAlignment: HorizontalAlignment;
    /**
     * Gets or sets the vertical alignment of the {0}.
    */
    labelVerticalAlignment: VerticalAlignment;
    ensureLabelSettings(): void;
    /**
     * Gets or sets the CrossingAxis property.
    */
    crossingAxis: IgrAxis;
    /**
     * Gets or sets the CrossingValue property.
    */
    crossingValue: any;
    /**
     * Gets or sets the title position relative to the axis labels.
    */
    titlePosition: AxisTitlePosition;
    /**
     * Gets or sets the text style to use for axis labels.
    */
    titleTextStyle: string;
    /**
     * The color of the {0}.
    */
    titleTextColor: string;
    /**
     * Gets or sets the location of the {0}.
    */
    titleLocation: AxisLabelsLocation;
    /**
     * Gets or sets the visibility of the {0}.
    */
    titleVisibility: Visibility;
    /**
     * Gets or sets whether the first label is displayed when the zoom level is set to 1.
    */
    titleShowFirstLabel: boolean;
    /**
     * Gets or sets the angle of the {0}.
    */
    titleAngle: number;
    /**
     * Distance between the axis and the edge of the control.
    */
    titleExtent: number;
    /**
     * Margin applied to the left of the {0}.
    */
    titleLeftMargin: number;
    /**
     * Margin applied to the right of the {0}.
    */
    titleRightMargin: number;
    /**
     * Margin applied above the {0}.
    */
    titleTopMargin: number;
    /**
     * Margin applied below the {0}.
    */
    titleBottomMargin: number;
    /**
     * Gets or sets the horizontal alignment of the {0}.
    */
    titleHorizontalAlignment: HorizontalAlignment;
    /**
     * Gets or sets the vertical alignment of the {0}.
    */
    titleVerticalAlignment: VerticalAlignment;
    ensureTitleSettings(): void;
    private _annotations;
    /**
     * Gets the current annotations for the axis.
    */
    annotations: AxisAnnotationCollection;
    /**
     * Gets or sets the coercion methods to use when loading data from data sources.
     * Should be specified before setting any member paths, if being used. Setting it later
     * will not cause data to be re-imported into the chart.
    */
    coercionMethods: any;
    /**
     * Gets or sets whether the series should expect that properties in its items source may be functions that need to be
     * evaluated to yield their value. This defaults to false, as there will be a subtle performance impact to using this feature.
     * This value must be set before assigning an item's source to take effect.
    */
    expectFunctions: boolean;
    /**
     * Gets or sets the axis label format string.
    */
    label: any;
    /**
 * Renders the axis with no animation.

*/
    renderAxis(): void;
    /**
     * If using enhanced interval management and precise interval fitting, this will reset the cached maximum label width, and recalculate using the current labels.
    
    */
    resetCachedEnhancedInterval(): void;
    /**
     * Scales a value from axis space into screen space.
    
    * @param unscaledValue  * The unscaled axis value to scale.
    */
    scaleValue(unscaledValue: number): number;
    private _rangeChanged;
    private _rangeChanged_wrapped;
    /**
     * Occurs when the axis range changes.
    */
    protected rangeChanged: (s: IgrAxis, e: AxisRangeChangedEventArgs) => void;
    private _renderRequested;
    private _renderRequested_wrapped;
    /**
     * This event is raised every time a render has been requested from a series.
    */
    protected renderRequested: (s: IgrAxis, e: RenderRequestedEventArgs) => void;
}
export interface IIgrAxisProps {
    /**
     * Sets or gets a required unique name for the axis.
     * */
    name: string;
    /**
 * Sets or gets a function which takes an object that produces a formatted label for displaying in the chart.
*/
    formatLabel?: (item: any) => string;
    /**
     * Gets or sets the Title property.
    */
    title?: string;
    /**
     * Gets or sets the Stroke property.
     * Null is treated as auto. The axis stroke will be displayed or not based on the axis type and series used with it.
    */
    stroke?: string;
    /**
     * Gets or sets the StrokeThickness property.
    */
    strokeThickness?: number;
    /**
     * Gets or sets the Strip property.
    */
    strip?: string;
    /**
     * Gets or sets the MajorStroke property.
     * Null is treated as auto. Major lines will be displayed or not based on the axis type and series used with it.
    */
    majorStroke?: string;
    /**
     * Gets or sets the MajorStrokeThickness property.
    */
    majorStrokeThickness?: number;
    /**
     * Gets or sets the MinorStroke property.
    */
    minorStroke?: string;
    /**
     * Gets or sets the MinorStrokeThickness property.
    */
    minorStrokeThickness?: number;
    /**
     * Gets or sets the TickStroke property.
    */
    tickStroke?: string;
    /**
     * Gets or sets the TickStrokeThickness property.
    */
    tickStrokeThickness?: number;
    /**
     * Gets or sets the TickLength property.
    */
    tickLength?: number;
    /**
     * Gets or sets the IsDisabled property. If true, the axis will not be rendered.
    */
    isDisabled?: boolean;
    /**
     * Gets or sets the IsInverted property.
    */
    isInverted?: boolean;
    /**
     * Gets or sets whether to use more advanced heuristics when determining the initial number of labels to render, before resolving collisions, etc.
    */
    useEnhancedIntervalManagement?: boolean;
    /**
     * Gets or sets the mininum desired characters to be displayed for horizontal axes when using advanced label heuristics. -1 will attempt to adjust the interval to precisely fit the horizontal labels.
    */
    enhancedIntervalMinimumCharacters?: number;
    /**
     * Gets or sets the text style to use for axis labels.
    */
    labelTextStyle?: string;
    /**
     * The color of the {0}.
    */
    labelTextColor?: string;
    /**
     * Gets or sets the location of the {0}.
    */
    labelLocation?: AxisLabelsLocation;
    /**
     * Gets or sets the visibility of the {0}.
    */
    labelVisibility?: Visibility;
    /**
     * Gets or sets whether the first label is displayed when the zoom level is set to 1.
    */
    labelShowFirstLabel?: boolean;
    /**
     * Gets or sets the angle of the {0}.
    */
    labelAngle?: number;
    /**
     * Distance between the axis and the edge of the control.
    */
    labelExtent?: number;
    /**
     * Margin applied to the left of the {0}.
    */
    labelLeftMargin?: number;
    /**
     * Margin applied to the right of the {0}.
    */
    labelRightMargin?: number;
    /**
     * Margin applied above the {0}.
    */
    labelTopMargin?: number;
    /**
     * Margin applied below the {0}.
    */
    labelBottomMargin?: number;
    /**
     * Gets or sets the horizontal alignment of the {0}.
    */
    labelHorizontalAlignment?: HorizontalAlignment;
    /**
     * Gets or sets the vertical alignment of the {0}.
    */
    labelVerticalAlignment?: VerticalAlignment;
    /**
     * Gets or sets the CrossingAxis property.
    */
    crossingAxis?: IgrAxis;
    /**
     * Gets or sets the CrossingValue property.
    */
    crossingValue?: any;
    /**
     * Gets or sets the title position relative to the axis labels.
    */
    titlePosition?: AxisTitlePosition;
    /**
     * Gets or sets the text style to use for axis labels.
    */
    titleTextStyle?: string;
    /**
     * The color of the {0}.
    */
    titleTextColor?: string;
    /**
     * Gets or sets the location of the {0}.
    */
    titleLocation?: AxisLabelsLocation;
    /**
     * Gets or sets the visibility of the {0}.
    */
    titleVisibility?: Visibility;
    /**
     * Gets or sets whether the first label is displayed when the zoom level is set to 1.
    */
    titleShowFirstLabel?: boolean;
    /**
     * Gets or sets the angle of the {0}.
    */
    titleAngle?: number;
    /**
     * Distance between the axis and the edge of the control.
    */
    titleExtent?: number;
    /**
     * Margin applied to the left of the {0}.
    */
    titleLeftMargin?: number;
    /**
     * Margin applied to the right of the {0}.
    */
    titleRightMargin?: number;
    /**
     * Margin applied above the {0}.
    */
    titleTopMargin?: number;
    /**
     * Margin applied below the {0}.
    */
    titleBottomMargin?: number;
    /**
     * Gets or sets the horizontal alignment of the {0}.
    */
    titleHorizontalAlignment?: HorizontalAlignment;
    /**
     * Gets or sets the vertical alignment of the {0}.
    */
    titleVerticalAlignment?: VerticalAlignment;
    /**
     * Gets or sets the coercion methods to use when loading data from data sources.
     * Should be specified before setting any member paths, if being used. Setting it later
     * will not cause data to be re-imported into the chart.
    */
    coercionMethods?: any;
    /**
     * Gets or sets whether the series should expect that properties in its items source may be functions that need to be
     * evaluated to yield their value. This defaults to false, as there will be a subtle performance impact to using this feature.
     * This value must be set before assigning an item's source to take effect.
    */
    expectFunctions?: boolean;
    /**
     * Gets or sets the axis label format string.
    */
    label?: any;
}
