import { Checkbox, FoundationElement } from '@ni/fast-foundation';
import type { TableOptionsResolved as TanStackTableOptionsResolved } from '@tanstack/table-core';
import { TableColumn } from '../table-column/base';
import { TableRowSelectionMode, TableRowSelectionState } from './types';
import type { TableNode, TableActionMenuToggleEventDetail, TableRecord, TableRowSelectionToggleEventDetail, TableRowState, TableValidity, TableSetRecordHierarchyOptions, RowSlotRequestEventDetail } from './types';
import { Virtualizer } from './models/virtualizer';
import { TableLayoutManager } from './models/table-layout-manager';
import type { TableRow } from './components/row';
import type { TableGroupRow } from './components/group-row';
import { KeyboardNavigationManager } from './models/keyboard-navigation-manager';
declare global {
    interface HTMLElementTagNameMap {
        'nimble-table': Table;
    }
}
/**
 * A nimble-styled table.
 */
export declare class Table<TData extends TableRecord = TableRecord> extends FoundationElement {
    idFieldName?: string;
    parentIdFieldName?: string;
    selectionMode: TableRowSelectionMode;
    actionMenusPreserveSelection: boolean;
    /**
     * @internal
     */
    tableData: TableRowState<TData>[];
    /**
     * @internal
     */
    columns: TableColumn[];
    /**
     * @internal
     */
    readonly childItems: Element[];
    /**
     * @internal
     */
    readonly rowElements: (TableRow | TableGroupRow)[];
    /**
     * @internal
     */
    openActionMenuRecordId?: string;
    /**
     * @internal
     */
    canRenderRows: boolean;
    /**
     * @internal
     */
    scrollX: number;
    /**
     * @internal
     */
    rowGridColumns?: string;
    /**
     * @internal
     */
    selectionState: TableRowSelectionState;
    get validity(): TableValidity;
    /**
     * @internal
     */
    get showRowOperationColumn(): boolean;
    /**
     * @internal
     */
    readonly viewport: HTMLElement;
    /**
     * @internal
     */
    readonly selectionCheckbox?: Checkbox;
    /**
     * @internal
     */
    readonly collapseAllButton?: HTMLElement;
    /**
     * @internal
     */
    showCollapseAll: boolean;
    /**
     * @internal
     */
    canHaveCollapsibleRows: boolean;
    /**
     * @internal
     */
    get collapseButtonVisibility(): string;
    /**
     * @internal
     */
    readonly headerRowActionContainer: HTMLElement;
    /**
     * @internal
     */
    readonly rowContainer: HTMLElement;
    /**
     * @internal
     */
    readonly columnHeadersContainer: Element;
    /**
     * @internal
     */
    readonly virtualizer: Virtualizer<TData>;
    /**
     * @internal
     */
    readonly layoutManager: TableLayoutManager<TData>;
    /**
     * @internal
     */
    readonly keyboardNavigationManager: KeyboardNavigationManager<TData>;
    /**
     * @internal
     */
    firstSortedColumn?: TableColumn;
    /**
     * @internal
     */
    visibleColumns: TableColumn[];
    /**
     * @internal
     * This value determines the size of the viewport area when a user has created horizontal scrollable
     * space through a column resize operation.
     */
    tableScrollableMinWidth: number;
    windowShiftKeyDown: boolean;
    /**
     * @internal
     */
    get rowHeight(): number;
    private readonly table;
    private options;
    private readonly tableValidator;
    private readonly tableUpdateTracker;
    private readonly selectionManager;
    private dataHierarchyManager?;
    private readonly expansionManager;
    private columnNotifiers;
    private readonly layoutManagerNotifier;
    private _rowHeight;
    private isInitialized;
    private ignoreSelectionChangeEvents;
    private readonly requestedSlots;
    private readonly borderWidthSubscriber;
    private readonly controlHeightSubscriber;
    private actionMenuSlots;
    constructor();
    setData(newData: readonly TData[]): Promise<void>;
    getSelectedRecordIds(): Promise<string[]>;
    setSelectedRecordIds(recordIds: readonly string[]): Promise<void>;
    setRecordHierarchyOptions(hierarchyOptions: TableSetRecordHierarchyOptions[]): Promise<void>;
    connectedCallback(): void;
    disconnectedCallback(): void;
    checkValidity(): boolean;
    /**
     * @internal
     *
     * The event handler that is called when a notifier detects a change. Notifiers are added
     * to each column, so `source` is expected to be an instance of `TableColumn`, and `args`
     * is the string name of the property that changed on that column.
     */
    handleChange(source: unknown, args: unknown): void;
    /** @internal */
    onRowSelectionToggle(rowIndex: number, event: CustomEvent<TableRowSelectionToggleEventDetail>): void;
    /** @internal */
    onRowClick(rowIndex: number, event: MouseEvent): boolean;
    /** @internal */
    onRowFocusIn(event: FocusEvent): void;
    /** @internal */
    onRowBlur(event: FocusEvent): void;
    /** @internal */
    onAllRowsSelectionChange(event: CustomEvent): void;
    /** @internal */
    onRowActionMenuBeforeToggle(rowIndex: number, event: CustomEvent<TableActionMenuToggleEventDetail>): void;
    /** @internal */
    onRowActionMenuToggle(event: CustomEvent<TableActionMenuToggleEventDetail>): void;
    /** @internal */
    onRowSlotsRequest(event: CustomEvent<RowSlotRequestEventDetail>): void;
    /** @internal */
    handleCollapseAllRows(): void;
    /** @internal */
    onRightDividerPointerDown(event: PointerEvent, columnIndex: number): void;
    /** @internal */
    onLeftDividerPointerDown(event: PointerEvent, columnIndex: number): void;
    /** @internal */
    getLeftDividerIndex(columnIndex: number): number;
    /** @internal */
    getRightDividerIndex(columnIndex: number): number;
    /** @internal */
    handleGroupRowExpanded(rowIndex: number, event: Event): void;
    /** @internal */
    handleRowExpanded(rowIndex: number): void;
    /**
     * @internal
     */
    toggleColumnSort(column: TableColumn, allowMultiSort: boolean): void;
    /**
     * @internal
     */
    onHeaderKeyDown(column: TableColumn, event: KeyboardEvent): boolean;
    /**
     * @internal
     */
    update(): void;
    get ariaMultiSelectable(): 'true' | 'false' | null;
    /**
     * @internal
     */
    getHeaderContainerElements(): NodeListOf<Element>;
    /**
     * @internal
     */
    calculateTanStackData(data: readonly TData[]): Partial<TanStackTableOptionsResolved<TableNode<TData>>>;
    protected selectionModeChanged(_prev: string | undefined, _next: string | undefined): void;
    protected actionMenusPreserveSelectionChanged(_prev: boolean, _next: boolean): void;
    protected idFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
    protected parentIdFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
    protected columnsChanged(_prev: TableColumn[] | undefined, _next: TableColumn[]): void;
    private updateRequestedSlotsForOpeningActionMenu;
    private handleActionMenuBeforeToggleEvent;
    private handleRowActionMenuToggleEvent;
    private getActionMenuToggleEventDetail;
    private readonly onViewPortScroll;
    private readonly onKeyDown;
    private readonly onKeyUp;
    private readonly onBlur;
    private removeColumnObservers;
    private initialize;
    private processPendingUpdates;
    private observeColumns;
    private getColumnsParticipatingInSorting;
    private getColumnsParticipatingInGrouping;
    private childItemsChanged;
    private updateColumnsFromChildItems;
    private updateTanStack;
    private updateActionMenuSlots;
    private validate;
    private validateWithData;
    private emitColumnConfigurationChangeEvent;
    private emitSelectionChangeEvent;
    private selectionStateChanged;
    private selectionCheckboxChanged;
    private setSelectionCheckboxState;
    private isHierarchyEnabled;
    private refreshRows;
    private getRequestedSlotsByRecordId;
    private getTableSelectionState;
    private getRowSelectionState;
    private getGroupedRowSelectionState;
    private getGroupRowColumn;
    private updateTableOptions;
    private readonly getRowCanExpand;
    private readonly getIsRowExpanded;
    private readonly handleRowSelectionChange;
    private readonly handleExpandedChange;
    private toggleRowExpanded;
    private calculateTanStackSortState;
    private calculateTanStackGroupingState;
    private calculateTanStackRowIdFunction;
    private calculateTanStackColumns;
    private calculateTanStackSelectionState;
    private updateRowHeight;
}
export declare const tableTag = "nimble-table";
