export interface IEditor { onStart: (context: EditContext) => void; beforeEnd?: () => void; onEnd: () => void; getInputElement?: () => HTMLElement; setElement?: (element: HTMLInputElement) => void; isEditorElement?: (target: HTMLElement) => boolean; validateValue?: (newValue?: any, oldValue?: any, position?: CellAddress, table?: any, isClickOnTable?: boolean) => boolean | ValidateEnum | Promise; getValue: () => V; prepareEdit?: (context: PrepareEditContext) => void; beginEditing?: (container: HTMLElement, referencePosition: ReferencePosition, value: V) => void; exit?: () => void; targetIsOnEditor?: (target: HTMLElement) => boolean; bindSuccessCallback?: (callback: () => void) => void; adjustPosition?: (rect: RectProps) => void; } export interface EditContext { container: HTMLElement; referencePosition: ReferencePosition; value: V; endEdit: () => void; table: T; col: number; row: number; } export interface PrepareEditContext { container: HTMLElement; table: T; col: number; row: number; referencePosition: ReferencePosition; } export interface RectProps { left: number; top: number; width: number; height: number; } export declare enum Placement { top = "top", bottom = "bottom", left = "left", right = "right" } export interface ReferencePosition { rect: RectProps; placement?: Placement; } export declare enum ValidateEnum { validateExit = "validate-exit", invalidateExit = "invalidate-exit", validateNotExit = "validate-not-exit", invalidateNotExit = "invalidate-not-exit" } export type CellAddress = { col: number; row: number; };