import { ReactTable } from "./useTable.js";
import { AggregationFns, Cell, Column, ColumnDef, ColumnHelper, FilterFns, Header, HeaderGroup, Row, RowData, RowModel, SortFns, StockFeatures, Table, TableOptions, TableState } from "@tanstack/table-core";
//#region src/useLegacyTable.d.ts
/**
 * @deprecated Use `createFilteredRowModel()` in the `filteredRowModel` feature slot with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the filtered row model.
 */
declare function getFilteredRowModel<TData extends RowData>(): RowModelFactory<TData>;
/**
 * @deprecated Use `createSortedRowModel()` in the `sortedRowModel` feature slot with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the sorted row model.
 */
declare function getSortedRowModel<TData extends RowData>(): RowModelFactory<TData>;
/**
 * @deprecated Use `createPaginatedRowModel()` with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the paginated row model.
 */
declare function getPaginationRowModel<TData extends RowData>(): RowModelFactory<TData>;
/**
 * @deprecated Use `createExpandedRowModel()` with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the expanded row model.
 */
declare function getExpandedRowModel<TData extends RowData>(): RowModelFactory<TData>;
/**
 * @deprecated Use `createGroupedRowModel()` in the `groupedRowModel` feature slot with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the grouped row model.
 */
declare function getGroupedRowModel<TData extends RowData>(): RowModelFactory<TData>;
/**
 * @deprecated Use `createFacetedRowModel()` with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the faceted row model.
 */
declare function getFacetedRowModel<TData extends RowData>(): FacetedRowModelFactory<TData>;
/**
 * @deprecated Use `createFacetedMinMaxValues()` with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the faceted min/max values.
 */
declare function getFacetedMinMaxValues<TData extends RowData>(): FacetedMinMaxValuesFactory<TData>;
/**
 * @deprecated Use `createFacetedUniqueValues()` with the new `useTable` hook instead.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It acts as a marker to enable the faceted unique values.
 */
declare function getFacetedUniqueValues<TData extends RowData>(): FacetedUniqueValuesFactory<TData>;
/**
 * @deprecated The core row model is always created automatically in v9.
 *
 * This is a stub function for v8 API compatibility with `useLegacyTable`.
 * It does nothing - the core row model is always available.
 */
declare function getCoreRowModel<TData extends RowData>(): RowModelFactory<TData>;
/**
 * Row model factory function type from v8 API
 */
type RowModelFactory<TData extends RowData> = (table: Table<StockFeatures, TData>) => () => RowModel<StockFeatures, TData>;
/**
 * Faceted row model factory function type from v8 API
 */
type FacetedRowModelFactory<TData extends RowData> = (table: Table<StockFeatures, TData>, columnId: string) => () => RowModel<StockFeatures, TData>;
/**
 * Faceted min/max values factory function type from v8 API
 */
type FacetedMinMaxValuesFactory<TData extends RowData> = (table: Table<StockFeatures, TData>, columnId: string) => () => undefined | [number, number];
/**
 * Faceted unique values factory function type from v8 API
 */
type FacetedUniqueValuesFactory<TData extends RowData> = (table: Table<StockFeatures, TData>, columnId: string) => () => Map<any, number>;
/**
 * Legacy v8-style row model options
 */
interface LegacyRowModelOptions<TData extends RowData> {
  /**
   * Returns the core row model for the table.
   * @deprecated This option is no longer needed in v9. The core row model is always created automatically.
   */
  getCoreRowModel?: RowModelFactory<TData>;
  /**
   * Returns the filtered row model for the table.
   * @deprecated Use the `filteredRowModel`/`filterFns` slots on the `features` option with `createFilteredRowModel()` instead.
   */
  getFilteredRowModel?: RowModelFactory<TData>;
  /**
   * Returns the sorted row model for the table.
   * @deprecated Use the `sortedRowModel`/`sortFns` slots on the `features` option with `createSortedRowModel()` instead.
   */
  getSortedRowModel?: RowModelFactory<TData>;
  /**
   * Returns the paginated row model for the table.
   * @deprecated Use the `paginatedRowModel` slot on the `features` option with `createPaginatedRowModel()` instead.
   */
  getPaginationRowModel?: RowModelFactory<TData>;
  /**
   * Returns the expanded row model for the table.
   * @deprecated Use the `expandedRowModel` slot on the `features` option with `createExpandedRowModel()` instead.
   */
  getExpandedRowModel?: RowModelFactory<TData>;
  /**
   * Returns the grouped row model for the table.
   * @deprecated Use `columnGroupingFeature` with the `groupedRowModel` slot and `createGroupedRowModel()` instead. Add `rowAggregationFeature` separately when grouped rows aggregate values.
   */
  getGroupedRowModel?: RowModelFactory<TData>;
  /**
   * Returns the faceted row model for a column.
   * @deprecated Use the `facetedRowModel` slot on the `features` option with `createFacetedRowModel()` instead.
   */
  getFacetedRowModel?: FacetedRowModelFactory<TData>;
  /**
   * Returns the faceted min/max values for a column.
   * @deprecated Use the `facetedMinMaxValues` slot on the `features` option with `createFacetedMinMaxValues()` instead.
   */
  getFacetedMinMaxValues?: FacetedMinMaxValuesFactory<TData>;
  /**
   * Returns the faceted unique values for a column.
   * @deprecated Use the `facetedUniqueValues` slot on the `features` option with `createFacetedUniqueValues()` instead.
   */
  getFacetedUniqueValues?: FacetedUniqueValuesFactory<TData>;
  /**
   * Additional filter functions to apply to the table.
   * @deprecated Use the `filteredRowModel`/`filterFns` slots on the `features` option with `createFilteredRowModel()` instead.
   */
  filterFns?: FilterFns;
  /**
   * Additional sort functions to apply to the table.
   * @deprecated Use the `sortedRowModel`/`sortFns` slots on the `features` option with `createSortedRowModel()` instead.
   */
  sortFns?: SortFns;
  /**
   * Additional aggregation functions to apply to the table.
   * @deprecated Use `rowAggregationFeature` with the `aggregationFns` slot instead. Add `columnGroupingFeature` and `groupedRowModel` only when grouping rows.
   */
  aggregationFns?: AggregationFns;
}
/**
 * Legacy v8-style table options that work with useLegacyTable.
 *
 * This type omits `features` and instead accepts the v8-style
 * `get*RowModel` function options.
 *
 * @deprecated This is a compatibility layer for migrating from v8. Use `useTable` with an explicit `features` option instead.
 */
type LegacyTableOptions<TData extends RowData> = Omit<TableOptions<StockFeatures, TData>, 'features'> & LegacyRowModelOptions<TData>;
/**
 * Legacy table instance type that includes the v8-style `getState()` method.
 *
 * @deprecated Use `useTable` with explicit state selection instead.
 */
type LegacyReactTable<TData extends RowData> = ReactTable<StockFeatures, TData, TableState<StockFeatures>> & {
  /**
   * Returns the current table state.
   * @deprecated In v9, access state directly via `table.state` or use `table.state` for the full state.
   */
  getState: () => TableState<StockFeatures>;
  /**
   * Sets the current table state.
   * @deprecated In v9, access state directly via `table.baseAtoms`
   */
  setState: (state: TableState<StockFeatures>) => void;
};
/** @deprecated Use Column<TFeatures, TData, TValue> with useTable instead. */
type LegacyColumn<TData extends RowData, TValue = unknown> = Column<StockFeatures, TData, TValue>;
/** @deprecated Use Row<TFeatures, TData> with useTable instead. */
type LegacyRow<TData extends RowData> = Row<StockFeatures, TData>;
/** @deprecated Use Cell<TFeatures, TData, TValue> with useTable instead. */
type LegacyCell<TData extends RowData, TValue = unknown> = Cell<StockFeatures, TData, TValue>;
/** @deprecated Use Header<TFeatures, TData, TValue> with useTable instead. */
type LegacyHeader<TData extends RowData, TValue = unknown> = Header<StockFeatures, TData, TValue>;
/** @deprecated Use HeaderGroup<TFeatures, TData> with useTable instead. */
type LegacyHeaderGroup<TData extends RowData> = HeaderGroup<StockFeatures, TData>;
/** @deprecated Use ColumnDef<TFeatures, TData, TValue> with useTable instead. */
type LegacyColumnDef<TData extends RowData, TValue = unknown> = ColumnDef<StockFeatures, TData, TValue>;
/** @deprecated Use Table<TFeatures, TData> with useTable instead. */
type LegacyTable<TData extends RowData> = Table<StockFeatures, TData>;
/**
 * @deprecated Use `createColumnHelper<TFeatures, TData>()` with useTable instead.
 *
 * A column helper with StockFeatures pre-bound for use with useLegacyTable.
 * Only requires TData—no need to specify TFeatures.
 */
declare function legacyCreateColumnHelper<TData extends RowData>(): ColumnHelper<StockFeatures, TData>;
/**
 * @deprecated This hook is provided as a compatibility layer for migrating from TanStack Table v8.
 *
 * Use the new `useTable` hook instead with an explicit `features` option:
 *
 * ```tsx
 * // New v9 API
 * const features = tableFeatures({
 *   columnFilteringFeature,
 *   rowSortingFeature,
 *   rowPaginationFeature,
 *   filteredRowModel: createFilteredRowModel(),
 *   sortedRowModel: createSortedRowModel(),
 *   paginatedRowModel: createPaginatedRowModel(),
 *   filterFns,
 *   sortFns,
 * })
 *
 * const table = useTable({
 *   features,
 *   columns,
 *   data,
 * })
 * ```
 *
 * Key differences from v8:
 * - Features are tree-shakeable - only import what you use
 * - Row models and fn registries are explicitly passed on the `features` option
 * - Use `table.Subscribe` for fine-grained re-renders
 * - State is accessed via `table.state` after selecting with the 2nd argument
 *
 * @param options - Legacy v8-style table options
 * @returns A table instance with the full state subscribed and a `getState()` method
 */
declare function useLegacyTable<TData extends RowData>(options: LegacyTableOptions<TData>): LegacyReactTable<TData>;
//#endregion
export { FacetedMinMaxValuesFactory, FacetedRowModelFactory, FacetedUniqueValuesFactory, LegacyCell, LegacyColumn, LegacyColumnDef, LegacyHeader, LegacyHeaderGroup, LegacyReactTable, LegacyRow, LegacyRowModelOptions, LegacyTable, LegacyTableOptions, RowModelFactory, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getPaginationRowModel, getSortedRowModel, legacyCreateColumnHelper, useLegacyTable };