/**
 * AccumulationChart base file
 */
import { ChildProperty } from '@syncfusion/ej2-base';
import { DataManager, Query } from '@syncfusion/ej2-data';
import { Rect, Size } from '@syncfusion/ej2-svg-base';
import { ChartLocation } from '../../common/utils/helper';
import { AccumulationType, AccumulationLabelPosition, PyramidModes } from '../model/enum';
import { IAccTextRenderEventArgs } from '../model/pie-interface';
import { LegendShape } from '../../chart/utils/enum';
import { AccumulationDataLabelSettingsModel } from '../model/acc-base-model';
import { Data } from '../../common/model/data';
import { FontModel, BorderModel, AnimationModel, EmptyPointSettingsModel, ConnectorModel } from '../../common/model/base-model';
import { AccumulationChart } from '../accumulation';
import { Units, Alignment, Regions, Position, SeriesCategories, LabelOverflow, TextWrap } from '../../common/utils/enum';
import { GroupModes } from './enum';
/**
 * Annotation for accumulation series
 */
export declare class AccumulationAnnotationSettings extends ChildProperty<AccumulationAnnotationSettings> {
    /**
     * Content of the annotation, which accepts the id of the custom element.
     *
     * @default null
     */
    content: string;
    /**
     * if set coordinateUnit as `Pixel` X specifies the axis value.
     * else is specifies pixel or percentage of coordinate.
     *
     * @default '0'
     */
    x: string | Date | number;
    /**
     * if set coordinateUnit as `Pixel` Y specifies the axis value.
     * else is specifies pixel or percentage of coordinate.
     *
     * @default '0'
     */
    y: string | number;
    /**
     * Specifies the coordinate units of the annotation. They are
     * * Pixel - Annotation renders based on x and y pixel value.
     * * Point - Annotation renders based on x and y axis value.
     *
     * @default 'Pixel'
     */
    coordinateUnits: Units;
    /**
     * Specifies the regions of the annotation. They are
     * * Chart - Annotation renders based on chart coordinates.
     * * Series - Annotation renders based on series coordinates.
     *
     * @default 'Chart'
     */
    region: Regions;
    /**
     * Specifies the position of the annotation. They are
     * * Top - Align the annotation element as top side.
     * * Bottom - Align the annotation element as bottom side.
     * * Middle - Align the annotation element as mid point.
     *
     * @default 'Middle'

     */
    verticalAlignment: Position;
    /**
     * Specifies the alignment of the annotation. They are
     * * Near - Align the annotation element as top side.
     * * Far - Align the annotation element as bottom side.
     * * Center - Align the annotation element as mid point.
     *
     * @default 'Center'

     */
    horizontalAlignment: Alignment;
    /**
     * Information about annotation for assistive technology.
     *
     * @default null
     */
    description: string;
}
/**
 * Configures the dataLabel in accumulation chart.
 */
export declare class AccumulationDataLabelSettings extends ChildProperty<AccumulationDataLabelSettings> {
    /**
     * If set true, data label for series gets render.
     *
     * @default false
     */
    visible: boolean;
    /**
     * If set true, data label for zero values in series gets render.
     *
     * @default true
     */
    showZero: boolean;
    /**
     * The DataSource field which contains the data label value.
     *
     * @default null
     */
    name: string;
    /**
     * The background color of the data label, which accepts value in hex, rgba as a valid CSS color string.
     *
     * @default 'transparent'
     */
    fill: string;
    /**
     * Specifies the position of data label. They are.
     * * Outside - Places label outside the point.
     * * Inside - Places label inside the point.
     *
     * @default 'Inside'
     */
    position: AccumulationLabelPosition;
    /**
     * The roundedCornerX for the data label. It requires `border` values not to be null.
     *
     * @default 5
     */
    rx: number;
    /**
     * The roundedCornerY for the data label. It requires `border` values not to be null.
     *
     * @default 5
     */
    ry: number;
    /**
     * Specifies angle for data label.
     *
     * @default 0
     */
    angle: number;
    /**
     * Enables rotation for data label.
     *
     * @default false
     */
    enableRotation: boolean;
    /**
     * Option for customizing the border lines.
     */
    border: BorderModel;
    /**
     * Option for customizing the data label text.
     */
    font: FontModel;
    /**
     * Options for customize the connector line in series.
     * This property is applicable for Pie, Funnel and Pyramid series.
     * The default connector length for Pie series is '4%'. For other series, it is null.
     */
    connectorStyle: ConnectorModel;
    /**
     * Custom template to format the data label content. Use ${point.x} and ${point.y} as a placeholder
     * text to display the corresponding data point.
     *
     * @default null
     */
    template: string;
    /**
     * Used to format the data label that accepts any global string format like 'C', 'n1', 'P' etc.
     * It also accepts placeholder like '{value}°C' in which value represent the data label, e.g, 20°C.
     *
     * @default ''
     */
    format: string;
    /**
     * Specifies the maximum width of the data label.Use this property to limit label width and apply wrap or trimming to the label.
     *
     * @default 'null'
     */
    maxWidth: number;
    /**
     * Defines the text overflow behavior to employ when the data label text overflow.
     * * Clip - Truncates data label when it overflows the bounds.
     * * Ellipsis - Specifies an ellipsis (“...”) to the data label when it overflows the bounds.
     * You can define maximum width of label by setting maxWidth property.
     *
     * @default 'Ellipsis'
     */
    textOverflow: LabelOverflow;
    /**
     * Defines the text wrap behavior to employ when the data label overflow.
     * * Normal - Truncates data label when it overflows the bounds.
     * * Wrap - Specifies to break a data label once it is too long to fit on a line by itself.
     * * AnyWhere - Specifies to break a data label at any point if there are no otherwise-acceptable break points in the line.
     * You can define maximum width of label by setting maxWidth property.
     *
     * @default 'Normal'
     */
    textWrap: TextWrap;
}
/**
 * Center value of the Pie series.
 */
export declare class PieCenter extends ChildProperty<PieCenter> {
    /**
     * X value of the center.
     *
     * @default '50%'
     */
    x: string;
    /**
     * Y value of the center.
     *
     * @default '50%'
     */
    y: string;
}
/**
 * Points model for the series.
 *
 * @public
 */
export declare class AccPoints {
    /** accumulation point x value. */
    x: Object;
    /** accumulation point y value. */
    y: number;
    /** accumulation point visibility. */
    visible: boolean;
    /** accumulation point text. */
    text: string;
    /** accumulation point tooltip. */
    tooltip: string;
    /** accumulation point slice radius. */
    sliceRadius: string;
    /** accumulation point original text. */
    originalText: string;
    /** @private */
    label: string;
    /** accumulation point color. */
    color: string;
    /** accumulation point percentage value. */
    percentage: number;
    /** accumulation point symbol location. */
    symbolLocation: ChartLocation;
    /** accumulation point index. */
    index: number;
    /** @private */
    midAngle: number;
    /** @private */
    startAngle: number;
    /** @private */
    endAngle: number;
    /** @private */
    labelAngle: number;
    /** @private */
    region: Rect;
    /** @private */
    labelRegion: Rect;
    /** @private */
    labelVisible: boolean;
    /** @private */
    labelPosition: AccumulationLabelPosition;
    /** @private */
    yRatio: number;
    /** @private */
    heightRatio: number;
    /** @private */
    labelOffset: ChartLocation;
    regions: Rect[];
    /** @private */
    isExplode: boolean;
    /** @private */
    isClubbed: boolean;
    /** @private */
    isSliced: boolean;
    /** @private */
    start: number;
    /** @private */
    degree: number;
    /** @private */
    transform: string;
    /** @private */
    separatorY: string;
    /** @private */
    adjustedLabel: boolean;
    /** @private */
    connectorLength: number;
    /** @private  */
    argsData: IAccTextRenderEventArgs;
    /** @private  */
    textSize: Size;
    /** @private */
    isLabelUpdated: number;
    /** @private */
    initialLabelRegion: Rect;
    /** @private */
    templateElement: HTMLElement;
    /** @private */
    legendImageUrl: string;
    /** @private */
    labelCollection: string[];
}
/**
 *  Configures the series in accumulation chart.
 */
export declare class AccumulationSeries extends ChildProperty<AccumulationSeries> {
    /**
     * Specifies the dataSource for the series. It can be an array of JSON objects or an instance of DataManager.
     * ```html
     * <div id='Pie'></div>
     * ```
     * ```typescript
     * let dataManager: DataManager = new DataManager({
     *         url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/Tasks/'
     * });
     * let query: Query = new Query().take(50).where('Estimate', 'greaterThan', 0, false);
     * let pie: AccumulationChart = new AccumulationChart({
     * ...
     *     series: [{
     *        dataSource: dataManager,
     *        xName: 'Id',
     *        yName: 'Estimate',
     *        query: query
     *    }],
     * ...
     * });
     * pie.appendTo('#Pie');
     * ```
     *
     * @default ''
     */
    dataSource: Object | DataManager;
    /**
     * Specifies Query to select data from dataSource. This property is applicable only when the dataSource is `ej.DataManager`.
     *
     * @default null
     */
    query: Query;
    /**
     * The DataSource field which contains the x value.
     *
     * @default ''
     */
    xName: string;
    /**
     * Specifies the series name
     *
     * @default ''
     */
    name: string;
    /**
     * The provided value will be considered as a Tooltip Mapping name.
     *
     * @default ''
     */
    tooltipMappingName: string;
    /**
     * The DataSource field which contains the y value.
     *
     * @default ''
     */
    yName: string;
    /**
     * Specifies the series visibility.
     *
     * @default true
     */
    visible: boolean;
    /**
     * Options for customizing the border of the series.
     */
    border: BorderModel;
    /**
     * Options for customizing the animation for series.
     */
    animation: AnimationModel;
    /**
     * The shape of the legend. Each series has its own legend shape. They are
     * * Circle - Renders a circle.
     * * Rectangle - Renders a rectangle.
     * * Triangle - Renders a triangle.
     * * Diamond - Renders a diamond.
     * * Cross - Renders a cross.
     * * HorizontalLine - Renders a horizontalLine.
     * * VerticalLine - Renders a verticalLine.
     * * Pentagon - Renders a pentagon.
     * * InvertedTriangle - Renders a invertedTriangle.
     * * SeriesType -Render a legend shape based on series type.
     * * Image -Render a image.   *
     *
     * @default 'SeriesType'
     */
    legendShape: LegendShape;
    /**
     * The URL for the Image that is to be displayed as a Legend icon.  It requires  `legendShape` value to be an `Image`.
     *
     * @default ''
     */
    legendImageUrl: string;
    /**
     * The DataSource field that contains the color value of point
     * It is applicable for series
     *
     * @default ''
     */
    pointColorMapping: string;
    /**
     * Custom style for the selected series or points.
     *
     * @default null
     */
    selectionStyle: string;
    /**
     * AccumulationSeries y values less than groupTo are combined into single slice named others.
     *
     * @default null
     */
    groupTo: string;
    /**
     * AccumulationSeries y values less than groupMode are combined into single slice named others.
     *
     * @default Value
     */
    groupMode: GroupModes;
    /**
     * The data label for the series.
     */
    dataLabel: AccumulationDataLabelSettingsModel;
    /**
     * Palette for series points.
     *
     * @default []
     */
    palettes: string[];
    /**
     * Start angle for a series.
     *
     * @default 0
     */
    startAngle: number;
    /**
     * End angle for a series.
     *
     * @default null
     */
    endAngle: number;
    /**
     * Radius of the pie series and its values in percentage.
     *
     * @default null
     */
    radius: string;
    /**
     * When the innerRadius value is greater than 0 percentage, a donut will appear in pie series. It takes values only in percentage.
     *
     * @default '0'
     */
    innerRadius: string;
    /**
     * Specify the type of the series in accumulation chart.
     *
     * @default 'Pie'
     */
    type: AccumulationType;
    /**
     * To enable or disable tooltip for a series.
     *
     * @default true
     */
    enableTooltip: boolean;
    /**
     * If set true, series points will be exploded on mouse click or touch.
     *
     * @default false
     */
    explode: boolean;
    /**
     * Distance of the point from the center, which takes values in both pixels and percentage.
     *
     * @default '30%'
     */
    explodeOffset: string;
    /**
     * If set true, all the points in the series will get exploded on load.
     *
     * @default false
     */
    explodeAll: boolean;
    /**
     * Index of the point, to be exploded on load.
     *
     * @default null
     *
     * @aspDefaultValueIgnore
     *
     * @blazorDefaultValue Double.NaN
     */
    explodeIndex: number;
    /**
     * options to customize the empty points in series.
     */
    emptyPointSettings: EmptyPointSettingsModel;
    /**
     * Defines the distance between the segments of a funnel/pyramid series. The range will be from 0 to 1
     *
     * @default 0
     */
    gapRatio: number;
    /**
     * Defines the width of the funnel/pyramid with respect to the chart area.
     *
     * @default '80%'
     */
    width: string;
    /**
     * Defines the height of the funnel/pyramid with respect to the chart area.
     *
     * @default '80%'
     */
    height: string;
    /**
     * Defines the width of the funnel neck with respect to the chart area.
     *
     * @default '20%'
     */
    neckWidth: string;
    /**
     * Defines the height of the funnel neck with respect to the chart area.
     *
     * @default '20%'
     */
    neckHeight: string;
    /**
     * Defines how the values have to be reflected, whether through height/surface of the segments.
     *
     * @default 'Linear'
     */
    pyramidMode: PyramidModes;
    /**
     * The opacity of the series.
     *
     * @default 1.
     */
    opacity: number;
    /** @private */
    points: AccPoints[];
    /** @private */
    clubbedPoints: AccPoints[];
    /** @private */
    dataModule: Data;
    /** @private */
    sumOfPoints: number;
    /** @private */
    index: number;
    /** @private */
    sumOfClub: number;
    /** @private */
    resultData: Object;
    /** @private */
    lastGroupTo: string;
    /** @private */
    isRectSeries: boolean;
    /** @private */
    clipRect: Rect;
    /** @private */
    category: SeriesCategories;
    /** @private */
    rightSidePoints: AccPoints[];
    /** @private */
    leftSidePoints: AccPoints[];
    /**
     * To find the max bounds of the data label to place smart legend
     *
     * @private
     */
    labelBound: Rect;
    /**
     * To find the max bounds of the accumulation segment to place smart legend
     *
     * @private
     */
    accumulationBound: Rect;
    /**
     * Defines the funnel size
     *
     * @private
     */
    triangleSize: Size;
    /**
     * Defines the size of the funnel neck
     *
     * @private
     */
    neckSize: Size;
    /**
     * To refresh the Datamanager for series
     *
     * @private
     */
    refreshDataManager(accumulation: AccumulationChart, render: boolean): void;
    /**
     * To get points on dataManager is success
     *
     * @private
     */
    dataManagerSuccess(e: {
        result: Object;
        count: number;
    }, accumulation: AccumulationChart, render?: boolean): void;
    /** @private To find points from result data */
    getPoints(result: Object, accumulation: AccumulationChart): void;
    generateClubPoint(): AccPoints;
    /**
     * Method to set point index and color
     */
    private pushPoints;
    /**
     * Method to find club point
     */
    private isClub;
    /**
     * Method to find sum of points in the series
     */
    private findSumOfPoints;
    /**
     * Method to set points x, y and text from data source
     */
    private setPoints;
    /**
     * Method render the series elements for accumulation chart
     * @private
     */
    renderSeries(accumulation: AccumulationChart, redraw?: boolean): void;
    /**
     * Method render the points elements for accumulation chart series.
     */
    private renderPoints;
    /**
     * Method render the datalabel elements for accumulation chart.
     */
    private renderDataLabel;
    /**
     * To find maximum bounds for smart legend placing
     *
     * @private
     */
    findMaxBounds(totalbound: Rect, bound: Rect): void;
    /**
     * To set empty point value for null points
     * @private
     */
    setAccEmptyPoint(point: AccPoints, i: number, data: Object, colors: string[]): void;
    /**
     * To find point is empty
     */
    private isEmpty;
}
/**
 * method to get series from index
 * @private
 */
export declare function getSeriesFromIndex(index: number, visibleSeries: AccumulationSeries[]): AccumulationSeries;
/**
 * method to get point from index
 * @private
 */
export declare function pointByIndex(index: number, points: AccPoints[]): AccPoints;
