import { InternalCellRange, CellRange } from './types';
/**
 * Normalize a range so startRow/startCol are always <= endRow/endCol.
 * This handles cases where user drags from bottom-right to top-left.
 *
 * @param range - The range to normalize
 * @returns Normalized range with start <= end for both dimensions
 */
export declare function normalizeRange(range: InternalCellRange): InternalCellRange;
/**
 * Convert an internal range to the public event format.
 *
 * @param range - The internal range to convert
 * @returns Public CellRange format with from/to coordinates
 */
export declare function toPublicRange(range: InternalCellRange): CellRange;
/**
 * Convert multiple internal ranges to public format.
 *
 * @param ranges - Array of internal ranges
 * @returns Array of public CellRange format
 */
export declare function toPublicRanges(ranges: InternalCellRange[]): CellRange[];
/**
 * Check if a cell is within a specific range.
 *
 * @param row - The row index to check
 * @param col - The column index to check
 * @param range - The range to check against
 * @returns True if the cell is within the range
 */
export declare function isCellInRange(row: number, col: number, range: InternalCellRange): boolean;
/**
 * Check if a cell is within any of the provided ranges.
 *
 * @param row - The row index to check
 * @param col - The column index to check
 * @param ranges - Array of ranges to check against
 * @returns True if the cell is within any range
 */
export declare function isCellInAnyRange(row: number, col: number, ranges: InternalCellRange[]): boolean;
/**
 * Get all cells within a range as an array of {row, col} objects.
 *
 * @param range - The range to enumerate
 * @returns Array of all cell coordinates in the range
 */
export declare function getCellsInRange(range: InternalCellRange): Array<{
    row: number;
    col: number;
}>;
/**
 * Get all unique cells across multiple ranges.
 * Deduplicates cells that appear in overlapping ranges.
 *
 * @param ranges - Array of ranges to enumerate
 * @returns Array of unique cell coordinates
 */
export declare function getAllCellsInRanges(ranges: InternalCellRange[]): Array<{
    row: number;
    col: number;
}>;
/**
 * Merge overlapping or adjacent ranges into fewer ranges.
 * Simple implementation - returns ranges as-is for now.
 * More complex merging logic can be added later for optimization.
 *
 * @param ranges - Array of ranges to merge
 * @returns Merged array of ranges
 */
export declare function mergeRanges(ranges: InternalCellRange[]): InternalCellRange[];
/**
 * Create a range from an anchor cell to a current cell position.
 * The range is not normalized - it preserves the direction of selection.
 *
 * @param anchor - The anchor cell (where selection started)
 * @param current - The current cell (where selection ends)
 * @returns An InternalCellRange from anchor to current
 */
export declare function createRangeFromAnchor(anchor: {
    row: number;
    col: number;
}, current: {
    row: number;
    col: number;
}): InternalCellRange;
/**
 * Calculate the number of cells in a range.
 *
 * @param range - The range to measure
 * @returns Total number of cells in the range
 */
export declare function getRangeCellCount(range: InternalCellRange): number;
/**
 * Check if two ranges are equal (same boundaries).
 *
 * @param a - First range
 * @param b - Second range
 * @returns True if ranges have same boundaries after normalization
 */
export declare function rangesEqual(a: InternalCellRange, b: InternalCellRange): boolean;
/**
 * Check if a range is a single cell (1x1).
 *
 * @param range - The range to check
 * @returns True if the range is exactly one cell
 */
export declare function isSingleCell(range: InternalCellRange): boolean;
//# sourceMappingURL=range-selection.d.ts.map