import { BaseGridPlugin, CellClickEvent, GridElement } from '../../core/plugin/base-plugin';
import { RowElementInternal } from '../../core/types';
import { EditingConfig } from './types';
/**
 * CSS selector for focusable editor elements within a cell.
 */
export declare const FOCUSABLE_EDITOR_SELECTOR = "input,select,textarea,[contenteditable=\"true\"],[contenteditable=\"\"],[tabindex]:not([tabindex=\"-1\"])";
/**
 * Check if a row element has any cells in editing mode.
 */
export declare function hasEditingCells(rowEl: RowElementInternal): boolean;
/**
 * Clear all editing state from a row element.
 */
export declare function clearEditingState(rowEl: RowElementInternal): void;
/**
 * Editing Plugin for tbw-grid
 *
 * Provides complete cell/row editing functionality. Without this plugin,
 * the grid has no editing capability.
 *
 * @example
 * ```ts
 * import { EditingPlugin } from '@toolbox-web/grid/plugins/editing';
 *
 * const grid = document.createElement('tbw-grid');
 * grid.gridConfig = {
 *   columns: [
 *     { field: 'name', editable: true },
 *     { field: 'age', editable: true, type: 'number' }
 *   ],
 *   plugins: [new EditingPlugin({ editOn: 'dblclick' })]
 * };
 * ```
 */
export declare class EditingPlugin<T = unknown> extends BaseGridPlugin<EditingConfig> {
    #private;
    readonly name = "editing";
    readonly styles: string;
    protected get defaultConfig(): Partial<EditingConfig>;
    attach(grid: GridElement): void;
    detach(): void;
    /**
     * Handle cell clicks - start editing if configured for click mode.
     * Both click and dblclick events come through this handler.
     * Starts row-based editing (all editable cells in the row get editors).
     */
    onCellClick(event: CellClickEvent): boolean | void;
    /**
     * Handle keyboard events for edit lifecycle.
     */
    onKeyDown(event: KeyboardEvent): boolean | void;
    /**
     * After render, reapply editors to cells in edit mode.
     * This handles virtualization - when a row scrolls back into view,
     * we need to re-inject the editor.
     */
    afterRender(): void;
    /**
     * On scroll render, reapply editors to recycled cells.
     */
    onScrollRender(): void;
    /**
     * Get all rows that have been modified.
     */
    get changedRows(): T[];
    /**
     * Get indices of all modified rows.
     */
    get changedRowIndices(): number[];
    /**
     * Get the currently active edit row index, or -1 if not editing.
     */
    get activeEditRow(): number;
    /**
     * Get the currently active edit column index, or -1 if not editing.
     */
    get activeEditCol(): number;
    /**
     * Check if a specific row is currently being edited.
     */
    isRowEditing(rowIndex: number): boolean;
    /**
     * Check if a specific cell is currently being edited.
     */
    isCellEditing(rowIndex: number, colIndex: number): boolean;
    /**
     * Check if a specific row has been modified.
     */
    isRowChanged(rowIndex: number): boolean;
    /**
     * Reset all change tracking.
     */
    resetChangedRows(silent?: boolean): void;
    /**
     * Programmatically begin editing a cell.
     */
    beginCellEdit(rowIndex: number, field: string): void;
    /**
     * Programmatically begin editing all editable cells in a row.
     */
    beginBulkEdit(rowIndex: number): void;
    /**
     * Commit the currently active row edit.
     */
    commitActiveRowEdit(): void;
    /**
     * Cancel the currently active row edit.
     */
    cancelActiveRowEdit(): void;
}
//# sourceMappingURL=EditingPlugin.d.ts.map