import { ColumnDef, RowData, Table, PaginationState, SortingState, ColumnFiltersState, VisibilityState, ColumnPinningState, ColumnOrderState, GroupingState, ExpandedState, RowSelectionState, OnChangeFn, Row, Column, } from "@tanstack/react-table"; // --- Column Meta --- export interface ClientTableColumnMeta { filterType?: "text" | "select" | "boolean" | "date-range"; // Added date-range filterOptions?: { label: string; value: string }[]; serverGroupable?: boolean; // For Pattern 2-B } export type ClientTableColumnDef = ColumnDef & { meta?: ClientTableColumnMeta; }; // --- Fetcher Types --- export interface TableState { pagination: PaginationState; sorting: SortingState; columnFilters: ColumnFiltersState; globalFilter: string; grouping: GroupingState; expanded: ExpandedState; } export interface FetcherResult { data: TData[]; totalRows: number; pageCount?: number; groups?: any[]; // For grouping response } export type TableFetcher = ( state: TableState, additionalArgs?: any ) => Promise>; // --- Component Props --- export interface ClientVirtualTableProps { table: Table; isLoading?: boolean; height?: string | number; estimateRowHeight?: number; className?: string; // UI Features actions?: React.ReactNode; customToolbar?: React.ReactNode; enableExport?: boolean; onExport?: (data: TData[]) => void; // Preset enableUserPreset?: boolean; tableKey?: string; // Styling getRowClassName?: (originalRow: TData, index: number) => string; onRowClick?: (row: Row, event: React.MouseEvent) => void; // Visuals renderHeaderVisualFeedback?: (props: { column: Column; isPinned: boolean | string; isSorted: boolean | string; isFiltered: boolean; isGrouped: boolean; }) => React.ReactNode; }