Skip to content

Column Selection

HTMLRevoGridElementEventMap (Extended from global)

Section titled “HTMLRevoGridElementEventMap (Extended from global)”
interface HTMLRevoGridElementEventMap {
/** Fires before a pointer or keyboard column-selection intent is applied. */
beforecolumnselection: ColumnSelectionIntent
}

Adds spreadsheet-style whole-column selection to RevoGrid.

Header clicks select columns, Shift extends an anchored span, Ctrl/Cmd toggles disjoint columns, pointer drag selects a span, and Ctrl+Space selects the focused cell’s column. Sort/filter/resize affordances keep their native behavior and do not change the column selection.

  • Auto-installed MultiRangeSelectionPlugin: Uses MultiRangeSelectionPlugin for disjoint range rendering and clipboard behavior.
  • Event integration column-selection-handoff: Clears mutually exclusive interactive row-header selection before selecting columns.
  • Event integration COLUMN_DRAG_START_EVENT, COLUMN_DRAG_MOVE_EVENT, COLUMN_DRAG_END_EVENT: Keeps whole-column selection isolated from and aligned after column-move gestures.
class ColumnSelectionPlugin {
/** Returns selected column props in current visual order. */
getSelectedColumns(): ColumnProp[];
/** Clears private column state before row-header selection takes ownership. */
clearFromRowHeader();
/** Clears private column state before select-all takes ownership. */
clearFromSelectAll();
destroy(): void;
}

export function resolveColumnSelection({
ordered,
selected,
anchor,
target,
shift,
additive,
}: ResolveColumnSelectionOptions): ResolvedColumnSelection;

export function reconcileSelectedColumns(
ordered: ColumnSelectionAddress[],
selected: Iterable<string>,
);

export function buildColumnSelectionRanges(
ordered: ColumnSelectionAddress[],
selected: Iterable<string>,
rowLengths: Partial<Record<DimensionRows, number>>,
): MultiRangeSelectionRange[];

export function findActiveRangeIndex(
ranges: MultiRangeSelectionRange[],
ordered: ColumnSelectionAddress[],
activeId: string | null,
);

export type ColumnSelectionAddress = {
id: string;
prop: ColumnProp;
index: number;
type: DimensionCols;
};

export type ColumnSelectionMode = 'replace' | 'extend' | 'toggle' | 'add';

export type ResolveColumnSelectionOptions = {
ordered: ColumnSelectionAddress[];
selected: Iterable<string>;
anchor: string | null;
target: string;
shift: boolean;
additive: boolean;
};

export type ResolvedColumnSelection = {
selected: Set<string>;
anchor: string;
mode: ColumnSelectionMode;
};

export type ColumnSelectionSource = 'header' | 'drag' | 'keyboard';

export type ColumnSelectionIntent = {
source: ColumnSelectionSource;
mode: ColumnSelectionMode;
column: ColumnRegular;
selectedColumns: ColumnProp[];
anchor: ColumnProp;
originalEvent: MouseEvent | PointerEvent | KeyboardEvent;
};

Runtime contract used to clear mutually exclusive row-header state.

interface ColumnSelectionHandoffProvider {
clearFromColumnHeader(): void
}