import { Property, ChildProperty, Complex, Collection, DateFormatOptions, getValue, animationMode } from '@syncfusion/ej2-base';import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';import { StackValues, RectOption, ControlPoints, PolarArc, appendChildElement, appendClipElement, getElement } from '../../common/utils/helper';import { firstToLowerCase, ChartLocation, CircleOption, IHistogramValues, getColorByValue} from '../../common/utils/helper';import { Rect, SvgRenderer, CanvasRenderer, Size } from '@syncfusion/ej2-svg-base';import { ChartSeriesType, ChartShape, SeriesValueType, SplineType, StepPosition } from '../utils/enum';import { ChartDrawType, DataLabelIntersectAction } from '../utils/enum';import { BorderModel, FontModel, MarginModel, AnimationModel, OffsetModel, DragSettingsModel, EmptyPointSettingsModel, ConnectorModel, CornerRadiusModel, AccessibilityModel, SeriesAccessibilityModel, LinearGradientModel, RadialGradientModel } from '../../common/model/base-model';import { ErrorBarType, ErrorBarDirection, ErrorBarMode, TrendlineTypes } from '../utils/enum';import { Border, Font, Margin, Animation, DragSettings, EmptyPointSettings, Connector, CornerRadius, Accessibility, SeriesAccessibility, LinearGradient, RadialGradient } from '../../common/model/base';import { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';import { Chart } from '../chart';import { Axis, Column, Row } from '../axis/axis';import { Data } from '../../common/model/data';import { Offset } from '../../common/model/base';import { ISeriesRenderEventArgs } from '../../chart/model/chart-interface';import { seriesRender } from '../../common/model/constants';import { Alignment, EmptyPointMode, LabelPosition, LegendShape, SeriesCategories, ShapeType } from '../../common/utils/enum';import { BoxPlotMode, Segment } from '../utils/enum';import { getVisiblePoints, setRange, findClipRect, applyGradientsToSeries } from '../../common/utils/helper';import { Browser } from '@syncfusion/ej2-base';import { StockSeries } from '../../stock-chart/index';import { CartesianAxisLayoutPanel } from '../axis/cartesian-panel';

/**
 * Interface for a class LastValueLabelSettings
 */
export interface LastValueLabelSettingsModel {

    /**
     * Enables or disables the display of the last value labels.
     *
     * @default false
     */
    enable?: boolean;

    /**
     * The font proerties of the last value labels.
     */
    font?: FontModel;

    /**
     * The background color for the label.
     *
     * @default 'null'
     */
    background?: string;

    /**
     * The border properties for the label.
     */
    border?: BorderModel;

    /**
     * The line color for grid lines behind the labels.
     *
     * @default ''
     */
    lineColor?: string;

    /**
     * The width of the grid lines behind the labels.
     *
     * @default 1
     */
    lineWidth?: number;

    /**
     * The dash array of the grid lines behind the labels.
     *
     * @default ''
     */
    dashArray?: string;

    /**
     * Specifies the X-axis rounded corner radius for the last value label.
     > Note that `border` values must not be null for this feature to work.
     *
     * @default 5
     */
    rx?: number;

    /**
     * Specifies the Y-axis rounded corner radius for the last value label.
     > Note that `border` values must not be null for this feature to work.
     *
     * @default 5
     */
    ry?: number;

}

/**
 * Interface for a class SeriesLabelSettings
 */
export interface SeriesLabelSettingsModel {

    /**
     * Enables or disables the rendering of series names as inline labels.
     *
     * @default false
     */
    visible?: boolean;

    /**
     * Defines the custom text to display as the series label.
     * If not specified, the series name will be used.
     *
     * @default null
     */
    text?: string;

    /**
     * Specifies the background color of the inline series label.
     *
     * @default 'transparent'
     */
    background?: string;

    /**
     * Specifies the border properties for the inline label.
     * Includes color and width.
     *
     * @default { color: '', width: 0 }
     */
    border?: BorderModel;

    /**
     * Sets the opacity of the series label.
     *
     * @default 1
     */
    opacity?: number;

    /**
     * Specifies the font properties for the series name label.
     * This includes customization options such as font size, color, style, weight, and family.
     */
    font?: FontModel;

    /**
     * Determines whether to show the label text even when it overlaps with other labels.
     *
     * @default false
     */
    showOverlapText?: boolean;

}

/**
 * Interface for a class DataLabelSettings
 */
export interface DataLabelSettingsModel {

    /**
     * If set to true, data labels for the series are render. By default, it is set to false.
     *
     * @default false
     */

    visible?: boolean;

    /**
     * If set to true, data labels for zero values in the series are render.
     *
     * @default true
     */

    showZero?: boolean;

    /**
     * Specifies the data source field that contains the data label value.
     *
     * @default null
     */

    name?: string;

    /**
     * The background color of the data label accepts hex and rgba values as valid CSS color strings.
     *
     * @default 'transparent'
     */

    fill?: string;

    /**
     * Used to format the data label, accepting global string formats like `C`, `n1`, `P`, etc.
     * It also supports placeholders, such as `{value}°C`, where `{value}` represent the point data label (e.g., 20°C).
     *
     * @default null
     */

    format?: string;

    /**
     * Specifies the opacity level for the data label background, which controls its transparency.
     *
     * @default 1
     */

    opacity?: number;

    /**
     * Specifies the rotation angle of the data label.
     *
     * @default 0
     */

    angle?: number;

    /**
     * If set to true, the data label will be rotated according to the specified angle.
     *
     * @default false
     */

    enableRotation?: boolean;

    /**
     * Specifies the position of the data label relative to the data point.
     * The available options are:
     * * Outer: Positions the label outside the point.
     * * Top: Positions the label on top of the point.
     * * Bottom: Positions the label at the bottom of the point.
     * * Middle: Positions the label in the middle of the point.
     * * Auto: Automatically selects the best position for the label based on the series and data point.
     *
     * @default 'Auto'
     */

    position?: LabelPosition;

    /**
     * Specifies the X-axis rounded corner radius for the data label.
     > Note that `border` values must not be null for this feature to work.
     *
     * @default 5
     */
    rx?: number;

    /**
     * Specifies the Y-axis rounded corner radius for the data label.
     > Note that `border` values must not be null for this feature to work.
     *
     * @default 5
     */
    ry?: number;

    /**
     * Specifies the alignment of the data label relative to the data point.
     * The available options are:
     * * Near: Positions the label to the left of the data point.
     * * Center: Positions the label in the center of the data point.
     * * Far: Positions the label to the right of the data point.
     *
     * @default 'Center'
     */
    alignment?: Alignment;

    /**
     * Configures the appearance of the border lines with options for width and color properties.
     */

    border?: BorderModel;

    /**
     * Configures the margin for the data label.
     */

    margin?: MarginModel;

    /**
     * Customizes the appearance of the data label text with options for font size, color, style, weight, and family.
     */

    font?: FontModel;

    /**
     * Custom template for the data label.
     * Use `${point.x}` and `${point.y}` as placeholders to display the corresponding data point values.
     *
     * @default null
     * @aspType string
     */

    template?: string | Function;

    /**
     * Specifies the action to handle overlapping data labels.
     * Available options include:
     * * None - All data labels are displayed, even if they overlap.
     * * Hide - Overlapping data labels are hidden to avoid clutter.
     * * Rotate90 - Data labels are rotated 90 degrees to avoid overlap and improve readability.
     *
     * @default 'Hide'
     */

    labelIntersectAction?: DataLabelIntersectAction;

}

/**
 * Interface for a class MarkerSettings
 */
export interface MarkerSettingsModel {

    /**
     * If set to true, this enables the marker for the series.
     *
     * @default false
     */

    visible?: boolean;

    /**
     * Configures the shape of the marker used in the series.
     * Available options are:
     * * Circle - Circular shape for the marker.
     * * Rectangle - Rectangular shape for the marker.
     * * Triangle - Triangular shape for the marker.
     * * Diamond - Diamond shape for the marker.
     * * HorizontalLine - Marker as a horizontal line.
     * * VerticalLine - Marker as a vertical line.
     * * Pentagon - Pentagon shape for the marker.
     * * InvertedTriangle - Inverted triangle shape for the marker.
     * * Image - Custom image as the marker.
     * * Star - Star shape fot the marker.
     *
     * @default null
     */

    shape?: ChartShape;

    /**
     * The URL for the image to be displayed as a marker. It requires the marker's `shape` value to be `Image`.
     > Note that the marker's `shape` value must be `Image` for this feature to work.
     *
     * @default ''
     */

    imageUrl?: string;

    /**
     * Specifies the height of the marker in pixels.
     *
     * @default 5
     */

    height?: number;

    /**
     * If set to true, the marker will be filled with the series color.
     *
     * @default false
     */

    isFilled?: boolean;

    /**
     * Specifies the width of the marker in pixels.
     *
     * @default 5
     */

    width?: number;

    /**
     * Options for customizing the border of a marker, including setting the border's width and color.
     */

    border?: BorderModel;

    /**
     * This property allows for the adjustment of the marker's position relative to its data point by specifying horizontal and vertical offsets.
     */

    offset?: OffsetModel;

    /**
     * The fill color of the marker, which accepts values in hex and rgba as valid CSS color strings. By default, it takes the series color.
     *
     * @default null
     */

    fill?: string;

    /**
     * The trackball is enabled by default when the mouse moves but disabling it can be achieved by setting the marker's `allowHighlight` property to 'false'.
     *
     * @default true
     */

    allowHighlight?: boolean;

    /**
     * Sets the opacity level for the marker, which controls its transparency.
     *
     * @default 1
     */

    opacity?: number;

    /**
     * The `dataLabel` property can be used to show the data label and customize its position and styling.
     */

    dataLabel?: DataLabelSettingsModel;

}

/**
 * Interface for a class ParetoOptions
 */
export interface ParetoOptionsModel {

    /**
     * The fill color of the Pareto line, which accepts values in hex or rgba as valid CSS color strings.
     * By default, a color based on the theme is used.
     *
     * @default null
     */

    fill?: string;

    /**
     * The `width` property controls the thickness of the line for the Pareto series, affecting its visual weight on the chart.
     *
     * @default 1
     */

    width?: number;

    /**
     * Sets the pattern of dashes and gaps for the stroke of the Pareto line series.
     *
     * @default '0'
     */

    dashArray?: string;

    /**
     * Options for displaying and customizing markers for individual points in a Pareto line.
     */

    marker?: MarkerSettingsModel;

    /**
     * By default, the axis for the Pareto line is displayed, but this can be disabled using the `showAxis` property.
     *
     * @default true
     */

    showAxis?: boolean;

}

/**
 * Interface for a class Points
 */
export interface PointsModel {

}

/**
 * Interface for a class Trendline
 */
export interface TrendlineModel {

    /**
     * The `name` property is used to assign a descriptive name to the trendline, which will be displayed in the chart as a legend.
     *
     * @default ''
     */
    name?: string;

    /**
     * Configures the pattern of dashes and gaps in the trendline stroke using the `dashArray` property.
     *
     * @default ''
     */

    dashArray?: string;

    /**
     * The `visible` property controls the display of the trendline. If set to true, the trendline will be rendered on the chart. If set to false, the trendline will be hidden.
     *
     * @default true
     */

    visible?: boolean;

    /**
     * Defines the type of trendline used in the series.
     * Available types are:
     * * Linear - A straight line that shows the general direction of data.
     * * Exponential - A curve that fits data with exponential growth or decay.
     * * Polynomial - A curve that fits data with a polynomial function.
     * * Power - A curve that represents data with a power function.
     * * Logarithmic - A curve that fits data with a logarithmic scale.
     * * MovingAverage - A trendline that smoothens data using a moving average calculation.
     *
     * @default 'Linear'
     */
    type?: TrendlineTypes;

    /**
     * Defines the period, the price changes over which will be considered to predict the moving average trendline.
     *
     * @default 2
     */
    period?: number;

    /**
     * Defines the polynomial order of the polynomial trendline.
     *
     * @default 2
     */
    polynomialOrder?: number;

    /**
     * Defines the period by which the trend is to be backward forecasted.
     *
     * @default 0
     */
    backwardForecast?: number;

    /**
     * Defines the period by which the trend must be forward forecasted.
     *
     * @default 0
     */
    forwardForecast?: number;

    /**
     * Options to customize the animation for trendlines.
     */
    animation?: AnimationModel;

    /**
     * Options for customizing the markers for trendlines, including shape, size, color, and other visual aspects.
     *

     */
    marker?: MarkerSettingsModel;

    /**
     * Enables or disables the tooltip for the trendline using the `enableTooltip` property. By default, it is set to true.
     *
     * @default true
     */
    enableTooltip?: boolean;

    /**
     * Specifies the intercept value of the trendline.
     *
     * @default null
     * @aspDefaultValueIgnore
     */
    intercept?: number;

    /**
     * The fill color for the trendline, which accepts values in hex or rgba as valid CSS color strings.
     *
     * @default ''
     */
    fill?: string;

    /**
     * Defines the width of the trendline.
     *
     * @default 1
     */
    width?: number;

    /**
     * The `legendShape` property defines the shape used to represent the trendline in the chart legend.
     *
     * @default 'SeriesType'
     */
    legendShape?: LegendShape;

    /**
     * Options to improve accessibility for chart trendline elements.
     */
    accessibility?: AccessibilityModel;

    /**
     * Applies a linear gradient fill to the trendline.
     *
     * @default null
     */
    linearGradient?: LinearGradientModel;

    /**
     * Applies a radial gradient fill to the trendline.
     *
     * @default null
     */
    radialGradient?: RadialGradientModel;

}

/**
 * Interface for a class ErrorBarCapSettings
 */
export interface ErrorBarCapSettingsModel {

    /**
     * The width of the error bar cap in pixels.
     *
     * @default 1
     */

    width?: number;

    /**
     * The length of the caps on the error bars, measured in pixels.
     *
     * @default 10
     */

    length?: number;

    /**
     * The stroke color of the cap, which accepts values in hex or rgba as valid CSS color strings.
     *
     * @default null
     */

    color?: string;

    /**
     * The opacity of the error bar caps in the chart.
     *
     * @default 1
     */

    opacity?: number;

}

/**
 * Interface for a class ChartSegment
 */
export interface ChartSegmentModel {

    /**
     * Defines the starting point of region.
     *
     * @default null
     */

    value?: Object;

    /**
     * Defines the fill color for the region using a color name, hex code, or rgba value.
     *
     * @default null
     */

    color?: string;

    /**
     * Specifies the dash pattern for the stroke of the series. The string format allows defining various dash and gap lengths.
     *
     * @default '0'
     */

    dashArray?: string;

}

/**
 * Interface for a class ErrorBarSettings
 */
export interface ErrorBarSettingsModel {

    /**
     * If set to true, the error bar for the data will be rendered.
     *
     * @default false
     */

    visible?: boolean;

    /**
     * Specifies the type of error bar.
     * The available options are:
     * * Fixed - Renders a fixed type error bar.
     * * Percentage - Renders a percentage type error bar.
     * * StandardDeviation - Renders a standard deviation type error bar.
     * * StandardError - Renders a standard error type error bar.
     * * Custom - Renders a custom type error bar.
     *
     * @default 'Fixed'
     */

    type?: ErrorBarType;

    /**
     * Specifies the direction of the error bar.
     * The available options are:
     * * Both - Renders error bars in both directions (positive and negative).
     * * Minus - Renders error bars in the negative direction.
     * * Plus - Renders error bars in the positive direction.
     *
     * @default 'Both'
     */

    direction?: ErrorBarDirection;

    /**
     * Specifies the mode for the error bar.
     * The available options are:
     * * Vertical - Renders error bars in a vertical direction.
     * * Horizontal - Renders error bars in a horizontal direction.
     * * Both - Renders error bars in both vertical and horizontal directions.
     *
     * @default 'Vertical'
     */

    mode?: ErrorBarMode;

    /**
     * The color of the error bar's stroke, which accepts values in hex, rgba, or as a valid CSS color string.
     *
     * @default null
     */

    color?: string;

    /**
     * The vertical error for the point can also be mapped from the data source.
     *
     * @default 1
     * @aspType Object
     */

    verticalError?: number | string;

    /**
     * The `width` property determines the thickness of the error bars rendered in the chart series.
     *
     * @default 1
     */

    width?: number;

    /**
     * The horizontal error of the point can also be mapped from the data source.
     *
     * @default 1
     * @aspType Object
     */

    horizontalError?: number | string;

    /**
     * The vertical positive error of the point can be mapped from the data source as well.
     *
     * @default 3
     * @aspType Object
     */

    verticalPositiveError?: number | string;

    /**
     * The vertical negative error of the point can be mapped from the data source as well.
     *
     * @default 3
     * @aspType Object
     */

    verticalNegativeError?: number | string;

    /**
     * The horizontal positive error of the point can be mapped from the data source as well.
     *
     * @default 1
     * @aspType Object
     */

    horizontalPositiveError?: number | string;

    /**
     * The horizontal negative error of the point can be mapped from the data source as well.
     *
     * @default 1
     * @aspType Object
     */

    horizontalNegativeError?: number | string;

    /**
     * The `errorBarCap` property allows customization of the appearance and behavior of the caps at the ends of error bars in a chart series.
     */
    errorBarCap?: ErrorBarCapSettingsModel;

    /**
     * Defines the color for the error bar, which is mapped to the data source mapping name.
     *
     * @default ''
     */
    errorBarColorMapping?: string;

}

/**
 * Interface for a class SeriesBase
 */
export interface SeriesBaseModel {

    /**
     * The data source field that contains the x value.
     * It is applicable to both series and technical indicators.
     *
     * @default ''
     */

    xName?: string;

    /**
     * The data source field that contains the color mapping value.
     * It is applicable for range color mapping.
     */
    colorName?: string;

    /**
     * The data source field that contains the high value.
     * It is applicable for both financial series and technical indicators.
     *
     * @default ''
     */

    high?: string;

    /**
     * The data source field that contains the low value.
     * It is applicable for both financial series and technical indicators.
     *
     * @default ''
     */

    low?: string;

    /**
     * The data source field that contains the open value.
     * It is applicable for both financial series and technical indicators.
     *
     * @default ''
     */

    open?: string;

    /**
     * The data source field that contains the close value.
     * It is applicable for both financial series and technical indicators.
     *
     * @default ''
     */

    close?: string;

    /**
     * Defines the data source field that contains the volume value in candle charts.
     * It is applicable for both financial series and technical indicators.
     *
     * @default ''
     */

    volume?: string;

    /**
     * The data source field that contains the color value of a point.
     * It is applicable for series.
     *
     * @default ''
     */

    pointColorMapping?: string;

    /**
     * If set to `true`, the series will be visible. If set to `false`, the series will be hidden.
     *
     * @default true
     */

    visible?: boolean;

    /**
     * The name of the horizontal axis associated with the series. It requires `axes` of the chart.
     * It is applicable for series and technical indicators.
     * ```html
     * <div id='Chart'></div>
     * ```
     * ```typescript
     * let chart: Chart = new Chart({
     * ...
     *     columns: [{ width: '50%' },
     *               { width: '50%' }],
     *     axes: [{
     *                name: 'xAxis 1',
     *                columnIndex: 1
     *            }],
     *     series: [{
     *                dataSource: data,
     *                xName: 'x', yName: 'y',
     *                xAxisName: 'xAxis 1'
     *     }],
     * });
     * chart.appendTo('#Chart');
     * ```
     *
     * @default null
     */

    xAxisName?: string;

    /**
     * The name of the vertical axis associated with the series. It requires `axes` of the chart.
     * It is applicable for series and technical indicators.
     * ```html
     * <div id='Chart'></div>
     * ```
     * ```typescript
     * let chart: Chart = new Chart({
     * ...
     *     rows: [{ height: '50%' },
     *            { height: '50%' }],
     *     axes: [{
     *                name: 'yAxis 1',
     *                rowIndex: 1
     *            }],
     *     series: [{
     *                dataSource: data,
     *                xName: 'x', yName: 'y',
     *                yAxisName: 'yAxis 1'
     *     }],
     * });
     * chart.appendTo('#Chart');
     * ```
     *
     * @default null
     */

    yAxisName?: string;

    /**
     * Options for customizing the animation of the series.
     * By default, animation is enabled with a duration of 1000 milliseconds (about 1 second). It can be disabled by setting enable to `false`.
     * The following properties are supported in animation:
     * * enable: If set to true, the series is animated on initial loading.
     * * duration: The duration of the animation in milliseconds.
     * * delay: The delay before the animation starts, in milliseconds.
     */

    animation?: AnimationModel;

    /**
     * The fill color for the series, which accepts values in hex or rgba as a valid CSS color string.
     * It also represents the color of the signal lines in technical indicators.
     * For technical indicators, the default value is 'blue', and for series, it is null.
     *
     * @default null
     */

    fill?: string;

    /**
     * The stroke width for the series, applicable only for `Line` type series.
     * It also represents the stroke width of the signal lines in technical indicators.
     *
     * @default 1
     */

    width?: number;

    /**
     * Defines the pattern of dashes and gaps used to stroke the lines in `Line` type series.
     *
     * @default ''
     */

    dashArray?: string;

    /**
     * Specifies the data source for the series. It can be an array of JSON objects, or an instance of DataManager.
     * ```html
     * <div id='Chart'></div>
     * ```
     * ```typescript
     * let dataManager: DataManager = new DataManager({
     *    url: 'https://services.syncfusion.com/js/production/api/orders'
     * });
     * let query: Query = new Query().take(5);
     * let chart: Chart = new Chart({
     * ...
     *   series: [{
     *        type: 'Column',
     *        dataSource: dataManager,
     *        xName: 'CustomerID',
     *        yName: 'Freight',
     *        query: query
     *    }],
     * ...
     * });
     * chart.appendTo('#Chart');
     * ```
     *
     * @default ''
     */

    dataSource?: Object | DataManager;

    /**
     * Specifies a query to select data from the data source. This property is applicable only when the data source is an `ej.DataManager`.
     *
     * @default ''
     */
    query?: Query;

    /**
     * Specifies a collection of regions used to differentiate a line series.
     */
    segments?: ChartSegmentModel[];

    /**
     * Defines the axis along which the line series will be split.
     */
    segmentAxis?: Segment;

    /**
     * This property is used to improve chart performance through data mapping for the series data source.
     *
     * @default false
     */
    enableComplexProperty?: boolean;

}

/**
 * Interface for a class Series
 */
export interface SeriesModel extends SeriesBaseModel{

    /**
     * The `name` property allows setting a name for the series, which will be displayed in the legend, identifying different series in the chart, especially when multiple series are present.
     *
     * @default ''
     */

    name?: string;

    /**
     * The data source field that contains the y value.
     *
     * @default ''
     */

    yName?: string;

    /**
     * Specifies the type of series to be drawn in radar or polar charts.
     * The available options are:
     * * 'Line' - Renders a line series.
     * * 'Column' - Renders a column series.
     * * 'Area' - Renders an area series.
     * * 'Scatter' - Renders a scatter series.
     * * 'Spline' - Renders a spline series.
     * * 'StackingColumn' - Renders a stacking column series.
     * * 'StackingArea' - Renders a stacking area series.
     * * 'RangeColumn' - Renders a range column series.
     * * 'SplineArea' - Renders a spline area series.
     *
     * @default 'Line'
     */
    drawType?: ChartDrawType;

    /**
     * Specifies whether to join the start and end points of a line/area series used in a polar/radar chart to form a closed path.
     *
     * @default true
     */
    isClosed?: boolean;

    /**
     * This property is used in financial charts to visualize price movements in stocks.
     * It defines the color of the candle/point when the opening price is less than the closing price.
     *
     * @default null
     */

    bearFillColor?: string;

    /**
     * This property is used in financial charts to visualize price movements in stocks.
     * It defines the color of the candle/point when the opening price is higher than the closing price.
     *
     * @default null
     */

    bullFillColor?: string;

    /**
     * This property is applicable for the candle series.
     * It enables or disables the visual comparison of the current values with previous values in stock charts.
     *
     * @default false
     */
    enableSolidCandles?: boolean;

    /**
     * The data source field that contains the size value for the y-axis.
     *
     * @default ''
     */

    size?: string;

    /**
     * The `binInterval` property controls the width of each bin and the interval between bins for histogram points.
     *
     * @default null
     * @aspDefaultValueIgnore
     */

    binInterval?: number;

    /**
     * Specifies whether to display the normal distribution curve for the histogram series.
     *
     * @default false
     */

    showNormalDistribution?: boolean;

    /**
     * This property allows the grouping of series in stacked column and stacked bar charts.
     * Any string value can be assigned to the `stackingGroup` property.
     * Series with the same `stackingGroup` value will be grouped together in the chart.
     *
     * @default ''
     */

    stackingGroup?: string;

    /**
     * Options for customizing the border of the series.
     > Note that this property is applicable only for `Column` and `Bar` type series.
     */

    border?: BorderModel;

    /**
     * Configures the options for displaying series names as inline labels in the chart.
     */
    labelSettings?: SeriesLabelSettingsModel;

    /**
     * Options for customizing and displaying the last value in the series.
     */
    lastValueLabel?: LastValueLabelSettingsModel;

    /**
     * Sets the opacity of the series, with a value between 0 and 1 where 0 is fully transparent and 1 is fully opaque.
     *
     * @default 1
     */
    opacity?: number;

    /**
     * The z-order of the series, which controls the stack order of the series. Higher values are drawn on top of lower values.
     *
     * @default 0
     */
    zOrder?: number;

    /**
     * Defines the name that specifies the chart series are mutually exclusive and can be overlaid.
     * Series in the same group share the same baseline and location on the corresponding axis.
     *
     * @default ''
     */

    groupName?: string;

    /**
     * The type of the series determines the visual representation of the data.
     * Available series types include:
     * * Line - Draws a line series.
     * * Column - Draws a column series.
     * * Area - Draws an area series.
     * * Bar - Draws a bar series.
     * * Histogram - Draws a histogram series.
     * * StackingColumn - Draws a stacking column series.
     * * StackingArea - Draws a stacking area series.
     * * StackingBar - Draws a stacking bar series.
     * * StepLine - Draws a step line series.
     * * StepArea - Draws a step area series.
     * * Scatter - Draws a scatter series.
     * * Spline - Draws a spline series.
     * * StackingColumn100 - Draws a 100% stacked column series.
     * * StackingBar100 - Draws a 100% stacked bar series.
     * * StackingArea100 - Draws a 100% stacked area series.
     * * RangeColumn - Draws a range column series.
     * * Hilo - Draws a Hilo series.
     * * HiloOpenClose - Draws a Hilo Open Close series.
     * * Waterfall - Draws a waterfall series.
     * * RangeArea - Draws a range area series.
     * * SplineRangeArea - Draws a spline range area series.
     * * Bubble - Draws a bubble series.
     * * Candle - Draws a candle series.
     * * Polar - Draws a polar series.
     * * Radar - Draws a radar series.
     * * BoxAndWhisker - Draws a box and whisker series.
     * * Pareto - Draws a Pareto series.
     *
     * @default 'Line'
     */

    type?: ChartSeriesType;

    /**
     * Options for displaying and customizing error bars for individual points in a series.
     */
    errorBar?: ErrorBarSettingsModel;

    /**
     * Options for displaying and customizing markers for individual points in a series.
     */
    marker?: MarkerSettingsModel;

    /**
     * Options for customizing the Pareto line series, including its appearance and behavior in the chart.
     */
    paretoOptions?: ParetoOptionsModel;

    /**
     * Applies a linear gradient fill to the series.
     * The gradient transitions colors along a straight line.
     * When both linearGradient and radialGradient are specified, linearGradient takes precedence.
     *
     * @default null
     */
    linearGradient?: LinearGradientModel;

    /**
     * Applies a radial gradient fill to the series.
     * The gradient transitions colors outward from a central point.
     *
     * @default null
     */
    radialGradient?: RadialGradientModel;

    /**
     * Customize the drag settings for the series with this property to configure drag behavior in the chart.
     */
    dragSettings?: DragSettingsModel;

    /**
     * Defines the collection of trendlines used to predict the trend.
     */
    trendlines?: TrendlineModel[];

    /**
     * Controls whether the tooltip for the chart series is enabled or disabled. Set to true to display tooltips on hover, or false to hide them.
     *
     * @default true
     */
    enableTooltip?: boolean;

    /**
     * Enables or disables the display of tooltips for the nearest data point to the cursor for series.
     *
     * @default true
     */
    showNearestTooltip?: boolean;

    /**
     * Use this property to define a custom format for how tooltips are displayed.
     * ```html
     * <div id='Chart'></div>
     * ```
     * ```typescript
     * let chart: Chart = new Chart({
     * ...
     *    series: [{
     *           dataSource: data,
     *           xName: 'x',
     *           yName: 'y',
     *           tooltipFormat: '${point.x} : ${point.y}'
     *     }],
     *    tooltip: {
     *       enable: true
     *    }
     * });
     * chart.appendTo('#Chart');
     * ```
     *
     * @default ''
     */
    tooltipFormat?: string;

    /**
     * The data source field that contains the value to be displayed in the tooltip.
     *
     * @default ''
     */
    tooltipMappingName?: string;

    /**
     * Specifies the shape of the legend icon for each series.
     * Available shapes for legend:
     * * Circle - Renders a circular icon.
     * * Rectangle - Renders a rectangular icon.
     * * Triangle - Renders a triangular icon.
     * * Diamond - Renders a diamond-shaped icon.
     * * Cross - Renders a cross-shaped icon.
     * * HorizontalLine - Renders a horizontal line icon.
     * * VerticalLine - Renders a vertical line icon.
     * * Pentagon - Renders a pentagon-shaped icon.
     * * InvertedTriangle - Renders an inverted triangle-shaped icon.
     * * SeriesType - Uses the default icon shape based on the series type.
     * * Image - Renders a custom image for the legend icon.
     *
     * @default 'SeriesType'
     */

    legendShape?: LegendShape;

    /**
     * The URL for the image to be displayed as a legend icon.
     > Note that `legendShape` must be set to `Image`.
     *
     * @default ''
     */

    legendImageUrl?: string;

    /**
     * The `selectionStyle` property is used to specify custom CSS styles for the selected series or points.
     *
     * @default null
     */
    selectionStyle?: string;

    /**
     * The `unSelectedStyle` property is used to specify custom CSS styles for the deselected series or points.
     *
     * @default null
     */
    unSelectedStyle?: string;

    /**
     * The `nonHighlightStyle` property is used to specify custom CSS styles for the non-highlighted series or points.
     *
     * @default null
     */
    nonHighlightStyle?: string;

    /**
     * Specifies the minimum radius for the data points in the series.
     *
     * @default 1
     */
    minRadius?: number;

    /**
     * Specifies the maximum radius for the data points in the series.
     *
     * @default 3
     */
    maxRadius?: number;

    /**
     * Specifies the type of spline used for rendering.
     * Available options include:
     * * Natural - Renders a natural spline.
     * * Cardinal - Renders a cardinal spline.
     * * Clamped - Renders a clamped spline.
     * * Monotonic - Renders a monotonic spline.
     *
     * @default 'Natural'
     */
    splineType?: SplineType;

    /**
     * Specifies the tension parameter for cardinal splines. This affects the curvature of the spline.
     *
     * @default 0.5
     */
    cardinalSplineTension?: number;

    /**
     * Customization options for the appearance of empty points in the series.
     * `null` or `undefined` values are considered empty points.
     */
    emptyPointSettings?: EmptyPointSettingsModel;

    /**
     * If set to true, the mean value for the box and whisker plot will be visible.
     *
     * @default true
     */
    showMean?: boolean;

    /**
     * Specifies the box plot mode for the box and whisker chart series.
     * The available modes are:
     * Exclusive - Renders the series based on the exclusive mode.
     * Inclusive - Renders the series based on the inclusive mode.
     * Normal - Renders the series based on the normal mode.
     *
     * @default 'Normal'
     */
    boxPlotMode?: BoxPlotMode;

    /**
     * Specifies whether to display outliers in the Box and Whisker chart.
     *
     * If set to `true`, outliers will be displayed as individual points beyond the whiskers, representing data points that significantly differ from the rest of the dataset.
     * If set to `false`, outliers will be hidden, and only the box, median, and whiskers will be rendered.
     *
     * Outliers are typically used to identify extreme values in statistical data representation.
     *
     * @default true
     */
    showOutliers?: boolean;

    /**
     * The `columnWidth` property can be used to customize the width of the columns in a column series.
     > Note that if the series type is histogram, the default value is 1; otherwise, it is 0.7.
     *
     * @default null
     * @aspDefaultValueIgnore
     * @blazorDefaultValue Double.NaN
     */
    columnWidth?: number;

    /**
     * To render the column series points with a specific column width in pixels.
     *
     * @default null
     * @aspDefaultValueIgnore
     * @blazorDefaultValue Double.NaN
     */
    columnWidthInPixel?: number;

    /**
     * Defines the shape of the data in a column and bar chart.
     * Available shapes are:
     * * Rectangle: Displays the data in a column and bar chart with a rectangular shape.
     * * Cylinder: Displays the data in a column and bar chart with a cylindrical shape.
     *
     * @default 'Rectangle'
     */
    columnFacet?: ShapeType;

    /**
     * This property determines the space between columns in a column or bar chart.
     > Note that it takes a value from 0 to 1.
     *
     * @default 0
     */
    columnSpacing?: number;

    /**
     * Defines the visual representation of negative changes in waterfall charts.
     *
     * @default '#C64E4A'
     */
    negativeFillColor?: string;

    /**
     * Defines the visual representation of summaries in waterfall charts.
     *
     * @default '#4E81BC'
     */
    summaryFillColor?: string;

    /**
     * Defines the collection of indexes for the intermediate summary columns in waterfall charts.
     *
     * @default []
     * @aspType int[]
     */
    intermediateSumIndexes?: number[];

    /**
     * Defines the collection of indexes for the overall summary columns in waterfall charts.
     *
     * @default []
     * @aspType int[]
     */
    sumIndexes?: number[];

    /**
     * The `step` property can be used to change the position of the steps in step line, step area, and step range area chart types.
     * * Left: Steps start from the left side of the 2nd point.
     * * Center: Steps start between the data points.
     * * Right: Steps start from the right side of the 1st point. 
     *
     * @default 'Left'
     */
    step?: StepPosition;

    /**
     * When set to true, the step series will be rendered without the vertical lines (risers) connecting the horizontal steps.
     > Note this property is only applicable to step series.
     *
     * @default false
     */
    noRisers?: boolean;

    /**
     * Options to improve accessibility for series elements.
     */
    accessibility?: SeriesAccessibilityModel;

    /**
     * Specifies the appearance of the line connecting adjacent points in waterfall charts.
     */

    connector?: ConnectorModel;

    /**
     * The `cornerRadius` property specifies the radius for the corners of the column series points to create a rounded appearance in the chart.
     */
    cornerRadius?: CornerRadiusModel;

    /**
     * Adds a data point to the data source.
     *
     * @function addPoint
     * @param {Object} dataPoint - The data point to be added.
     * @param {number} duration - The duration for the animation.
     * @returns {void}
     */
    addPoint?(dataPoint: Object, duration?: number) : void

    /**
     * Removes a data point from the series data source at the specified index.
     *
     * @function removePoint
     * @param {number} index - The index of the data point to be removed.
     * @param {number} duration - The duration for the animation.
     * @returns {void}
     */
    removePoint?(index: number, duration?: number) : void

    /**
     * Sets the data source with the provided data.
     *
     * @function setData
     * @param {Object[]} data - An array of objects representing the data points.
     * @param {number} duration - The duration for the animation.
     * @returns {void}
     */
    setData?(data: Object[], duration?: number) : void

}