import { default as React, ReactNode } from 'react';
import { RowData, useReactTable, Row } from '@tanstack/react-table';
import { LargeThemeConfig } from '../themes/index.tsx';
declare module "@tanstack/react-table" {
    interface ColumnMeta<TData extends RowData, TValue> {
        type: string;
        validate: (args: unknown) => string[];
    }
}
export interface ColumnProps {
    Id: string;
    Title: string | ReactNode;
    Type?: string;
    Render?: ({ row, onExpand, onDone, }: {
        row: Row<object>;
        onExpand: () => void;
        onDone: ({ rowId, changedValue, }: {
            rowId: string;
            changedValue: object;
        }) => void;
    }) => ReactNode;
    Fixed?: string | null;
    enableSorting?: boolean;
    enableResizing?: boolean;
    enableHiding?: boolean;
    enablePinning?: boolean;
    enableOrdering?: boolean;
    Width?: number;
    MinWidth?: number;
    MaxWidth?: number;
    Footer?: () => ReactNode;
    Header?: () => ReactNode;
}
export interface ExpandableProps {
    type: string;
    isExpandable: boolean;
    expandEntireRowByClick?: boolean;
    expandedRowKeys?: Array<string>;
    expandedRowRender?: ((row: Row<object>) => React.ReactNode) | null;
}
interface TableOptionProps {
    /**
     * Enables sorting functionality for the all columns
     */
    enableSorting?: boolean;
    /**
     * Enables resizing functionality for the all columns
     */
    enableResizing?: boolean;
    /**
     * Enables hiding functionality for the all columns
     */
    enableHiding?: boolean;
    /**
     * Enables pinning functionality for the all columns
     */
    enablePinning?: boolean;
    /**
     * Enables ordering functionality for the all columns
     */
    enableOrdering?: boolean;
    /**
     * Enables row ordering functionality for the table
     */
    enableRowOrdering?: boolean;
}
export interface TableProps {
    /**
     * Selected items in the table
     */
    selectedItems: Array<string>;
    /**
     * Show or hide the serial number column
     */
    showSerialNumber: boolean;
    /**
     * Show or hide the row selection column
     */
    showRowSelection: boolean;
    /**
     * Array of column properties
     */
    columns: Array<ColumnProps>;
    /**
     * Array of data objects
     */
    datasource: Array<object>;
    /**
     * Empty state component
     */
    emptyState?: ReactNode | undefined;
    /**
     * Callback function when the user makes a change to the table
     */
    onEventUpdate: ({ type, value, }: {
        type: string;
        value: string | object | string[];
    }) => void;
    /**
     * Key of the column to be used as the row key
     */
    rowKey: string;
    /**
     * Expandable props
     */
    expandable?: ExpandableProps;
    /**
     * Callback function to fetch the next page of data when the user reaches the end of the table
     */
    onEndReached: () => void;
    /**
     * Flag to indicate if the table is loading
     */
    loading?: boolean;
    /**
     * Flag to indicate if the table is vitrual
     */
    isVirtual: boolean;
    /**
     * Height of each row
     */
    rowHeight: number;
    /**
     * Table options
     */
    options?: TableOptionProps;
    /**
     * Custom theme for the table
     */
    theme?: LargeThemeConfig;
    /**
     * Its used to get the table id
     */
    tableId?: string;
}
export interface DataTableRef {
    /**
     * Updates the data of the table
     */
    onRowUpdate: ({ rowId, changedValue, }: {
        rowId: string;
        changedValue: object;
    }) => void;
    /**
     * Updates the table data
     */
    updateTableData: ({ type, value, }: {
        type: string;
        value: string | object | string[];
    }) => void;
    /**
     * Updates the validate of the column
     */
    onColumnValidate: ({ columnId }: {
        columnId: string;
    }) => void;
    /**
     * Updates the visibility of the column
     */
    onVisibilityChange: (columnId: string, value: boolean) => void;
    /**
     * Updates the order of the columns
     */
    onColumnDrag: (fromId: string, toId: string) => void;
    /**
     * Updates the order of the rows
     */
    onRowDrag: (fromId: string, toId: string) => void;
    /**
     * Pins or unpins a column
     */
    onPinColumn: (columnId: string, value: boolean) => void;
    /**
     * Selects or deselects all rows
     */
    onAllRowsSelected: (value: boolean) => void;
    /**
     * Selects or deselects a specific row
     */
    onRowSelect: (rowId: string, value: boolean) => void;
    /**
     * Expands or collapses all rows
     */
    onAllRowsExpand: (value: boolean) => void;
    /**
     * Expands or collapses a specific row
     */
    onRowExpand: (rowId: string, value: boolean) => void;
    /**
     * Resets column visibility to the default state
     */
    resetColumnVisibility: (value: boolean) => void;
    /**
     * Returns the current table values
     */
    getTableValues: () => ReturnType<typeof useReactTable>;
    /**
     * Returns the selected row IDs
     */
    getSelectedItems: () => string[];
    /**
     * Returns the expanded row IDs
     */
    getExpandedItems: () => string[];
    /**
     * Returns the current column visibility state
     */
    getHiddenColumns: () => Record<string, boolean>;
}
export declare const DataTable: React.ForwardRefExoticComponent<TableProps & React.RefAttributes<DataTableRef>>;
interface EmptyStateProps {
    emptyState?: ReactNode | undefined;
    colSpan: number;
}
export declare function EmptyState({ emptyState, colSpan }: EmptyStateProps): string | number | true | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element;
export {};
