import { ColumnDefinition, FilterType, RowActionsConfig, SortConfig } from '../types'; import { MobileDataTableConfig } from '../hooks/useMobileDataTable'; export type TableHeaderProps> = { visibleColumns: ColumnDefinition[]; allVisibleColumns?: ColumnDefinition[]; initialColumns: ColumnDefinition[]; selectAll: boolean | 'indeterminate'; sortConfig?: SortConfig | null; enableInlineEdit?: boolean; showActionsColumn?: boolean; /** * Whether filtering is available at all. When false no filter affordance is * rendered, because a filter the user set would be stored and reported * through `onFilterChange` without ever changing the rows. Defaults to true * so rendering TableHeader directly keeps its previous behaviour. */ enableFiltering?: boolean; enableColumnManager?: boolean; enableColumnReordering?: boolean; showSkeleton?: boolean; isLoading?: boolean; columnManagerMaxSelections?: number; columnManagerAlwaysSelected?: string[]; columnManagerPrimaryAction?: { text: string; onClick: (selectedColumns: string[]) => void; disabled?: boolean; loading?: boolean; }; columnManagerSecondaryAction?: { text: string; onClick: () => void; disabled?: boolean; loading?: boolean; }; columnManagerWidth?: number; enableRowExpansion?: boolean; enableRowSelection?: boolean; rowActions?: RowActionsConfig; data?: T[]; columnFreeze?: number; columnFreezeRight?: number; mobileConfig?: MobileDataTableConfig; mobileOverflowColumns?: ColumnDefinition[]; onMobileOverflowClick?: (row: T) => void; onSort: (field: keyof T, sortType?: string) => void; onSortAscending?: (field: keyof T, sortType?: string) => void; onSortDescending?: (field: keyof T, sortType?: string) => void; onSelectAll: (checked: boolean | 'indeterminate') => void; onColumnChange: (columns: ColumnDefinition[]) => void; onColumnReorder?: (columns: ColumnDefinition[]) => void; onColumnFilter?: (field: string, type: FilterType, value: string | string[] | { min: number; max: number; }, operator?: 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'gt' | 'lt' | 'gte' | 'lte' | 'range') => void; columnFilters?: Array<{ field: string; type: FilterType; value: string | string[] | { min: number; max: number; }; operator?: string; }>; onHeaderChange?: (field: keyof T, newHeader: string) => void; onOperations?: (field: keyof T) => void; onInsertLeft?: (field: keyof T) => void; onInsertRight?: (field: keyof T) => void; onDeleteColumn?: (field: keyof T) => void; getColumnWidth: (column: ColumnDefinition, index: number) => React.CSSProperties; /** Measured pixel widths of frozen columns (from ResizeObserver). Used for sticky left offset. */ measuredFrozenWidths?: number[]; /** Called when frozen column header cells are measured so left offsets can use content-based widths. */ onFrozenWidthsMeasured?: (widths: number[]) => void; };