/**
 * Copyright IBM Corp. 2021, 2025
 * SPDX-License-Identifier: MPL-2.0
 */
import Component from '@glimmer/component';
import { TrackedSet } from 'tracked-built-ins';
import { HdsAdvancedTableDensityValues, HdsAdvancedTableVerticalAlignmentValues } from './types.ts';
import HdsAdvancedTableTh from './th';
import HdsAdvancedTableTd from './td';
import type Owner from '@ember/owner';
import type { ComponentLike, WithBoundArgs } from '@glint/template';
import type { HdsAdvancedTableColumn, HdsAdvancedTableDensities, HdsAdvancedTableHorizontalAlignment, HdsAdvancedTableOnSelectionChangeSignature, HdsAdvancedTableSortingFunction, HdsAdvancedTableThSortOrder, HdsAdvancedTableVerticalAlignment, HdsAdvancedTableExpandState, HdsAdvancedTableColumnReorderCallback, HdsAdvancedTableModel } from './types.ts';
import type { HdsAdvancedTableThSelectableSignature } from './th-selectable';
import type { HdsAdvancedTableTrSignature } from './tr';
import type { HdsFilterBarSignature } from '../filter-bar/index';
import type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';
import type HdsIntlService from '../../../services/hds-intl.ts';
export interface YieldedHdsAdvancedTableTr<T> {
    Args: {
        isSelected?: boolean;
        selectionKey?: string;
        selectionAriaLabelSuffix?: string;
        selectableColumnKey?: string;
        sortBySelectedOrder?: HdsAdvancedTableThSortOrder;
        onClickSortBySelected?: HdsAdvancedTableThSelectableSignature['Args']['onClickSortBySelected'];
    };
    Blocks: HdsAdvancedTableTrSignature<T>['Blocks'];
    Element: HdsAdvancedTableTrSignature<T>['Element'];
}
export declare const DENSITIES: HdsAdvancedTableDensities[];
export declare const DEFAULT_DENSITY = HdsAdvancedTableDensityValues.Medium;
export declare const VALIGNMENTS: HdsAdvancedTableVerticalAlignment[];
export declare const DEFAULT_VALIGN = HdsAdvancedTableVerticalAlignmentValues.Top;
export declare const BORDER_WIDTH = 1;
export interface HdsAdvancedTableSignature<T = HdsAdvancedTableModel> {
    Args: {
        align?: HdsAdvancedTableHorizontalAlignment;
        caption?: string;
        columns: HdsAdvancedTableColumn[];
        columnOrder?: string[];
        density?: HdsAdvancedTableDensities;
        identityKey?: string;
        isSelectable?: boolean;
        isStriped?: boolean;
        model: T[];
        reorderedMessageText?: string;
        selectionAriaLabelSuffix?: string;
        sortBy?: string;
        selectableColumnKey?: string;
        sortedMessageText?: string;
        sortOrder?: HdsAdvancedTableThSortOrder;
        valign?: HdsAdvancedTableVerticalAlignment;
        hasReorderableColumns?: boolean;
        hasResizableColumns?: boolean;
        hasStickyHeader?: boolean;
        hasStickyFirstColumn?: boolean;
        childrenKey?: string;
        maxHeight?: string;
        onColumnReorder?: HdsAdvancedTableColumnReorderCallback;
        onColumnResize?: (columnKey: string, newWidth?: string) => void;
        onSelectionChange?: (selection: HdsAdvancedTableOnSelectionChangeSignature) => void;
        onSort?: (sortBy: string, sortOrder: HdsAdvancedTableThSortOrder) => void;
    };
    Blocks: {
        actions?: [
            {
                FilterBar?: ComponentLike<HdsFilterBarSignature>;
            }
        ];
        body?: [
            {
                Td?: WithBoundArgs<typeof HdsAdvancedTableTd, 'align' | 'compositeItem' | 'isCompositeItemDisabled'>;
                Tr?: ComponentLike<YieldedHdsAdvancedTableTr<T>>;
                Th?: WithBoundArgs<typeof HdsAdvancedTableTh, 'compositeItem' | 'isCompositeItemDisabled' | 'depth' | 'isExpandable' | 'isExpanded' | 'isStickyColumnPinned' | 'newLabel' | 'onClickToggle' | 'parentId' | 'scope'>;
                data: T;
                rowIndex?: number | string;
                isOpen?: HdsAdvancedTableExpandState;
            }
        ];
        emptyState?: [];
    };
    Element: HTMLDivElement;
}
export default class HdsAdvancedTable<T = HdsAdvancedTableModel> extends Component<HdsAdvancedTableSignature<T>> {
    readonly hdsIntl: HdsIntlService;
    private _selectAllCheckbox?;
    private _isSelectAllCheckboxSelected?;
    private _tableHeight;
    private _selectableRows;
    private _captionId;
    private _scrollHandler;
    private _dragOverHandler;
    private _resizeObserver;
    private _theadElement;
    private _scrollWrapperElement;
    scrollIndicatorDimensions: {
        bottom: string;
        height: string;
        left: string;
        right: string;
        width: string;
    };
    isStickyColumnPinned: boolean;
    isStickyHeaderPinned: boolean;
    hasPinnedFirstColumn: boolean | undefined;
    reorderedMessageText: string;
    showScrollIndicatorLeft: boolean;
    showScrollIndicatorRight: boolean;
    showScrollIndicatorTop: boolean;
    showScrollIndicatorBottom: boolean;
    stickyColumnOffset: string;
    currentSortBy?: string;
    currentSortOrder: HdsAdvancedTableThSortOrder;
    expandedRowIds: TrackedSet<string>;
    private _setUpScrollWrapper;
    private _setUpThead;
    private _syncSortArgs;
    constructor(owner: Owner, args: HdsAdvancedTableSignature<T>['Args']);
    get childrenKey(): string;
    get hasRowsWithChildren(): boolean;
    get expandableRowIds(): string[];
    get isAllExpanded(): boolean;
    get sortCriteria(): string | HdsAdvancedTableSortingFunction<unknown>;
    get isEmpty(): boolean;
    get identityKey(): string | undefined;
    get hasStickyFirstColumn(): boolean | undefined;
    get sortedMessageText(): string;
    get isSelectable(): boolean;
    get isStriped(): boolean;
    get density(): HdsAdvancedTableDensities;
    get hasStickyHeader(): boolean;
    get valign(): HdsAdvancedTableVerticalAlignment;
    get classNames(): string;
    get theadClassNames(): string;
    asRowData: (source: Record<string, unknown>) => T;
    asScope: (scope: string) => "col" | "row";
    asTr: (comp: unknown) => ComponentLike<YieldedHdsAdvancedTableTr<T>>;
    private _initializeExpandedRows;
    private _runAssertions;
    private _onColumnReorder;
    onSelectionChangeCallback(checkbox?: HdsFormCheckboxBaseSignature['Element'], selectionKey?: string): void;
    toggleExpandAll(): void;
    toggleRow(rowId: string): void;
    onSelectionAllChange(): void;
    onSelectionRowChange(checkbox?: HdsFormCheckboxBaseSignature['Element'], selectionKey?: string): void;
    didInsertSelectAllCheckbox(checkbox: HdsFormCheckboxBaseSignature['Element']): void;
    willDestroySelectAllCheckbox(): void;
    didInsertRowCheckbox(checkbox: HdsFormCheckboxBaseSignature['Element'], selectionKey?: string): void;
    willDestroyRowCheckbox(selectionKey?: string): void;
    setSelectAllState(): void;
    setSortBy(columnKey: HdsAdvancedTableColumn['key']): void;
    private _updateScrollIndicators;
    private _onPinFirstColumn;
}
