import { DSourceState } from "../../store/index";
import { Observable } from '../../utils';
import { DimensionCols, DimensionRows, RowDrag, ColumnRegular, DataType, CellProps, ColumnDataSchemaModel, ColumnProp, DataLookup, DataFormat, ChangedRange, OldNewRangeMapping, Cell, RangeArea, BeforeSaveDataDetails, EditorCtr, Editors, CellTemplateProp } from "../../types/index";
export type ColumnStores = {
    [T in DimensionCols]: Observable<DSourceState<ColumnRegular, DimensionCols>>;
};
export type RowStores = {
    [T in DimensionRows]: Observable<DSourceState<DataType, DimensionRows>>;
};
type DataToApplyOptions = {
    start: Cell;
    data: DataFormat[][];
    targetRange?: RangeArea | null;
};
export declare function getCellEditor(column: Pick<ColumnRegular, 'editor'> | undefined, editors?: Editors): EditorCtr | undefined;
export default class ColumnService {
    private dataStore;
    private source;
    private unsubscribe;
    get columns(): ColumnRegular[];
    hasGrouping: boolean;
    type: DimensionCols;
    constructor(dataStore: Observable<DSourceState<DataType, DimensionRows>>, source: Observable<DSourceState<ColumnRegular, DimensionCols>>);
    private checkGrouping;
    isReadOnly(r: number, c: number): boolean;
    mergeProperties(r: number, c: number, defaultProps: CellProps, schemaModel: CellTemplateProp): CellProps;
    getRowClass(r: number, prop: string): string;
    getSaveData(rowIndex: number, colIndex: number, val?: string): BeforeSaveDataDetails;
    /**
     * Get cell data model for given rowIndex and colIndex
     * Used to pass data to editor/renderer
     */
    rowDataModel(rowIndex: number, colIndex: number): ColumnDataSchemaModel;
    getRangeData(d: ChangedRange, columns: ColumnRegular[]): {
        changed: DataLookup;
        mapping: OldNewRangeMapping;
    };
    getTransformedDataToApply({ start, data, targetRange, }: DataToApplyOptions): {
        changed: DataLookup;
        range: RangeArea | null;
    };
    private getDataApplyBounds;
    private applyClipboardRow;
    private getAppliedRange;
    getRangeStaticData(d: RangeArea, value: DataFormat): DataLookup;
    getRangeTransformedToProps(d: RangeArea, store: Observable<DSourceState<DataType, DimensionRows>>): {
        prop: ColumnProp;
        rowIndex: number;
        colIndex: number;
        model?: DataType;
        colType: DimensionCols;
        type: DimensionRows;
    }[];
    copyRangeArray(range: RangeArea, store: Observable<DSourceState<DataType, DimensionRows>>): {
        data: any[][];
        mapping: {
            [rowIndex: number]: {
                [colProp: string]: any;
                [colProp: number]: any;
            };
        };
    };
    destroy(): void;
}
/**
 * Checks if the given rowDrag is a service for dragging rows.
 */
export declare function isRowDragService(rowDrag: RowDrag, model: ColumnDataSchemaModel): boolean;
export declare function doPropMerge(existing: CellProps, extra: CellProps): CellProps;
export {};
