import { type ColumnPinningState, type ColumnResizeMode, type ColumnSizingState, type ColumnVisibilityState, type Row, type RowData, type RowSelectionState } from '@tanstack/svelte-table';
import { type DataTableFeatures } from './features';
import { type DataTableInstance } from './data-table-utils';
import type { DataTableColumn, DataTableLeafColumn, DataTableColumnMeta } from './types';
export type { DataTableInstance };
export type CreateDataTableOptions<T extends RowData> = {
    data: T[];
    columns: DataTableColumn<T>[];
    columnResizeMode?: ColumnResizeMode;
    initialState?: {
        columnVisibility?: ColumnVisibilityState;
        columnSizing?: ColumnSizingState;
        columnPinning?: ColumnPinningState;
        rowSelection?: RowSelectionState;
        sorting?: {
            id: string;
            desc: boolean;
        }[];
        columnFilters?: {
            id: string;
            value: unknown;
        }[];
    };
    getRowId?: (row: T, index: number, parent?: Row<DataTableFeatures, T>) => string;
    enableRowSelection?: boolean | ((row: Row<DataTableFeatures, T>) => boolean);
    enableMultiRowSelection?: boolean | ((row: Row<DataTableFeatures, T>) => boolean);
    enableSorting?: boolean;
    debugTable?: boolean;
    onColumnVisibilityChange?: (visibility: ColumnVisibilityState) => void;
};
export declare function createTable<T extends RowData>(options: CreateDataTableOptions<T>): import("@tanstack/svelte-table").SvelteTable<{
    rowSortingFeature: import("@tanstack/table-core").TableFeature;
    rowSelectionFeature: import("@tanstack/table-core").TableFeature;
    columnFilteringFeature: import("@tanstack/table-core").TableFeature;
    columnFacetingFeature: import("@tanstack/table-core").TableFeature;
    globalFilteringFeature: import("@tanstack/table-core").TableFeature;
    columnVisibilityFeature: import("@tanstack/table-core").TableFeature;
    columnPinningFeature: import("@tanstack/table-core").TableFeature;
    columnSizingFeature: import("@tanstack/table-core").TableFeature;
    columnResizingFeature: import("@tanstack/table-core").TableFeature;
    sortedRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
    filteredRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
    facetedRowModel: (table: import("@tanstack/table-core").Table<any, any>, columnId: string) => () => import("@tanstack/table-core").RowModel<any, any>;
    facetedUniqueValues: (table: import("@tanstack/table-core").Table<import("@tanstack/table-core").TableFeatures, any>, columnId: string) => () => Map<any, number>;
    facetedMinMaxValues: (table: import("@tanstack/table-core").Table<import("@tanstack/table-core").TableFeatures, any>, columnId: string) => () => undefined | [number, number];
    sortFns: {
        alphanumeric: import("@tanstack/table-core").CreatedSortFn<any, any>;
        alphanumericCaseSensitive: import("@tanstack/table-core").CreatedSortFn<any, any>;
        basic: import("@tanstack/table-core").CreatedSortFn<any, any>;
        datetime: import("@tanstack/table-core").CreatedSortFn<any, any>;
        text: import("@tanstack/table-core").CreatedSortFn<any, any>;
        textCaseSensitive: import("@tanstack/table-core").CreatedSortFn<any, any>;
    };
    filterFns: {
        arrIncludes: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        arrIncludesAll: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        arrHas: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        arrIncludesSome: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        between: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        betweenInclusive: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        empty: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        endsWith: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        equals: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        equalsString: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        equalsStringSensitive: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        inDateRange: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        inNumberRange: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        includesString: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        includesStringSensitive: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        notEmpty: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        startsWith: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        weakEquals: import("@tanstack/table-core").CreatedFilterFn<any, any>;
    };
    columnMeta: DataTableColumnMeta;
}, T, import("@tanstack/table-core").TableState_ColumnFiltering & import("@tanstack/table-core").TableState_ColumnPinning & import("@tanstack/table-core").TableState_ColumnResizing & import("@tanstack/table-core").TableState_ColumnSizing & import("@tanstack/table-core").TableState_ColumnVisibility & import("@tanstack/table-core").TableState_GlobalFiltering & import("@tanstack/table-core").TableState_RowSelection & import("@tanstack/table-core").TableState_RowSorting>;
export declare function getColumnId<T extends RowData>(column: DataTableLeafColumn<T>): string;
