import type { TSeriesDefinition } from "../../../Builder/types/SeriesDefinitions";
import { SeriesAnimationFiniteStateMachine } from "../../../Core/Animations/AnimationFiniteStateMachine";
import type { EventHandler } from "../../../Core/EventHandler";
import { NumberRange } from "../../../Core/NumberRange";
import { ObservableArray } from "../../../Core/ObservableArray";
import type { EDataPointWidthMode } from "../../../types/DataPointWidthMode";
import { EDefaultRenderLayer } from "../../../types/DefaultRenderLayer";
import type { IOrderedRenderable } from "../../../types/OrderedRenderable";
import type { ESeriesType } from "../../../types/SeriesType";
import type { SCRTDoubleVector, TSciChart } from "../../../types/TSciChart";
import { EYRangeMode } from "../../../types/YRangeMode";
import type { ELineDrawMode, WebGlRenderContext2D } from "../../Drawing/WebGlRenderContext2D";
import type { SeriesInfo } from "../../Model/ChartData/SeriesInfo";
import type { IDataSeries } from "../../Model/IDataSeries";
import type { IPaletteProvider } from "../../Model/IPaletteProvider";
import type { IPointSeries } from "../../Model/PointSeries/IPointSeries";
import type { CoordinateCalculatorBase } from "../../Numerics/CoordinateCalculators/CoordinateCalculatorBase";
import type { EResamplingMode } from "../../Numerics/Resamplers/ResamplingMode";
import type { ResamplingParams } from "../../Numerics/Resamplers/ResamplingParams";
import type { RenderPassData } from "../../Services/RenderPassData";
import type { IThemeProvider } from "../../Themes/IThemeProvider";
import type { AxisBase2D } from "../Axis/AxisBase2D";
import type { IPointMarker } from "../PointMarkers/IPointMarker";
import type { SciChartSurface } from "../SciChartSurface";
import type { TDpiChangedEventArgs } from "../TextureManager/DpiHelper";
import type { SeriesAnimation } from "./Animations/SeriesAnimation";
import type { BaseStackedRenderableSeries } from "./BaseStackedRenderableSeries";
import type { BaseDataLabelProvider } from "./DataLabels/BaseDataLabelProvider";
import type { TPalettingState } from "./DrawingProviders/BaseSeriesDrawingProvider";
import type { ISeriesDrawingProvider } from "./DrawingProviders/ISeriesDrawingProvider";
import type { HitTestInfo } from "./HitTest/HitTestInfo";
import type { IHitTestProvider } from "./HitTest/IHitTestProvider";
import type { IRenderableSeries } from "./IRenderableSeries";
import type { RolloverModifierRenderableSeriesProps } from "./RolloverModifier/RolloverModifierRenderableSeriesProps";
import type { SeriesHoveredArgs } from "./SeriesHoveredArgs";
import type { SeriesSelectedArgs } from "./SeriesSelectedArgs";
import type { SeriesVisibleChangedArgs } from "./SeriesVisibleChangedArgs";
import type { ShaderEffect } from "./ShaderEffect";
/**
 * Options to pass to the {@link BaseStackedCollection} constructor
 */
export interface IBaseStackedCollectionOptions {
    /**
     * When true, the series is visible and drawn
     */
    isVisible?: boolean;
    /**
     * Sets the bound {@link AxisCore | XAxis} for this {@link BaseRenderableSeries}.
     * @remarks Does a lookup search on {@link SciChartSurface.xAxes} collection by Id matching {@link xAxisId | this.xAxisId}
     */
    xAxisId?: string;
    /**
     * Sets the bound {@link AxisCore | YAxis} for this {@link BaseRenderableSeries}.
     * @remarks Does a lookup search on {@link SciChartSurface.yAxes} collection by Id matching {@link yAxisId | this.yAxisId}
     */
    yAxisId?: string;
    /**
     * Sets 100% mode. When true, the stacked group becomes a 100% stacked chart
     */
    isOneHundredPercent?: boolean;
    /** Determines whether the y range for this series should consider only the visible data (the default), or include the drawn points just outside the visible range */
    yRangeMode?: EYRangeMode;
    /** An override to allow the series to appear to be drawn on a different surface to the one it is attached to.  Only relevant when using subcharts */
    surfaceRenderOrder?: number;
    /** The layer to draw the series on.  Defaults to SeriesRenderLayer */
    renderLayer?: EDefaultRenderLayer | number;
    /** The draw order.  Larger numbers draw on top.  Defaults to the position of the series in the renderableSeries array. */
    renderOrder?: number;
    /** Another series or annotation to draw relative to.  The offset can be positive or negative and can (and usually should) be fractional */
    renderNextTo?: {
        renderable: IOrderedRenderable | string;
        offset: number;
    };
}
/**
 * A base class for stacked collections, which are used to create stacked mountain or column chart types.
 * Concrete types are {@link StackedColumnCollection} and {@link StackedMountainCollection}
 */
export declare abstract class BaseStackedCollection<T extends BaseStackedRenderableSeries> extends ObservableArray<T> implements IRenderableSeries, IOrderedRenderable {
    /** @inheritDoc */
    abstract readonly type: ESeriesType;
    /** @inheritDoc */
    readonly id: string;
    /** @inheritDoc */
    readonly isStacked = true;
    /** @inheritDoc */
    readonly isCollection: boolean;
    readonly isPolar: boolean;
    /** @inheritDoc */
    readonly supportsResampling = false;
    /** @inheritDoc */
    readonly isSpline = false;
    /** @inheritDoc */
    parentSurface: SciChartSurface;
    /** @inheritDoc */
    invalidateParentCallback: () => void;
    /**
     * the accumulated values which are used to draw each column/band for {@link BaseStackedRenderableSeries}
     */
    accumulatedValues0: SCRTDoubleVector;
    /** @inheritDoc */
    enableDrawingOptimisations: boolean;
    /**
     * The {@link TSciChart | SciChart WebAssembly Context} containing
     * native methods and access to our WebGL2 WebAssembly Drawing Engine
     */
    protected webAssemblyContext: TSciChart;
    protected accumulatedFinalAnimationValues0: SCRTDoubleVector;
    protected isAccumulatedVectorDirty: boolean;
    protected firstAnimationRender: boolean;
    protected animationFSM: SeriesAnimationFiniteStateMachine;
    protected dataLabelProviderProperty: BaseDataLabelProvider;
    protected currentRenderPassData: RenderPassData;
    private isVisibleProperty;
    private xAxisIdProperty;
    private yAxisIdProperty;
    private xAxisProperty;
    private yAxisProperty;
    private isOneHundredPercentProperty;
    private animationQueue;
    private yRangeModeProperty;
    private seriesNameProperty;
    private surfaceRenderOrderProperty;
    private renderLayerProperty;
    private renderOrderProperty;
    private renderNextToProperty;
    /**
     * Creates an instance of the {@link BaseStackedCollection}
     * @param webAssemblyContext The {@link TSciChart | SciChart WebAssembly Context} containing
     * native methods and access to our WebGL2 WebAssembly Drawing Engine
     * @param options Optional parameters of type {@link IBaseStackedCollectionOptions} to configure the series
     */
    protected constructor(webAssemblyContext: TSciChart, options?: IBaseStackedCollectionOptions);
    /** @inheritDoc */
    get isVisibleChanged(): EventHandler<SeriesVisibleChangedArgs>;
    /** @inheritDoc */
    get selected(): EventHandler<SeriesSelectedArgs>;
    /** @inheritDoc */
    get hovered(): EventHandler<SeriesHoveredArgs>;
    /** @inheritDoc */
    get isSelected(): boolean;
    /** @inheritDoc */
    set isSelected(isSelected: boolean);
    /** @inheritDoc */
    get isHovered(): boolean;
    /** @inheritDoc */
    set isHovered(isHovered: boolean);
    /** @inheritDoc */
    get isDigitalLine(): boolean;
    /** @inheritDoc */
    set isDigitalLine(isDigitalLine: boolean);
    /** @inheritDoc */
    get isVisible(): boolean;
    /** @inheritDoc */
    set isVisible(isVisible: boolean);
    /** @inheritDoc */
    get xAxisId(): string | undefined;
    /** @inheritDoc */
    set xAxisId(id: string);
    /** @inheritDoc */
    get xAxis(): AxisBase2D | undefined;
    /** @inheritDoc */
    get yAxis(): AxisBase2D | undefined;
    /** @inheritDoc */
    get yAxisId(): string | undefined;
    /** @inheritDoc */
    set yAxisId(id: string);
    /** @inheritDoc */
    get seriesName(): string | undefined;
    set seriesName(value: string);
    /**
     * Gets or sets 100% mode. When true, the stacked group becomes a 100% stacked chart
     */
    get isOneHundredPercent(): boolean;
    /**
     * Gets or sets 100% mode. When true, the stacked group becomes a 100% stacked chart
     */
    set isOneHundredPercent(value: boolean);
    /** @inheritDoc */
    get yRangeMode(): EYRangeMode;
    set yRangeMode(value: EYRangeMode);
    /**
     * dataSeries property is not supported for BaseStackedCollection
     */
    get dataSeries(): IDataSeries;
    /**
     * dataSeries property is not supported for BaseStackedCollection
     */
    set dataSeries(value: IDataSeries);
    /**
     * drawNaNAs property is not supported for BaseStackedCollection
     */
    get drawNaNAs(): ELineDrawMode;
    /**
     * drawNaNAs property is not supported for BaseStackedCollection
     */
    set drawNaNAs(value: ELineDrawMode);
    /**
     * drawingProviders property is not supported for BaseStackedCollection
     */
    get drawingProviders(): ISeriesDrawingProvider[];
    /**
     * drawingProviders property is not supported for BaseStackedCollection
     */
    set drawingProviders(value: ISeriesDrawingProvider[]);
    /**
     * hitTestProvider property is not supported for BaseStackedCollection
     */
    get hitTestProvider(): IHitTestProvider;
    /**
     * hitTestProvider property is not supported for BaseStackedCollection
     */
    set hitTestProvider(value: IHitTestProvider);
    /**
     * paletteProvider property is not supported for BaseStackedCollection
     */
    get paletteProvider(): IPaletteProvider;
    /**
     * paletteProvider property is not supported for BaseStackedCollection
     */
    set paletteProvider(value: IPaletteProvider);
    /**
     * pointMarker property is not supported for BaseStackedCollection
     */
    get pointMarker(): IPointMarker;
    /**
     * pointMarker property is not supported for BaseStackedCollection
     */
    set pointMarker(value: IPointMarker);
    /**
     * rolloverModifierProps property is not supported for BaseStackedCollection
     */
    get rolloverModifierProps(): RolloverModifierRenderableSeriesProps;
    /**
     * rolloverModifierProps property is not supported for BaseStackedCollection
     */
    set rolloverModifierProps(value: RolloverModifierRenderableSeriesProps);
    /**
     * stroke property is not supported for BaseStackedCollection
     */
    get stroke(): string;
    /**
     * stroke property is not supported for BaseStackedCollection
     */
    set stroke(value: string);
    /**
     * strokeThickness property is not supported for BaseStackedCollection
     */
    get strokeThickness(): number;
    /**
     * strokeThickness property is not supported for BaseStackedCollection
     */
    set strokeThickness(value: number);
    /**
     * effect property is not supported for BaseStackedCollection
     */
    get effect(): ShaderEffect;
    /**
     * effect property is not supported for BaseStackedCollection
     */
    set effect(effect: ShaderEffect);
    /**
     * opacity property is not supported for BaseStackedCollection
     */
    get opacity(): number;
    /**
     * opacity property is not supported for BaseStackedCollection
     */
    set opacity(value: number);
    /**
     * rolloverModifierProps1() is not supported for BaseStackedCollection
     */
    set rolloverModifierProps1(value: RolloverModifierRenderableSeriesProps);
    /**
     * rolloverModifierProps1() is not supported for BaseStackedCollection
     */
    get rolloverModifierProps1(): RolloverModifierRenderableSeriesProps;
    /**
     * resamplingMode property is not supported for BaseStackedCollection
     */
    get resamplingMode(): EResamplingMode;
    set resamplingMode(value: EResamplingMode);
    /**
     * resamplingPrecision property is not supported for BaseStackedCollection
     */
    get resamplingPrecision(): number;
    set resamplingPrecision(value: number);
    /** @inheritDoc */
    getSurfaceRenderOrder(): number;
    /** @inheritDoc */
    setSurfaceRenderOrder(value: number): void;
    /**
     * The render layer grouping within which the series will be draw.  Defaults to EDefaultRenderLayer.SeriesLayer (5)
     */
    getRenderLayer(): number;
    /**
     * The render layer grouping within which the series will be draw.  Defaults to EDefaultRenderLayer.SeriesLayer (5)
     */
    setRenderLayer(value: number | EDefaultRenderLayer): void;
    /** @inheritDoc */
    getRenderOrder(): number;
    /** @inheritDoc */
    setRenderOrder(value: number): void;
    /** @inheritDoc */
    setRenderNextTo(renderable: IOrderedRenderable | string, offset?: number): void;
    /** @inheritDoc */
    getRenderNextTo(): {
        renderable: string | IOrderedRenderable;
        offset: number;
    };
    /**
     * Notify the collection that the accumulated values need to be recalculated
     */
    setAccumulatedValuesDirty(): void;
    /** @inheritDoc */
    getIndicesRange(xRange: NumberRange): NumberRange;
    /** @inheritDoc */
    getDataPointWidth(xCoordCalc: CoordinateCalculatorBase, widthFraction: number, widthMode?: EDataPointWidthMode): number;
    protected get canDraw(): boolean;
    /** @inheritDoc */
    pushPalettedColors?(color: number, palettingState: TPalettingState): void;
    /** @inheritDoc */
    getSeriesInfo(hitTestInfo: HitTestInfo): SeriesInfo;
    /** @inheritDoc */
    applyTheme(themeProvider: IThemeProvider): void;
    /** @inheritDoc */
    delete(): void;
    /** @inheritDoc */
    abstract draw(renderContext: WebGlRenderContext2D, renderPassData: RenderPassData): void;
    /** @inheritDoc */
    notifyPropertyChanged(propertyName: string): void;
    /** @inheritDoc */
    onDpiChanged(args: TDpiChangedEventArgs): void;
    /** @inheritDoc */
    getBaseXValues(): number[];
    /** @inheritDoc */
    getDataSeriesName(): string;
    /** @inheritDoc */
    getDataSeriesValuesCount(): number;
    /**
     * gets if a data animation is currently running
     */
    get isRunningDataAnimation(): boolean;
    /** @inheritDoc */
    getNativeXValues(): SCRTDoubleVector;
    getNativeYValues(): SCRTDoubleVector;
    /**
     * The X values that line up with the accumulated (stacked) value vectors. Defaults to the
     * native X values of the first series. Subclasses unwinding a FIFO buffer override this to
     * return the unwound (logical-order) X values so X and accumulated Y stay aligned.
     */
    protected getXValuesForRange(): SCRTDoubleVector;
    /** @inheritDoc */
    abstract getXRange(): NumberRange;
    /** @inheritDoc */
    getYRange(xVisibleRange: NumberRange, isXCategoryAxis: boolean): NumberRange;
    /** @inheritDoc */
    hasDataSeries(): boolean;
    /** @inheritDoc */
    abstract hasDataSeriesValues(): boolean;
    /** @inheritDoc */
    hasStrokePaletteProvider(): boolean;
    /** @inheritDoc */
    hasFillPaletteProvider(): boolean;
    /** @inheritDoc */
    hasPointMarkerPaletteProvider(): boolean;
    /** @inheritDoc */
    onAttach(scs: SciChartSurface): void;
    /** @inheritDoc */
    onDetach(): void;
    /**
     * Updates accumulated vectors which are used to draw {@link BaseStackedRenderableSeries}
     */
    abstract updateAccumulatedVectors(): void;
    /**
     * Gets visible renderable series array
     */
    getVisibleSeries(): T[];
    /** @inheritDoc */
    enqueueAnimation(animation: SeriesAnimation): void;
    /** @inheritDoc */
    runAnimation(animation: SeriesAnimation): void;
    /**
     * Sets a start up animation class, a child class for {@link BaseAnimation}
     */
    set animation(value: SeriesAnimation);
    /** @inheritDoc */
    get isRunningAnimation(): boolean;
    /** @inheritDoc */
    onAnimate(timeElapsed: number): void;
    /**
     * checkIsOutOfDataRange() is not supported for BaseStackedCollection
     * @param xValue
     * @param yValue
     */
    checkIsOutOfDataRange(xValue: number, yValue: number): boolean;
    /** @inheritDoc */
    toPointSeries(resamplingParams?: ResamplingParams): IPointSeries;
    /**
     * getCurrentRenderPassData method is not supported for BaseStackedCollection
     */
    getCurrentRenderPassData(): RenderPassData;
    /** @inheritDoc */
    setCurrentRenderPassData(renderPassData: RenderPassData): void;
    /** @inheritDoc */
    getResamplingParams(): ResamplingParams;
    /** @inheritDoc */
    get dataLabelProvider(): BaseDataLabelProvider;
    /** @inheritDoc */
    set dataLabelProvider(provider: BaseDataLabelProvider);
    /** @inheritDoc */
    toJSON(excludeData?: boolean): TSeriesDefinition;
    /** @inheritDoc */
    resolveAutoColors(index: number, maxSeries: number, theme: IThemeProvider): void;
    /** @inheritDoc */
    adjustAutoColor(propertyName: string, color: string): string;
    /** @inheritDoc */
    linkAxes(): void;
    protected isAllDataSeriesSet(): boolean;
    /**
     * notifies listeners to {@link invalidateParentCallback} and redraws the {@link SciChartSurface}
     */
    protected invalidateParent(): void;
    /**
     * Gets the first series in the collection, else undefined
     */
    protected getFirstSeries(): T;
    /**
     * Gets the parent {@link SciChartSurface}
     */
    protected getParentSurface(): SciChartSurface;
    /**
     * Runs before the animation starts
     * @protected
     */
    protected beforeAnimationStart(): void;
    /**
     * Runs after the animation is complete
     * @protected
     */
    protected afterAnimationComplete(): void;
    /**
     * Internal method that runs on each animation tick
     * @param progress The current animation progress, a value from 0 to 1
     * @param animationFSM The animation finite state machine
     * @protected
     */
    protected updateAnimationProperties(progress: number, animationFSM: SeriesAnimationFiniteStateMachine): void;
    protected updateHitTestProviders(renderPassData: RenderPassData): void;
    protected isEnoughDataToDraw(): boolean;
}
