import { ColumnDefinition, RowActionsConfig, RowAnimationConfig } from '../types'; import { MobileDataTableConfig } from '../hooks/useMobileDataTable'; import { SkeletonVariant } from '../../Skeleton/skeleton.tokens'; export type TableBodyProps> = { currentData: T[]; dataVersion?: number | string; visibleColumns: ColumnDefinition[]; idField: string; tableTitle?: string; selectedRows: Record; editingRows: Record; editValues: Record; expandedRows: Record; enableInlineEdit?: boolean; showActionsColumn?: boolean; enableColumnManager?: boolean; enableRowExpansion?: boolean; enableRowSelection?: boolean; rowSelectionConfig?: { isDisabled?: (row: T, index: number) => boolean; disabledText?: (row: T, index: number) => string; }; rowActions?: RowActionsConfig; columnFreeze?: number; /** Freeze last N columns on the right side (sticky right). */ columnFreezeRight?: number; /** Measured pixel widths of frozen columns (from header ResizeObserver). Used for sticky left offset. */ measuredFrozenWidths?: number[]; mobileConfig?: MobileDataTableConfig; mobileOverflowColumns?: ColumnDefinition[]; onMobileOverflowClick?: (row: T) => void; renderExpandedRow?: (expandedData: { row: T; index: number; isExpanded: boolean; toggleExpansion: () => void; }) => React.ReactNode; isRowExpandable?: (row: T, index: number) => boolean; onRowSelect: (rowId: unknown, rowIndex?: number) => void; onEditRow: (rowId: unknown) => void; onSaveRow: (rowId: unknown) => void; onCancelEdit: (rowId: unknown) => void; onRowExpand: (rowId: unknown) => void; onFieldChange: (rowId: unknown, field: keyof T, value: unknown) => void; onRowClick?: (row: T, index: number) => void; getColumnWidth: (column: ColumnDefinition, index: number) => React.CSSProperties; getRowStyle?: (row: T, index: number) => React.CSSProperties; getDisplayValue?: (value: unknown, column: ColumnDefinition) => unknown; dateLabel?: string; isLoading?: boolean; showSkeleton?: boolean; skeletonVariant?: SkeletonVariant; isRowLoading?: (row: T, index: number) => boolean; focusedCell?: { rowIndex: number; colIndex: number; } | null; onCellFocus?: (rowIndex: number, colIndex: number) => void; enableRowAnimation?: boolean; rowAnimationConfig?: RowAnimationConfig; };