import type { TAnimationDefinition, TDataLabelProviderDefinition, TPaletteProviderDefinition, TSeriesDefinition } from "../../../Builder/types/SeriesDefinitions";
import type { SeriesAnimationFiniteStateMachine } from "../../../Core/Animations/AnimationFiniteStateMachine";
import type { ESeriesType } from "../../../types/SeriesType";
import type { SCRTDoubleVector, TSciChart } from "../../../types/TSciChart";
import type { 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 { EResamplingMode } from "../../Numerics/Resamplers/ResamplingMode";
import type { ResamplingParams } from "../../Numerics/Resamplers/ResamplingParams";
import type { RenderPassData } from "../../Services/RenderPassData";
import type { AxisBase2D } from "../Axis/AxisBase2D";
import type { SciChartSurface } from "../SciChartSurface";
import type { SeriesAnimation } from "./Animations/SeriesAnimation";
import { BaseRenderableSeries } from "./BaseRenderableSeries";
import type { BaseStackedCollection } from "./BaseStackedCollection";
import type { BaseDataLabelProvider } from "./DataLabels/BaseDataLabelProvider";
import type { HitTestInfo } from "./HitTest/HitTestInfo";
import type { IHitTestProvider } from "./HitTest/IHitTestProvider";
import type { TSeriesHoverChangedCallback, TSeriesSelectionChangedCallback, TSeriesVisibleChangedCallback } from "./IBaseRenderableSeriesOptions";
import { RolloverModifierRenderableSeriesProps } from "./RolloverModifier/RolloverModifierRenderableSeriesProps";
/**
 * Options to pass to the {@link BasedStackedRenderableSeries} constructor
 */
export interface IBasedStackedRenderableSeriesOptions {
    /**
     * A unique Id for the {@link IRenderableSeries}
     */
    id?: string;
    /**
     * The {@link IDataSeries | DataSeries} which provides a datasource for this {@link IRenderableSeries} to draw
     */
    dataSeries?: IDataSeries;
    /**
     * An Opacity factor of the Series that controls its semi-transparency level,
     * where value 1 means the Series is opaque; 0 - transparent.
     */
    opacity?: number;
    /**
     * Optional callback function when isVisible changed. Also see {@link IRenderableSeries.isVisibleChanged} event handler
     */
    onIsVisibleChanged?: TSeriesVisibleChangedCallback | string;
    /**
     * Optional callback function when selected changed. Also see {@link IRenderableSeries.selected} event handler
     */
    onSelectedChanged?: TSeriesSelectionChangedCallback | string;
    /**
     * Optional callback function when hovered changed. Also see {@link IRenderableSeries.hovered} event handler
     */
    onHoveredChanged?: TSeriesHoverChangedCallback | string;
    /**
     * An animation that runs on the start, child class to {@link SeriesAnimation}
     */
    animation?: SeriesAnimation | TAnimationDefinition;
    /**
     * A {@link DataLabelProvider} used for creating and drawing per-point text.
     */
    dataLabelProvider?: BaseDataLabelProvider | TDataLabelProviderDefinition;
    /**
     * Series name
     */
    seriesName?: string;
    /** When using XyNDataSeries, set this to determine which single set of y values to use */
    yArrayFilter?: number | string;
    /**
     * An optional {@link IPaletteProvider} which is used to provide per data-point coloring or paletting.
     * @remarks See {@link IStrokePaletteProvider} for per data-point coloring of lines or strokes, {@link IFillPaletteProvider} for
     * per data-point coloring of fills or series bodies, and {@link IPointMarkerPaletteProvider} for per data-point coloring of
     * point-markers
     */
    paletteProvider?: IPaletteProvider | TPaletteProviderDefinition;
}
/**
 * Base class for stacked mountain, column series in SciChart's High Performance Real-time
 * {@link https://www.scichart.com/javascript-chart-features | JavaScript Charts}
 * @remarks
 * See derived types {@link StackedMountainRenderableSeries} and {@link StackedColumnRenderableSeries} for
 * details on how to implement stacked column and mountain charts in SciChart
 */
export declare abstract class BaseStackedRenderableSeries extends BaseRenderableSeries {
    /** @inheritDoc */
    abstract readonly type: ESeriesType;
    /** @inheritDoc */
    readonly id: string;
    /** @inheritDoc */
    readonly isStacked: boolean;
    readonly rolloverModifierProps: RolloverModifierRenderableSeriesProps;
    hitTestProvider: IHitTestProvider;
    /**
     * the accumulated values which are used to draw each column/band for {@link BaseStackedRenderableSeries}
     */
    accumulatedValues: SCRTDoubleVector;
    /**
     * The bottom edge of each column band, used when {@link StackedColumnCollection.separatePositiveNegativeStacks} is true
     * to correctly stack positive values upward and negative values downward from the zero line independently.
     */
    bottomAccumulatedValues: SCRTDoubleVector;
    protected accumulatedFinalAnimationValues: SCRTDoubleVector;
    protected webAssemblyContext: TSciChart;
    protected parentCollection: BaseStackedCollection<BaseStackedRenderableSeries>;
    protected notifyParentPropertyChangedFn: (propertyName: string) => void;
    protected getParentSurfaceFn: () => SciChartSurface;
    protected dataLabelProviderProperty: BaseDataLabelProvider;
    protected typeMap: Map<string, string>;
    private opacityOriginalValue;
    /**
     * Creates an instance of a {@link BaseStackedRenderableSeries}
     * @param webAssemblyContext The {@link TSciChart | SciChart WebAssembly Context} containing
     * native methods and access to our WebGL2 WebAssembly Drawing Engine
     */
    protected constructor(webAssemblyContext: TSciChart, options?: IBasedStackedRenderableSeriesOptions);
    protected dataSeriesDataChanged(): void;
    /** @inheritdoc */
    draw(renderContext: WebGlRenderContext2D, renderPassData: RenderPassData): void;
    /**
     * @inheritDoc
     */
    delete(): void;
    /**
     * Called when the {@link BaseStackedRenderableSeries} is detached from its parent {@link BaseStackedCollection}
     */
    onDetachFromParentCollection(): void;
    /**
     * @inheritDoc
     */
    notifyPropertyChanged(propertyName: string): void;
    /** @inheritDoc */
    checkIsOutOfDataRange(xValue: number, yValue: number): boolean;
    /**
     * Returns current of final animation accumulated values.
     * Is used for visible range calculation with animation
     * @param finalValues Flag to return final animation accumulated values
     * @returns
     */
    getAccumulatedValues(finalValues: boolean): SCRTDoubleVector;
    /**
     * getBaseXValues() is not supported for BaseStackedRenderableSeries
     */
    getBaseXValues(): number[];
    /**
     * onAttach() is not supported for BaseStackedRenderableSeries
     */
    onAttach(scs: SciChartSurface): void;
    /**
     * onDetach() is not supported for BaseStackedRenderableSeries
     */
    onDetach(): void;
    /**
     * resamplingMode property is not supported for BaseStackedRenderableSeries
     */
    get resamplingMode(): EResamplingMode;
    set resamplingMode(value: EResamplingMode);
    /**
     * resamplingPrecision property is not supported for BaseStackedRenderableSeries
     */
    get resamplingPrecision(): number;
    set resamplingPrecision(value: number);
    /** @inheritDoc */
    get dataLabelProvider(): BaseDataLabelProvider;
    /** @inheritDoc */
    set dataLabelProvider(provider: BaseDataLabelProvider);
    /**
     * @inheritDoc
     */
    get parentSurface(): SciChartSurface;
    /**
     * set parentSurface property is not supported for BaseStackedRenderableSeries
     */
    set parentSurface(value: SciChartSurface);
    /** @inheritDoc */
    get xAxis(): AxisBase2D;
    /** @inheritDoc */
    get yAxis(): AxisBase2D;
    /**
     * Runs before the animation starts
     * @protected
     */
    beforeAnimationStart(): void;
    /**
     * Runs after the animation is complete
     * @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
     */
    updateAnimationProperties(progress: number, animationFSM: SeriesAnimationFiniteStateMachine): void;
    /** @inheritDoc */
    getSeriesInfo(hitTestInfo: HitTestInfo): SeriesInfo;
    /** @inheritDoc */
    toJSON(excludeData?: boolean): TSeriesDefinition;
    /**
     * toPointSeries method is not supported for BaseStackedRenderableSeries
     * @param resamplingParams
     */
    toPointSeries(resamplingParams?: ResamplingParams): IPointSeries;
    /**
     * getCurrentRenderPassData method is not supported for BaseStackedRenderableSeries
     */
    getCurrentRenderPassData(): RenderPassData;
    /**
     * xAxisId property is not supported for BaseStackedRenderableSeries,
     * instead set on the {@link StackedColumnCollection} or {@link StackedMountainCollection}
     */
    get xAxisId(): string | undefined;
    /**
     * xAxisId property is not supported for BaseStackedRenderableSeries,
     * instead set on the {@link StackedColumnCollection} or {@link StackedMountainCollection}
     */
    set xAxisId(value: string | undefined);
    /**
     * yAxisId property is not supported for BaseStackedRenderableSeries,
     * instead set on the {@link StackedColumnCollection} or {@link StackedMountainCollection}
     */
    get yAxisId(): string | undefined;
    /**
     * yAxisId property is not supported for BaseStackedRenderableSeries,
     * instead set on the {@link StackedColumnCollection} or {@link StackedMountainCollection}
     */
    set yAxisId(value: string | undefined);
    /**
     * The linking is ignored because axes from the parent collection are used for stacked renderable series
     */
    linkAxes(): void;
}
