import type { GridConfirmPayload, GridProps, GridRangeSelection, GridRowData, GridRowMeta, } from '../../types' export type SpreadsheetRangeCopy = ( rangeSelection: GridRangeSelection, data: { rowIds: TDataModel['id'][] columnIds: string[] }, e: React.ClipboardEvent ) => void export type SpreadsheetGridPastedCell = { value: unknown colSpan?: number } export type SpreadsheetGridProps< TDataModel extends GridRowData = any, TMetaModel extends GridRowMeta = any, > = Omit< GridProps, 'selectionMode' | 'selection' | 'onSelectionChange' > & { /** * By default range selection is managed internally, but it can be controlled by providing the current * selection via this property. */ rangeSelection?: GridRangeSelection | null /** * When range selection changes, this callback will be invoked with the new range selection. It also * provides the ordered list of row and column IDs included in the selection. */ onRangeSelectionChange?: ( rangeSelection: GridRangeSelection | null, data: { rowIds: TDataModel['id'][]; columnIds: string[] } ) => void /** * Callback invoked during a copy operation. By default, copying a range will place the labels of the cells * on the clipboard. You can optionally set it to copy the values instead, or provide a custom handler to take * complete control over the copy operation. */ onRangeCopy?: 'labels' | 'values' | SpreadsheetRangeCopy /** * Callback that functions the same as `onCellChange`, but is invoked with all changes at once after a bulk edit operation * like paste or (future) fill handle is complete. The payloads are grouped by row ID. */ onBulkCellChange?: ( payload: Map[]> ) => boolean | void }