import { ICellComponent } from '../../../../../../types/src/table';
import { default as Cell } from '../../core/cell/Cell';
import { default as CellComponent } from '../../core/cell/CellComponent';
import { default as Column } from '../../core/column/Column';
import { default as Module } from '../../core/Module';
import { default as Row } from '../../core/row/Row';
import { Editor, EditorParams } from '../../core/types';

type EditorFunction = (this: Edit, cell: CellComponent, onRendered: (callback: () => void) => void, success: (value: any) => boolean, cancel: () => void, editorParams: EditorParams) => HTMLElement | false;
export default class Edit extends Module {
    static readonly moduleName = "edit";
    static readonly editors: Record<string, EditorFunction>;
    currentCell: Cell | false;
    mouseClick: boolean;
    recursionBlock: boolean;
    invalidEdit: boolean;
    editedCells: Cell[];
    convertEmptyValues: boolean;
    editors: Record<string, EditorFunction>;
    constructor(table: any);
    initialize(): void;
    pasteBlocker(): boolean;
    keybindingNavigateNext(e: any): void;
    cellIsEdited(cell: CellComponent): boolean;
    cellCancelEdit(cell: CellComponent): void;
    updateCellClass(cell: Cell): void;
    clearCellEdited(cells?: CellComponent | CellComponent[]): void;
    navigatePrev(cell?: Cell | false, e?: Event): boolean;
    navigateNext(cell?: Cell | false, e?: Event): boolean;
    navigateLeft(cell?: Cell | false, e?: Event): boolean;
    navigateRight(cell?: Cell | false, e?: Event): boolean;
    navigateUp(cell?: Cell | false, e?: Event): boolean;
    navigateDown(cell?: Cell | false, e?: Event): boolean;
    findNextEditableCell(row: Row, index: number): Cell | false;
    findPrevEditableCell(row: Row, index: number): Cell | false;
    initializeColumnCheck(column: Column): void;
    columnDeleteCheck(column: Column): void;
    rowDeleteCheck(row: Row): void;
    rowEditableCheck(row: Row): void;
    initializeColumn(column: Column): void;
    lookupEditor(editor: Editor | undefined, column: Column): EditorFunction | false;
    getCurrentCell(): ICellComponent | false;
    clearEditor(cancel: boolean): void;
    cancelEdit(): void;
    bindEditor(cell: Cell): void;
    addListEditorTrigger(cell: Cell): void;
    focusCellNoEvent(cell: Cell, block?: boolean): void;
    editCell(cell: ICellComponent | null, forceEdit?: boolean): void;
    focusScrollAdjust(cell: Cell): void;
    allowEdit(cell: Cell): boolean;
    edit(cell: Cell, e: Event | false, forceEdit?: boolean): boolean;
    emptyValueCheck(value: unknown): boolean;
    transformEmptyValues(value: any, cell: Cell): any;
    blur(element: HTMLElement | null): void;
    getEditedCells(): CellComponent[];
    clearEdited(cell: Cell): void;
}
export {};
