/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @format
 */
import React, { RefObject, CSSProperties } from 'react';
import { Percentage } from '../../utils/widthUtils';
import { DataSourceVirtualizer, DataSourceView, DataSource } from '../../data-source/index';
import { DataTableManager } from './DataTableManager';
import { Formatter } from '../DataFormatter';
type DataTableBaseProps<T = any> = {
    columns: DataTableColumn<T>[];
    enableSearchbar?: boolean;
    enableAutoScroll?: boolean;
    enableHorizontalScroll?: boolean;
    enableColumnHeaders?: boolean;
    enableMultiSelect?: boolean;
    enableContextMenu?: boolean;
    enablePersistSettings?: boolean;
    enableMultiPanels?: boolean;
    scrollable?: boolean;
    extraActions?: React.ReactElement;
    onSelect?(record: T | undefined, records: T[]): void;
    onRowStyle?(record: T): CSSProperties | undefined;
    tableManagerRef?: RefObject<DataTableManager<T> | undefined>;
    virtualizerRef?: RefObject<DataSourceVirtualizer | undefined>;
    onCopyRows?(records: T[]): string;
    onContextMenu?: (selection: undefined | T) => React.ReactElement;
    onRenderEmpty?: null | ((dataView?: DataSourceView<T, T[keyof T]>) => React.ReactElement);
};
export type ItemRenderer<T> = (item: T, selected: boolean, index: number) => React.ReactNode;
type DataTableInput<T = any> = {
    dataSource: DataSource<T, T[keyof T]>;
    viewId?: string;
    records?: undefined;
    recordsKey?: undefined;
} | {
    records: readonly T[];
    recordsKey?: keyof T;
    viewId?: string;
    dataSource?: undefined;
};
export type DataTableColumn<T = any> = {
    key: keyof T & string;
    onRender?: (row: T, selected: boolean, index: number) => React.ReactNode;
    formatters?: Formatter[] | Formatter;
    title?: string;
    width?: number | Percentage | undefined;
    wrap?: boolean;
    align?: 'left' | 'right' | 'center';
    visible?: boolean;
    filters?: {
        label: string;
        value: string;
        enabled: boolean;
        predefined?: boolean;
        strict?: boolean;
        exact?: boolean;
    }[];
    inversed?: boolean;
    sortable?: boolean;
};
export interface TableRowRenderContext<T = any> {
    columns: DataTableColumn<T>[];
    onMouseEnter(e: React.MouseEvent<HTMLDivElement>, item: T, itemId: number): void;
    onMouseDown(e: React.MouseEvent<HTMLDivElement>, item: T, itemId: number): void;
    onRowStyle?(item: T): React.CSSProperties | undefined;
    onContextMenu?(): React.ReactElement;
}
export type DataTableProps<T> = DataTableInput<T> & DataTableBaseProps<T>;
export declare function DataTable<T extends object>(props: DataTableProps<T>): React.ReactElement;
export declare namespace DataTable {
    var defaultProps: Partial<DataTableProps<any>>;
}
export {};
//# sourceMappingURL=DataTable.d.ts.map