import type { NamedBean } from '../context/bean';
import { BeanStub } from '../context/beanStub';
import type { Column } from '../interfaces/iColumn';
import type { EditMap, EditPositionValue, EditRow, EditRowValidationMap, EditState, EditValidation, EditValidationMap, EditValue, GetEditsParams, ReadonlyEditMap } from '../interfaces/iEditModelService';
import type { EditPosition, EditRowPosition } from '../interfaces/iEditService';
import type { IRowNode } from '../interfaces/iRowNode';
export declare class EditModelService extends BeanStub implements NamedBean {
    beanName: "editModelSvc";
    private readonly edits;
    private editingCount;
    private cellValidations;
    private rowValidations;
    private suspendEdits;
    suspend(suspend: boolean): void;
    hasOpenEditors(): boolean;
    removeEdits({ rowNode, column }: EditPosition): void;
    getEditRow(rowNode: IRowNode, checkSiblings?: boolean): EditRow | undefined;
    getEditRowDataValue(rowNode: IRowNode): any;
    getEdit(position?: EditPosition): EditValue | undefined;
    /** Direct single-cell lookup — allocation-free, no pinned-sibling fallback (see {@link getCellEditWithSibling}). */
    getCellEdit(rowNode: IRowNode | null | undefined, column: Column | null | undefined): EditValue | undefined;
    /** Single-cell lookup that falls back to the pinned sibling, since pinned rows mirror their sibling's edits. */
    getCellEditWithSibling(rowNode: IRowNode | null | undefined, column: Column | null | undefined): EditValue | undefined;
    /** The live edit map, or null while edits are suspended. Read-only: mutating it would break editingCount. */
    getEditMap(): ReadonlyEditMap | null;
    /** A deep copy of the edit map — a mutable snapshot, safe to hold and mutate across model changes. */
    getEditMapCopy(): EditMap;
    setEditMap(newEdits: ReadonlyEditMap): void;
    setEdit(position: Required<EditPosition>, edit: Partial<EditValue>): Readonly<EditValue>;
    clearEditValue(position: EditPosition): void;
    getState(position: EditPosition): EditState | undefined;
    getEditPositions(editMap?: EditMap): EditPositionValue[];
    hasRowEdits(rowNode: IRowNode, checkSiblings?: boolean): boolean;
    hasEdits(position?: EditPosition, params?: GetEditsParams): boolean;
    start(position: Required<EditPosition>): void;
    stop(position: Required<EditPosition>, preserveBatch: boolean, cancel: boolean): void;
    clear(): void;
    /**
     * Side-effect-free "is anything invalid?". Scope follows the position: omitted means the whole grid,
     * a rowNode without a column means that row. Callers that must not repopulate/refresh use this.
     */
    hasValidationErrors(position?: EditPosition): boolean;
    getCellValidationModel(): EditCellValidationModel;
    getRowValidationModel(): EditRowValidationModel;
    setCellValidationModel(model: EditCellValidationModel): void;
    setRowValidationModel(model: EditRowValidationModel): void;
    destroy(): void;
}
export declare class EditCellValidationModel {
    private cellValidations;
    getCellValidation(position?: EditPosition): EditValidation | undefined;
    /** Scope follows the position: no rowNode means the whole grid, a rowNode without a column means that row. */
    hasCellValidation(position?: EditPosition): boolean;
    setCellValidation(position: Required<EditPosition>, validation: EditValidation): void;
    clearCellValidation(position: Required<EditPosition>): void;
    setCellValidationMap(validationMap: EditValidationMap): void;
    getCellValidationMap(): EditValidationMap;
    clearCellValidationMap(): void;
}
export declare class EditRowValidationModel {
    private rowValidations;
    getRowValidation(position?: EditRowPosition): EditValidation | undefined;
    hasRowValidation(position?: EditRowPosition): boolean;
    setRowValidation({ rowNode }: Required<EditRowPosition>, rowValidation: EditValidation): void;
    clearRowValidation({ rowNode }: Required<EditRowPosition>): void;
    setRowValidationMap(validationMap: EditRowValidationMap): void;
    getRowValidationMap(): EditRowValidationMap;
    clearRowValidationMap(): void;
}
