import type { ISelectedPointOptions } from "../../Charting/Model/DataPointSelectionPaletteProvider";
import type { INonUniformHeatmapSeriesOptions } from "../../Charting/Model/NonUniformHeatmapDataSeries";
import type { IUniformHeatmapSeriesOptions } from "../../Charting/Model/UniformHeatmapDataSeries";
import type { IPointMarkerOptions } from "../../Charting/Visuals/PointMarkers/BasePointMarker";
import type { ISpritePointMarkerOptions } from "../../Charting/Visuals/PointMarkers/SpritePointMarker";
import type { IFadeAnimationOptions } from "../../Charting/Visuals/RenderableSeries/Animations/FadeAnimation";
import type { IScaleAnimationOptions } from "../../Charting/Visuals/RenderableSeries/Animations/ScaleAnimation";
import type { IBaseAnimationOptions } from "../../Charting/Visuals/RenderableSeries/Animations/SeriesAnimation";
import type { ISweepAnimationOptions } from "../../Charting/Visuals/RenderableSeries/Animations/SweepAnimation";
import type { IWaveAnimationOptions } from "../../Charting/Visuals/RenderableSeries/Animations/WaveAnimation";
import type { IHeatmapRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/BaseHeatmapRenderableSeries";
import type { IBaseStackedCollectionOptions } from "../../Charting/Visuals/RenderableSeries/BaseStackedCollection";
import type { IBandSeriesDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/BandSeriesDataLabelProvider";
import type { IBaseDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/BaseDataLabelProvider";
import type { IBubbleSeriesDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/BubbleSeriesDataLabelProvider";
import type { IColumnSeriesDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/ColumnSeriesDataLabelProvider";
import type { IContoursDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/ContoursDataLabelProvider";
import type { IDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/DataLabelProvider";
import type { IHeatmapDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/HeatMapDataLabelProvider";
import type { ILineSeriesDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/LineSeriesDataLabelProvider";
import type { ITextDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/TextDataLabelProvider";
import type { IRectangleSeriesDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/DataLabels/RectangleSeriesDataLabelProvider";
import type { IBandRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastBandRenderableSeries";
import type { IBubbleRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastBubbleRenderableSeries";
import type { ICandlestickRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastCandlestickRenderableSeries";
import type { IColumnRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastColumnRenderableSeries";
import type { IFastErrorBarsRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastErrorBarsRenderableSeries";
import type { IImpulseRenderableSeries } from "../../Charting/Visuals/RenderableSeries/FastImpulseRenderableSeries";
import type { IFastLineRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastLineRenderableSeries";
import type { IMountainRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastMountainRenderableSeries";
import type { IOhlcRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastOhlcRenderableSeries";
import type { ITextRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastTextRenderableSeries";
import type { IGlowEffectOptions } from "../../Charting/Visuals/RenderableSeries/GlowEffect";
import type { IBaseRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/IBaseRenderableSeriesOptions";
import type { INonUniformHeatmapRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/NonUniformHeatmapRenderableSeries";
import type { IShadowEffectOptions } from "../../Charting/Visuals/RenderableSeries/ShadowEffect";
import type { ISplineBandRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/SplineBandRenderableSeries";
import type { ISplineLineRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/SplineLineRenderableSeries";
import type { ISplineMountainRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/SplineMountainRenderableSeries";
import type { ISmoothStackedMountainRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/SmoothStackedMountainRenderableSeries";
import type { IStackedColumnCollectionOptions } from "../../Charting/Visuals/RenderableSeries/StackedColumnCollection";
import type { IStackedColumnRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/StackedColumnRenderableSeries";
import type { IStackedMountainRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/StackedMountainRenderableSeries";
import type { IContoursRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/UniformContoursRenderableSeries";
import type { IXyScatterRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/XyScatterRenderableSeries";
import type { IFastLineSegmentRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastLineSegmentRenderableSeries";
import type { IFastRectangleRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastRectangleRenderableSeries";
import type { IPolarLineRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/Polar/PolarLineRenderableSeries";
import type { IPolarBandRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/Polar/PolarBandRenderableSeries";
import type { IPolarColumnRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/Polar/PolarColumnRenderableSeries";
import type { IPolarMountainRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/Polar/PolarMountainRenderableSeries";
import type { IPolarStackedMountainRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/Polar/PolarStackedMountainRenderableSeries";
import type { IFastBoxPlotRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastBoxPlotRenderableSeries";
import type { IFastTriangleRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/FastTriangleRenderableSeries";
import type { IPolarUniformHeatmapRenderableSeriesOptions } from "../../Charting/Visuals/RenderableSeries/Polar/PolarUniformHeatmapRenderableSeries";
import type { IPolarColumnSeriesDataLabelProviderOptions } from "../../Charting/Visuals/RenderableSeries/Polar/DataLabels/PolarColumnSeriesDataLabelProvider";
import type { IColumnRenderableSeries3DOptions } from "../../Charting3D/Visuals/RenderableSeries/ColumnRenderableSeries3D";
import type { IPointLineRenderableSeries3DOptions } from "../../Charting3D/Visuals/RenderableSeries/PointLineRenderableSeries3D";
import type { IBaseRenderableSeries3DOptions } from "../../Charting3D/Visuals/RenderableSeries/BaseRenderableSeries3D";
import type { ISurfaceMeshRenderableSeries3DOptions } from "../../Charting3D/Visuals/RenderableSeries/SurfaceMesh/SurfaceMeshRenderableSeries3D";
import type { IBasePointMarker3DOptions } from "../../Charting3D/Visuals/PointMarkers/BasePointMarker3D";
import type { IGradientColorPaletteOptions } from "../../Charting3D/Visuals/RenderableSeries/SurfaceMesh/GradientColorPalette";
import type { ISolidColorBrushPaletteOptions } from "../../Charting3D/Visuals/RenderableSeries/SurfaceMesh/SolidColorBrushPalette";
import type { GradientParams } from "../../Core/GradientParams";
import type { EAnimationType } from "../../types/AnimationType";
import type { EDataLabelProviderType } from "../../types/DataLabelProviderType";
import type { EPaletteProviderType } from "../../types/PaletteProviderType";
import type { EPointMarkerType } from "../../types/PointMarkerType";
import type { ESeriesType } from "../../types/SeriesType";
import type { EShaderEffectType } from "../../types/ShaderEffectType";
import type { ESeriesType3D } from "../../Charting3D/Visuals/RenderableSeries/ESeriesType";
import type { EPointMarker3DType } from "../../types/PointMarker3DType";
import type { TBoxPlotSeriesData, THlcSeriesData, TOhlcSeriesData, TUniformGrid3DData, TXySeriesData, TXyTextSeriesData, TXyxSeriesData, TXyxySeriesData, TXyySeriesData, TXyzSeries3DData, TXyzSeriesData } from "./DataSeriesDefinitions";
/** Definition of a pointmarker, comprising a {@link EPointMarkerType} and the relevant options */
export type TPointMarkerDefinition = {
    type: EPointMarkerType.Cross;
    options?: IPointMarkerOptions;
} | {
    type: EPointMarkerType.Ellipse;
    options?: IPointMarkerOptions;
} | {
    type: EPointMarkerType.Sprite;
    options?: ISpritePointMarkerOptions;
} | {
    type: EPointMarkerType.Square;
    options?: IPointMarkerOptions;
} | {
    type: EPointMarkerType.Triangle;
    options?: IPointMarkerOptions;
} | {
    type: EPointMarkerType.X;
    options?: IPointMarkerOptions;
} | {
    type: EPointMarkerType.Custom;
    customType?: string;
    options?: IPointMarkerOptions;
};
/** Definition of a shader effect, comprising a {@link EShaderEffectType} and the relevant options */
export type TEffectDefinition = {
    type: EShaderEffectType.Glow;
    options?: IGlowEffectOptions;
} | {
    type: EShaderEffectType.Shadow;
    options?: IShadowEffectOptions;
};
/** Definition of a palette provider, comprising a {@link EPaletteProviderType} and the relevant options */
export type TPaletteProviderDefinition = {
    type: EPaletteProviderType.Gradient;
    options: GradientParams;
} | {
    type: EPaletteProviderType.DataPointSelection;
    options: ISelectedPointOptions;
} | {
    type: EPaletteProviderType.Custom;
    customType: string;
    options?: any;
};
/** Definition of an animation, comprising a {@link EAnimationType} and the relevant options */
export type TAnimationDefinition = {
    type: EAnimationType.Fade;
    options?: IFadeAnimationOptions;
} | {
    type: EAnimationType.Scale;
    options?: IScaleAnimationOptions;
} | {
    type: EAnimationType.Sweep;
    options?: ISweepAnimationOptions;
} | {
    type: EAnimationType.Wave;
    options?: IWaveAnimationOptions;
} | {
    type: EAnimationType.Custom;
    customType?: string;
    options?: IBaseAnimationOptions;
};
export type TDataLabelProviderDefinition = {
    type: EDataLabelProviderType.Default;
    options?: IDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Line;
    options?: ILineSeriesDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Column;
    options?: IColumnSeriesDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Rectangle;
    options?: IRectangleSeriesDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Text;
    options?: ITextDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Heatmap;
    options?: IHeatmapDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Contours;
    options?: IContoursDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Band;
    options?: IBandSeriesDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Bubble;
    options?: IBubbleSeriesDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.NonUniformHeatmap;
    options?: IHeatmapDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.StackedCollection;
    options?: IBaseStackedCollectionOptions;
} | {
    type: EDataLabelProviderType.PolarDefault;
    options?: IDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.PolarText;
    options?: ITextDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.PolarColumn;
    options?: IPolarColumnSeriesDataLabelProviderOptions;
} | {
    type: EDataLabelProviderType.Custom;
    customType: string;
    options?: IBaseDataLabelProviderOptions;
};
/**
 * Definition of a renderable series, comprising a {@link ESeriesType}, the relevant options,
 * and an optional data object whose type depends on the series type
 */
export type TSeriesDefinition = {
    type: ESeriesType.BandSeries;
    options?: IBandRenderableSeriesOptions;
    xyyData?: TXyySeriesData;
} | {
    type: ESeriesType.PolarBandSeries;
    options?: IPolarBandRenderableSeriesOptions;
    xyyData?: TXyySeriesData;
} | {
    type: ESeriesType.BubbleSeries;
    options?: IBubbleRenderableSeriesOptions;
    xyzData?: TXyzSeriesData;
} | {
    type: ESeriesType.ColumnSeries;
    options?: IColumnRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.ImpulseSeries;
    options?: IImpulseRenderableSeries;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.CandlestickSeries;
    options?: ICandlestickRenderableSeriesOptions;
    ohlcData?: TOhlcSeriesData;
} | {
    type: ESeriesType.LineSeries;
    options?: IFastLineRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.PolarLineSeries;
    options?: IPolarLineRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.MountainSeries;
    options?: IMountainRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.PolarMountainSeries;
    options?: IPolarMountainRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.ErrorBarsSeries;
    options?: IFastErrorBarsRenderableSeriesOptions;
    hlcData?: THlcSeriesData;
} | {
    type: ESeriesType.OhlcSeries;
    options?: IOhlcRenderableSeriesOptions;
    ohlcData?: TOhlcSeriesData;
} | {
    type: ESeriesType.ScatterSeries;
    options?: IXyScatterRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.PolarScatterSeries;
    options?: IXyScatterRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.TextSeries;
    options?: ITextRenderableSeriesOptions;
    xyTextData?: TXyTextSeriesData;
} | {
    type: ESeriesType.SplineBandSeries;
    options?: ISplineBandRenderableSeriesOptions;
    xyyData?: TXyySeriesData;
} | {
    type: ESeriesType.SplineLineSeries;
    options?: ISplineLineRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.SplineMountainSeries;
    options?: ISplineMountainRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.SmoothStackedMountainSeries;
    options?: ISmoothStackedMountainRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.UniformHeatmapSeries;
    options?: IHeatmapRenderableSeriesOptions;
    heatmapData?: IUniformHeatmapSeriesOptions;
} | {
    type: ESeriesType.PolarUniformHeatmapSeries;
    options?: IPolarUniformHeatmapRenderableSeriesOptions;
    heatmapData?: IUniformHeatmapSeriesOptions;
} | {
    type: ESeriesType.NonUniformHeatmapSeries;
    options?: INonUniformHeatmapRenderableSeriesOptions;
    heatmapData?: INonUniformHeatmapSeriesOptions;
} | {
    type: ESeriesType.UniformContoursSeries;
    options?: IContoursRenderableSeriesOptions;
    heatmapData?: IUniformHeatmapSeriesOptions;
} | {
    type: ESeriesType.StackedColumnSeries;
    options?: IStackedColumnRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.PolarStackedColumnSeries;
    options?: IPolarColumnRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.StackedMountainSeries;
    options?: IStackedMountainRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.PolarStackedMountainSeries;
    options?: IPolarStackedMountainRenderableSeriesOptions;
    xyData?: TXySeriesData;
} | {
    type: ESeriesType.StackedColumnCollection;
    options?: IStackedColumnCollectionOptions;
    series?: TSeriesDefinition[];
} | {
    type: ESeriesType.PolarStackedColumnCollection;
    options?: IBaseStackedCollectionOptions;
    series?: TSeriesDefinition[];
} | {
    type: ESeriesType.StackedMountainCollection;
    options?: IBaseStackedCollectionOptions;
    series?: TSeriesDefinition[];
} | {
    type: ESeriesType.PolarStackedMountainCollection;
    options?: IBaseStackedCollectionOptions;
    series?: TSeriesDefinition[];
} | {
    type: ESeriesType.RectangleSeries;
    options?: IFastRectangleRenderableSeriesOptions;
    xyxData?: TXyxSeriesData;
    xyxyData?: TXyxySeriesData;
} | {
    type: ESeriesType.BoxPlotSeries;
    options?: IFastBoxPlotRenderableSeriesOptions;
    boxPlotData?: TBoxPlotSeriesData;
} | {
    type: ESeriesType.TriangleSeries;
    options?: IFastTriangleRenderableSeriesOptions;
    xyData?: TXySeriesData;
    xyxyData?: TXyxySeriesData;
} | {
    type: ESeriesType.LineSegmentSeries;
    options?: IFastLineSegmentRenderableSeriesOptions;
    xyData?: TXySeriesData;
    xyxyData?: TXyxySeriesData;
} | {
    type: ESeriesType.PolarColumnSeries;
    options?: IPolarColumnRenderableSeriesOptions;
    xyData?: TXySeriesData;
    xyxData?: TXyxSeriesData;
    xyxyData?: TXyxySeriesData;
} | {
    type: ESeriesType.PolarTriangleSeries;
    options?: IFastTriangleRenderableSeriesOptions;
    xyData?: TXySeriesData;
    xyxyData?: TXyxySeriesData;
} | {
    type: ESeriesType.PolarTextSeries;
    options?: ITextRenderableSeriesOptions;
    xyTextData?: TXyTextSeriesData;
} | {
    type: ESeriesType.Custom;
    customType?: string;
    options?: IBaseRenderableSeriesOptions;
};
export type TSeriesDefinition3D = {
    type: ESeriesType3D.ColumnRenderableSeries3D;
    options?: IColumnRenderableSeries3DOptions;
    xyzData?: TXyzSeries3DData;
} | {
    type: ESeriesType3D.PointLineRenderableSeries3D;
    options?: IPointLineRenderableSeries3DOptions;
    xyzData?: TXyzSeries3DData;
} | {
    type: ESeriesType3D.ScatterRenderableSeries3D;
    options?: IBaseRenderableSeries3DOptions;
    xyzData?: TXyzSeries3DData;
} | {
    type: ESeriesType3D.SurfaceMeshRenderableSeries3D;
    options?: ISurfaceMeshRenderableSeries3DOptions;
    uniformGridData?: TUniformGrid3DData;
};
/** Definition of a pointmarker, comprising a {@link EPointMarker3DType} and the relevant options */
export type TPointMarkerDefinition3D = {
    type: EPointMarker3DType.Sphere;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Cube;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Pyramid;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Cylinder;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Ellipse;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Pixel;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Quad;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Triangle;
    options?: IBasePointMarker3DOptions;
} | {
    type: EPointMarker3DType.Custom;
    customType?: string;
    options?: IBasePointMarker3DOptions;
};
export type TPaletteDefinition = {
    type: EPaletteProviderType.Gradient3D;
    options?: IGradientColorPaletteOptions;
} | {
    type: EPaletteProviderType.Solid3D;
    options?: ISolidColorBrushPaletteOptions;
};
