import type { IElementRef, OnCreate, OnDestroy, OnRender, OnPropertyChange } from '@melodicdev/core';
import type { TableColumn, SortDirection } from './table.types.js';
/**
 * ml-table - Data table with sorting, selection, and custom cell rendering
 *
 * @example
 * ```html
 * <ml-table .columns=${columns} .rows=${rows} striped hoverable></ml-table>
 * ```
 *
 * @fires ml:sort - Emitted when a sortable column header is clicked. Detail: { key, direction }
 * @fires ml:select - Emitted when row selection changes. Detail: { selectedRows, allSelected }
 * @fires ml:row-click - Emitted when a row is clicked. Detail: { row, index }
 *
 * @slot footer - Content for the table footer area (e.g. pagination)
 * @slot header-actions - Actions placed in the header next to title/description
 */
export declare class TableComponent implements IElementRef, OnCreate, OnDestroy, OnRender, OnPropertyChange {
    elementRef: HTMLElement;
    /** Whether a row-click listener is attached (auto-detected) */
    _rowClickable: boolean;
    /** Whether the footer slot has content */
    hasFooter: boolean;
    /** Whether the header-actions slot has content */
    hasHeaderActions: boolean;
    /** Enable row selection via checkboxes */
    selectable: boolean;
    /** Alternating row backgrounds */
    striped: boolean;
    /** Highlight rows on hover */
    hoverable: boolean;
    /** Sticky table header */
    stickyHeader: boolean;
    /** Table size */
    size: 'sm' | 'md';
    /** Table header title */
    tableTitle: string;
    /** Table header description */
    description: string;
    /** Enable virtual scrolling (renders only visible rows) */
    virtual: boolean;
    /** Column definitions */
    columns: TableColumn[];
    /** Row data */
    rows: Record<string, unknown>[];
    /** Currently sorted column key */
    sortKey: string;
    /** Current sort direction */
    sortDirection: SortDirection;
    /** Indices of selected rows */
    selectedIndices: number[];
    startIndex: number;
    endIndex: number;
    private _scroller;
    private _viewport;
    get rowHeight(): number;
    onPropertyChange(name: string, _oldVal: unknown, _newVal: unknown): void;
    onInit(): void;
    onCreate(): void;
    onRender(): void;
    onDestroy(): void;
    private _attachScroller;
    /** Rows sorted by current sort key/direction */
    get sortedRows(): Record<string, unknown>[];
    get visibleRows(): Record<string, unknown>[];
    get topSpacerHeight(): number;
    get bottomSpacerHeight(): number;
    get colCount(): number;
    get allSelected(): boolean;
    get someSelected(): boolean;
    isRowSelected: (index: number) => boolean;
    handleSort: (column: TableColumn) => void;
    handleSelectAll: () => void;
    handleSelectRow: (index: number, event: Event) => void;
    handleRowClick: (row: Record<string, unknown>, index: number) => void;
    private emitSelect;
}
//# sourceMappingURL=table.component.d.ts.map