import { BaseGridPlugin, CellClickEvent, CellMouseEvent } from '../../core/plugin/base-plugin';
import { CellRange, SelectionConfig, SelectionResult } from './types';
/**
 * Selection Plugin for tbw-grid
 *
 * @example
 * ```ts
 * new SelectionPlugin({ mode: 'range' })
 * ```
 */
export declare class SelectionPlugin extends BaseGridPlugin<SelectionConfig> {
    #private;
    readonly name = "selection";
    readonly styles: string;
    protected get defaultConfig(): Partial<SelectionConfig>;
    /** Row selection state (row mode) */
    private selected;
    private lastSelected;
    private anchor;
    /** Range selection state (range mode) */
    private ranges;
    private activeRange;
    private cellAnchor;
    private isDragging;
    /** Pending keyboard navigation update (processed in afterRender) */
    private pendingKeyboardUpdate;
    /** Cell selection state (cell mode) */
    private selectedCell;
    detach(): void;
    onCellClick(event: CellClickEvent): boolean;
    onKeyDown(event: KeyboardEvent): boolean;
    onCellMouseDown(event: CellMouseEvent): boolean | void;
    onCellMouseMove(event: CellMouseEvent): boolean | void;
    onCellMouseUp(_event: CellMouseEvent): boolean | void;
    afterRender(): void;
    /**
     * Called after scroll-triggered row rendering.
     * Reapplies selection classes to recycled DOM elements.
     */
    onScrollRender(): void;
    /**
     * Get the current selection as a unified result.
     * Works for all selection modes and always returns ranges.
     *
     * @example
     * ```ts
     * const selection = plugin.getSelection();
     * if (selection.ranges.length > 0) {
     *   const { from, to } = selection.ranges[0];
     *   // For cell mode: from === to (single cell)
     *   // For row mode: from.col = 0, to.col = lastCol (full row)
     *   // For range mode: rectangular selection
     * }
     * ```
     */
    getSelection(): SelectionResult;
    /**
     * Get the selected cell (cell mode only).
     * @deprecated Use `getSelection()` instead for a unified API across all modes.
     */
    getSelectedCell(): {
        row: number;
        col: number;
    } | null;
    /**
     * Get all selected row indices (row mode).
     * @deprecated Use `getSelection().ranges` instead - each range represents a full row.
     */
    getSelectedRows(): number[];
    /**
     * Get all selected cell ranges in public format.
     * @deprecated Use `getSelection().ranges` instead.
     */
    getRanges(): CellRange[];
    /**
     * Get all selected cells across all ranges.
     */
    getSelectedCells(): Array<{
        row: number;
        col: number;
    }>;
    /**
     * Check if a specific cell is in range selection.
     */
    isCellSelected(row: number, col: number): boolean;
    /**
     * Clear all selection.
     */
    clearSelection(): void;
    /**
     * Set selected ranges programmatically.
     */
    setRanges(ranges: CellRange[]): void;
}
//# sourceMappingURL=SelectionPlugin.d.ts.map