import type { Scale } from 'ag-charts-core';
import { type Point } from 'ag-charts-core';
import type { AgActiveItemState } from 'ag-charts-types';
import type { BBox } from '../../scene/bbox';
import type { Path } from '../../scene/shape/path';
import type { DataController } from '../data/dataController';
import type { DataModel, DataModelOptions, ProcessedData } from '../data/dataModel';
import { DataSet } from '../data/dataSet';
import type { PickFocusInputs, PickFocusOutputs, SeriesConstructorOpts, SeriesNodeDataContext } from './series';
import { Series } from './series';
import type { SeriesProperties } from './seriesProperties';
import { type DatumIndexType, SelectionState, type SeriesNodeDatum } from './seriesTypes';
export interface DataModelSeriesNodeDatum extends SeriesNodeDatum<number> {
    itemId?: never;
}
export interface DataModelSeriesNodeDataContext<TDatum, TLabel = TDatum> extends SeriesNodeDataContext<number, TDatum, TLabel> {
}
export type DataModelSeriesConstructorOpts<TProps extends SeriesProperties<any>> = SeriesConstructorOpts<TProps> & {
    categoryKey: string | undefined;
    clipFocusBox?: boolean;
};
export declare abstract class DataModelSeries<TDatum extends SeriesNodeDatum<number>, TOpts extends object, TProps extends SeriesProperties<TOpts>, TLabel = TDatum, TContext extends DataModelSeriesNodeDataContext<TDatum, TLabel> = DataModelSeriesNodeDataContext<TDatum, TLabel>> extends Series<number, TDatum, TOpts, TProps, TLabel, TContext> {
    protected dataModel?: DataModel<any, any, any>;
    protected processedData?: ProcessedData<any>;
    private readonly categoryKey;
    private readonly clipFocusBox;
    protected constructor({ clipFocusBox, categoryKey, ...seriesOpts }: DataModelSeriesConstructorOpts<TProps>);
    dataCount(): number;
    invalidDataCount(): number;
    missingDataCount(): number;
    get hasData(): boolean;
    protected getScaleInformation({ xScale, yScale, }: {
        xScale?: Scale<any, any, any>;
        yScale?: Scale<any, any, any>;
    }): {
        isContinuousX: boolean;
        isContinuousY: boolean;
        xScaleType: import("ag-charts-core").ScaleType | undefined;
        yScaleType: import("ag-charts-core").ScaleType | undefined;
    };
    private getModulePropertyDefinitions;
    protected requestDataModel<D extends object, K extends keyof D & string = keyof D & string, G extends boolean | undefined = undefined>(dataController: DataController, dataSet: DataSet<D> | undefined, opts: DataModelOptions<K, boolean | undefined, false>): Promise<{
        dataModel: DataModel<D, K, G>;
        processedData: ProcessedData<D>;
    }>;
    protected isProcessedDataAnimatable(): boolean;
    protected checkProcessedDataAnimatable(): void;
    protected abstract computeFocusBounds(opts: PickFocusInputs): Path | BBox | undefined;
    abstract getNodeData(): TDatum[] | undefined;
    findNodeDatum(itemId: AgActiveItemState['itemId']): TDatum | undefined;
    pickFocus(opts: PickFocusInputs): PickFocusOutputs | undefined;
    protected pickNodesExactShape(point: Point): SeriesNodeDatum<DatumIndexType>[];
    protected isDatumEnabled(nodeData: TDatum[], datumIndex: number): boolean;
    private computeFocusDatumIndex;
    private dataModelPropertyIsKey;
    protected keysOrValues<T = any>(xKey: string): T[];
    protected sortOrder(xKey: string): -1 | 1 | undefined;
    protected getCategoryKey(): string | undefined;
    getCategoryValue(datumIndex: number): any;
    datumIndexForCategoryValue(categoryValue: any): number | undefined;
    protected getDataSelectionState(datumIndex: number | undefined): SelectionState | undefined;
}
