import { type ColumnDef, type FilterFn, type FilterFnOption, type Row, type RowData, type Table, type TableOptions, type TableState } from '@tanstack/table-core';
import type { ReactiveController, ReactiveControllerHost } from 'lit';
/**
 * The grid's static feature set. table-core v9 tree-shakes by feature: an API (and its state slice) exists only when
 * its feature is registered here. Row-model factories, sort/filter/aggregation registries, and reactivity bindings
 * ride along in the same object. Registered function names are the only valid string names in column defs — add the
 * matching `*Fn_*` import here before referencing a new built-in by name.
 *
 * Shared module-level on purpose: factories cache per table instance (via `table._rowModels`), and the bindings
 * object is stateless, so one features object serves every grid on the page.
 */
declare const gridFeatures: {
    coreReactivityFeature: import("@tanstack/table-core/reactivity").TableReactivityBindings;
    rowSortingFeature: import("@tanstack/table-core").TableFeature;
    columnFilteringFeature: import("@tanstack/table-core").TableFeature;
    globalFilteringFeature: import("@tanstack/table-core").TableFeature;
    rowSelectionFeature: import("@tanstack/table-core").TableFeature;
    rowExpandingFeature: import("@tanstack/table-core").TableFeature;
    rowPaginationFeature: import("@tanstack/table-core").TableFeature;
    columnGroupingFeature: import("@tanstack/table-core").TableFeature;
    rowAggregationFeature: import("@tanstack/table-core").TableFeature;
    columnFacetingFeature: import("@tanstack/table-core").TableFeature;
    columnOrderingFeature: import("@tanstack/table-core").TableFeature;
    columnPinningFeature: import("@tanstack/table-core").TableFeature;
    columnVisibilityFeature: import("@tanstack/table-core").TableFeature;
    columnSizingFeature: import("@tanstack/table-core").TableFeature;
    columnResizingFeature: import("@tanstack/table-core").TableFeature;
    sortedRowModel: (table: Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
    filteredRowModel: (table: Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
    paginatedRowModel: (table: Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
    expandedRowModel: (table: Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
    groupedRowModel: (table: Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
    facetedRowModel: (table: Table<any, any>, columnId: string) => () => import("@tanstack/table-core").RowModel<any, any>;
    facetedUniqueValues: (table: Table<import("@tanstack/table-core").TableFeatures, any>, columnId: string) => () => Map<any, number>;
    facetedMinMaxValues: (table: 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: {
        arrIncludesAll: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        arrIncludesSome: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        equalsString: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        includesString: import("@tanstack/table-core").CreatedFilterFn<any, any>;
        inNumberRange: import("@tanstack/table-core").CreatedFilterFn<any, any>;
    };
    aggregationFns: {
        count: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number>;
        extent: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, [(number | Date) | undefined, (number | Date) | undefined]>;
        max: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, (number | Date) | undefined>;
        mean: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number | undefined>;
        median: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number | undefined>;
        min: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, (number | Date) | undefined>;
        sum: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number>;
        unique: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, unknown[]>;
        uniqueCount: import("@tanstack/table-core").AggregationFnDef<any, any, unknown, number>;
    };
};
export type GridFeatures = typeof gridFeatures;
/** Convenience aliases with the grid's feature set pre-applied (v9 threads `TFeatures` through every core type). */
export type GridTable<T extends RowData> = Table<GridFeatures, T>;
export type GridTableState = TableState<GridFeatures>;
export type GridColumnDef<T extends RowData> = ColumnDef<GridFeatures, T>;
export type GridRow<T extends RowData> = Row<GridFeatures, T>;
export type GridFilterFn<T extends RowData> = FilterFn<GridFeatures, T>;
export type GridFilterFnOption<T extends RowData> = FilterFnOption<GridFeatures, T>;
/**
 * A reactive controller owning one `@tanstack/table-core` instance for the host's lifetime. Created once and updated in
 * place via `setOptions()` (create-once/update, like `<wa-chart>` wraps Chart.js) — recreating on data/column change
 * would discard all internal UI state.
 *
 * The controller owns the FULL table state: every slice is passed through the `state` option and every slice's
 * `on[Slice]Change` callback funnels back into the controller's copy (v9 removed the whole-state `onStateChange`
 * option, so ownership is wired per slice). The host overrides the slices it controls each render via
 * `controlledState`; internal slices (e.g. `columnResizing` during a drag) round-trip through the same copy.
 */
export declare class TableController<T extends RowData> implements ReactiveController {
    private host;
    private table;
    private state;
    /**
     * One change handler per registered state slice, created once — a fresh closure per render would look like an
     * option change to table-core every frame. Each applies the updater to the controller's copy (the authoritative
     * value; the table's own atoms lag until the next `setOptions` sync) and schedules a host render.
     */
    private sliceUpdater;
    private changeHandlers;
    constructor(host: ReactiveControllerHost);
    hostDisconnected(): void;
    /** Returns the live table instance, creating it on first call and updating its options on subsequent calls. */
    getTable(options: DataGridTableOptions<T>): GridTable<T>;
    private resolveOptions;
}
/**
 * Internal option bag passed from the component to the controller. `enablePagination` is accepted (and stripped) for
 * symmetry with the host's option assembly; `controlledState` holds the slices the host owns (sorting, rowSelection,
 * pagination, ...).
 */
export type DataGridTableOptions<T extends RowData> = Partial<Omit<TableOptions<GridFeatures, T>, 'features' | 'state'>> & {
    data: T[];
    columns: GridColumnDef<T>[];
    enablePagination?: boolean;
    controlledState?: Partial<GridTableState>;
};
export type { RowData };
