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 }