import type { ReactElement } from "react"; import type { SortDirection } from "./enums"; export declare type Omit = Pick>; export interface Column { /** The name of the column. By default it will be displayed in the header cell */ name: string | ReactElement; /** A unique key to distinguish each column */ key: string; /** Column width. If not specified, it will be determined automatically based on grid width and specified widths of other columns */ width?: number | string; /** Minimum column width in px. */ minWidth?: number; /** Maximum column width in px. */ maxWidth?: number; cellClass?: string | ((row: TRow) => string | undefined); headerCellClass?: string; summaryCellClass?: string | ((row: TSummaryRow) => string); /** Formatter to be used to render the cell content */ formatter?: React.ComponentType>; /** Formatter to be used to render the summary cell content */ summaryFormatter?: React.ComponentType>; /** Formatter to be used to render the group cell content */ groupFormatter?: React.ComponentType>; /** Enables cell editing. If set and no editor property specified, then a textinput will be used as the cell editor */ editable?: boolean | ((row: TRow) => boolean); /** Determines whether column is frozen or not */ frozen?: boolean; /** Enable resizing of a column */ resizable?: boolean; /** Enable sorting of a column */ sortable?: boolean; /** Sets the column sort order to be descending instead of ascending the first time the column is sorted */ sortDescendingFirst?: boolean; /** Editor to be rendered when cell of column is being edited. If set, then the column is automatically set to be editable */ editor?: React.ComponentType>; editorOptions?: { /** @default false */ createPortal?: boolean; /** @default false */ editOnClick?: boolean; /** Prevent default to cancel editing */ onCellKeyDown?: (event: React.KeyboardEvent) => void; /** Control the default cell navigation behavior while the editor is open */ onNavigation?: (event: React.KeyboardEvent) => boolean; }; /** Header renderer for each header cell */ headerRenderer?: React.ComponentType>; /** Component to be used to filter the data of the column */ filterRenderer?: React.ComponentType>; } export interface CalculatedColumn extends Column { idx: number; resizable: boolean; sortable: boolean; frozen: boolean; isLastFrozenColumn: boolean; rowGroup?: boolean; formatter: React.ComponentType>; } export interface ColumnMetric { width: number; left: number; } export interface Position { idx: number; rowIdx: number; } export interface FormatterProps { rowIdx: number; column: CalculatedColumn; row: TRow; isCellSelected: boolean; isRowSelected: boolean; onRowSelectionChange: (checked: boolean, isShiftClick: boolean) => void; onRowChange: (row: Readonly) => void; } export interface SummaryFormatterProps { column: CalculatedColumn; row: TSummaryRow; } export interface GroupFormatterProps { groupKey: unknown; column: CalculatedColumn; childRows: readonly TRow[]; isExpanded: boolean; isCellSelected: boolean; isRowSelected: boolean; onRowSelectionChange: (checked: boolean) => void; toggleGroup: () => void; } export interface SharedEditorProps { row: Readonly; rowHeight: number; editorPortalTarget: Element; onRowChange: (row: Readonly, commitChanges?: boolean) => void; onClose: (commitChanges?: boolean) => void; } export interface EditorProps extends SharedEditorProps { rowIdx: number; column: Readonly>; top: number; left: number; isFromExternalChange: boolean; setIsFromExternalChange: (value: boolean) => void; } export interface HeaderRendererProps { column: CalculatedColumn; sortColumn?: string; sortDirection?: SortDirection; onSort?: (columnKey: string, direction: SortDirection) => void; allRowsSelected: boolean; onAllRowsSelectionChange: (checked: boolean) => void; } interface SelectedCellPropsBase { idx: number; onKeyDown: (event: React.KeyboardEvent) => void; } export interface EditCellProps extends SelectedCellPropsBase { mode: "EDIT"; editorProps: SharedEditorProps; } export interface SelectedCellProps extends SelectedCellPropsBase { mode: "SELECT"; onFocus: () => void; dragHandleProps?: Pick, "onMouseDown" | "onDoubleClick">; } export interface CellRendererProps extends Omit, "style" | "children"> { rowIdx: number; column: CalculatedColumn; row: TRow; isCopied: boolean; isDraggedOver: boolean; isCellSelected: boolean; isRowSelected: boolean; dragHandleProps?: Pick, "onMouseDown" | "onDoubleClick">; onRowChange: (rowIdx: number, newRow: TRow) => void; onRowClick?: (rowIdx: number, row: TRow, column: CalculatedColumn, event?: React.MouseEvent) => void; selectCell: (position: Position, enableEditor?: boolean, shiftKey?: boolean, resetSelection?: boolean) => void; selectRow: (selectRowEvent: SelectRowEvent) => void; } export interface RowRendererProps extends Omit, "style" | "children"> { viewportColumns: readonly CalculatedColumn[]; row: TRow; cellRenderer?: React.ComponentType>; rowIdx: number; copiedCellIdx?: number; draggedOverCellIdx?: number; isRowSelected: boolean; top: number; selectedCellProps?: EditCellProps | SelectedCellProps; onRowChange: (rowIdx: number, row: TRow) => void; onRowClick?: (rowIdx: number, row: TRow, column: CalculatedColumn, event?: React.MouseEvent) => void; rowClass?: (row: TRow) => string | undefined; setDraggedOverRowIdx?: (overRowIdx: number) => void; selectCell: (position: Position, enableEditor?: boolean, shiftKey?: boolean, resetSelection?: boolean) => void; selectRow: (selectRowEvent: SelectRowEvent) => void; isFromExternalChange: boolean; setIsFromExternalChange: (value: boolean) => void; } export interface FilterRendererProps { column: CalculatedColumn; value: TFilterValue; onChange: (value: TFilterValue) => void; } export declare type Filters = Record; export interface RowsChangeData { indexes: number[]; column: CalculatedColumn; } export interface SelectRowEvent { rowIdx: number; checked: boolean; isShiftClick: boolean; } export interface FillEvent { columnKey: string; sourceRow: TRow; targetRows: TRow[]; } export interface PasteEvent { sourceColumnKey: string; sourceRow: TRow; targetColumnKey: string; targetRow: TRow; } export declare type GroupByDictionary = Record; startRowIndex: number; }>; export interface GroupRow { childRows: readonly TRow[]; id: string; parentId: unknown; groupKey: unknown; isExpanded: boolean; level: number; posInSet: number; setSize: number; startRowIndex: number; } export {};