import type { CalculatedColumn, CalculatedColumnOrColumnGroup, Maybe } from '../types';
export * from './activePositionUtils';
export * from './colSpanUtils';
export * from './domUtils';
export * from './eventUtils';
export * from './frozenColumnUtils';
export * from './keyboardUtils';
export * from './renderMeasuringCells';
export * from './styleUtils';
export const { min, max, floor, abs } = Math;
export function assertIsValidKeyGetter<R, K extends React.Key>(
keyGetter: Maybe<(row: NoInfer<R>) => K>
): asserts keyGetter is (row: R) => K {
if (typeof keyGetter !== 'function') {
throw new TypeError('Please specify the rowKeyGetter prop to use selection');
}
}
export function clampColumnWidth<R, SR>(
width: number,
{ minWidth, maxWidth }: CalculatedColumn<R, SR>
): number {
width = max(width, minWidth);
if (typeof maxWidth === 'number' && maxWidth >= minWidth) {
return min(width, maxWidth);
}
return width;
}
export function getHeaderCellRowSpan<R, SR>(
column: CalculatedColumnOrColumnGroup<R, SR>,
rowIdx: number
) {
return column.parent === undefined ? rowIdx : column.level - column.parent.level;
}