import { IGridEditDoneEventArgs, IGridEditEventArgs, IgxGridBaseDirective } from '../grid/public_api';
import { IgxRowDirective } from '../row.directive';
import { GridType } from './grid.interface';
import { Subject } from 'rxjs';
export declare class IgxRow {
    id: any;
    index: number;
    data: any;
    grid: IgxGridBaseDirective & GridType;
    transactionState: any;
    state: any;
    newData: any;
    isAddRow: boolean;
    constructor(id: any, index: number, data: any, grid: IgxGridBaseDirective & GridType);
    createEditEventArgs(includeNewValue?: boolean, event?: Event): IGridEditEventArgs;
    createDoneEditEventArgs(cachedRowData: any, event?: Event): IGridEditDoneEventArgs;
}
export declare class IgxCell {
    id: any;
    rowIndex: number;
    column: any;
    value: any;
    editValue: any;
    rowData: any;
    grid: IgxGridBaseDirective & GridType;
    primaryKey: any;
    state: any;
    constructor(id: any, rowIndex: number, column: any, value: any, editValue: any, rowData: any, grid: IgxGridBaseDirective & GridType);
    castToNumber(value: any): any;
    createEditEventArgs(includeNewValue?: boolean, event?: Event): IGridEditEventArgs;
    createDoneEditEventArgs(value: any, event?: Event): IGridEditDoneEventArgs;
}
export declare class IgxCellCrudState {
    grid: IgxGridBaseDirective & GridType;
    cell: IgxCell | null;
    row: IgxRow | null;
    isInCompositionMode: boolean;
    cancelAddMode: boolean;
    createCell(cell: any): IgxCell;
    createRow(cell: IgxCell): IgxRow;
    sameRow(rowID: any): boolean;
    sameCell(cell: IgxCell): boolean;
    get cellInEditMode(): boolean;
    beginCellEdit(event?: Event): void;
    cellEdit(event?: Event): IGridEditEventArgs;
    updateCell(exit: boolean, event?: Event): IGridEditEventArgs;
    updateAddCell(exit: boolean, event?: Event): IGridEditEventArgs;
    cellEditDone(event: any, addRow: boolean): IGridEditDoneEventArgs;
    /** Exit cell edit mode */
    exitCellEdit(event?: Event): IGridEditDoneEventArgs;
    /** Clears cell editing state */
    endCellEdit(): void;
    /** Returns whether the targeted cell is in edit mode */
    targetInEdit(rowIndex: number, columnIndex: number): boolean;
}
export declare class IgxRowCrudState extends IgxCellCrudState {
    row: IgxRow | null;
    closeRowEditingOverlay: Subject<unknown>;
    private _rowEditingBlocked;
    get primaryKey(): any;
    get rowInEditMode(): IgxRowDirective<IgxGridBaseDirective & GridType>;
    get rowEditing(): boolean;
    get rowEditingBlocked(): boolean;
    set rowEditingBlocked(val: boolean);
    /** Enters row edit mode */
    beginRowEdit(event?: Event): boolean;
    rowEdit(event: Event): IGridEditEventArgs;
    updateRow(commit: boolean, event?: Event): IGridEditEventArgs;
    /**
     * @hidden @internal
     */
    endRowTransaction(commit: boolean, event?: Event): IGridEditEventArgs;
    rowEditDone(cachedRowData: any, event: Event): IGridEditDoneEventArgs;
    /** Exit row edit mode */
    exitRowEdit(cachedRowData: any, event?: Event): IGridEditDoneEventArgs;
    /** Clears row editing state */
    endRowEdit(): void;
    /** Clears cell and row editing state and closes row editing template if it is open */
    endEditMode(): void;
    updateRowEditData(row: IgxRow, value?: any): void;
}
export declare class IgxRowAddCrudState extends IgxRowCrudState {
    /**
     * @hidden @interal
     */
    addRowParent: any;
    /** Starts row adding */
    beginAddRow(cell: any, event?: Event): void;
    endAdd(commit?: boolean, event?: Event): boolean;
    /**
     * @hidden @internal
     */
    endAddRow(): void;
    /**
     * @hidden
     * @internal
     * TODO: consider changing modifier
     */
    _findRecordIndexInView(rec: any): number;
    private _getParentRecordId;
}
export declare class IgxGridCRUDService extends IgxRowAddCrudState {
    enterEditMode(cell: any, event?: Event): boolean;
    /**
     * Finishes the row transactions on the current row.
     *
     * @remarks
     * If `commit === true`, passes them from the pending state to the data (or transaction service)
     * @example
     * ```html
     * <button igxButton (click)="grid.endEdit(true)">Commit Row</button>
     * ```
     * @param commit
     */
    endEdit(commit?: boolean, event?: Event): any;
}
